From 2f1ec7401ce9424cf70c818f04bf7dc4a3aec0a8 Mon Sep 17 00:00:00 2001 From: iCrawl Date: Wed, 17 Aug 2022 21:12:09 +0200 Subject: [PATCH 001/155] feat: table of contents / method visibility / property modifiers --- .../website/src/components/CodeListing.tsx | 29 ++++----- .../website/src/components/MethodItem.tsx | 15 ++++- .../website/src/components/MethodList.tsx | 5 +- .../website/src/components/PropertyList.tsx | 8 +-- packages/website/src/components/Section.tsx | 2 +- packages/website/src/components/Sections.tsx | 13 +++- .../website/src/components/SidebarItems.tsx | 2 +- .../website/src/components/SidebarLayout.tsx | 36 ++++++----- .../src/components/TableOfContentsItems.tsx | 61 +++++++++++++++++++ .../website/src/components/model/Function.tsx | 2 +- packages/website/src/pages/docs/[...slug].tsx | 2 +- packages/website/src/util/parse.server.ts | 6 +- 12 files changed, 130 insertions(+), 51 deletions(-) create mode 100644 packages/website/src/components/TableOfContentsItems.tsx diff --git a/packages/website/src/components/CodeListing.tsx b/packages/website/src/components/CodeListing.tsx index 64bf0a2fbc90..359bd86486c9 100644 --- a/packages/website/src/components/CodeListing.tsx +++ b/packages/website/src/components/CodeListing.tsx @@ -1,10 +1,8 @@ -import { Group, Stack, Title } from '@mantine/core'; +import { Badge, Group, Stack, Title } from '@mantine/core'; import type { ReactNode } from 'react'; import { HyperlinkedText } from './HyperlinkedText'; import { TSDoc } from './tsdoc/TSDoc'; -import type { DocItem } from '~/DocModel/DocItem'; -import type { AnyDocNodeJSON } from '~/DocModel/comment/CommentNode'; -import type { TokenDocumentation } from '~/util/parse.server'; +import type { DocProperty } from '~/DocModel/DocProperty'; export enum CodeListingSeparatorType { Type = ':', @@ -12,35 +10,30 @@ export enum CodeListingSeparatorType { } export function CodeListing({ - name, + prop, separator = CodeListingSeparatorType.Type, - summary, - typeTokens, children, - comment, }: { - name: string; - summary?: ReturnType['summary']; - typeTokens: TokenDocumentation[]; + prop: ReturnType; separator?: CodeListingSeparatorType; children?: ReactNode; - className?: string | undefined; - comment?: AnyDocNodeJSON | null; }) { return ( - + + {prop.readonly ? Readonly : null} + {prop.optional ? Optional : null} - {name} + {prop.name} {separator} - <HyperlinkedText tokens={typeTokens} /> + <HyperlinkedText tokens={prop.propertyTypeTokens} /> - {summary && } - {comment && } + {prop.summary && } + {prop.comment && } {children} diff --git a/packages/website/src/components/MethodItem.tsx b/packages/website/src/components/MethodItem.tsx index 9be37effce59..2025326174c3 100644 --- a/packages/website/src/components/MethodItem.tsx +++ b/packages/website/src/components/MethodItem.tsx @@ -1,9 +1,10 @@ -import { Group, Stack, Title } from '@mantine/core'; +import { Badge, Group, Stack, Title } from '@mantine/core'; import { HyperlinkedText } from './HyperlinkedText'; import { ParameterTable } from './ParameterTable'; import { TSDoc } from './tsdoc/TSDoc'; import type { DocMethod } from '~/DocModel/DocMethod'; import type { DocMethodSignature } from '~/DocModel/DocMethodSignature'; +import { Visibility } from '~/DocModel/Visibility'; type MethodResolvable = ReturnType | ReturnType; @@ -18,11 +19,21 @@ function getShorthandName(data: MethodResolvable) { } export function MethodItem({ data }: { data: MethodResolvable }) { + const method = data as ReturnType; + return ( - + 1 ? `:${data.overloadIndex}` : ''}`} + className="scroll-mt-30" + spacing="xs" + > + {data.kind === 'Method' && method.visibility === Visibility.Protected ? ( + Protected + ) : null} + {data.kind === 'Method' && method.static ? Static : null} {`${getShorthandName(data)}`} : diff --git a/packages/website/src/components/MethodList.tsx b/packages/website/src/components/MethodList.tsx index 3358fc3af653..bab7d7a63ac5 100644 --- a/packages/website/src/components/MethodList.tsx +++ b/packages/website/src/components/MethodList.tsx @@ -12,7 +12,10 @@ export function MethodList({ <Stack> {data.map((method) => ( <> - <MethodItem key={method.name} data={method} /> + <MethodItem + key={`${method.name}${method.overloadIndex && method.overloadIndex > 1 ? `:${method.overloadIndex}` : ''}`} + data={method} + /> <Divider className="bg-gray-100" size="md" /> </> ))} diff --git a/packages/website/src/components/PropertyList.tsx b/packages/website/src/components/PropertyList.tsx index 673efba7569f..d99085a81a28 100644 --- a/packages/website/src/components/PropertyList.tsx +++ b/packages/website/src/components/PropertyList.tsx @@ -6,13 +6,7 @@ export function PropertyList({ data }: { data: ReturnType<DocProperty['toJSON']> return ( <Stack> {data.map((prop) => ( - <CodeListing - key={prop.name} - name={prop.name} - typeTokens={prop.propertyTypeTokens} - summary={prop.summary} - comment={prop.comment} - /> + <CodeListing key={prop.name} prop={prop} /> ))} </Stack> ); diff --git a/packages/website/src/components/Section.tsx b/packages/website/src/components/Section.tsx index 4df3ff211bb5..a3fbd090507c 100644 --- a/packages/website/src/components/Section.tsx +++ b/packages/website/src/components/Section.tsx @@ -11,7 +11,7 @@ const useStyles = createStyles((theme, { opened }: { opened: boolean }) => ({ fontSize: theme.fontSizes.sm, '&:hover': { - backgroundColor: theme.colorScheme === 'dark' ? theme.colors.dark![7] : theme.colors.gray![0], + backgroundColor: theme.colorScheme === 'dark' ? theme.colors.dark![6] : theme.colors.gray![0], color: theme.colorScheme === 'dark' ? theme.white : theme.black, }, }, diff --git a/packages/website/src/components/Sections.tsx b/packages/website/src/components/Sections.tsx index 11a1619cd8ac..0ab792c05486 100644 --- a/packages/website/src/components/Sections.tsx +++ b/packages/website/src/components/Sections.tsx @@ -4,10 +4,15 @@ import { MethodList } from './MethodList'; import { ParameterTable } from './ParameterTable'; import { PropertyList } from './PropertyList'; import { Section } from './Section'; +import type { DocClass } from '~/DocModel/DocClass'; import type { DocInterface } from '~/DocModel/DocInterface'; import type { ParameterDocumentation } from '~/util/parse.server'; -export function PropertiesSection({ data }: { data: ReturnType<DocInterface['toJSON']>['properties'] }) { +export function PropertiesSection({ + data, +}: { + data: ReturnType<DocClass['toJSON']>['properties'] | ReturnType<DocInterface['toJSON']>['properties']; +}) { const matches = useMediaQuery('(max-width: 768px)', true, { getInitialValueInEffect: false }); return data.length ? ( @@ -17,7 +22,11 @@ export function PropertiesSection({ data }: { data: ReturnType<DocInterface['toJ ) : null; } -export function MethodsSection({ data }: { data: ReturnType<DocInterface['toJSON']>['methods'] }) { +export function MethodsSection({ + data, +}: { + data: ReturnType<DocClass['toJSON']>['methods'] | ReturnType<DocInterface['toJSON']>['methods']; +}) { const matches = useMediaQuery('(max-width: 768px)', true, { getInitialValueInEffect: false }); return data.length ? ( diff --git a/packages/website/src/components/SidebarItems.tsx b/packages/website/src/components/SidebarItems.tsx index 096912771fbc..7d4022e7cd30 100644 --- a/packages/website/src/components/SidebarItems.tsx +++ b/packages/website/src/components/SidebarItems.tsx @@ -77,7 +77,7 @@ const useStyles = createStyles((theme) => ({ borderLeft: `1px solid ${theme.colorScheme === 'dark' ? theme.colors.dark![4] : theme.colors.gray![3]}`, '&:hover': { - backgroundColor: theme.colorScheme === 'dark' ? theme.colors.dark![7] : theme.colors.gray![0], + backgroundColor: theme.colorScheme === 'dark' ? theme.colors.dark![6] : theme.colors.gray![0], color: theme.colorScheme === 'dark' ? theme.white : theme.black, }, }, diff --git a/packages/website/src/components/SidebarLayout.tsx b/packages/website/src/components/SidebarLayout.tsx index 5c7cfa4470d0..8e7868464595 100644 --- a/packages/website/src/components/SidebarLayout.tsx +++ b/packages/website/src/components/SidebarLayout.tsx @@ -3,7 +3,7 @@ import { AppShell, Navbar, MediaQuery, - // Aside, + Aside, Header, Burger, Anchor, @@ -26,6 +26,8 @@ import { type PropsWithChildren, useState } from 'react'; import { VscChevronDown, VscPackage } from 'react-icons/vsc'; import { WiDaySunny, WiNightClear } from 'react-icons/wi'; import { SidebarItems } from './SidebarItems'; +import { TableOfContentsItems } from './TableOfContentsItems'; +import type { DocClass } from '~/DocModel/DocClass'; import type { DocItem } from '~/DocModel/DocItem'; import type { findMember } from '~/util/model.server'; import type { getMembers } from '~/util/parse.server'; @@ -59,7 +61,7 @@ const useStyles = createStyles((theme, { opened }: { opened: boolean }) => ({ color: theme.colorScheme === 'dark' ? theme.colors.dark![0] : theme.black, '&:hover': { - backgroundColor: theme.colorScheme === 'dark' ? theme.colors.dark![7] : theme.colors.gray![0], + backgroundColor: theme.colorScheme === 'dark' ? theme.colors.dark![6] : theme.colors.gray![0], color: theme.colorScheme === 'dark' ? theme.white : theme.black, }, }, @@ -153,19 +155,21 @@ export function SidebarLayout({ packageName, data, children }: PropsWithChildren ) : null} </Navbar> } - // aside={ - // packageName && data?.member ? ( - // <MediaQuery smallerThan="sm" styles={{ display: 'none' }}> - // <Aside hiddenBreakpoint="sm" width={{ sm: 200, lg: 300 }}> - // <ScrollArea p="xs"> - // <SidebarItems members={data.members} /> - // </ScrollArea> - // </Aside> - // </MediaQuery> - // ) : ( - // <></> - // ) - // } + aside={ + packageName && data?.member && data.member.kind === 'Class' ? ( + <MediaQuery smallerThan="sm" styles={{ display: 'none' }}> + <Aside hiddenBreakpoint="sm" width={{ sm: 200, lg: 300 }}> + <ScrollArea p="xs"> + <TableOfContentsItems + members={(data.member as unknown as ReturnType<DocClass['toJSON']>).methods} + ></TableOfContentsItems> + </ScrollArea> + </Aside> + </MediaQuery> + ) : ( + <></> + ) + } // footer={ // <Footer height={60} p="md"> // Application footer @@ -195,7 +199,7 @@ export function SidebarLayout({ packageName, data, children }: PropsWithChildren onClick={() => toggleColorScheme()} title="Toggle color scheme" > - {dark ? <WiDaySunny size={18} /> : <WiNightClear size={18} />} + {dark ? <WiDaySunny size={20} /> : <WiNightClear size={20} />} </ActionIcon> </Box> </Header> diff --git a/packages/website/src/components/TableOfContentsItems.tsx b/packages/website/src/components/TableOfContentsItems.tsx new file mode 100644 index 000000000000..c47c512cb1cb --- /dev/null +++ b/packages/website/src/components/TableOfContentsItems.tsx @@ -0,0 +1,61 @@ +import { createStyles, Group, Text, Box } from '@mantine/core'; +import { VscListSelection } from 'react-icons/vsc'; +import type { DocClass } from '~/DocModel/DocClass'; +import type { DocInterface } from '~/DocModel/DocInterface'; + +const useStyles = createStyles((theme) => ({ + // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment + link: { + ...theme.fn.focusStyles(), + display: 'block', + textDecoration: 'none', + color: theme.colorScheme === 'dark' ? theme.colors.dark![0] : theme.black, + lineHeight: 1.2, + fontSize: theme.fontSizes.sm, + padding: theme.spacing.xs, + paddingLeft: theme.spacing.md, + marginLeft: 8, + borderTopRightRadius: theme.radius.sm, + borderBottomRightRadius: theme.radius.sm, + borderLeft: `1px solid ${theme.colorScheme === 'dark' ? theme.colors.dark![4] : theme.colors.gray![3]}`, + + '&:hover': { + backgroundColor: theme.colorScheme === 'dark' ? theme.colors.dark![6] : theme.colors.gray![0], + }, + }, +})); + +export function TableOfContentsItems({ + members, +}: { + members: ReturnType<DocClass['toJSON']>['methods'] | ReturnType<DocInterface['toJSON']>['methods']; +}) { + const { classes } = useStyles(); + + const items = members.map((member) => { + const key = `${member.name}${member.overloadIndex && member.overloadIndex > 1 ? `:${member.overloadIndex}` : ''}`; + + return ( + <Box<'a'> key={key} href={`#${key}`} component="a" className={classes.link}> + <Group> + <Text className="line-clamp-1 text-ellipsis overflow-hidden">{member.name}</Text> + {member.overloadIndex && member.overloadIndex > 1 ? ( + <Text size="xs" color="dimmed"> + {member.overloadIndex} + </Text> + ) : null} + </Group> + </Box> + ); + }); + + return ( + <Box> + <Group mb="md"> + <VscListSelection size={20} /> + <Text>Table of contents</Text> + </Group> + {items} + </Box> + ); +} diff --git a/packages/website/src/components/model/Function.tsx b/packages/website/src/components/model/Function.tsx index 84927210019e..382b2866caab 100644 --- a/packages/website/src/components/model/Function.tsx +++ b/packages/website/src/components/model/Function.tsx @@ -5,7 +5,7 @@ import type { DocFunction } from '~/DocModel/DocFunction'; export function Function({ data }: { data: ReturnType<DocFunction['toJSON']> }) { return ( <DocContainer - name={`${data.name}${data.overloadIndex ? ` (${data.overloadIndex})` : ''}`} + name={`${data.name}${data.overloadIndex && data.overloadIndex > 1 ? ` (${data.overloadIndex})` : ''}`} kind={data.kind} excerpt={data.excerpt} summary={data.summary} diff --git a/packages/website/src/pages/docs/[...slug].tsx b/packages/website/src/pages/docs/[...slug].tsx index 21e24a8f6738..fb3f06416d37 100644 --- a/packages/website/src/pages/docs/[...slug].tsx +++ b/packages/website/src/pages/docs/[...slug].tsx @@ -53,7 +53,7 @@ export const getStaticPaths: GetStaticPaths = async () => { // causing next.js export to error .filter((member) => member.name !== 'RESTEvents') .map((member) => { - if (member.kind === 'Function' && member.overloadIndex) { + if (member.kind === 'Function' && member.overloadIndex && member.overloadIndex > 1) { return { params: { slug: ['main', 'packages', packageName, `${member.name}:${member.overloadIndex}`], diff --git a/packages/website/src/util/parse.server.ts b/packages/website/src/util/parse.server.ts index 64534551a901..47c06966fb99 100644 --- a/packages/website/src/util/parse.server.ts +++ b/packages/website/src/util/parse.server.ts @@ -34,7 +34,11 @@ export function generatePath(items: readonly ApiItem[]) { path += `${item.displayName}/`; break; case ApiItemKind.Function: - path += `${item.displayName}:${(item as ApiFunction).overloadIndex}/`; + // eslint-disable-next-line no-case-declarations + const functionItem = item as ApiFunction; + path += `${functionItem.displayName}${ + functionItem.overloadIndex && functionItem.overloadIndex > 1 ? `:${functionItem.overloadIndex}` : '' + }:/`; break; default: path += `${item.displayName}/`; From e147c5bd64fc9ba233d7eaa1ba2962be3cb74ee7 Mon Sep 17 00:00:00 2001 From: iCrawl <buechler.noel@outlook.com> Date: Wed, 17 Aug 2022 21:24:38 +0200 Subject: [PATCH 002/155] fix: codelisting --- .../website/src/components/CodeListing.tsx | 32 +++++++++++++------ .../website/src/components/PropertyList.tsx | 10 +++++- 2 files changed, 31 insertions(+), 11 deletions(-) diff --git a/packages/website/src/components/CodeListing.tsx b/packages/website/src/components/CodeListing.tsx index 359bd86486c9..3a3ccd55414e 100644 --- a/packages/website/src/components/CodeListing.tsx +++ b/packages/website/src/components/CodeListing.tsx @@ -2,7 +2,9 @@ import { Badge, Group, Stack, Title } from '@mantine/core'; import type { ReactNode } from 'react'; import { HyperlinkedText } from './HyperlinkedText'; import { TSDoc } from './tsdoc/TSDoc'; -import type { DocProperty } from '~/DocModel/DocProperty'; +import type { DocItem } from '~/DocModel/DocItem'; +import type { AnyDocNodeJSON } from '~/DocModel/comment/CommentNode'; +import type { TokenDocumentation } from '~/util/parse.server'; export enum CodeListingSeparatorType { Type = ':', @@ -10,30 +12,40 @@ export enum CodeListingSeparatorType { } export function CodeListing({ - prop, + name, separator = CodeListingSeparatorType.Type, + typeTokens, + readonly = false, + optional = false, + summary, + comment, children, }: { - prop: ReturnType<DocProperty['toJSON']>; + name: string; separator?: CodeListingSeparatorType; + typeTokens: TokenDocumentation[]; + readonly?: boolean; + optional?: boolean; + summary?: ReturnType<DocItem['toJSON']>['summary']; + comment?: AnyDocNodeJSON | null; children?: ReactNode; }) { return ( - <Stack spacing="xs" key={prop.name}> + <Stack spacing="xs" key={name}> <Group> - {prop.readonly ? <Badge variant="filled">Readonly</Badge> : null} - {prop.optional ? <Badge variant="filled">Optional</Badge> : null} + {readonly ? <Badge variant="filled">Readonly</Badge> : null} + {optional ? <Badge variant="filled">Optional</Badge> : null} <Title order={4} className="font-mono"> - {prop.name} + {name} {separator} - <HyperlinkedText tokens={prop.propertyTypeTokens} /> + <HyperlinkedText tokens={typeTokens} /> - {prop.summary && } - {prop.comment && } + {summary && } + {comment && } {children} diff --git a/packages/website/src/components/PropertyList.tsx b/packages/website/src/components/PropertyList.tsx index d99085a81a28..ecfb1f06babf 100644 --- a/packages/website/src/components/PropertyList.tsx +++ b/packages/website/src/components/PropertyList.tsx @@ -6,7 +6,15 @@ export function PropertyList({ data }: { data: ReturnType return ( {data.map((prop) => ( - + ))} ); From 0be85fd101509203f2641f5b16748189f7f0e3e2 Mon Sep 17 00:00:00 2001 From: Suneet Tipirneni <77477100+suneettipirneni@users.noreply.github.com> Date: Wed, 17 Aug 2022 15:51:29 -0400 Subject: [PATCH 003/155] feat(website): render `@deprecated` and `@remarks` blocks (#8511) --- packages/website/src/DocModel/DocItem.ts | 5 +++++ .../src/DocModel/comment/RootComment.ts | 2 ++ .../website/src/components/CodeListing.tsx | 13 +++++++++---- packages/website/src/components/MethodItem.tsx | 10 +++++++--- .../website/src/components/PropertyList.tsx | 1 + .../src/components/tsdoc/BlockComment.tsx | 18 ++++++++++++++++++ .../website/src/components/tsdoc/TSDoc.tsx | 2 +- 7 files changed, 43 insertions(+), 8 deletions(-) diff --git a/packages/website/src/DocModel/DocItem.ts b/packages/website/src/DocModel/DocItem.ts index e11a337e00eb..c6e6c5afec9e 100644 --- a/packages/website/src/DocModel/DocItem.ts +++ b/packages/website/src/DocModel/DocItem.ts @@ -17,6 +17,7 @@ export class DocItem { public readonly kind: string; public readonly remarks: DocNodeContainerJSON | null; public readonly summary: DocNodeContainerJSON | null; + public readonly deprecated: DocNodeContainerJSON | null; public readonly containerKey: string; public readonly comment: AnyDocNodeJSON | null; @@ -34,6 +35,9 @@ export class DocItem { this.summary = item.tsdocComment?.summarySection ? (createCommentNode(item.tsdocComment.summarySection, model, item.parent) as DocNodeContainerJSON) : null; + this.deprecated = item.tsdocComment?.deprecatedBlock + ? (createCommentNode(item.tsdocComment.deprecatedBlock, model, item.parent) as DocNodeContainerJSON) + : null; this.containerKey = item.containerKey; this.comment = item.tsdocComment ? createCommentNode(item.tsdocComment, model, item.parent) : null; } @@ -63,6 +67,7 @@ export class DocItem { excerptTokens: this.excerptTokens, kind: this.kind, remarks: this.remarks, + deprecated: this.deprecated, path: this.path, containerKey: this.containerKey, comment: this.comment, diff --git a/packages/website/src/DocModel/comment/RootComment.ts b/packages/website/src/DocModel/comment/RootComment.ts index 5ac2a4a1554b..459fc940bf4b 100644 --- a/packages/website/src/DocModel/comment/RootComment.ts +++ b/packages/website/src/DocModel/comment/RootComment.ts @@ -7,6 +7,7 @@ import { DocNodeJSON, node } from './CommentNode'; export interface DocCommentJSON extends DocNodeJSON { summary: DocNodeJSON[]; remarks: DocNodeJSON[]; + deprecated: DocNodeJSON[]; customBlocks: DocBlockJSON[]; } @@ -15,6 +16,7 @@ export function comment(comment: DocComment, model: ApiModel, parentItem?: ApiIt ...node(comment), summary: comment.summarySection.nodes.map((node) => createCommentNode(node, model, parentItem)), remarks: comment.remarksBlock?.content.nodes.map((node) => createCommentNode(node, model, parentItem)) ?? [], + deprecated: comment.deprecatedBlock?.content.nodes.map((node) => createCommentNode(node, model, parentItem)) ?? [], customBlocks: comment.customBlocks.map((_block) => block(_block, model, parentItem)), }; } diff --git a/packages/website/src/components/CodeListing.tsx b/packages/website/src/components/CodeListing.tsx index 3a3ccd55414e..f5b5469b8bd5 100644 --- a/packages/website/src/components/CodeListing.tsx +++ b/packages/website/src/components/CodeListing.tsx @@ -18,8 +18,9 @@ export function CodeListing({ readonly = false, optional = false, summary, - comment, children, + comment, + deprecation, }: { name: string; separator?: CodeListingSeparatorType; @@ -29,6 +30,7 @@ export function CodeListing({ summary?: ReturnType['summary']; comment?: AnyDocNodeJSON | null; children?: ReactNode; + deprecation?: AnyDocNodeJSON | null; }) { return ( @@ -44,9 +46,12 @@ export function CodeListing({ - {summary && } - {comment && } - {children} + + {deprecation ? : null} + {summary && } + {comment && } + {children} + ); diff --git a/packages/website/src/components/MethodItem.tsx b/packages/website/src/components/MethodItem.tsx index 2025326174c3..37fd1ebcfb5d 100644 --- a/packages/website/src/components/MethodItem.tsx +++ b/packages/website/src/components/MethodItem.tsx @@ -43,9 +43,13 @@ export function MethodItem({ data }: { data: MethodResolvable }) { - {data.summary ? : null} - {data.comment ? : null} - {data.parameters.length ? : null} + + {data.deprecated ? : null} + {data.summary ? : null} + {data.remarks ? : null} + {data.comment ? : null} + {data.parameters.length ? : null} + ); diff --git a/packages/website/src/components/PropertyList.tsx b/packages/website/src/components/PropertyList.tsx index ecfb1f06babf..79f3ca6461e2 100644 --- a/packages/website/src/components/PropertyList.tsx +++ b/packages/website/src/components/PropertyList.tsx @@ -14,6 +14,7 @@ export function PropertyList({ data }: { data: ReturnType optional={prop.optional} summary={prop.summary} comment={prop.comment} + deprecation={prop.deprecated} /> ))} diff --git a/packages/website/src/components/tsdoc/BlockComment.tsx b/packages/website/src/components/tsdoc/BlockComment.tsx index 5f870ab70b91..1c0e2458a76e 100644 --- a/packages/website/src/components/tsdoc/BlockComment.tsx +++ b/packages/website/src/components/tsdoc/BlockComment.tsx @@ -1,5 +1,7 @@ +import { Alert } from '@mantine/core'; import { StandardTags } from '@microsoft/tsdoc'; import type { ReactNode } from 'react'; +import { VscWarning } from 'react-icons/vsc'; export interface BlockProps { children: ReactNode; @@ -30,10 +32,26 @@ export function ExampleBlock({ children, exampleIndex }: ExampleBlockProps): JSX return {children}; } +export function DeprecatedBlock({ children }: { children: ReactNode }): JSX.Element { + return ( + } title="Deprecated" color="red" radius="xs"> + {children} + + ); +} + +export function RemarksBlock({ children }: { children: ReactNode }): JSX.Element { + return {children}; +} + export function BlockComment({ children, tagName, index }: BlockCommentProps): JSX.Element { switch (tagName.toUpperCase()) { case StandardTags.example.tagNameWithUpperCase: return {children}; + case StandardTags.deprecated.tagNameWithUpperCase: + return {children}; + case StandardTags.remarks.tagNameWithUpperCase: + return {children}; default: // TODO: Support more blocks in the future. return <>; } diff --git a/packages/website/src/components/tsdoc/TSDoc.tsx b/packages/website/src/components/tsdoc/TSDoc.tsx index e6f1dcb0b776..cb705a50e0cb 100644 --- a/packages/website/src/components/tsdoc/TSDoc.tsx +++ b/packages/website/src/components/tsdoc/TSDoc.tsx @@ -32,7 +32,7 @@ export function TSDoc({ node }: { node: AnyDocNodeJSON }): JSX.Element { ); case DocNodeKind.SoftBreak: - return
; + return <>; case DocNodeKind.LinkTag: { const { codeDestination, urlDestination, text } = node as DocLinkTagJSON; From 7701331b1c880d8f4c03193782da05b8cb1b9b02 Mon Sep 17 00:00:00 2001 From: Jiralite <33201955+Jiralite@users.noreply.github.com> Date: Wed, 17 Aug 2022 21:12:54 +0100 Subject: [PATCH 004/155] ci: Remove management of chore label (#8508) Co-authored-by: kodiakhq[bot] <49736102+kodiakhq[bot]@users.noreply.github.com> --- .github/labeler.yml | 4 ---- 1 file changed, 4 deletions(-) diff --git a/.github/labeler.yml b/.github/labeler.yml index 9096d3b43d1c..aeaad0b1e717 100644 --- a/.github/labeler.yml +++ b/.github/labeler.yml @@ -1,7 +1,3 @@ -chore: - - any: ['*'] - all: ['!packages/*', '!packages/**/*'] - 'packages:builders': - packages/builders/* - packages/builders/**/* From 20680efbc927ee2cc670175c9130c7eef6459c6e Mon Sep 17 00:00:00 2001 From: iCrawl Date: Wed, 17 Aug 2022 22:16:22 +0200 Subject: [PATCH 005/155] feat: more visibly annotate optionals --- packages/website/src/components/CodeListing.tsx | 1 + packages/website/src/components/MethodItem.tsx | 6 +++--- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/packages/website/src/components/CodeListing.tsx b/packages/website/src/components/CodeListing.tsx index f5b5469b8bd5..17c6aa272397 100644 --- a/packages/website/src/components/CodeListing.tsx +++ b/packages/website/src/components/CodeListing.tsx @@ -39,6 +39,7 @@ export function CodeListing({ {optional ? Optional : null} {name} + {optional ? '?' : ''} {separator} diff --git a/packages/website/src/components/MethodItem.tsx b/packages/website/src/components/MethodItem.tsx index 37fd1ebcfb5d..10747d19e185 100644 --- a/packages/website/src/components/MethodItem.tsx +++ b/packages/website/src/components/MethodItem.tsx @@ -9,12 +9,12 @@ import { Visibility } from '~/DocModel/Visibility'; type MethodResolvable = ReturnType<DocMethod['toJSON']> | ReturnType<DocMethodSignature['toJSON']>; function getShorthandName(data: MethodResolvable) { - return `${data.name}(${data.parameters.reduce((prev, cur, index) => { + return `${data.name}${data.optional ? '?' : ''}(${data.parameters.reduce((prev, cur, index) => { if (index === 0) { - return `${prev}${cur.name}`; + return `${prev}${cur.isOptional ? `[${cur.name}]` : cur.name}`; } - return `${prev}, ${cur.name}`; + return `${prev}, ${cur.isOptional ? `[${cur.name}]` : cur.name}`; }, '')})`; } From 0bf3df30da043ff614690545e8a9d0e211a95858 Mon Sep 17 00:00:00 2001 From: Suneet Tipirneni <77477100+suneettipirneni@users.noreply.github.com> Date: Wed, 17 Aug 2022 16:38:11 -0400 Subject: [PATCH 006/155] refactor(website): use mantine code blocks (#8512) --- packages/website/package.json | 2 ++ .../website/src/components/DocContainer.tsx | 12 +++------ .../website/src/components/tsdoc/TSDoc.tsx | 21 +++++---------- yarn.lock | 26 +++++++++++++++++++ 4 files changed, 38 insertions(+), 23 deletions(-) diff --git a/packages/website/package.json b/packages/website/package.json index b4161f6938a9..d032176a8613 100644 --- a/packages/website/package.json +++ b/packages/website/package.json @@ -54,6 +54,7 @@ "@mantine/hooks": "^5.1.6", "@mantine/next": "^5.1.6", "@mantine/nprogress": "^5.1.6", + "@mantine/prism": "^5.1.6", "@mantine/spotlight": "^5.1.6", "@microsoft/api-extractor-model": "^7.23.0", "@microsoft/tsdoc": "0.14.1", @@ -90,6 +91,7 @@ "eslint-plugin-react-hooks": "^4.6.0", "happy-dom": "^6.0.4", "prettier": "^2.7.1", + "prism-react-renderer": "^1.3.5", "typescript": "^4.7.4", "unocss": "^0.45.6", "vercel": "^28.0.1", diff --git a/packages/website/src/components/DocContainer.tsx b/packages/website/src/components/DocContainer.tsx index 7a868a893fa6..df2d3229c56e 100644 --- a/packages/website/src/components/DocContainer.tsx +++ b/packages/website/src/components/DocContainer.tsx @@ -1,9 +1,8 @@ import { Group, Stack, Title, Text, Box } from '@mantine/core'; import { useMediaQuery } from '@mantine/hooks'; +import { Prism } from '@mantine/prism'; import type { ReactNode } from 'react'; import { VscListSelection, VscSymbolParameter } from 'react-icons/vsc'; -import { PrismAsyncLight as SyntaxHighlighter } from 'react-syntax-highlighter'; -import { vscDarkPlus } from 'react-syntax-highlighter/dist/cjs/styles/prism'; import { HyperlinkedText } from './HyperlinkedText'; import { Section } from './Section'; import { TypeParamTable } from './TypeParamTable'; @@ -51,14 +50,9 @@ export function DocContainer({ </Section> <Box px="xs" pb="xs"> - <SyntaxHighlighter - wrapLongLines - language="typescript" - style={vscDarkPlus} - codeTagProps={{ style: { fontFamily: 'JetBrains Mono' } }} - > + <Prism language="typescript" colorScheme="dark"> {excerpt} - </SyntaxHighlighter> + </Prism> </Box> {extendsTokens?.length ? ( diff --git a/packages/website/src/components/tsdoc/TSDoc.tsx b/packages/website/src/components/tsdoc/TSDoc.tsx index cb705a50e0cb..a9e2170b4aa5 100644 --- a/packages/website/src/components/tsdoc/TSDoc.tsx +++ b/packages/website/src/components/tsdoc/TSDoc.tsx @@ -1,9 +1,9 @@ -import { Anchor, Box, Text } from '@mantine/core'; +import { Anchor, Box, Code, Text } from '@mantine/core'; +import { Prism } from '@mantine/prism'; import { DocNodeKind, StandardTags } from '@microsoft/tsdoc'; import Link from 'next/link'; +import type { Language } from 'prism-react-renderer'; import type { ReactNode } from 'react'; -import { PrismAsyncLight as SyntaxHighlighter } from 'react-syntax-highlighter'; -import { vscDarkPlus } from 'react-syntax-highlighter/dist/cjs/styles/prism'; import { BlockComment } from './BlockComment'; import type { DocBlockJSON } from '~/DocModel/comment/CommentBlock'; import type { AnyDocNodeJSON } from '~/DocModel/comment/CommentNode'; @@ -61,24 +61,17 @@ export function TSDoc({ node }: { node: AnyDocNodeJSON }): JSX.Element { case DocNodeKind.CodeSpan: { const { code } = node as DocFencedCodeJSON; return ( - <pre key={idx} className="inline"> + <Code key={idx} className="inline text-sm font-mono"> {code} - </pre> + </Code> ); } case DocNodeKind.FencedCode: { const { language, code } = node as DocFencedCodeJSON; return ( - <SyntaxHighlighter - key={idx} - wrapLines - wrapLongLines - language={language} - style={vscDarkPlus} - codeTagProps={{ style: { fontFamily: 'JetBrains Mono' } }} - > + <Prism key={idx} language={language as Language} withLineNumbers colorScheme="dark"> {code} - </SyntaxHighlighter> + </Prism> ); } case DocNodeKind.Block: { diff --git a/yarn.lock b/yarn.lock index 7f03f5385195..2f2b991bdd54 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1980,6 +1980,7 @@ __metadata: "@mantine/hooks": ^5.1.6 "@mantine/next": ^5.1.6 "@mantine/nprogress": ^5.1.6 + "@mantine/prism": ^5.1.6 "@mantine/spotlight": ^5.1.6 "@microsoft/api-extractor-model": ^7.23.0 "@microsoft/tsdoc": 0.14.1 @@ -2009,6 +2010,7 @@ __metadata: happy-dom: ^6.0.4 next: ^12.2.5 prettier: ^2.7.1 + prism-react-renderer: ^1.3.5 react: ^18.2.0 react-dom: ^18.2.0 react-icons: ^4.4.0 @@ -2758,6 +2760,21 @@ __metadata: languageName: node linkType: hard +"@mantine/prism@npm:^5.1.6": + version: 5.1.6 + resolution: "@mantine/prism@npm:5.1.6" + dependencies: + "@mantine/utils": 5.1.6 + prism-react-renderer: ^1.2.1 + peerDependencies: + "@mantine/core": 5.1.6 + "@mantine/hooks": 5.1.6 + react: ">=16.8.0" + react-dom: ">=16.8.0" + checksum: 6fc07858c77b9b57a085e6b2b502612cdb5dcb3417f9c044a8974a5e113013dcb88bff4769853abcb830bd18e419d5c088800f634f6acfe0f67229122137e779 + languageName: node + linkType: hard + "@mantine/spotlight@npm:^5.1.6": version: 5.1.6 resolution: "@mantine/spotlight@npm:5.1.6" @@ -12746,6 +12763,15 @@ __metadata: languageName: node linkType: hard +"prism-react-renderer@npm:^1.2.1, prism-react-renderer@npm:^1.3.5": + version: 1.3.5 + resolution: "prism-react-renderer@npm:1.3.5" + peerDependencies: + react: ">=0.14.9" + checksum: c18806dcbc4c0b4fd6fd15bd06b4f7c0a6da98d93af235c3e970854994eb9b59e23315abb6cfc29e69da26d36709a47e25da85ab27fed81b6812f0a52caf6dfa + languageName: node + linkType: hard + "prismjs@npm:^1.27.0": version: 1.28.0 resolution: "prismjs@npm:1.28.0" From 872ce801a0565847faed39fa1d51516e7ba75492 Mon Sep 17 00:00:00 2001 From: Noel <buechler.noel@outlook.com> Date: Wed, 17 Aug 2022 23:04:47 +0200 Subject: [PATCH 007/155] revert: "refactor(website): use mantine code blocks" (#8514) --- packages/website/package.json | 2 -- .../website/src/components/DocContainer.tsx | 12 ++++++--- .../website/src/components/tsdoc/TSDoc.tsx | 21 ++++++++++----- yarn.lock | 26 ------------------- 4 files changed, 23 insertions(+), 38 deletions(-) diff --git a/packages/website/package.json b/packages/website/package.json index d032176a8613..b4161f6938a9 100644 --- a/packages/website/package.json +++ b/packages/website/package.json @@ -54,7 +54,6 @@ "@mantine/hooks": "^5.1.6", "@mantine/next": "^5.1.6", "@mantine/nprogress": "^5.1.6", - "@mantine/prism": "^5.1.6", "@mantine/spotlight": "^5.1.6", "@microsoft/api-extractor-model": "^7.23.0", "@microsoft/tsdoc": "0.14.1", @@ -91,7 +90,6 @@ "eslint-plugin-react-hooks": "^4.6.0", "happy-dom": "^6.0.4", "prettier": "^2.7.1", - "prism-react-renderer": "^1.3.5", "typescript": "^4.7.4", "unocss": "^0.45.6", "vercel": "^28.0.1", diff --git a/packages/website/src/components/DocContainer.tsx b/packages/website/src/components/DocContainer.tsx index df2d3229c56e..7a868a893fa6 100644 --- a/packages/website/src/components/DocContainer.tsx +++ b/packages/website/src/components/DocContainer.tsx @@ -1,8 +1,9 @@ import { Group, Stack, Title, Text, Box } from '@mantine/core'; import { useMediaQuery } from '@mantine/hooks'; -import { Prism } from '@mantine/prism'; import type { ReactNode } from 'react'; import { VscListSelection, VscSymbolParameter } from 'react-icons/vsc'; +import { PrismAsyncLight as SyntaxHighlighter } from 'react-syntax-highlighter'; +import { vscDarkPlus } from 'react-syntax-highlighter/dist/cjs/styles/prism'; import { HyperlinkedText } from './HyperlinkedText'; import { Section } from './Section'; import { TypeParamTable } from './TypeParamTable'; @@ -50,9 +51,14 @@ export function DocContainer({ </Section> <Box px="xs" pb="xs"> - <Prism language="typescript" colorScheme="dark"> + <SyntaxHighlighter + wrapLongLines + language="typescript" + style={vscDarkPlus} + codeTagProps={{ style: { fontFamily: 'JetBrains Mono' } }} + > {excerpt} - </Prism> + </SyntaxHighlighter> </Box> {extendsTokens?.length ? ( diff --git a/packages/website/src/components/tsdoc/TSDoc.tsx b/packages/website/src/components/tsdoc/TSDoc.tsx index a9e2170b4aa5..cb705a50e0cb 100644 --- a/packages/website/src/components/tsdoc/TSDoc.tsx +++ b/packages/website/src/components/tsdoc/TSDoc.tsx @@ -1,9 +1,9 @@ -import { Anchor, Box, Code, Text } from '@mantine/core'; -import { Prism } from '@mantine/prism'; +import { Anchor, Box, Text } from '@mantine/core'; import { DocNodeKind, StandardTags } from '@microsoft/tsdoc'; import Link from 'next/link'; -import type { Language } from 'prism-react-renderer'; import type { ReactNode } from 'react'; +import { PrismAsyncLight as SyntaxHighlighter } from 'react-syntax-highlighter'; +import { vscDarkPlus } from 'react-syntax-highlighter/dist/cjs/styles/prism'; import { BlockComment } from './BlockComment'; import type { DocBlockJSON } from '~/DocModel/comment/CommentBlock'; import type { AnyDocNodeJSON } from '~/DocModel/comment/CommentNode'; @@ -61,17 +61,24 @@ export function TSDoc({ node }: { node: AnyDocNodeJSON }): JSX.Element { case DocNodeKind.CodeSpan: { const { code } = node as DocFencedCodeJSON; return ( - <Code key={idx} className="inline text-sm font-mono"> + <pre key={idx} className="inline"> {code} - </Code> + </pre> ); } case DocNodeKind.FencedCode: { const { language, code } = node as DocFencedCodeJSON; return ( - <Prism key={idx} language={language as Language} withLineNumbers colorScheme="dark"> + <SyntaxHighlighter + key={idx} + wrapLines + wrapLongLines + language={language} + style={vscDarkPlus} + codeTagProps={{ style: { fontFamily: 'JetBrains Mono' } }} + > {code} - </Prism> + </SyntaxHighlighter> ); } case DocNodeKind.Block: { diff --git a/yarn.lock b/yarn.lock index 2f2b991bdd54..7f03f5385195 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1980,7 +1980,6 @@ __metadata: "@mantine/hooks": ^5.1.6 "@mantine/next": ^5.1.6 "@mantine/nprogress": ^5.1.6 - "@mantine/prism": ^5.1.6 "@mantine/spotlight": ^5.1.6 "@microsoft/api-extractor-model": ^7.23.0 "@microsoft/tsdoc": 0.14.1 @@ -2010,7 +2009,6 @@ __metadata: happy-dom: ^6.0.4 next: ^12.2.5 prettier: ^2.7.1 - prism-react-renderer: ^1.3.5 react: ^18.2.0 react-dom: ^18.2.0 react-icons: ^4.4.0 @@ -2760,21 +2758,6 @@ __metadata: languageName: node linkType: hard -"@mantine/prism@npm:^5.1.6": - version: 5.1.6 - resolution: "@mantine/prism@npm:5.1.6" - dependencies: - "@mantine/utils": 5.1.6 - prism-react-renderer: ^1.2.1 - peerDependencies: - "@mantine/core": 5.1.6 - "@mantine/hooks": 5.1.6 - react: ">=16.8.0" - react-dom: ">=16.8.0" - checksum: 6fc07858c77b9b57a085e6b2b502612cdb5dcb3417f9c044a8974a5e113013dcb88bff4769853abcb830bd18e419d5c088800f634f6acfe0f67229122137e779 - languageName: node - linkType: hard - "@mantine/spotlight@npm:^5.1.6": version: 5.1.6 resolution: "@mantine/spotlight@npm:5.1.6" @@ -12763,15 +12746,6 @@ __metadata: languageName: node linkType: hard -"prism-react-renderer@npm:^1.2.1, prism-react-renderer@npm:^1.3.5": - version: 1.3.5 - resolution: "prism-react-renderer@npm:1.3.5" - peerDependencies: - react: ">=0.14.9" - checksum: c18806dcbc4c0b4fd6fd15bd06b4f7c0a6da98d93af235c3e970854994eb9b59e23315abb6cfc29e69da26d36709a47e25da85ab27fed81b6812f0a52caf6dfa - languageName: node - linkType: hard - "prismjs@npm:^1.27.0": version: 1.28.0 resolution: "prismjs@npm:1.28.0" From 17ab0e652c7bd4c0ddab6b1cd674b5dd3be1355c Mon Sep 17 00:00:00 2001 From: iCrawl <buechler.noel@outlook.com> Date: Wed, 17 Aug 2022 23:21:23 +0200 Subject: [PATCH 008/155] refactor: inline table of contents --- .../website/src/components/CodeListing.tsx | 2 +- .../website/src/components/DocContainer.tsx | 128 ++++++++++-------- .../website/src/components/MethodItem.tsx | 4 +- .../website/src/components/ParameterTable.tsx | 2 +- packages/website/src/components/Section.tsx | 2 +- .../website/src/components/SidebarItems.tsx | 4 +- .../website/src/components/SidebarLayout.tsx | 18 --- .../src/components/TableOfContentsItems.tsx | 4 +- .../website/src/components/TypeParamTable.tsx | 2 +- .../website/src/components/model/Class.tsx | 1 + .../src/components/tsdoc/BlockComment.tsx | 8 +- .../website/src/components/tsdoc/TSDoc.tsx | 6 +- packages/website/src/pages/docs/[...slug].tsx | 2 +- packages/website/src/util/parse.server.ts | 2 +- 14 files changed, 96 insertions(+), 89 deletions(-) diff --git a/packages/website/src/components/CodeListing.tsx b/packages/website/src/components/CodeListing.tsx index 17c6aa272397..81cd50b465f9 100644 --- a/packages/website/src/components/CodeListing.tsx +++ b/packages/website/src/components/CodeListing.tsx @@ -42,7 +42,7 @@ export function CodeListing({ {optional ? '?' : ''} {separator} - + <Title sx={{ wordBreak: 'break-all' }} order={4} className="font-mono"> <HyperlinkedText tokens={typeTokens} /> diff --git a/packages/website/src/components/DocContainer.tsx b/packages/website/src/components/DocContainer.tsx index 7a868a893fa6..5b42864176a3 100644 --- a/packages/website/src/components/DocContainer.tsx +++ b/packages/website/src/components/DocContainer.tsx @@ -1,4 +1,4 @@ -import { Group, Stack, Title, Text, Box } from '@mantine/core'; +import { Group, Stack, Title, Text, Box, MediaQuery, Aside, ScrollArea } from '@mantine/core'; import { useMediaQuery } from '@mantine/hooks'; import type { ReactNode } from 'react'; import { VscListSelection, VscSymbolParameter } from 'react-icons/vsc'; @@ -6,8 +6,10 @@ import { PrismAsyncLight as SyntaxHighlighter } from 'react-syntax-highlighter'; import { vscDarkPlus } from 'react-syntax-highlighter/dist/cjs/styles/prism'; import { HyperlinkedText } from './HyperlinkedText'; import { Section } from './Section'; +import { TableOfContentsItems } from './TableOfContentsItems'; import { TypeParamTable } from './TypeParamTable'; import { TSDoc } from './tsdoc/TSDoc'; +import type { DocClass } from '~/DocModel/DocClass'; import type { DocItem } from '~/DocModel/DocItem'; import type { AnyDocNodeJSON } from '~/DocModel/comment/CommentNode'; import { generateIcon } from '~/util/icon'; @@ -23,6 +25,7 @@ export interface DocContainerProps { implementsTokens?: TokenDocumentation[][]; typeParams?: TypeParameterData[]; comment?: AnyDocNodeJSON | null; + methods?: ReturnType['methods'] | null; } export function DocContainer({ @@ -34,68 +37,85 @@ export function DocContainer({ children, extendsTokens, implementsTokens, + methods, }: DocContainerProps) { const matches = useMediaQuery('(max-width: 768px)', true, { getInitialValueInEffect: false }); return ( - - - <Group> - {generateIcon(kind)} - {name} - </Group> - + + + + <Group> + {generateIcon(kind)} + {name} + </Group> + -
} padded dense={matches}> - {summary ? : No summary provided.} -
+
} padded dense={matches}> + {summary ? : No summary provided.} +
- - - {excerpt} - - + + + {excerpt} + + - {extendsTokens?.length ? ( - - - Extends - - - - - - ) : null} - - {implementsTokens?.length ? ( - - - Implements - - - {implementsTokens.map((token, idx) => ( - <> - - {idx < implementsTokens.length - 1 ? ', ' : ''} - - ))} - - - ) : null} + {extendsTokens?.length ? ( + + + Extends + + + + + + ) : null} - - {typeParams?.length ? ( -
} padded dense={matches} defaultClosed> - -
+ {implementsTokens?.length ? ( + + + Implements + + + {implementsTokens.map((token, idx) => ( + <> + + {idx < implementsTokens.length - 1 ? ', ' : ''} + + ))} + + ) : null} - {children} + + + {typeParams?.length ? ( +
} padded dense={matches} defaultClosed> + +
+ ) : null} + {children} +
-
+ {kind === 'Class' && methods ? ( + + + + ) : null} +
); } diff --git a/packages/website/src/components/MethodItem.tsx b/packages/website/src/components/MethodItem.tsx index 10747d19e185..43a8243408e6 100644 --- a/packages/website/src/components/MethodItem.tsx +++ b/packages/website/src/components/MethodItem.tsx @@ -34,9 +34,9 @@ export function MethodItem({ data }: { data: MethodResolvable }) { Protected ) : null} {data.kind === 'Method' && method.static ? Static : null} - {`${getShorthandName(data)}`} + {`${getShorthandName(data)}`} : - + <Title sx={{ wordBreak: 'break-all' }} order={4} className="font-mono"> <HyperlinkedText tokens={data.returnTypeTokens} /> diff --git a/packages/website/src/components/ParameterTable.tsx b/packages/website/src/components/ParameterTable.tsx index f8f011108044..859396ffcce4 100644 --- a/packages/website/src/components/ParameterTable.tsx +++ b/packages/website/src/components/ParameterTable.tsx @@ -17,7 +17,7 @@ export function ParameterTable({ data }: { data: ParameterDocumentation[] }) { }; return ( - + ); diff --git a/packages/website/src/components/Section.tsx b/packages/website/src/components/Section.tsx index a3fbd090507c..21894a3a437b 100644 --- a/packages/website/src/components/Section.tsx +++ b/packages/website/src/components/Section.tsx @@ -41,7 +41,7 @@ export function Section({ const { classes } = useStyles({ opened }); return ( - + setOpened((o) => !o)}> diff --git a/packages/website/src/components/SidebarItems.tsx b/packages/website/src/components/SidebarItems.tsx index 7d4022e7cd30..dc980a806a82 100644 --- a/packages/website/src/components/SidebarItems.tsx +++ b/packages/website/src/components/SidebarItems.tsx @@ -103,7 +103,9 @@ export function SidebarItems({ setOpened((o) => !o)}> - {member.name} + + {member.name} + {member.overloadIndex && member.overloadIndex > 1 ? ( {member.overloadIndex} diff --git a/packages/website/src/components/SidebarLayout.tsx b/packages/website/src/components/SidebarLayout.tsx index 8e7868464595..211f796cac07 100644 --- a/packages/website/src/components/SidebarLayout.tsx +++ b/packages/website/src/components/SidebarLayout.tsx @@ -3,7 +3,6 @@ import { AppShell, Navbar, MediaQuery, - Aside, Header, Burger, Anchor, @@ -26,8 +25,6 @@ import { type PropsWithChildren, useState } from 'react'; import { VscChevronDown, VscPackage } from 'react-icons/vsc'; import { WiDaySunny, WiNightClear } from 'react-icons/wi'; import { SidebarItems } from './SidebarItems'; -import { TableOfContentsItems } from './TableOfContentsItems'; -import type { DocClass } from '~/DocModel/DocClass'; import type { DocItem } from '~/DocModel/DocItem'; import type { findMember } from '~/util/model.server'; import type { getMembers } from '~/util/parse.server'; @@ -155,21 +152,6 @@ export function SidebarLayout({ packageName, data, children }: PropsWithChildren ) : null} } - aside={ - packageName && data?.member && data.member.kind === 'Class' ? ( - - - - ) : ( - <> - ) - } // footer={ //
// Application footer diff --git a/packages/website/src/components/TableOfContentsItems.tsx b/packages/website/src/components/TableOfContentsItems.tsx index c47c512cb1cb..ccece300cea4 100644 --- a/packages/website/src/components/TableOfContentsItems.tsx +++ b/packages/website/src/components/TableOfContentsItems.tsx @@ -38,7 +38,9 @@ export function TableOfContentsItems({ return ( key={key} href={`#${key}`} component="a" className={classes.link}> - {member.name} + + {member.name} + {member.overloadIndex && member.overloadIndex > 1 ? ( {member.overloadIndex} diff --git a/packages/website/src/components/TypeParamTable.tsx b/packages/website/src/components/TypeParamTable.tsx index 1aef0d00c293..73252738a076 100644 --- a/packages/website/src/components/TypeParamTable.tsx +++ b/packages/website/src/components/TypeParamTable.tsx @@ -19,7 +19,7 @@ export function TypeParamTable({ data }: { data: TypeParameterData[] }) { }; return ( - +
}) { extendsTokens={data.extendsTokens} implementsTokens={data.implementsTokens} comment={data.comment} + methods={data.methods} > diff --git a/packages/website/src/components/tsdoc/BlockComment.tsx b/packages/website/src/components/tsdoc/BlockComment.tsx index 1c0e2458a76e..467405445dc8 100644 --- a/packages/website/src/components/tsdoc/BlockComment.tsx +++ b/packages/website/src/components/tsdoc/BlockComment.tsx @@ -1,4 +1,4 @@ -import { Alert } from '@mantine/core'; +import { Alert, Box, Title } from '@mantine/core'; import { StandardTags } from '@microsoft/tsdoc'; import type { ReactNode } from 'react'; import { VscWarning } from 'react-icons/vsc'; @@ -10,10 +10,10 @@ export interface BlockProps { export function Block({ children, title }: BlockProps) { return ( -
-

{title}

+ + {title} {children} -
+ ); } diff --git a/packages/website/src/components/tsdoc/TSDoc.tsx b/packages/website/src/components/tsdoc/TSDoc.tsx index cb705a50e0cb..692bea4cff49 100644 --- a/packages/website/src/components/tsdoc/TSDoc.tsx +++ b/packages/website/src/components/tsdoc/TSDoc.tsx @@ -1,4 +1,4 @@ -import { Anchor, Box, Text } from '@mantine/core'; +import { Anchor, Box, Code, Text } from '@mantine/core'; import { DocNodeKind, StandardTags } from '@microsoft/tsdoc'; import Link from 'next/link'; import type { ReactNode } from 'react'; @@ -61,9 +61,9 @@ export function TSDoc({ node }: { node: AnyDocNodeJSON }): JSX.Element { case DocNodeKind.CodeSpan: { const { code } = node as DocFencedCodeJSON; return ( -
+					
 						{code}
-					
+ ); } case DocNodeKind.FencedCode: { diff --git a/packages/website/src/pages/docs/[...slug].tsx b/packages/website/src/pages/docs/[...slug].tsx index fb3f06416d37..ba7d9537b8d6 100644 --- a/packages/website/src/pages/docs/[...slug].tsx +++ b/packages/website/src/pages/docs/[...slug].tsx @@ -146,7 +146,7 @@ const member = (props: any) => { export default function Slug(props: Partial) { return props.error ? ( -
{props.error}
+ {props.error} ) : ( {props.data?.member ? member(props.data.member) : null} diff --git a/packages/website/src/util/parse.server.ts b/packages/website/src/util/parse.server.ts index 47c06966fb99..67f2b7dc658f 100644 --- a/packages/website/src/util/parse.server.ts +++ b/packages/website/src/util/parse.server.ts @@ -38,7 +38,7 @@ export function generatePath(items: readonly ApiItem[]) { const functionItem = item as ApiFunction; path += `${functionItem.displayName}${ functionItem.overloadIndex && functionItem.overloadIndex > 1 ? `:${functionItem.overloadIndex}` : '' - }:/`; + }/`; break; default: path += `${item.displayName}/`; From 1008e3d4a721fffbe24e03fbcdf06804f4f416a0 Mon Sep 17 00:00:00 2001 From: iCrawl Date: Wed, 17 Aug 2022 23:46:22 +0200 Subject: [PATCH 009/155] ci: fix if check --- .github/workflows/documentation.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/documentation.yml b/.github/workflows/documentation.yml index 9e2b7217f0f6..66be57bbf4ef 100644 --- a/.github/workflows/documentation.yml +++ b/.github/workflows/documentation.yml @@ -142,7 +142,7 @@ jobs: fi - name: Move docs to correct directory - if: ${{ !github.event.inputs.ref_type == 'branch' && env.BRANCH_OR_TAG == 'branch' }} + if: ${{ github.event.inputs.ref_type == 'branch' && env.BRANCH_OR_TAG == 'branch' }} env: PACKAGE: ${{ matrix.package }} run: | From 74740260a783bd969ea8c49ceb6b795e0f4608c2 Mon Sep 17 00:00:00 2001 From: iCrawl Date: Wed, 17 Aug 2022 23:51:07 +0200 Subject: [PATCH 010/155] ci: fix if statement, again --- .github/workflows/documentation.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/documentation.yml b/.github/workflows/documentation.yml index 66be57bbf4ef..7fd1fb03e174 100644 --- a/.github/workflows/documentation.yml +++ b/.github/workflows/documentation.yml @@ -142,7 +142,7 @@ jobs: fi - name: Move docs to correct directory - if: ${{ github.event.inputs.ref_type == 'branch' && env.BRANCH_OR_TAG == 'branch' }} + if: ${{ github.event.inputs.ref_type == 'branch' || env.BRANCH_OR_TAG == 'branch' }} env: PACKAGE: ${{ matrix.package }} run: | From f9c25ddcfe68f089e13f1090c3df4bd7cd74d2b7 Mon Sep 17 00:00:00 2001 From: Synbulat Biishev Date: Thu, 18 Aug 2022 12:06:01 +0500 Subject: [PATCH 011/155] feat: deprecate `ActionRow.from()` (#8504) * feat: deprecate `ActionRow.from()` * feat: deprecate `ActionRow.from()` Co-authored-by: kodiakhq[bot] <49736102+kodiakhq[bot]@users.noreply.github.com> --- packages/discord.js/src/structures/ActionRow.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/packages/discord.js/src/structures/ActionRow.js b/packages/discord.js/src/structures/ActionRow.js index d5fb48561fe2..67aeebbaa7cb 100644 --- a/packages/discord.js/src/structures/ActionRow.js +++ b/packages/discord.js/src/structures/ActionRow.js @@ -1,5 +1,6 @@ 'use strict'; +const { deprecate } = require('node:util'); const { isJSONEncodable } = require('@discordjs/builders'); const Component = require('./Component'); const { createComponent } = require('../util/Components'); @@ -24,6 +25,7 @@ class ActionRow extends Component { * Creates a new action row builder from JSON data * @param {JSONEncodable|APIActionRowComponent} other The other data * @returns {ActionRowBuilder} + * @deprecated Use {@link ActionRowBuilder.from()} instead. */ static from(other) { if (isJSONEncodable(other)) { @@ -41,4 +43,6 @@ class ActionRow extends Component { } } +ActionRow.from = deprecate(ActionRow.from, 'ActionRow.from() is deprecated. Use ActionRowBuilder.from() instead.'); + module.exports = ActionRow; From cda3f005b1546fdb8410e9550526956f840857fc Mon Sep 17 00:00:00 2001 From: DD Date: Thu, 18 Aug 2022 11:58:35 +0300 Subject: [PATCH 012/155] feat(GuildMemberManager): addRole and removeRole (#8510) Co-authored-by: kodiakhq[bot] <49736102+kodiakhq[bot]@users.noreply.github.com> --- .../src/managers/GuildMemberManager.js | 36 +++++++++++++++++++ packages/discord.js/typings/index.d.ts | 8 +++++ 2 files changed, 44 insertions(+) diff --git a/packages/discord.js/src/managers/GuildMemberManager.js b/packages/discord.js/src/managers/GuildMemberManager.js index 6ee1d3227bd7..703acf586522 100644 --- a/packages/discord.js/src/managers/GuildMemberManager.js +++ b/packages/discord.js/src/managers/GuildMemberManager.js @@ -441,6 +441,42 @@ class GuildMemberManager extends CachedManager { return this.guild.bans.remove(user, reason); } + /** + * Options used for adding or removing a role from a member. + * @typedef {Object} AddOrRemoveGuildMemberRoleOptions + * @property {GuildMemberResolvable} user The user to add/remove the role from + * @property {RoleResolvable} role The role to add/remove + * @property {string} [reason] Reason for adding/removing the role + */ + + /** + * Adds a role to a member. + * @param {AddOrRemoveGuildMemberRoleOptions} options Options for adding the role + * @returns {Promise} + */ + async addRole(options) { + const { user, role, reason } = options; + const userId = this.guild.members.resolveId(user); + const roleId = this.guild.roles.resolveId(role); + await this.client.rest.put(Routes.guildMemberRole(this.guild.id, userId, roleId), { reason }); + + return this.resolve(user) ?? this.client.users.resolve(user) ?? userId; + } + + /** + * Removes a role from a member. + * @param {AddOrRemoveGuildMemberRoleOptions} options Options for removing the role + * @returns {Promise} + */ + async removeRole(options) { + const { user, role, reason } = options; + const userId = this.guild.members.resolveId(user); + const roleId = this.guild.roles.resolveId(role); + await this.client.rest.delete(Routes.guildMemberRole(this.guild.id, userId, roleId), { reason }); + + return this.resolve(user) ?? this.client.users.resolve(user) ?? userId; + } + async _fetchSingle({ user, cache, force = false }) { if (!force) { const existing = this.cache.get(user); diff --git a/packages/discord.js/typings/index.d.ts b/packages/discord.js/typings/index.d.ts index 06a8c497ab11..9c6ba1a95427 100644 --- a/packages/discord.js/typings/index.d.ts +++ b/packages/discord.js/typings/index.d.ts @@ -3407,6 +3407,12 @@ export class GuildManager extends CachedManager>; } +export interface AddOrRemoveGuildMemberRoleOptions { + user: GuildMemberResolvable; + role: RoleResolvable; + reason?: string; +} + export class GuildMemberManager extends CachedManager { private constructor(guild: Guild, iterable?: Iterable); public guild: Guild; @@ -3429,6 +3435,8 @@ export class GuildMemberManager extends CachedManager; public search(options: GuildSearchMembersOptions): Promise>; public unban(user: UserResolvable, reason?: string): Promise; + public addRole(options: AddOrRemoveGuildMemberRoleOptions): Promise; + public removeRole(options: AddOrRemoveGuildMemberRoleOptions): Promise; } export class GuildBanManager extends CachedManager { From 7f415a2502bf7ce2025dbcfed9017b0635a19966 Mon Sep 17 00:00:00 2001 From: Suneet Tipirneni <77477100+suneettipirneni@users.noreply.github.com> Date: Thu, 18 Aug 2022 12:38:27 -0400 Subject: [PATCH 013/155] feat(website): show parameter descriptions (#8519) Co-authored-by: Noel --- packages/builders/src/messages/embed/Embed.ts | 61 ++++++++++++++++++- .../src/DocModel/comment/ParamBlock.ts | 14 +++++ .../website/src/DocModel/comment/index.ts | 4 ++ .../website/src/components/DocContainer.tsx | 2 +- .../website/src/components/ParameterTable.tsx | 15 +++-- .../src/components/tsdoc/BlockComment.tsx | 8 ++- .../website/src/components/tsdoc/TSDoc.tsx | 4 +- packages/website/src/util/parse.server.ts | 4 ++ 8 files changed, 98 insertions(+), 14 deletions(-) create mode 100644 packages/website/src/DocModel/comment/ParamBlock.ts diff --git a/packages/builders/src/messages/embed/Embed.ts b/packages/builders/src/messages/embed/Embed.ts index d3221f9201c8..5907d68f69d6 100644 --- a/packages/builders/src/messages/embed/Embed.ts +++ b/packages/builders/src/messages/embed/Embed.ts @@ -52,7 +52,29 @@ export class EmbedBuilder { } /** - * Adds fields to the embed (max 25) + * Appends fields to the embed + * + * @remarks + * This method accepts either an array of fields or a variable number of field parameters. + * The maximum amount of fields that can be added is 25. + * + * @example + * Using an array + * ```ts + * const fields: APIEmbedField[] = ...; + * const embed = new EmbedBuilder() + * .addFields(fields); + * ``` + * + * @example + * Using rest parameters (variadic) + * ```ts + * const embed = new EmbedBuilder() + * .addFields( + * { name: 'Field 1', value: 'Value 1' }, + * { name: 'Field 2', value: 'Value 2' }, + * ); + * ``` * * @param fields The fields to add */ @@ -70,7 +92,33 @@ export class EmbedBuilder { } /** - * Removes, replaces, or inserts fields in the embed (max 25) + * Removes, replaces, or inserts fields in the embed. + * + * @remarks + * This method behaves similarly + * to {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/slice | Array.prototype.splice}. + * The maximum amount of fields that can be added is 25. + * + * It's useful for modifying and adjusting order of the already-existing fields of an embed. + * + * @example + * Remove the first field + * ```ts + * embed.spliceFields(0, 1); + * ``` + * + * @example + * Remove the first n fields + * ```ts + * const n = 4 + * embed.spliceFields(0, n); + * ``` + * + * @example + * Remove the last field + * ```ts + * embed.spliceFields(-1, 1); + * ``` * * @param index The index to start at * @param deleteCount The number of fields to remove @@ -88,7 +136,14 @@ export class EmbedBuilder { } /** - * Sets the embed's fields (max 25). + * Sets the embed's fields + * + * @remarks + * This method is an alias for {@link EmbedBuilder.spliceFields}. More specifically, + * it splices the entire array of fields, replacing them with the provided fields. + * + * You can set a maximum of 25 fields. + * * @param fields The fields to set */ public setFields(...fields: RestOrArray) { diff --git a/packages/website/src/DocModel/comment/ParamBlock.ts b/packages/website/src/DocModel/comment/ParamBlock.ts new file mode 100644 index 000000000000..e54ba882704f --- /dev/null +++ b/packages/website/src/DocModel/comment/ParamBlock.ts @@ -0,0 +1,14 @@ +import type { ApiItem, ApiModel } from '@microsoft/api-extractor-model'; +import type { DocParamBlock } from '@microsoft/tsdoc'; +import { block, DocBlockJSON } from './CommentBlock'; + +export interface DocParamBlockJSON extends DocBlockJSON { + name: string; +} + +export function paramBlock(paramBlock: DocParamBlock, model: ApiModel, parentItem?: ApiItem): DocParamBlockJSON { + return { + ...block(paramBlock, model, parentItem), + name: paramBlock.parameterName, + }; +} diff --git a/packages/website/src/DocModel/comment/index.ts b/packages/website/src/DocModel/comment/index.ts index a60a46cafb6d..a151f0f7a1ea 100644 --- a/packages/website/src/DocModel/comment/index.ts +++ b/packages/website/src/DocModel/comment/index.ts @@ -9,6 +9,7 @@ import { type DocBlock, DocComment, DocCodeSpan, + DocParamBlock, } from '@microsoft/tsdoc'; import { block } from './CommentBlock'; import { codeSpan } from './CommentCodeSpan'; @@ -17,6 +18,7 @@ import { node as _node } from './CommentNode'; import { nodeContainer } from './CommentNodeContainer'; import { fencedCode } from './FencedCodeCommentNode'; import { linkTagNode } from './LinkTagCommentNode'; +import { paramBlock } from './ParamBlock'; import { plainTextNode } from './PlainTextCommentNode'; import { comment } from './RootComment'; @@ -35,6 +37,8 @@ export function createCommentNode(node: DocNode, model: ApiModel, parentItem?: A return codeSpan(node as DocCodeSpan); case DocNodeKind.Block: return block(node as DocBlock, model, parentItem); + case DocNodeKind.ParamBlock: + return paramBlock(node as DocParamBlock, model, parentItem); case DocNodeKind.Comment: return comment(node as DocComment, model, parentItem); default: diff --git a/packages/website/src/components/DocContainer.tsx b/packages/website/src/components/DocContainer.tsx index 5b42864176a3..e20af04ab094 100644 --- a/packages/website/src/components/DocContainer.tsx +++ b/packages/website/src/components/DocContainer.tsx @@ -43,7 +43,7 @@ export function DocContainer({ return ( - + <Group> {generateIcon(kind)} diff --git a/packages/website/src/components/ParameterTable.tsx b/packages/website/src/components/ParameterTable.tsx index 859396ffcce4..a8718b0b2d8a 100644 --- a/packages/website/src/components/ParameterTable.tsx +++ b/packages/website/src/components/ParameterTable.tsx @@ -1,6 +1,7 @@ -import { Box } from '@mantine/core'; +import { Box, ScrollArea } from '@mantine/core'; import { HyperlinkedText } from './HyperlinkedText'; import { Table } from './Table'; +import { TSDoc } from './tsdoc/TSDoc'; import type { ParameterDocumentation } from '~/util/parse.server'; export function ParameterTable({ data }: { data: ParameterDocumentation[] }) { @@ -8,17 +9,19 @@ export function ParameterTable({ data }: { data: ParameterDocumentation[] }) { Name: param.name, Type: <HyperlinkedText tokens={param.tokens} />, Optional: param.isOptional ? 'Yes' : 'No', - Description: 'None', + Description: param.paramCommentBlock ? <TSDoc node={param.paramCommentBlock} /> : 'None', })); const columnStyles = { - Name: 'font-mono', - Type: 'font-mono', + Name: 'font-mono whitespace-nowrap', + Type: 'font-mono whitespace-pre-wrap break-normal', }; return ( - <Box sx={{ overflowX: 'auto' }}> - <Table columns={['Name', 'Type', 'Optional', 'Description']} rows={rows} columnStyles={columnStyles} /> + <Box> + <ScrollArea type="auto"> + <Table columns={['Name', 'Type', 'Optional', 'Description']} rows={rows} columnStyles={columnStyles} /> + </ScrollArea> </Box> ); } diff --git a/packages/website/src/components/tsdoc/BlockComment.tsx b/packages/website/src/components/tsdoc/BlockComment.tsx index 467405445dc8..a89a3bf3bafa 100644 --- a/packages/website/src/components/tsdoc/BlockComment.tsx +++ b/packages/website/src/components/tsdoc/BlockComment.tsx @@ -1,4 +1,4 @@ -import { Alert, Box, Title } from '@mantine/core'; +import { Alert, Box, Title, Text } from '@mantine/core'; import { StandardTags } from '@microsoft/tsdoc'; import type { ReactNode } from 'react'; import { VscWarning } from 'react-icons/vsc'; @@ -11,7 +11,7 @@ export interface BlockProps { export function Block({ children, title }: BlockProps) { return ( <Box> - <Title order={3}>{title} + {title} {children} ); @@ -52,7 +52,9 @@ export function BlockComment({ children, tagName, index }: BlockCommentProps): J return {children}; case StandardTags.remarks.tagNameWithUpperCase: return {children}; + case StandardTags.param.tagNameWithUpperCase: + return {children}; default: // TODO: Support more blocks in the future. - return <>; + return <>{children}; } } diff --git a/packages/website/src/components/tsdoc/TSDoc.tsx b/packages/website/src/components/tsdoc/TSDoc.tsx index 692bea4cff49..4df2beba7af1 100644 --- a/packages/website/src/components/tsdoc/TSDoc.tsx +++ b/packages/website/src/components/tsdoc/TSDoc.tsx @@ -81,6 +81,7 @@ export function TSDoc({ node }: { node: AnyDocNodeJSON }): JSX.Element { ); } + case DocNodeKind.ParamBlock: case DocNodeKind.Block: { const { tag } = node as DocBlockJSON; @@ -103,9 +104,10 @@ export function TSDoc({ node }: { node: AnyDocNodeJSON }): JSX.Element { (block) => block.tag.tagName.toUpperCase() === StandardTags.example.tagNameWithUpperCase, ).length; - return
{comment.customBlocks.map((node, idx) => createNode(node, idx))}
; + return
{comment.customBlocks.map((node, idx) => createNode(node, idx))}
; } default: + console.log(`Captured unknown node kind: ${node.kind}`); break; } diff --git a/packages/website/src/util/parse.server.ts b/packages/website/src/util/parse.server.ts index 67f2b7dc658f..8b39289ba90d 100644 --- a/packages/website/src/util/parse.server.ts +++ b/packages/website/src/util/parse.server.ts @@ -15,6 +15,8 @@ import { } from '@microsoft/api-extractor-model'; import type { DocNode, DocParagraph, DocPlainText } from '@microsoft/tsdoc'; import { Meaning, ModuleSource } from '@microsoft/tsdoc/lib-commonjs/beta/DeclarationReference'; +import { createCommentNode } from '~/DocModel/comment'; +import type { DocBlockJSON } from '~/DocModel/comment/CommentBlock'; export function findPackage(model: ApiModel, name: string): ApiPackage | undefined { return (model.findMembersByName(name)[0] ?? model.findMembersByName(`@discordjs/${name}`)[0]) as @@ -142,6 +144,7 @@ export interface ParameterDocumentation { name: string; isOptional: boolean; tokens: TokenDocumentation[]; + paramCommentBlock: DocBlockJSON | null; } function createDapiTypesURL(meaning: Meaning, name: string) { @@ -197,6 +200,7 @@ export function genParameter(model: ApiModel, param: Parameter): ParameterDocume name: param.name, isOptional: param.isOptional, tokens: param.parameterTypeExcerpt.spannedTokens.map((token) => genToken(model, token)), + paramCommentBlock: param.tsdocParamBlock ? (createCommentNode(param.tsdocParamBlock, model) as DocBlockJSON) : null, }; } From 673262d38ca3853feb7cd2e1207a2e12e4504884 Mon Sep 17 00:00:00 2001 From: iCrawl Date: Thu, 18 Aug 2022 18:47:44 +0200 Subject: [PATCH 014/155] feat: deprecation badges --- packages/website/src/components/CodeListing.tsx | 5 +++++ packages/website/src/components/MethodItem.tsx | 5 +++++ packages/website/src/components/tsdoc/BlockComment.tsx | 2 +- packages/website/src/components/tsdoc/TSDoc.tsx | 2 +- 4 files changed, 12 insertions(+), 2 deletions(-) diff --git a/packages/website/src/components/CodeListing.tsx b/packages/website/src/components/CodeListing.tsx index 81cd50b465f9..b5c4b63c2e63 100644 --- a/packages/website/src/components/CodeListing.tsx +++ b/packages/website/src/components/CodeListing.tsx @@ -35,6 +35,11 @@ export function CodeListing({ return ( + {deprecation ? ( + + Deprecated + + ) : null} {readonly ? Readonly : null} {optional ? Optional : null} diff --git a/packages/website/src/components/MethodItem.tsx b/packages/website/src/components/MethodItem.tsx index 43a8243408e6..6a4d52a378d3 100644 --- a/packages/website/src/components/MethodItem.tsx +++ b/packages/website/src/components/MethodItem.tsx @@ -30,6 +30,11 @@ export function MethodItem({ data }: { data: MethodResolvable }) { <Group> <Stack> <Group> + {data.deprecated ? ( + <Badge variant="filled" color="red"> + Deprecated + </Badge> + ) : null} {data.kind === 'Method' && method.visibility === Visibility.Protected ? ( <Badge variant="filled">Protected</Badge> ) : null} diff --git a/packages/website/src/components/tsdoc/BlockComment.tsx b/packages/website/src/components/tsdoc/BlockComment.tsx index a89a3bf3bafa..287329eeb246 100644 --- a/packages/website/src/components/tsdoc/BlockComment.tsx +++ b/packages/website/src/components/tsdoc/BlockComment.tsx @@ -34,7 +34,7 @@ export function ExampleBlock({ children, exampleIndex }: ExampleBlockProps): JSX export function DeprecatedBlock({ children }: { children: ReactNode }): JSX.Element { return ( - <Alert icon={<VscWarning />} title="Deprecated" color="red" radius="xs"> + <Alert icon={<VscWarning />} title="Deprecated" variant="filled" color="red" radius="xs"> {children} </Alert> ); diff --git a/packages/website/src/components/tsdoc/TSDoc.tsx b/packages/website/src/components/tsdoc/TSDoc.tsx index 4df2beba7af1..da8a94dd27e8 100644 --- a/packages/website/src/components/tsdoc/TSDoc.tsx +++ b/packages/website/src/components/tsdoc/TSDoc.tsx @@ -104,7 +104,7 @@ export function TSDoc({ node }: { node: AnyDocNodeJSON }): JSX.Element { (block) => block.tag.tagName.toUpperCase() === StandardTags.example.tagNameWithUpperCase, ).length; - return <div key={idx}>{comment.customBlocks.map((node, idx) => createNode(node, idx))}</div>; + return <Box key={idx}>{comment.customBlocks.map((node, idx) => createNode(node, idx))}</Box>; } default: console.log(`Captured unknown node kind: ${node.kind}`); From e475b63f257f6261d73cb89fee9ecbcdd84e2a6b Mon Sep 17 00:00:00 2001 From: Suneet Tipirneni <77477100+suneettipirneni@users.noreply.github.com> Date: Fri, 19 Aug 2022 04:55:43 -0400 Subject: [PATCH 015/155] feat(website): show descriptions for `@typeParam` blocks (#8523) --- packages/builders/src/components/ActionRow.ts | 5 +++ packages/builders/src/components/Component.ts | 5 +++ .../builders/src/components/button/Button.ts | 3 ++ .../src/components/selectMenu/SelectMenu.ts | 3 ++ .../components/selectMenu/SelectMenuOption.ts | 6 ++- .../src/components/textInput/TextInput.ts | 12 +++++- .../slashCommands/SlashCommandBuilder.ts | 4 +- packages/builders/src/util/equatable.ts | 6 +++ packages/builders/src/util/jsonEncodable.ts | 5 +++ packages/collection/src/collection.ts | 3 ++ .../src/DocModel/TypeParameterMixin.ts | 32 ++++++++++++++-- .../DocModel/comment/LinkTagCommentNode.ts | 16 ++++---- .../website/src/components/DocContainer.tsx | 9 +++-- .../website/src/components/MethodList.tsx | 12 +++--- .../website/src/components/TypeParamTable.tsx | 25 +++++++------ .../src/components/tsdoc/BlockComment.tsx | 1 + .../website/src/components/tsdoc/TSDoc.tsx | 4 +- packages/website/src/util/parse.server.ts | 37 ++++++------------- 18 files changed, 126 insertions(+), 62 deletions(-) diff --git a/packages/builders/src/components/ActionRow.ts b/packages/builders/src/components/ActionRow.ts index 68edb04aa02b..5580d3f89553 100644 --- a/packages/builders/src/components/ActionRow.ts +++ b/packages/builders/src/components/ActionRow.ts @@ -22,6 +22,8 @@ export type AnyComponentBuilder = MessageActionRowComponentBuilder | ModalAction /** * Represents an action row component + * + * @typeParam T - The types of components this action row holds */ export class ActionRowBuilder<T extends AnyComponentBuilder> extends ComponentBuilder< APIActionRowComponent<APIMessageActionRowComponent | APIModalActionRowComponent> @@ -56,6 +58,9 @@ export class ActionRowBuilder<T extends AnyComponentBuilder> extends ComponentBu return this; } + /** + * {@inheritDoc JSONEncodable.toJSON} + */ public toJSON(): APIActionRowComponent<ReturnType<T['toJSON']>> { // eslint-disable-next-line @typescript-eslint/consistent-type-assertions return { diff --git a/packages/builders/src/components/Component.ts b/packages/builders/src/components/Component.ts index f8780fd4663b..1775a6d697ed 100644 --- a/packages/builders/src/components/Component.ts +++ b/packages/builders/src/components/Component.ts @@ -10,6 +10,8 @@ export type AnyAPIActionRowComponent = APIActionRowComponentTypes | APIActionRow /** * Represents a discord component + * + * @typeParam DataType - The type of internal API data that is stored within the component */ export abstract class ComponentBuilder< DataType extends Partial<APIBaseComponent<ComponentType>> = APIBaseComponent<ComponentType>, @@ -20,6 +22,9 @@ export abstract class ComponentBuilder< */ public readonly data: Partial<DataType>; + /** + * {@inheritDoc JSONEncodable.toJSON} + */ public abstract toJSON(): AnyAPIActionRowComponent; public constructor(data: Partial<DataType>) { diff --git a/packages/builders/src/components/button/Button.ts b/packages/builders/src/components/button/Button.ts index 7c92593a792b..853667b5e7cd 100644 --- a/packages/builders/src/components/button/Button.ts +++ b/packages/builders/src/components/button/Button.ts @@ -85,6 +85,9 @@ export class ButtonBuilder extends ComponentBuilder<APIButtonComponent> { return this; } + /** + * {@inheritDoc JSONEncodable.toJSON} + */ public toJSON(): APIButtonComponent { validateRequiredButtonParameters( this.data.style, diff --git a/packages/builders/src/components/selectMenu/SelectMenu.ts b/packages/builders/src/components/selectMenu/SelectMenu.ts index e0ea411756b3..2eccd4692de0 100644 --- a/packages/builders/src/components/selectMenu/SelectMenu.ts +++ b/packages/builders/src/components/selectMenu/SelectMenu.ts @@ -116,6 +116,9 @@ export class SelectMenuBuilder extends ComponentBuilder<APISelectMenuComponent> return this; } + /** + * {@inheritDoc JSONEncodable.toJSON} + */ public toJSON(): APISelectMenuComponent { validateRequiredSelectMenuParameters(this.options, this.data.custom_id); // eslint-disable-next-line @typescript-eslint/consistent-type-assertions diff --git a/packages/builders/src/components/selectMenu/SelectMenuOption.ts b/packages/builders/src/components/selectMenu/SelectMenuOption.ts index 3f9d50203712..452b46a83d76 100644 --- a/packages/builders/src/components/selectMenu/SelectMenuOption.ts +++ b/packages/builders/src/components/selectMenu/SelectMenuOption.ts @@ -1,4 +1,5 @@ import type { APIMessageComponentEmoji, APISelectMenuOption } from 'discord-api-types/v10'; +import type { JSONEncodable } from '../../util/jsonEncodable'; import { defaultValidator, @@ -10,7 +11,7 @@ import { /** * Represents a option within a select menu component */ -export class SelectMenuOptionBuilder { +export class SelectMenuOptionBuilder implements JSONEncodable<APISelectMenuOption> { public constructor(public data: Partial<APISelectMenuOption> = {}) {} /** @@ -63,6 +64,9 @@ export class SelectMenuOptionBuilder { return this; } + /** + * {@inheritDoc JSONEncodable.toJSON} + */ public toJSON(): APISelectMenuOption { validateRequiredSelectMenuOptionParameters(this.data.label, this.data.value); // eslint-disable-next-line @typescript-eslint/consistent-type-assertions diff --git a/packages/builders/src/components/textInput/TextInput.ts b/packages/builders/src/components/textInput/TextInput.ts index 9b2934a1f142..16ce0ddb3e0e 100644 --- a/packages/builders/src/components/textInput/TextInput.ts +++ b/packages/builders/src/components/textInput/TextInput.ts @@ -10,11 +10,15 @@ import { labelValidator, textInputStyleValidator, } from './Assertions'; +import type { Equatable } from '../../util/equatable'; import { isJSONEncodable, type JSONEncodable } from '../../util/jsonEncodable'; import { customIdValidator } from '../Assertions'; import { ComponentBuilder } from '../Component'; -export class TextInputBuilder extends ComponentBuilder<APITextInputComponent> { +export class TextInputBuilder + extends ComponentBuilder<APITextInputComponent> + implements Equatable<JSONEncodable<APITextInputComponent> | APITextInputComponent> +{ public constructor(data?: APITextInputComponent & { type?: ComponentType.TextInput }) { super({ type: ComponentType.TextInput, ...data }); } @@ -99,6 +103,9 @@ export class TextInputBuilder extends ComponentBuilder<APITextInputComponent> { return this; } + /** + * {@inheritDoc JSONEncodable.toJSON} + */ public toJSON(): APITextInputComponent { validateRequiredParameters(this.data.custom_id, this.data.style, this.data.label); // eslint-disable-next-line @typescript-eslint/consistent-type-assertions @@ -107,6 +114,9 @@ export class TextInputBuilder extends ComponentBuilder<APITextInputComponent> { } as APITextInputComponent; } + /** + * {@inheritDoc Equatable.equals} + */ public equals(other: JSONEncodable<APITextInputComponent> | APITextInputComponent): boolean { if (isJSONEncodable(other)) { return isEqual(other.toJSON(), this.data); diff --git a/packages/builders/src/interactions/slashCommands/SlashCommandBuilder.ts b/packages/builders/src/interactions/slashCommands/SlashCommandBuilder.ts index 13cc21678254..39c19575dfa2 100644 --- a/packages/builders/src/interactions/slashCommands/SlashCommandBuilder.ts +++ b/packages/builders/src/interactions/slashCommands/SlashCommandBuilder.ts @@ -49,7 +49,7 @@ export class SlashCommandBuilder { * Whether the command is enabled by default when the app is added to a guild * * @deprecated This property is deprecated and will be removed in the future. - * You should use `setDefaultMemberPermissions` or `setDMPermission` instead. + * You should use {@link (SlashCommandBuilder:class).setDefaultMemberPermissions} or {@link (SlashCommandBuilder:class).setDMPermission} instead. */ public readonly default_permission: boolean | undefined = undefined; @@ -89,7 +89,7 @@ export class SlashCommandBuilder { * @param value - Whether or not to enable this command by default * * @see https://discord.com/developers/docs/interactions/application-commands#permissions - * @deprecated Use `setDefaultMemberPermissions` or `setDMPermission` instead. + * @deprecated Use {@link (SlashCommandBuilder:class).setDefaultMemberPermissions} or {@link (SlashCommandBuilder:class).setDMPermission} instead. */ public setDefaultPermission(value: boolean) { // Assert the value matches the conditions diff --git a/packages/builders/src/util/equatable.ts b/packages/builders/src/util/equatable.ts index af1c6e665e6f..254853f54d8c 100644 --- a/packages/builders/src/util/equatable.ts +++ b/packages/builders/src/util/equatable.ts @@ -1,3 +1,9 @@ +/** + * Represents a structure that can be checked against another + * given structure for equality + * + * @typeParam T - The type of object to compare the current object to + */ export interface Equatable<T> { /** * Whether or not this is equal to another structure diff --git a/packages/builders/src/util/jsonEncodable.ts b/packages/builders/src/util/jsonEncodable.ts index 8e8273c38e08..432719be8ebb 100644 --- a/packages/builders/src/util/jsonEncodable.ts +++ b/packages/builders/src/util/jsonEncodable.ts @@ -1,3 +1,8 @@ +/** + * Represents an object capable of representing itself as a JSON object + * + * @typeParam T - The JSON type corresponding to {@link JSONEncodable.toJSON} outputs. + */ export interface JSONEncodable<T> { /** * Transforms this object to its JSON format diff --git a/packages/collection/src/collection.ts b/packages/collection/src/collection.ts index cc082728e09a..911ab1a6b55d 100644 --- a/packages/collection/src/collection.ts +++ b/packages/collection/src/collection.ts @@ -28,6 +28,9 @@ export interface Collection<K, V> extends Map<K, V> { /** * A Map with additional utility methods. This is used throughout discord.js rather than Arrays for anything that has * an ID, for significantly improved performance and ease-of-use. + * + * @typeParam K - The key type this collection holds + * @typeParam V - The value type this collection holds */ export class Collection<K, V> extends Map<K, V> { /** diff --git a/packages/website/src/DocModel/TypeParameterMixin.ts b/packages/website/src/DocModel/TypeParameterMixin.ts index 9fe01c6387a6..adaf0b5d5e2c 100644 --- a/packages/website/src/DocModel/TypeParameterMixin.ts +++ b/packages/website/src/DocModel/TypeParameterMixin.ts @@ -1,6 +1,32 @@ -import type { ApiItem, ApiModel, ApiTypeParameterListMixin } from '@microsoft/api-extractor-model'; +import type { ApiItem, ApiModel, ApiTypeParameterListMixin, TypeParameter } from '@microsoft/api-extractor-model'; import type { DocItemConstructor } from './DocItem'; -import { generateTypeParamData, TypeParameterData } from '~/util/parse.server'; +import { block, DocBlockJSON } from './comment/CommentBlock'; +import { genToken, TokenDocumentation } from '~/util/parse.server'; + +export interface TypeParameterData { + name: string; + constraintTokens: TokenDocumentation[]; + defaultTokens: TokenDocumentation[]; + optional: boolean; + commentBlock: DocBlockJSON | null; +} + +export function generateTypeParamData( + model: ApiModel, + typeParam: TypeParameter, + parentItem?: ApiItem, +): TypeParameterData { + const constraintTokens = typeParam.constraintExcerpt.spannedTokens.map((token) => genToken(model, token)); + const defaultTokens = typeParam.defaultTypeExcerpt.spannedTokens.map((token) => genToken(model, token)); + + return { + name: typeParam.name, + constraintTokens, + defaultTokens, + optional: typeParam.isOptional, + commentBlock: typeParam.tsdocTypeParamBlock ? block(typeParam.tsdocTypeParamBlock, model, parentItem) : null, + }; +} export function TypeParameterMixin<TBase extends DocItemConstructor>(Base: TBase) { return class Mixed extends Base { @@ -10,7 +36,7 @@ export function TypeParameterMixin<TBase extends DocItemConstructor>(Base: TBase public constructor(model: ApiModel, item: ApiItem) { super(model, item); this.typeParameters = (item as ApiTypeParameterListMixin).typeParameters.map((typeParam) => - generateTypeParamData(this.model, typeParam), + generateTypeParamData(this.model, typeParam, item.parent), ); } diff --git a/packages/website/src/DocModel/comment/LinkTagCommentNode.ts b/packages/website/src/DocModel/comment/LinkTagCommentNode.ts index bfcb105ffbc1..e835f52d202e 100644 --- a/packages/website/src/DocModel/comment/LinkTagCommentNode.ts +++ b/packages/website/src/DocModel/comment/LinkTagCommentNode.ts @@ -14,11 +14,7 @@ export function genToken( ref: DocDeclarationReference, context: ApiItem | null, ): LinkTagCodeLink | null { - if (!context) { - return null; - } - - const item = model.resolveDeclarationReference(ref, context).resolvedApiItem ?? null; + const item = model.resolveDeclarationReference(ref, context ?? undefined).resolvedApiItem ?? null; if (!item) { return null; @@ -38,8 +34,14 @@ export interface LinkTagCodeLink { } export function linkTagNode(linkNode: DocLinkTag, model: ApiModel, parentItem?: ApiItem): DocLinkTagJSON { - const codeDestination = - linkNode.codeDestination && parentItem ? genToken(model, linkNode.codeDestination, parentItem) : null; + // If we weren't provided a parent object, fallback to the package entrypoint. + const packageEntryPoint = linkNode.codeDestination?.importPath + ? model.getAssociatedPackage()?.findEntryPointsByPath(linkNode.codeDestination.importPath)[0] + : null; + + const codeDestination = linkNode.codeDestination + ? genToken(model, linkNode.codeDestination, parentItem ?? packageEntryPoint ?? null) + : null; const text = linkNode.linkText ?? null; const urlDestination = linkNode.urlDestination ?? null; diff --git a/packages/website/src/components/DocContainer.tsx b/packages/website/src/components/DocContainer.tsx index e20af04ab094..335126473c90 100644 --- a/packages/website/src/components/DocContainer.tsx +++ b/packages/website/src/components/DocContainer.tsx @@ -1,6 +1,6 @@ import { Group, Stack, Title, Text, Box, MediaQuery, Aside, ScrollArea } from '@mantine/core'; import { useMediaQuery } from '@mantine/hooks'; -import type { ReactNode } from 'react'; +import { Fragment, ReactNode } from 'react'; import { VscListSelection, VscSymbolParameter } from 'react-icons/vsc'; import { PrismAsyncLight as SyntaxHighlighter } from 'react-syntax-highlighter'; import { vscDarkPlus } from 'react-syntax-highlighter/dist/cjs/styles/prism'; @@ -11,9 +11,10 @@ import { TypeParamTable } from './TypeParamTable'; import { TSDoc } from './tsdoc/TSDoc'; import type { DocClass } from '~/DocModel/DocClass'; import type { DocItem } from '~/DocModel/DocItem'; +import type { TypeParameterData } from '~/DocModel/TypeParameterMixin'; import type { AnyDocNodeJSON } from '~/DocModel/comment/CommentNode'; import { generateIcon } from '~/util/icon'; -import type { TokenDocumentation, TypeParameterData } from '~/util/parse.server'; +import type { TokenDocumentation } from '~/util/parse.server'; export interface DocContainerProps { name: string; @@ -84,10 +85,10 @@ export function DocContainer({ {implementsTokens.map((token, idx) => ( - <> + {idx < implementsTokens.length - 1 ? ', ' : ''} - + ))} diff --git a/packages/website/src/components/MethodList.tsx b/packages/website/src/components/MethodList.tsx index bab7d7a63ac5..69204a622d85 100644 --- a/packages/website/src/components/MethodList.tsx +++ b/packages/website/src/components/MethodList.tsx @@ -1,4 +1,5 @@ import { Divider, Stack } from '@mantine/core'; +import { Fragment } from 'react'; import { MethodItem } from './MethodItem'; import type { DocMethod } from '~/DocModel/DocMethod'; import type { DocMethodSignature } from '~/DocModel/DocMethodSignature'; @@ -11,13 +12,12 @@ export function MethodList({ return ( {data.map((method) => ( - <> - 1 ? `:${method.overloadIndex}` : ''}`} - data={method} - /> + 1 ? `:${method.overloadIndex}` : ''}`} + > + - + ))} ); diff --git a/packages/website/src/components/TypeParamTable.tsx b/packages/website/src/components/TypeParamTable.tsx index 73252738a076..497755c6d4b6 100644 --- a/packages/website/src/components/TypeParamTable.tsx +++ b/packages/website/src/components/TypeParamTable.tsx @@ -1,7 +1,8 @@ -import { Box } from '@mantine/core'; +import { Box, ScrollArea } from '@mantine/core'; import { HyperlinkedText } from './HyperlinkedText'; import { Table } from './Table'; -import type { TypeParameterData } from '~/util/parse.server'; +import { TSDoc } from './tsdoc/TSDoc'; +import type { TypeParameterData } from '~/DocModel/TypeParameterMixin'; export function TypeParamTable({ data }: { data: TypeParameterData[] }) { const rows = data.map((typeParam) => ({ @@ -9,22 +10,24 @@ export function TypeParamTable({ data }: { data: TypeParameterData[] }) { Constraints: , Optional: typeParam.optional ? 'Yes' : 'No', Default: , - Description: 'None', + Description: typeParam.commentBlock ? : 'None', })); const rowElements = { - Name: 'font-mono', - Constraints: 'font-mono', - Default: 'font-mono', + Name: 'font-mono whitespace-nowrap', + Constraints: 'font-mono whitespace-pre break-normal', + Default: 'font-mono whitespace-pre break-normal', }; return ( -
+ +
+ ); } diff --git a/packages/website/src/components/tsdoc/BlockComment.tsx b/packages/website/src/components/tsdoc/BlockComment.tsx index 287329eeb246..e8201a33b082 100644 --- a/packages/website/src/components/tsdoc/BlockComment.tsx +++ b/packages/website/src/components/tsdoc/BlockComment.tsx @@ -52,6 +52,7 @@ export function BlockComment({ children, tagName, index }: BlockCommentProps): J return {children}; case StandardTags.remarks.tagNameWithUpperCase: return {children}; + case StandardTags.typeParam.tagNameWithUpperCase: case StandardTags.param.tagNameWithUpperCase: return {children}; default: // TODO: Support more blocks in the future. diff --git a/packages/website/src/components/tsdoc/TSDoc.tsx b/packages/website/src/components/tsdoc/TSDoc.tsx index da8a94dd27e8..c644754c55eb 100644 --- a/packages/website/src/components/tsdoc/TSDoc.tsx +++ b/packages/website/src/components/tsdoc/TSDoc.tsx @@ -1,7 +1,7 @@ import { Anchor, Box, Code, Text } from '@mantine/core'; import { DocNodeKind, StandardTags } from '@microsoft/tsdoc'; import Link from 'next/link'; -import type { ReactNode } from 'react'; +import { Fragment, ReactNode } from 'react'; import { PrismAsyncLight as SyntaxHighlighter } from 'react-syntax-highlighter'; import { vscDarkPlus } from 'react-syntax-highlighter/dist/cjs/styles/prism'; import { BlockComment } from './BlockComment'; @@ -32,7 +32,7 @@ export function TSDoc({ node }: { node: AnyDocNodeJSON }): JSX.Element { ); case DocNodeKind.SoftBreak: - return <>; + return ; case DocNodeKind.LinkTag: { const { codeDestination, urlDestination, text } = node as DocLinkTagJSON; diff --git a/packages/website/src/util/parse.server.ts b/packages/website/src/util/parse.server.ts index 8b39289ba90d..565284ee0905 100644 --- a/packages/website/src/util/parse.server.ts +++ b/packages/website/src/util/parse.server.ts @@ -10,7 +10,6 @@ import { type ApiPropertyItem, type ExcerptToken, type Parameter, - type TypeParameter, ApiFunction, } from '@microsoft/api-extractor-model'; import type { DocNode, DocParagraph, DocPlainText } from '@microsoft/tsdoc'; @@ -25,7 +24,7 @@ export function findPackage(model: ApiModel, name: string): ApiPackage | undefin } export function generatePath(items: readonly ApiItem[]) { - let path = '/docs/main/packages/'; + let path = '/docs/main/packages'; for (const item of items) { switch (item.kind) { case ApiItemKind.Model: @@ -33,17 +32,24 @@ export function generatePath(items: readonly ApiItem[]) { case ApiItemKind.EnumMember: break; case ApiItemKind.Package: - path += `${item.displayName}/`; + path += `/${item.displayName}`; break; case ApiItemKind.Function: // eslint-disable-next-line no-case-declarations const functionItem = item as ApiFunction; - path += `${functionItem.displayName}${ + path += `/${functionItem.displayName}${ functionItem.overloadIndex && functionItem.overloadIndex > 1 ? `:${functionItem.overloadIndex}` : '' - }/`; + }`; + break; + case ApiItemKind.Property: + case ApiItemKind.Method: + case ApiItemKind.MethodSignature: + case ApiItemKind.PropertySignature: + // TODO: Take overloads into account + path += `#${item.displayName}`; break; default: - path += `${item.displayName}/`; + path += `/${item.displayName}`; } } @@ -213,22 +219,3 @@ export function getMembers(pkg: ApiPackage) { overloadIndex: member.kind === 'Function' ? (member as ApiFunction).overloadIndex : null, })); } - -export interface TypeParameterData { - name: string; - constraintTokens: TokenDocumentation[]; - defaultTokens: TokenDocumentation[]; - optional: boolean; -} - -export function generateTypeParamData(model: ApiModel, typeParam: TypeParameter): TypeParameterData { - const constraintTokens = typeParam.constraintExcerpt.spannedTokens.map((token) => genToken(model, token)); - const defaultTokens = typeParam.defaultTypeExcerpt.spannedTokens.map((token) => genToken(model, token)); - - return { - name: typeParam.name, - constraintTokens, - defaultTokens, - optional: typeParam.isOptional, - }; -} From 47f2990b898ae80cad51d08a41cab4890a7bf50c Mon Sep 17 00:00:00 2001 From: Suneet Tipirneni <77477100+suneettipirneni@users.noreply.github.com> Date: Fri, 19 Aug 2022 12:22:22 -0400 Subject: [PATCH 016/155] feat(website): show inherited members (#8526) * feat(website): show inherited members * fix: use passHref --- packages/website/src/DocModel/DocClass.ts | 25 +++++++++++++++---- packages/website/src/DocModel/DocInterface.ts | 25 +++++++++++++++---- packages/website/src/DocModel/DocMethod.ts | 17 ++++++++++++- .../src/DocModel/DocMethodSignature.ts | 13 +++++++++- packages/website/src/DocModel/DocProperty.ts | 14 +++++++++-- .../website/src/components/CodeListing.tsx | 5 ++++ .../src/components/InheritanceText.tsx | 16 ++++++++++++ .../website/src/components/MethodItem.tsx | 3 ++- .../website/src/components/PropertyList.tsx | 1 + 9 files changed, 104 insertions(+), 15 deletions(-) create mode 100644 packages/website/src/components/InheritanceText.tsx diff --git a/packages/website/src/DocModel/DocClass.ts b/packages/website/src/DocModel/DocClass.ts index 96c067708a35..0403e1e2e063 100644 --- a/packages/website/src/DocModel/DocClass.ts +++ b/packages/website/src/DocModel/DocClass.ts @@ -29,14 +29,29 @@ export class DocClass extends TypeParameterMixin(DocItem) { excerpt.excerpt.spannedTokens.map((token) => genToken(this.model, token)), ); - for (const member of item.members) { + for (const member of item.findMembersWithInheritance().items) { switch (member.kind) { - case ApiItemKind.Method: - this.methods.push(new DocMethod(this.model, member as ApiMethod)); + case ApiItemKind.Method: { + const method = member as ApiMethod; + + if (method.parent?.containerKey !== this.containerKey) { + this.methods.push(new DocMethod(this.model, method, true)); + break; + } + this.methods.push(new DocMethod(this.model, method)); break; - case ApiItemKind.Property: - this.properties.push(new DocProperty(this.model, member as ApiPropertyItem)); + } + case ApiItemKind.Property: { + const property = member as ApiPropertyItem; + + if (property.parent?.containerKey !== this.containerKey) { + this.properties.push(new DocProperty(this.model, property, true)); + break; + } + + this.properties.push(new DocProperty(this.model, property)); break; + } default: break; } diff --git a/packages/website/src/DocModel/DocInterface.ts b/packages/website/src/DocModel/DocInterface.ts index f2b76a6af0c1..88058b1cf557 100644 --- a/packages/website/src/DocModel/DocInterface.ts +++ b/packages/website/src/DocModel/DocInterface.ts @@ -23,14 +23,29 @@ export class DocInterface extends TypeParameterMixin(DocItem) { excerpt.excerpt.spannedTokens.map((token) => genToken(this.model, token)), ); - for (const member of item.members) { + for (const member of item.findMembersWithInheritance().items) { switch (member.kind) { - case ApiItemKind.MethodSignature: - this.methods.push(new DocMethodSignature(this.model, member as ApiMethodSignature)); + case ApiItemKind.MethodSignature: { + const method = member as ApiMethodSignature; + + if (method.parent?.containerKey !== this.containerKey) { + this.methods.push(new DocMethodSignature(this.model, method, true)); + break; + } + this.methods.push(new DocMethodSignature(this.model, method)); break; - case ApiItemKind.PropertySignature: - this.properties.push(new DocProperty(this.model, member as ApiPropertySignature)); + } + case ApiItemKind.PropertySignature: { + const property = member as ApiPropertySignature; + + if (property.parent?.containerKey !== this.containerKey) { + this.properties.push(new DocProperty(this.model, property, true)); + break; + } + + this.properties.push(new DocProperty(this.model, property)); break; + } default: break; } diff --git a/packages/website/src/DocModel/DocMethod.ts b/packages/website/src/DocModel/DocMethod.ts index 60ed61075c7a..9a6e8dd35aad 100644 --- a/packages/website/src/DocModel/DocMethod.ts +++ b/packages/website/src/DocModel/DocMethod.ts @@ -1,17 +1,31 @@ import type { ApiMethod, ApiModel } from '@microsoft/api-extractor-model'; import { DocFunction } from './DocFunction'; import { Visibility } from './Visibility'; +import { generatePath } from '~/util/parse.server'; + +export interface InheritanceData { + parentName: string; + path: string; +} export class DocMethod extends DocFunction { public readonly static: boolean; public readonly optional: boolean; public readonly visibility: Visibility; + public readonly inheritanceData: InheritanceData | null; - public constructor(model: ApiModel, item: ApiMethod) { + public constructor(model: ApiModel, item: ApiMethod, inherited = false) { super(model, item); this.static = item.isStatic; this.optional = item.isOptional; this.visibility = item.isProtected ? Visibility.Protected : Visibility.Public; + this.inheritanceData = + inherited && item.parent + ? { + parentName: item.parent.displayName, + path: generatePath(item.parent.getHierarchy()), + } + : null; } public override toJSON() { @@ -20,6 +34,7 @@ export class DocMethod extends DocFunction { static: this.static, optional: this.optional, visibility: this.visibility, + inheritanceData: this.inheritanceData, }; } } diff --git a/packages/website/src/DocModel/DocMethodSignature.ts b/packages/website/src/DocModel/DocMethodSignature.ts index f5f5087860c2..0a8268a9aaf2 100644 --- a/packages/website/src/DocModel/DocMethodSignature.ts +++ b/packages/website/src/DocModel/DocMethodSignature.ts @@ -1,18 +1,29 @@ import type { ApiMethodSignature, ApiModel } from '@microsoft/api-extractor-model'; import { DocFunction } from './DocFunction'; +import type { InheritanceData } from './DocMethod'; +import { generatePath } from '~/util/parse.server'; export class DocMethodSignature extends DocFunction { public readonly optional: boolean; + public readonly inheritanceData: InheritanceData | null; - public constructor(model: ApiModel, item: ApiMethodSignature) { + public constructor(model: ApiModel, item: ApiMethodSignature, inherited = false) { super(model, item); this.optional = item.isOptional; + this.inheritanceData = + inherited && item.parent + ? { + parentName: item.parent.displayName, + path: generatePath(item.parent.getHierarchy()), + } + : null; } public override toJSON() { return { ...super.toJSON(), optional: this.optional, + inheritanceData: this.inheritanceData, }; } } diff --git a/packages/website/src/DocModel/DocProperty.ts b/packages/website/src/DocModel/DocProperty.ts index dc708dd4fa1a..8a2389b0740d 100644 --- a/packages/website/src/DocModel/DocProperty.ts +++ b/packages/website/src/DocModel/DocProperty.ts @@ -1,17 +1,26 @@ import type { ApiPropertyItem, ApiModel, ApiPropertySignature } from '@microsoft/api-extractor-model'; import { DocItem } from './DocItem'; -import { type TokenDocumentation, genToken } from '~/util/parse.server'; +import type { InheritanceData } from './DocMethod'; +import { type TokenDocumentation, genToken, generatePath } from '~/util/parse.server'; export class DocProperty extends DocItem { public readonly propertyTypeTokens: TokenDocumentation[]; public readonly readonly: boolean; public readonly optional: boolean; + public readonly inheritanceData: InheritanceData | null; - public constructor(model: ApiModel, item: ApiPropertyItem | ApiPropertySignature) { + public constructor(model: ApiModel, item: ApiPropertyItem | ApiPropertySignature, inherited = false) { super(model, item); this.propertyTypeTokens = item.propertyTypeExcerpt.spannedTokens.map((token) => genToken(this.model, token)); this.readonly = item.isReadonly; this.optional = item.isOptional; + this.inheritanceData = + inherited && item.parent + ? { + parentName: item.parent.displayName, + path: generatePath(item.parent.getHierarchy()), + } + : null; } public override toJSON() { @@ -20,6 +29,7 @@ export class DocProperty extends DocItem { propertyTypeTokens: this.propertyTypeTokens, readonly: this.readonly, optional: this.optional, + inheritanceData: this.inheritanceData, }; } } diff --git a/packages/website/src/components/CodeListing.tsx b/packages/website/src/components/CodeListing.tsx index b5c4b63c2e63..46200758807b 100644 --- a/packages/website/src/components/CodeListing.tsx +++ b/packages/website/src/components/CodeListing.tsx @@ -1,8 +1,10 @@ import { Badge, Group, Stack, Title } from '@mantine/core'; import type { ReactNode } from 'react'; import { HyperlinkedText } from './HyperlinkedText'; +import { InheritanceText } from './InheritanceText'; import { TSDoc } from './tsdoc/TSDoc'; import type { DocItem } from '~/DocModel/DocItem'; +import type { InheritanceData } from '~/DocModel/DocMethod'; import type { AnyDocNodeJSON } from '~/DocModel/comment/CommentNode'; import type { TokenDocumentation } from '~/util/parse.server'; @@ -21,6 +23,7 @@ export function CodeListing({ children, comment, deprecation, + inheritanceData, }: { name: string; separator?: CodeListingSeparatorType; @@ -31,6 +34,7 @@ export function CodeListing({ comment?: AnyDocNodeJSON | null; children?: ReactNode; deprecation?: AnyDocNodeJSON | null; + inheritanceData?: InheritanceData | null; }) { return ( @@ -56,6 +60,7 @@ export function CodeListing({ {deprecation ? : null} {summary && } {comment && } + {inheritanceData ? : null} {children} diff --git a/packages/website/src/components/InheritanceText.tsx b/packages/website/src/components/InheritanceText.tsx new file mode 100644 index 000000000000..655b9856828d --- /dev/null +++ b/packages/website/src/components/InheritanceText.tsx @@ -0,0 +1,16 @@ +import { Anchor, Text } from '@mantine/core'; +import Link from 'next/link'; +import type { InheritanceData } from '~/DocModel/DocMethod'; + +export function InheritanceText({ data }: { data: InheritanceData }) { + return ( + + {'Inherited from '} + + + {data.parentName} + + + + ); +} diff --git a/packages/website/src/components/MethodItem.tsx b/packages/website/src/components/MethodItem.tsx index 6a4d52a378d3..3200de490833 100644 --- a/packages/website/src/components/MethodItem.tsx +++ b/packages/website/src/components/MethodItem.tsx @@ -1,5 +1,6 @@ import { Badge, Group, Stack, Title } from '@mantine/core'; import { HyperlinkedText } from './HyperlinkedText'; +import { InheritanceText } from './InheritanceText'; import { ParameterTable } from './ParameterTable'; import { TSDoc } from './tsdoc/TSDoc'; import type { DocMethod } from '~/DocModel/DocMethod'; @@ -20,7 +21,6 @@ function getShorthandName(data: MethodResolvable) { export function MethodItem({ data }: { data: MethodResolvable }) { const method = data as ReturnType; - return ( 1 ? `:${data.overloadIndex}` : ''}`} @@ -54,6 +54,7 @@ export function MethodItem({ data }: { data: MethodResolvable }) { {data.remarks ? : null} {data.comment ? : null} {data.parameters.length ? : null} + {data.inheritanceData ? : null} diff --git a/packages/website/src/components/PropertyList.tsx b/packages/website/src/components/PropertyList.tsx index 79f3ca6461e2..3188312db609 100644 --- a/packages/website/src/components/PropertyList.tsx +++ b/packages/website/src/components/PropertyList.tsx @@ -15,6 +15,7 @@ export function PropertyList({ data }: { data: ReturnType summary={prop.summary} comment={prop.comment} deprecation={prop.deprecated} + inheritanceData={prop.inheritanceData} /> ))} From 8028813825e7708915ea892760c1003afd60df2f Mon Sep 17 00:00:00 2001 From: Suneet Tipirneni <77477100+suneettipirneni@users.noreply.github.com> Date: Fri, 19 Aug 2022 12:24:55 -0400 Subject: [PATCH 017/155] feat(website): render `@defaultValue` blocks (#8527) feat(website): render @defaultValue blocks --- packages/rest/src/lib/CDN.ts | 4 +-- packages/rest/src/lib/REST.ts | 30 +++++++++---------- packages/rest/src/lib/RequestManager.ts | 6 ++-- .../src/components/tsdoc/BlockComment.tsx | 6 ++++ packages/ws/src/ws/WebSocketManager.ts | 8 ++--- 5 files changed, 30 insertions(+), 24 deletions(-) diff --git a/packages/rest/src/lib/CDN.ts b/packages/rest/src/lib/CDN.ts index 3f03c1aa51be..0385adc03d4d 100644 --- a/packages/rest/src/lib/CDN.ts +++ b/packages/rest/src/lib/CDN.ts @@ -15,7 +15,7 @@ export interface BaseImageURLOptions { /** * The extension to use for the image URL * - * @default 'webp' + * @defaultValue `'webp'` */ extension?: ImageExtension; /** @@ -41,7 +41,7 @@ export interface MakeURLOptions { /** * The extension to use for the image URL * - * @default 'webp' + * @defaultValue `'webp'` */ extension?: string | undefined; /** diff --git a/packages/rest/src/lib/REST.ts b/packages/rest/src/lib/REST.ts index d7ffadd26d73..356b077e2594 100644 --- a/packages/rest/src/lib/REST.ts +++ b/packages/rest/src/lib/REST.ts @@ -25,45 +25,45 @@ export interface RESTOptions { agent: Dispatcher; /** * The base api path, without version - * @default 'https://discord.com/api' + * @defaultValue `'https://discord.com/api'` */ api: string; /** * The authorization prefix to use for requests, useful if you want to use * bearer tokens * - * @default 'Bot' + * @defaultValue `'Bot'` */ authPrefix: 'Bot' | 'Bearer'; /** * The cdn path * - * @default 'https://cdn.discordapp.com' + * @defaultValue 'https://cdn.discordapp.com' */ cdn: string; /** * Additional headers to send for all API requests * - * @default {} + * @defaultValue `{}` */ headers: Record; /** * The number of invalid REST requests (those that return 401, 403, or 429) in a 10 minute window between emitted warnings (0 for no warnings). * That is, if set to 500, warnings will be emitted at invalid request number 500, 1000, 1500, and so on. * - * @default 0 + * @defaultValue `0` */ invalidRequestWarningInterval: number; /** * How many requests to allow sending per second (Infinity for unlimited, 50 for the standard global limit used by Discord) * - * @default 50 + * @defaultValue `50` */ globalRequestsPerSecond: number; /** * The extra offset to add to rate limits in milliseconds * - * @default 50 + * @defaultValue `50` */ offset: number; /** @@ -72,50 +72,50 @@ export interface RESTOptions { * (e.g. `/channels` to match any route starting with `/channels` such as `/channels/:id/messages`) * for which to throw {@link RateLimitError}s. All other request routes will be queued normally * - * @default null + * @defaultValue `null` */ rejectOnRateLimit: string[] | RateLimitQueueFilter | null; /** * The number of retries for errors with the 500 code, or errors * that timeout * - * @default 3 + * @defaultValue `3` */ retries: number; /** * The time to wait in milliseconds before a request is aborted * - * @default 15_000 + * @defaultValue `15_000` */ timeout: number; /** * Extra information to add to the user agent * - * @default `Node.js ${process.version}` + * @defaultValue ``Node.js ${process.version}`` */ userAgentAppendix: string; /** * The version of the API to use * - * @default '10' + * @defaultValue `'10'` */ version: string; /** * The amount of time in milliseconds that passes between each hash sweep. (defaults to 4h) * - * @default 14_400_000 + * @defaultValue `14_400_000` */ hashSweepInterval: number; /** * The maximum amount of time a hash can exist in milliseconds without being hit with a request (defaults to 24h) * - * @default 86_400_000 + * @defaultValue `86_400_000` */ hashLifetime: number; /** * The amount of time in milliseconds that passes between each hash sweep. (defaults to 1h) * - * @default 3_600_000 + * @defaultValue `3_600_000` */ handlerSweepInterval: number; } diff --git a/packages/rest/src/lib/RequestManager.ts b/packages/rest/src/lib/RequestManager.ts index bdc0364b22f3..52ef3a0c0053 100644 --- a/packages/rest/src/lib/RequestManager.ts +++ b/packages/rest/src/lib/RequestManager.ts @@ -50,13 +50,13 @@ export interface RequestData { /** * If this request needs the `Authorization` header * - * @default true + * @defaultValue `true` */ auth?: boolean; /** * The authorization prefix to use for this request, useful if you use this with bearer tokens * - * @default 'Bot' + * @defaultValue `'Bot'` */ authPrefix?: 'Bot' | 'Bearer'; /** @@ -92,7 +92,7 @@ export interface RequestData { /** * If this request should be versioned * - * @default true + * @defaultValue `true` */ versioned?: boolean; } diff --git a/packages/website/src/components/tsdoc/BlockComment.tsx b/packages/website/src/components/tsdoc/BlockComment.tsx index e8201a33b082..373cb13edf8f 100644 --- a/packages/website/src/components/tsdoc/BlockComment.tsx +++ b/packages/website/src/components/tsdoc/BlockComment.tsx @@ -40,6 +40,10 @@ export function DeprecatedBlock({ children }: { children: ReactNode }): JSX.Elem ); } +export function DefaultValueBlock({ children }: { children: ReactNode }): JSX.Element { + return {children}; +} + export function RemarksBlock({ children }: { children: ReactNode }): JSX.Element { return {children}; } @@ -52,6 +56,8 @@ export function BlockComment({ children, tagName, index }: BlockCommentProps): J return {children}; case StandardTags.remarks.tagNameWithUpperCase: return {children}; + case StandardTags.defaultValue.tagNameWithUpperCase: + return {children}; case StandardTags.typeParam.tagNameWithUpperCase: case StandardTags.param.tagNameWithUpperCase: return {children}; diff --git a/packages/ws/src/ws/WebSocketManager.ts b/packages/ws/src/ws/WebSocketManager.ts index 3d75c6e9bbc0..52a28ce5ba37 100644 --- a/packages/ws/src/ws/WebSocketManager.ts +++ b/packages/ws/src/ws/WebSocketManager.ts @@ -112,17 +112,17 @@ export interface OptionalWebSocketManagerOptions { identifyProperties: GatewayIdentifyProperties; /** * The gateway version to use - * @default '10' + * @defaultValue `'10'` */ version: string; /** * The encoding to use - * @default 'json' + * @defaultValue `'json'` */ encoding: Encoding; /** * The compression method to use - * @default null (no compression) + * @defaultValue `null` (no compression) */ compression: CompressionMethod | null; /** @@ -187,7 +187,7 @@ export class WebSocketManager extends AsyncEventEmitter { /** * Strategy used to manage shards - * @default SimpleManagerToShardStrategy + * @defaultValue `SimpleManagerToShardStrategy` */ private strategy: IShardingStrategy = new SimpleShardingStrategy(this); From 4882b17a77484f801faa19fb971f2e6abd88e59f Mon Sep 17 00:00:00 2001 From: Jiralite <33201955+Jiralite@users.noreply.github.com> Date: Sat, 20 Aug 2022 19:26:33 +0100 Subject: [PATCH 018/155] types: Disallow some channel types from webhook creation (#8531) types: disallow some channel types from webhook creation --- packages/discord.js/src/managers/GuildChannelManager.js | 2 +- packages/discord.js/typings/index.d.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/discord.js/src/managers/GuildChannelManager.js b/packages/discord.js/src/managers/GuildChannelManager.js index aa43dc350011..012821cfcd76 100644 --- a/packages/discord.js/src/managers/GuildChannelManager.js +++ b/packages/discord.js/src/managers/GuildChannelManager.js @@ -164,7 +164,7 @@ class GuildChannelManager extends CachedManager { /** * @typedef {ChannelWebhookCreateOptions} WebhookCreateOptions - * @property {GuildChannelResolvable} channel The channel to create the webhook for + * @property {TextChannel|NewsChannel|VoiceChannel|Snowflake} channel The channel to create the webhook for */ /** diff --git a/packages/discord.js/typings/index.d.ts b/packages/discord.js/typings/index.d.ts index 9c6ba1a95427..720cc6c36c90 100644 --- a/packages/discord.js/typings/index.d.ts +++ b/packages/discord.js/typings/index.d.ts @@ -4152,7 +4152,7 @@ export interface ChannelWebhookCreateOptions { } export interface WebhookCreateOptions extends ChannelWebhookCreateOptions { - channel: GuildChannelResolvable; + channel: TextChannel | NewsChannel | VoiceChannel | Snowflake; } export interface ClientEvents { From 7a3d18dd6d1fe27393d00019b9ecd35c98b95ee7 Mon Sep 17 00:00:00 2001 From: Jiralite <33201955+Jiralite@users.noreply.github.com> Date: Sat, 20 Aug 2022 19:34:32 +0100 Subject: [PATCH 019/155] types(GuildAuditLogs): Remove static `Entry` (#8521) types(GuildAuditLogs): remove static `Entry` Co-authored-by: kodiakhq[bot] <49736102+kodiakhq[bot]@users.noreply.github.com> --- packages/discord.js/typings/index.d.ts | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/discord.js/typings/index.d.ts b/packages/discord.js/typings/index.d.ts index 720cc6c36c90..fb0d6b6615d9 100644 --- a/packages/discord.js/typings/index.d.ts +++ b/packages/discord.js/typings/index.d.ts @@ -1185,7 +1185,6 @@ export class GuildAuditLogs { private integrations: Collection; private guildScheduledEvents: Collection; public entries: Collection>; - public static Entry: typeof GuildAuditLogsEntry; public toJSON(): unknown; } From 16bbc8aa208a8a16c22be24696f57d5f7a5faf2b Mon Sep 17 00:00:00 2001 From: InkoHX Date: Sun, 21 Aug 2022 03:45:56 +0900 Subject: [PATCH 020/155] types: Correct `EventEmitter.on (static)` return type (#8524) types: Correct EventEmitter.on (static) return type Co-authored-by: kodiakhq[bot] <49736102+kodiakhq[bot]@users.noreply.github.com> --- packages/discord.js/typings/index.d.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/packages/discord.js/typings/index.d.ts b/packages/discord.js/typings/index.d.ts index fb0d6b6615d9..d314a3a14695 100644 --- a/packages/discord.js/typings/index.d.ts +++ b/packages/discord.js/typings/index.d.ts @@ -192,7 +192,10 @@ declare module 'node:events' { class EventEmitter { // Add type overloads for client events. public static once(eventEmitter: Client, eventName: K): Promise; - public static on(eventEmitter: Client, eventName: K): AsyncIterator; + public static on( + eventEmitter: Client, + eventName: K, + ): AsyncIterableIterator; } } From 2b8074dd12f2f1e957caffb57e5fd4d7be88dc25 Mon Sep 17 00:00:00 2001 From: Jiralite <33201955+Jiralite@users.noreply.github.com> Date: Sat, 20 Aug 2022 19:51:39 +0100 Subject: [PATCH 021/155] refactor(GuildAuditLogsEntry): Remove `guild` from application command permission update extra (#8520) refactor(GuildAuditLogsEntry): remove guild extra Co-authored-by: kodiakhq[bot] <49736102+kodiakhq[bot]@users.noreply.github.com> --- packages/discord.js/src/structures/GuildAuditLogsEntry.js | 1 - packages/discord.js/typings/index.d.ts | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/packages/discord.js/src/structures/GuildAuditLogsEntry.js b/packages/discord.js/src/structures/GuildAuditLogsEntry.js index 3e1eee6716d6..dde8b6e136a0 100644 --- a/packages/discord.js/src/structures/GuildAuditLogsEntry.js +++ b/packages/discord.js/src/structures/GuildAuditLogsEntry.js @@ -220,7 +220,6 @@ class GuildAuditLogsEntry { case AuditLogEvent.ApplicationCommandPermissionUpdate: this.extra = { applicationId: data.options.application_id, - guild: guild.client.guilds.cache.get(data.options.guild_id) ?? { id: data.options.guild_id }, }; break; diff --git a/packages/discord.js/typings/index.d.ts b/packages/discord.js/typings/index.d.ts index d314a3a14695..9f765adb56dd 100644 --- a/packages/discord.js/typings/index.d.ts +++ b/packages/discord.js/typings/index.d.ts @@ -4735,7 +4735,7 @@ export interface GuildAuditLogsEntryExtraField { [AuditLogEvent.StageInstanceCreate]: StageChannel | { id: Snowflake }; [AuditLogEvent.StageInstanceDelete]: StageChannel | { id: Snowflake }; [AuditLogEvent.StageInstanceUpdate]: StageChannel | { id: Snowflake }; - [AuditLogEvent.ApplicationCommandPermissionUpdate]: { applicationId: Snowflake; guild: Guild | { id: Snowflake } }; + [AuditLogEvent.ApplicationCommandPermissionUpdate]: { applicationId: Snowflake }; } export interface GuildAuditLogsEntryTargetField { From 0dba8adbd2e6efd634bd3eb31df09467ba8a8a0d Mon Sep 17 00:00:00 2001 From: Jiralite <33201955+Jiralite@users.noreply.github.com> Date: Sat, 20 Aug 2022 20:03:36 +0100 Subject: [PATCH 022/155] types(GuildAuditLogs): Allow fetching to return all possible values (#8522) types: allow everything to be returned upon fetching Co-authored-by: kodiakhq[bot] <49736102+kodiakhq[bot]@users.noreply.github.com> --- packages/discord.js/typings/index.d.ts | 15 +++++++++------ packages/discord.js/typings/index.test-d.ts | 8 +++++--- 2 files changed, 14 insertions(+), 9 deletions(-) diff --git a/packages/discord.js/typings/index.d.ts b/packages/discord.js/typings/index.d.ts index 9f765adb56dd..ac715ff647c5 100644 --- a/packages/discord.js/typings/index.d.ts +++ b/packages/discord.js/typings/index.d.ts @@ -1181,7 +1181,7 @@ export class Guild extends AnonymousGuild { public toJSON(): unknown; } -export class GuildAuditLogs { +export class GuildAuditLogs { private constructor(guild: Guild, data: RawGuildAuditLogData); private applicationCommands: Collection; private webhooks: Collection; @@ -1192,23 +1192,26 @@ export class GuildAuditLogs { } export class GuildAuditLogsEntry< - TAction extends GuildAuditLogsResolvable = null, + TAction extends GuildAuditLogsResolvable = AuditLogEvent, TActionType extends GuildAuditLogsActionType = TAction extends keyof GuildAuditLogsTypes ? GuildAuditLogsTypes[TAction][1] - : 'All', + : GuildAuditLogsActionType, TTargetType extends GuildAuditLogsTargetType = TAction extends keyof GuildAuditLogsTypes ? GuildAuditLogsTypes[TAction][0] - : 'Unknown', + : GuildAuditLogsTargetType, + TResolvedType = TAction extends null ? AuditLogEvent : TAction, > { private constructor(logs: GuildAuditLogs, guild: Guild, data: RawGuildAuditLogEntryData); public static Targets: GuildAuditLogsTargets; - public action: TAction; + public action: TResolvedType; public actionType: TActionType; public changes: AuditLogChange[]; public get createdAt(): Date; public get createdTimestamp(): number; public executor: User | null; - public extra: TAction extends keyof GuildAuditLogsEntryExtraField ? GuildAuditLogsEntryExtraField[TAction] : null; + public extra: TResolvedType extends keyof GuildAuditLogsEntryExtraField + ? GuildAuditLogsEntryExtraField[TResolvedType] + : null; public id: Snowflake; public reason: string | null; public target: TTargetType extends keyof GuildAuditLogsEntryTargetField diff --git a/packages/discord.js/typings/index.test-d.ts b/packages/discord.js/typings/index.test-d.ts index 7946a360e758..4b18299d56e2 100644 --- a/packages/discord.js/typings/index.test-d.ts +++ b/packages/discord.js/typings/index.test-d.ts @@ -134,6 +134,8 @@ import { Webhook, WebhookClient, InteractionWebhook, + GuildAuditLogsActionType, + GuildAuditLogsTargetType, } from '.'; import { expectAssignable, expectNotAssignable, expectNotType, expectType } from 'tsd'; import type { ContextMenuCommandBuilder, SlashCommandBuilder } from '@discordjs/builders'; @@ -1533,7 +1535,7 @@ expectType>>( ); expectType>>(guild.fetchAuditLogs({ type: null })); -expectType>>(guild.fetchAuditLogs()); +expectType>>(guild.fetchAuditLogs()); expectType | undefined>>( guild.fetchAuditLogs({ type: AuditLogEvent.MemberKick }).then(al => al.entries.first()), @@ -1542,10 +1544,10 @@ expectAssignable al.entries.first()), ); -expectType | undefined>>( +expectType | undefined>>( guild.fetchAuditLogs({ type: null }).then(al => al.entries.first()), ); -expectType | undefined>>( +expectType | undefined>>( guild.fetchAuditLogs().then(al => al.entries.first()), ); From b3f7c32f7f91f12766178f5e17585856e81d9a87 Mon Sep 17 00:00:00 2001 From: Jiralite <33201955+Jiralite@users.noreply.github.com> Date: Sat, 20 Aug 2022 21:29:16 +0100 Subject: [PATCH 023/155] types: Allow choice's value type to be strictly inferred (#8529) * types: stricter types for choices in options * test: add choice tests Co-authored-by: kodiakhq[bot] <49736102+kodiakhq[bot]@users.noreply.github.com> --- packages/discord.js/typings/index.d.ts | 24 ++++++++++----------- packages/discord.js/typings/index.test-d.ts | 19 ++++++++++++++++ 2 files changed, 31 insertions(+), 12 deletions(-) diff --git a/packages/discord.js/typings/index.d.ts b/packages/discord.js/typings/index.d.ts index ac715ff647c5..61e6935a78a9 100644 --- a/packages/discord.js/typings/index.d.ts +++ b/packages/discord.js/typings/index.d.ts @@ -3873,19 +3873,21 @@ export interface ApplicationCommandAutocompleteStringOptionData autocomplete: true; } -export interface ApplicationCommandChoicesData extends Omit { +export interface ApplicationCommandChoicesData + extends Omit { type: CommandOptionChoiceResolvableType; - choices?: ApplicationCommandOptionChoiceData[]; + choices?: ApplicationCommandOptionChoiceData[]; autocomplete?: false; } -export interface ApplicationCommandChoicesOption extends Omit { +export interface ApplicationCommandChoicesOption + extends Omit { type: CommandOptionChoiceResolvableType; - choices?: ApplicationCommandOptionChoiceData[]; + choices?: ApplicationCommandOptionChoiceData[]; autocomplete?: false; } -export interface ApplicationCommandNumericOptionData extends ApplicationCommandChoicesData { +export interface ApplicationCommandNumericOptionData extends ApplicationCommandChoicesData { type: CommandOptionNumericResolvableType; minValue?: number; min_value?: number; @@ -3893,7 +3895,7 @@ export interface ApplicationCommandNumericOptionData extends ApplicationCommandC max_value?: number; } -export interface ApplicationCommandStringOptionData extends ApplicationCommandChoicesData { +export interface ApplicationCommandStringOptionData extends ApplicationCommandChoicesData { type: ApplicationCommandOptionType.String; minLength?: number; min_length?: number; @@ -3905,13 +3907,13 @@ export interface ApplicationCommandBooleanOptionData extends BaseApplicationComm type: ApplicationCommandOptionType.Boolean; } -export interface ApplicationCommandNumericOption extends ApplicationCommandChoicesOption { +export interface ApplicationCommandNumericOption extends ApplicationCommandChoicesOption { type: CommandOptionNumericResolvableType; minValue?: number; maxValue?: number; } -export interface ApplicationCommandStringOption extends ApplicationCommandChoicesOption { +export interface ApplicationCommandStringOption extends ApplicationCommandChoicesOption { type: ApplicationCommandOptionType.String; minLength?: number; maxLength?: number; @@ -3953,7 +3955,6 @@ export type ApplicationCommandOptionData = | ApplicationCommandSubGroupData | ApplicationCommandNonOptionsData | ApplicationCommandChannelOptionData - | ApplicationCommandChoicesData | ApplicationCommandAutocompleteNumericOptionData | ApplicationCommandAutocompleteStringOptionData | ApplicationCommandNumericOptionData @@ -3970,7 +3971,6 @@ export type ApplicationCommandOption = | ApplicationCommandAutocompleteStringOption | ApplicationCommandNonOptions | ApplicationCommandChannelOption - | ApplicationCommandChoicesOption | ApplicationCommandNumericOption | ApplicationCommandStringOption | ApplicationCommandRoleOption @@ -3980,10 +3980,10 @@ export type ApplicationCommandOption = | ApplicationCommandAttachmentOption | ApplicationCommandSubCommand; -export interface ApplicationCommandOptionChoiceData { +export interface ApplicationCommandOptionChoiceData { name: string; nameLocalizations?: LocalizationMap; - value: string | number; + value: Value; } export interface ApplicationCommandPermissions { diff --git a/packages/discord.js/typings/index.test-d.ts b/packages/discord.js/typings/index.test-d.ts index 4b18299d56e2..995c60ae4b56 100644 --- a/packages/discord.js/typings/index.test-d.ts +++ b/packages/discord.js/typings/index.test-d.ts @@ -1102,6 +1102,7 @@ expectAssignable<'death'>(ShardEvents.Death); expectAssignable<1>(Status.Connecting); declare const applicationCommandData: ApplicationCommandData; +declare const applicationCommandOptionData: ApplicationCommandOptionData; declare const applicationCommandResolvable: ApplicationCommandResolvable; declare const applicationCommandManager: ApplicationCommandManager; { @@ -1121,6 +1122,24 @@ declare const applicationCommandManager: ApplicationCommandManager; expectType>>( applicationCommandManager.set([applicationCommandData], '0'), ); + + // Test inference of choice values. + if ('choices' in applicationCommandOptionData) { + if (applicationCommandOptionData.type === ApplicationCommandOptionType.String) { + expectType(applicationCommandOptionData.choices[0]!.value); + expectNotType(applicationCommandOptionData.choices[0]!.value); + } + + if (applicationCommandOptionData.type === ApplicationCommandOptionType.Integer) { + expectType(applicationCommandOptionData.choices[0]!.value); + expectNotType(applicationCommandOptionData.choices[0]!.value); + } + + if (applicationCommandOptionData.type === ApplicationCommandOptionType.Number) { + expectType(applicationCommandOptionData.choices[0]!.value); + expectNotType(applicationCommandOptionData.choices[0]!.value); + } + } } declare const applicationNonChoiceOptionData: ApplicationCommandOptionData & { From 23a0b6ccf27410963bd4f5c53d9ee2ce019e90a8 Mon Sep 17 00:00:00 2001 From: Jiralite <33201955+Jiralite@users.noreply.github.com> Date: Sun, 21 Aug 2022 10:28:31 +0100 Subject: [PATCH 024/155] fix(Guild): Widget channel types and fixes (#8530) fix: various widget fixes Co-authored-by: kodiakhq[bot] <49736102+kodiakhq[bot]@users.noreply.github.com> --- packages/discord.js/src/structures/Guild.js | 10 +++++++--- packages/discord.js/typings/index.d.ts | 6 +++--- 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/packages/discord.js/src/structures/Guild.js b/packages/discord.js/src/structures/Guild.js index 6d54fdca61e1..7796f87c7ddf 100644 --- a/packages/discord.js/src/structures/Guild.js +++ b/packages/discord.js/src/structures/Guild.js @@ -216,6 +216,8 @@ class Guild extends AnonymousGuild { * @type {?boolean} */ this.widgetEnabled = data.widget_enabled; + } else { + this.widgetEnabled ??= null; } if ('widget_channel_id' in data) { @@ -224,6 +226,8 @@ class Guild extends AnonymousGuild { * @type {?string} */ this.widgetChannelId = data.widget_channel_id; + } else { + this.widgetChannelId ??= null; } if ('explicit_content_filter' in data) { @@ -489,7 +493,7 @@ class Guild extends AnonymousGuild { /** * Widget channel for this guild - * @type {?TextChannel} + * @type {?(TextChannel|NewsChannel|VoiceChannel|StageChannel)} * @readonly */ get widgetChannel() { @@ -656,14 +660,14 @@ class Guild extends AnonymousGuild { * Data for the Guild Widget Settings object * @typedef {Object} GuildWidgetSettings * @property {boolean} enabled Whether the widget is enabled - * @property {?GuildChannel} channel The widget invite channel + * @property {?(TextChannel|NewsChannel|VoiceChannel|StageChannel)} channel The widget invite channel */ /** * The Guild Widget Settings object * @typedef {Object} GuildWidgetSettingsData * @property {boolean} enabled Whether the widget is enabled - * @property {?GuildChannelResolvable} channel The widget invite channel + * @property {?(TextChannel|NewsChannel|VoiceChannel|StageChannel|Snowflake)} channel The widget invite channel */ /** diff --git a/packages/discord.js/typings/index.d.ts b/packages/discord.js/typings/index.d.ts index 61e6935a78a9..b62f3887062b 100644 --- a/packages/discord.js/typings/index.d.ts +++ b/packages/discord.js/typings/index.d.ts @@ -1127,7 +1127,7 @@ export class Guild extends AnonymousGuild { public vanityURLUses: number | null; public get voiceAdapterCreator(): InternalDiscordGatewayAdapterCreator; public voiceStates: VoiceStateManager; - public get widgetChannel(): TextChannel | null; + public get widgetChannel(): TextChannel | NewsChannel | VoiceBasedChannel | null; public widgetChannelId: Snowflake | null; public widgetEnabled: boolean | null; public get maximumBitrate(): number; @@ -4830,7 +4830,7 @@ export interface GuildCreateOptions { export interface GuildWidgetSettings { enabled: boolean; - channel: NonThreadGuildBasedChannel | null; + channel: TextChannel | NewsChannel | VoiceBasedChannel | null; } export interface GuildEditData { @@ -4908,7 +4908,7 @@ export interface GuildPruneMembersOptions { export interface GuildWidgetSettingsData { enabled: boolean; - channel: GuildChannelResolvable | null; + channel: TextChannel | NewsChannel | VoiceBasedChannel | Snowflake | null; } export interface GuildSearchMembersOptions { From 3bef9018c0be3c5dc51d03b796d08b925dc4e1b9 Mon Sep 17 00:00:00 2001 From: Synbulat Biishev Date: Mon, 22 Aug 2022 01:32:56 +0500 Subject: [PATCH 025/155] fix(GuildMemberManager): `add()` method throws an error (#8539) * fix(GuildMemberManager): `add()` method throws an error * chore: update comment --- packages/discord.js/src/managers/GuildMemberManager.js | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/packages/discord.js/src/managers/GuildMemberManager.js b/packages/discord.js/src/managers/GuildMemberManager.js index 703acf586522..6a4739f14777 100644 --- a/packages/discord.js/src/managers/GuildMemberManager.js +++ b/packages/discord.js/src/managers/GuildMemberManager.js @@ -1,6 +1,5 @@ 'use strict'; -const { Buffer } = require('node:buffer'); const { setTimeout, clearTimeout } = require('node:timers'); const { Collection } = require('@discordjs/collection'); const { makeURLSearchParams } = require('@discordjs/rest'); @@ -128,8 +127,12 @@ class GuildMemberManager extends CachedManager { resolvedOptions.roles = resolvedRoles; } const data = await this.client.rest.put(Routes.guildMember(this.guild.id, userId), { body: resolvedOptions }); - // Data is an empty buffer if the member is already part of the guild. - return data instanceof Buffer ? (options.fetchWhenExisting === false ? null : this.fetch(userId)) : this._add(data); + // Data is an empty Uint8Array if the member is already part of the guild. + return data instanceof Uint8Array + ? options.fetchWhenExisting === false + ? null + : this.fetch(userId) + : this._add(data); } /** From dd44e8b6ec141e630af4543bd3babcce39aa2887 Mon Sep 17 00:00:00 2001 From: Jiralite <33201955+Jiralite@users.noreply.github.com> Date: Sun, 21 Aug 2022 21:39:40 +0100 Subject: [PATCH 026/155] fix(proxyRequests): Typo in error message (#8537) fix(proxyRequests): typo in error message Co-authored-by: kodiakhq[bot] <49736102+kodiakhq[bot]@users.noreply.github.com> --- packages/proxy/src/handlers/proxyRequests.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/proxy/src/handlers/proxyRequests.ts b/packages/proxy/src/handlers/proxyRequests.ts index e5f5afd538e2..823c9c14c615 100644 --- a/packages/proxy/src/handlers/proxyRequests.ts +++ b/packages/proxy/src/handlers/proxyRequests.ts @@ -19,7 +19,7 @@ export function proxyRequests(rest: REST): RequestHandler { if (!method || !url) { throw new TypeError( - 'Invalid request. Missing method and/or url, implying that this is not a Server IncomingMesage', + 'Invalid request. Missing method and/or url, implying that this is not a Server IncomingMessage', ); } From e42fd1636973b10dd7ed6fb4280ee1a4a8f82007 Mon Sep 17 00:00:00 2001 From: Suneet Tipirneni <77477100+suneettipirneni@users.noreply.github.com> Date: Mon, 22 Aug 2022 03:45:53 -0400 Subject: [PATCH 027/155] feat(website): Show `constructor` information (#8540) --- packages/builders/.eslintrc.json | 6 +- packages/builders/package.json | 1 + packages/builders/src/components/ActionRow.ts | 2 +- packages/builders/src/components/Component.ts | 6 +- .../builders/src/components/button/Button.ts | 38 +- .../src/components/selectMenu/SelectMenu.ts | 2 +- .../components/selectMenu/SelectMenuOption.ts | 2 +- .../src/components/textInput/TextInput.ts | 2 +- .../ContextMenuCommandBuilder.ts | 4 +- .../builders/src/interactions/modals/Modal.ts | 3 + .../slashCommands/options/integer.ts | 6 + .../slashCommands/options/number.ts | 6 + packages/builders/src/messages/embed/Embed.ts | 28 +- packages/collection/.eslintrc.json | 6 +- packages/collection/package.json | 1 + packages/proxy/.eslintrc.json | 6 +- packages/rest/.eslintrc.json | 6 +- packages/rest/package.json | 1 + packages/rest/src/lib/REST.ts | 2 +- packages/rest/src/lib/RequestManager.ts | 8 +- packages/rest/src/lib/handlers/IHandler.ts | 14 + .../src/lib/handlers/SequentialHandler.ts | 11 +- packages/voice/.eslintrc.json | 4 + packages/voice/package.json | 1 + packages/voice/src/VoiceConnection.ts | 8 +- packages/voice/src/audio/AudioPlayer.ts | 10 +- packages/voice/src/audio/AudioResource.ts | 10 +- packages/voice/src/networking/Networking.ts | 2 +- .../voice/src/networking/VoiceWebSocket.ts | 4 +- packages/voice/src/receive/SpeakingMap.ts | 4 +- .../src/DocModel/ApiNodeJSONEncoder.ts | 381 ++++++++++++++++++ packages/website/src/DocModel/DocClass.ts | 70 ---- packages/website/src/DocModel/DocEnum.ts | 31 -- packages/website/src/DocModel/DocFunction.ts | 26 -- packages/website/src/DocModel/DocInterface.ts | 63 --- packages/website/src/DocModel/DocItem.ts | 76 ---- packages/website/src/DocModel/DocMethod.ts | 40 -- .../src/DocModel/DocMethodSignature.ts | 29 -- packages/website/src/DocModel/DocProperty.ts | 35 -- packages/website/src/DocModel/DocTypeAlias.ts | 20 - packages/website/src/DocModel/DocVariable.ts | 22 - .../src/DocModel/TypeParameterMixin.ts | 24 +- .../website/src/components/CodeListing.tsx | 5 +- .../website/src/components/DocContainer.tsx | 7 +- .../src/components/InheritanceText.tsx | 2 +- .../website/src/components/MethodItem.tsx | 8 +- .../website/src/components/MethodList.tsx | 9 +- .../website/src/components/PropertyList.tsx | 4 +- packages/website/src/components/Sections.tsx | 63 ++- .../website/src/components/SidebarLayout.tsx | 4 +- .../src/components/TableOfContentsItems.tsx | 9 +- .../website/src/components/model/Class.tsx | 9 +- .../website/src/components/model/Enum.tsx | 4 +- .../website/src/components/model/Function.tsx | 6 +- .../src/components/model/Interface.tsx | 6 +- .../src/components/model/TypeAlias.tsx | 6 +- .../website/src/components/model/Variable.tsx | 4 +- packages/website/src/contexts/member.tsx | 8 +- packages/website/src/pages/docs/[...slug].tsx | 29 +- packages/website/src/util/model.server.ts | 60 +-- packages/ws/.eslintrc.json | 6 +- packages/ws/package.json | 1 + .../sharding/SimpleShardingStrategy.ts | 12 + .../sharding/WorkerShardingStrategy.ts | 12 + packages/ws/src/ws/WebSocketManager.ts | 4 +- yarn.lock | 15 + 66 files changed, 689 insertions(+), 625 deletions(-) create mode 100644 packages/website/src/DocModel/ApiNodeJSONEncoder.ts delete mode 100644 packages/website/src/DocModel/DocClass.ts delete mode 100644 packages/website/src/DocModel/DocEnum.ts delete mode 100644 packages/website/src/DocModel/DocFunction.ts delete mode 100644 packages/website/src/DocModel/DocInterface.ts delete mode 100644 packages/website/src/DocModel/DocItem.ts delete mode 100644 packages/website/src/DocModel/DocMethod.ts delete mode 100644 packages/website/src/DocModel/DocMethodSignature.ts delete mode 100644 packages/website/src/DocModel/DocProperty.ts delete mode 100644 packages/website/src/DocModel/DocTypeAlias.ts delete mode 100644 packages/website/src/DocModel/DocVariable.ts diff --git a/packages/builders/.eslintrc.json b/packages/builders/.eslintrc.json index 99ef7cec8051..6115ee5c022e 100644 --- a/packages/builders/.eslintrc.json +++ b/packages/builders/.eslintrc.json @@ -1,3 +1,7 @@ { - "extends": "../../.eslintrc.json" + "extends": "../../.eslintrc.json", + "plugins": ["eslint-plugin-tsdoc"], + "rules": { + "tsdoc/syntax": "warn" + } } diff --git a/packages/builders/package.json b/packages/builders/package.json index 527569ffa990..b4ebcac34bcf 100644 --- a/packages/builders/package.json +++ b/packages/builders/package.json @@ -74,6 +74,7 @@ "eslint-config-prettier": "^8.5.0", "eslint-import-resolver-typescript": "^3.4.1", "eslint-plugin-import": "^2.26.0", + "eslint-plugin-tsdoc": "^0.2.16", "prettier": "^2.7.1", "rollup-plugin-typescript2": "0.32.1", "typescript": "^4.7.4", diff --git a/packages/builders/src/components/ActionRow.ts b/packages/builders/src/components/ActionRow.ts index 5580d3f89553..245fa1dc4984 100644 --- a/packages/builders/src/components/ActionRow.ts +++ b/packages/builders/src/components/ActionRow.ts @@ -59,7 +59,7 @@ export class ActionRowBuilder extends ComponentBu } /** - * {@inheritDoc JSONEncodable.toJSON} + * {@inheritDoc ComponentBuilder.toJSON} */ public toJSON(): APIActionRowComponent> { // eslint-disable-next-line @typescript-eslint/consistent-type-assertions diff --git a/packages/builders/src/components/Component.ts b/packages/builders/src/components/Component.ts index 1775a6d697ed..b9f85674af9b 100644 --- a/packages/builders/src/components/Component.ts +++ b/packages/builders/src/components/Component.ts @@ -23,7 +23,11 @@ export abstract class ComponentBuilder< public readonly data: Partial; /** - * {@inheritDoc JSONEncodable.toJSON} + * Serializes this component to an API-compatible JSON object + * + * @remarks + * This method runs validations on the data before serializing it. + * As such, it may throw an error if the data is invalid. */ public abstract toJSON(): AnyAPIActionRowComponent; diff --git a/packages/builders/src/components/button/Button.ts b/packages/builders/src/components/button/Button.ts index 853667b5e7cd..63ed260909f3 100644 --- a/packages/builders/src/components/button/Button.ts +++ b/packages/builders/src/components/button/Button.ts @@ -21,6 +21,35 @@ import { ComponentBuilder } from '../Component'; * Represents a button component */ export class ButtonBuilder extends ComponentBuilder { + /** + * Creates a new button from API data + * @param data - The API data to create this button with + * + * @example + * Creating a button from an API data object + * ```ts + * const button = new ButtonBuilder({ + * style: 'primary', + * label: 'Click Me', + * emoji: { + * name: ':smile:', + * id: '12345678901234567890123456789012', + * }, + * custom_id: '12345678901234567890123456789012', + * }); + * ``` + * + * @example + * Creating a button using setters and API data + * ```ts + * const button = new ButtonBuilder({ + * style: 'primary', + * label: 'Click Me', + * }) + * .setEmoji({ name: ':smile:', id: '12345678901234567890123456789012' }) + * .setCustomId('12345678901234567890123456789012'); + * ``` + */ public constructor(data?: Partial) { super({ type: ComponentType.Button, ...data }); } @@ -38,6 +67,10 @@ export class ButtonBuilder extends ComponentBuilder { /** * Sets the URL for this button * + * @remarks + * This method is only available to buttons using the `Link` button style. + * Only three types of URL schemes are currently supported: `https://`, `http://` and `discord://` + * * @param url - The URL to open when this button is clicked */ public setURL(url: string) { @@ -48,6 +81,9 @@ export class ButtonBuilder extends ComponentBuilder { /** * Sets the custom id for this button * + * @remarks + * This method is only applicable to buttons that are not using the `Link` button style. + * * @param customId - The custom id to use for this button */ public setCustomId(customId: string) { @@ -86,7 +122,7 @@ export class ButtonBuilder extends ComponentBuilder { } /** - * {@inheritDoc JSONEncodable.toJSON} + * {@inheritDoc ComponentBuilder.toJSON} */ public toJSON(): APIButtonComponent { validateRequiredButtonParameters( diff --git a/packages/builders/src/components/selectMenu/SelectMenu.ts b/packages/builders/src/components/selectMenu/SelectMenu.ts index 2eccd4692de0..55751ee70938 100644 --- a/packages/builders/src/components/selectMenu/SelectMenu.ts +++ b/packages/builders/src/components/selectMenu/SelectMenu.ts @@ -117,7 +117,7 @@ export class SelectMenuBuilder extends ComponentBuilder } /** - * {@inheritDoc JSONEncodable.toJSON} + * {@inheritDoc ComponentBuilder.toJSON} */ public toJSON(): APISelectMenuComponent { validateRequiredSelectMenuParameters(this.options, this.data.custom_id); diff --git a/packages/builders/src/components/selectMenu/SelectMenuOption.ts b/packages/builders/src/components/selectMenu/SelectMenuOption.ts index 452b46a83d76..3dba43869373 100644 --- a/packages/builders/src/components/selectMenu/SelectMenuOption.ts +++ b/packages/builders/src/components/selectMenu/SelectMenuOption.ts @@ -65,7 +65,7 @@ export class SelectMenuOptionBuilder implements JSONEncodable): this { fields = normalizeArray(fields); @@ -120,9 +120,9 @@ export class EmbedBuilder { * embed.spliceFields(-1, 1); * ``` * - * @param index The index to start at - * @param deleteCount The number of fields to remove - * @param fields The replacing field objects + * @param index - The index to start at + * @param deleteCount - The number of fields to remove + * @param fields - The replacing field objects */ public spliceFields(index: number, deleteCount: number, ...fields: APIEmbedField[]): this { // Ensure adding these fields won't exceed the 25 field limit @@ -144,7 +144,7 @@ export class EmbedBuilder { * * You can set a maximum of 25 fields. * - * @param fields The fields to set + * @param fields - The fields to set */ public setFields(...fields: RestOrArray) { this.spliceFields(0, this.data.fields?.length ?? 0, ...normalizeArray(fields)); @@ -154,7 +154,7 @@ export class EmbedBuilder { /** * Sets the author of this embed * - * @param options The options for the author + * @param options - The options for the author */ public setAuthor(options: EmbedAuthorOptions | null): this { @@ -173,7 +173,7 @@ export class EmbedBuilder { /** * Sets the color of this embed * - * @param color The color of the embed + * @param color - The color of the embed */ public setColor(color: number | RGBTuple | null): this { // Data assertions @@ -191,7 +191,7 @@ export class EmbedBuilder { /** * Sets the description of this embed * - * @param description The description + * @param description - The description */ public setDescription(description: string | null): this { // Data assertions @@ -204,7 +204,7 @@ export class EmbedBuilder { /** * Sets the footer of this embed * - * @param options The options for the footer + * @param options - The options for the footer */ public setFooter(options: EmbedFooterOptions | null): this { if (options === null) { @@ -222,7 +222,7 @@ export class EmbedBuilder { /** * Sets the image of this embed * - * @param url The URL of the image + * @param url - The URL of the image */ public setImage(url: string | null): this { // Data assertions @@ -235,7 +235,7 @@ export class EmbedBuilder { /** * Sets the thumbnail of this embed * - * @param url The URL of the thumbnail + * @param url - The URL of the thumbnail */ public setThumbnail(url: string | null): this { // Data assertions @@ -248,7 +248,7 @@ export class EmbedBuilder { /** * Sets the timestamp of this embed * - * @param timestamp The timestamp or date + * @param timestamp - The timestamp or date */ public setTimestamp(timestamp: number | Date | null = Date.now()): this { // Data assertions @@ -261,7 +261,7 @@ export class EmbedBuilder { /** * Sets the title of this embed * - * @param title The title + * @param title - The title */ public setTitle(title: string | null): this { // Data assertions @@ -274,7 +274,7 @@ export class EmbedBuilder { /** * Sets the URL of this embed * - * @param url The URL + * @param url - The URL */ public setURL(url: string | null): this { // Data assertions diff --git a/packages/collection/.eslintrc.json b/packages/collection/.eslintrc.json index 99ef7cec8051..6115ee5c022e 100644 --- a/packages/collection/.eslintrc.json +++ b/packages/collection/.eslintrc.json @@ -1,3 +1,7 @@ { - "extends": "../../.eslintrc.json" + "extends": "../../.eslintrc.json", + "plugins": ["eslint-plugin-tsdoc"], + "rules": { + "tsdoc/syntax": "warn" + } } diff --git a/packages/collection/package.json b/packages/collection/package.json index bb98fa1d11d0..ce17f3d0f16e 100644 --- a/packages/collection/package.json +++ b/packages/collection/package.json @@ -63,6 +63,7 @@ "eslint-config-prettier": "^8.5.0", "eslint-import-resolver-typescript": "^3.4.1", "eslint-plugin-import": "^2.26.0", + "eslint-plugin-tsdoc": "^0.2.16", "prettier": "^2.7.1", "rollup-plugin-typescript2": "0.32.1", "typescript": "^4.7.4", diff --git a/packages/proxy/.eslintrc.json b/packages/proxy/.eslintrc.json index 99ef7cec8051..6115ee5c022e 100644 --- a/packages/proxy/.eslintrc.json +++ b/packages/proxy/.eslintrc.json @@ -1,3 +1,7 @@ { - "extends": "../../.eslintrc.json" + "extends": "../../.eslintrc.json", + "plugins": ["eslint-plugin-tsdoc"], + "rules": { + "tsdoc/syntax": "warn" + } } diff --git a/packages/rest/.eslintrc.json b/packages/rest/.eslintrc.json index 99ef7cec8051..6115ee5c022e 100644 --- a/packages/rest/.eslintrc.json +++ b/packages/rest/.eslintrc.json @@ -1,3 +1,7 @@ { - "extends": "../../.eslintrc.json" + "extends": "../../.eslintrc.json", + "plugins": ["eslint-plugin-tsdoc"], + "rules": { + "tsdoc/syntax": "warn" + } } diff --git a/packages/rest/package.json b/packages/rest/package.json index 61875f2f874e..5387dd4d2f00 100644 --- a/packages/rest/package.json +++ b/packages/rest/package.json @@ -74,6 +74,7 @@ "eslint-config-prettier": "^8.5.0", "eslint-import-resolver-typescript": "^3.4.1", "eslint-plugin-import": "^2.26.0", + "eslint-plugin-tsdoc": "^0.2.16", "prettier": "^2.7.1", "rollup-plugin-typescript2": "0.32.1", "typescript": "^4.7.4", diff --git a/packages/rest/src/lib/REST.ts b/packages/rest/src/lib/REST.ts index 356b077e2594..adb148a487a3 100644 --- a/packages/rest/src/lib/REST.ts +++ b/packages/rest/src/lib/REST.ts @@ -91,7 +91,7 @@ export interface RESTOptions { /** * Extra information to add to the user agent * - * @defaultValue ``Node.js ${process.version}`` + * @defaultValue `Node.js ${process.version}` */ userAgentAppendix: string; /** diff --git a/packages/rest/src/lib/RequestManager.ts b/packages/rest/src/lib/RequestManager.ts index 52ef3a0c0053..3ef43edc01d6 100644 --- a/packages/rest/src/lib/RequestManager.ts +++ b/packages/rest/src/lib/RequestManager.ts @@ -65,7 +65,7 @@ export interface RequestData { */ body?: BodyInit | unknown; /** - * The {@link https://undici.nodejs.org/#/docs/api/Agent Agent} to use for the request. + * The {@link https://undici.nodejs.org/#/docs/api/Agent | Agent} to use for the request. */ dispatcher?: Agent; /** @@ -174,7 +174,7 @@ export interface RequestManager { */ export class RequestManager extends EventEmitter { /** - * The {@link https://undici.nodejs.org/#/docs/api/Agent Agent} for all requests + * The {@link https://undici.nodejs.org/#/docs/api/Agent | Agent} for all requests * performed by this manager. */ public agent: Dispatcher | null = null; @@ -342,7 +342,7 @@ export class RequestManager extends EventEmitter { * @param hash - The hash for the route * @param majorParameter - The major parameter for this handler * - * @private + * @internal */ private createHandler(hash: string, majorParameter: string) { // Create the async request queue to handle requests @@ -487,7 +487,7 @@ export class RequestManager extends EventEmitter { * @param endpoint - The raw endpoint to generalize * @param method - The HTTP method this endpoint is called without * - * @private + * @internal */ private static generateRouteData(endpoint: RouteLike, method: RequestMethod): RouteData { const majorIdMatch = /^\/(?:channels|guilds|webhooks)\/(\d{16,19})/.exec(endpoint); diff --git a/packages/rest/src/lib/handlers/IHandler.ts b/packages/rest/src/lib/handlers/IHandler.ts index 840dcccbba8b..c5370f931ada 100644 --- a/packages/rest/src/lib/handlers/IHandler.ts +++ b/packages/rest/src/lib/handlers/IHandler.ts @@ -3,13 +3,27 @@ import type { RequestOptions } from '../REST'; import type { HandlerRequestData, RouteData } from '../RequestManager'; export interface IHandler { + /** + * Queues a request to be sent + * + * @param routeId - The generalized api route with literal ids for major parameters + * @param url - The url to do the request on + * @param options - All the information needed to make a request + * @param requestData - Extra data from the user's request needed for errors and additional processing + */ queueRequest: ( routeId: RouteData, url: string, options: RequestOptions, requestData: HandlerRequestData, ) => Promise; + /** + * If the bucket is currently inactive (no pending requests) + */ // eslint-disable-next-line @typescript-eslint/method-signature-style -- This is meant to be a getter returning a bool get inactive(): boolean; + /** + * The unique id of the handler + */ readonly id: string; } diff --git a/packages/rest/src/lib/handlers/SequentialHandler.ts b/packages/rest/src/lib/handlers/SequentialHandler.ts index c7afe833dd35..b53b8ed8cd37 100644 --- a/packages/rest/src/lib/handlers/SequentialHandler.ts +++ b/packages/rest/src/lib/handlers/SequentialHandler.ts @@ -30,7 +30,7 @@ const enum QueueType { */ export class SequentialHandler implements IHandler { /** - * The unique id of the handler + * {@inheritDoc IHandler.id} */ public readonly id: string; @@ -87,7 +87,7 @@ export class SequentialHandler implements IHandler { } /** - * If the bucket is currently inactive (no pending requests) + * {@inheritDoc IHandler.inactive} */ public get inactive(): boolean { return ( @@ -161,12 +161,7 @@ export class SequentialHandler implements IHandler { } /** - * Queues a request to be sent - * - * @param routeId - The generalized api route with literal ids for major parameters - * @param url - The url to do the request on - * @param options - All the information needed to make a request - * @param requestData - Extra data from the user's request needed for errors and additional processing + * {@inheritDoc IHandler.queueRequest} */ public async queueRequest( routeId: RouteData, diff --git a/packages/voice/.eslintrc.json b/packages/voice/.eslintrc.json index f07d57ea218a..e63740acf414 100644 --- a/packages/voice/.eslintrc.json +++ b/packages/voice/.eslintrc.json @@ -1,5 +1,9 @@ { "extends": "../../.eslintrc.json", + "plugins": ["eslint-plugin-tsdoc"], + "rules": { + "tsdoc/syntax": "warn" + }, "parserOptions": { "project": "./tsconfig.eslint.json", "extraFileExtensions": [".mjs"] diff --git a/packages/voice/package.json b/packages/voice/package.json index 6c3e6c54f6a7..0eca5705623d 100644 --- a/packages/voice/package.json +++ b/packages/voice/package.json @@ -75,6 +75,7 @@ "eslint-config-prettier": "^8.5.0", "eslint-import-resolver-typescript": "^3.4.1", "eslint-plugin-import": "^2.26.0", + "eslint-plugin-tsdoc": "^0.2.16", "jest": "^28.1.3", "jest-websocket-mock": "^2.4.0", "mock-socket": "^9.1.5", diff --git a/packages/voice/src/VoiceConnection.ts b/packages/voice/src/VoiceConnection.ts index 7efad7486b7e..eb76482c98fa 100644 --- a/packages/voice/src/VoiceConnection.ts +++ b/packages/voice/src/VoiceConnection.ts @@ -165,22 +165,22 @@ export type VoiceConnectionState = export interface VoiceConnection extends EventEmitter { /** * Emitted when there is an error emitted from the voice connection - * @event + * @eventProperty */ on(event: 'error', listener: (error: Error) => void): this; /** * Emitted debugging information about the voice connection - * @event + * @eventProperty */ on(event: 'debug', listener: (message: string) => void): this; /** * Emitted when the state of the voice connection changes - * @event + * @eventProperty */ on(event: 'stateChange', listener: (oldState: VoiceConnectionState, newState: VoiceConnectionState) => void): this; /** * Emitted when the state of the voice connection changes to a specific status - * @event + * @eventProperty */ on( event: T, diff --git a/packages/voice/src/audio/AudioPlayer.ts b/packages/voice/src/audio/AudioPlayer.ts index f6a82fd1960a..25d73361cd85 100644 --- a/packages/voice/src/audio/AudioPlayer.ts +++ b/packages/voice/src/audio/AudioPlayer.ts @@ -154,27 +154,27 @@ export type AudioPlayerState = export interface AudioPlayer extends EventEmitter { /** * Emitted when there is an error emitted from the audio resource played by the audio player - * @event + * @eventProperty */ on(event: 'error', listener: (error: AudioPlayerError) => void): this; /** * Emitted debugging information about the audio player - * @event + * @eventProperty */ on(event: 'debug', listener: (message: string) => void): this; /** * Emitted when the state of the audio player changes - * @event + * @eventProperty */ on(event: 'stateChange', listener: (oldState: AudioPlayerState, newState: AudioPlayerState) => void): this; /** * Emitted when the audio player is subscribed to a voice connection - * @event + * @eventProperty */ on(event: 'subscribe' | 'unsubscribe', listener: (subscription: PlayerSubscription) => void): this; /** * Emitted when the status of state changes to a specific status - * @event + * @eventProperty */ on( event: T, diff --git a/packages/voice/src/audio/AudioResource.ts b/packages/voice/src/audio/AudioResource.ts index 6164019478c4..61b1d9cc8a15 100644 --- a/packages/voice/src/audio/AudioResource.ts +++ b/packages/voice/src/audio/AudioResource.ts @@ -7,7 +7,7 @@ import { noop } from '../util/util'; /** * Options that are set when creating a new audio resource. * - * @template T - the type for the metadata (if any) of the audio resource + * @typeParam T - the type for the metadata (if any) of the audio resource */ export interface CreateAudioResourceOptions { /** @@ -38,7 +38,7 @@ export interface CreateAudioResourceOptions { /** * Represents an audio resource that can be played by an audio player. * - * @template T - the type for the metadata (if any) of the audio resource + * @typeParam T - the type for the metadata (if any) of the audio resource */ export class AudioResource { /** @@ -204,7 +204,7 @@ export function inferStreamType(stream: Readable): { * @param input - The resource to play * @param options - Configurable options for creating the resource * - * @template T - the type for the metadata (if any) of the audio resource + * @typeParam T - the type for the metadata (if any) of the audio resource */ export function createAudioResource( input: string | Readable, @@ -228,7 +228,7 @@ export function createAudioResource( * @param input - The resource to play * @param options - Configurable options for creating the resource * - * @template T - the type for the metadata (if any) of the audio resource + * @typeParam T - the type for the metadata (if any) of the audio resource */ export function createAudioResource( input: string | Readable, @@ -248,7 +248,7 @@ export function createAudioResource( * @param input - The resource to play * @param options - Configurable options for creating the resource * - * @template T - the type for the metadata (if any) of the audio resource + * @typeParam T - the type for the metadata (if any) of the audio resource */ export function createAudioResource( input: string | Readable, diff --git a/packages/voice/src/networking/Networking.ts b/packages/voice/src/networking/Networking.ts index 946b8ccf3a64..7af99ba2dd38 100644 --- a/packages/voice/src/networking/Networking.ts +++ b/packages/voice/src/networking/Networking.ts @@ -155,7 +155,7 @@ export interface Networking extends EventEmitter { /** * Debug event for Networking. * - * @event + * @eventProperty */ on(event: 'debug', listener: (message: string) => void): this; on(event: 'error', listener: (error: Error) => void): this; diff --git a/packages/voice/src/networking/VoiceWebSocket.ts b/packages/voice/src/networking/VoiceWebSocket.ts index 1e4445114767..1b9ad77aecd0 100644 --- a/packages/voice/src/networking/VoiceWebSocket.ts +++ b/packages/voice/src/networking/VoiceWebSocket.ts @@ -10,13 +10,13 @@ export interface VoiceWebSocket extends EventEmitter { /** * Debug event for VoiceWebSocket. * - * @event + * @eventProperty */ on(event: 'debug', listener: (message: string) => void): this; /** * Packet event. * - * @event + * @eventProperty */ on(event: 'packet', listener: (packet: any) => void): this; } diff --git a/packages/voice/src/receive/SpeakingMap.ts b/packages/voice/src/receive/SpeakingMap.ts index 7e807c019d21..b1049d76435c 100644 --- a/packages/voice/src/receive/SpeakingMap.ts +++ b/packages/voice/src/receive/SpeakingMap.ts @@ -4,13 +4,13 @@ import { EventEmitter } from 'node:events'; export interface SpeakingMap extends EventEmitter { /** * Emitted when a user starts speaking. - * @event + * @eventProperty */ on(event: 'start', listener: (userId: string) => void): this; /** * Emitted when a user ends speaking. - * @event + * @eventProperty */ on(event: 'end', listener: (userId: string) => void): this; } diff --git a/packages/website/src/DocModel/ApiNodeJSONEncoder.ts b/packages/website/src/DocModel/ApiNodeJSONEncoder.ts new file mode 100644 index 000000000000..526f91912e97 --- /dev/null +++ b/packages/website/src/DocModel/ApiNodeJSONEncoder.ts @@ -0,0 +1,381 @@ +import { + ApiModel, + ApiDeclaredItem, + ApiPropertyItem, + ApiMethod, + ApiParameterListMixin, + ApiTypeParameterListMixin, + ApiClass, + ApiFunction, + ApiItemKind, + ApiTypeAlias, + ApiEnum, + ApiInterface, + ApiMethodSignature, + ApiPropertySignature, + ApiVariable, + ApiItem, + ApiConstructor, + ApiItemContainerMixin, +} from '@microsoft/api-extractor-model'; +import { generateTypeParamData } from './TypeParameterMixin'; +import { Visibility } from './Visibility'; +import { createCommentNode } from './comment'; +import type { DocBlockJSON } from './comment/CommentBlock'; +import type { AnyDocNodeJSON } from './comment/CommentNode'; +import { DocNodeContainerJSON, nodeContainer } from './comment/CommentNodeContainer'; +import { + generatePath, + genParameter, + genReference, + genToken, + resolveName, + TokenDocumentation, +} from '~/util/parse.server'; + +export interface ReferenceData { + name: string; + path: string; +} + +export interface InheritanceData { + parentName: string; + path: string; + parentKey: string; +} + +export interface ApiInheritableJSON { + inheritanceData: InheritanceData | null; +} + +export interface ApiItemJSON { + kind: string; + name: string; + referenceData: ReferenceData; + excerpt: string; + excerptTokens: TokenDocumentation[]; + remarks: DocNodeContainerJSON | null; + summary: DocNodeContainerJSON | null; + deprecated: DocNodeContainerJSON | null; + comment: AnyDocNodeJSON | null; + containerKey: string; + path: string[]; +} + +export interface ApiPropertyItemJSON extends ApiItemJSON, ApiInheritableJSON { + propertyTypeTokens: TokenDocumentation[]; + readonly: boolean; + optional: boolean; +} + +export interface ApiTypeParameterListJSON { + typeParameters: ApiTypeParameterJSON[]; +} + +export interface ApiTypeParameterJSON { + name: string; + constraintTokens: TokenDocumentation[]; + defaultTokens: TokenDocumentation[]; + optional: boolean; + commentBlock: DocBlockJSON | null; +} + +export interface ApiParameterListJSON { + parameters: ApiParameterJSON[]; +} + +export interface ApiMethodSignatureJSON + extends ApiItemJSON, + ApiTypeParameterListJSON, + ApiParameterListJSON, + ApiInheritableJSON { + returnTypeTokens: TokenDocumentation[]; + optional: boolean; + overloadIndex: number; +} + +export interface ApiMethodJSON extends ApiMethodSignatureJSON { + static: boolean; + visibility: Visibility; +} + +export interface ApiParameterJSON { + name: string; + isOptional: boolean; + tokens: TokenDocumentation[]; + paramCommentBlock: DocBlockJSON | null; +} + +export interface ApiClassJSON extends ApiItemJSON, ApiTypeParameterListJSON { + constructor: ApiConstructorJSON | null; + properties: ApiPropertyItemJSON[]; + methods: ApiMethodJSON[]; + extendsTokens: TokenDocumentation[]; + implementsTokens: TokenDocumentation[][]; +} + +export interface ApiTypeAliasJSON extends ApiItemJSON, ApiTypeParameterListJSON { + typeTokens: TokenDocumentation[]; +} + +export interface EnumMemberData { + name: string; + initializerTokens: TokenDocumentation[]; + summary: DocNodeContainerJSON | null; +} + +export interface ApiEnumJSON extends ApiItemJSON { + members: EnumMemberData[]; +} + +export interface ApiInterfaceJSON extends ApiItemJSON, ApiTypeParameterListJSON { + properties: ApiPropertyItemJSON[]; + methods: ApiMethodSignatureJSON[]; + extendsTokens: TokenDocumentation[][] | null; +} + +export interface ApiVariableJSON extends ApiItemJSON { + typeTokens: TokenDocumentation[]; + readonly: boolean; +} + +export interface ApiFunctionJSON extends ApiItemJSON, ApiTypeParameterListJSON, ApiParameterListJSON { + returnTypeTokens: TokenDocumentation[]; + overloadIndex: number; +} + +export interface ApiConstructorJSON extends ApiItemJSON, ApiParameterListJSON { + protected: boolean; +} + +// eslint-disable-next-line @typescript-eslint/no-extraneous-class +export class ApiNodeJSONEncoder { + public static encode(model: ApiModel, node: ApiItem) { + if (!(node instanceof ApiDeclaredItem)) { + throw new Error(`Cannot serialize node of type ${node.kind}`); + } + + switch (node.kind) { + case ApiItemKind.Class: + return this.encodeClass(model, node as ApiClass); + case ApiItemKind.Function: + return this.encodeFunction(model, node as ApiFunction); + case ApiItemKind.Interface: + return this.encodeInterface(model, node as ApiInterface); + case ApiItemKind.TypeAlias: + return this.encodeTypeAlias(model, node as ApiTypeAlias); + case ApiItemKind.Enum: + return this.encodeEnum(model, node as ApiEnum); + case ApiItemKind.Variable: + return this.encodeVariable(model, node as ApiVariable); + default: + throw new Error(`Unknown API item kind: ${node.kind}`); + } + } + + public static encodeItem(model: ApiModel, item: ApiDeclaredItem): ApiItemJSON { + const path = []; + for (const _item of item.getHierarchy()) { + switch (_item.kind) { + case 'None': + case 'EntryPoint': + case 'Model': + break; + default: + path.push(resolveName(_item)); + } + } + + return { + kind: item.kind, + name: resolveName(item), + referenceData: genReference(item), + excerpt: item.excerpt.text, + excerptTokens: item.excerpt.spannedTokens.map((token) => genToken(model, token)), + remarks: item.tsdocComment?.remarksBlock + ? (createCommentNode(item.tsdocComment.remarksBlock, model, item.parent) as DocNodeContainerJSON) + : null, + summary: item.tsdocComment?.summarySection + ? (createCommentNode(item.tsdocComment.summarySection, model, item.parent) as DocNodeContainerJSON) + : null, + deprecated: item.tsdocComment?.deprecatedBlock + ? (createCommentNode(item.tsdocComment.deprecatedBlock, model, item.parent) as DocNodeContainerJSON) + : null, + path, + containerKey: item.containerKey, + comment: item.tsdocComment ? createCommentNode(item.tsdocComment, model, item.parent) : null, + }; + } + + public static encodeParameterList( + model: ApiModel, + item: ApiParameterListMixin & ApiDeclaredItem, + ): { parameters: ApiParameterJSON[] } { + return { + parameters: item.parameters.map((param) => genParameter(model, param)), + }; + } + + public static encodeTypeParameterList(model: ApiModel, item: ApiTypeParameterListMixin & ApiDeclaredItem) { + return { + typeParameters: item.typeParameters.map((param) => generateTypeParamData(model, param, item.parent)), + }; + } + + public static encodeProperty( + model: ApiModel, + item: ApiPropertyItem, + parent: ApiItemContainerMixin, + ): ApiPropertyItemJSON { + return { + ...this.encodeItem(model, item), + ...this.encodeInheritanceData(item, parent), + propertyTypeTokens: item.propertyTypeExcerpt.spannedTokens.map((token) => genToken(model, token)), + readonly: item.isReadonly, + optional: item.isOptional, + }; + } + + public static encodeInheritanceData(item: ApiDeclaredItem, parent: ApiItemContainerMixin): ApiInheritableJSON { + return { + inheritanceData: + item.parent && item.parent.containerKey !== parent.containerKey + ? { + parentKey: item.parent.containerKey, + parentName: item.parent.displayName, + path: generatePath(item.parent.getHierarchy()), + } + : null, + }; + } + + public static encodeFunction(model: ApiModel, item: ApiFunction) { + return { + ...this.encodeItem(model, item), + ...this.encodeParameterList(model, item), + ...this.encodeTypeParameterList(model, item), + returnTypeTokens: item.returnTypeExcerpt.spannedTokens.map((token) => genToken(model, token)), + overloadIndex: item.overloadIndex, + }; + } + + public static encodeMethodSignature( + model: ApiModel, + item: ApiMethodSignature, + parent: ApiItemContainerMixin, + ): ApiMethodSignatureJSON { + return { + ...this.encodeFunction(model, item), + ...this.encodeInheritanceData(item, parent), + optional: item.isOptional, + }; + } + + public static encodeMethod(model: ApiModel, item: ApiMethod, parent: ApiItemContainerMixin): ApiMethodJSON { + return { + ...this.encodeMethodSignature(model, item, parent), + static: item.isStatic, + visibility: item.isProtected ? Visibility.Protected : Visibility.Public, + }; + } + + public static encodeClass(model: ApiModel, item: ApiClass): ApiClassJSON { + const extendsExcerpt = item.extendsType?.excerpt; + + const methods: ApiMethodJSON[] = []; + const properties: ApiPropertyItemJSON[] = []; + + let constructor: ApiConstructor | undefined; + + for (const member of item.findMembersWithInheritance().items) { + switch (member.kind) { + case ApiItemKind.Method: + methods.push(this.encodeMethod(model, member as ApiMethod, item)); + break; + case ApiItemKind.Property: + properties.push(this.encodeProperty(model, member as ApiPropertyItem, item)); + break; + case ApiItemKind.Constructor: + constructor = member as ApiConstructor; + break; + default: + break; + } + } + + return { + ...this.encodeItem(model, item), + ...this.encodeTypeParameterList(model, item), + constructor: constructor ? this.encodeConstructor(model, constructor) : null, + extendsTokens: extendsExcerpt ? extendsExcerpt.spannedTokens.map((token) => genToken(model, token)) : [], + implementsTokens: item.implementsTypes.map((excerpt) => + excerpt.excerpt.spannedTokens.map((token) => genToken(model, token)), + ), + methods, + properties, + }; + } + + public static encodeTypeAlias(model: ApiModel, item: ApiTypeAlias): ApiTypeAliasJSON { + return { + ...this.encodeItem(model, item), + ...this.encodeTypeParameterList(model, item), + typeTokens: item.typeExcerpt.spannedTokens.map((token) => genToken(model, token)), + }; + } + + public static encodeEnum(model: ApiModel, item: ApiEnum): ApiEnumJSON { + return { + ...this.encodeItem(model, item), + members: item.members.map((member) => ({ + name: member.name, + initializerTokens: member.initializerExcerpt?.spannedTokens.map((token) => genToken(model, token)) ?? [], + summary: member.tsdocComment ? nodeContainer(member.tsdocComment.summarySection, model, member) : null, + })), + }; + } + + public static encodeInterface(model: ApiModel, item: ApiInterface): ApiInterfaceJSON { + const methods: ApiMethodSignatureJSON[] = []; + const properties: ApiPropertyItemJSON[] = []; + + for (const member of item.findMembersWithInheritance().items) { + switch (member.kind) { + case ApiItemKind.MethodSignature: + methods.push(this.encodeMethodSignature(model, member as ApiMethodSignature, item)); + break; + case ApiItemKind.PropertySignature: + properties.push(this.encodeProperty(model, member as ApiPropertySignature, item)); + break; + default: + break; + } + } + + return { + ...this.encodeItem(model, item), + ...this.encodeTypeParameterList(model, item), + extendsTokens: item.extendsTypes.map((excerpt) => + excerpt.excerpt.spannedTokens.map((token) => genToken(model, token)), + ), + methods, + properties, + }; + } + + public static encodeVariable(model: ApiModel, item: ApiVariable): ApiVariableJSON { + return { + ...this.encodeItem(model, item), + typeTokens: item.variableTypeExcerpt.spannedTokens.map((token) => genToken(model, token)), + readonly: item.isReadonly, + }; + } + + public static encodeConstructor(model: ApiModel, item: ApiConstructor): ApiConstructorJSON { + return { + ...this.encodeItem(model, item), + ...this.encodeParameterList(model, item), + protected: item.isProtected, + }; + } +} diff --git a/packages/website/src/DocModel/DocClass.ts b/packages/website/src/DocModel/DocClass.ts deleted file mode 100644 index 0403e1e2e063..000000000000 --- a/packages/website/src/DocModel/DocClass.ts +++ /dev/null @@ -1,70 +0,0 @@ -import { - type ApiClass, - type ApiModel, - ApiItemKind, - type ApiMethod, - type ApiPropertyItem, -} from '@microsoft/api-extractor-model'; -import { DocItem } from './DocItem'; -import { DocMethod } from './DocMethod'; -import { DocProperty } from './DocProperty'; -import { TypeParameterMixin } from './TypeParameterMixin'; -import { type TokenDocumentation, genToken } from '~/util/parse.server'; - -export class DocClass extends TypeParameterMixin(DocItem) { - public readonly extendsTokens: TokenDocumentation[] | null; - public readonly implementsTokens: TokenDocumentation[][]; - public readonly methods: DocMethod[] = []; - public readonly properties: DocProperty[] = []; - - public constructor(model: ApiModel, item: ApiClass) { - super(model, item); - const extendsExcerpt = item.extendsType?.excerpt; - - this.extendsTokens = extendsExcerpt - ? extendsExcerpt.spannedTokens.map((token) => genToken(this.model, token)) - : null; - - this.implementsTokens = item.implementsTypes.map((excerpt) => - excerpt.excerpt.spannedTokens.map((token) => genToken(this.model, token)), - ); - - for (const member of item.findMembersWithInheritance().items) { - switch (member.kind) { - case ApiItemKind.Method: { - const method = member as ApiMethod; - - if (method.parent?.containerKey !== this.containerKey) { - this.methods.push(new DocMethod(this.model, method, true)); - break; - } - this.methods.push(new DocMethod(this.model, method)); - break; - } - case ApiItemKind.Property: { - const property = member as ApiPropertyItem; - - if (property.parent?.containerKey !== this.containerKey) { - this.properties.push(new DocProperty(this.model, property, true)); - break; - } - - this.properties.push(new DocProperty(this.model, property)); - break; - } - default: - break; - } - } - } - - public override toJSON() { - return { - ...super.toJSON(), - extendsTokens: this.extendsTokens, - implementsTokens: this.implementsTokens, - methods: this.methods.map((method) => method.toJSON()), - properties: this.properties.map((prop) => prop.toJSON()), - }; - } -} diff --git a/packages/website/src/DocModel/DocEnum.ts b/packages/website/src/DocModel/DocEnum.ts deleted file mode 100644 index c2b7fcb696b6..000000000000 --- a/packages/website/src/DocModel/DocEnum.ts +++ /dev/null @@ -1,31 +0,0 @@ -import type { ApiEnum, ApiModel } from '@microsoft/api-extractor-model'; -import { DocItem } from './DocItem'; -import { nodeContainer } from './comment/CommentNodeContainer'; -import { genToken, TokenDocumentation } from '~/util/parse.server'; - -export interface EnumMemberData { - name: string; - initializerTokens: TokenDocumentation[]; - summary: ReturnType['summary']; -} - -export class DocEnum extends DocItem { - public readonly members: EnumMemberData[] = []; - - public constructor(model: ApiModel, item: ApiEnum) { - super(model, item); - - this.members = item.members.map((member) => ({ - name: member.name, - initializerTokens: member.initializerExcerpt?.spannedTokens.map((token) => genToken(this.model, token)) ?? [], - summary: member.tsdocComment ? nodeContainer(member.tsdocComment.summarySection, model, member) : null, - })); - } - - public override toJSON() { - return { - ...super.toJSON(), - members: this.members, - }; - } -} diff --git a/packages/website/src/DocModel/DocFunction.ts b/packages/website/src/DocModel/DocFunction.ts deleted file mode 100644 index 03731e2aff25..000000000000 --- a/packages/website/src/DocModel/DocFunction.ts +++ /dev/null @@ -1,26 +0,0 @@ -import type { ApiFunction, ApiModel, ApiParameterListMixin } from '@microsoft/api-extractor-model'; -import { DocItem } from './DocItem'; -import { TypeParameterMixin } from './TypeParameterMixin'; -import { type TokenDocumentation, genToken, genParameter, ParameterDocumentation } from '~/util/parse.server'; - -export class DocFunction extends TypeParameterMixin(DocItem) { - public readonly returnTypeTokens: TokenDocumentation[]; - public readonly overloadIndex: number; - public readonly parameters: ParameterDocumentation[]; - - public constructor(model: ApiModel, item: ApiFunction) { - super(model, item); - this.returnTypeTokens = item.returnTypeExcerpt.spannedTokens.map((token) => genToken(this.model, token)); - this.overloadIndex = item.overloadIndex; - this.parameters = (item as ApiParameterListMixin).parameters.map((param) => genParameter(this.model, param)); - } - - public override toJSON() { - return { - ...super.toJSON(), - parameters: this.parameters, - returnTypeTokens: this.returnTypeTokens, - overloadIndex: this.overloadIndex, - }; - } -} diff --git a/packages/website/src/DocModel/DocInterface.ts b/packages/website/src/DocModel/DocInterface.ts deleted file mode 100644 index 88058b1cf557..000000000000 --- a/packages/website/src/DocModel/DocInterface.ts +++ /dev/null @@ -1,63 +0,0 @@ -import { DocItem } from './DocItem'; -import { DocMethodSignature } from './DocMethodSignature'; -import { DocProperty } from './DocProperty'; -import { TypeParameterMixin } from './TypeParameterMixin'; -import { - ApiInterface, - ApiItemKind, - ApiMethodSignature, - ApiModel, - ApiPropertySignature, -} from '~/util/api-extractor.server'; -import { type TokenDocumentation, genToken } from '~/util/parse.server'; - -export class DocInterface extends TypeParameterMixin(DocItem) { - public readonly extendsTokens: TokenDocumentation[][] | null; - public readonly methods: DocMethodSignature[] = []; - public readonly properties: DocProperty[] = []; - - public constructor(model: ApiModel, item: ApiInterface) { - super(model, item); - - this.extendsTokens = item.extendsTypes.map((excerpt) => - excerpt.excerpt.spannedTokens.map((token) => genToken(this.model, token)), - ); - - for (const member of item.findMembersWithInheritance().items) { - switch (member.kind) { - case ApiItemKind.MethodSignature: { - const method = member as ApiMethodSignature; - - if (method.parent?.containerKey !== this.containerKey) { - this.methods.push(new DocMethodSignature(this.model, method, true)); - break; - } - this.methods.push(new DocMethodSignature(this.model, method)); - break; - } - case ApiItemKind.PropertySignature: { - const property = member as ApiPropertySignature; - - if (property.parent?.containerKey !== this.containerKey) { - this.properties.push(new DocProperty(this.model, property, true)); - break; - } - - this.properties.push(new DocProperty(this.model, property)); - break; - } - default: - break; - } - } - } - - public override toJSON() { - return { - ...super.toJSON(), - extendsTokens: this.extendsTokens, - methods: this.methods.map((method) => method.toJSON()), - properties: this.properties.map((prop) => prop.toJSON()), - }; - } -} diff --git a/packages/website/src/DocModel/DocItem.ts b/packages/website/src/DocModel/DocItem.ts deleted file mode 100644 index c6e6c5afec9e..000000000000 --- a/packages/website/src/DocModel/DocItem.ts +++ /dev/null @@ -1,76 +0,0 @@ -import type { ApiModel, ApiDeclaredItem } from '@microsoft/api-extractor-model'; -import { createCommentNode } from './comment'; -import type { AnyDocNodeJSON } from './comment/CommentNode'; -import type { DocNodeContainerJSON } from './comment/CommentNodeContainer'; -import type { ReferenceData } from '~/util/model.server'; -import { resolveName, genReference, TokenDocumentation, genToken } from '~/util/parse.server'; - -export type DocItemConstructor = new (...args: any[]) => T; - -export class DocItem { - public readonly item: T; - public readonly name: string; - public readonly referenceData: ReferenceData; - public readonly model: ApiModel; - public readonly excerpt: string; - public readonly excerptTokens: TokenDocumentation[] = []; - public readonly kind: string; - public readonly remarks: DocNodeContainerJSON | null; - public readonly summary: DocNodeContainerJSON | null; - public readonly deprecated: DocNodeContainerJSON | null; - public readonly containerKey: string; - public readonly comment: AnyDocNodeJSON | null; - - public constructor(model: ApiModel, item: T) { - this.item = item; - this.kind = item.kind; - this.model = model; - this.name = resolveName(item); - this.referenceData = genReference(item); - this.excerpt = item.excerpt.text; - this.excerptTokens = item.excerpt.spannedTokens.map((token) => genToken(model, token)); - this.remarks = item.tsdocComment?.remarksBlock - ? (createCommentNode(item.tsdocComment.remarksBlock, model, item.parent) as DocNodeContainerJSON) - : null; - this.summary = item.tsdocComment?.summarySection - ? (createCommentNode(item.tsdocComment.summarySection, model, item.parent) as DocNodeContainerJSON) - : null; - this.deprecated = item.tsdocComment?.deprecatedBlock - ? (createCommentNode(item.tsdocComment.deprecatedBlock, model, item.parent) as DocNodeContainerJSON) - : null; - this.containerKey = item.containerKey; - this.comment = item.tsdocComment ? createCommentNode(item.tsdocComment, model, item.parent) : null; - } - - public get path() { - const path = []; - for (const item of this.item.getHierarchy()) { - switch (item.kind) { - case 'None': - case 'EntryPoint': - case 'Model': - break; - default: - path.push(resolveName(item)); - } - } - - return path; - } - - public toJSON() { - return { - name: this.name, - referenceData: this.referenceData, - summary: this.summary, - excerpt: this.excerpt, - excerptTokens: this.excerptTokens, - kind: this.kind, - remarks: this.remarks, - deprecated: this.deprecated, - path: this.path, - containerKey: this.containerKey, - comment: this.comment, - }; - } -} diff --git a/packages/website/src/DocModel/DocMethod.ts b/packages/website/src/DocModel/DocMethod.ts deleted file mode 100644 index 9a6e8dd35aad..000000000000 --- a/packages/website/src/DocModel/DocMethod.ts +++ /dev/null @@ -1,40 +0,0 @@ -import type { ApiMethod, ApiModel } from '@microsoft/api-extractor-model'; -import { DocFunction } from './DocFunction'; -import { Visibility } from './Visibility'; -import { generatePath } from '~/util/parse.server'; - -export interface InheritanceData { - parentName: string; - path: string; -} - -export class DocMethod extends DocFunction { - public readonly static: boolean; - public readonly optional: boolean; - public readonly visibility: Visibility; - public readonly inheritanceData: InheritanceData | null; - - public constructor(model: ApiModel, item: ApiMethod, inherited = false) { - super(model, item); - this.static = item.isStatic; - this.optional = item.isOptional; - this.visibility = item.isProtected ? Visibility.Protected : Visibility.Public; - this.inheritanceData = - inherited && item.parent - ? { - parentName: item.parent.displayName, - path: generatePath(item.parent.getHierarchy()), - } - : null; - } - - public override toJSON() { - return { - ...super.toJSON(), - static: this.static, - optional: this.optional, - visibility: this.visibility, - inheritanceData: this.inheritanceData, - }; - } -} diff --git a/packages/website/src/DocModel/DocMethodSignature.ts b/packages/website/src/DocModel/DocMethodSignature.ts deleted file mode 100644 index 0a8268a9aaf2..000000000000 --- a/packages/website/src/DocModel/DocMethodSignature.ts +++ /dev/null @@ -1,29 +0,0 @@ -import type { ApiMethodSignature, ApiModel } from '@microsoft/api-extractor-model'; -import { DocFunction } from './DocFunction'; -import type { InheritanceData } from './DocMethod'; -import { generatePath } from '~/util/parse.server'; - -export class DocMethodSignature extends DocFunction { - public readonly optional: boolean; - public readonly inheritanceData: InheritanceData | null; - - public constructor(model: ApiModel, item: ApiMethodSignature, inherited = false) { - super(model, item); - this.optional = item.isOptional; - this.inheritanceData = - inherited && item.parent - ? { - parentName: item.parent.displayName, - path: generatePath(item.parent.getHierarchy()), - } - : null; - } - - public override toJSON() { - return { - ...super.toJSON(), - optional: this.optional, - inheritanceData: this.inheritanceData, - }; - } -} diff --git a/packages/website/src/DocModel/DocProperty.ts b/packages/website/src/DocModel/DocProperty.ts deleted file mode 100644 index 8a2389b0740d..000000000000 --- a/packages/website/src/DocModel/DocProperty.ts +++ /dev/null @@ -1,35 +0,0 @@ -import type { ApiPropertyItem, ApiModel, ApiPropertySignature } from '@microsoft/api-extractor-model'; -import { DocItem } from './DocItem'; -import type { InheritanceData } from './DocMethod'; -import { type TokenDocumentation, genToken, generatePath } from '~/util/parse.server'; - -export class DocProperty extends DocItem { - public readonly propertyTypeTokens: TokenDocumentation[]; - public readonly readonly: boolean; - public readonly optional: boolean; - public readonly inheritanceData: InheritanceData | null; - - public constructor(model: ApiModel, item: ApiPropertyItem | ApiPropertySignature, inherited = false) { - super(model, item); - this.propertyTypeTokens = item.propertyTypeExcerpt.spannedTokens.map((token) => genToken(this.model, token)); - this.readonly = item.isReadonly; - this.optional = item.isOptional; - this.inheritanceData = - inherited && item.parent - ? { - parentName: item.parent.displayName, - path: generatePath(item.parent.getHierarchy()), - } - : null; - } - - public override toJSON() { - return { - ...super.toJSON(), - propertyTypeTokens: this.propertyTypeTokens, - readonly: this.readonly, - optional: this.optional, - inheritanceData: this.inheritanceData, - }; - } -} diff --git a/packages/website/src/DocModel/DocTypeAlias.ts b/packages/website/src/DocModel/DocTypeAlias.ts deleted file mode 100644 index 7101176cc2ff..000000000000 --- a/packages/website/src/DocModel/DocTypeAlias.ts +++ /dev/null @@ -1,20 +0,0 @@ -import type { ApiModel, ApiTypeAlias } from '@microsoft/api-extractor-model'; -import { DocItem } from './DocItem'; -import { TypeParameterMixin } from './TypeParameterMixin'; -import { type TokenDocumentation, genToken } from '~/util/parse.server'; - -export class DocTypeAlias extends TypeParameterMixin(DocItem) { - public readonly typeTokens: TokenDocumentation[]; - - public constructor(model: ApiModel, item: ApiTypeAlias) { - super(model, item); - this.typeTokens = item.typeExcerpt.spannedTokens.map((token) => genToken(model, token)); - } - - public override toJSON() { - return { - ...super.toJSON(), - typeTokens: this.typeTokens, - }; - } -} diff --git a/packages/website/src/DocModel/DocVariable.ts b/packages/website/src/DocModel/DocVariable.ts deleted file mode 100644 index 2cf946bfe9f4..000000000000 --- a/packages/website/src/DocModel/DocVariable.ts +++ /dev/null @@ -1,22 +0,0 @@ -import type { ApiModel, ApiVariable } from '@microsoft/api-extractor-model'; -import { DocItem } from './DocItem'; -import { genToken, TokenDocumentation } from '~/util/parse.server'; - -export class DocVariable extends DocItem { - public readonly typeTokens: TokenDocumentation[] = []; - public readonly readonly: boolean; - - public constructor(model: ApiModel, item: ApiVariable) { - super(model, item); - this.typeTokens = item.variableTypeExcerpt.spannedTokens.map((token) => genToken(model, token)); - this.readonly = item.isReadonly; - } - - public override toJSON() { - return { - ...super.toJSON(), - typeTokens: this.typeTokens, - readonly: this.readonly, - }; - } -} diff --git a/packages/website/src/DocModel/TypeParameterMixin.ts b/packages/website/src/DocModel/TypeParameterMixin.ts index adaf0b5d5e2c..74fb155ac193 100644 --- a/packages/website/src/DocModel/TypeParameterMixin.ts +++ b/packages/website/src/DocModel/TypeParameterMixin.ts @@ -1,5 +1,4 @@ -import type { ApiItem, ApiModel, ApiTypeParameterListMixin, TypeParameter } from '@microsoft/api-extractor-model'; -import type { DocItemConstructor } from './DocItem'; +import type { ApiItem, ApiModel, TypeParameter } from '@microsoft/api-extractor-model'; import { block, DocBlockJSON } from './comment/CommentBlock'; import { genToken, TokenDocumentation } from '~/util/parse.server'; @@ -27,24 +26,3 @@ export function generateTypeParamData( commentBlock: typeParam.tsdocTypeParamBlock ? block(typeParam.tsdocTypeParamBlock, model, parentItem) : null, }; } - -export function TypeParameterMixin(Base: TBase) { - return class Mixed extends Base { - public readonly typeParameters: TypeParameterData[] = []; - - public constructor(...args: any[]); - public constructor(model: ApiModel, item: ApiItem) { - super(model, item); - this.typeParameters = (item as ApiTypeParameterListMixin).typeParameters.map((typeParam) => - generateTypeParamData(this.model, typeParam, item.parent), - ); - } - - public override toJSON() { - return { - ...super.toJSON(), - typeParameterData: this.typeParameters, - }; - } - }; -} diff --git a/packages/website/src/components/CodeListing.tsx b/packages/website/src/components/CodeListing.tsx index 46200758807b..be6744eef518 100644 --- a/packages/website/src/components/CodeListing.tsx +++ b/packages/website/src/components/CodeListing.tsx @@ -3,8 +3,7 @@ import type { ReactNode } from 'react'; import { HyperlinkedText } from './HyperlinkedText'; import { InheritanceText } from './InheritanceText'; import { TSDoc } from './tsdoc/TSDoc'; -import type { DocItem } from '~/DocModel/DocItem'; -import type { InheritanceData } from '~/DocModel/DocMethod'; +import type { ApiItemJSON, InheritanceData } from '~/DocModel/ApiNodeJSONEncoder'; import type { AnyDocNodeJSON } from '~/DocModel/comment/CommentNode'; import type { TokenDocumentation } from '~/util/parse.server'; @@ -30,7 +29,7 @@ export function CodeListing({ typeTokens: TokenDocumentation[]; readonly?: boolean; optional?: boolean; - summary?: ReturnType['summary']; + summary?: ApiItemJSON['summary']; comment?: AnyDocNodeJSON | null; children?: ReactNode; deprecation?: AnyDocNodeJSON | null; diff --git a/packages/website/src/components/DocContainer.tsx b/packages/website/src/components/DocContainer.tsx index 335126473c90..7802ecc63029 100644 --- a/packages/website/src/components/DocContainer.tsx +++ b/packages/website/src/components/DocContainer.tsx @@ -9,8 +9,7 @@ import { Section } from './Section'; import { TableOfContentsItems } from './TableOfContentsItems'; import { TypeParamTable } from './TypeParamTable'; import { TSDoc } from './tsdoc/TSDoc'; -import type { DocClass } from '~/DocModel/DocClass'; -import type { DocItem } from '~/DocModel/DocItem'; +import type { ApiClassJSON, ApiItemJSON } from '~/DocModel/ApiNodeJSONEncoder'; import type { TypeParameterData } from '~/DocModel/TypeParameterMixin'; import type { AnyDocNodeJSON } from '~/DocModel/comment/CommentNode'; import { generateIcon } from '~/util/icon'; @@ -20,13 +19,13 @@ export interface DocContainerProps { name: string; kind: string; excerpt: string; - summary?: ReturnType['summary']; + summary?: ApiItemJSON['summary']; children?: ReactNode; extendsTokens?: TokenDocumentation[] | null; implementsTokens?: TokenDocumentation[][]; typeParams?: TypeParameterData[]; comment?: AnyDocNodeJSON | null; - methods?: ReturnType['methods'] | null; + methods?: ApiClassJSON['methods'] | null; } export function DocContainer({ diff --git a/packages/website/src/components/InheritanceText.tsx b/packages/website/src/components/InheritanceText.tsx index 655b9856828d..6f2fb999b47c 100644 --- a/packages/website/src/components/InheritanceText.tsx +++ b/packages/website/src/components/InheritanceText.tsx @@ -1,6 +1,6 @@ import { Anchor, Text } from '@mantine/core'; import Link from 'next/link'; -import type { InheritanceData } from '~/DocModel/DocMethod'; +import type { InheritanceData } from '~/DocModel/ApiNodeJSONEncoder'; export function InheritanceText({ data }: { data: InheritanceData }) { return ( diff --git a/packages/website/src/components/MethodItem.tsx b/packages/website/src/components/MethodItem.tsx index 3200de490833..8b3dd7be7606 100644 --- a/packages/website/src/components/MethodItem.tsx +++ b/packages/website/src/components/MethodItem.tsx @@ -3,11 +3,10 @@ import { HyperlinkedText } from './HyperlinkedText'; import { InheritanceText } from './InheritanceText'; import { ParameterTable } from './ParameterTable'; import { TSDoc } from './tsdoc/TSDoc'; -import type { DocMethod } from '~/DocModel/DocMethod'; -import type { DocMethodSignature } from '~/DocModel/DocMethodSignature'; +import type { ApiMethodJSON, ApiMethodSignatureJSON } from '~/DocModel/ApiNodeJSONEncoder'; import { Visibility } from '~/DocModel/Visibility'; -type MethodResolvable = ReturnType | ReturnType; +type MethodResolvable = ApiMethodJSON | ApiMethodSignatureJSON; function getShorthandName(data: MethodResolvable) { return `${data.name}${data.optional ? '?' : ''}(${data.parameters.reduce((prev, cur, index) => { @@ -20,7 +19,8 @@ function getShorthandName(data: MethodResolvable) { } export function MethodItem({ data }: { data: MethodResolvable }) { - const method = data as ReturnType; + const method = data as ApiMethodJSON; + return ( 1 ? `:${data.overloadIndex}` : ''}`} diff --git a/packages/website/src/components/MethodList.tsx b/packages/website/src/components/MethodList.tsx index 69204a622d85..e4d140fef411 100644 --- a/packages/website/src/components/MethodList.tsx +++ b/packages/website/src/components/MethodList.tsx @@ -1,14 +1,9 @@ import { Divider, Stack } from '@mantine/core'; import { Fragment } from 'react'; import { MethodItem } from './MethodItem'; -import type { DocMethod } from '~/DocModel/DocMethod'; -import type { DocMethodSignature } from '~/DocModel/DocMethodSignature'; +import type { ApiMethodJSON, ApiMethodSignatureJSON } from '~/DocModel/ApiNodeJSONEncoder'; -export function MethodList({ - data, -}: { - data: (ReturnType | ReturnType)[]; -}) { +export function MethodList({ data }: { data: (ApiMethodJSON | ApiMethodSignatureJSON)[] }) { return ( {data.map((method) => ( diff --git a/packages/website/src/components/PropertyList.tsx b/packages/website/src/components/PropertyList.tsx index 3188312db609..7397df3754dd 100644 --- a/packages/website/src/components/PropertyList.tsx +++ b/packages/website/src/components/PropertyList.tsx @@ -1,8 +1,8 @@ import { Stack } from '@mantine/core'; import { CodeListing } from './CodeListing'; -import type { DocProperty } from '~/DocModel/DocProperty'; +import type { ApiPropertyItemJSON } from '~/DocModel/ApiNodeJSONEncoder'; -export function PropertyList({ data }: { data: ReturnType[] }) { +export function PropertyList({ data }: { data: ApiPropertyItemJSON[] }) { return ( {data.map((prop) => ( diff --git a/packages/website/src/components/Sections.tsx b/packages/website/src/components/Sections.tsx index 0ab792c05486..f190681a64b3 100644 --- a/packages/website/src/components/Sections.tsx +++ b/packages/website/src/components/Sections.tsx @@ -1,18 +1,16 @@ +import { Stack, Group, Badge, Title } from '@mantine/core'; import { useMediaQuery } from '@mantine/hooks'; import { VscSymbolConstant, VscSymbolMethod, VscSymbolProperty } from 'react-icons/vsc'; + import { MethodList } from './MethodList'; import { ParameterTable } from './ParameterTable'; import { PropertyList } from './PropertyList'; import { Section } from './Section'; -import type { DocClass } from '~/DocModel/DocClass'; -import type { DocInterface } from '~/DocModel/DocInterface'; +import { TSDoc } from './tsdoc/TSDoc'; +import type { ApiClassJSON, ApiConstructorJSON, ApiInterfaceJSON } from '~/DocModel/ApiNodeJSONEncoder'; import type { ParameterDocumentation } from '~/util/parse.server'; -export function PropertiesSection({ - data, -}: { - data: ReturnType['properties'] | ReturnType['properties']; -}) { +export function PropertiesSection({ data }: { data: ApiClassJSON['properties'] | ApiInterfaceJSON['properties'] }) { const matches = useMediaQuery('(max-width: 768px)', true, { getInitialValueInEffect: false }); return data.length ? ( @@ -22,11 +20,7 @@ export function PropertiesSection({ ) : null; } -export function MethodsSection({ - data, -}: { - data: ReturnType['methods'] | ReturnType['methods']; -}) { +export function MethodsSection({ data }: { data: ApiClassJSON['methods'] | ApiInterfaceJSON['methods'] }) { const matches = useMediaQuery('(max-width: 768px)', true, { getInitialValueInEffect: false }); return data.length ? ( @@ -45,3 +39,48 @@ export function ParametersSection({ data }: { data: ParameterDocumentation[] }) ) : null; } + +export function ConstructorSection({ data }: { data: ApiConstructorJSON }) { + const matches = useMediaQuery('(max-width: 768px)', true, { getInitialValueInEffect: false }); + + function getShorthandName(): string { + return `constructor(${data.parameters.reduce((prev, cur, index) => { + if (index === 0) { + return `${prev}${cur.isOptional ? `[${cur.name}]` : cur.name}`; + } + + return `${prev}, ${cur.isOptional ? `[${cur.name}]` : cur.name}`; + }, '')})`; + } + + return data.parameters.length ? ( +
} padded dense={matches}> + + + + + {data.deprecated ? ( + + Deprecated + + ) : null} + {data.protected ? Protected : null} + + {getShorthandName()} + + + + + + + {data.deprecated ? : null} + {data.summary ? : null} + {data.remarks ? : null} + {data.comment ? : null} + {data.parameters.length ? : null} + + + +
+ ) : null; +} diff --git a/packages/website/src/components/SidebarLayout.tsx b/packages/website/src/components/SidebarLayout.tsx index 211f796cac07..ce480adb1459 100644 --- a/packages/website/src/components/SidebarLayout.tsx +++ b/packages/website/src/components/SidebarLayout.tsx @@ -25,7 +25,7 @@ import { type PropsWithChildren, useState } from 'react'; import { VscChevronDown, VscPackage } from 'react-icons/vsc'; import { WiDaySunny, WiNightClear } from 'react-icons/wi'; import { SidebarItems } from './SidebarItems'; -import type { DocItem } from '~/DocModel/DocItem'; +import type { ApiItemJSON } from '~/DocModel/ApiNodeJSONEncoder'; import type { findMember } from '~/util/model.server'; import type { getMembers } from '~/util/parse.server'; @@ -36,7 +36,7 @@ export interface SidebarLayoutProps { member: ReturnType; }; - selectedMember?: ReturnType | undefined; + selectedMember?: ApiItemJSON | undefined; } export type Members = SidebarLayoutProps['data']['members']; diff --git a/packages/website/src/components/TableOfContentsItems.tsx b/packages/website/src/components/TableOfContentsItems.tsx index ccece300cea4..07b855216a20 100644 --- a/packages/website/src/components/TableOfContentsItems.tsx +++ b/packages/website/src/components/TableOfContentsItems.tsx @@ -1,7 +1,6 @@ import { createStyles, Group, Text, Box } from '@mantine/core'; import { VscListSelection } from 'react-icons/vsc'; -import type { DocClass } from '~/DocModel/DocClass'; -import type { DocInterface } from '~/DocModel/DocInterface'; +import type { ApiClassJSON, ApiInterfaceJSON } from '~/DocModel/ApiNodeJSONEncoder'; const useStyles = createStyles((theme) => ({ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment @@ -25,11 +24,7 @@ const useStyles = createStyles((theme) => ({ }, })); -export function TableOfContentsItems({ - members, -}: { - members: ReturnType['methods'] | ReturnType['methods']; -}) { +export function TableOfContentsItems({ members }: { members: ApiClassJSON['methods'] | ApiInterfaceJSON['methods'] }) { const { classes } = useStyles(); const items = members.map((member) => { diff --git a/packages/website/src/components/model/Class.tsx b/packages/website/src/components/model/Class.tsx index 6a93fa1b7be1..27ffaeb5194e 100644 --- a/packages/website/src/components/model/Class.tsx +++ b/packages/website/src/components/model/Class.tsx @@ -1,20 +1,21 @@ import { DocContainer } from '../DocContainer'; -import { MethodsSection, PropertiesSection } from '../Sections'; -import type { DocClass } from '~/DocModel/DocClass'; +import { ConstructorSection, MethodsSection, PropertiesSection } from '../Sections'; +import type { ApiClassJSON } from '~/DocModel/ApiNodeJSONEncoder'; -export function Class({ data }: { data: ReturnType }) { +export function Class({ data }: { data: ApiClassJSON }) { return ( + {data.constructor ? : null} diff --git a/packages/website/src/components/model/Enum.tsx b/packages/website/src/components/model/Enum.tsx index dd68db93dd17..3dcaaff7950b 100644 --- a/packages/website/src/components/model/Enum.tsx +++ b/packages/website/src/components/model/Enum.tsx @@ -4,9 +4,9 @@ import { VscSymbolEnumMember } from 'react-icons/vsc'; import { CodeListing, CodeListingSeparatorType } from '../CodeListing'; import { DocContainer } from '../DocContainer'; import { Section } from '../Section'; -import type { DocEnum } from '~/DocModel/DocEnum'; +import type { ApiEnumJSON } from '~/DocModel/ApiNodeJSONEncoder'; -export function Enum({ data }: { data: ReturnType }) { +export function Enum({ data }: { data: ApiEnumJSON }) { const matches = useMediaQuery('(max-width: 768px)', true, { getInitialValueInEffect: false }); return ( diff --git a/packages/website/src/components/model/Function.tsx b/packages/website/src/components/model/Function.tsx index 382b2866caab..3314e3283142 100644 --- a/packages/website/src/components/model/Function.tsx +++ b/packages/website/src/components/model/Function.tsx @@ -1,15 +1,15 @@ import { DocContainer } from '../DocContainer'; import { ParametersSection } from '../Sections'; -import type { DocFunction } from '~/DocModel/DocFunction'; +import type { ApiFunctionJSON } from '~/DocModel/ApiNodeJSONEncoder'; -export function Function({ data }: { data: ReturnType }) { +export function Function({ data }: { data: ApiFunctionJSON }) { return ( 1 ? ` (${data.overloadIndex})` : ''}`} kind={data.kind} excerpt={data.excerpt} summary={data.summary} - typeParams={data.typeParameterData} + typeParams={data.typeParameters} > diff --git a/packages/website/src/components/model/Interface.tsx b/packages/website/src/components/model/Interface.tsx index 8410b43b117c..e689d906d960 100644 --- a/packages/website/src/components/model/Interface.tsx +++ b/packages/website/src/components/model/Interface.tsx @@ -1,15 +1,15 @@ import { DocContainer } from '../DocContainer'; import { MethodsSection, PropertiesSection } from '../Sections'; -import type { DocInterface } from '~/DocModel/DocInterface'; +import type { ApiInterfaceJSON } from '~/DocModel/ApiNodeJSONEncoder'; -export function Interface({ data }: { data: ReturnType }) { +export function Interface({ data }: { data: ApiInterfaceJSON }) { return ( diff --git a/packages/website/src/components/model/TypeAlias.tsx b/packages/website/src/components/model/TypeAlias.tsx index 10aa14fe4e15..f2e1ee4e583e 100644 --- a/packages/website/src/components/model/TypeAlias.tsx +++ b/packages/website/src/components/model/TypeAlias.tsx @@ -1,14 +1,14 @@ import { DocContainer } from '../DocContainer'; -import type { DocTypeAlias } from '~/DocModel/DocTypeAlias'; +import type { ApiTypeAliasJSON } from '~/DocModel/ApiNodeJSONEncoder'; -export function TypeAlias({ data }: { data: ReturnType }) { +export function TypeAlias({ data }: { data: ApiTypeAliasJSON }) { return ( ); } diff --git a/packages/website/src/components/model/Variable.tsx b/packages/website/src/components/model/Variable.tsx index 3cc45824af1c..65b1fabc70fe 100644 --- a/packages/website/src/components/model/Variable.tsx +++ b/packages/website/src/components/model/Variable.tsx @@ -1,6 +1,6 @@ import { DocContainer } from '../DocContainer'; -import type { DocVariable } from '~/DocModel/DocVariable'; +import type { ApiVariableJSON } from '~/DocModel/ApiNodeJSONEncoder'; -export function Variable({ data }: { data: ReturnType }) { +export function Variable({ data }: { data: ApiVariableJSON }) { return ; } diff --git a/packages/website/src/contexts/member.tsx b/packages/website/src/contexts/member.tsx index 2c3d9ffa41ac..d45059596058 100644 --- a/packages/website/src/contexts/member.tsx +++ b/packages/website/src/contexts/member.tsx @@ -1,14 +1,12 @@ import { createContext } from 'react'; -import type { DocItem } from '~/DocModel/DocItem'; +import type { ApiItemJSON } from '~/DocModel/ApiNodeJSONEncoder'; -export type DocItemJSON = ReturnType; - -export const MemberContext = createContext(undefined); +export const MemberContext = createContext(undefined); export const MemberProvider = ({ member, children, }: { - member: DocItemJSON | undefined; + member: ApiItemJSON | undefined; children: React.ReactNode; }) => {children}; diff --git a/packages/website/src/pages/docs/[...slug].tsx b/packages/website/src/pages/docs/[...slug].tsx index ba7d9537b8d6..6cdef84c88f6 100644 --- a/packages/website/src/pages/docs/[...slug].tsx +++ b/packages/website/src/pages/docs/[...slug].tsx @@ -4,12 +4,14 @@ import { join } from 'node:path'; import { Box } from '@mantine/core'; import { ApiFunction } from '@microsoft/api-extractor-model'; import type { GetStaticPaths, GetStaticProps } from 'next/types'; -import type { DocClass } from '~/DocModel/DocClass'; -import type { DocEnum } from '~/DocModel/DocEnum'; -import type { DocFunction } from '~/DocModel/DocFunction'; -import type { DocInterface } from '~/DocModel/DocInterface'; -import type { DocTypeAlias } from '~/DocModel/DocTypeAlias'; -import type { DocVariable } from '~/DocModel/DocVariable'; +import type { + ApiClassJSON, + ApiEnumJSON, + ApiFunctionJSON, + ApiInterfaceJSON, + ApiTypeAliasJSON, + ApiVariableJSON, +} from '~/DocModel/ApiNodeJSONEncoder'; import { SidebarLayout, type SidebarLayoutProps } from '~/components/SidebarLayout'; import { Class } from '~/components/model/Class'; import { Enum } from '~/components/model/Enum'; @@ -110,8 +112,7 @@ export const getStaticProps: GetStaticProps = async ({ params }) => { packageName, data: { members: pkg ? getMembers(pkg) : [], - member: - memberName && containerKey ? findMemberByKey(model, packageName, containerKey)?.toJSON() ?? null : null, + member: memberName && containerKey ? findMemberByKey(model, packageName, containerKey) ?? null : null, }, }, }; @@ -128,17 +129,17 @@ const member = (props: any) => { // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access switch (props.kind) { case 'Class': - return } />; + return ; case 'Function': - return } />; + return ; case 'Interface': - return } />; + return ; case 'TypeAlias': - return } />; + return ; case 'Variable': - return } />; + return ; case 'Enum': - return } />; + return ; default: return Cannot render that item type; } diff --git a/packages/website/src/util/model.server.ts b/packages/website/src/util/model.server.ts index d6da14a18ab3..b96b9e7c980e 100644 --- a/packages/website/src/util/model.server.ts +++ b/packages/website/src/util/model.server.ts @@ -1,52 +1,6 @@ -import { - ApiClass, - ApiDeclaredItem, - ApiEntryPoint, - ApiEnum, - ApiFunction, - ApiInterface, - ApiItem, - ApiItemKind, - ApiModel, - ApiTypeAlias, - ApiVariable, -} from '@microsoft/api-extractor-model'; +import type { ApiEntryPoint, ApiModel } from '@microsoft/api-extractor-model'; import { findPackage } from './parse.server'; -import { DocClass } from '../DocModel/DocClass'; -import { DocEnum } from '../DocModel/DocEnum'; -import { DocFunction } from '../DocModel/DocFunction'; -import { DocInterface } from '../DocModel/DocInterface'; -import { DocItem } from '../DocModel/DocItem'; -import { DocTypeAlias } from '../DocModel/DocTypeAlias'; -import { DocVariable } from '../DocModel/DocVariable'; - -export interface ReferenceData { - name: string; - path: string; -} - -function createDocItem(model: ApiModel, member: ApiItem) { - if (!(member instanceof ApiDeclaredItem)) { - return undefined; - } - - switch (member.kind) { - case ApiItemKind.Class: - return new DocClass(model, member as ApiClass); - case ApiItemKind.Function: - return new DocFunction(model, member as ApiFunction); - case ApiItemKind.Interface: - return new DocInterface(model, member as ApiInterface); - case ApiItemKind.TypeAlias: - return new DocTypeAlias(model, member as ApiTypeAlias); - case ApiItemKind.Variable: - return new DocVariable(model, member as ApiVariable); - case ApiItemKind.Enum: - return new DocEnum(model, member as ApiEnum); - default: - return new DocItem(model, member); - } -} +import { ApiNodeJSONEncoder } from '~/DocModel/ApiNodeJSONEncoder'; export function findMemberByKey(model: ApiModel, packageName: string, containerKey: string) { const pkg = findPackage(model, packageName)!; @@ -56,10 +10,14 @@ export function findMemberByKey(model: ApiModel, packageName: string, containerK return undefined; } - return createDocItem(model, member); + return ApiNodeJSONEncoder.encode(model, member); } -export function findMember(model: ApiModel, packageName: string, memberName: string): DocItem | undefined { +export function findMember( + model: ApiModel, + packageName: string, + memberName: string, +): ReturnType | undefined { const pkg = findPackage(model, packageName)!; const member = (pkg.members[0] as ApiEntryPoint).findMembersByName(memberName)[0]; @@ -67,5 +25,5 @@ export function findMember(model: ApiModel, packageName: string, memberName: str return undefined; } - return createDocItem(model, member); + return ApiNodeJSONEncoder.encode(model, member); } diff --git a/packages/ws/.eslintrc.json b/packages/ws/.eslintrc.json index 99ef7cec8051..6115ee5c022e 100644 --- a/packages/ws/.eslintrc.json +++ b/packages/ws/.eslintrc.json @@ -1,3 +1,7 @@ { - "extends": "../../.eslintrc.json" + "extends": "../../.eslintrc.json", + "plugins": ["eslint-plugin-tsdoc"], + "rules": { + "tsdoc/syntax": "warn" + } } diff --git a/packages/ws/package.json b/packages/ws/package.json index 252809969be0..2b05956a4450 100644 --- a/packages/ws/package.json +++ b/packages/ws/package.json @@ -74,6 +74,7 @@ "eslint-config-prettier": "^8.5.0", "eslint-import-resolver-typescript": "^3.4.1", "eslint-plugin-import": "^2.26.0", + "eslint-plugin-tsdoc": "^0.2.16", "mock-socket": "^9.1.5", "prettier": "^2.7.1", "rollup-plugin-typescript2": "0.32.1", diff --git a/packages/ws/src/strategies/sharding/SimpleShardingStrategy.ts b/packages/ws/src/strategies/sharding/SimpleShardingStrategy.ts index 1bffc43038b2..c6c6b6bbed5a 100644 --- a/packages/ws/src/strategies/sharding/SimpleShardingStrategy.ts +++ b/packages/ws/src/strategies/sharding/SimpleShardingStrategy.ts @@ -21,6 +21,9 @@ export class SimpleShardingStrategy implements IShardingStrategy { this.throttler = new IdentifyThrottler(manager); } + /** + * {@inheritDoc IShardingStrategy.spawn} + */ public async spawn(shardIds: number[]) { const strategyOptions = await managerToFetchingStrategyOptions(this.manager); for (const shardId of shardIds) { @@ -34,6 +37,9 @@ export class SimpleShardingStrategy implements IShardingStrategy { } } + /** + * {@inheritDoc IShardingStrategy.connect} + */ public async connect() { const promises = []; @@ -45,6 +51,9 @@ export class SimpleShardingStrategy implements IShardingStrategy { await Promise.all(promises); } + /** + * {@inheritDoc IShardingStrategy.destroy} + */ public async destroy(options?: Omit) { const promises = []; @@ -56,6 +65,9 @@ export class SimpleShardingStrategy implements IShardingStrategy { this.shards.clear(); } + /** + * {@inheritDoc IShardingStrategy.send} + */ public send(shardId: number, payload: GatewaySendPayload) { const shard = this.shards.get(shardId); if (!shard) throw new Error(`Shard ${shardId} not found`); diff --git a/packages/ws/src/strategies/sharding/WorkerShardingStrategy.ts b/packages/ws/src/strategies/sharding/WorkerShardingStrategy.ts index 5add1955cb9a..e15c4a5dd8b7 100644 --- a/packages/ws/src/strategies/sharding/WorkerShardingStrategy.ts +++ b/packages/ws/src/strategies/sharding/WorkerShardingStrategy.ts @@ -73,6 +73,9 @@ export class WorkerShardingStrategy implements IShardingStrategy { this.options = options; } + /** + * {@inheritDoc IShardingStrategy.spawn} + */ public async spawn(shardIds: number[]) { const shardsPerWorker = this.options.shardsPerWorker === 'all' ? shardIds.length : this.options.shardsPerWorker; const strategyOptions = await managerToFetchingStrategyOptions(this.manager); @@ -106,6 +109,9 @@ export class WorkerShardingStrategy implements IShardingStrategy { } } + /** + * {@inheritDoc IShardingStrategy.connect} + */ public async connect() { const promises = []; @@ -125,6 +131,9 @@ export class WorkerShardingStrategy implements IShardingStrategy { await Promise.all(promises); } + /** + * {@inheritDoc IShardingStrategy.destroy} + */ public async destroy(options: Omit = {}) { const promises = []; @@ -147,6 +156,9 @@ export class WorkerShardingStrategy implements IShardingStrategy { await Promise.all(promises); } + /** + * {@inheritDoc IShardingStrategy.send} + */ public send(shardId: number, data: GatewaySendPayload) { const worker = this.#workerByShardId.get(shardId); if (!worker) { diff --git a/packages/ws/src/ws/WebSocketManager.ts b/packages/ws/src/ws/WebSocketManager.ts index 52a28ce5ba37..9a7877a09d6f 100644 --- a/packages/ws/src/ws/WebSocketManager.ts +++ b/packages/ws/src/ws/WebSocketManager.ts @@ -203,7 +203,7 @@ export class WebSocketManager extends AsyncEventEmitter { /** * Fetches the gateway information from Discord - or returns it from cache if available - * @param force Whether to ignore the cache and force a fresh fetch + * @param force - Whether to ignore the cache and force a fresh fetch */ public async fetchGatewayInformation(force = false) { if (this.gatewayInformation) { @@ -222,7 +222,7 @@ export class WebSocketManager extends AsyncEventEmitter { /** * Updates your total shard count on-the-fly, spawning shards as needed - * @param shardCount The new shard count to use + * @param shardCount - The new shard count to use */ public async updateShardCount(shardCount: number | null) { await this.strategy.destroy({ reason: 'User is adjusting their shards' }); diff --git a/yarn.lock b/yarn.lock index 7f03f5385195..64ece8df15d7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1745,6 +1745,7 @@ __metadata: eslint-config-prettier: ^8.5.0 eslint-import-resolver-typescript: ^3.4.1 eslint-plugin-import: ^2.26.0 + eslint-plugin-tsdoc: ^0.2.16 fast-deep-equal: ^3.1.3 prettier: ^2.7.1 rollup-plugin-typescript2: 0.32.1 @@ -1773,6 +1774,7 @@ __metadata: eslint-config-prettier: ^8.5.0 eslint-import-resolver-typescript: ^3.4.1 eslint-plugin-import: ^2.26.0 + eslint-plugin-tsdoc: ^0.2.16 prettier: ^2.7.1 rollup-plugin-typescript2: 0.32.1 typescript: ^4.7.4 @@ -1900,6 +1902,7 @@ __metadata: eslint-config-prettier: ^8.5.0 eslint-import-resolver-typescript: ^3.4.1 eslint-plugin-import: ^2.26.0 + eslint-plugin-tsdoc: ^0.2.16 file-type: ^17.1.6 prettier: ^2.7.1 rollup-plugin-typescript2: 0.32.1 @@ -1956,6 +1959,7 @@ __metadata: eslint-config-prettier: ^8.5.0 eslint-import-resolver-typescript: ^3.4.1 eslint-plugin-import: ^2.26.0 + eslint-plugin-tsdoc: ^0.2.16 jest: ^28.1.3 jest-websocket-mock: ^2.4.0 mock-socket: ^9.1.5 @@ -2043,6 +2047,7 @@ __metadata: eslint-config-prettier: ^8.5.0 eslint-import-resolver-typescript: ^3.4.1 eslint-plugin-import: ^2.26.0 + eslint-plugin-tsdoc: ^0.2.16 mock-socket: ^9.1.5 prettier: ^2.7.1 rollup-plugin-typescript2: 0.32.1 @@ -7925,6 +7930,16 @@ __metadata: languageName: node linkType: hard +"eslint-plugin-tsdoc@npm:^0.2.16": + version: 0.2.16 + resolution: "eslint-plugin-tsdoc@npm:0.2.16" + dependencies: + "@microsoft/tsdoc": 0.14.1 + "@microsoft/tsdoc-config": 0.16.1 + checksum: 37ca88b060b90223aa938656d267eead4291d5859e790f95eb8271eb8f315c16010e500fac4ef535710350e36d7394cecb7e61fbb3635568066008e3425dcac7 + languageName: node + linkType: hard + "eslint-rule-docs@npm:^1.1.5": version: 1.1.235 resolution: "eslint-rule-docs@npm:1.1.235" From 9ed11a4c1951276fe374a3799edeba166f1ef3e6 Mon Sep 17 00:00:00 2001 From: iCrawl Date: Mon, 22 Aug 2022 09:56:42 +0200 Subject: [PATCH 028/155] chore: deps --- ...in-typescript2-npm-0.32.1-b5887420f2.patch | 36 - package.json | 3 +- packages/actions/package.json | 16 +- packages/builders/package.json | 22 +- packages/collection/package.json | 20 +- packages/discord.js/package.json | 8 +- packages/docgen/package.json | 14 +- packages/proxy-container/package.json | 12 +- packages/proxy/package.json | 22 +- packages/rest/package.json | 26 +- packages/scripts/package.json | 16 +- packages/voice/package.json | 20 +- packages/website/package.json | 35 +- packages/ws/package.json | 26 +- yarn.lock | 1569 ++++++----------- 15 files changed, 702 insertions(+), 1143 deletions(-) delete mode 100644 .yarn/patches/rollup-plugin-typescript2-npm-0.32.1-b5887420f2.patch diff --git a/.yarn/patches/rollup-plugin-typescript2-npm-0.32.1-b5887420f2.patch b/.yarn/patches/rollup-plugin-typescript2-npm-0.32.1-b5887420f2.patch deleted file mode 100644 index f2372b463869..000000000000 --- a/.yarn/patches/rollup-plugin-typescript2-npm-0.32.1-b5887420f2.patch +++ /dev/null @@ -1,36 +0,0 @@ -diff --git a/dist/rollup-plugin-typescript2.cjs.js b/dist/rollup-plugin-typescript2.cjs.js -index 9ab972b041cc76f8f786d6a20f3efb53c364cad6..13e056a3c0971eb18b307d91fad096a9f3b9de79 100644 ---- a/dist/rollup-plugin-typescript2.cjs.js -+++ b/dist/rollup-plugin-typescript2.cjs.js -@@ -29799,6 +29799,13 @@ const typescript = (options) => { - declarations[key] = { type: result.dts, map: result.dtsmap }; - context.debug(() => `${safe.exports.blue("generated declarations")} for '${key}'`); - } -+ // if a user sets this compilerOption, they probably want another plugin (e.g. Babel, ESBuild) to transform their TS instead, while rpt2 just type-checks and/or outputs declarations -+ // note that result.code is non-existent if emitDeclarationOnly per https://github.com/ezolenko/rollup-plugin-typescript2/issues/268 -+ if (parsedConfig.options.emitDeclarationOnly) -+ { -+ context.debug(() => `${blue("emitDeclarationOnly")} enabled, not transforming TS'`); -+ return undefined; -+ } - const transformResult = { code: result.code, map: { mappings: "" } }; - if (result.map) { - if (pluginOptions.sourceMapCallback) -diff --git a/dist/rollup-plugin-typescript2.es.js b/dist/rollup-plugin-typescript2.es.js -index e43bf8f03bc6792b61d8352e04bb6466712426c2..420e8f0d0d109076bc72e9d60240077235a9ba11 100644 ---- a/dist/rollup-plugin-typescript2.es.js -+++ b/dist/rollup-plugin-typescript2.es.js -@@ -29770,6 +29770,13 @@ const typescript = (options) => { - declarations[key] = { type: result.dts, map: result.dtsmap }; - context.debug(() => `${safe.exports.blue("generated declarations")} for '${key}'`); - } -+ // if a user sets this compilerOption, they probably want another plugin (e.g. Babel, ESBuild) to transform their TS instead, while rpt2 just type-checks and/or outputs declarations -+ // note that result.code is non-existent if emitDeclarationOnly per https://github.com/ezolenko/rollup-plugin-typescript2/issues/268 -+ if (parsedConfig.options.emitDeclarationOnly) -+ { -+ context.debug(() => `${blue("emitDeclarationOnly")} enabled, not transforming TS'`); -+ return undefined; -+ } - const transformResult = { code: result.code, map: { mappings: "" } }; - if (result.map) { - if (pluginOptions.sourceMapCallback) diff --git a/package.json b/package.json index f4caa2d1ccaf..c093c372df19 100644 --- a/package.json +++ b/package.json @@ -39,7 +39,7 @@ "devDependencies": { "@commitlint/cli": "^17.0.3", "@commitlint/config-angular": "^17.0.3", - "@favware/cliff-jumper": "^1.8.6", + "@favware/cliff-jumper": "^1.8.7", "@favware/npm-deprecate": "^1.0.5", "@types/is-ci": "^3.0.0", "conventional-changelog-cli": "^2.2.2", @@ -51,7 +51,6 @@ "typescript": "^4.7.4" }, "resolutions": { - "rollup-plugin-typescript2@0.32.1": "patch:rollup-plugin-typescript2@npm:0.32.1#.yarn/patches/rollup-plugin-typescript2-npm-0.32.1-b5887420f2.patch", "@microsoft/tsdoc-config": "patch:@microsoft/tsdoc-config@npm:0.16.1#.yarn/patches/@microsoft-tsdoc-config-npm-0.16.1-81031b1bbf.patch" }, "engines": { diff --git a/packages/actions/package.json b/packages/actions/package.json index 46c76fe14b53..85118a39260b 100644 --- a/packages/actions/package.json +++ b/packages/actions/package.json @@ -43,20 +43,20 @@ "tslib": "^2.4.0" }, "devDependencies": { - "@types/node": "^16.11.48", - "@typescript-eslint/eslint-plugin": "^5.33.0", - "@typescript-eslint/parser": "^5.33.0", - "@vitest/coverage-c8": "^0.22.0", + "@types/node": "^16.11.52", + "@typescript-eslint/eslint-plugin": "^5.33.1", + "@typescript-eslint/parser": "^5.33.1", + "@vitest/coverage-c8": "^0.22.1", "eslint": "^8.22.0", "eslint-config-marine": "^9.4.1", "eslint-config-prettier": "^8.5.0", - "eslint-import-resolver-typescript": "^3.4.1", + "eslint-import-resolver-typescript": "^3.4.2", "eslint-plugin-import": "^2.26.0", "prettier": "^2.7.1", - "rollup-plugin-typescript2": "0.32.1", + "rollup-plugin-typescript2": "^0.33.0", "typescript": "^4.7.4", - "unbuild": "^0.8.8", - "vitest": "^0.22.0" + "unbuild": "^0.8.9", + "vitest": "^0.22.1" }, "engines": { "node": ">=16.9.0" diff --git a/packages/builders/package.json b/packages/builders/package.json index b4ebcac34bcf..62814bf122bc 100644 --- a/packages/builders/package.json +++ b/packages/builders/package.json @@ -55,31 +55,31 @@ "homepage": "https://discord.js.org", "dependencies": { "@sapphire/shapeshift": "^3.5.1", - "discord-api-types": "^0.37.2", + "discord-api-types": "^0.37.3", "fast-deep-equal": "^3.1.3", "ts-mixer": "^6.0.1", "tslib": "^2.4.0" }, "devDependencies": { "@discordjs/docgen": "workspace:^", - "@favware/cliff-jumper": "^1.8.6", - "@microsoft/api-extractor": "^7.29.2", - "@types/node": "^16.11.48", - "@typescript-eslint/eslint-plugin": "^5.33.0", - "@typescript-eslint/parser": "^5.33.0", - "@vitest/coverage-c8": "^0.22.0", + "@favware/cliff-jumper": "^1.8.7", + "@microsoft/api-extractor": "^7.29.3", + "@types/node": "^16.11.52", + "@typescript-eslint/eslint-plugin": "^5.33.1", + "@typescript-eslint/parser": "^5.33.1", + "@vitest/coverage-c8": "^0.22.1", "downlevel-dts": "^0.10.0", "eslint": "^8.22.0", "eslint-config-marine": "^9.4.1", "eslint-config-prettier": "^8.5.0", - "eslint-import-resolver-typescript": "^3.4.1", + "eslint-import-resolver-typescript": "^3.4.2", "eslint-plugin-import": "^2.26.0", "eslint-plugin-tsdoc": "^0.2.16", "prettier": "^2.7.1", - "rollup-plugin-typescript2": "0.32.1", + "rollup-plugin-typescript2": "^0.33.0", "typescript": "^4.7.4", - "unbuild": "^0.8.8", - "vitest": "^0.22.0" + "unbuild": "^0.8.9", + "vitest": "^0.22.1" }, "engines": { "node": ">=16.9.0" diff --git a/packages/collection/package.json b/packages/collection/package.json index ce17f3d0f16e..b97547cf047c 100644 --- a/packages/collection/package.json +++ b/packages/collection/package.json @@ -51,24 +51,24 @@ "homepage": "https://discord.js.org", "devDependencies": { "@discordjs/docgen": "workspace:^", - "@favware/cliff-jumper": "^1.8.6", - "@microsoft/api-extractor": "^7.29.2", - "@types/node": "^16.11.48", - "@typescript-eslint/eslint-plugin": "^5.33.0", - "@typescript-eslint/parser": "^5.33.0", - "@vitest/coverage-c8": "^0.22.0", + "@favware/cliff-jumper": "^1.8.7", + "@microsoft/api-extractor": "^7.29.3", + "@types/node": "^16.11.52", + "@typescript-eslint/eslint-plugin": "^5.33.1", + "@typescript-eslint/parser": "^5.33.1", + "@vitest/coverage-c8": "^0.22.1", "downlevel-dts": "^0.10.0", "eslint": "^8.22.0", "eslint-config-marine": "^9.4.1", "eslint-config-prettier": "^8.5.0", - "eslint-import-resolver-typescript": "^3.4.1", + "eslint-import-resolver-typescript": "^3.4.2", "eslint-plugin-import": "^2.26.0", "eslint-plugin-tsdoc": "^0.2.16", "prettier": "^2.7.1", - "rollup-plugin-typescript2": "0.32.1", + "rollup-plugin-typescript2": "^0.33.0", "typescript": "^4.7.4", - "unbuild": "^0.8.8", - "vitest": "^0.22.0" + "unbuild": "^0.8.9", + "vitest": "^0.22.1" }, "engines": { "node": ">=16.9.0" diff --git a/packages/discord.js/package.json b/packages/discord.js/package.json index 5f724858f275..cdd22e27d4f6 100644 --- a/packages/discord.js/package.json +++ b/packages/discord.js/package.json @@ -54,17 +54,17 @@ "@discordjs/rest": "workspace:^", "@sapphire/snowflake": "^3.2.2", "@types/ws": "^8.5.3", - "discord-api-types": "^0.37.2", + "discord-api-types": "^0.37.3", "fast-deep-equal": "^3.1.3", "lodash.snakecase": "^4.1.1", "tslib": "^2.4.0", - "undici": "^5.8.2", + "undici": "^5.9.1", "ws": "^8.8.1" }, "devDependencies": { "@discordjs/docgen": "workspace:^", - "@favware/cliff-jumper": "^1.8.6", - "@types/node": "^16.11.48", + "@favware/cliff-jumper": "^1.8.7", + "@types/node": "^16.11.52", "dtslint": "^4.2.1", "eslint": "^8.22.0", "jest": "^28.1.3", diff --git a/packages/docgen/package.json b/packages/docgen/package.json index d185108ff382..fdf0c4681261 100644 --- a/packages/docgen/package.json +++ b/packages/docgen/package.json @@ -48,20 +48,20 @@ "typedoc": "^0.23.10" }, "devDependencies": { - "@favware/cliff-jumper": "^1.8.6", + "@favware/cliff-jumper": "^1.8.7", "@types/jsdoc-to-markdown": "^7.0.3", - "@types/node": "^16.11.48", - "@typescript-eslint/eslint-plugin": "^5.33.0", - "@typescript-eslint/parser": "^5.33.0", + "@types/node": "^16.11.52", + "@typescript-eslint/eslint-plugin": "^5.33.1", + "@typescript-eslint/parser": "^5.33.1", "eslint": "^8.22.0", "eslint-config-marine": "^9.4.1", "eslint-config-prettier": "^8.5.0", - "eslint-import-resolver-typescript": "^3.4.1", + "eslint-import-resolver-typescript": "^3.4.2", "eslint-plugin-import": "^2.26.0", "prettier": "^2.7.1", - "rollup-plugin-typescript2": "0.32.1", + "rollup-plugin-typescript2": "^0.33.0", "typescript": "^4.7.4", - "unbuild": "^0.8.8" + "unbuild": "^0.8.9" }, "engines": { "node": ">=16.9.0" diff --git a/packages/proxy-container/package.json b/packages/proxy-container/package.json index b8d48e717fe9..1739a1aaef43 100644 --- a/packages/proxy-container/package.json +++ b/packages/proxy-container/package.json @@ -49,18 +49,18 @@ "tslib": "^2.4.0" }, "devDependencies": { - "@types/node": "^16.11.48", - "@typescript-eslint/eslint-plugin": "^5.33.0", - "@typescript-eslint/parser": "^5.33.0", + "@types/node": "^16.11.52", + "@typescript-eslint/eslint-plugin": "^5.33.1", + "@typescript-eslint/parser": "^5.33.1", "eslint": "^8.22.0", "eslint-config-marine": "^9.4.1", "eslint-config-prettier": "^8.5.0", - "eslint-import-resolver-typescript": "^3.4.1", + "eslint-import-resolver-typescript": "^3.4.2", "eslint-plugin-import": "^2.26.0", "prettier": "^2.7.1", - "rollup-plugin-typescript2": "0.32.1", + "rollup-plugin-typescript2": "^0.33.0", "typescript": "^4.7.4", - "unbuild": "^0.8.8" + "unbuild": "^0.8.9" }, "engines": { "node": ">=16.9.0" diff --git a/packages/proxy/package.json b/packages/proxy/package.json index c1c20dcea653..0fd75d588c19 100644 --- a/packages/proxy/package.json +++ b/packages/proxy/package.json @@ -56,29 +56,29 @@ "dependencies": { "@discordjs/rest": "^1.0.0", "tslib": "^2.4.0", - "undici": "^5.8.2" + "undici": "^5.9.1" }, "devDependencies": { "@discordjs/docgen": "workspace:^", - "@favware/cliff-jumper": "^1.8.6", - "@microsoft/api-extractor": "^7.29.2", - "@types/node": "^16.11.48", + "@favware/cliff-jumper": "^1.8.7", + "@microsoft/api-extractor": "^7.29.3", + "@types/node": "^16.11.52", "@types/supertest": "^2.0.12", - "@typescript-eslint/eslint-plugin": "^5.33.0", - "@typescript-eslint/parser": "^5.33.0", - "@vitest/coverage-c8": "^0.22.0", + "@typescript-eslint/eslint-plugin": "^5.33.1", + "@typescript-eslint/parser": "^5.33.1", + "@vitest/coverage-c8": "^0.22.1", "downlevel-dts": "^0.10.0", "eslint": "^8.22.0", "eslint-config-marine": "^9.4.1", "eslint-config-prettier": "^8.5.0", - "eslint-import-resolver-typescript": "^3.4.1", + "eslint-import-resolver-typescript": "^3.4.2", "eslint-plugin-import": "^2.26.0", "prettier": "^2.7.1", - "rollup-plugin-typescript2": "0.32.1", + "rollup-plugin-typescript2": "^0.33.0", "supertest": "^6.2.4", "typescript": "^4.7.4", - "unbuild": "^0.8.8", - "vitest": "^0.22.0" + "unbuild": "^0.8.9", + "vitest": "^0.22.1" }, "engines": { "node": ">=16.9.0" diff --git a/packages/rest/package.json b/packages/rest/package.json index 5387dd4d2f00..a22bab1b0fd0 100644 --- a/packages/rest/package.json +++ b/packages/rest/package.json @@ -53,33 +53,33 @@ "homepage": "https://discord.js.org", "dependencies": { "@discordjs/collection": "workspace:^", - "@sapphire/async-queue": "^1.4.0", + "@sapphire/async-queue": "^1.5.0", "@sapphire/snowflake": "^3.2.2", - "discord-api-types": "^0.37.2", + "discord-api-types": "^0.37.3", "file-type": "^17.1.6", "tslib": "^2.4.0", - "undici": "^5.8.2" + "undici": "^5.9.1" }, "devDependencies": { "@discordjs/docgen": "workspace:^", - "@favware/cliff-jumper": "^1.8.6", - "@microsoft/api-extractor": "^7.29.2", - "@types/node": "^16.11.48", - "@typescript-eslint/eslint-plugin": "^5.33.0", - "@typescript-eslint/parser": "^5.33.0", - "@vitest/coverage-c8": "^0.22.0", + "@favware/cliff-jumper": "^1.8.7", + "@microsoft/api-extractor": "^7.29.3", + "@types/node": "^16.11.52", + "@typescript-eslint/eslint-plugin": "^5.33.1", + "@typescript-eslint/parser": "^5.33.1", + "@vitest/coverage-c8": "^0.22.1", "downlevel-dts": "^0.10.0", "eslint": "^8.22.0", "eslint-config-marine": "^9.4.1", "eslint-config-prettier": "^8.5.0", - "eslint-import-resolver-typescript": "^3.4.1", + "eslint-import-resolver-typescript": "^3.4.2", "eslint-plugin-import": "^2.26.0", "eslint-plugin-tsdoc": "^0.2.16", "prettier": "^2.7.1", - "rollup-plugin-typescript2": "0.32.1", + "rollup-plugin-typescript2": "^0.33.0", "typescript": "^4.7.4", - "unbuild": "^0.8.8", - "vitest": "^0.22.0" + "unbuild": "^0.8.9", + "vitest": "^0.22.1" }, "engines": { "node": ">=16.9.0" diff --git a/packages/scripts/package.json b/packages/scripts/package.json index 24e4a1931dd5..015788a244aa 100644 --- a/packages/scripts/package.json +++ b/packages/scripts/package.json @@ -48,20 +48,20 @@ "tslib": "^2.4.0" }, "devDependencies": { - "@types/node": "^16.11.48", - "@typescript-eslint/eslint-plugin": "^5.33.0", - "@typescript-eslint/parser": "^5.33.0", - "@vitest/coverage-c8": "^0.22.0", + "@types/node": "^16.11.52", + "@typescript-eslint/eslint-plugin": "^5.33.1", + "@typescript-eslint/parser": "^5.33.1", + "@vitest/coverage-c8": "^0.22.1", "eslint": "^8.22.0", "eslint-config-marine": "^9.4.1", "eslint-config-prettier": "^8.5.0", - "eslint-import-resolver-typescript": "^3.4.1", + "eslint-import-resolver-typescript": "^3.4.2", "eslint-plugin-import": "^2.26.0", "prettier": "^2.7.1", - "rollup-plugin-typescript2": "0.32.1", + "rollup-plugin-typescript2": "^0.33.0", "typescript": "^4.7.4", - "unbuild": "^0.8.8", - "vitest": "^0.22.0" + "unbuild": "^0.8.9", + "vitest": "^0.22.1" }, "engines": { "node": ">=16.9.0" diff --git a/packages/voice/package.json b/packages/voice/package.json index 0eca5705623d..60cf3c592232 100644 --- a/packages/voice/package.json +++ b/packages/voice/package.json @@ -53,7 +53,7 @@ "homepage": "https://discord.js.org", "dependencies": { "@types/ws": "^8.5.3", - "discord-api-types": "^0.37.2", + "discord-api-types": "^0.37.3", "prism-media": "^1.3.4", "tslib": "^2.4.0", "ws": "^8.8.1" @@ -63,27 +63,27 @@ "@babel/preset-env": "^7.18.10", "@babel/preset-typescript": "^7.18.6", "@discordjs/docgen": "workspace:^", - "@favware/cliff-jumper": "^1.8.6", - "@microsoft/api-extractor": "^7.29.2", - "@types/jest": "^28.1.6", - "@types/node": "^16.11.48", - "@typescript-eslint/eslint-plugin": "^5.33.0", - "@typescript-eslint/parser": "^5.33.0", + "@favware/cliff-jumper": "^1.8.7", + "@microsoft/api-extractor": "^7.29.3", + "@types/jest": "^28.1.7", + "@types/node": "^16.11.52", + "@typescript-eslint/eslint-plugin": "^5.33.1", + "@typescript-eslint/parser": "^5.33.1", "downlevel-dts": "^0.10.0", "eslint": "^8.22.0", "eslint-config-marine": "^9.4.1", "eslint-config-prettier": "^8.5.0", - "eslint-import-resolver-typescript": "^3.4.1", + "eslint-import-resolver-typescript": "^3.4.2", "eslint-plugin-import": "^2.26.0", "eslint-plugin-tsdoc": "^0.2.16", "jest": "^28.1.3", "jest-websocket-mock": "^2.4.0", "mock-socket": "^9.1.5", "prettier": "^2.7.1", - "rollup-plugin-typescript2": "0.32.1", + "rollup-plugin-typescript2": "^0.33.0", "tweetnacl": "^1.0.3", "typescript": "^4.7.4", - "unbuild": "^0.8.8" + "unbuild": "^0.8.9" }, "engines": { "node": ">=16.9.0" diff --git a/packages/website/package.json b/packages/website/package.json index b4161f6938a9..7085dfcd668f 100644 --- a/packages/website/package.json +++ b/packages/website/package.json @@ -50,12 +50,12 @@ "dependencies": { "@emotion/react": "^11.10.0", "@emotion/server": "^11.10.0", - "@mantine/core": "^5.1.6", - "@mantine/hooks": "^5.1.6", - "@mantine/next": "^5.1.6", - "@mantine/nprogress": "^5.1.6", - "@mantine/spotlight": "^5.1.6", - "@microsoft/api-extractor-model": "^7.23.0", + "@mantine/core": "^5.2.0", + "@mantine/hooks": "^5.2.0", + "@mantine/next": "^5.2.0", + "@mantine/nprogress": "^5.2.0", + "@mantine/spotlight": "^5.2.0", + "@microsoft/api-extractor-model": "^7.23.1", "@microsoft/tsdoc": "0.14.1", "@microsoft/tsdoc-config": "0.16.1", "@vscode/codicons": "^0.0.32", @@ -69,31 +69,30 @@ "devDependencies": { "@testing-library/react": "^13.3.0", "@testing-library/user-event": "^14.4.3", - "@types/node": "^16.11.48", + "@types/node": "^16.11.52", "@types/react-dom": "^18.0.6", "@types/react-syntax-highlighter": "^15.5.4", - "@typescript-eslint/eslint-plugin": "^5.33.0", - "@typescript-eslint/parser": "^5.33.0", - "@unocss/cli": "^0.45.6", - "@unocss/preset-web-fonts": "^0.45.6", - "@unocss/reset": "^0.45.6", + "@typescript-eslint/eslint-plugin": "^5.33.1", + "@typescript-eslint/parser": "^5.33.1", + "@unocss/cli": "^0.45.9", + "@unocss/preset-web-fonts": "^0.45.9", + "@unocss/reset": "^0.45.9", "@vitejs/plugin-react": "^2.0.1", - "@vitest/coverage-c8": "^0.22.0", + "@vitest/coverage-c8": "^0.22.1", "concurrently": "^7.3.0", - "cypress": "^10.4.0", "eslint": "^8.22.0", "eslint-config-marine": "^9.4.1", "eslint-config-prettier": "^8.5.0", - "eslint-import-resolver-typescript": "^3.4.1", + "eslint-import-resolver-typescript": "^3.4.2", "eslint-plugin-import": "^2.26.0", "eslint-plugin-react": "^7.30.1", "eslint-plugin-react-hooks": "^4.6.0", "happy-dom": "^6.0.4", "prettier": "^2.7.1", "typescript": "^4.7.4", - "unocss": "^0.45.6", - "vercel": "^28.0.1", - "vitest": "^0.22.0" + "unocss": "^0.45.9", + "vercel": "^28.1.0", + "vitest": "^0.22.1" }, "engines": { "node": ">=16.9.0" diff --git a/packages/ws/package.json b/packages/ws/package.json index 2b05956a4450..2383643b29de 100644 --- a/packages/ws/package.json +++ b/packages/ws/package.json @@ -54,34 +54,34 @@ "dependencies": { "@discordjs/collection": "workspace:^", "@discordjs/rest": "workspace:^", - "@sapphire/async-queue": "^1.4.0", + "@sapphire/async-queue": "^1.5.0", "@types/ws": "^8.5.3", "@vladfrangu/async_event_emitter": "^2.0.1", - "discord-api-types": "^0.37.2", + "discord-api-types": "^0.37.3", "tslib": "^2.4.0", "ws": "^8.8.1" }, "devDependencies": { "@discordjs/docgen": "workspace:^", - "@favware/cliff-jumper": "^1.8.6", - "@microsoft/api-extractor": "^7.29.2", - "@types/node": "^16.11.48", - "@typescript-eslint/eslint-plugin": "^5.33.0", - "@typescript-eslint/parser": "^5.33.0", - "@vitest/coverage-c8": "^0.22.0", + "@favware/cliff-jumper": "^1.8.7", + "@microsoft/api-extractor": "^7.29.3", + "@types/node": "^16.11.52", + "@typescript-eslint/eslint-plugin": "^5.33.1", + "@typescript-eslint/parser": "^5.33.1", + "@vitest/coverage-c8": "^0.22.1", "eslint": "^8.22.0", "eslint-config-marine": "^9.4.1", "eslint-config-prettier": "^8.5.0", - "eslint-import-resolver-typescript": "^3.4.1", + "eslint-import-resolver-typescript": "^3.4.2", "eslint-plugin-import": "^2.26.0", "eslint-plugin-tsdoc": "^0.2.16", "mock-socket": "^9.1.5", "prettier": "^2.7.1", - "rollup-plugin-typescript2": "0.32.1", + "rollup-plugin-typescript2": "^0.33.0", "typescript": "^4.7.4", - "unbuild": "^0.8.8", - "undici": "^5.8.2", - "vitest": "^0.22.0", + "unbuild": "^0.8.9", + "undici": "^5.9.1", + "vitest": "^0.22.1", "zlib-sync": "^0.1.7" }, "engines": { diff --git a/yarn.lock b/yarn.lock index 64ece8df15d7..c45664ba48fb 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1421,13 +1421,6 @@ __metadata: languageName: node linkType: hard -"@colors/colors@npm:1.5.0": - version: 1.5.0 - resolution: "@colors/colors@npm:1.5.0" - checksum: d64d5260bed1d5012ae3fc617d38d1afc0329fec05342f4e6b838f46998855ba56e0a73833f4a80fa8378c84810da254f76a8a19c39d038260dc06dc4e007425 - languageName: node - linkType: hard - "@commitlint/cli@npm:^17.0.3": version: 17.0.3 resolution: "@commitlint/cli@npm:17.0.3" @@ -1633,42 +1626,6 @@ __metadata: languageName: node linkType: hard -"@cypress/request@npm:^2.88.10": - version: 2.88.10 - resolution: "@cypress/request@npm:2.88.10" - dependencies: - aws-sign2: ~0.7.0 - aws4: ^1.8.0 - caseless: ~0.12.0 - combined-stream: ~1.0.6 - extend: ~3.0.2 - forever-agent: ~0.6.1 - form-data: ~2.3.2 - http-signature: ~1.3.6 - is-typedarray: ~1.0.0 - isstream: ~0.1.2 - json-stringify-safe: ~5.0.1 - mime-types: ~2.1.19 - performance-now: ^2.1.0 - qs: ~6.5.2 - safe-buffer: ^5.1.2 - tough-cookie: ~2.5.0 - tunnel-agent: ^0.6.0 - uuid: ^8.3.2 - checksum: 69c3e3b332e9be4866a900f6bcca5d274d8cea6c99707fbcce061de8dbab11c9b1e39f4c017f6e83e6e682717781d4f6106fd6b7cf9546580fcfac353b6676cf - languageName: node - linkType: hard - -"@cypress/xvfb@npm:^1.2.4": - version: 1.2.4 - resolution: "@cypress/xvfb@npm:1.2.4" - dependencies: - debug: ^3.1.0 - lodash.once: ^4.1.1 - checksum: 7bdcdaeb1bb692ec9d9bf8ec52538aa0bead6764753f4a067a171a511807a43fab016f7285a56bef6a606c2467ff3f1365e1ad2d2d583b81beed849ee1573fd1 - languageName: node - linkType: hard - "@definitelytyped/header-parser@npm:latest": version: 0.0.122 resolution: "@definitelytyped/header-parser@npm:0.0.122" @@ -1708,21 +1665,21 @@ __metadata: resolution: "@discordjs/actions@workspace:packages/actions" dependencies: "@actions/core": ^1.9.1 - "@types/node": ^16.11.48 - "@typescript-eslint/eslint-plugin": ^5.33.0 - "@typescript-eslint/parser": ^5.33.0 - "@vitest/coverage-c8": ^0.22.0 + "@types/node": ^16.11.52 + "@typescript-eslint/eslint-plugin": ^5.33.1 + "@typescript-eslint/parser": ^5.33.1 + "@vitest/coverage-c8": ^0.22.1 eslint: ^8.22.0 eslint-config-marine: ^9.4.1 eslint-config-prettier: ^8.5.0 - eslint-import-resolver-typescript: ^3.4.1 + eslint-import-resolver-typescript: ^3.4.2 eslint-plugin-import: ^2.26.0 prettier: ^2.7.1 - rollup-plugin-typescript2: 0.32.1 + rollup-plugin-typescript2: ^0.33.0 tslib: ^2.4.0 typescript: ^4.7.4 - unbuild: ^0.8.8 - vitest: ^0.22.0 + unbuild: ^0.8.9 + vitest: ^0.22.1 languageName: unknown linkType: soft @@ -1731,29 +1688,29 @@ __metadata: resolution: "@discordjs/builders@workspace:packages/builders" dependencies: "@discordjs/docgen": "workspace:^" - "@favware/cliff-jumper": ^1.8.6 - "@microsoft/api-extractor": ^7.29.2 + "@favware/cliff-jumper": ^1.8.7 + "@microsoft/api-extractor": ^7.29.3 "@sapphire/shapeshift": ^3.5.1 - "@types/node": ^16.11.48 - "@typescript-eslint/eslint-plugin": ^5.33.0 - "@typescript-eslint/parser": ^5.33.0 - "@vitest/coverage-c8": ^0.22.0 - discord-api-types: ^0.37.2 + "@types/node": ^16.11.52 + "@typescript-eslint/eslint-plugin": ^5.33.1 + "@typescript-eslint/parser": ^5.33.1 + "@vitest/coverage-c8": ^0.22.1 + discord-api-types: ^0.37.3 downlevel-dts: ^0.10.0 eslint: ^8.22.0 eslint-config-marine: ^9.4.1 eslint-config-prettier: ^8.5.0 - eslint-import-resolver-typescript: ^3.4.1 + eslint-import-resolver-typescript: ^3.4.2 eslint-plugin-import: ^2.26.0 eslint-plugin-tsdoc: ^0.2.16 fast-deep-equal: ^3.1.3 prettier: ^2.7.1 - rollup-plugin-typescript2: 0.32.1 + rollup-plugin-typescript2: ^0.33.0 ts-mixer: ^6.0.1 tslib: ^2.4.0 typescript: ^4.7.4 - unbuild: ^0.8.8 - vitest: ^0.22.0 + unbuild: ^0.8.9 + vitest: ^0.22.1 languageName: unknown linkType: soft @@ -1762,24 +1719,24 @@ __metadata: resolution: "@discordjs/collection@workspace:packages/collection" dependencies: "@discordjs/docgen": "workspace:^" - "@favware/cliff-jumper": ^1.8.6 - "@microsoft/api-extractor": ^7.29.2 - "@types/node": ^16.11.48 - "@typescript-eslint/eslint-plugin": ^5.33.0 - "@typescript-eslint/parser": ^5.33.0 - "@vitest/coverage-c8": ^0.22.0 + "@favware/cliff-jumper": ^1.8.7 + "@microsoft/api-extractor": ^7.29.3 + "@types/node": ^16.11.52 + "@typescript-eslint/eslint-plugin": ^5.33.1 + "@typescript-eslint/parser": ^5.33.1 + "@vitest/coverage-c8": ^0.22.1 downlevel-dts: ^0.10.0 eslint: ^8.22.0 eslint-config-marine: ^9.4.1 eslint-config-prettier: ^8.5.0 - eslint-import-resolver-typescript: ^3.4.1 + eslint-import-resolver-typescript: ^3.4.2 eslint-plugin-import: ^2.26.0 eslint-plugin-tsdoc: ^0.2.16 prettier: ^2.7.1 - rollup-plugin-typescript2: 0.32.1 + rollup-plugin-typescript2: ^0.33.0 typescript: ^4.7.4 - unbuild: ^0.8.8 - vitest: ^0.22.0 + unbuild: ^0.8.9 + vitest: ^0.22.1 languageName: unknown linkType: soft @@ -1789,7 +1746,7 @@ __metadata: dependencies: "@commitlint/cli": ^17.0.3 "@commitlint/config-angular": ^17.0.3 - "@favware/cliff-jumper": ^1.8.6 + "@favware/cliff-jumper": ^1.8.7 "@favware/npm-deprecate": ^1.0.5 "@types/is-ci": ^3.0.0 conventional-changelog-cli: ^2.2.2 @@ -1806,24 +1763,24 @@ __metadata: version: 0.0.0-use.local resolution: "@discordjs/docgen@workspace:packages/docgen" dependencies: - "@favware/cliff-jumper": ^1.8.6 + "@favware/cliff-jumper": ^1.8.7 "@types/jsdoc-to-markdown": ^7.0.3 - "@types/node": ^16.11.48 - "@typescript-eslint/eslint-plugin": ^5.33.0 - "@typescript-eslint/parser": ^5.33.0 + "@types/node": ^16.11.52 + "@typescript-eslint/eslint-plugin": ^5.33.1 + "@typescript-eslint/parser": ^5.33.1 commander: ^9.4.0 eslint: ^8.22.0 eslint-config-marine: ^9.4.1 eslint-config-prettier: ^8.5.0 - eslint-import-resolver-typescript: ^3.4.1 + eslint-import-resolver-typescript: ^3.4.2 eslint-plugin-import: ^2.26.0 jsdoc-to-markdown: ^7.1.1 prettier: ^2.7.1 - rollup-plugin-typescript2: 0.32.1 + rollup-plugin-typescript2: ^0.33.0 tslib: ^2.4.0 typedoc: ^0.23.10 typescript: ^4.7.4 - unbuild: ^0.8.8 + unbuild: ^0.8.9 bin: docgen: ./dist/cli.cjs languageName: unknown @@ -1835,19 +1792,19 @@ __metadata: dependencies: "@discordjs/proxy": ^1.0.0 "@discordjs/rest": ^1.0.0 - "@types/node": ^16.11.48 - "@typescript-eslint/eslint-plugin": ^5.33.0 - "@typescript-eslint/parser": ^5.33.0 + "@types/node": ^16.11.52 + "@typescript-eslint/eslint-plugin": ^5.33.1 + "@typescript-eslint/parser": ^5.33.1 eslint: ^8.22.0 eslint-config-marine: ^9.4.1 eslint-config-prettier: ^8.5.0 - eslint-import-resolver-typescript: ^3.4.1 + eslint-import-resolver-typescript: ^3.4.2 eslint-plugin-import: ^2.26.0 prettier: ^2.7.1 - rollup-plugin-typescript2: 0.32.1 + rollup-plugin-typescript2: ^0.33.0 tslib: ^2.4.0 typescript: ^4.7.4 - unbuild: ^0.8.8 + unbuild: ^0.8.9 languageName: unknown linkType: soft @@ -1857,27 +1814,27 @@ __metadata: dependencies: "@discordjs/docgen": "workspace:^" "@discordjs/rest": ^1.0.0 - "@favware/cliff-jumper": ^1.8.6 - "@microsoft/api-extractor": ^7.29.2 - "@types/node": ^16.11.48 + "@favware/cliff-jumper": ^1.8.7 + "@microsoft/api-extractor": ^7.29.3 + "@types/node": ^16.11.52 "@types/supertest": ^2.0.12 - "@typescript-eslint/eslint-plugin": ^5.33.0 - "@typescript-eslint/parser": ^5.33.0 - "@vitest/coverage-c8": ^0.22.0 + "@typescript-eslint/eslint-plugin": ^5.33.1 + "@typescript-eslint/parser": ^5.33.1 + "@vitest/coverage-c8": ^0.22.1 downlevel-dts: ^0.10.0 eslint: ^8.22.0 eslint-config-marine: ^9.4.1 eslint-config-prettier: ^8.5.0 - eslint-import-resolver-typescript: ^3.4.1 + eslint-import-resolver-typescript: ^3.4.2 eslint-plugin-import: ^2.26.0 prettier: ^2.7.1 - rollup-plugin-typescript2: 0.32.1 + rollup-plugin-typescript2: ^0.33.0 supertest: ^6.2.4 tslib: ^2.4.0 typescript: ^4.7.4 - unbuild: ^0.8.8 - undici: ^5.8.2 - vitest: ^0.22.0 + unbuild: ^0.8.9 + undici: ^5.9.1 + vitest: ^0.22.1 languageName: unknown linkType: soft @@ -1887,30 +1844,30 @@ __metadata: dependencies: "@discordjs/collection": "workspace:^" "@discordjs/docgen": "workspace:^" - "@favware/cliff-jumper": ^1.8.6 - "@microsoft/api-extractor": ^7.29.2 - "@sapphire/async-queue": ^1.4.0 + "@favware/cliff-jumper": ^1.8.7 + "@microsoft/api-extractor": ^7.29.3 + "@sapphire/async-queue": ^1.5.0 "@sapphire/snowflake": ^3.2.2 - "@types/node": ^16.11.48 - "@typescript-eslint/eslint-plugin": ^5.33.0 - "@typescript-eslint/parser": ^5.33.0 - "@vitest/coverage-c8": ^0.22.0 - discord-api-types: ^0.37.2 + "@types/node": ^16.11.52 + "@typescript-eslint/eslint-plugin": ^5.33.1 + "@typescript-eslint/parser": ^5.33.1 + "@vitest/coverage-c8": ^0.22.1 + discord-api-types: ^0.37.3 downlevel-dts: ^0.10.0 eslint: ^8.22.0 eslint-config-marine: ^9.4.1 eslint-config-prettier: ^8.5.0 - eslint-import-resolver-typescript: ^3.4.1 + eslint-import-resolver-typescript: ^3.4.2 eslint-plugin-import: ^2.26.0 eslint-plugin-tsdoc: ^0.2.16 file-type: ^17.1.6 prettier: ^2.7.1 - rollup-plugin-typescript2: 0.32.1 + rollup-plugin-typescript2: ^0.33.0 tslib: ^2.4.0 typescript: ^4.7.4 - unbuild: ^0.8.8 - undici: ^5.8.2 - vitest: ^0.22.0 + unbuild: ^0.8.9 + undici: ^5.9.1 + vitest: ^0.22.1 languageName: unknown linkType: soft @@ -1918,22 +1875,22 @@ __metadata: version: 0.0.0-use.local resolution: "@discordjs/scripts@workspace:packages/scripts" dependencies: - "@types/node": ^16.11.48 - "@typescript-eslint/eslint-plugin": ^5.33.0 - "@typescript-eslint/parser": ^5.33.0 - "@vitest/coverage-c8": ^0.22.0 + "@types/node": ^16.11.52 + "@typescript-eslint/eslint-plugin": ^5.33.1 + "@typescript-eslint/parser": ^5.33.1 + "@vitest/coverage-c8": ^0.22.1 commander: ^9.4.0 eslint: ^8.22.0 eslint-config-marine: ^9.4.1 eslint-config-prettier: ^8.5.0 - eslint-import-resolver-typescript: ^3.4.1 + eslint-import-resolver-typescript: ^3.4.2 eslint-plugin-import: ^2.26.0 prettier: ^2.7.1 - rollup-plugin-typescript2: 0.32.1 + rollup-plugin-typescript2: ^0.33.0 tslib: ^2.4.0 typescript: ^4.7.4 - unbuild: ^0.8.8 - vitest: ^0.22.0 + unbuild: ^0.8.9 + vitest: ^0.22.1 languageName: unknown linkType: soft @@ -1945,19 +1902,19 @@ __metadata: "@babel/preset-env": ^7.18.10 "@babel/preset-typescript": ^7.18.6 "@discordjs/docgen": "workspace:^" - "@favware/cliff-jumper": ^1.8.6 - "@microsoft/api-extractor": ^7.29.2 - "@types/jest": ^28.1.6 - "@types/node": ^16.11.48 + "@favware/cliff-jumper": ^1.8.7 + "@microsoft/api-extractor": ^7.29.3 + "@types/jest": ^28.1.7 + "@types/node": ^16.11.52 "@types/ws": ^8.5.3 - "@typescript-eslint/eslint-plugin": ^5.33.0 - "@typescript-eslint/parser": ^5.33.0 - discord-api-types: ^0.37.2 + "@typescript-eslint/eslint-plugin": ^5.33.1 + "@typescript-eslint/parser": ^5.33.1 + discord-api-types: ^0.37.3 downlevel-dts: ^0.10.0 eslint: ^8.22.0 eslint-config-marine: ^9.4.1 eslint-config-prettier: ^8.5.0 - eslint-import-resolver-typescript: ^3.4.1 + eslint-import-resolver-typescript: ^3.4.2 eslint-plugin-import: ^2.26.0 eslint-plugin-tsdoc: ^0.2.16 jest: ^28.1.3 @@ -1965,11 +1922,11 @@ __metadata: mock-socket: ^9.1.5 prettier: ^2.7.1 prism-media: ^1.3.4 - rollup-plugin-typescript2: 0.32.1 + rollup-plugin-typescript2: ^0.33.0 tslib: ^2.4.0 tweetnacl: ^1.0.3 typescript: ^4.7.4 - unbuild: ^0.8.8 + unbuild: ^0.8.9 ws: ^8.8.1 languageName: unknown linkType: soft @@ -1980,33 +1937,32 @@ __metadata: dependencies: "@emotion/react": ^11.10.0 "@emotion/server": ^11.10.0 - "@mantine/core": ^5.1.6 - "@mantine/hooks": ^5.1.6 - "@mantine/next": ^5.1.6 - "@mantine/nprogress": ^5.1.6 - "@mantine/spotlight": ^5.1.6 - "@microsoft/api-extractor-model": ^7.23.0 + "@mantine/core": ^5.2.0 + "@mantine/hooks": ^5.2.0 + "@mantine/next": ^5.2.0 + "@mantine/nprogress": ^5.2.0 + "@mantine/spotlight": ^5.2.0 + "@microsoft/api-extractor-model": ^7.23.1 "@microsoft/tsdoc": 0.14.1 "@microsoft/tsdoc-config": 0.16.1 "@testing-library/react": ^13.3.0 "@testing-library/user-event": ^14.4.3 - "@types/node": ^16.11.48 + "@types/node": ^16.11.52 "@types/react-dom": ^18.0.6 "@types/react-syntax-highlighter": ^15.5.4 - "@typescript-eslint/eslint-plugin": ^5.33.0 - "@typescript-eslint/parser": ^5.33.0 - "@unocss/cli": ^0.45.6 - "@unocss/preset-web-fonts": ^0.45.6 - "@unocss/reset": ^0.45.6 + "@typescript-eslint/eslint-plugin": ^5.33.1 + "@typescript-eslint/parser": ^5.33.1 + "@unocss/cli": ^0.45.9 + "@unocss/preset-web-fonts": ^0.45.9 + "@unocss/reset": ^0.45.9 "@vitejs/plugin-react": ^2.0.1 - "@vitest/coverage-c8": ^0.22.0 + "@vitest/coverage-c8": ^0.22.1 "@vscode/codicons": ^0.0.32 concurrently: ^7.3.0 - cypress: ^10.4.0 eslint: ^8.22.0 eslint-config-marine: ^9.4.1 eslint-config-prettier: ^8.5.0 - eslint-import-resolver-typescript: ^3.4.1 + eslint-import-resolver-typescript: ^3.4.2 eslint-plugin-import: ^2.26.0 eslint-plugin-react: ^7.30.1 eslint-plugin-react-hooks: ^4.6.0 @@ -2019,9 +1975,9 @@ __metadata: react-syntax-highlighter: ^15.5.0 sharp: ^0.30.7 typescript: ^4.7.4 - unocss: ^0.45.6 - vercel: ^28.0.1 - vitest: ^0.22.0 + unocss: ^0.45.9 + vercel: ^28.1.0 + vitest: ^0.22.1 languageName: unknown linkType: soft @@ -2032,30 +1988,30 @@ __metadata: "@discordjs/collection": "workspace:^" "@discordjs/docgen": "workspace:^" "@discordjs/rest": "workspace:^" - "@favware/cliff-jumper": ^1.8.6 - "@microsoft/api-extractor": ^7.29.2 - "@sapphire/async-queue": ^1.4.0 - "@types/node": ^16.11.48 + "@favware/cliff-jumper": ^1.8.7 + "@microsoft/api-extractor": ^7.29.3 + "@sapphire/async-queue": ^1.5.0 + "@types/node": ^16.11.52 "@types/ws": ^8.5.3 - "@typescript-eslint/eslint-plugin": ^5.33.0 - "@typescript-eslint/parser": ^5.33.0 - "@vitest/coverage-c8": ^0.22.0 + "@typescript-eslint/eslint-plugin": ^5.33.1 + "@typescript-eslint/parser": ^5.33.1 + "@vitest/coverage-c8": ^0.22.1 "@vladfrangu/async_event_emitter": ^2.0.1 - discord-api-types: ^0.37.2 + discord-api-types: ^0.37.3 eslint: ^8.22.0 eslint-config-marine: ^9.4.1 eslint-config-prettier: ^8.5.0 - eslint-import-resolver-typescript: ^3.4.1 + eslint-import-resolver-typescript: ^3.4.2 eslint-plugin-import: ^2.26.0 eslint-plugin-tsdoc: ^0.2.16 mock-socket: ^9.1.5 prettier: ^2.7.1 - rollup-plugin-typescript2: 0.32.1 + rollup-plugin-typescript2: ^0.33.0 tslib: ^2.4.0 typescript: ^4.7.4 - unbuild: ^0.8.8 - undici: ^5.8.2 - vitest: ^0.22.0 + unbuild: ^0.8.9 + undici: ^5.9.1 + vitest: ^0.22.1 ws: ^8.8.1 zlib-sync: ^0.1.7 languageName: unknown @@ -2230,9 +2186,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-loong64@npm:0.15.3": - version: 0.15.3 - resolution: "@esbuild/linux-loong64@npm:0.15.3" +"@esbuild/linux-loong64@npm:0.15.5": + version: 0.15.5 + resolution: "@esbuild/linux-loong64@npm:0.15.5" conditions: os=linux & cpu=loong64 languageName: node linkType: hard @@ -2254,12 +2210,12 @@ __metadata: languageName: node linkType: hard -"@favware/cliff-jumper@npm:^1.8.6": - version: 1.8.6 - resolution: "@favware/cliff-jumper@npm:1.8.6" +"@favware/cliff-jumper@npm:^1.8.7": + version: 1.8.7 + resolution: "@favware/cliff-jumper@npm:1.8.7" dependencies: - "@sapphire/result": ^2.1.1 - "@sapphire/utilities": ^3.8.0 + "@sapphire/result": ^2.4.0 + "@sapphire/utilities": ^3.9.2 colorette: ^2.0.19 commander: ^9.4.0 conventional-changelog-angular: ^5.0.13 @@ -2270,7 +2226,7 @@ __metadata: bin: cj: ./dist/cli.js cliff-jumper: ./dist/cli.js - checksum: 0c4f55d3177f395d09709faa26845aa5b7fb4250e278e5b9a84994ed49f6b1cf14f57f306db596b68af8016594d725bdb6cb091f4f0372fa2fce0fd8e0e93b59 + checksum: 088fe16d5bcc974a3a854042887ca3b4585d4afd62c687404fa8c305a7ebef5526069477734d01200cc8ff353c4575bb5a7e887be48e60de52f9d6771c43b5d4 languageName: node linkType: hard @@ -2709,92 +2665,92 @@ __metadata: languageName: node linkType: hard -"@mantine/core@npm:^5.1.6": - version: 5.1.6 - resolution: "@mantine/core@npm:5.1.6" +"@mantine/core@npm:^5.2.0": + version: 5.2.0 + resolution: "@mantine/core@npm:5.2.0" dependencies: "@floating-ui/react-dom-interactions": 0.6.6 - "@mantine/styles": 5.1.6 - "@mantine/utils": 5.1.6 + "@mantine/styles": 5.2.0 + "@mantine/utils": 5.2.0 "@radix-ui/react-scroll-area": 1.0.0 react-textarea-autosize: 8.3.4 peerDependencies: - "@mantine/hooks": 5.1.6 + "@mantine/hooks": 5.2.0 react: ">=16.8.0" react-dom: ">=16.8.0" - checksum: d87b4ac1c994d31decf24f2367266fe20bc32270d6897a7ebbee047882dcbec37648941873ec2d189c2ac2d606bfc33ba293f488f88dd00f4e6553ae0db8c0f6 + checksum: 501845af4c1b6961a63de417d780685e412f685887a1b5a371100b82f3b75d0131159aae5e26db29fade9916ae7452634c146458a486c277a2f2970de488567e languageName: node linkType: hard -"@mantine/hooks@npm:^5.1.6": - version: 5.1.6 - resolution: "@mantine/hooks@npm:5.1.6" +"@mantine/hooks@npm:^5.2.0": + version: 5.2.0 + resolution: "@mantine/hooks@npm:5.2.0" peerDependencies: react: ">=16.8.0" - checksum: 7ddf12844e031222d5fee46fb50ea72e065645dc8a77d03866101782dab629424ffbc35f3d59c69cf9e95964ed22954af92f52b06c881c8958f3991270f467b8 + checksum: 19a623c88da34818c72f7d0f2949ea91f2310d063a3cf6e96b6811149a7c19d6ecc5f52a61760ac8d484cff1ccfa19d567503e6772e50614f6fee9c097cce555 languageName: node linkType: hard -"@mantine/next@npm:^5.1.6": - version: 5.1.6 - resolution: "@mantine/next@npm:5.1.6" +"@mantine/next@npm:^5.2.0": + version: 5.2.0 + resolution: "@mantine/next@npm:5.2.0" dependencies: - "@mantine/ssr": 5.1.6 - "@mantine/styles": 5.1.6 + "@mantine/ssr": 5.2.0 + "@mantine/styles": 5.2.0 peerDependencies: next: "*" react: ">=16.8.0" react-dom: ">=16.8.0" - checksum: 02b0fceb2bd16b83d420031fc1ac75d1dd6ff0ab574beabca6c13033de2376db9cfaea6703829611c660dd441de8c990f708d3873e97b93b095f0479d9670db0 + checksum: cd031a37405a864a05fee001143b867a73c6ac8a069e3a15a5d670e3f42d7e68474e7a148101e93b04619327edc95e354171e724ae7637d330650d969c05b6a4 languageName: node linkType: hard -"@mantine/nprogress@npm:^5.1.6": - version: 5.1.6 - resolution: "@mantine/nprogress@npm:5.1.6" +"@mantine/nprogress@npm:^5.2.0": + version: 5.2.0 + resolution: "@mantine/nprogress@npm:5.2.0" dependencies: - "@mantine/utils": 5.1.6 + "@mantine/utils": 5.2.0 peerDependencies: - "@mantine/core": 5.1.6 - "@mantine/hooks": 5.1.6 + "@mantine/core": 5.2.0 + "@mantine/hooks": 5.2.0 react: ">=16.8.0" react-dom: ">=16.8.0" - checksum: 7abee17089ad483684eef1df5f39b2b41e38d5733cfaf950993d57be00ceeae2ae16fa354a6881a0ede8748056637cdf218940f78b75230459a8d916001b1b82 + checksum: a33d044054385860a3773b4e6b8b76dfb7aff50b6999d64fbe785d4e490afd093439d2348a7cb6aee1172b45c763171b4b82cbbb5a7f184d521b65a3cba60031 languageName: node linkType: hard -"@mantine/spotlight@npm:^5.1.6": - version: 5.1.6 - resolution: "@mantine/spotlight@npm:5.1.6" +"@mantine/spotlight@npm:^5.2.0": + version: 5.2.0 + resolution: "@mantine/spotlight@npm:5.2.0" dependencies: - "@mantine/utils": 5.1.6 + "@mantine/utils": 5.2.0 peerDependencies: - "@mantine/core": 5.1.6 - "@mantine/hooks": 5.1.6 + "@mantine/core": 5.2.0 + "@mantine/hooks": 5.2.0 react: ">=16.8.0" react-dom: ">=16.8.0" - checksum: db9116382bc28b1ce9d7e201643f1a130f7614d9fa3851f8962110729dcf1b606a2307f59627b1105ba326335d89ee54423f1ea5a6e632cf4e0324abd84ba0b2 + checksum: cc3cb29909103b00fcb52311bb95e91d6ad7b6a06cfc818e49de210aede47260b8beb444d69a6095b316350e2e6a3786ab431b8f311aa167056d884ceeb4b8f7 languageName: node linkType: hard -"@mantine/ssr@npm:5.1.6": - version: 5.1.6 - resolution: "@mantine/ssr@npm:5.1.6" +"@mantine/ssr@npm:5.2.0": + version: 5.2.0 + resolution: "@mantine/ssr@npm:5.2.0" dependencies: - "@mantine/styles": 5.1.6 + "@mantine/styles": 5.2.0 html-react-parser: 1.4.12 peerDependencies: "@emotion/react": ">=11.9.0" "@emotion/server": ">=11.4.0" react: ">=16.8.0" react-dom: ">=16.8.0" - checksum: f7c7b74dd89fa042d9d136fedc4679a8988f1a3bd8b9107a670ff6dc8fe1345b7a435d5e23c9c0b61cd6f827e41c9bb09e4c1fed4acb51f71d0980a095e53942 + checksum: 36dc3e49bf61b4861361f755f06695ed0519e0111cc3d8ac5a08119fa683d3684eb556eb88059c86b90a97fb5b9057d3b133c82d98c17c939378f65bcb61f068 languageName: node linkType: hard -"@mantine/styles@npm:5.1.6": - version: 5.1.6 - resolution: "@mantine/styles@npm:5.1.6" +"@mantine/styles@npm:5.2.0": + version: 5.2.0 + resolution: "@mantine/styles@npm:5.2.0" dependencies: clsx: 1.1.1 csstype: 3.0.9 @@ -2802,16 +2758,16 @@ __metadata: "@emotion/react": ">=11.9.0" react: ">=16.8.0" react-dom: ">=16.8.0" - checksum: b538fb69666135a5c2f0490bd9157474cfffdfe69dd12d1d0961e5559909394d3aac73da0e40f6882171d39d6cfb6243c18e2845afe1623336534a7bff64fbcc + checksum: 1f373b90c00831b745192f5aeb4cc715bff0c1d40be20fec3c609cc2f5369891c02dea1b1409b1554af65c745df7ed4c40cfd1bc2d88e5f3334830d3262eb503 languageName: node linkType: hard -"@mantine/utils@npm:5.1.6": - version: 5.1.6 - resolution: "@mantine/utils@npm:5.1.6" +"@mantine/utils@npm:5.2.0": + version: 5.2.0 + resolution: "@mantine/utils@npm:5.2.0" peerDependencies: react: ">=16.8.0" - checksum: 7c62f013a5d32b03819b6a95ee6b076158e972f2d65d7debe716b81c5829580c49057d4ec16cf03cecd76171dc47771cfc9f4a7ea2eadae83a9f2f2079657e2a + checksum: 66466f02b47e678da2ac848e5d63e12d123513fc31721ba1cc9a502c6ea8d0bea46c4045caba3ce7d08b7a8650ff26444291eca9d8f649ef91ec8dd4422caddf languageName: node linkType: hard @@ -2834,25 +2790,25 @@ __metadata: languageName: node linkType: hard -"@microsoft/api-extractor-model@npm:7.23.0, @microsoft/api-extractor-model@npm:^7.23.0": - version: 7.23.0 - resolution: "@microsoft/api-extractor-model@npm:7.23.0" +"@microsoft/api-extractor-model@npm:7.23.1, @microsoft/api-extractor-model@npm:^7.23.1": + version: 7.23.1 + resolution: "@microsoft/api-extractor-model@npm:7.23.1" dependencies: "@microsoft/tsdoc": 0.14.1 "@microsoft/tsdoc-config": ~0.16.1 - "@rushstack/node-core-library": 3.50.1 - checksum: 9c16aebb7fd508bbf6ee413b9469640212ea32f5a4b11196047d702013b18b74a72946b5cf6c7f697d66ba8c185608caa922a66a9f77a26616328f73907a5a79 + "@rushstack/node-core-library": 3.50.2 + checksum: 8295761acf053dc792efaa51d7a46d60e941a713ab9953e4a1d452d3c63e60b922f8f8f5c16632144e20c161f5b010a46523e3d937fd204baa2719b8f57c0748 languageName: node linkType: hard -"@microsoft/api-extractor@npm:^7.29.2": - version: 7.29.2 - resolution: "@microsoft/api-extractor@npm:7.29.2" +"@microsoft/api-extractor@npm:^7.29.3": + version: 7.29.3 + resolution: "@microsoft/api-extractor@npm:7.29.3" dependencies: - "@microsoft/api-extractor-model": 7.23.0 + "@microsoft/api-extractor-model": 7.23.1 "@microsoft/tsdoc": 0.14.1 "@microsoft/tsdoc-config": ~0.16.1 - "@rushstack/node-core-library": 3.50.1 + "@rushstack/node-core-library": 3.50.2 "@rushstack/rig-package": 0.3.14 "@rushstack/ts-command-line": 4.12.2 colors: ~1.2.1 @@ -2863,7 +2819,7 @@ __metadata: typescript: ~4.7.4 bin: api-extractor: bin/api-extractor - checksum: caef6be19454c513ead3da38bf756936d84abf7109beeb80d82e5a42465a5a1a947aa91c69294a106aba5769b6eedb0edc47f1e79ca0fd2a4359dc0509142219 + checksum: 237e075bf1b68324e710d71d4e58f0df892777ff4d769d6cf065c97f87be0fdc274210979ab576f3f81f59a3b081d22deeae7cd7d405d3d755885dcfd19f36fa languageName: node linkType: hard @@ -3310,9 +3266,9 @@ __metadata: languageName: node linkType: hard -"@rushstack/node-core-library@npm:3.50.1": - version: 3.50.1 - resolution: "@rushstack/node-core-library@npm:3.50.1" +"@rushstack/node-core-library@npm:3.50.2": + version: 3.50.2 + resolution: "@rushstack/node-core-library@npm:3.50.2" dependencies: "@types/node": 12.20.24 colors: ~1.2.1 @@ -3323,7 +3279,7 @@ __metadata: semver: ~7.3.0 timsort: ~0.3.0 z-schema: ~5.0.2 - checksum: 2ce07e8462fa332ac270335e1cdf9a4dcd0b0df438ad4d6dd33b1fd82c864c9d74091a51ac04bc4871c645782cc8d70bbb6ccd79a294c19355f6f3aa094eb299 + checksum: 7c48c6533181c7514c688f3c7677de81d69258a7e0ff938c8cb53390722b68446ccf68e1860a4785f192da771b1c6d4684febe602b1e2548309ca5f51f2fe65e languageName: node linkType: hard @@ -3349,10 +3305,10 @@ __metadata: languageName: node linkType: hard -"@sapphire/async-queue@npm:^1.4.0": - version: 1.4.0 - resolution: "@sapphire/async-queue@npm:1.4.0" - checksum: 1361898e82aceee4189dd4bd3d2516f560ed15c3fb048a51e9df26f3e506c5935ef87160e4fdbd15facb8c2f2417cd896ee92c14f784aaf4d3ae96d0b21fbddf +"@sapphire/async-queue@npm:^1.5.0": + version: 1.5.0 + resolution: "@sapphire/async-queue@npm:1.5.0" + checksum: 983dbd1fd1b1798496e5edb6a0db7e4d90015160e1028f20475eab0a92625513f1e8d938bc0305811a9cec461c94e01b1e4191615ff03ba49356f568f3255250 languageName: node linkType: hard @@ -3365,10 +3321,10 @@ __metadata: languageName: node linkType: hard -"@sapphire/result@npm:^2.1.1": - version: 2.3.3 - resolution: "@sapphire/result@npm:2.3.3" - checksum: 9691638cf9b8da28f3cfde49b42ec90ae2d0215ef526d6e44ae7363a7f4ea0df6ebd1eb1fe990da4353a836793f8bae4d2868397a8ec9a6cc42b81e99c31bda7 +"@sapphire/result@npm:^2.4.0": + version: 2.4.0 + resolution: "@sapphire/result@npm:2.4.0" + checksum: ac4fb15e1375b7d39a60f10acc8afdb710831b8677ec2fed8bb9dc625d8716fbda607ea63c678a4f3b1c7c3c47db25655903401cb5073c3037ebbae56ca9cabc languageName: node linkType: hard @@ -3396,6 +3352,13 @@ __metadata: languageName: node linkType: hard +"@sapphire/utilities@npm:^3.9.2": + version: 3.9.2 + resolution: "@sapphire/utilities@npm:3.9.2" + checksum: eeef33b03b802e931ada752b8c335cc8bde4017f8029b577b0247e3f3d2b57bf5f1936b2c8c29aef5e2c6975d9b162363e4c5c434c4fead0bba74253d067b4d9 + languageName: node + linkType: hard + "@sinclair/typebox@npm:^0.24.1": version: 0.24.28 resolution: "@sinclair/typebox@npm:0.24.28" @@ -3721,13 +3684,13 @@ __metadata: languageName: node linkType: hard -"@types/jest@npm:^28.1.6": - version: 28.1.6 - resolution: "@types/jest@npm:28.1.6" +"@types/jest@npm:^28.1.7": + version: 28.1.7 + resolution: "@types/jest@npm:28.1.7" dependencies: - jest-matcher-utils: ^28.0.0 + expect: ^28.0.0 pretty-format: ^28.0.0 - checksum: f2ba5fbefc8f44d1c16ee19d8d2811bca75754a2846e222287f2788d96062801c568215e6b81eb532a48e8cb2a7282729da1d4f6fb496831da8269c5abaad4c5 + checksum: 17c9bf9667cd4f062eba5aa9eaea248927bf6479da1cc009e0b7d26d501f460f068dd23eddb67d2602264e915a30b63ae7c9cbb516723ffd18589f6f9d267d43 languageName: node linkType: hard @@ -3813,17 +3776,17 @@ __metadata: languageName: node linkType: hard -"@types/node@npm:^14.14.31, @types/node@npm:^14.14.35": +"@types/node@npm:^14.14.35": version: 14.18.23 resolution: "@types/node@npm:14.18.23" checksum: 119d5ab18426694ade0d3feefbdb42afc5a47b9144e523293f1554f9d34b41c7f21eafc9d0f1295db5700d134aa74e7fd37556e9438f6d64dbeddf791527e1e4 languageName: node linkType: hard -"@types/node@npm:^16.11.48": - version: 16.11.48 - resolution: "@types/node@npm:16.11.48" - checksum: 10cd539cb2cf5a8f51f3c2bd761c093b752e534b1f2dc0d7193debd7986145b68db2a5fd48498af641e8641fb8d24b7c4851ea3e30fb8f56cc13ac719cad1e1f +"@types/node@npm:^16.11.52": + version: 16.11.52 + resolution: "@types/node@npm:16.11.52" + checksum: eb688bff28015f1399264b7aa347d5f40e165d438306bd5884d78993671c5e43b7849b8ddc74b91bf7c7b73e15ba54fc56ea1db2118b0e3f59f9fabd2adc7fe7 languageName: node linkType: hard @@ -3930,20 +3893,6 @@ __metadata: languageName: node linkType: hard -"@types/sinonjs__fake-timers@npm:8.1.1": - version: 8.1.1 - resolution: "@types/sinonjs__fake-timers@npm:8.1.1" - checksum: ca09d54d47091d87020824a73f026300fa06b17cd9f2f9b9387f28b549364b141ef194ee28db762f6588de71d8febcd17f753163cb7ea116b8387c18e80ebd5c - languageName: node - linkType: hard - -"@types/sizzle@npm:^2.3.2": - version: 2.3.3 - resolution: "@types/sizzle@npm:2.3.3" - checksum: 586a9fb1f6ff3e325e0f2cc1596a460615f0bc8a28f6e276ac9b509401039dd242fa8b34496d3a30c52f5b495873922d09a9e76c50c2ab2bcc70ba3fb9c4e160 - languageName: node - linkType: hard - "@types/stack-utils@npm:^2.0.0": version: 2.0.1 resolution: "@types/stack-utils@npm:2.0.1" @@ -4002,22 +3951,13 @@ __metadata: languageName: node linkType: hard -"@types/yauzl@npm:^2.9.1": - version: 2.10.0 - resolution: "@types/yauzl@npm:2.10.0" - dependencies: - "@types/node": "*" - checksum: 55d27ae5d346ea260e40121675c24e112ef0247649073848e5d4e03182713ae4ec8142b98f61a1c6cbe7d3b72fa99bbadb65d8b01873e5e605cdc30f1ff70ef2 - languageName: node - linkType: hard - -"@typescript-eslint/eslint-plugin@npm:^5.33.0": - version: 5.33.0 - resolution: "@typescript-eslint/eslint-plugin@npm:5.33.0" +"@typescript-eslint/eslint-plugin@npm:^5.33.1": + version: 5.33.1 + resolution: "@typescript-eslint/eslint-plugin@npm:5.33.1" dependencies: - "@typescript-eslint/scope-manager": 5.33.0 - "@typescript-eslint/type-utils": 5.33.0 - "@typescript-eslint/utils": 5.33.0 + "@typescript-eslint/scope-manager": 5.33.1 + "@typescript-eslint/type-utils": 5.33.1 + "@typescript-eslint/utils": 5.33.1 debug: ^4.3.4 functional-red-black-tree: ^1.0.1 ignore: ^5.2.0 @@ -4030,42 +3970,42 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: d408f3f474b34fefde8ee65d98deb126949fd7d8e211a7f95c5cc2b507dedbf8eb239f3895e0c37aa6338989531e37c5f35c2e0de36a126c52f0846e89605487 + checksum: d9b6b038f70e4959ad211c84f50a38de2d00b54f0636ad76eea414fb070fa616933690da80de6668e62c8fbbeb227086322001b7d7ad1924421a232547c97936 languageName: node linkType: hard -"@typescript-eslint/parser@npm:^5.33.0": - version: 5.33.0 - resolution: "@typescript-eslint/parser@npm:5.33.0" +"@typescript-eslint/parser@npm:^5.33.1": + version: 5.33.1 + resolution: "@typescript-eslint/parser@npm:5.33.1" dependencies: - "@typescript-eslint/scope-manager": 5.33.0 - "@typescript-eslint/types": 5.33.0 - "@typescript-eslint/typescript-estree": 5.33.0 + "@typescript-eslint/scope-manager": 5.33.1 + "@typescript-eslint/types": 5.33.1 + "@typescript-eslint/typescript-estree": 5.33.1 debug: ^4.3.4 peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 peerDependenciesMeta: typescript: optional: true - checksum: 2617aba987a70ee6b16ecc6afa6d245422df33a9d056018ff2e316159e667a0ab9d9c15fcea95e0ba65832661e71cc2753a221e77f0b0fab278e52c4497b8278 + checksum: fb3a4e000ce6d9583656fc3b3fb80f127a0ec1b7c3872ea469164516d993a588859ded4ec1338e6bbf2151168380d8aa29ec31027af23b50f5107949f8e7b438 languageName: node linkType: hard -"@typescript-eslint/scope-manager@npm:5.33.0": - version: 5.33.0 - resolution: "@typescript-eslint/scope-manager@npm:5.33.0" +"@typescript-eslint/scope-manager@npm:5.33.1": + version: 5.33.1 + resolution: "@typescript-eslint/scope-manager@npm:5.33.1" dependencies: - "@typescript-eslint/types": 5.33.0 - "@typescript-eslint/visitor-keys": 5.33.0 - checksum: b2cbea9abd528d01a5acb2d68a2a5be51ec6827760d3869bdd70920cf6c3a4f9f96d87c77177f8313009d9db71253e4a75f8393f38651e2abaf91ef28e60fb9d + "@typescript-eslint/types": 5.33.1 + "@typescript-eslint/visitor-keys": 5.33.1 + checksum: b9918d8320ea59081d19070ce952b56984e72fb2c113215e5e6a0f97deac9aae5aa67ec7a07cddb010c0f75cdf8df096ab45e9241e4b7b611acfa6d4cdfb6516 languageName: node linkType: hard -"@typescript-eslint/type-utils@npm:5.33.0": - version: 5.33.0 - resolution: "@typescript-eslint/type-utils@npm:5.33.0" +"@typescript-eslint/type-utils@npm:5.33.1": + version: 5.33.1 + resolution: "@typescript-eslint/type-utils@npm:5.33.1" dependencies: - "@typescript-eslint/utils": 5.33.0 + "@typescript-eslint/utils": 5.33.1 debug: ^4.3.4 tsutils: ^3.21.0 peerDependencies: @@ -4073,23 +4013,23 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: a1d1ffb42fe96bfc2339cc2875e218aa82fa9391be04c1a266bb11da1eca6835555687e81cde75477c60e6702049cd4dde7d2638e7e9b9d8cf4b7b2242353a6e + checksum: ddf88835bc87b3ad946aaeb29b770a49a8e1c3c5e294ee9cb93b1936f432a1016efb97803f197eea1be61545cbc79b5526cc05e9339ca9beada22fc83801ddea languageName: node linkType: hard -"@typescript-eslint/types@npm:5.33.0": - version: 5.33.0 - resolution: "@typescript-eslint/types@npm:5.33.0" - checksum: 8bbddda84cb3adf5c659b0d42547a2d6ab87f4eea574aca5dd63a3bd85169f32796ecbddad3b27f18a609070f6b1d18a54018d488bad746ae0f6ea5c02206109 +"@typescript-eslint/types@npm:5.33.1": + version: 5.33.1 + resolution: "@typescript-eslint/types@npm:5.33.1" + checksum: 122891bd4ab4b930b1d33f3ce43a010825c1e61b9879520a0f3dc34cf92df71e2a873410845ab8d746333511c455c115eaafdec149298a161cef713829dfdb77 languageName: node linkType: hard -"@typescript-eslint/typescript-estree@npm:5.33.0": - version: 5.33.0 - resolution: "@typescript-eslint/typescript-estree@npm:5.33.0" +"@typescript-eslint/typescript-estree@npm:5.33.1": + version: 5.33.1 + resolution: "@typescript-eslint/typescript-estree@npm:5.33.1" dependencies: - "@typescript-eslint/types": 5.33.0 - "@typescript-eslint/visitor-keys": 5.33.0 + "@typescript-eslint/types": 5.33.1 + "@typescript-eslint/visitor-keys": 5.33.1 debug: ^4.3.4 globby: ^11.1.0 is-glob: ^4.0.3 @@ -4098,227 +4038,227 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: 26f9005cdfb14654125a33d90d872b926820e560dff8970c4629fd5f6f47ad2a31e4c63161564d21bb42a8fc3ced0033994854ee37336ae07d90ccf6300d702b + checksum: 1418e409b141c2f012bc2dd5c40d95dfd8aa572dd3e9523ed23e4371e4459d10ecd074fda75dc770ce980686b25ffc44725eebf165c494818ed4131d1ac0239f languageName: node linkType: hard -"@typescript-eslint/utils@npm:5.33.0": - version: 5.33.0 - resolution: "@typescript-eslint/utils@npm:5.33.0" +"@typescript-eslint/utils@npm:5.33.1": + version: 5.33.1 + resolution: "@typescript-eslint/utils@npm:5.33.1" dependencies: "@types/json-schema": ^7.0.9 - "@typescript-eslint/scope-manager": 5.33.0 - "@typescript-eslint/types": 5.33.0 - "@typescript-eslint/typescript-estree": 5.33.0 + "@typescript-eslint/scope-manager": 5.33.1 + "@typescript-eslint/types": 5.33.1 + "@typescript-eslint/typescript-estree": 5.33.1 eslint-scope: ^5.1.1 eslint-utils: ^3.0.0 peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - checksum: 6ce5ee5eabeb6d73538b24e6487f811ecb0ef3467bd366cbd15bf30d904bdedb73fc6f48cf2e2e742dda462b42999ea505e8b59255545825ec9db86f3d423ea7 + checksum: c550504d62fc72f29bf3d7a651bd3a81f49fb1fccaf47583721c2ab1abd2ef78a1e4bc392cb4be4a61a45a4f24fc14a59d67b98aac8a16a207a7cace86538cab languageName: node linkType: hard -"@typescript-eslint/visitor-keys@npm:5.33.0": - version: 5.33.0 - resolution: "@typescript-eslint/visitor-keys@npm:5.33.0" +"@typescript-eslint/visitor-keys@npm:5.33.1": + version: 5.33.1 + resolution: "@typescript-eslint/visitor-keys@npm:5.33.1" dependencies: - "@typescript-eslint/types": 5.33.0 + "@typescript-eslint/types": 5.33.1 eslint-visitor-keys: ^3.3.0 - checksum: d7e3653de6bac6841e6fcc54226b93ad6bdca4aa76ebe7d83459c016c3eebcc50d4f65ee713174bc267d765295b642d1927a778c5de707b8389e3fcc052aa4a1 + checksum: 0d32a433450f61e97b5fa6b1e167f06ed395c200b16b4dbd4490a1c4941de420689b622f8a2486f5398806fb24f57b9fab901b4cbc8fdb8853f568264b3a182a languageName: node linkType: hard -"@unocss/cli@npm:0.45.6, @unocss/cli@npm:^0.45.6": - version: 0.45.6 - resolution: "@unocss/cli@npm:0.45.6" +"@unocss/cli@npm:0.45.9, @unocss/cli@npm:^0.45.9": + version: 0.45.9 + resolution: "@unocss/cli@npm:0.45.9" dependencies: - "@unocss/config": 0.45.6 - "@unocss/core": 0.45.6 - "@unocss/preset-uno": 0.45.6 + "@unocss/config": 0.45.9 + "@unocss/core": 0.45.9 + "@unocss/preset-uno": 0.45.9 cac: ^6.7.12 chokidar: ^3.5.3 colorette: ^2.0.19 consola: ^2.15.3 fast-glob: ^3.2.11 - pathe: ^0.3.3 + pathe: ^0.3.5 perfect-debounce: ^0.1.3 bin: unocss: bin/unocss.mjs - checksum: e80b92f14b8308db63afc478cb19a37f9474b35a81d03cf1777fb94c8e1882dae1c847cd057c861be3ce892013e7c3a8e92c57fa4b17fa1fdb18ff6c3acdb14f + checksum: b7de5a9d7d0b86d37f1c3154bf7f2c1e8b2d76baface730fb0403ee56db0de92b673a30283236c57ec339764afac2c250ae7dcf0c41aa1bc959d79066ab631e1 languageName: node linkType: hard -"@unocss/config@npm:0.45.6": - version: 0.45.6 - resolution: "@unocss/config@npm:0.45.6" +"@unocss/config@npm:0.45.9": + version: 0.45.9 + resolution: "@unocss/config@npm:0.45.9" dependencies: - "@unocss/core": 0.45.6 + "@unocss/core": 0.45.9 unconfig: ^0.3.5 - checksum: c024e10e82f14aeed382ad2f8da0aeb90343a5519e38f57fe41bdd151a3bb83c0a54da03fc268a574949157d933e9e20b12b83d58b94b844dc7459fa703e6f8e + checksum: 27e7edfabb48a5f353e91975bcfe8141e807a93e725d1a95005b0dfe3f414ed0af240552ed0c4509394ddb901401c69a4a6bc8d014b3a74f46da50f804948626 languageName: node linkType: hard -"@unocss/core@npm:0.45.6": - version: 0.45.6 - resolution: "@unocss/core@npm:0.45.6" - checksum: c5ca07a5c79a6095941f22619ac16472b489d01c800d9fdd15ad5e939ed2163f68b98bc17c1ac06d5eacd70071ed78d7528d5a0b8d3652d24d06926ffdb18152 +"@unocss/core@npm:0.45.9": + version: 0.45.9 + resolution: "@unocss/core@npm:0.45.9" + checksum: 06ddf6df797d6011774dbd37768f210c972bbbc1281860186174a787ce3482a1cb91095ed8181188294ac2e5f1f51d7839c8204438046d441d66ad86dd13b10e languageName: node linkType: hard -"@unocss/inspector@npm:0.45.6": - version: 0.45.6 - resolution: "@unocss/inspector@npm:0.45.6" +"@unocss/inspector@npm:0.45.9": + version: 0.45.9 + resolution: "@unocss/inspector@npm:0.45.9" dependencies: gzip-size: ^6.0.0 sirv: ^2.0.2 - checksum: 1d07df752683863ea810ca89e15d060ccfcba460aa672b245b5027d8f9616b1c18abc3708b38e8508d4a3a734b97c3bc9db01f7690ce1fe9c8362ccf92c0ebbc + checksum: 0bf537b9b237037b75b08f463170f0b197e85e2abe4198050c7990aab80e153626be3739bf9cd05687856211cac3248f72592f13f08cd273269fa9720dcfcd60 languageName: node linkType: hard -"@unocss/preset-attributify@npm:0.45.6": - version: 0.45.6 - resolution: "@unocss/preset-attributify@npm:0.45.6" +"@unocss/preset-attributify@npm:0.45.9": + version: 0.45.9 + resolution: "@unocss/preset-attributify@npm:0.45.9" dependencies: - "@unocss/core": 0.45.6 - checksum: 741f4fbb2ac05369c7135a760e77098af90ae16169306c5fb43c0dfdafbcc7a56c980ea08383dd33cf595f2cd00a29030fcbe09a98b1caa8f4adacd66473c6ed + "@unocss/core": 0.45.9 + checksum: f4d0bb81136cfa760c4b9b4e5c46da6c021825bb60bfd0ff871dcdc6262658dcf370e748706bf9bc8507feee03309cd218f2449c955b9fc4f6dc3a3968b62ce9 languageName: node linkType: hard -"@unocss/preset-icons@npm:0.45.6": - version: 0.45.6 - resolution: "@unocss/preset-icons@npm:0.45.6" +"@unocss/preset-icons@npm:0.45.9": + version: 0.45.9 + resolution: "@unocss/preset-icons@npm:0.45.9" dependencies: "@iconify/utils": ^1.0.33 - "@unocss/core": 0.45.6 + "@unocss/core": 0.45.9 ohmyfetch: ^0.4.18 - checksum: 438a0d0faa10becbca4ab37ff6a37e31627f9ea03552f3499ae3c9a25853bd947d86479c5494c60e576bf5d8c27ff62ec46ed7a6b130641cd300db0ab183cf17 + checksum: 289ea6e93574ffd200281ebba4d12c77c0a1659e2148420261245f498784cf3d90f91b5da4dacd2a94ea7d5fa280144516f94a28fc6428ff8df673336698f705 languageName: node linkType: hard -"@unocss/preset-mini@npm:0.45.6": - version: 0.45.6 - resolution: "@unocss/preset-mini@npm:0.45.6" +"@unocss/preset-mini@npm:0.45.9": + version: 0.45.9 + resolution: "@unocss/preset-mini@npm:0.45.9" dependencies: - "@unocss/core": 0.45.6 - checksum: 90c09b79387f006eddde366833e75c5d46ce138aeede20f20835c20bc18ffad58f90af5450304ccb00b1d699c7884b8b9ee12f6ff950a4947ebbb33094bfffa6 + "@unocss/core": 0.45.9 + checksum: d2d2f8a810b324d674507f0df8dfa6a5e10c6f24ca6e72371ad58ba84a3bc0b6071b19427c60414b81cbb8d5113757a03ed3e4716b47f4a957b3732f8063935c languageName: node linkType: hard -"@unocss/preset-tagify@npm:0.45.6": - version: 0.45.6 - resolution: "@unocss/preset-tagify@npm:0.45.6" +"@unocss/preset-tagify@npm:0.45.9": + version: 0.45.9 + resolution: "@unocss/preset-tagify@npm:0.45.9" dependencies: - "@unocss/core": 0.45.6 - checksum: 862377201e88dbe7f8726871ac314fdda7757289ddeb31eec3fc554a6d9ec96f16449be76edc8b95667099631ed435152c96452e5b8b414de66994fbde4e7403 + "@unocss/core": 0.45.9 + checksum: db27efd297f0aa7d9b7e0b5bfdd0a3b129dbd6ca04db47d10dbb67d11e3b5b4b655f5a212f1871bceb4c964ec2818c5ad89f297f6be6f82f5563145c8187aaa8 languageName: node linkType: hard -"@unocss/preset-typography@npm:0.45.6": - version: 0.45.6 - resolution: "@unocss/preset-typography@npm:0.45.6" +"@unocss/preset-typography@npm:0.45.9": + version: 0.45.9 + resolution: "@unocss/preset-typography@npm:0.45.9" dependencies: - "@unocss/core": 0.45.6 - checksum: 48e235e670ca6cd31af60d4c029c42ee7012a21f6cde173902f91f9cbaadac7a7d5d6d0e8098b68f475c16f1bd030c1722719df762ee133472a36169f90e3614 + "@unocss/core": 0.45.9 + checksum: 818e214725886a0755500e70396bcf9de9893e79d5bc73d58afa3149c902a2670504a50c07b4df38e63bd9d8b32b6fb82c6d94a937e84cd98d96e648f24f55a6 languageName: node linkType: hard -"@unocss/preset-uno@npm:0.45.6": - version: 0.45.6 - resolution: "@unocss/preset-uno@npm:0.45.6" +"@unocss/preset-uno@npm:0.45.9": + version: 0.45.9 + resolution: "@unocss/preset-uno@npm:0.45.9" dependencies: - "@unocss/core": 0.45.6 - "@unocss/preset-mini": 0.45.6 - "@unocss/preset-wind": 0.45.6 - checksum: 71e7f4e0f2641d9f9c23b3444932c7831fc0a9219b5b24ac1d09114ea0d4c725e2e514f23435e6dfbcd9ef3e77834b68147a7caf96523cb1e4ce7910a27e029e + "@unocss/core": 0.45.9 + "@unocss/preset-mini": 0.45.9 + "@unocss/preset-wind": 0.45.9 + checksum: 12aa3831df4f62e67b6c1c7694924ba03fe2b85c20cf6cbdd9e151fd64e0400c4c3b393c615203d67d5ca3a66575a6ab676540b34f2c860fb8e1a801bf9563e7 languageName: node linkType: hard -"@unocss/preset-web-fonts@npm:0.45.6, @unocss/preset-web-fonts@npm:^0.45.6": - version: 0.45.6 - resolution: "@unocss/preset-web-fonts@npm:0.45.6" +"@unocss/preset-web-fonts@npm:0.45.9, @unocss/preset-web-fonts@npm:^0.45.9": + version: 0.45.9 + resolution: "@unocss/preset-web-fonts@npm:0.45.9" dependencies: - "@unocss/core": 0.45.6 + "@unocss/core": 0.45.9 ohmyfetch: ^0.4.18 - checksum: 41071a54ccac420294372de3f64ed57a6dd47d07e12c80b1232af7f799f0c06ca9790dd6b53eb54185c1828852ead4a8e89454ec32bb873af0ce5b6071950a08 + checksum: 593daadf721ddc49d06e771b2fb423a4549449bd8d5178f65936dddf6bf34ae28930f4be65e06ae9ac15e794056d52d07dcdaa694785dfe10d8a4cec027da5fb languageName: node linkType: hard -"@unocss/preset-wind@npm:0.45.6": - version: 0.45.6 - resolution: "@unocss/preset-wind@npm:0.45.6" +"@unocss/preset-wind@npm:0.45.9": + version: 0.45.9 + resolution: "@unocss/preset-wind@npm:0.45.9" dependencies: - "@unocss/core": 0.45.6 - "@unocss/preset-mini": 0.45.6 - checksum: 07fac59c271a694cc76e62b24bd85c7c567c9a72cc18365a9b1b15116daa5fa785627213c512583c56d41b936285bd489f164376838b2f1e083a9500c382ed77 + "@unocss/core": 0.45.9 + "@unocss/preset-mini": 0.45.9 + checksum: f3e9732e6735516ca630f86c300b47845bf14945d15ef3e6708984d1f31a9d3cf4573b350465d3667530ced71ce5b9e8e1a00c2a5cc7f5714b7ab3bbe868209f languageName: node linkType: hard -"@unocss/reset@npm:0.45.6, @unocss/reset@npm:^0.45.6": - version: 0.45.6 - resolution: "@unocss/reset@npm:0.45.6" - checksum: b462cf6d9aca61e7bee9d252967ebfbd49b650e5ae5d5da6dbd011164cc04097d0596d15dbcbe52f2fbc3a50c160fb4d0f62094118514e6d906fdead09c7090a +"@unocss/reset@npm:0.45.9, @unocss/reset@npm:^0.45.9": + version: 0.45.9 + resolution: "@unocss/reset@npm:0.45.9" + checksum: 0c0b6d9f5ad0be39f75d466f720ef92709a8d092287e579e8a77b943dceec67ab6ca2f081bc9bdfdacab552fcb55e87bb7a473e6919fb1e54b5a6bd044d4f4bb languageName: node linkType: hard -"@unocss/scope@npm:0.45.6": - version: 0.45.6 - resolution: "@unocss/scope@npm:0.45.6" - checksum: daff7bb89e9fa8f75d2ff3d94f1de5e836d9cb0cab2306de4b888d51d728a9a824ccd60db99480a64d54029e5e395ecc40a1b023a75f56306c38d1818c982ec4 +"@unocss/scope@npm:0.45.9": + version: 0.45.9 + resolution: "@unocss/scope@npm:0.45.9" + checksum: 5a2778a6be53c9e079ecb155ca2d588e532767d9e63f7035d141af23e334c80b3ef79b8f65822cd0c07e7c5e49b6d7ce201fdfe16a073215646d0ac8d992bd3b languageName: node linkType: hard -"@unocss/transformer-attributify-jsx@npm:0.45.6": - version: 0.45.6 - resolution: "@unocss/transformer-attributify-jsx@npm:0.45.6" +"@unocss/transformer-attributify-jsx@npm:0.45.9": + version: 0.45.9 + resolution: "@unocss/transformer-attributify-jsx@npm:0.45.9" dependencies: - "@unocss/core": 0.45.6 - checksum: 2694be0bc9bc2fd99f380531f6dba9cb7e0df5d00f9d4dd56d99e38000eb4597953c8d3accc3e10fe00026ccf6cceb4992032c37097263e2e2f08bb27dd7e0f1 + "@unocss/core": 0.45.9 + checksum: 796f8d2eba41bface6dcff05efe282929c150918d2a456d329d40a5e2380f680340ff71aca620fd7765e6a6d880d554dc5cc9f606881b924f9539c84fc0dada7 languageName: node linkType: hard -"@unocss/transformer-compile-class@npm:0.45.6": - version: 0.45.6 - resolution: "@unocss/transformer-compile-class@npm:0.45.6" +"@unocss/transformer-compile-class@npm:0.45.9": + version: 0.45.9 + resolution: "@unocss/transformer-compile-class@npm:0.45.9" dependencies: - "@unocss/core": 0.45.6 - checksum: f7d927b3fb73d3dfd3284947177b8571e68253e916cf967174099de56b4ffa4913167f92bdd1008469eb163ec995b20e0e7790c211c171d4e5a3a48be491b0cf + "@unocss/core": 0.45.9 + checksum: 20b10af0a010a437ffb39927da371f334dc54011a68a7316f85ee7f8547474267ff662c41dab67d8bb58933ae82c046fcbc1c4e9af21e27aa56bd6d1e5d601e5 languageName: node linkType: hard -"@unocss/transformer-directives@npm:0.45.6": - version: 0.45.6 - resolution: "@unocss/transformer-directives@npm:0.45.6" +"@unocss/transformer-directives@npm:0.45.9": + version: 0.45.9 + resolution: "@unocss/transformer-directives@npm:0.45.9" dependencies: - "@unocss/core": 0.45.6 - css-tree: ^2.1.0 - checksum: 8171e8b50217aa199795370465fec986b8d4513eb1e034fc9159bb9c24e57a42e85dac7da4fee24b795d4922a404afbd9c868983c74a4dafa41c802442be3adb + "@unocss/core": 0.45.9 + css-tree: ^2.2.1 + checksum: e898ece9e599f4d1bb6212658ea8c3973158d3e7170fb3e9037b68723ecbc9c129599adb3fbd3fc813a52d8e6731cf5a2f91f621b360eb2505a6b22bc0855621 languageName: node linkType: hard -"@unocss/transformer-variant-group@npm:0.45.6": - version: 0.45.6 - resolution: "@unocss/transformer-variant-group@npm:0.45.6" +"@unocss/transformer-variant-group@npm:0.45.9": + version: 0.45.9 + resolution: "@unocss/transformer-variant-group@npm:0.45.9" dependencies: - "@unocss/core": 0.45.6 - checksum: 45bd05737afc5cf0cbe1f7c9e2a72807ab64a019a9f05e4fef38a39f6d29cdf309131018855da1ac688b82c3ffad50284a532d6287aa2ca9c1a9ec2d94b15cd7 + "@unocss/core": 0.45.9 + checksum: 3774932afe3714c9ac57d98926fdc224f98899aa869b9a21856404463bebc78947004602d5a0640b5fbcf819988183db7e2add6be4bf6f8262dce0a5eda35594 languageName: node linkType: hard -"@unocss/vite@npm:0.45.6": - version: 0.45.6 - resolution: "@unocss/vite@npm:0.45.6" +"@unocss/vite@npm:0.45.9": + version: 0.45.9 + resolution: "@unocss/vite@npm:0.45.9" dependencies: "@ampproject/remapping": ^2.2.0 "@rollup/pluginutils": ^4.2.1 - "@unocss/config": 0.45.6 - "@unocss/core": 0.45.6 - "@unocss/inspector": 0.45.6 - "@unocss/scope": 0.45.6 - "@unocss/transformer-directives": 0.45.6 + "@unocss/config": 0.45.9 + "@unocss/core": 0.45.9 + "@unocss/inspector": 0.45.9 + "@unocss/scope": 0.45.9 + "@unocss/transformer-directives": 0.45.9 magic-string: ^0.26.2 peerDependencies: vite: ^2.9.0 || ^3.0.0-0 - checksum: 32f5d6c4e0979700cf5d478d47b82d98cb270fb5470483986b47ebae486d9472fb53411ffe11ad810d96997ffa3418e42313607ca9306e29c8f8db6a6e58d4aa + checksum: fa212597f02758a1cb28565dde4f271651ba7dd856ca936c8aecd52db27b6b61f67833ea0b8d4e72b637d438cb808c834d2015a56d55a5495b9f2b5fd4512864 languageName: node linkType: hard @@ -4329,10 +4269,10 @@ __metadata: languageName: node linkType: hard -"@vercel/go@npm:2.1.1": - version: 2.1.1 - resolution: "@vercel/go@npm:2.1.1" - checksum: a0621a91ce547140a44b1259a33b3a08ac5cdf3f0c9543dd2a8eed3e547e30e93c8b96e5a737db8c8e1db60dd0a8073e37c8a8f8b9a2254c587836790eb908d6 +"@vercel/go@npm:2.2.0": + version: 2.2.0 + resolution: "@vercel/go@npm:2.2.0" + checksum: 03840a878c7174fcd3fdecd2af519519bdf7d128e7c7b7cec03eecba3abe5192c265d24071aa77b602546cc7b7e69c60195c91b6692a6df8da6a3363daf33594 languageName: node linkType: hard @@ -4343,10 +4283,10 @@ __metadata: languageName: node linkType: hard -"@vercel/next@npm:3.1.18": - version: 3.1.18 - resolution: "@vercel/next@npm:3.1.18" - checksum: e363d3e1149155d6e99491667f02cb58648f31386c2485f4dfc6c1ede235912abddb128c17829c968779b843891568c37f721f9bcd7f50cae0abd7432d81fa2c +"@vercel/next@npm:3.1.19": + version: 3.1.19 + resolution: "@vercel/next@npm:3.1.19" + checksum: cfcda13d756eaf6e956caf8e1705f0ad11fa3f2fb8366d306c58866999274b0ca28fb2c1a748582234280bdc554282c5b607376ace264886fa8d36b93497123f languageName: node linkType: hard @@ -4437,10 +4377,10 @@ __metadata: languageName: node linkType: hard -"@vercel/ruby@npm:1.3.26": - version: 1.3.26 - resolution: "@vercel/ruby@npm:1.3.26" - checksum: ecb9927e14232710052bd5dacd5bd42d31b4366f167e0be74a11fb6278939a42b108a8d190f79abcb9e4e106237450d7eaf6216187c34c5a3a2b4a95611d6402 +"@vercel/ruby@npm:1.3.27": + version: 1.3.27 + resolution: "@vercel/ruby@npm:1.3.27" + checksum: aa6948e1288a20f23a1f6da6c90efef312f93123b0b7aa2e37507e97f341ae44fb3945f316b153f03f999e8d020213b28927fa1d0bdd30734f1df648c2986c34 languageName: node linkType: hard @@ -4479,13 +4419,13 @@ __metadata: languageName: node linkType: hard -"@vitest/coverage-c8@npm:^0.22.0": - version: 0.22.0 - resolution: "@vitest/coverage-c8@npm:0.22.0" +"@vitest/coverage-c8@npm:^0.22.1": + version: 0.22.1 + resolution: "@vitest/coverage-c8@npm:0.22.1" dependencies: c8: ^7.12.0 - vitest: 0.22.0 - checksum: 6472eb7d32d380ac13756e77a4607c0ad78744a55a749c81cd0745cca3fbca23a69fcf6399e0575b3ece73cb2be483366945d088c06e0c3f2f34b807b6f92655 + vitest: 0.22.1 + checksum: 141c10127a556ff32e43c6d92a468d800d7c62c767feef1a4123e204a07b58456b410efdba720fa3035639903098dc12767602aa7dabadd40e2d60abc0b008f1 languageName: node linkType: hard @@ -4629,13 +4569,6 @@ __metadata: languageName: node linkType: hard -"ansi-colors@npm:^4.1.1": - version: 4.1.3 - resolution: "ansi-colors@npm:4.1.3" - checksum: a9c2ec842038a1fabc7db9ece7d3177e2fe1c5dc6f0c51ecfbf5f39911427b89c00b5dc6b8bd95f82a26e9b16aaae2e83d45f060e98070ce4d1333038edceb0e - languageName: node - linkType: hard - "ansi-escape-sequences@npm:^4.0.0": version: 4.1.0 resolution: "ansi-escape-sequences@npm:4.1.0" @@ -4738,13 +4671,6 @@ __metadata: languageName: node linkType: hard -"arch@npm:^2.2.0": - version: 2.2.0 - resolution: "arch@npm:2.2.0" - checksum: e21b7635029fe8e9cdd5a026f9a6c659103e63fff423834323cdf836a1bb240a72d0c39ca8c470f84643385cf581bd8eda2cad8bf493e27e54bd9783abe9101f - languageName: node - linkType: hard - "are-we-there-yet@npm:^2.0.0": version: 2.0.0 resolution: "are-we-there-yet@npm:2.0.0" @@ -4962,13 +4888,6 @@ __metadata: languageName: node linkType: hard -"async@npm:^3.2.0": - version: 3.2.4 - resolution: "async@npm:3.2.4" - checksum: 43d07459a4e1d09b84a20772414aa684ff4de085cbcaec6eea3c7a8f8150e8c62aa6cd4e699fe8ee93c3a5b324e777d34642531875a0817a35697522c1b02e89 - languageName: node - linkType: hard - "asynckit@npm:^0.4.0": version: 0.4.0 resolution: "asynckit@npm:0.4.0" @@ -4976,13 +4895,6 @@ __metadata: languageName: node linkType: hard -"at-least-node@npm:^1.0.0": - version: 1.0.0 - resolution: "at-least-node@npm:1.0.0" - checksum: 463e2f8e43384f1afb54bc68485c436d7622acec08b6fad269b421cb1d29cebb5af751426793d0961ed243146fe4dc983402f6d5a51b720b277818dbf6f2e49e - languageName: node - linkType: hard - "aws-sign2@npm:~0.7.0": version: 0.7.0 resolution: "aws-sign2@npm:0.7.0" @@ -5190,13 +5102,6 @@ __metadata: languageName: node linkType: hard -"blob-util@npm:^2.0.2": - version: 2.0.2 - resolution: "blob-util@npm:2.0.2" - checksum: d543e6b92e4ca715ca33c78e89a07a2290d43e5b2bc897d7ec588c5c7bbf59df93e45225ac0c9258aa6ce4320358990f99c9288f1c48280f8ec5d7a2e088d19b - languageName: node - linkType: hard - "bluebird@npm:^3.7.2": version: 3.7.2 resolution: "bluebird@npm:3.7.2" @@ -5271,13 +5176,6 @@ __metadata: languageName: node linkType: hard -"buffer-crc32@npm:~0.2.3": - version: 0.2.13 - resolution: "buffer-crc32@npm:0.2.13" - checksum: 06252347ae6daca3453b94e4b2f1d3754a3b146a111d81c68924c22d91889a40623264e95e67955b1cb4a68cbedf317abeabb5140a9766ed248973096db5ce1c - languageName: node - linkType: hard - "buffer-from@npm:^1.0.0": version: 1.1.2 resolution: "buffer-from@npm:1.1.2" @@ -5292,7 +5190,7 @@ __metadata: languageName: node linkType: hard -"buffer@npm:^5.5.0, buffer@npm:^5.6.0": +"buffer@npm:^5.5.0": version: 5.7.1 resolution: "buffer@npm:5.7.1" dependencies: @@ -5413,13 +5311,6 @@ __metadata: languageName: node linkType: hard -"cachedir@npm:^2.3.0": - version: 2.3.0 - resolution: "cachedir@npm:2.3.0" - checksum: ec90cb0f2e6336e266aa748dbadf3da9e0b20e843e43f1591acab7a3f1451337dc2f26cb9dd833ae8cfefeffeeb43ef5b5ff62782a685f4e3c2305dd98482fcb - languageName: node - linkType: hard - "call-bind@npm:^1.0.0, call-bind@npm:^1.0.2": version: 1.0.2 resolution: "call-bind@npm:1.0.2" @@ -5585,13 +5476,6 @@ __metadata: languageName: node linkType: hard -"check-more-types@npm:^2.24.0": - version: 2.24.0 - resolution: "check-more-types@npm:2.24.0" - checksum: b09080ec3404d20a4b0ead828994b2e5913236ef44ed3033a27062af0004cf7d2091fbde4b396bf13b7ce02fb018bc9960b48305e6ab2304cd82d73ed7a51ef4 - languageName: node - linkType: hard - "chokidar@npm:^3.5.3": version: 3.5.3 resolution: "chokidar@npm:3.5.3" @@ -5669,19 +5553,6 @@ __metadata: languageName: node linkType: hard -"cli-table3@npm:~0.6.1": - version: 0.6.2 - resolution: "cli-table3@npm:0.6.2" - dependencies: - "@colors/colors": 1.5.0 - string-width: ^4.2.0 - dependenciesMeta: - "@colors/colors": - optional: true - checksum: 2f82391698b8a2a2a5e45d2adcfea5d93e557207f90455a8d4c1aac688e9b18a204d9eb4ba1d322fa123b17d64ea3dc5e11de8b005529f3c3e7dbeb27cb4d9be - languageName: node - linkType: hard - "cli-truncate@npm:^2.1.0": version: 2.1.0 resolution: "cli-truncate@npm:2.1.0" @@ -5920,13 +5791,6 @@ __metadata: languageName: node linkType: hard -"commander@npm:^5.1.0": - version: 5.1.0 - resolution: "commander@npm:5.1.0" - checksum: 0b7fec1712fbcc6230fcb161d8d73b4730fa91a21dc089515489402ad78810547683f058e2a9835929c212fead1d6a6ade70db28bbb03edbc2829a9ab7d69447 - languageName: node - linkType: hard - "commander@npm:^9.3.0, commander@npm:^9.4.0": version: 9.4.0 resolution: "commander@npm:9.4.0" @@ -5941,13 +5805,6 @@ __metadata: languageName: node linkType: hard -"common-tags@npm:^1.8.0": - version: 1.8.2 - resolution: "common-tags@npm:1.8.2" - checksum: 767a6255a84bbc47df49a60ab583053bb29a7d9687066a18500a516188a062c4e4cd52de341f22de0b07062e699b1b8fe3cfa1cb55b241cb9301aeb4f45b4dff - languageName: node - linkType: hard - "commondir@npm:^1.0.1": version: 1.0.1 resolution: "commondir@npm:1.0.1" @@ -6378,7 +6235,7 @@ __metadata: languageName: node linkType: hard -"css-tree@npm:^2.1.0": +"css-tree@npm:^2.2.1": version: 2.2.1 resolution: "css-tree@npm:2.2.1" dependencies: @@ -6409,58 +6266,6 @@ __metadata: languageName: node linkType: hard -"cypress@npm:^10.4.0": - version: 10.4.0 - resolution: "cypress@npm:10.4.0" - dependencies: - "@cypress/request": ^2.88.10 - "@cypress/xvfb": ^1.2.4 - "@types/node": ^14.14.31 - "@types/sinonjs__fake-timers": 8.1.1 - "@types/sizzle": ^2.3.2 - arch: ^2.2.0 - blob-util: ^2.0.2 - bluebird: ^3.7.2 - buffer: ^5.6.0 - cachedir: ^2.3.0 - chalk: ^4.1.0 - check-more-types: ^2.24.0 - cli-cursor: ^3.1.0 - cli-table3: ~0.6.1 - commander: ^5.1.0 - common-tags: ^1.8.0 - dayjs: ^1.10.4 - debug: ^4.3.2 - enquirer: ^2.3.6 - eventemitter2: ^6.4.3 - execa: 4.1.0 - executable: ^4.1.1 - extract-zip: 2.0.1 - figures: ^3.2.0 - fs-extra: ^9.1.0 - getos: ^3.2.1 - is-ci: ^3.0.0 - is-installed-globally: ~0.4.0 - lazy-ass: ^1.6.0 - listr2: ^3.8.3 - lodash: ^4.17.21 - log-symbols: ^4.0.0 - minimist: ^1.2.6 - ospath: ^1.2.2 - pretty-bytes: ^5.6.0 - proxy-from-env: 1.0.0 - request-progress: ^3.0.0 - semver: ^7.3.2 - supports-color: ^8.1.1 - tmp: ~0.2.1 - untildify: ^4.0.0 - yauzl: ^2.10.0 - bin: - cypress: bin/cypress - checksum: 3f7385e076ac936683d1d1d104a7183f2e61ad0f4c901aff07146ae2e10197e8314019dcdfb6c188312fbf1be05484291f1cf8d49c4c37cf6485103c4ac5303e - languageName: node - linkType: hard - "dargs@npm:^7.0.0": version: 7.0.0 resolution: "dargs@npm:7.0.0" @@ -6491,13 +6296,6 @@ __metadata: languageName: node linkType: hard -"dayjs@npm:^1.10.4": - version: 1.11.5 - resolution: "dayjs@npm:1.11.5" - checksum: e3bbaa7b4883b31be4bf75a181f1447fbb19800c29b332852125aab96baeff3ac232dcba8b88c4ea17d3b636c99dac5fb9d1af4bb6ae26615698bbc4a852dffb - languageName: node - linkType: hard - "debug@npm:4, debug@npm:^4.1.0, debug@npm:^4.1.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" @@ -6519,7 +6317,7 @@ __metadata: languageName: node linkType: hard -"debug@npm:^3.1.0, debug@npm:^3.2.7": +"debug@npm:^3.2.7": version: 3.2.7 resolution: "debug@npm:3.2.7" dependencies: @@ -6631,6 +6429,13 @@ __metadata: languageName: node linkType: hard +"defu@npm:^6.1.0": + version: 6.1.0 + resolution: "defu@npm:6.1.0" + checksum: 403a9ba8ab08dca87576eb062fa488c5cc58a5c8601955f2325dcc077c23da8a68169591505654a8c70ca3567006516ef92a4c44129643f928c58c4e7281195a + languageName: node + linkType: hard + "delayed-stream@npm:~1.0.0": version: 1.0.0 resolution: "delayed-stream@npm:1.0.0" @@ -6713,10 +6518,10 @@ __metadata: languageName: node linkType: hard -"discord-api-types@npm:^0.37.2": - version: 0.37.2 - resolution: "discord-api-types@npm:0.37.2" - checksum: cf89c232a70c8f77653fdfa7fc34e109f51ba2650f98d54d456aefdb0a90872e2189292dfcf7572a9ece1d16652c6993df64f75199eaee3715f28e592dbf6c25 +"discord-api-types@npm:^0.37.3": + version: 0.37.3 + resolution: "discord-api-types@npm:0.37.3" + checksum: 35451bfcac67c3c32fdc78eec79649a4a4c07132e14b661f797c61f30cedaf5202066aaf7f39d1ae1143262be07a93257b3c302699814884d2beed1572d1beff languageName: node linkType: hard @@ -6728,11 +6533,11 @@ __metadata: "@discordjs/collection": "workspace:^" "@discordjs/docgen": "workspace:^" "@discordjs/rest": "workspace:^" - "@favware/cliff-jumper": ^1.8.6 + "@favware/cliff-jumper": ^1.8.7 "@sapphire/snowflake": ^3.2.2 - "@types/node": ^16.11.48 + "@types/node": ^16.11.52 "@types/ws": ^8.5.3 - discord-api-types: ^0.37.2 + discord-api-types: ^0.37.3 dtslint: ^4.2.1 eslint: ^8.22.0 fast-deep-equal: ^3.1.3 @@ -6743,7 +6548,7 @@ __metadata: tslib: ^2.4.0 tslint: ^6.1.3 typescript: ^4.7.4 - undici: ^5.8.2 + undici: ^5.9.1 ws: ^8.8.1 languageName: unknown linkType: soft @@ -7006,15 +6811,6 @@ __metadata: languageName: node linkType: hard -"enquirer@npm:^2.3.6": - version: 2.3.6 - resolution: "enquirer@npm:2.3.6" - dependencies: - ansi-colors: ^4.1.1 - checksum: 1c0911e14a6f8d26721c91e01db06092a5f7675159f0261d69c403396a385afd13dd76825e7678f66daffa930cfaa8d45f506fb35f818a2788463d022af1b884 - languageName: node - linkType: hard - "entities@npm:^2.0.0": version: 2.2.0 resolution: "entities@npm:2.2.0" @@ -7131,9 +6927,9 @@ __metadata: languageName: node linkType: hard -"esbuild-android-64@npm:0.15.3": - version: 0.15.3 - resolution: "esbuild-android-64@npm:0.15.3" +"esbuild-android-64@npm:0.15.5": + version: 0.15.5 + resolution: "esbuild-android-64@npm:0.15.5" conditions: os=android & cpu=x64 languageName: node linkType: hard @@ -7152,9 +6948,9 @@ __metadata: languageName: node linkType: hard -"esbuild-android-arm64@npm:0.15.3": - version: 0.15.3 - resolution: "esbuild-android-arm64@npm:0.15.3" +"esbuild-android-arm64@npm:0.15.5": + version: 0.15.5 + resolution: "esbuild-android-arm64@npm:0.15.5" conditions: os=android & cpu=arm64 languageName: node linkType: hard @@ -7173,9 +6969,9 @@ __metadata: languageName: node linkType: hard -"esbuild-darwin-64@npm:0.15.3": - version: 0.15.3 - resolution: "esbuild-darwin-64@npm:0.15.3" +"esbuild-darwin-64@npm:0.15.5": + version: 0.15.5 + resolution: "esbuild-darwin-64@npm:0.15.5" conditions: os=darwin & cpu=x64 languageName: node linkType: hard @@ -7194,9 +6990,9 @@ __metadata: languageName: node linkType: hard -"esbuild-darwin-arm64@npm:0.15.3": - version: 0.15.3 - resolution: "esbuild-darwin-arm64@npm:0.15.3" +"esbuild-darwin-arm64@npm:0.15.5": + version: 0.15.5 + resolution: "esbuild-darwin-arm64@npm:0.15.5" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard @@ -7215,9 +7011,9 @@ __metadata: languageName: node linkType: hard -"esbuild-freebsd-64@npm:0.15.3": - version: 0.15.3 - resolution: "esbuild-freebsd-64@npm:0.15.3" +"esbuild-freebsd-64@npm:0.15.5": + version: 0.15.5 + resolution: "esbuild-freebsd-64@npm:0.15.5" conditions: os=freebsd & cpu=x64 languageName: node linkType: hard @@ -7236,9 +7032,9 @@ __metadata: languageName: node linkType: hard -"esbuild-freebsd-arm64@npm:0.15.3": - version: 0.15.3 - resolution: "esbuild-freebsd-arm64@npm:0.15.3" +"esbuild-freebsd-arm64@npm:0.15.5": + version: 0.15.5 + resolution: "esbuild-freebsd-arm64@npm:0.15.5" conditions: os=freebsd & cpu=arm64 languageName: node linkType: hard @@ -7257,9 +7053,9 @@ __metadata: languageName: node linkType: hard -"esbuild-linux-32@npm:0.15.3": - version: 0.15.3 - resolution: "esbuild-linux-32@npm:0.15.3" +"esbuild-linux-32@npm:0.15.5": + version: 0.15.5 + resolution: "esbuild-linux-32@npm:0.15.5" conditions: os=linux & cpu=ia32 languageName: node linkType: hard @@ -7278,9 +7074,9 @@ __metadata: languageName: node linkType: hard -"esbuild-linux-64@npm:0.15.3": - version: 0.15.3 - resolution: "esbuild-linux-64@npm:0.15.3" +"esbuild-linux-64@npm:0.15.5": + version: 0.15.5 + resolution: "esbuild-linux-64@npm:0.15.5" conditions: os=linux & cpu=x64 languageName: node linkType: hard @@ -7299,9 +7095,9 @@ __metadata: languageName: node linkType: hard -"esbuild-linux-arm64@npm:0.15.3": - version: 0.15.3 - resolution: "esbuild-linux-arm64@npm:0.15.3" +"esbuild-linux-arm64@npm:0.15.5": + version: 0.15.5 + resolution: "esbuild-linux-arm64@npm:0.15.5" conditions: os=linux & cpu=arm64 languageName: node linkType: hard @@ -7320,9 +7116,9 @@ __metadata: languageName: node linkType: hard -"esbuild-linux-arm@npm:0.15.3": - version: 0.15.3 - resolution: "esbuild-linux-arm@npm:0.15.3" +"esbuild-linux-arm@npm:0.15.5": + version: 0.15.5 + resolution: "esbuild-linux-arm@npm:0.15.5" conditions: os=linux & cpu=arm languageName: node linkType: hard @@ -7341,9 +7137,9 @@ __metadata: languageName: node linkType: hard -"esbuild-linux-mips64le@npm:0.15.3": - version: 0.15.3 - resolution: "esbuild-linux-mips64le@npm:0.15.3" +"esbuild-linux-mips64le@npm:0.15.5": + version: 0.15.5 + resolution: "esbuild-linux-mips64le@npm:0.15.5" conditions: os=linux & cpu=mips64el languageName: node linkType: hard @@ -7362,9 +7158,9 @@ __metadata: languageName: node linkType: hard -"esbuild-linux-ppc64le@npm:0.15.3": - version: 0.15.3 - resolution: "esbuild-linux-ppc64le@npm:0.15.3" +"esbuild-linux-ppc64le@npm:0.15.5": + version: 0.15.5 + resolution: "esbuild-linux-ppc64le@npm:0.15.5" conditions: os=linux & cpu=ppc64 languageName: node linkType: hard @@ -7383,9 +7179,9 @@ __metadata: languageName: node linkType: hard -"esbuild-linux-riscv64@npm:0.15.3": - version: 0.15.3 - resolution: "esbuild-linux-riscv64@npm:0.15.3" +"esbuild-linux-riscv64@npm:0.15.5": + version: 0.15.5 + resolution: "esbuild-linux-riscv64@npm:0.15.5" conditions: os=linux & cpu=riscv64 languageName: node linkType: hard @@ -7404,9 +7200,9 @@ __metadata: languageName: node linkType: hard -"esbuild-linux-s390x@npm:0.15.3": - version: 0.15.3 - resolution: "esbuild-linux-s390x@npm:0.15.3" +"esbuild-linux-s390x@npm:0.15.5": + version: 0.15.5 + resolution: "esbuild-linux-s390x@npm:0.15.5" conditions: os=linux & cpu=s390x languageName: node linkType: hard @@ -7425,9 +7221,9 @@ __metadata: languageName: node linkType: hard -"esbuild-netbsd-64@npm:0.15.3": - version: 0.15.3 - resolution: "esbuild-netbsd-64@npm:0.15.3" +"esbuild-netbsd-64@npm:0.15.5": + version: 0.15.5 + resolution: "esbuild-netbsd-64@npm:0.15.5" conditions: os=netbsd & cpu=x64 languageName: node linkType: hard @@ -7446,9 +7242,9 @@ __metadata: languageName: node linkType: hard -"esbuild-openbsd-64@npm:0.15.3": - version: 0.15.3 - resolution: "esbuild-openbsd-64@npm:0.15.3" +"esbuild-openbsd-64@npm:0.15.5": + version: 0.15.5 + resolution: "esbuild-openbsd-64@npm:0.15.5" conditions: os=openbsd & cpu=x64 languageName: node linkType: hard @@ -7467,9 +7263,9 @@ __metadata: languageName: node linkType: hard -"esbuild-sunos-64@npm:0.15.3": - version: 0.15.3 - resolution: "esbuild-sunos-64@npm:0.15.3" +"esbuild-sunos-64@npm:0.15.5": + version: 0.15.5 + resolution: "esbuild-sunos-64@npm:0.15.5" conditions: os=sunos & cpu=x64 languageName: node linkType: hard @@ -7488,9 +7284,9 @@ __metadata: languageName: node linkType: hard -"esbuild-windows-32@npm:0.15.3": - version: 0.15.3 - resolution: "esbuild-windows-32@npm:0.15.3" +"esbuild-windows-32@npm:0.15.5": + version: 0.15.5 + resolution: "esbuild-windows-32@npm:0.15.5" conditions: os=win32 & cpu=ia32 languageName: node linkType: hard @@ -7509,9 +7305,9 @@ __metadata: languageName: node linkType: hard -"esbuild-windows-64@npm:0.15.3": - version: 0.15.3 - resolution: "esbuild-windows-64@npm:0.15.3" +"esbuild-windows-64@npm:0.15.5": + version: 0.15.5 + resolution: "esbuild-windows-64@npm:0.15.5" conditions: os=win32 & cpu=x64 languageName: node linkType: hard @@ -7530,9 +7326,9 @@ __metadata: languageName: node linkType: hard -"esbuild-windows-arm64@npm:0.15.3": - version: 0.15.3 - resolution: "esbuild-windows-arm64@npm:0.15.3" +"esbuild-windows-arm64@npm:0.15.5": + version: 0.15.5 + resolution: "esbuild-windows-arm64@npm:0.15.5" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard @@ -7682,31 +7478,31 @@ __metadata: languageName: node linkType: hard -"esbuild@npm:^0.15.0": - version: 0.15.3 - resolution: "esbuild@npm:0.15.3" - dependencies: - "@esbuild/linux-loong64": 0.15.3 - esbuild-android-64: 0.15.3 - esbuild-android-arm64: 0.15.3 - esbuild-darwin-64: 0.15.3 - esbuild-darwin-arm64: 0.15.3 - esbuild-freebsd-64: 0.15.3 - esbuild-freebsd-arm64: 0.15.3 - esbuild-linux-32: 0.15.3 - esbuild-linux-64: 0.15.3 - esbuild-linux-arm: 0.15.3 - esbuild-linux-arm64: 0.15.3 - esbuild-linux-mips64le: 0.15.3 - esbuild-linux-ppc64le: 0.15.3 - esbuild-linux-riscv64: 0.15.3 - esbuild-linux-s390x: 0.15.3 - esbuild-netbsd-64: 0.15.3 - esbuild-openbsd-64: 0.15.3 - esbuild-sunos-64: 0.15.3 - esbuild-windows-32: 0.15.3 - esbuild-windows-64: 0.15.3 - esbuild-windows-arm64: 0.15.3 +"esbuild@npm:^0.15.5": + version: 0.15.5 + resolution: "esbuild@npm:0.15.5" + dependencies: + "@esbuild/linux-loong64": 0.15.5 + esbuild-android-64: 0.15.5 + esbuild-android-arm64: 0.15.5 + esbuild-darwin-64: 0.15.5 + esbuild-darwin-arm64: 0.15.5 + esbuild-freebsd-64: 0.15.5 + esbuild-freebsd-arm64: 0.15.5 + esbuild-linux-32: 0.15.5 + esbuild-linux-64: 0.15.5 + esbuild-linux-arm: 0.15.5 + esbuild-linux-arm64: 0.15.5 + esbuild-linux-mips64le: 0.15.5 + esbuild-linux-ppc64le: 0.15.5 + esbuild-linux-riscv64: 0.15.5 + esbuild-linux-s390x: 0.15.5 + esbuild-netbsd-64: 0.15.5 + esbuild-openbsd-64: 0.15.5 + esbuild-sunos-64: 0.15.5 + esbuild-windows-32: 0.15.5 + esbuild-windows-64: 0.15.5 + esbuild-windows-arm64: 0.15.5 dependenciesMeta: "@esbuild/linux-loong64": optional: true @@ -7752,7 +7548,7 @@ __metadata: optional: true bin: esbuild: bin/esbuild - checksum: d41f9c2d38fd265c3de106b9cf5d720ad20138d57669d74751b5f466c866f2d82cea39c146b100186c82b96725fd09faa88759b706ed6d8cee507d07eda35a66 + checksum: fc7f5df6542bd18dee1e61c58049ddf3d6b508d8d67eabcba455f7dbb560552e012f169a8afa2f209de554a206935fedf30d576aacdc2b46cb4da229181968fb languageName: node linkType: hard @@ -7844,9 +7640,9 @@ __metadata: languageName: node linkType: hard -"eslint-import-resolver-typescript@npm:^3.4.1": - version: 3.4.1 - resolution: "eslint-import-resolver-typescript@npm:3.4.1" +"eslint-import-resolver-typescript@npm:^3.4.2": + version: 3.4.2 + resolution: "eslint-import-resolver-typescript@npm:3.4.2" dependencies: debug: ^4.3.4 enhanced-resolve: ^5.10.0 @@ -7854,11 +7650,11 @@ __metadata: globby: ^13.1.2 is-core-module: ^2.9.0 is-glob: ^4.0.3 - synckit: ^0.8.1 + synckit: ^0.8.3 peerDependencies: eslint: "*" eslint-plugin-import: "*" - checksum: 952aaa4f25435b009e6604bf8a81acee2db064de1cefcac0628fd5167711721829e911910534f8773fbfe6a12c21d60bb0d324351ad25cd092481d9f80f6105d + checksum: e54d8c02542cc85fc9703a064111a25585a7189b61445a209792ae50b718d273e5522be44c61f149f59292570eef6a08036d988c8477da9f6d8f3c6177801319 languageName: node linkType: hard @@ -8122,30 +7918,6 @@ __metadata: languageName: node linkType: hard -"eventemitter2@npm:^6.4.3": - version: 6.4.7 - resolution: "eventemitter2@npm:6.4.7" - checksum: 1b36a77e139d6965ebf3a36c01fa00c089ae6b80faa1911e52888f40b3a7057b36a2cc45dcd1ad87cda3798fe7b97a0aabcbb8175a8b96092a23bb7d0f039e66 - languageName: node - linkType: hard - -"execa@npm:4.1.0": - version: 4.1.0 - resolution: "execa@npm:4.1.0" - dependencies: - cross-spawn: ^7.0.0 - get-stream: ^5.0.0 - human-signals: ^1.1.1 - is-stream: ^2.0.0 - merge-stream: ^2.0.0 - npm-run-path: ^4.0.0 - onetime: ^5.1.0 - signal-exit: ^3.0.2 - strip-final-newline: ^2.0.0 - checksum: e30d298934d9c52f90f3847704fd8224e849a081ab2b517bbc02f5f7732c24e56a21f14cb96a08256deffeb2d12b2b7cb7e2b014a12fb36f8d3357e06417ed55 - languageName: node - linkType: hard - "execa@npm:^5.0.0, execa@npm:^5.1.1": version: 5.1.1 resolution: "execa@npm:5.1.1" @@ -8180,15 +7952,6 @@ __metadata: languageName: node linkType: hard -"executable@npm:^4.1.1": - version: 4.1.1 - resolution: "executable@npm:4.1.1" - dependencies: - pify: ^2.2.0 - checksum: f01927ce59bccec804e171bf859a26e362c1f50aa9ebc69f7cafdcce3859d29d4b6267fd47237c18b0a1830614bd3f0ee14b7380d9bad18a4e7af9b5f0b6984f - languageName: node - linkType: hard - "exit-hook@npm:2.2.1": version: 2.2.1 resolution: "exit-hook@npm:2.2.1" @@ -8210,7 +7973,7 @@ __metadata: languageName: node linkType: hard -"expect@npm:^28.1.3": +"expect@npm:^28.0.0, expect@npm:^28.1.3": version: 28.1.3 resolution: "expect@npm:28.1.3" dependencies: @@ -8230,23 +7993,6 @@ __metadata: languageName: node linkType: hard -"extract-zip@npm:2.0.1": - version: 2.0.1 - resolution: "extract-zip@npm:2.0.1" - dependencies: - "@types/yauzl": ^2.9.1 - debug: ^4.1.1 - get-stream: ^5.1.0 - yauzl: ^2.10.0 - dependenciesMeta: - "@types/yauzl": - optional: true - bin: - extract-zip: cli.js - checksum: 8cbda9debdd6d6980819cc69734d874ddd71051c9fe5bde1ef307ebcedfe949ba57b004894b585f758b7c9eeeea0e3d87f2dda89b7d25320459c2c9643ebb635 - languageName: node - linkType: hard - "extsprintf@npm:1.3.0": version: 1.3.0 resolution: "extsprintf@npm:1.3.0" @@ -8329,24 +8075,6 @@ __metadata: languageName: node linkType: hard -"fd-slicer@npm:~1.1.0": - version: 1.1.0 - resolution: "fd-slicer@npm:1.1.0" - dependencies: - pend: ~1.2.0 - checksum: c8585fd5713f4476eb8261150900d2cb7f6ff2d87f8feb306ccc8a1122efd152f1783bdb2b8dc891395744583436bfd8081d8e63ece0ec8687eeefea394d4ff2 - languageName: node - linkType: hard - -"figures@npm:^3.2.0": - version: 3.2.0 - resolution: "figures@npm:3.2.0" - dependencies: - escape-string-regexp: ^1.0.5 - checksum: 85a6ad29e9aca80b49b817e7c89ecc4716ff14e3779d9835af554db91bac41c0f289c418923519392a1e582b4d10482ad282021330cd045bb7b80c84152f2a2b - languageName: node - linkType: hard - "file-entry-cache@npm:^6.0.1": version: 6.0.1 resolution: "file-entry-cache@npm:6.0.1" @@ -8575,18 +8303,6 @@ __metadata: languageName: node linkType: hard -"fs-extra@npm:^9.1.0": - version: 9.1.0 - resolution: "fs-extra@npm:9.1.0" - dependencies: - at-least-node: ^1.0.0 - graceful-fs: ^4.2.0 - jsonfile: ^6.0.1 - universalify: ^2.0.0 - checksum: ba71ba32e0faa74ab931b7a0031d1523c66a73e225de7426e275e238e312d07313d2da2d33e34a52aa406c8763ade5712eb3ec9ba4d9edce652bcacdc29e6b20 - languageName: node - linkType: hard - "fs-extra@npm:~7.0.1": version: 7.0.1 resolution: "fs-extra@npm:7.0.1" @@ -8803,7 +8519,7 @@ __metadata: languageName: node linkType: hard -"get-stream@npm:^5.0.0, get-stream@npm:^5.1.0": +"get-stream@npm:^5.1.0": version: 5.2.0 resolution: "get-stream@npm:5.2.0" dependencies: @@ -8836,15 +8552,6 @@ __metadata: languageName: node linkType: hard -"getos@npm:^3.2.1": - version: 3.2.1 - resolution: "getos@npm:3.2.1" - dependencies: - async: ^3.2.0 - checksum: 42fd78a66d47cebd3e09de5566cc0044e034b08f4a000a310dbd89a77b02c65d8f4002554bfa495ea5bdc4fa9d515f5ac785a7cc474ba45383cc697f865eeaf1 - languageName: node - linkType: hard - "getpass@npm:^0.1.1": version: 0.1.7 resolution: "getpass@npm:0.1.7" @@ -9396,17 +9103,6 @@ __metadata: languageName: node linkType: hard -"http-signature@npm:~1.3.6": - version: 1.3.6 - resolution: "http-signature@npm:1.3.6" - dependencies: - assert-plus: ^1.0.0 - jsprim: ^2.0.2 - sshpk: ^1.14.1 - checksum: 10be2af4764e71fee0281392937050201ee576ac755c543f570d6d87134ce5e858663fe999a7adb3e4e368e1e356d0d7fec6b9542295b875726ff615188e7a0c - languageName: node - linkType: hard - "http-status@npm:1.5.2": version: 1.5.2 resolution: "http-status@npm:1.5.2" @@ -9424,13 +9120,6 @@ __metadata: languageName: node linkType: hard -"human-signals@npm:^1.1.1": - version: 1.1.1 - resolution: "human-signals@npm:1.1.1" - checksum: d587647c9e8ec24e02821b6be7de5a0fc37f591f6c4e319b3054b43fd4c35a70a94c46fc74d8c1a43c47fde157d23acd7421f375e1c1365b09a16835b8300205 - languageName: node - linkType: hard - "human-signals@npm:^2.1.0": version: 2.1.0 resolution: "human-signals@npm:2.1.0" @@ -9699,7 +9388,7 @@ __metadata: languageName: node linkType: hard -"is-ci@npm:^3.0.0, is-ci@npm:^3.0.1": +"is-ci@npm:^3.0.1": version: 3.0.1 resolution: "is-ci@npm:3.0.1" dependencies: @@ -9797,7 +9486,7 @@ __metadata: languageName: node linkType: hard -"is-installed-globally@npm:^0.4.0, is-installed-globally@npm:~0.4.0": +"is-installed-globally@npm:^0.4.0": version: 0.4.0 resolution: "is-installed-globally@npm:0.4.0" dependencies: @@ -10250,7 +9939,7 @@ __metadata: languageName: node linkType: hard -"jest-matcher-utils@npm:^28.0.0, jest-matcher-utils@npm:^28.1.3": +"jest-matcher-utils@npm:^28.1.3": version: 28.1.3 resolution: "jest-matcher-utils@npm:28.1.3" dependencies: @@ -10829,18 +10518,6 @@ __metadata: languageName: node linkType: hard -"jsprim@npm:^2.0.2": - version: 2.0.2 - resolution: "jsprim@npm:2.0.2" - dependencies: - assert-plus: 1.0.0 - extsprintf: 1.3.0 - json-schema: 0.4.0 - verror: 1.10.0 - checksum: d175f6b1991e160cb0aa39bc857da780e035611986b5492f32395411879fdaf4e513d98677f08f7352dac93a16b66b8361c674b86a3fa406e2e7af6b26321838 - languageName: node - linkType: hard - "jsx-ast-utils@npm:^2.4.1 || ^3.0.0": version: 3.3.3 resolution: "jsx-ast-utils@npm:3.3.3" @@ -10899,13 +10576,6 @@ __metadata: languageName: node linkType: hard -"lazy-ass@npm:^1.6.0": - version: 1.6.0 - resolution: "lazy-ass@npm:1.6.0" - checksum: 5a3ebb17915b03452320804466345382a6c25ac782ec4874fecdb2385793896cd459be2f187dc7def8899180c32ee0ab9a1aa7fe52193ac3ff3fe29bb0591729 - languageName: node - linkType: hard - "leven@npm:^3.1.0": version: 3.1.0 resolution: "leven@npm:3.1.0" @@ -10969,27 +10639,6 @@ __metadata: languageName: node linkType: hard -"listr2@npm:^3.8.3": - version: 3.14.0 - resolution: "listr2@npm:3.14.0" - dependencies: - cli-truncate: ^2.1.0 - colorette: ^2.0.16 - log-update: ^4.0.0 - p-map: ^4.0.0 - rfdc: ^1.3.0 - rxjs: ^7.5.1 - through: ^2.3.8 - wrap-ansi: ^7.0.0 - peerDependencies: - enquirer: ">= 2.3.0 < 3" - peerDependenciesMeta: - enquirer: - optional: true - checksum: fdb8b2d6bdf5df9371ebd5082bee46c6d0ca3d1e5f2b11fbb5a127839855d5f3da9d4968fce94f0a5ec67cac2459766abbb1faeef621065ebb1829b11ef9476d - languageName: node - linkType: hard - "listr2@npm:^4.0.5": version: 4.0.5 resolution: "listr2@npm:4.0.5" @@ -11107,13 +10756,6 @@ __metadata: languageName: node linkType: hard -"lodash.once@npm:^4.1.1": - version: 4.1.1 - resolution: "lodash.once@npm:4.1.1" - checksum: d768fa9f9b4e1dc6453be99b753906f58990e0c45e7b2ca5a3b40a33111e5d17f6edf2f768786e2716af90a8e78f8f91431ab8435f761fef00f9b0c256f6d245 - languageName: node - linkType: hard - "lodash.padend@npm:^4.6.1": version: 4.6.1 resolution: "lodash.padend@npm:4.6.1" @@ -11678,7 +11320,19 @@ __metadata: languageName: node linkType: hard -"mlly@npm:^0.5.3, mlly@npm:^0.5.9": +"mlly@npm:^0.5.13": + version: 0.5.13 + resolution: "mlly@npm:0.5.13" + dependencies: + acorn: ^8.8.0 + pathe: ^0.3.4 + pkg-types: ^0.3.3 + ufo: ^0.8.5 + checksum: b3b256f334b83d70715b19fb97b9cf9a1010fbe06e1cb1e74c7855cecf08ce8c251f51345f41ee55a8ccad14426b48758458c798714de5a6487aa77a546417cf + languageName: node + linkType: hard + +"mlly@npm:^0.5.3": version: 0.5.12 resolution: "mlly@npm:0.5.12" dependencies: @@ -12035,7 +11689,7 @@ __metadata: languageName: node linkType: hard -"npm-run-path@npm:^4.0.0, npm-run-path@npm:^4.0.1": +"npm-run-path@npm:^4.0.1": version: 4.0.1 resolution: "npm-run-path@npm:4.0.1" dependencies: @@ -12264,13 +11918,6 @@ __metadata: languageName: node linkType: hard -"ospath@npm:^1.2.2": - version: 1.2.2 - resolution: "ospath@npm:1.2.2" - checksum: 505f48a4f4f1c557d6c656ec985707726e3714721680139be037613e903aa8c8fa4ddd8d1342006f9b2dc0065e6e20f8b7bea2ee05354f31257044790367b347 - languageName: node - linkType: hard - "p-cancelable@npm:^1.0.0": version: 1.1.0 resolution: "p-cancelable@npm:1.1.0" @@ -12512,13 +12159,20 @@ __metadata: languageName: node linkType: hard -"pathe@npm:^0.3.0, pathe@npm:^0.3.3, pathe@npm:^0.3.4": +"pathe@npm:^0.3.0, pathe@npm:^0.3.4": version: 0.3.4 resolution: "pathe@npm:0.3.4" checksum: 4ebed2a60e5b7e88b2752137606e228570af2f0e06d5964c92f0b47ada3523842a1c73feb9976a054a47b96789a62ab861fb3b8170e5f80c83b4625e1d42c2d7 languageName: node linkType: hard +"pathe@npm:^0.3.5": + version: 0.3.5 + resolution: "pathe@npm:0.3.5" + checksum: 734f54de80dae59a1cc6e62eb09bbd8f88062d118a01b8a428423c168160cee44d6a09c415ff1d7c410ee4a767a76206c13da6af289e11f6eb1a040382a28edd + languageName: node + linkType: hard + "pathval@npm:^1.1.1": version: 1.1.1 resolution: "pathval@npm:1.1.1" @@ -12533,13 +12187,6 @@ __metadata: languageName: node linkType: hard -"pend@npm:~1.2.0": - version: 1.2.0 - resolution: "pend@npm:1.2.0" - checksum: 6c72f5243303d9c60bd98e6446ba7d30ae29e3d56fdb6fae8767e8ba6386f33ee284c97efe3230a0d0217e2b1723b8ab490b1bbf34fcbb2180dbc8a9de47850d - languageName: node - linkType: hard - "perfect-debounce@npm:^0.1.3": version: 0.1.3 resolution: "perfect-debounce@npm:0.1.3" @@ -12577,7 +12224,7 @@ __metadata: languageName: node linkType: hard -"pify@npm:^2.2.0, pify@npm:^2.3.0": +"pify@npm:^2.3.0": version: 2.3.0 resolution: "pify@npm:2.3.0" checksum: 9503aaeaf4577acc58642ad1d25c45c6d90288596238fb68f82811c08104c800e5a7870398e9f015d82b44ecbcbef3dc3d4251a1cbb582f6e5959fe09884b2ba @@ -12694,7 +12341,7 @@ __metadata: languageName: node linkType: hard -"pretty-bytes@npm:5.6.0, pretty-bytes@npm:^5.6.0": +"pretty-bytes@npm:5.6.0": version: 5.6.0 resolution: "pretty-bytes@npm:5.6.0" checksum: 9c082500d1e93434b5b291bd651662936b8bd6204ec9fa17d563116a192d6d86b98f6d328526b4e8d783c07d5499e2614a807520249692da9ec81564b2f439cd @@ -12845,13 +12492,6 @@ __metadata: languageName: node linkType: hard -"proxy-from-env@npm:1.0.0": - version: 1.0.0 - resolution: "proxy-from-env@npm:1.0.0" - checksum: 292e28d1de0c315958d71d8315eb546dd3cd8c8cbc2dab7c54eeb9f5c17f421771964ad0b5e1f77011bab2305bdae42e1757ce33bdb1ccc3e87732322a8efcf1 - languageName: node - linkType: hard - "psl@npm:^1.1.28": version: 1.9.0 resolution: "psl@npm:1.9.0" @@ -13305,15 +12945,6 @@ __metadata: languageName: node linkType: hard -"request-progress@npm:^3.0.0": - version: 3.0.0 - resolution: "request-progress@npm:3.0.0" - dependencies: - throttleit: ^1.0.0 - checksum: 6ea1761dcc8a8b7b5894afd478c0286aa31bd69438d7050294bd4fd0d0b3e09b5cde417d38deef9c49809039c337d8744e4bb49d8632b0c3e4ffa5e8a687e0fd - languageName: node - linkType: hard - "request@npm:^2.88.2": version: 2.88.2 resolution: "request@npm:2.88.2" @@ -13579,7 +13210,7 @@ __metadata: languageName: node linkType: hard -"rollup-plugin-esbuild@npm:^4.9.1": +"rollup-plugin-esbuild@npm:^4.9.3": version: 4.9.3 resolution: "rollup-plugin-esbuild@npm:4.9.3" dependencies: @@ -13595,35 +13226,18 @@ __metadata: languageName: node linkType: hard -"rollup-plugin-typescript2@npm:0.32.1": - version: 0.32.1 - resolution: "rollup-plugin-typescript2@npm:0.32.1" - dependencies: - "@rollup/pluginutils": ^4.1.2 - find-cache-dir: ^3.3.2 - fs-extra: ^10.0.0 - resolve: ^1.20.0 - tslib: ^2.4.0 - peerDependencies: - rollup: ">=1.26.3" - typescript: ">=2.4.0" - checksum: f41ab63ad1e4d21ec99fbf4a367abdf29ef95c41fd0a5612f2b60a8619f5fe633f75982bfbaf8fe9632bddfb6730ff9cb38be77d82561088168fcaccd2cd1e85 - languageName: node - linkType: hard - -"rollup-plugin-typescript2@patch:rollup-plugin-typescript2@npm:0.32.1#.yarn/patches/rollup-plugin-typescript2-npm-0.32.1-b5887420f2.patch::locator=%40discordjs%2Fdiscord.js%40workspace%3A.": - version: 0.32.1 - resolution: "rollup-plugin-typescript2@patch:rollup-plugin-typescript2@npm%3A0.32.1#.yarn/patches/rollup-plugin-typescript2-npm-0.32.1-b5887420f2.patch::version=0.32.1&hash=22079b&locator=%40discordjs%2Fdiscord.js%40workspace%3A." +"rollup-plugin-typescript2@npm:^0.33.0": + version: 0.33.0 + resolution: "rollup-plugin-typescript2@npm:0.33.0" dependencies: "@rollup/pluginutils": ^4.1.2 find-cache-dir: ^3.3.2 fs-extra: ^10.0.0 - resolve: ^1.20.0 tslib: ^2.4.0 peerDependencies: rollup: ">=1.26.3" typescript: ">=2.4.0" - checksum: 18fd317f2edaf0c13a95c0650fab8d2c3ff48ae60d6d48b29506650d491fb546617a47a35dd427d4160305bbf7684f5c3f734548ecc31a6fff62d05dc89ce700 + checksum: 03e3077c5197f512222f11ebb8b7682c97ddbd6332189ea06884aa3e778a04107483d340f3be94dbc471595e8908687dd841b81976855485486097b6bb095f65 languageName: node linkType: hard @@ -13650,9 +13264,9 @@ __metadata: languageName: node linkType: hard -"rollup@npm:^2.77.2": - version: 2.78.0 - resolution: "rollup@npm:2.78.0" +"rollup@npm:^2.78.0": + version: 2.78.1 + resolution: "rollup@npm:2.78.1" dependencies: fsevents: ~2.3.2 dependenciesMeta: @@ -13660,7 +13274,7 @@ __metadata: optional: true bin: rollup: dist/bin/rollup - checksum: 01b5a7ae082d2a14201c973ee973099f0899cc87b65063d5ca5a77c05eeefb3b51e14b1346cf1a0fc879ac2cbb87239d4f960917bfc30b7c52f5dce50a7f56e7 + checksum: 9034814383ca5bdb4bea6d499270aeb31cdb0bb884f81b0c6a1d19c63cc973f040e6ee09b7af8a7169dd231c090f4b44ef8b99c4bfdf884aceeb3dcefb8cfa14 languageName: node linkType: hard @@ -13673,7 +13287,7 @@ __metadata: languageName: node linkType: hard -"rxjs@npm:^7.0.0, rxjs@npm:^7.5.1, rxjs@npm:^7.5.5": +"rxjs@npm:^7.0.0, rxjs@npm:^7.5.5": version: 7.5.6 resolution: "rxjs@npm:7.5.6" dependencies: @@ -14121,7 +13735,7 @@ __metadata: languageName: node linkType: hard -"sshpk@npm:^1.14.1, sshpk@npm:^1.7.0": +"sshpk@npm:^1.7.0": version: 1.17.0 resolution: "sshpk@npm:1.17.0" dependencies: @@ -14479,7 +14093,7 @@ __metadata: languageName: node linkType: hard -"supports-color@npm:^8.0.0, supports-color@npm:^8.1.0, supports-color@npm:^8.1.1": +"supports-color@npm:^8.0.0, supports-color@npm:^8.1.0": version: 8.1.1 resolution: "supports-color@npm:8.1.1" dependencies: @@ -14525,7 +14139,7 @@ __metadata: languageName: node linkType: hard -"synckit@npm:^0.8.1": +"synckit@npm:^0.8.3": version: 0.8.3 resolution: "synckit@npm:0.8.3" dependencies: @@ -14709,13 +14323,6 @@ __metadata: languageName: node linkType: hard -"throttleit@npm:^1.0.0": - version: 1.0.0 - resolution: "throttleit@npm:1.0.0" - checksum: 1b2db4d2454202d589e8236c07a69d2fab838876d370030ebea237c34c0a7d1d9cf11c29f994531ebb00efd31e9728291042b7754f2798a8352ec4463455b659 - languageName: node - linkType: hard - "through2@npm:^2.0.0": version: 2.0.5 resolution: "through2@npm:2.0.5" @@ -14785,14 +14392,14 @@ __metadata: languageName: node linkType: hard -"tinyspy@npm:^1.0.0": - version: 1.0.0 - resolution: "tinyspy@npm:1.0.0" - checksum: f9a7cea406db9b0f99a4ef162eb0a45d88fc36facbc309702c8d568283baa363ab3c4138d8402fbfdef7a8d3157ff7cfae3e99ec6c75d8f684bd7b23485b5ec5 +"tinyspy@npm:^1.0.2": + version: 1.0.2 + resolution: "tinyspy@npm:1.0.2" + checksum: 32096121aa8d52bb625ad62c9314b3e4daba4ab9ac428217b12b1e1dfe9860e3c94d54a7affa279cc70dc6f10d88c6ba46b51de68896b318a06d02f05e87dcc3 languageName: node linkType: hard -"tmp@npm:^0.2.1, tmp@npm:~0.2.1": +"tmp@npm:^0.2.1": version: 0.2.1 resolution: "tmp@npm:0.2.1" dependencies: @@ -15457,9 +15064,9 @@ __metadata: languageName: node linkType: hard -"unbuild@npm:^0.8.8": - version: 0.8.8 - resolution: "unbuild@npm:0.8.8" +"unbuild@npm:^0.8.9": + version: 0.8.9 + resolution: "unbuild@npm:0.8.9" dependencies: "@rollup/plugin-alias": ^3.1.9 "@rollup/plugin-commonjs": ^22.0.2 @@ -15469,29 +15076,29 @@ __metadata: "@rollup/pluginutils": ^4.2.1 chalk: ^5.0.1 consola: ^2.15.3 - defu: ^6.0.0 - esbuild: ^0.15.0 + defu: ^6.1.0 + esbuild: ^0.15.5 globby: ^13.1.2 hookable: ^5.1.1 jiti: ^1.14.0 magic-string: ^0.26.2 mkdirp: ^1.0.4 mkdist: ^0.3.13 - mlly: ^0.5.9 + mlly: ^0.5.13 mri: ^1.2.0 - pathe: ^0.3.3 + pathe: ^0.3.5 pkg-types: ^0.3.3 pretty-bytes: ^6.0.0 rimraf: ^3.0.2 - rollup: ^2.77.2 + rollup: ^2.78.0 rollup-plugin-dts: ^4.2.2 - rollup-plugin-esbuild: ^4.9.1 + rollup-plugin-esbuild: ^4.9.3 scule: ^0.3.2 typescript: ^4.7.4 untyped: ^0.4.5 bin: unbuild: dist/cli.mjs - checksum: 892deeca45684c62917b3c84ed4273826e256f69b983042bee06e8a28829661b1c2c5ee554b70c6c3b6b4f0aa26beeaa8adf30e7e97a2be0a65017518ac44830 + checksum: e92327003457bf44724cffd585b2c10edf79557f9b51d87eb321c54b30a63e529cbe1bd17dcc841a3f01905c0d46f8048d76fffa401bb27fdf62f512c213db8a languageName: node linkType: hard @@ -15513,13 +15120,20 @@ __metadata: languageName: node linkType: hard -"undici@npm:^5.2.0, undici@npm:^5.8.2": +"undici@npm:^5.2.0": version: 5.8.2 resolution: "undici@npm:5.8.2" checksum: 726e04bb37e2e285b4f632600c792efc9eaa5e06e37f9f34338352ac5e1dbd8ae3cdd12dd8761abfecffc5f200d1c7b91b41efb3a31c4e804ea341e5808ddfcf languageName: node linkType: hard +"undici@npm:^5.9.1": + version: 5.9.1 + resolution: "undici@npm:5.9.1" + checksum: 8acabbac8e18943ff822574f831d03d65e697e66ef486a679763f7778f37b28980caf7097ededf4017b58c099809e8efd8509a6688f60638360fb86ef47a59df + languageName: node + linkType: hard + "unicode-canonical-property-names-ecmascript@npm:^2.0.0": version: 2.0.0 resolution: "unicode-canonical-property-names-ecmascript@npm:2.0.0" @@ -15592,39 +15206,32 @@ __metadata: languageName: node linkType: hard -"unocss@npm:^0.45.6": - version: 0.45.6 - resolution: "unocss@npm:0.45.6" - dependencies: - "@unocss/cli": 0.45.6 - "@unocss/core": 0.45.6 - "@unocss/preset-attributify": 0.45.6 - "@unocss/preset-icons": 0.45.6 - "@unocss/preset-mini": 0.45.6 - "@unocss/preset-tagify": 0.45.6 - "@unocss/preset-typography": 0.45.6 - "@unocss/preset-uno": 0.45.6 - "@unocss/preset-web-fonts": 0.45.6 - "@unocss/preset-wind": 0.45.6 - "@unocss/reset": 0.45.6 - "@unocss/transformer-attributify-jsx": 0.45.6 - "@unocss/transformer-compile-class": 0.45.6 - "@unocss/transformer-directives": 0.45.6 - "@unocss/transformer-variant-group": 0.45.6 - "@unocss/vite": 0.45.6 - peerDependencies: - "@unocss/webpack": 0.45.6 +"unocss@npm:^0.45.9": + version: 0.45.9 + resolution: "unocss@npm:0.45.9" + dependencies: + "@unocss/cli": 0.45.9 + "@unocss/core": 0.45.9 + "@unocss/preset-attributify": 0.45.9 + "@unocss/preset-icons": 0.45.9 + "@unocss/preset-mini": 0.45.9 + "@unocss/preset-tagify": 0.45.9 + "@unocss/preset-typography": 0.45.9 + "@unocss/preset-uno": 0.45.9 + "@unocss/preset-web-fonts": 0.45.9 + "@unocss/preset-wind": 0.45.9 + "@unocss/reset": 0.45.9 + "@unocss/transformer-attributify-jsx": 0.45.9 + "@unocss/transformer-compile-class": 0.45.9 + "@unocss/transformer-directives": 0.45.9 + "@unocss/transformer-variant-group": 0.45.9 + "@unocss/vite": 0.45.9 + peerDependencies: + "@unocss/webpack": 0.45.9 peerDependenciesMeta: "@unocss/webpack": optional: true - checksum: 9f1ad675ffc50fce06a8d39b4be9ac0e3de5b73b38c8780df9ea9b40c6f5a5bc0873fa2ff4efd7a05a29027b304aaab75cd1cd9e559ba50d8b0b3bdccff57286 - languageName: node - linkType: hard - -"untildify@npm:^4.0.0": - version: 4.0.0 - resolution: "untildify@npm:4.0.0" - checksum: 39ced9c418a74f73f0a56e1ba4634b4d959422dff61f4c72a8e39f60b99380c1b45ed776fbaa0a4101b157e4310d873ad7d114e8534ca02609b4916bb4187fb9 + checksum: 2ab9a5893bc1b33cf97fb9741177847d289eb99a53a96fe9547b48e7a282283f7dd3b2bcb02d5df7c464c50432c6db960515b34f7a18ee5d75055b9a06f22668 languageName: node linkType: hard @@ -15823,25 +15430,25 @@ __metadata: languageName: node linkType: hard -"vercel@npm:^28.0.1": - version: 28.0.1 - resolution: "vercel@npm:28.0.1" +"vercel@npm:^28.1.0": + version: 28.1.0 + resolution: "vercel@npm:28.1.0" dependencies: "@vercel/build-utils": 5.3.1 - "@vercel/go": 2.1.1 + "@vercel/go": 2.2.0 "@vercel/hydrogen": 0.0.14 - "@vercel/next": 3.1.18 + "@vercel/next": 3.1.19 "@vercel/node": 2.5.8 "@vercel/python": 3.1.9 "@vercel/redwood": 1.0.18 "@vercel/remix": 1.0.19 - "@vercel/ruby": 1.3.26 + "@vercel/ruby": 1.3.27 "@vercel/static-build": 1.0.18 update-notifier: 5.1.0 bin: vc: dist/index.js vercel: dist/index.js - checksum: f09df68e7c30c5cd30a31ab73b0748e77e72123b8cb68a6b9be3a57f02bedc06179e025b4585887073ffbe62e6006a7c5e89d4bae8ef6f3efaac00ce3a9a39cf + checksum: aa25e12a67eab2ebc18fbc0b4749460e8f8ccef2b50b716f0b917ce3562e06494a3d68660a5f40549d188337b4e1e78f2e79f32da6d2168cccc3e6b1342b2e6f languageName: node linkType: hard @@ -15888,9 +15495,9 @@ __metadata: languageName: node linkType: hard -"vitest@npm:0.22.0, vitest@npm:^0.22.0": - version: 0.22.0 - resolution: "vitest@npm:0.22.0" +"vitest@npm:0.22.1, vitest@npm:^0.22.1": + version: 0.22.1 + resolution: "vitest@npm:0.22.1" dependencies: "@types/chai": ^4.3.3 "@types/chai-subset": ^1.3.3 @@ -15899,7 +15506,7 @@ __metadata: debug: ^4.3.4 local-pkg: ^0.4.2 tinypool: ^0.2.4 - tinyspy: ^1.0.0 + tinyspy: ^1.0.2 vite: ^2.9.12 || ^3.0.0-0 peerDependencies: "@edge-runtime/vm": "*" @@ -15920,7 +15527,7 @@ __metadata: optional: true bin: vitest: vitest.mjs - checksum: 717ae0ba4b70fae97cde7daeac256e1b973ce5673737a4f8c436d50a8eea4f5109c9015dbbd762a9d36b24a29d2ccd0f126fedc1246026d8a0ed9df214885497 + checksum: 7abe50ceb51181e77cd62eb3a07c2da17f13078f09be34cc2e98f1f94a77eba33a56c644d48ae16bb474945ffc1cfc8664b1f4976c3de495c5e474057420c4ca languageName: node linkType: hard @@ -16278,16 +15885,6 @@ __metadata: languageName: node linkType: hard -"yauzl@npm:^2.10.0": - version: 2.10.0 - resolution: "yauzl@npm:2.10.0" - dependencies: - buffer-crc32: ~0.2.3 - fd-slicer: ~1.1.0 - checksum: 7f21fe0bbad6e2cb130044a5d1d0d5a0e5bf3d8d4f8c4e6ee12163ce798fee3de7388d22a7a0907f563ac5f9d40f8699a223d3d5c1718da90b0156da6904022b - languageName: node - linkType: hard - "yn@npm:3.1.1": version: 3.1.1 resolution: "yn@npm:3.1.1" From d2f5b5b539e649210d901bf1da401ef420820ebd Mon Sep 17 00:00:00 2001 From: iCrawl Date: Mon, 22 Aug 2022 09:57:26 +0200 Subject: [PATCH 029/155] chore(ws): release @discordjs/ws@0.3.0 --- packages/ws/CHANGELOG.md | 25 +++++++++++++++++++++++++ packages/ws/package.json | 2 +- 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/packages/ws/CHANGELOG.md b/packages/ws/CHANGELOG.md index f1ca67ab6e2c..946fee58da8d 100644 --- a/packages/ws/CHANGELOG.md +++ b/packages/ws/CHANGELOG.md @@ -2,6 +2,31 @@ All notable changes to this project will be documented in this file. +# [@discordjs/ws@0.3.0](https://github.com/discordjs/discord.js/compare/@discordjs/ws@0.2.0...@discordjs/ws@0.3.0) - (2022-08-22) + +## Bug Fixes + +- **WebSocketShard#destroy:** Wait for close and cleanup listeners (#8479) ([acdafe6](https://github.com/discordjs/discord.js/commit/acdafe60c7aa1ac5a3d358934c055c297080a944)) +- **WebSocketManager#connect:** Check if we have enough sessions (#8481) ([4fd4252](https://github.com/discordjs/discord.js/commit/4fd42528fea6127e6468a651f9544913c19ade4d)) +- **WebSocketShard:** Always reconnect on disconnected with 1000 (#8405) ([359f688](https://github.com/discordjs/discord.js/commit/359f6885558fcfb3151971ab589077a89ee71a01)) +- **WebSocketShard:** Emit errors directly instead of objects (#8406) ([3161e1a](https://github.com/discordjs/discord.js/commit/3161e1a1acfbf929ecf33958fa1657553dd9bc1e)) + +## Documentation + +- Fence examples in codeblocks ([193b252](https://github.com/discordjs/discord.js/commit/193b252672440a860318d3c2968aedd9cb88e0ce)) + +## Features + +- **website:** Show `constructor` information (#8540) ([e42fd16](https://github.com/discordjs/discord.js/commit/e42fd1636973b10dd7ed6fb4280ee1a4a8f82007)) +- **website:** Render `@defaultValue` blocks (#8527) ([8028813](https://github.com/discordjs/discord.js/commit/8028813825e7708915ea892760c1003afd60df2f)) +- **website:** Render tsdoc examples (#8494) ([7116647](https://github.com/discordjs/discord.js/commit/7116647947e413da59fbf493ed5251ddcd710ce7)) +- **WebSocketShard:** Support new resume url (#8480) ([bc06cc6](https://github.com/discordjs/discord.js/commit/bc06cc638d2f57ab5c600e8cdb6afc8eb2180166)) + +## Refactor + +- **website:** Adjust typography (#8503) ([0f83402](https://github.com/discordjs/discord.js/commit/0f834029850d2448981596cf082ff59917018d66)) +- Docs design (#8487) ([4ab1d09](https://github.com/discordjs/discord.js/commit/4ab1d09997a18879a9eb9bda39df6f15aa22557e)) + # [@discordjs/ws@0.2.0](https://github.com/discordjs/discord.js/compare/@discordjs/ws@0.1.0...@discordjs/ws@0.2.0) - (2022-07-30) ## Bug Fixes diff --git a/packages/ws/package.json b/packages/ws/package.json index 2383643b29de..c8fa053d1ca9 100644 --- a/packages/ws/package.json +++ b/packages/ws/package.json @@ -1,6 +1,6 @@ { "name": "@discordjs/ws", - "version": "0.2.0", + "version": "0.3.0", "description": "Wrapper around Discord's gateway", "scripts": { "test": "vitest run", From 3621e5efbd6bb30d42d97de6af1ecbf055df3439 Mon Sep 17 00:00:00 2001 From: iCrawl Date: Mon, 22 Aug 2022 10:01:34 +0200 Subject: [PATCH 030/155] chore(rest): release @discordjs/rest@1.1.0 --- packages/rest/CHANGELOG.md | 12 ++++++++++++ packages/rest/package.json | 2 +- 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/packages/rest/CHANGELOG.md b/packages/rest/CHANGELOG.md index 45f9183909bb..ac84116b3744 100644 --- a/packages/rest/CHANGELOG.md +++ b/packages/rest/CHANGELOG.md @@ -2,6 +2,18 @@ All notable changes to this project will be documented in this file. +# [@discordjs/rest@1.1.0](https://github.com/discordjs/discord.js/compare/@discordjs/rest@1.0.1...@discordjs/rest@1.1.0) - (2022-08-22) + +## Features + +- **website:** Show `constructor` information (#8540) ([e42fd16](https://github.com/discordjs/discord.js/commit/e42fd1636973b10dd7ed6fb4280ee1a4a8f82007)) +- **website:** Render `@defaultValue` blocks (#8527) ([8028813](https://github.com/discordjs/discord.js/commit/8028813825e7708915ea892760c1003afd60df2f)) +- **WebSocketShard:** Support new resume url (#8480) ([bc06cc6](https://github.com/discordjs/discord.js/commit/bc06cc638d2f57ab5c600e8cdb6afc8eb2180166)) + +## Refactor + +- Docs design (#8487) ([4ab1d09](https://github.com/discordjs/discord.js/commit/4ab1d09997a18879a9eb9bda39df6f15aa22557e)) + # [@discordjs/rest@0.6.0](https://github.com/discordjs/discord.js/compare/@discordjs/rest@0.5.0...@discordjs/rest@0.6.0) - (2022-07-17) ## Documentation diff --git a/packages/rest/package.json b/packages/rest/package.json index a22bab1b0fd0..e6f1bbd9e5bc 100644 --- a/packages/rest/package.json +++ b/packages/rest/package.json @@ -1,6 +1,6 @@ { "name": "@discordjs/rest", - "version": "1.0.1", + "version": "1.1.0", "description": "The REST API for discord.js", "scripts": { "test": "vitest run", From 19e1f5d0ca37b810081ca9f7f46cc3d438fc3224 Mon Sep 17 00:00:00 2001 From: iCrawl Date: Mon, 22 Aug 2022 10:04:03 +0200 Subject: [PATCH 031/155] chore(proxy): release @discordjs/proxy@1.1.0 --- packages/proxy/CHANGELOG.md | 34 ++++++++++++++++++++++++++++++++++ packages/proxy/package.json | 2 +- 2 files changed, 35 insertions(+), 1 deletion(-) diff --git a/packages/proxy/CHANGELOG.md b/packages/proxy/CHANGELOG.md index 64fbfe7e820e..f67eeb4833a9 100644 --- a/packages/proxy/CHANGELOG.md +++ b/packages/proxy/CHANGELOG.md @@ -2,6 +2,40 @@ All notable changes to this project will be documented in this file. +# [@discordjs/proxy@1.1.0](https://github.com/discordjs/discord.js/tree/@discordjs/proxy@1.1.0) - (2022-08-22) + +## Bug Fixes + +- **proxyRequests:** Typo in error message (#8537) ([dd44e8b](https://github.com/discordjs/discord.js/commit/dd44e8b6ec141e630af4543bd3babcce39aa2887)) +- **proxy-container:** Proper deps (#8120) ([17867f9](https://github.com/discordjs/discord.js/commit/17867f9154d0dd16357f4ff29da641e23a33a9fa)) +- **proxy:** Add docs script ([a45bef4](https://github.com/discordjs/discord.js/commit/a45bef4cad77dac1a4138fd0d52b769ce09b5678)) + +## Documentation + +- Add codecov coverage badge to readmes (#8226) ([f6db285](https://github.com/discordjs/discord.js/commit/f6db285c073898a749fe4591cbd4463d1896daf5)) + +## Features + +- **website:** Show `constructor` information (#8540) ([e42fd16](https://github.com/discordjs/discord.js/commit/e42fd1636973b10dd7ed6fb4280ee1a4a8f82007)) +- Codecov (#8219) ([f10f4cd](https://github.com/discordjs/discord.js/commit/f10f4cdcd88ca6be7ec735ed3a415ba13da83db0)) +- Proxy container (#8000) ([2681929](https://github.com/discordjs/discord.js/commit/2681929e4263032ad34a99ecb42465c320b271ba)) +- **docgen:** Update typedoc ([b3346f4](https://github.com/discordjs/discord.js/commit/b3346f4b9b3d4f96443506643d4631dc1c6d7b21)) +- Website (#8043) ([127931d](https://github.com/discordjs/discord.js/commit/127931d1df7a2a5c27923c2f2151dbf3824e50cc)) +- **docgen:** Typescript support ([3279b40](https://github.com/discordjs/discord.js/commit/3279b40912e6aa61507bedb7db15a2b8668de44b)) +- Docgen package (#8029) ([8b979c0](https://github.com/discordjs/discord.js/commit/8b979c0245c42fd824d8e98745ee869f5360fc86)) +- Use vitest instead of jest for more speed ([8d8e6c0](https://github.com/discordjs/discord.js/commit/8d8e6c03decd7352a2aa180f6e5bc1a13602539b)) +- Add scripts package for locally used scripts ([f2ae1f9](https://github.com/discordjs/discord.js/commit/f2ae1f9348bfd893332a9060f71a8a5f272a1b8b)) +- @discordjs/proxy (#7925) ([1ba2d2a](https://github.com/discordjs/discord.js/commit/1ba2d2a898613e5fcc119a97dce935f4db91162c)) + +## Refactor + +- Docs design (#8487) ([4ab1d09](https://github.com/discordjs/discord.js/commit/4ab1d09997a18879a9eb9bda39df6f15aa22557e)) +- Move all the config files to root (#8033) ([769ea0b](https://github.com/discordjs/discord.js/commit/769ea0bfe78c4f1d413c6b397c604ffe91e39c6a)) + +## Styling + +- Cleanup tests and tsup configs ([6b8ef20](https://github.com/discordjs/discord.js/commit/6b8ef20cb3af5b5cfd176dd0aa0a1a1e98551629)) + # [@discordjs/proxy@1.0.0](https://github.com/discordjs/discord.js/tree/@discordjs/proxy@1.1.0) - (2022-07-17) ## Bug Fixes diff --git a/packages/proxy/package.json b/packages/proxy/package.json index 0fd75d588c19..c6a967af324d 100644 --- a/packages/proxy/package.json +++ b/packages/proxy/package.json @@ -1,6 +1,6 @@ { "name": "@discordjs/proxy", - "version": "1.0.1", + "version": "1.1.0", "description": "Tools for running an HTTP proxy for Discord's API", "scripts": { "test": "vitest run", From cd6b365b17d73e05507c2fea592ab0527d1eebfa Mon Sep 17 00:00:00 2001 From: iCrawl Date: Mon, 22 Aug 2022 10:06:49 +0200 Subject: [PATCH 032/155] chore: changelog --- packages/proxy/CHANGELOG.md | 24 ++---------------------- 1 file changed, 2 insertions(+), 22 deletions(-) diff --git a/packages/proxy/CHANGELOG.md b/packages/proxy/CHANGELOG.md index f67eeb4833a9..55765ffea203 100644 --- a/packages/proxy/CHANGELOG.md +++ b/packages/proxy/CHANGELOG.md @@ -2,41 +2,21 @@ All notable changes to this project will be documented in this file. -# [@discordjs/proxy@1.1.0](https://github.com/discordjs/discord.js/tree/@discordjs/proxy@1.1.0) - (2022-08-22) +# [@discordjs/proxy@1.1.0](https://github.com/discordjs/discord.js/compare/@discordjs/proxy@1.0.1...@discordjs/proxy@1.1.0) - (2022-08-22) ## Bug Fixes - **proxyRequests:** Typo in error message (#8537) ([dd44e8b](https://github.com/discordjs/discord.js/commit/dd44e8b6ec141e630af4543bd3babcce39aa2887)) -- **proxy-container:** Proper deps (#8120) ([17867f9](https://github.com/discordjs/discord.js/commit/17867f9154d0dd16357f4ff29da641e23a33a9fa)) -- **proxy:** Add docs script ([a45bef4](https://github.com/discordjs/discord.js/commit/a45bef4cad77dac1a4138fd0d52b769ce09b5678)) - -## Documentation - -- Add codecov coverage badge to readmes (#8226) ([f6db285](https://github.com/discordjs/discord.js/commit/f6db285c073898a749fe4591cbd4463d1896daf5)) ## Features - **website:** Show `constructor` information (#8540) ([e42fd16](https://github.com/discordjs/discord.js/commit/e42fd1636973b10dd7ed6fb4280ee1a4a8f82007)) -- Codecov (#8219) ([f10f4cd](https://github.com/discordjs/discord.js/commit/f10f4cdcd88ca6be7ec735ed3a415ba13da83db0)) -- Proxy container (#8000) ([2681929](https://github.com/discordjs/discord.js/commit/2681929e4263032ad34a99ecb42465c320b271ba)) -- **docgen:** Update typedoc ([b3346f4](https://github.com/discordjs/discord.js/commit/b3346f4b9b3d4f96443506643d4631dc1c6d7b21)) -- Website (#8043) ([127931d](https://github.com/discordjs/discord.js/commit/127931d1df7a2a5c27923c2f2151dbf3824e50cc)) -- **docgen:** Typescript support ([3279b40](https://github.com/discordjs/discord.js/commit/3279b40912e6aa61507bedb7db15a2b8668de44b)) -- Docgen package (#8029) ([8b979c0](https://github.com/discordjs/discord.js/commit/8b979c0245c42fd824d8e98745ee869f5360fc86)) -- Use vitest instead of jest for more speed ([8d8e6c0](https://github.com/discordjs/discord.js/commit/8d8e6c03decd7352a2aa180f6e5bc1a13602539b)) -- Add scripts package for locally used scripts ([f2ae1f9](https://github.com/discordjs/discord.js/commit/f2ae1f9348bfd893332a9060f71a8a5f272a1b8b)) -- @discordjs/proxy (#7925) ([1ba2d2a](https://github.com/discordjs/discord.js/commit/1ba2d2a898613e5fcc119a97dce935f4db91162c)) ## Refactor - Docs design (#8487) ([4ab1d09](https://github.com/discordjs/discord.js/commit/4ab1d09997a18879a9eb9bda39df6f15aa22557e)) -- Move all the config files to root (#8033) ([769ea0b](https://github.com/discordjs/discord.js/commit/769ea0bfe78c4f1d413c6b397c604ffe91e39c6a)) - -## Styling - -- Cleanup tests and tsup configs ([6b8ef20](https://github.com/discordjs/discord.js/commit/6b8ef20cb3af5b5cfd176dd0aa0a1a1e98551629)) -# [@discordjs/proxy@1.0.0](https://github.com/discordjs/discord.js/tree/@discordjs/proxy@1.1.0) - (2022-07-17) +# [@discordjs/proxy@1.0.0](https://github.com/discordjs/discord.js/tree/@discordjs/proxy@1.0.0) - (2022-07-17) ## Bug Fixes From 0960457108efd0087f16ed81862b7b0f30a6a199 Mon Sep 17 00:00:00 2001 From: iCrawl Date: Mon, 22 Aug 2022 10:07:22 +0200 Subject: [PATCH 033/155] chore: update proxy and rest in proxy-container --- packages/proxy-container/package.json | 4 ++-- yarn.lock | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/proxy-container/package.json b/packages/proxy-container/package.json index 1739a1aaef43..bca6b9420278 100644 --- a/packages/proxy-container/package.json +++ b/packages/proxy-container/package.json @@ -44,8 +44,8 @@ }, "homepage": "https://discord.js.org", "dependencies": { - "@discordjs/proxy": "^1.0.0", - "@discordjs/rest": "^1.0.0", + "@discordjs/proxy": "^1.1.0", + "@discordjs/rest": "^1.1.0", "tslib": "^2.4.0" }, "devDependencies": { diff --git a/yarn.lock b/yarn.lock index c45664ba48fb..45c7be09d37d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1790,8 +1790,8 @@ __metadata: version: 0.0.0-use.local resolution: "@discordjs/proxy-container@workspace:packages/proxy-container" dependencies: - "@discordjs/proxy": ^1.0.0 - "@discordjs/rest": ^1.0.0 + "@discordjs/proxy": ^1.1.0 + "@discordjs/rest": ^1.1.0 "@types/node": ^16.11.52 "@typescript-eslint/eslint-plugin": ^5.33.1 "@typescript-eslint/parser": ^5.33.1 @@ -1808,7 +1808,7 @@ __metadata: languageName: unknown linkType: soft -"@discordjs/proxy@^1.0.0, @discordjs/proxy@workspace:packages/proxy": +"@discordjs/proxy@^1.1.0, @discordjs/proxy@workspace:packages/proxy": version: 0.0.0-use.local resolution: "@discordjs/proxy@workspace:packages/proxy" dependencies: @@ -1838,7 +1838,7 @@ __metadata: languageName: unknown linkType: soft -"@discordjs/rest@^1.0.0, @discordjs/rest@workspace:^, @discordjs/rest@workspace:packages/rest": +"@discordjs/rest@^1.0.0, @discordjs/rest@^1.1.0, @discordjs/rest@workspace:^, @discordjs/rest@workspace:packages/rest": version: 0.0.0-use.local resolution: "@discordjs/rest@workspace:packages/rest" dependencies: From e2cde5daa0f852686fa907963b4e8f8355c6e49c Mon Sep 17 00:00:00 2001 From: iCrawl Date: Mon, 22 Aug 2022 10:08:38 +0200 Subject: [PATCH 034/155] chore(collection): release @discordjs/collection@1.1.0 --- packages/collection/CHANGELOG.md | 21 +++++++++++++++++++++ packages/collection/package.json | 2 +- 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/packages/collection/CHANGELOG.md b/packages/collection/CHANGELOG.md index e45347cfba50..6d0e8776b957 100644 --- a/packages/collection/CHANGELOG.md +++ b/packages/collection/CHANGELOG.md @@ -2,6 +2,27 @@ All notable changes to this project will be documented in this file. +# [@discordjs/collection@1.1.0](https://github.com/discordjs/discord.js/compare/@discordjs/collection@1.0.1...@discordjs/collection@1.1.0) - (2022-08-22) + +## Bug Fixes + +- Use proper format for `@link` text (#8384) ([2655639](https://github.com/discordjs/discord.js/commit/26556390a3800e954974a00c1328ff47d3e67e9a)) + +## Documentation + +- Fence examples in codeblocks ([193b252](https://github.com/discordjs/discord.js/commit/193b252672440a860318d3c2968aedd9cb88e0ce)) +- Use link tags (#8382) ([5494791](https://github.com/discordjs/discord.js/commit/549479131318c659f86f0eb18578d597e22522d3)) + +## Features + +- **website:** Show `constructor` information (#8540) ([e42fd16](https://github.com/discordjs/discord.js/commit/e42fd1636973b10dd7ed6fb4280ee1a4a8f82007)) +- **website:** Show descriptions for `@typeParam` blocks (#8523) ([e475b63](https://github.com/discordjs/discord.js/commit/e475b63f257f6261d73cb89fee9ecbcdd84e2a6b)) + +## Refactor + +- **website:** Adjust typography (#8503) ([0f83402](https://github.com/discordjs/discord.js/commit/0f834029850d2448981596cf082ff59917018d66)) +- Docs design (#8487) ([4ab1d09](https://github.com/discordjs/discord.js/commit/4ab1d09997a18879a9eb9bda39df6f15aa22557e)) + # [@discordjs/collection@0.8.0](https://github.com/discordjs/discord.js/compare/@discordjs/collection@0.7.0...@discordjs/collection@0.8.0) - (2022-07-17) ## Bug Fixes diff --git a/packages/collection/package.json b/packages/collection/package.json index b97547cf047c..a9f34d7553bc 100644 --- a/packages/collection/package.json +++ b/packages/collection/package.json @@ -1,6 +1,6 @@ { "name": "@discordjs/collection", - "version": "1.0.1", + "version": "1.1.0", "description": "Utility data structure used in discord.js", "scripts": { "test": "vitest run", From 27bbc8fe688dd6b5220d2cbe91a9d8b4366aaf30 Mon Sep 17 00:00:00 2001 From: iCrawl Date: Mon, 22 Aug 2022 10:10:19 +0200 Subject: [PATCH 035/155] chore(builders): release @discordjs/builders@1.2.0 --- packages/builders/CHANGELOG.md | 13 +++++++++++++ packages/builders/package.json | 2 +- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/packages/builders/CHANGELOG.md b/packages/builders/CHANGELOG.md index afc14151852d..e142cd97d6bf 100644 --- a/packages/builders/CHANGELOG.md +++ b/packages/builders/CHANGELOG.md @@ -2,6 +2,19 @@ All notable changes to this project will be documented in this file. +# [@discordjs/builders@1.2.0](https://github.com/discordjs/discord.js/compare/@discordjs/builders@1.1.0...@discordjs/builders@1.2.0) - (2022-08-22) + +## Features + +- **website:** Show `constructor` information (#8540) ([e42fd16](https://github.com/discordjs/discord.js/commit/e42fd1636973b10dd7ed6fb4280ee1a4a8f82007)) +- **website:** Show descriptions for `@typeParam` blocks (#8523) ([e475b63](https://github.com/discordjs/discord.js/commit/e475b63f257f6261d73cb89fee9ecbcdd84e2a6b)) +- **website:** Show parameter descriptions (#8519) ([7f415a2](https://github.com/discordjs/discord.js/commit/7f415a2502bf7ce2025dbcfed9017b0635a19966)) +- **WebSocketShard:** Support new resume url (#8480) ([bc06cc6](https://github.com/discordjs/discord.js/commit/bc06cc638d2f57ab5c600e8cdb6afc8eb2180166)) + +## Refactor + +- Docs design (#8487) ([4ab1d09](https://github.com/discordjs/discord.js/commit/4ab1d09997a18879a9eb9bda39df6f15aa22557e)) + # [@discordjs/builders@1.1.0](https://github.com/discordjs/discord.js/compare/@discordjs/builders@1.0.0...@discordjs/builders@1.1.0) - (2022-07-29) ## Bug Fixes diff --git a/packages/builders/package.json b/packages/builders/package.json index 62814bf122bc..9db79071165e 100644 --- a/packages/builders/package.json +++ b/packages/builders/package.json @@ -1,6 +1,6 @@ { "name": "@discordjs/builders", - "version": "1.1.0", + "version": "1.2.0", "description": "A set of builders that you can use when creating your bot", "scripts": { "test": "vitest run", From 6bb1474d2001b76773954c959b2c2687e1df0136 Mon Sep 17 00:00:00 2001 From: Jiralite <33201955+Jiralite@users.noreply.github.com> Date: Mon, 22 Aug 2022 09:31:02 +0100 Subject: [PATCH 036/155] types: Inference of guild in `MessageManager` (#8538) * types: better inference of message manager * types: alter helper methods Co-authored-by: kodiakhq[bot] <49736102+kodiakhq[bot]@users.noreply.github.com> --- packages/discord.js/typings/index.d.ts | 100 ++++++++++++-------- packages/discord.js/typings/index.test-d.ts | 38 +++++++- 2 files changed, 95 insertions(+), 43 deletions(-) diff --git a/packages/discord.js/typings/index.d.ts b/packages/discord.js/typings/index.d.ts index b62f3887062b..351a33220bcd 100644 --- a/packages/discord.js/typings/index.d.ts +++ b/packages/discord.js/typings/index.d.ts @@ -123,6 +123,7 @@ import { FormattingPatterns, APIEmbedProvider, AuditLogOptionsType, + TextChannelType, } from 'discord-api-types/v10'; import { ChildProcess } from 'node:child_process'; import { EventEmitter } from 'node:events'; @@ -521,7 +522,7 @@ export class BaseGuildEmoji extends Emoji { public requiresColons: boolean | null; } -export class BaseGuildTextChannel extends TextBasedChannelMixin(GuildChannel) { +export class BaseGuildTextChannel extends TextBasedChannelMixin(GuildChannel, true) { protected constructor(guild: Guild, data?: RawGuildChannelData, client?: Client, immediatePatch?: boolean); public defaultAutoArchiveDuration?: ThreadAutoArchiveDuration; public rateLimitPerUser: number | null; @@ -1049,7 +1050,7 @@ export class DataResolver extends null { public static resolveGuildTemplateCode(data: GuildTemplateResolvable): string; } -export class DMChannel extends TextBasedChannelMixin(BaseChannel, [ +export class DMChannel extends TextBasedChannelMixin(BaseChannel, false, [ 'bulkDelete', 'fetchWebhooks', 'createWebhook', @@ -1675,8 +1676,8 @@ export interface MappedInteractionTypes { [ComponentType.SelectMenu]: SelectMenuInteraction>; } -export class Message extends Base { - private readonly _cacheType: Cached; +export class Message extends Base { + private readonly _cacheType: InGuild; private constructor(client: Client, data: RawMessageData); private _patch(data: RawPartialMessageData | RawMessageData): void; @@ -1684,7 +1685,7 @@ export class Message extends Base { public applicationId: Snowflake | null; public attachments: Collection; public author: User; - public get channel(): If; + public get channel(): If; public channelId: Snowflake; public get cleanContent(): string; public components: ActionRow[]; @@ -1698,8 +1699,8 @@ export class Message extends Base { public editedTimestamp: number | null; public embeds: Embed[]; public groupActivityApplication: ClientApplication | null; - public guildId: If; - public get guild(): If; + public guildId: If; + public get guild(): If; public get hasThread(): boolean; public id: Snowflake; public interaction: MessageInteraction | null; @@ -1720,30 +1721,30 @@ export class Message extends Base { public flags: Readonly; public reference: MessageReference | null; public awaitMessageComponent( - options?: AwaitMessageCollectorOptionsParams, - ): Promise[T]>; + options?: AwaitMessageCollectorOptionsParams, + ): Promise[T]>; public awaitReactions(options?: AwaitReactionsOptions): Promise>; public createReactionCollector(options?: ReactionCollectorOptions): ReactionCollector; public createMessageComponentCollector( - options?: MessageCollectorOptionsParams, - ): InteractionCollector[T]>; - public delete(): Promise; - public edit(content: string | MessageEditOptions | MessagePayload): Promise; + options?: MessageCollectorOptionsParams, + ): InteractionCollector[T]>; + public delete(): Promise>; + public edit(content: string | MessageEditOptions | MessagePayload): Promise>; public equals(message: Message, rawData: unknown): boolean; - public fetchReference(): Promise; + public fetchReference(): Promise>; public fetchWebhook(): Promise; - public crosspost(): Promise; - public fetch(force?: boolean): Promise; - public pin(reason?: string): Promise; + public crosspost(): Promise>; + public fetch(force?: boolean): Promise>; + public pin(reason?: string): Promise>; public react(emoji: EmojiIdentifierResolvable): Promise; - public removeAttachments(): Promise; - public reply(options: string | MessagePayload | ReplyMessageOptions): Promise; + public removeAttachments(): Promise>; + public reply(options: string | MessagePayload | ReplyMessageOptions): Promise>; public resolveComponent(customId: string): MessageActionRowComponent | null; public startThread(options: StartThreadOptions): Promise; - public suppressEmbeds(suppress?: boolean): Promise; + public suppressEmbeds(suppress?: boolean): Promise>; public toJSON(): unknown; public toString(): string; - public unpin(reason?: string): Promise; + public unpin(reason?: string): Promise>; public inGuild(): this is Message & this; } @@ -2506,7 +2507,11 @@ export interface PrivateThreadChannel extends ThreadChannel { type: ChannelType.GuildPrivateThread; } -export class ThreadChannel extends TextBasedChannelMixin(BaseChannel, ['fetchWebhooks', 'createWebhook', 'setNSFW']) { +export class ThreadChannel extends TextBasedChannelMixin(BaseChannel, true, [ + 'fetchWebhooks', + 'createWebhook', + 'setNSFW', +]) { private constructor(guild: Guild, data?: RawThreadChannelData, client?: Client, fromInteraction?: boolean); public archived: boolean | null; public get archivedAt(): Date | null; @@ -2752,7 +2757,10 @@ export type ComponentData = | ModalActionRowComponentData | ActionRowData; -export class VoiceChannel extends TextBasedChannelMixin(BaseGuildVoiceChannel, ['lastPinTimestamp', 'lastPinAt']) { +export class VoiceChannel extends TextBasedChannelMixin(BaseGuildVoiceChannel, true, [ + 'lastPinTimestamp', + 'lastPinAt', +]) { public videoQualityMode: VideoQualityMode | null; public get speakable(): boolean; public type: ChannelType.GuildVoice; @@ -3518,15 +3526,22 @@ export class GuildMemberRoleManager extends DataManager; } -export class MessageManager extends CachedManager { +export class MessageManager extends CachedManager< + Snowflake, + Message, + MessageResolvable +> { private constructor(channel: TextBasedChannel, iterable?: Iterable); - public channel: TextBasedChannel; - public crosspost(message: MessageResolvable): Promise; + public channel: If; + public crosspost(message: MessageResolvable): Promise>; public delete(message: MessageResolvable): Promise; - public edit(message: MessageResolvable, options: string | MessagePayload | MessageEditOptions): Promise; - public fetch(options: MessageResolvable | FetchMessageOptions): Promise; - public fetch(options?: FetchMessagesOptions): Promise>; - public fetchPinned(cache?: boolean): Promise>; + public edit( + message: MessageResolvable, + options: string | MessagePayload | MessageEditOptions, + ): Promise>; + public fetch(options: MessageResolvable | FetchMessageOptions): Promise>; + public fetch(options?: FetchMessagesOptions): Promise>>; + public fetchPinned(cache?: boolean): Promise>>; public react(message: MessageResolvable, emoji: EmojiIdentifierResolvable): Promise; public pin(message: MessageResolvable, reason?: string): Promise; public unpin(message: MessageResolvable, reason?: string): Promise; @@ -3649,22 +3664,31 @@ export class VoiceStateManager extends CachedManager = abstract new (...args: any[]) => T; -export function PartialTextBasedChannel(Base?: Constructable): Constructable; -export function TextBasedChannelMixin( +export function PartialTextBasedChannel( + Base?: Constructable, +): Constructable>; + +export function TextBasedChannelMixin< + T, + InGuild extends boolean = boolean, + I extends keyof TextBasedChannelFields = never, +>( Base?: Constructable, + inGuild?: InGuild, ignore?: I[], -): Constructable>; +): Constructable, I>>; -export interface PartialTextBasedChannelFields { - send(options: string | MessagePayload | MessageOptions): Promise; +export interface PartialTextBasedChannelFields { + send(options: string | MessagePayload | MessageOptions): Promise>; } -export interface TextBasedChannelFields extends PartialTextBasedChannelFields { +export interface TextBasedChannelFields + extends PartialTextBasedChannelFields { lastMessageId: Snowflake | null; get lastMessage(): Message | null; lastPinTimestamp: number | null; get lastPinAt(): Date | null; - messages: MessageManager; + messages: MessageManager; awaitMessageComponent( options?: AwaitMessageCollectorOptionsParams, ): Promise; @@ -5521,7 +5545,7 @@ export type Channel = | AnyThreadChannel | VoiceChannel; -export type TextBasedChannel = Extract; +export type TextBasedChannel = Exclude, PartialGroupDMChannel>; export type TextBasedChannelTypes = TextBasedChannel['type']; diff --git a/packages/discord.js/typings/index.test-d.ts b/packages/discord.js/typings/index.test-d.ts index 995c60ae4b56..79c7bf06fa56 100644 --- a/packages/discord.js/typings/index.test-d.ts +++ b/packages/discord.js/typings/index.test-d.ts @@ -1049,11 +1049,11 @@ declare const user: User; declare const guildMember: GuildMember; // Test whether the structures implement send -expectType(dmChannel.send); -expectType(threadChannel.send); -expectType(newsChannel.send); -expectType(textChannel.send); -expectType(voiceChannel.send); +expectType['send']>(dmChannel.send); +expectType['send']>(threadChannel.send); +expectType['send']>(newsChannel.send); +expectType['send']>(textChannel.send); +expectType['send']>(voiceChannel.send); expectAssignable(user); expectAssignable(guildMember); @@ -1190,6 +1190,34 @@ declare const guildChannelManager: GuildChannelManager; expectType>>(guildChannelManager.fetch()); expectType>>(guildChannelManager.fetch(undefined, {})); expectType>(guildChannelManager.fetch('0')); + + const channel = guildChannelManager.cache.first()!; + + if (channel.isTextBased()) { + const { messages } = channel; + const message = await messages.fetch('123'); + expectType>(messages); + expectType>>(messages.crosspost('1234567890')); + expectType>>(messages.edit('1234567890', 'text')); + expectType>>(messages.fetch('1234567890')); + expectType>>>(messages.fetchPinned()); + expectType(message.guild); + expectType(message.guildId); + expectType(message.channel.messages.channel); + } +} + +{ + const { messages } = dmChannel; + const message = await messages.fetch('123'); + expectType>(messages); + expectType>>(messages.crosspost('1234567890')); // This shouldn't even exist! + expectType>>(messages.edit('1234567890', 'text')); + expectType>>(messages.fetch('1234567890')); + expectType>>>(messages.fetchPinned()); + expectType(message.guild); + expectType(message.guildId); + expectType(message.channel.messages.channel); } declare const messageManager: MessageManager; From 4e3fa586b53185218c7a32f767c74c75b2ed03c4 Mon Sep 17 00:00:00 2001 From: iCrawl Date: Mon, 22 Aug 2022 10:56:30 +0200 Subject: [PATCH 037/155] chore(discord.js): release discord.js@14.3.0 --- packages/discord.js/CHANGELOG.md | 34 ++++++++++++++++++++++++++++++++ packages/discord.js/package.json | 2 +- 2 files changed, 35 insertions(+), 1 deletion(-) diff --git a/packages/discord.js/CHANGELOG.md b/packages/discord.js/CHANGELOG.md index 9c9caed095ba..be278c34d763 100644 --- a/packages/discord.js/CHANGELOG.md +++ b/packages/discord.js/CHANGELOG.md @@ -2,6 +2,40 @@ All notable changes to this project will be documented in this file. +# [14.3.0](https://github.com/discordjs/discord.js/compare/14.2.0...14.3.0) - (2022-08-22) + +## Bug Fixes + +- **GuildMemberManager:** `add()` method throws an error (#8539) ([3bef901](https://github.com/discordjs/discord.js/commit/3bef9018c0be3c5dc51d03b796d08b925dc4e1b9)) +- **Guild:** Widget channel types and fixes (#8530) ([23a0b6c](https://github.com/discordjs/discord.js/commit/23a0b6ccf27410963bd4f5c53d9ee2ce019e90a8)) +- **Embed:** Reference video in video (#8473) ([c97977a](https://github.com/discordjs/discord.js/commit/c97977a3e806bd5d8682bc7fb22ebec1a8ceecdc)) + +## Documentation + +- **GuildAuditLogsEntry:** Correct `action` wording (#8499) ([7d25072](https://github.com/discordjs/discord.js/commit/7d2507279cc9d1397c7d61e7c7b856ff4bc17c86)) + +## Features + +- **GuildMemberManager:** AddRole and removeRole (#8510) ([cda3f00](https://github.com/discordjs/discord.js/commit/cda3f005b1546fdb8410e9550526956f840857fc)) +- Deprecate `ActionRow.from()` (#8504) ([f9c25dd](https://github.com/discordjs/discord.js/commit/f9c25ddcfe68f089e13f1090c3df4bd7cd74d2b7)) +- **WebSocketShard:** Support new resume url (#8480) ([bc06cc6](https://github.com/discordjs/discord.js/commit/bc06cc638d2f57ab5c600e8cdb6afc8eb2180166)) + +## Refactor + +- **GuildAuditLogsEntry:** Remove `guild` from application command permission update extra (#8520) ([2b8074d](https://github.com/discordjs/discord.js/commit/2b8074dd12f2f1e957caffb57e5fd4d7be88dc25)) + +## Typings + +- Inference of guild in `MessageManager` (#8538) ([6bb1474](https://github.com/discordjs/discord.js/commit/6bb1474d2001b76773954c959b2c2687e1df0136)) +- Allow choice's value type to be strictly inferred (#8529) ([b3f7c32](https://github.com/discordjs/discord.js/commit/b3f7c32f7f91f12766178f5e17585856e81d9a87)) +- **GuildAuditLogs:** Allow fetching to return all possible values (#8522) ([0dba8ad](https://github.com/discordjs/discord.js/commit/0dba8adbd2e6efd634bd3eb31df09467ba8a8a0d)) +- Correct `EventEmitter.on (static)` return type (#8524) ([16bbc8a](https://github.com/discordjs/discord.js/commit/16bbc8aa208a8a16c22be24696f57d5f7a5faf2b)) +- **GuildAuditLogs:** Remove static `Entry` (#8521) ([7a3d18d](https://github.com/discordjs/discord.js/commit/7a3d18dd6d1fe27393d00019b9ecd35c98b95ee7)) +- Disallow some channel types from webhook creation (#8531) ([4882b17](https://github.com/discordjs/discord.js/commit/4882b17a77484f801faa19fb971f2e6abd88e59f)) +- Implement max/min values for autocomplete (#8498) ([812f7f1](https://github.com/discordjs/discord.js/commit/812f7f1ea86fc953aa796875cbc7ccc434203d77)) +- **ModalMessageModalSubmitInteraction:** ChannelId is not nullable (#8496) ([c31a5cf](https://github.com/discordjs/discord.js/commit/c31a5cfcc82706667768eac77b5f99ba69cf3c91)) +- Change type of ApplicationCommandSubCommand.options (#8476) ([ebaf158](https://github.com/discordjs/discord.js/commit/ebaf158006d3c7db3b8c695e7c027b8af11999ba)) + # [14.2.0](https://github.com/discordjs/discord.js/compare/14.1.2...14.2.0) - (2022-08-10) ## Bug Fixes diff --git a/packages/discord.js/package.json b/packages/discord.js/package.json index cdd22e27d4f6..80a2ddfe9fdb 100644 --- a/packages/discord.js/package.json +++ b/packages/discord.js/package.json @@ -1,6 +1,6 @@ { "name": "discord.js", - "version": "14.2.0", + "version": "14.3.0", "description": "A powerful library for interacting with the Discord API", "scripts": { "test": "yarn docs:test && yarn test:typescript", From 230c43e97d7e0b6428d5c63bafb769ab9baa4c18 Mon Sep 17 00:00:00 2001 From: iCrawl Date: Mon, 22 Aug 2022 11:29:57 +0200 Subject: [PATCH 038/155] build: fix downlevel-dts --- packages/builders/package.json | 2 +- packages/collection/package.json | 2 +- packages/proxy/package.json | 2 +- packages/rest/package.json | 2 +- packages/voice/package.json | 2 +- packages/ws/package.json | 3 ++- yarn.lock | 1 + 7 files changed, 8 insertions(+), 6 deletions(-) diff --git a/packages/builders/package.json b/packages/builders/package.json index 9db79071165e..cfca9dbca9e6 100644 --- a/packages/builders/package.json +++ b/packages/builders/package.json @@ -8,7 +8,7 @@ "lint": "prettier --check . && TIMING=1 eslint src __tests__ --ext mjs,js,ts", "format": "prettier --write . && TIMING=1 eslint src __tests__ --ext mjs,js,ts --fix", "fmt": "yarn format", - "docs": "downlevel-dts . docs --to=3.7 && docgen -i src/index.ts -c docs/index.json -o docs/docs.json --typescript && api-extractor run --local", + "docs": "downlevel-dts dist docs/dist --to=3.7 && docgen -i src/index.ts -c docs/index.json -o docs/docs.json --typescript && api-extractor run --local", "prepack": "yarn lint && yarn test && yarn build", "changelog": "git cliff --prepend ./CHANGELOG.md -u -c ./cliff.toml -r ../../ --include-path 'packages/builders/*'", "release": "cliff-jumper" diff --git a/packages/collection/package.json b/packages/collection/package.json index a9f34d7553bc..65a985508bad 100644 --- a/packages/collection/package.json +++ b/packages/collection/package.json @@ -8,7 +8,7 @@ "lint": "prettier --check . && TIMING=1 eslint src __tests__ --ext mjs,js,ts", "format": "prettier --write . && TIMING=1 eslint src __tests__ --ext mjs,js,ts --fix", "fmt": "yarn format", - "docs": "downlevel-dts . docs --to=3.7 && docgen -i src/index.ts -c docs/index.json -o docs/docs.json --typescript && api-extractor run --local", + "docs": "downlevel-dts dist docs/dist --to=3.7 && docgen -i src/index.ts -c docs/index.json -o docs/docs.json --typescript && api-extractor run --local", "prepack": "yarn lint && yarn test && yarn build", "changelog": "git cliff --prepend ./CHANGELOG.md -u -c ./cliff.toml -r ../../ --include-path 'packages/collection/*'", "release": "cliff-jumper" diff --git a/packages/proxy/package.json b/packages/proxy/package.json index c6a967af324d..f8111f5f9fd0 100644 --- a/packages/proxy/package.json +++ b/packages/proxy/package.json @@ -8,7 +8,7 @@ "lint": "prettier --check . && TIMING=1 eslint src __tests__ --ext mjs,js,ts", "format": "prettier --write . && TIMING=1 eslint src __tests__ --ext mjs,js,ts --fix", "fmt": "yarn format", - "docs": "downlevel-dts . docs --to=3.7 && docgen -i src/index.ts -c docs/index.json -o docs/docs.json --typescript && api-extractor run --local", + "docs": "downlevel-dts dist docs/dist --to=3.7 && docgen -i src/index.ts -c docs/index.json -o docs/docs.json --typescript && api-extractor run --local", "prepack": "yarn lint && yarn test && yarn build", "changelog": "git cliff --prepend ./CHANGELOG.md -u -c ./cliff.toml -r ../../ --include-path 'packages/proxy/*'", "release": "cliff-jumper" diff --git a/packages/rest/package.json b/packages/rest/package.json index e6f1bbd9e5bc..ef0af1642cba 100644 --- a/packages/rest/package.json +++ b/packages/rest/package.json @@ -8,7 +8,7 @@ "lint": "prettier --check . && TIMING=1 eslint src __tests__ --ext mjs,js,ts", "format": "prettier --write . && TIMING=1 eslint src __tests__ --ext mjs,js,ts --fix", "fmt": "yarn format", - "docs": "downlevel-dts . docs --to=3.7 && docgen -i src/index.ts -c docs/index.json -o docs/docs.json --typescript && api-extractor run --local", + "docs": "downlevel-dts dist docs/dist --to=3.7 && docgen -i src/index.ts -c docs/index.json -o docs/docs.json --typescript && api-extractor run --local", "prepack": "yarn lint && yarn test && yarn build", "changelog": "git cliff --prepend ./CHANGELOG.md -u -c ./cliff.toml -r ../../ --include-path 'packages/rest/*'", "release": "cliff-jumper" diff --git a/packages/voice/package.json b/packages/voice/package.json index 60cf3c592232..f50bbffb8364 100644 --- a/packages/voice/package.json +++ b/packages/voice/package.json @@ -8,7 +8,7 @@ "lint": "prettier --check . && TIMING=1 eslint src __tests__ --ext mjs,js,ts", "format": "prettier --write . && TIMING=1 eslint src __tests__ --ext mjs,js,ts --fix", "fmt": "yarn format", - "docs": "downlevel-dts . docs --to=3.7 && docgen -i src/index.ts -c docs/index.json -o docs/docs.json --typescript && api-extractor run --local", + "docs": "downlevel-dts dist docs/dist --to=3.7 && docgen -i src/index.ts -c docs/index.json -o docs/docs.json --typescript && api-extractor run --local", "prepack": "yarn lint && yarn test && yarn build", "changelog": "git cliff --prepend ./CHANGELOG.md -u -c ./cliff.toml -r ../../ --include-path 'packages/voice/*'", "release": "cliff-jumper" diff --git a/packages/ws/package.json b/packages/ws/package.json index c8fa053d1ca9..d5d2112db831 100644 --- a/packages/ws/package.json +++ b/packages/ws/package.json @@ -7,7 +7,7 @@ "build": "unbuild", "lint": "prettier --check . && TIMING=1 eslint src __tests__ --ext mjs,js,ts", "format": "prettier --write . && TIMING=1 eslint src __tests__ --ext mjs,js,ts --fix", - "docs": "docgen -i src/index.ts -c docs/index.json -o docs/docs.json --typescript && api-extractor run --local", + "docs": "downlevel-dts dist docs/dist --to=3.7 && docgen -i src/index.ts -c docs/index.json -o docs/docs.json --typescript && api-extractor run --local", "prepack": "yarn build && yarn lint", "changelog": "git cliff --prepend ./CHANGELOG.md -u -c ./cliff.toml -r ../../ --include-path 'packages/ws/*'", "release": "cliff-jumper" @@ -69,6 +69,7 @@ "@typescript-eslint/eslint-plugin": "^5.33.1", "@typescript-eslint/parser": "^5.33.1", "@vitest/coverage-c8": "^0.22.1", + "downlevel-dts": "^0.10.0", "eslint": "^8.22.0", "eslint-config-marine": "^9.4.1", "eslint-config-prettier": "^8.5.0", diff --git a/yarn.lock b/yarn.lock index 45c7be09d37d..4145d0d57f4f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1998,6 +1998,7 @@ __metadata: "@vitest/coverage-c8": ^0.22.1 "@vladfrangu/async_event_emitter": ^2.0.1 discord-api-types: ^0.37.3 + downlevel-dts: ^0.10.0 eslint: ^8.22.0 eslint-config-marine: ^9.4.1 eslint-config-prettier: ^8.5.0 From 7623fc552e2b73d3b1bf5b7360a1319bbfe0e820 Mon Sep 17 00:00:00 2001 From: iCrawl Date: Mon, 22 Aug 2022 12:11:45 +0200 Subject: [PATCH 039/155] ci: don't double check inputs --- .github/workflows/documentation.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/.github/workflows/documentation.yml b/.github/workflows/documentation.yml index 7fd1fb03e174..b7b964e66b79 100644 --- a/.github/workflows/documentation.yml +++ b/.github/workflows/documentation.yml @@ -123,14 +123,14 @@ jobs: path: 'out' - name: Extract package and semver from tag - if: ${{ github.event.inputs.ref_type == 'tag' || env.BRANCH_OR_TAG == 'tag' }} + if: ${{ env.BRANCH_OR_TAG == 'tag' }} id: extract-tag uses: ./packages/actions/src/formatTag with: tag: ${{ env.BRANCH_NAME }} - name: Move docs to correct directory - if: ${{ (github.event.inputs.ref_type == 'tag' || env.BRANCH_OR_TAG == 'tag') && matrix.package == steps.extract-tag.outputs.package }} + if: ${{ env.BRANCH_OR_TAG == 'tag' && matrix.package == steps.extract-tag.outputs.package }} env: PACKAGE: ${{ steps.extract-tag.outputs.package }} SEMVER: ${{ steps.extract-tag.outputs.semver }} @@ -142,7 +142,7 @@ jobs: fi - name: Move docs to correct directory - if: ${{ github.event.inputs.ref_type == 'branch' || env.BRANCH_OR_TAG == 'branch' }} + if: ${{ env.BRANCH_OR_TAG == 'branch' }} env: PACKAGE: ${{ matrix.package }} run: | From caeb66e150c459b0ed7bbd0781a407bab1fa263c Mon Sep 17 00:00:00 2001 From: iCrawl Date: Mon, 22 Aug 2022 14:12:53 +0200 Subject: [PATCH 040/155] fix: overflowing content --- packages/website/src/components/SidebarLayout.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/website/src/components/SidebarLayout.tsx b/packages/website/src/components/SidebarLayout.tsx index ce480adb1459..4592d5751dd0 100644 --- a/packages/website/src/components/SidebarLayout.tsx +++ b/packages/website/src/components/SidebarLayout.tsx @@ -109,6 +109,7 @@ export function SidebarLayout({ packageName, data, children }: PropsWithChildren styles={{ main: { background: theme.colorScheme === 'dark' ? theme.colors.dark![8] : theme.colors.gray![0], + overflowX: 'auto', }, }} navbarOffsetBreakpoint="sm" From 474eae0afc1a883fe4714972c0ead971ff2dfa45 Mon Sep 17 00:00:00 2001 From: iCrawl Date: Mon, 22 Aug 2022 14:19:02 +0200 Subject: [PATCH 041/155] style: change how optionals are displayed --- packages/website/src/components/MethodItem.tsx | 4 ++-- packages/website/src/components/Sections.tsx | 9 ++++----- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/packages/website/src/components/MethodItem.tsx b/packages/website/src/components/MethodItem.tsx index 8b3dd7be7606..effa4199313f 100644 --- a/packages/website/src/components/MethodItem.tsx +++ b/packages/website/src/components/MethodItem.tsx @@ -11,10 +11,10 @@ type MethodResolvable = ApiMethodJSON | ApiMethodSignatureJSON; function getShorthandName(data: MethodResolvable) { return `${data.name}${data.optional ? '?' : ''}(${data.parameters.reduce((prev, cur, index) => { if (index === 0) { - return `${prev}${cur.isOptional ? `[${cur.name}]` : cur.name}`; + return `${prev}${cur.isOptional ? `${cur.name}?` : cur.name}`; } - return `${prev}, ${cur.isOptional ? `[${cur.name}]` : cur.name}`; + return `${prev}, ${cur.isOptional ? `${cur.name}?` : cur.name}`; }, '')})`; } diff --git a/packages/website/src/components/Sections.tsx b/packages/website/src/components/Sections.tsx index f190681a64b3..4fbbfbc7c309 100644 --- a/packages/website/src/components/Sections.tsx +++ b/packages/website/src/components/Sections.tsx @@ -43,15 +43,14 @@ export function ParametersSection({ data }: { data: ParameterDocumentation[] }) export function ConstructorSection({ data }: { data: ApiConstructorJSON }) { const matches = useMediaQuery('(max-width: 768px)', true, { getInitialValueInEffect: false }); - function getShorthandName(): string { - return `constructor(${data.parameters.reduce((prev, cur, index) => { + const getShorthandName = () => + `constructor(${data.parameters.reduce((prev, cur, index) => { if (index === 0) { - return `${prev}${cur.isOptional ? `[${cur.name}]` : cur.name}`; + return `${prev}${cur.isOptional ? `${cur.name}?` : cur.name}`; } - return `${prev}, ${cur.isOptional ? `[${cur.name}]` : cur.name}`; + return `${prev}, ${cur.isOptional ? `${cur.name}?` : cur.name}`; }, '')})`; - } return data.parameters.length ? (
} padded dense={matches}> From 9f180360788688bdba4b59b318a4027dd8563845 Mon Sep 17 00:00:00 2001 From: iCrawl Date: Mon, 22 Aug 2022 14:29:31 +0200 Subject: [PATCH 042/155] fix: hydration error --- packages/website/src/components/SidebarLayout.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/website/src/components/SidebarLayout.tsx b/packages/website/src/components/SidebarLayout.tsx index 4592d5751dd0..ff2ec1e28055 100644 --- a/packages/website/src/components/SidebarLayout.tsx +++ b/packages/website/src/components/SidebarLayout.tsx @@ -97,7 +97,7 @@ export function SidebarLayout({ packageName, data, children }: PropsWithChildren )); - const asPathWithoutQuery = router.asPath.split('?')[0]; + const asPathWithoutQuery = router.asPath.split('?')[0]?.split('#')[0]; const breadcrumbs = asPathWithoutQuery?.split('/').map((path, idx, original) => ( {path} From e5678f4656d8f00bc39a65284910d7427a0c176d Mon Sep 17 00:00:00 2001 From: iCrawl Date: Mon, 22 Aug 2022 14:30:15 +0200 Subject: [PATCH 043/155] feat: list properties and method in table of content --- .../website/src/components/CodeListing.tsx | 2 +- .../website/src/components/DocContainer.tsx | 8 +++--- ...tentsItems.tsx => TableOfContentItems.tsx} | 27 ++++++++++++++++--- .../website/src/components/model/Class.tsx | 1 + 4 files changed, 30 insertions(+), 8 deletions(-) rename packages/website/src/components/{TableOfContentsItems.tsx => TableOfContentItems.tsx} (70%) diff --git a/packages/website/src/components/CodeListing.tsx b/packages/website/src/components/CodeListing.tsx index be6744eef518..a0456d48c70c 100644 --- a/packages/website/src/components/CodeListing.tsx +++ b/packages/website/src/components/CodeListing.tsx @@ -36,7 +36,7 @@ export function CodeListing({ inheritanceData?: InheritanceData | null; }) { return ( - + {deprecation ? ( diff --git a/packages/website/src/components/DocContainer.tsx b/packages/website/src/components/DocContainer.tsx index 7802ecc63029..9c5c1159bd30 100644 --- a/packages/website/src/components/DocContainer.tsx +++ b/packages/website/src/components/DocContainer.tsx @@ -6,7 +6,7 @@ import { PrismAsyncLight as SyntaxHighlighter } from 'react-syntax-highlighter'; import { vscDarkPlus } from 'react-syntax-highlighter/dist/cjs/styles/prism'; import { HyperlinkedText } from './HyperlinkedText'; import { Section } from './Section'; -import { TableOfContentsItems } from './TableOfContentsItems'; +import { TableOfContentItems } from './TableOfContentItems'; import { TypeParamTable } from './TypeParamTable'; import { TSDoc } from './tsdoc/TSDoc'; import type { ApiClassJSON, ApiItemJSON } from '~/DocModel/ApiNodeJSONEncoder'; @@ -26,6 +26,7 @@ export interface DocContainerProps { typeParams?: TypeParameterData[]; comment?: AnyDocNodeJSON | null; methods?: ApiClassJSON['methods'] | null; + properties?: ApiClassJSON['properties'] | null; } export function DocContainer({ @@ -38,6 +39,7 @@ export function DocContainer({ extendsTokens, implementsTokens, methods, + properties, }: DocContainerProps) { const matches = useMediaQuery('(max-width: 768px)', true, { getInitialValueInEffect: false }); @@ -102,7 +104,7 @@ export function DocContainer({ {children} - {kind === 'Class' && methods ? ( + {kind === 'Class' && methods && properties ? ( diff --git a/packages/website/src/components/TableOfContentsItems.tsx b/packages/website/src/components/TableOfContentItems.tsx similarity index 70% rename from packages/website/src/components/TableOfContentsItems.tsx rename to packages/website/src/components/TableOfContentItems.tsx index 07b855216a20..2158e92b430f 100644 --- a/packages/website/src/components/TableOfContentsItems.tsx +++ b/packages/website/src/components/TableOfContentItems.tsx @@ -24,10 +24,26 @@ const useStyles = createStyles((theme) => ({ }, })); -export function TableOfContentsItems({ members }: { members: ApiClassJSON['methods'] | ApiInterfaceJSON['methods'] }) { +export function TableOfContentItems({ + methods, + properties, +}: { + methods: ApiClassJSON['methods'] | ApiInterfaceJSON['methods']; + properties: ApiClassJSON['properties'] | ApiInterfaceJSON['properties']; +}) { const { classes } = useStyles(); - const items = members.map((member) => { + const propertyItems = properties.map((prop) => ( + key={prop.name} href={`#${prop.name}`} component="a" className={classes.link}> + + + {prop.name} + + + + )); + + const methodItems = methods.map((member) => { const key = `${member.name}${member.overloadIndex && member.overloadIndex > 1 ? `:${member.overloadIndex}` : ''}`; return ( @@ -50,9 +66,12 @@ export function TableOfContentsItems({ members }: { members: ApiClassJSON['metho - Table of contents + Table of content - {items} + Properties + {propertyItems} + Methods + {methodItems} ); } diff --git a/packages/website/src/components/model/Class.tsx b/packages/website/src/components/model/Class.tsx index 27ffaeb5194e..2bcd8728ec1f 100644 --- a/packages/website/src/components/model/Class.tsx +++ b/packages/website/src/components/model/Class.tsx @@ -14,6 +14,7 @@ export function Class({ data }: { data: ApiClassJSON }) { implementsTokens={data.implementsTokens} comment={data.comment} methods={data.methods} + properties={data.properties} > {data.constructor ? : null} From d9e53093f5f384a282e279bb31e6dc71c2e0cf84 Mon Sep 17 00:00:00 2001 From: iCrawl Date: Mon, 22 Aug 2022 14:32:59 +0200 Subject: [PATCH 044/155] fix: properly check for properties and methods --- packages/website/src/components/DocContainer.tsx | 4 ++-- .../src/components/TableOfContentItems.tsx | 16 ++++++++++++---- 2 files changed, 14 insertions(+), 6 deletions(-) diff --git a/packages/website/src/components/DocContainer.tsx b/packages/website/src/components/DocContainer.tsx index 9c5c1159bd30..2b332a1b8cb1 100644 --- a/packages/website/src/components/DocContainer.tsx +++ b/packages/website/src/components/DocContainer.tsx @@ -104,7 +104,7 @@ export function DocContainer({ {children} - {kind === 'Class' && methods && properties ? ( + {kind === 'Class' && (methods?.length || properties?.length) ? ( diff --git a/packages/website/src/components/TableOfContentItems.tsx b/packages/website/src/components/TableOfContentItems.tsx index 2158e92b430f..3bf8175fc56a 100644 --- a/packages/website/src/components/TableOfContentItems.tsx +++ b/packages/website/src/components/TableOfContentItems.tsx @@ -68,10 +68,18 @@ export function TableOfContentItems({ Table of content - Properties - {propertyItems} - Methods - {methodItems} + {propertyItems.length ? ( + <> + Properties + {propertyItems} + + ) : null} + {methodItems.length ? ( + <> + Methods + {methodItems} + + ) : null} ); } From abb968de81c7b5c9699a682db895e19c70645386 Mon Sep 17 00:00:00 2001 From: iCrawl Date: Mon, 22 Aug 2022 14:57:51 +0200 Subject: [PATCH 045/155] feat: favicon --- .../website/public/android-chrome-192x192.png | Bin 0 -> 4567 bytes .../website/public/android-chrome-384x384.png | Bin 0 -> 7796 bytes .../apple-touch-icon-120x120-precomposed.png | Bin 0 -> 2974 bytes .../public/apple-touch-icon-120x120.png | Bin 0 -> 2677 bytes .../apple-touch-icon-152x152-precomposed.png | Bin 0 -> 3453 bytes .../public/apple-touch-icon-152x152.png | Bin 0 -> 3152 bytes .../apple-touch-icon-180x180-precomposed.png | Bin 0 -> 3910 bytes .../public/apple-touch-icon-180x180.png | Bin 0 -> 3505 bytes .../apple-touch-icon-60x60-precomposed.png | Bin 0 -> 1813 bytes .../website/public/apple-touch-icon-60x60.png | Bin 0 -> 1656 bytes .../apple-touch-icon-76x76-precomposed.png | Bin 0 -> 2142 bytes .../website/public/apple-touch-icon-76x76.png | Bin 0 -> 1974 bytes .../public/apple-touch-icon-precomposed.png | Bin 0 -> 3910 bytes packages/website/public/apple-touch-icon.png | Bin 0 -> 3505 bytes packages/website/public/browserconfig.xml | 12 ++++ packages/website/public/favicon-16x16.png | Bin 0 -> 561 bytes packages/website/public/favicon-32x32.png | Bin 0 -> 1092 bytes packages/website/public/favicon.ico | Bin 0 -> 15086 bytes packages/website/public/mstile-150x150.png | Bin 0 -> 3174 bytes packages/website/public/mstile-310x150.png | Bin 0 -> 2912 bytes packages/website/public/mstile-310x310.png | Bin 0 -> 5927 bytes packages/website/public/mstile-70x70.png | Bin 0 -> 2684 bytes .../assets => public}/powered-by-vercel.svg | 0 packages/website/public/safari-pinned-tab.svg | 32 +++++++++ packages/website/public/site.webmanifest | 19 +++++ .../src/components/TableOfContentItems.tsx | 28 ++++---- packages/website/src/pages/_app.tsx | 65 ++++++++---------- packages/website/src/pages/_document.tsx | 13 +++- packages/website/src/pages/index.tsx | 9 ++- 29 files changed, 123 insertions(+), 55 deletions(-) create mode 100644 packages/website/public/android-chrome-192x192.png create mode 100644 packages/website/public/android-chrome-384x384.png create mode 100644 packages/website/public/apple-touch-icon-120x120-precomposed.png create mode 100644 packages/website/public/apple-touch-icon-120x120.png create mode 100644 packages/website/public/apple-touch-icon-152x152-precomposed.png create mode 100644 packages/website/public/apple-touch-icon-152x152.png create mode 100644 packages/website/public/apple-touch-icon-180x180-precomposed.png create mode 100644 packages/website/public/apple-touch-icon-180x180.png create mode 100644 packages/website/public/apple-touch-icon-60x60-precomposed.png create mode 100644 packages/website/public/apple-touch-icon-60x60.png create mode 100644 packages/website/public/apple-touch-icon-76x76-precomposed.png create mode 100644 packages/website/public/apple-touch-icon-76x76.png create mode 100644 packages/website/public/apple-touch-icon-precomposed.png create mode 100644 packages/website/public/apple-touch-icon.png create mode 100644 packages/website/public/browserconfig.xml create mode 100644 packages/website/public/favicon-16x16.png create mode 100644 packages/website/public/favicon-32x32.png create mode 100644 packages/website/public/favicon.ico create mode 100644 packages/website/public/mstile-150x150.png create mode 100644 packages/website/public/mstile-310x150.png create mode 100644 packages/website/public/mstile-310x310.png create mode 100644 packages/website/public/mstile-70x70.png rename packages/website/{src/assets => public}/powered-by-vercel.svg (100%) create mode 100644 packages/website/public/safari-pinned-tab.svg create mode 100644 packages/website/public/site.webmanifest diff --git a/packages/website/public/android-chrome-192x192.png b/packages/website/public/android-chrome-192x192.png new file mode 100644 index 0000000000000000000000000000000000000000..27ce5eab5de09e1f207121f940b9d56acd2b4a49 GIT binary patch literal 4567 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 literal 0 HcmV?d00001 diff --git a/packages/website/public/android-chrome-384x384.png b/packages/website/public/android-chrome-384x384.png new file mode 100644 index 0000000000000000000000000000000000000000..1e9148e26600b1868a08afc72784c1d1b039ae43 GIT binary patch literal 7796 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 Z2K0{{R3FC5Sl00004XF*Lt006O% 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 bWu*%EB?OEnn`xK)Jpn+N+rgU6uBH7CfUZ20 literal 0 HcmV?d00001 diff --git a/packages/website/public/apple-touch-icon-180x180.png b/packages/website/public/apple-touch-icon-180x180.png new file mode 100644 index 0000000000000000000000000000000000000000..9bde9f097ed44a256dad9a9d0891e6f23e96f617 GIT binary patch literal 3505 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 T&i#V_lrXTqnO>vL!-W3>Ey$^C literal 0 HcmV?d00001 diff --git a/packages/website/public/apple-touch-icon-60x60-precomposed.png b/packages/website/public/apple-touch-icon-60x60-precomposed.png new file mode 100644 index 0000000000000000000000000000000000000000..71bc7d6d2ad5cdcc424876958441eaf1a7f53a09 GIT binary patch literal 1813 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 Ubn-$ql>h($07*qoM6N<$f-KnaZ~y=R literal 0 HcmV?d00001 diff --git a/packages/website/public/apple-touch-icon-76x76.png b/packages/website/public/apple-touch-icon-76x76.png new file mode 100644 index 0000000000000000000000000000000000000000..e8a42a3cab0731499b87ce5a0b5ebe068f9ecc90 GIT binary patch literal 1974 zcmV;n2TAyeP)Px%xKK<~MF|QP|Jz);UH=FP6$c0uw_N`R2o?YT{{;pT z1qc=YTwDtb8T$JAPf%F?{{CES{|yWmT>qU12onEYUH{%)`}_R(lvD}}7E)7NU~B(f z|DR)HYow&84i6d*3>}r0o2^&zh%`D54KfaTKP#<%s3!bCKo-VQ{`bNFN8$9 z?d|UUXId9EE;$+_ua`xnVE_7!RjywDh;}+GEjKeXK3#JELQc0=SYSUuNdf~8FEBcg zV*RhLvk((5;Nao4wYgDJTFA-E(bCj7IYUPvCuTL05FH@=yI3YHXv3&V`deH4oL1<_ zRdYo#--1mn8%AAZ?-~yqb#{D&RW_IMg&Q77A|ozfU}%75|DK+sT``6h89c@4a~>Zm z=H}<9sI6ouFo%bYJToLp%78H}AvHdeU5xKQN2p!-raU5BAQ&7a9UVz8C%nABIwvAN zHzg|-AN|8w``TOJQBy>{cwC~}S@oFycUgn_kby`xnq50JH-)-INJS=RcP=$5D>l0A zcwN}LRqT_~)76|`{q^~K#o&k=8ab5z`(;nNv?Z*f|X6xPfu9ax>2y0MyZlR zwWUn0P(wjgtU;iBYix5NQ$0D0ZE-uIM_;^A%b0d&HC(~Q_O4caP0MOHnOdr6LUBp2 zl11>iR)kU2fl$+&Rppdg?mJDN`g~VaBP^)vA>MmPV`TtOsZQ*1$H`s3~fem#;nJ$A};Y;1IAen|eYSl@L|Cu&TkKSMj7XKY?F z#ko}>Qa(^dDqOhC^wL>qMzxk=|1^7LLqtp>C|*Y=X@rG~^78U4GIwG#jlLWFx&QzK zIY~r8R9M69*7sW)Nf-z4ff;a@C6ooCr&0nKA&5jYDr(fIrx#;QVvlE!y{6Yo@4ffr zlIy+q-h1!eEC0vM43Gmaf%Uojalg;Q1N*Y?huPU-o&`XR7%^hRi21(*nUKJcI!h9A zB0YwYt^R?8KnCLKQvehEqHslS?uv%%66h{`B{#QWyD^f-+^JLrqnux7p5&0fdzMb2 z(9P8Z=}$j=uT`OF-F5ir_6XPvWlU)1oBPpJ40g}@SceZubc$U^yIFx)Ow7en6pq17 zbM5wkMYz_(g@Un|Eo1U9%y_W4xY*^|w=X|G-;PtO(U!1eCTIT(YRJIKHe1SXx;INCKp0EUlxR0OLw0(Lnb z55d^20L_c{dgEtP49J_F{;c=x z=;-M2v%UM@*0HJho@u!=~t%VccwtGthk__S|i1wR-)(_lcKCJ;pRS$Cxhf+OP5-GOZp)`>VratB~vQR8TMIge#Zdr zS&=f2ySZq#z3~sO-E<{}3|M-r@p1yeZqA6DZ3pc^f$>@M(>=W;f=grMVk7dO~g( z&-soty3^9~9?Ix6@j!4O4>^;GLwxwpBOc+h3GmaP#E20iMvRzg6Cgx@G{a;ABePT>%h=S&#LUDT#0SfONT5nC0O}VJbn-$ql>h($07*qo IM6N<$f+)qRf&c&j literal 0 HcmV?d00001 diff --git a/packages/website/public/apple-touch-icon-precomposed.png b/packages/website/public/apple-touch-icon-precomposed.png new file mode 100644 index 0000000000000000000000000000000000000000..e4a8f3624cbc5a391368b7d9bc74effee1f40459 GIT binary patch literal 3910 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 bWu*%EB?OEnn`xK)Jpn+N+rgU6uBH7CfUZ20 literal 0 HcmV?d00001 diff --git a/packages/website/public/apple-touch-icon.png b/packages/website/public/apple-touch-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..9bde9f097ed44a256dad9a9d0891e6f23e96f617 GIT binary patch literal 3505 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 T&i#V_lrXTqnO>vL!-W3>Ey$^C literal 0 HcmV?d00001 diff --git a/packages/website/public/browserconfig.xml b/packages/website/public/browserconfig.xml new file mode 100644 index 000000000000..2bb68a6f36dd --- /dev/null +++ b/packages/website/public/browserconfig.xml @@ -0,0 +1,12 @@ + + + + + + + + + #090a16 + + + diff --git a/packages/website/public/favicon-16x16.png b/packages/website/public/favicon-16x16.png new file mode 100644 index 0000000000000000000000000000000000000000..b1f4fd7f6c6add1371a8ffd2a8ef7e4761bb6173 GIT binary patch literal 561 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 XbJDg-?Rl18wQHyr3^y*eVcY)$+&Efn literal 0 HcmV?d00001 diff --git a/packages/website/public/mstile-150x150.png b/packages/website/public/mstile-150x150.png new file mode 100644 index 0000000000000000000000000000000000000000..64f1d830b5510c3ea96354cd868e49961e30bbbd GIT binary patch literal 3174 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 literal 0 HcmV?d00001 diff --git a/packages/website/public/mstile-310x310.png b/packages/website/public/mstile-310x310.png new file mode 100644 index 0000000000000000000000000000000000000000..e6962c2bfdc9ed00ce8c946948f0e0674f474883 GIT binary patch literal 5927 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 literal 0 HcmV?d00001 diff --git a/packages/website/public/mstile-70x70.png b/packages/website/public/mstile-70x70.png new file mode 100644 index 0000000000000000000000000000000000000000..ce5925dca64f3941567174fec29ca710c31be23f GIT binary patch literal 2684 zcmV-?3WN2DP)C00004XF*Lt006O% z3;baP00001b5ch_0Itp)=>Px%lu%4mMNDaN3=0kz2{s9683=J9o+gt<&6951ST>qW4Tl)b83HX#$yIcPM zTU`HPVEg;~{QUj6T>l3M6aWAL!eReg{G1957yQ^;4-XsrTU)+f{{a9DFC8ES0T2fW z6421nU2OmTSX%=J4zI7X|6W`L2M-Dl82{N=^paEmomdhQA^qE2Y%4Mx6EOCVQ&Rt- zTWbAaaQ_z-Br+XM{B>GfZ~tO+|0`=uu0ch`V*h@Ah5z4N|LI^>Z2w~ar)pd>7BDUL zm{aEF=l|?tS#9}SV*WBLAxAhR*4Eiv|CsFT?Px(S4-FWuSn_jpe3?zve?qkV$XZ|j zqVn?dF)=$rCulT2k|;56x3{|g;$9gXC}J~>pi$r{Dl|VFB_|agA{`u;IX<4AqqlBD z>daS&Wd4<9{+{!MVokvzCRb2VSz-UAX=?vRNKuIOi+yMR78^idU}!WnKXhsSEE+{o zDs;q1OHMwUUnMU5f>;q3GyY^-{%u=1EF=1vR1+K?OU{5&+mO)ea;#zhpI`ipM#873 ztZFxyN>|KZ=(lq|s8(2C;o;+!mYkB3n8vD0qhvnkhEV^MS$%Ccy6}5KxOW#fFIqP% zTGF`xUBV z|DfXEW@>A3IYy-Ws8?K~+gtsWTfW9tWb15N;!_NB+3MDE^WHJxZOd{k`vmRSF* zD>{Z*V)k)WGwP(E{Qv*}0d!JMQvg8b*k%9#2Np?0K~#9!?U?s>8pjsLvwPSAtARy} zSRnxmLcmG{VSy!NWC;~pmg4TGVyjw~d#`bid*Zma#CDv#^xpeRp3{?8lGk7Af0H`{ zl8|iwVpcgP=gjvPmbnM+XTNvm&hFfE4;2*^6%`c~)g%d1D+)jXC;$bZ02F`%Pyh-* z0Vn_k_#Fb+Ckai6GDH)G5X0PN^sWIkN3LX9kJtk_QHe;)Awr78;xSgz7?d{vQr29a zHm=Jz`o2uc`lt(xwBguntc}WOdO=b)p4j~D?Ae=VY*;2K2;~V7U@ZlrNzB#4EyJ?L zXVS4VN{K2YlqC{Q91CT}N~>Smyg^c!JRM*y%S~?2nA~olaX%Jh?V|u8tSkU_1QLfb zDyc55p1qM}jCR20_J~~;-98FX0?Gg|+=)<0RTX@%#wsZZm6V2NlQXJ4v=wx;huZ2x%uITPlhl=6(IqH&B#y(Yy`nAzAtDf3s7BBg#nOMQFD3$sOHHh z0R&J^hN`PWr7tbh@&_=93+G^M=@Ly@f;qB13s6Ewx$?VyLIWQii*w`w-(pd z*T4M7jS|Wqz$V`7ld-gYT_Pp`qBRP_097ZO>lXk3HlUbjsl?$vz)7dJ)}B7y$uWW< z0GW=6o;bfk%8m4s!E4AZdFY0hrfOURYRIxB4lGL$})p zjRMeuZ{-4%7uFSG2avSsO}GStj>kI{PP-F=0RYMClL4>;(24)Gh*(hm!s^H81v!NY zObviySw21o0H6+p0g$q3+iFZuSYG}@$F`@=a8Q>i0I=)(GONHetP_CgAPfK&bk?oL zJQ$(9W7{jIBrXt`f>OS06?(mFHisXdt%D;>2H2`e&;{VR0a$J&;lTPkkwbg zmTZHOYXo3!Sy53@Srz~~pY+#f%0Ae?f9KBq`+q8$IdkrJ&rTw^YXF^PS=}M8nI_sy zCh`3_4+I6_762i@R8~Iw!)rfdTZ(XG=(T@NB)D6EF3bA$>ksX|(Ia}G{JV9Z&!Giw z1%O`!D)lozp4&52Rz?W+oHgc|&{R-RfFDRrkiTcx7unZ$EvN@?0|38CD0gSJ`SW`%OAf|w?fi+##5o*Y9KB!V4SX*!iF161$cRVm^Q~-LvZNup_#pyd=FJn{ zYUL4#E@^07Df9U_&{Hs`m8q;+viwB^$zF0)yXBRQD_US0{& zmizz&&2Gt28tD!t5_j~$9E7JrCH_cbL$sms5u6`I_>rW_qa1*@TN|Pf&Zh)Gz~)Ga zL}F^XDaQ8ohy|C^zWW<-hStBqEt+}tqtJ9r{Ue}eB z>XU;jKX1VqTHb*hn@keYrSxB$Bylv?K*z^_^$0cE?%&@T>gF}80LV0 z)PXjq*K2ip{eFKKtN^uLikl$?f5q>0k^xuP?G*i^Qkxh4-3x*Q*0%msjAVdSkQxYs3*$kj zt8HD=r2KiG6Y}xM+TOOX7vG;Z+~&LzjPYY3wQ0Z!-e-e;fA8AhF->#8i9g z2t-r73hB*La#V|WA+D-w3_1?FHO6Z=sN!~Hp1QMQM4H_lEFwW?Ve@RUbb*Wi5L00012dQ@0+Qek%>aB^>EX>4U6 zba`-PAZc)PV*mhnoa6Eg2ys>@D9TUE%t_@^00ScnE@KN5BNI!L6ay0=M1VBIWCJ6! qR3OXP)X2ol#2my2%YaCrN-hBE7ZG&wLN%2D0000 + + + +Created by potrace 1.14, written by Peter Selinger 2001-2017 + + + + + + diff --git a/packages/website/public/site.webmanifest b/packages/website/public/site.webmanifest new file mode 100644 index 000000000000..a0655191f5e7 --- /dev/null +++ b/packages/website/public/site.webmanifest @@ -0,0 +1,19 @@ +{ + "name": "discord.js", + "short_name": "discord.js", + "icons": [ + { + "src": "/android-chrome-192x192.png", + "sizes": "192x192", + "type": "image/png" + }, + { + "src": "/android-chrome-384x384.png", + "sizes": "384x384", + "type": "image/png" + } + ], + "theme_color": "#1a1b1e", + "background_color": "#1a1b1e", + "display": "standalone" +} diff --git a/packages/website/src/components/TableOfContentItems.tsx b/packages/website/src/components/TableOfContentItems.tsx index 3bf8175fc56a..341ffde602d9 100644 --- a/packages/website/src/components/TableOfContentItems.tsx +++ b/packages/website/src/components/TableOfContentItems.tsx @@ -1,4 +1,4 @@ -import { createStyles, Group, Text, Box } from '@mantine/core'; +import { createStyles, Group, Text, Box, Stack } from '@mantine/core'; import { VscListSelection } from 'react-icons/vsc'; import type { ApiClassJSON, ApiInterfaceJSON } from '~/DocModel/ApiNodeJSONEncoder'; @@ -68,18 +68,20 @@ export function TableOfContentItems({ Table of content - {propertyItems.length ? ( - <> - Properties - {propertyItems} - - ) : null} - {methodItems.length ? ( - <> - Methods - {methodItems} - - ) : null} + + {propertyItems.length ? ( + + Properties + {propertyItems} + + ) : null} + {methodItems.length ? ( + + Methods + {methodItems} + + ) : null} + ); } diff --git a/packages/website/src/pages/_app.tsx b/packages/website/src/pages/_app.tsx index fae614656667..41b2b810cdf7 100644 --- a/packages/website/src/pages/_app.tsx +++ b/packages/website/src/pages/_app.tsx @@ -1,7 +1,6 @@ import { ColorScheme, ColorSchemeProvider, MantineProvider } from '@mantine/core'; import { useColorScheme } from '@mantine/hooks'; import type { AppProps } from 'next/app'; -import Head from 'next/head'; import { useEffect, useState } from 'react'; import { RouterTransition } from '~/components/RouterTransition'; import '../styles/unocss.css'; @@ -18,40 +17,34 @@ export default function MyApp({ Component, pageProps }: AppProps) { }, [preferredColorScheme]); return ( - <> - - - - - - - - - - - + + + + + + ); } diff --git a/packages/website/src/pages/_document.tsx b/packages/website/src/pages/_document.tsx index 534ad0ab251e..9ed53f46cc4a 100644 --- a/packages/website/src/pages/_document.tsx +++ b/packages/website/src/pages/_document.tsx @@ -16,7 +16,18 @@ export default class _Document extends Document { public override render() { return ( - + + + + + + + + + + + +
diff --git a/packages/website/src/pages/index.tsx b/packages/website/src/pages/index.tsx index b272bc007e1b..bd06c75efbf4 100644 --- a/packages/website/src/pages/index.tsx +++ b/packages/website/src/pages/index.tsx @@ -2,7 +2,6 @@ import { createStyles, Container, Title, Button, Group, Text, Center } from '@ma import Image from 'next/future/image'; import Link from 'next/link'; import codeSample from '../assets/code-sample.png'; -import vercelLogo from '../assets/powered-by-vercel.svg'; const useStyles = createStyles((theme) => ({ inner: { @@ -62,8 +61,6 @@ const useStyles = createStyles((theme) => ({ }, vercel: { - height: '100%', - maxWidth: 250, paddingBottom: theme.spacing.xl * 4, }, })); @@ -103,9 +100,11 @@ export default function IndexRoute() { From 4fb4492b178dc1583320018fd18bedbbc4d4e429 Mon Sep 17 00:00:00 2001 From: iCrawl Date: Mon, 22 Aug 2022 15:34:21 +0200 Subject: [PATCH 046/155] refactor: icons and head --- .../website/src/components/DocContainer.tsx | 10 ++- packages/website/src/components/Section.tsx | 7 +- packages/website/src/components/Sections.tsx | 8 +-- .../website/src/components/SidebarItems.tsx | 12 ++-- .../website/src/components/SidebarLayout.tsx | 4 +- .../src/components/TableOfContentItems.tsx | 37 ++++++++--- .../website/src/components/model/Enum.tsx | 2 +- packages/website/src/pages/_app.tsx | 65 ++++++++++--------- packages/website/src/pages/_document.tsx | 3 +- packages/website/src/pages/docs/[...slug].tsx | 13 +++- packages/website/src/util/icon.tsx | 14 ++-- 11 files changed, 105 insertions(+), 70 deletions(-) diff --git a/packages/website/src/components/DocContainer.tsx b/packages/website/src/components/DocContainer.tsx index 2b332a1b8cb1..596ba028e84f 100644 --- a/packages/website/src/components/DocContainer.tsx +++ b/packages/website/src/components/DocContainer.tsx @@ -53,7 +53,7 @@ export function DocContainer({ -
} padded dense={matches}> +
} padded dense={matches}> {summary ? : No summary provided.}
@@ -97,7 +97,13 @@ export function DocContainer({ {typeParams?.length ? ( -
} padded dense={matches} defaultClosed> +
} + padded + dense={matches} + defaultClosed + >
) : null} diff --git a/packages/website/src/components/Section.tsx b/packages/website/src/components/Section.tsx index 21894a3a437b..92e30cbee083 100644 --- a/packages/website/src/components/Section.tsx +++ b/packages/website/src/components/Section.tsx @@ -8,7 +8,6 @@ const useStyles = createStyles((theme, { opened }: { opened: boolean }) => ({ width: '100%', padding: `${theme.spacing.xs}px ${theme.spacing.xs}px`, color: theme.colorScheme === 'dark' ? theme.colors.dark![0] : theme.black, - fontSize: theme.fontSizes.sm, '&:hover': { backgroundColor: theme.colorScheme === 'dark' ? theme.colors.dark![6] : theme.colors.gray![0], @@ -45,11 +44,7 @@ export function Section({ setOpened((o) => !o)}> - {icon ? ( - - {icon} - - ) : null} + {icon ? {icon} : null} {title} diff --git a/packages/website/src/components/Sections.tsx b/packages/website/src/components/Sections.tsx index 4fbbfbc7c309..7ed93534ae05 100644 --- a/packages/website/src/components/Sections.tsx +++ b/packages/website/src/components/Sections.tsx @@ -14,7 +14,7 @@ export function PropertiesSection({ data }: { data: ApiClassJSON['properties'] | const matches = useMediaQuery('(max-width: 768px)', true, { getInitialValueInEffect: false }); return data.length ? ( -
} padded dense={matches}> +
} padded dense={matches}>
) : null; @@ -24,7 +24,7 @@ export function MethodsSection({ data }: { data: ApiClassJSON['methods'] | ApiIn const matches = useMediaQuery('(max-width: 768px)', true, { getInitialValueInEffect: false }); return data.length ? ( -
} padded dense={matches}> +
} padded dense={matches}>
) : null; @@ -34,7 +34,7 @@ export function ParametersSection({ data }: { data: ParameterDocumentation[] }) const matches = useMediaQuery('(max-width: 768px)', true, { getInitialValueInEffect: false }); return data.length ? ( -
} padded dense={matches}> +
} padded dense={matches}>
) : null; @@ -53,7 +53,7 @@ export function ConstructorSection({ data }: { data: ApiConstructorJSON }) { }, '')})`; return data.parameters.length ? ( -
} padded dense={matches}> +
} padded dense={matches}> diff --git a/packages/website/src/components/SidebarItems.tsx b/packages/website/src/components/SidebarItems.tsx index dc980a806a82..b1e9913de868 100644 --- a/packages/website/src/components/SidebarItems.tsx +++ b/packages/website/src/components/SidebarItems.tsx @@ -51,17 +51,17 @@ function groupMembers(members: Members): GroupedMembers { function resolveIcon(item: keyof GroupedMembers) { switch (item) { case 'Classes': - return ; + return ; case 'Enums': - return ; + return ; case 'Interfaces': - return ; + return ; case 'Types': - return ; + return ; case 'Variables': - return ; + return ; case 'Functions': - return ; + return ; } } diff --git a/packages/website/src/components/SidebarLayout.tsx b/packages/website/src/components/SidebarLayout.tsx index ff2ec1e28055..1dcd2ceb58a8 100644 --- a/packages/website/src/components/SidebarLayout.tsx +++ b/packages/website/src/components/SidebarLayout.tsx @@ -130,8 +130,8 @@ export function SidebarLayout({ packageName, data, children }: PropsWithChildren - - + + {packageName} diff --git a/packages/website/src/components/TableOfContentItems.tsx b/packages/website/src/components/TableOfContentItems.tsx index 341ffde602d9..c4a3d3e5a582 100644 --- a/packages/website/src/components/TableOfContentItems.tsx +++ b/packages/website/src/components/TableOfContentItems.tsx @@ -1,5 +1,5 @@ -import { createStyles, Group, Text, Box, Stack } from '@mantine/core'; -import { VscListSelection } from 'react-icons/vsc'; +import { createStyles, Group, Text, Box, Stack, ThemeIcon } from '@mantine/core'; +import { VscListSelection, VscSymbolMethod, VscSymbolProperty } from 'react-icons/vsc'; import type { ApiClassJSON, ApiInterfaceJSON } from '~/DocModel/ApiNodeJSONEncoder'; const useStyles = createStyles((theme) => ({ @@ -13,13 +13,14 @@ const useStyles = createStyles((theme) => ({ fontSize: theme.fontSizes.sm, padding: theme.spacing.xs, paddingLeft: theme.spacing.md, - marginLeft: 8, + marginLeft: 14, borderTopRightRadius: theme.radius.sm, borderBottomRightRadius: theme.radius.sm, borderLeft: `1px solid ${theme.colorScheme === 'dark' ? theme.colors.dark![4] : theme.colors.gray![3]}`, '&:hover': { backgroundColor: theme.colorScheme === 'dark' ? theme.colors.dark![6] : theme.colors.gray![0], + color: theme.colorScheme === 'dark' ? theme.white : theme.black, }, }, })); @@ -64,20 +65,38 @@ export function TableOfContentItems({ return ( - - - Table of content + + + Table of contents - + {propertyItems.length ? ( - Properties + + + + + + + Properties + + + {propertyItems} ) : null} {methodItems.length ? ( - Methods + + + + + + + Methods + + + {methodItems} ) : null} diff --git a/packages/website/src/components/model/Enum.tsx b/packages/website/src/components/model/Enum.tsx index 3dcaaff7950b..0dfe7618428b 100644 --- a/packages/website/src/components/model/Enum.tsx +++ b/packages/website/src/components/model/Enum.tsx @@ -11,7 +11,7 @@ export function Enum({ data }: { data: ApiEnumJSON }) { return ( -
} padded dense={matches}> +
} padded dense={matches}> {data.members.map((member) => ( - - - - - + <> + + discord.js + + + + + + + + + ); } diff --git a/packages/website/src/pages/_document.tsx b/packages/website/src/pages/_document.tsx index 9ed53f46cc4a..452d086dd25b 100644 --- a/packages/website/src/pages/_document.tsx +++ b/packages/website/src/pages/_document.tsx @@ -15,9 +15,8 @@ export default class _Document extends Document { public override render() { return ( - + - diff --git a/packages/website/src/pages/docs/[...slug].tsx b/packages/website/src/pages/docs/[...slug].tsx index 6cdef84c88f6..0c85706aed14 100644 --- a/packages/website/src/pages/docs/[...slug].tsx +++ b/packages/website/src/pages/docs/[...slug].tsx @@ -1,8 +1,8 @@ -/* eslint-disable @typescript-eslint/no-throw-literal */ import { readFile } from 'node:fs/promises'; import { join } from 'node:path'; import { Box } from '@mantine/core'; import { ApiFunction } from '@microsoft/api-extractor-model'; +import Head from 'next/head'; import type { GetStaticPaths, GetStaticProps } from 'next/types'; import type { ApiClassJSON, @@ -150,7 +150,16 @@ export default function Slug(props: Partial{props.error} ) : ( - {props.data?.member ? member(props.data.member) : null} + + {props.data?.member ? ( + <> + + discord.js | {props.data.member.name} + + {member(props.data.member)} + + ) : null} + ); } diff --git a/packages/website/src/util/icon.tsx b/packages/website/src/util/icon.tsx index 26a614e61528..a5945796e348 100644 --- a/packages/website/src/util/icon.tsx +++ b/packages/website/src/util/icon.tsx @@ -1,13 +1,13 @@ import { VscSymbolClass, VscSymbolMethod, VscSymbolEnum, VscSymbolInterface, VscSymbolVariable } from 'react-icons/vsc'; -export function generateIcon(kind: string, className?: string) { +export function generateIcon(kind: string) { const icons = { - Class: , - Method: , - Function: , - Enum: , - Interface: , - TypeAlias: , + Class: , + Method: , + Function: , + Enum: , + Interface: , + TypeAlias: , }; return icons[kind as keyof typeof icons]; From 191951ac286353ccd08e143afe44198181f11bd7 Mon Sep 17 00:00:00 2001 From: iCrawl Date: Mon, 22 Aug 2022 15:38:47 +0200 Subject: [PATCH 047/155] feat: add ToC to interfaces --- packages/website/src/components/DocContainer.tsx | 8 ++++---- packages/website/src/components/model/Interface.tsx | 2 ++ 2 files changed, 6 insertions(+), 4 deletions(-) diff --git a/packages/website/src/components/DocContainer.tsx b/packages/website/src/components/DocContainer.tsx index 596ba028e84f..64493199c825 100644 --- a/packages/website/src/components/DocContainer.tsx +++ b/packages/website/src/components/DocContainer.tsx @@ -9,7 +9,7 @@ import { Section } from './Section'; import { TableOfContentItems } from './TableOfContentItems'; import { TypeParamTable } from './TypeParamTable'; import { TSDoc } from './tsdoc/TSDoc'; -import type { ApiClassJSON, ApiItemJSON } from '~/DocModel/ApiNodeJSONEncoder'; +import type { ApiClassJSON, ApiInterfaceJSON, ApiItemJSON } from '~/DocModel/ApiNodeJSONEncoder'; import type { TypeParameterData } from '~/DocModel/TypeParameterMixin'; import type { AnyDocNodeJSON } from '~/DocModel/comment/CommentNode'; import { generateIcon } from '~/util/icon'; @@ -25,8 +25,8 @@ export interface DocContainerProps { implementsTokens?: TokenDocumentation[][]; typeParams?: TypeParameterData[]; comment?: AnyDocNodeJSON | null; - methods?: ApiClassJSON['methods'] | null; - properties?: ApiClassJSON['properties'] | null; + methods?: ApiClassJSON['methods'] | ApiInterfaceJSON['methods'] | null; + properties?: ApiClassJSON['properties'] | ApiInterfaceJSON['properties'] | null; } export function DocContainer({ @@ -110,7 +110,7 @@ export function DocContainer({ {children} - {kind === 'Class' && (methods?.length || properties?.length) ? ( + {(kind === 'Class' || kind === 'Interface') && (methods?.length || properties?.length) ? (
diff --git a/packages/website/src/components/TypeParamTable.tsx b/packages/website/src/components/TypeParamTable.tsx index 497755c6d4b6..ed27b6015db9 100644 --- a/packages/website/src/components/TypeParamTable.tsx +++ b/packages/website/src/components/TypeParamTable.tsx @@ -21,7 +21,7 @@ export function TypeParamTable({ data }: { data: TypeParameterData[] }) { return ( - +
{ } catch { return { props: { - error: 'FetchError', + notFound: true, }, }; } diff --git a/packages/website/src/pages/docs/packages/[package]/index.tsx b/packages/website/src/pages/docs/packages/[package]/index.tsx index 9d1dfbf0fa02..cbbbf1717373 100644 --- a/packages/website/src/pages/docs/packages/[package]/index.tsx +++ b/packages/website/src/pages/docs/packages/[package]/index.tsx @@ -29,6 +29,12 @@ export const getStaticProps: GetStaticProps = async ({ params }) => { // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment const data: string[] = await res.json(); + if (!data.length) { + return { + notFound: true, + }; + } + return { props: { packageName, @@ -37,10 +43,10 @@ export const getStaticProps: GetStaticProps = async ({ params }) => { }, }, }; - } catch (error) { + } catch { return { props: { - error: 'FetchError', + notFound: true, }, }; } From 29c51be1f4fdacfa13fe144333dfca2a48a37e95 Mon Sep 17 00:00:00 2001 From: iCrawl Date: Mon, 22 Aug 2022 23:58:33 +0200 Subject: [PATCH 061/155] feat: custom 404 --- packages/website/src/pages/404.tsx | 35 ++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) create mode 100644 packages/website/src/pages/404.tsx diff --git a/packages/website/src/pages/404.tsx b/packages/website/src/pages/404.tsx new file mode 100644 index 000000000000..68f3f41ba0ca --- /dev/null +++ b/packages/website/src/pages/404.tsx @@ -0,0 +1,35 @@ +import { Container, Title, Group, Button, Box, createStyles } from '@mantine/core'; +import Link from 'next/link'; + +const useStyles = createStyles((theme) => ({ + label: { + textAlign: 'center', + fontWeight: 900, + fontSize: 220, + lineHeight: 1, + marginBottom: theme.spacing.xl * 1.5, + color: theme.colorScheme === 'dark' ? theme.colors.dark![4] : theme.colors.gray![2], + + [theme.fn.smallerThan('sm')]: { + fontSize: 120, + }, + }, +})); + +export default function FourOhFourPage() { + const { classes } = useStyles(); + + return ( + + 404 + Not found. + + + + + + + ); +} From ee030003ec0cab0b1343ac2d5d1ead9019d307d2 Mon Sep 17 00:00:00 2001 From: iCrawl Date: Mon, 22 Aug 2022 23:58:49 +0200 Subject: [PATCH 062/155] fix: markdown images and links --- packages/website/src/pages/docs/[...slug].tsx | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/packages/website/src/pages/docs/[...slug].tsx b/packages/website/src/pages/docs/[...slug].tsx index 52d2fea728d4..9433fe0ee724 100644 --- a/packages/website/src/pages/docs/[...slug].tsx +++ b/packages/website/src/pages/docs/[...slug].tsx @@ -234,7 +234,21 @@ export default function Slug(props: Partial ) : props.data?.source ? ( - + ({ + a: { + backgroundColor: 'transparent', + color: theme.colors.blurple![0], + textDecoration: 'none', + }, + img: { + borderStyle: 'none', + maxWidth: '100%', + boxSizing: 'content-box', + }, + })} + px="xl" + > ) : null} From 0fb26948718533874ded7dd8fc3dbc9ec4e3d36c Mon Sep 17 00:00:00 2001 From: iCrawl Date: Tue, 23 Aug 2022 00:13:04 +0200 Subject: [PATCH 063/155] refactor: switch to ssr for unbuilt pages --- packages/website/src/pages/docs/[...slug].tsx | 3 ++- packages/website/src/pages/docs/packages/[package]/index.tsx | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/website/src/pages/docs/[...slug].tsx b/packages/website/src/pages/docs/[...slug].tsx index 9433fe0ee724..992b7a5d928f 100644 --- a/packages/website/src/pages/docs/[...slug].tsx +++ b/packages/website/src/pages/docs/[...slug].tsx @@ -121,7 +121,7 @@ export const getStaticPaths: GetStaticPaths = async () => { return { paths: pkgs, - fallback: true, + fallback: 'blocking', }; }; @@ -174,6 +174,7 @@ export const getStaticProps: GetStaticProps = async ({ params }) => { memberName && containerKey ? findMemberByKey(model, packageName, containerKey, branchName) ?? null : null, source: mdxSource, }, + revalidate: 3600, }, }; } catch { diff --git a/packages/website/src/pages/docs/packages/[package]/index.tsx b/packages/website/src/pages/docs/packages/[package]/index.tsx index cbbbf1717373..4018d8bb9e17 100644 --- a/packages/website/src/pages/docs/packages/[package]/index.tsx +++ b/packages/website/src/pages/docs/packages/[package]/index.tsx @@ -17,7 +17,7 @@ export const getStaticPaths: GetStaticPaths = () => { return { paths: versions, - fallback: true, + fallback: 'blocking', }; }; @@ -41,6 +41,7 @@ export const getStaticProps: GetStaticProps = async ({ params }) => { data: { versions: data, }, + revalidate: 3600, }, }; } catch { From f16b11a91d4b5878ef2025858818a8c55c027c15 Mon Sep 17 00:00:00 2001 From: iCrawl Date: Tue, 23 Aug 2022 00:44:09 +0200 Subject: [PATCH 064/155] feat: active navigation and back button --- packages/website/src/components/Section.tsx | 22 ++++++++++-- .../website/src/components/SidebarItems.tsx | 34 ++++++++++++------- .../website/src/components/SidebarLayout.tsx | 8 +++-- .../src/components/TableOfContentItems.tsx | 10 +++--- .../pages/docs/packages/[package]/index.tsx | 27 +++++++++++++-- .../website/src/pages/docs/packages/index.tsx | 17 ++++++++-- 6 files changed, 91 insertions(+), 27 deletions(-) diff --git a/packages/website/src/components/Section.tsx b/packages/website/src/components/Section.tsx index b407fa20cf1c..3864807b9bb5 100644 --- a/packages/website/src/components/Section.tsx +++ b/packages/website/src/components/Section.tsx @@ -1,4 +1,13 @@ -import { createStyles, UnstyledButton, Group, ThemeIcon, Collapse, Box, Text } from '@mantine/core'; +import { + createStyles, + UnstyledButton, + Group, + ThemeIcon, + Collapse, + Box, + Text, + useMantineColorScheme, +} from '@mantine/core'; import { type ReactNode, useState } from 'react'; import { VscChevronDown } from 'react-icons/vsc'; @@ -8,9 +17,11 @@ const useStyles = createStyles((theme, { opened }: { opened: boolean }) => ({ width: '100%', padding: theme.spacing.xs, color: theme.colorScheme === 'dark' ? theme.colors.dark![0] : theme.black, + backgroundColor: theme.colorScheme === 'dark' ? theme.colors.dark![7] : 'transparent', + borderRadius: theme.radius.xs, '&:hover': { - backgroundColor: theme.colorScheme === 'dark' ? theme.colors.dark![6] : theme.colors.gray![0], + backgroundColor: theme.colorScheme === 'dark' ? theme.colors.dark![5] : theme.colors.gray![2], color: theme.colorScheme === 'dark' ? theme.white : theme.black, }, }, @@ -37,6 +48,7 @@ export function Section({ children: ReactNode; }) { const [opened, setOpened] = useState(!defaultClosed); + const { colorScheme } = useMantineColorScheme(); const { classes } = useStyles({ opened }); return ( @@ -44,7 +56,11 @@ export function Section({ setOpened((o) => !o)}> - {icon ? {icon} : null} + {icon ? ( + + {icon} + + ) : null} {title} diff --git a/packages/website/src/components/SidebarItems.tsx b/packages/website/src/components/SidebarItems.tsx index b1e9913de868..379c2f5c4ae9 100644 --- a/packages/website/src/components/SidebarItems.tsx +++ b/packages/website/src/components/SidebarItems.tsx @@ -1,5 +1,6 @@ -import { createStyles, UnstyledButton, Group, Text } from '@mantine/core'; +import { createStyles, Group, Text, NavLink } from '@mantine/core'; import Link from 'next/link'; +import { useRouter } from 'next/router'; import type { Dispatch, SetStateAction } from 'react'; import { VscSymbolClass, @@ -69,6 +70,7 @@ const useStyles = createStyles((theme) => ({ link: { fontWeight: 500, display: 'block', + width: 'unset', padding: 5, paddingLeft: 31, marginLeft: 25, @@ -90,6 +92,7 @@ export function SidebarItems({ members: Members; setOpened: Dispatch>; }) { + const router = useRouter(); const { classes } = useStyles(); const groupItems = groupMembers(members); @@ -101,18 +104,25 @@ export function SidebarItems({
{groupItems[group].map((member, i) => ( - setOpened((o) => !o)}> - - - {member.name} - - {member.overloadIndex && member.overloadIndex > 1 ? ( - - {member.overloadIndex} + setOpened((o) => !o)} + label={ + + + {member.name} - ) : null} - - + {member.overloadIndex && member.overloadIndex > 1 ? ( + + {member.overloadIndex} + + ) : null} + + } + active={router.asPath === member.path} + variant="filled" + > ))}
diff --git a/packages/website/src/components/SidebarLayout.tsx b/packages/website/src/components/SidebarLayout.tsx index 14e56628855e..e9e4d0ab1598 100644 --- a/packages/website/src/components/SidebarLayout.tsx +++ b/packages/website/src/components/SidebarLayout.tsx @@ -66,9 +66,11 @@ const useStyles = createStyles( width: '100%', padding: theme.spacing.xs, color: theme.colorScheme === 'dark' ? theme.colors.dark![0] : theme.black, + backgroundColor: theme.colorScheme === 'dark' ? theme.colors.dark![6] : theme.colors.gray![1], + borderRadius: theme.radius.xs, '&:hover': { - backgroundColor: theme.colorScheme === 'dark' ? theme.colors.dark![6] : theme.colors.gray![0], + backgroundColor: theme.colorScheme === 'dark' ? theme.colors.dark![5] : theme.colors.gray![2], color: theme.colorScheme === 'dark' ? theme.white : theme.black, }, }, @@ -163,7 +165,7 @@ export function SidebarLayout({ - + @@ -187,7 +189,7 @@ export function SidebarLayout({ - + diff --git a/packages/website/src/components/TableOfContentItems.tsx b/packages/website/src/components/TableOfContentItems.tsx index 4b9653b903a4..8fbec025f756 100644 --- a/packages/website/src/components/TableOfContentItems.tsx +++ b/packages/website/src/components/TableOfContentItems.tsx @@ -1,4 +1,4 @@ -import { createStyles, Group, Text, Box, Stack, ThemeIcon } from '@mantine/core'; +import { createStyles, Group, Text, Box, Stack, ThemeIcon, useMantineColorScheme } from '@mantine/core'; import { VscListSelection, VscSymbolMethod, VscSymbolProperty } from 'react-icons/vsc'; import type { ApiClassJSON, ApiInterfaceJSON } from '~/DocModel/ApiNodeJSONEncoder'; @@ -8,7 +8,7 @@ const useStyles = createStyles((theme) => ({ ...theme.fn.focusStyles(), display: 'block', textDecoration: 'none', - color: theme.colorScheme === 'dark' ? theme.colors.dark![0] : theme.black, + color: theme.colorScheme === 'dark' ? theme.colors.dark![0] : theme.colors.gray![7], lineHeight: 1.2, fontSize: theme.fontSizes.sm, padding: theme.spacing.xs, @@ -17,6 +17,7 @@ const useStyles = createStyles((theme) => ({ borderTopRightRadius: theme.radius.sm, borderBottomRightRadius: theme.radius.sm, borderLeft: `1px solid ${theme.colorScheme === 'dark' ? theme.colors.dark![4] : theme.colors.gray![3]}`, + fontWeight: 500, '&:hover': { backgroundColor: theme.colorScheme === 'dark' ? theme.colors.dark![6] : theme.colors.gray![0], @@ -32,6 +33,7 @@ export function TableOfContentItems({ methods: ApiClassJSON['methods'] | ApiInterfaceJSON['methods']; properties: ApiClassJSON['properties'] | ApiInterfaceJSON['properties']; }) { + const { colorScheme } = useMantineColorScheme(); const { classes } = useStyles(); const propertyItems = properties.map((prop) => ( @@ -73,7 +75,7 @@ export function TableOfContentItems({ {propertyItems.length ? ( - + @@ -88,7 +90,7 @@ export function TableOfContentItems({ {methodItems.length ? ( - + diff --git a/packages/website/src/pages/docs/packages/[package]/index.tsx b/packages/website/src/pages/docs/packages/[package]/index.tsx index 4018d8bb9e17..285ebdd9b2ba 100644 --- a/packages/website/src/pages/docs/packages/[package]/index.tsx +++ b/packages/website/src/pages/docs/packages/[package]/index.tsx @@ -1,7 +1,20 @@ -import { Container, UnstyledButton, createStyles, Group, ThemeIcon, Text, Stack, Box, Title } from '@mantine/core'; +import { + Container, + UnstyledButton, + createStyles, + Group, + ThemeIcon, + Text, + Stack, + Box, + Title, + useMantineColorScheme, + Affix, +} from '@mantine/core'; import Link from 'next/link'; +import { useRouter } from 'next/router'; import type { GetStaticPaths, GetStaticProps } from 'next/types'; -import { VscArrowRight, VscPackage } from 'react-icons/vsc'; +import { VscArrowLeft, VscArrowRight, VscPackage } from 'react-icons/vsc'; interface VersionProps { packageName: string; @@ -57,6 +70,7 @@ const useStyles = createStyles((theme) => ({ control: { padding: theme.spacing.xs, color: theme.colorScheme === 'dark' ? theme.colors.dark![0] : theme.black, + borderRadius: theme.radius.xs, '&:hover': { backgroundColor: theme.colorScheme === 'dark' ? theme.colors.dark![6] : theme.colors.gray![0], @@ -66,7 +80,9 @@ const useStyles = createStyles((theme) => ({ })); export default function VersionsRoute(props: Partial & { error?: string }) { + const router = useRouter(); const { classes } = useStyles(); + const { colorScheme } = useMantineColorScheme(); return props.error ? ( {props.error} @@ -81,7 +97,7 @@ export default function VersionsRoute(props: Partial & { error?: s - + @@ -94,6 +110,11 @@ export default function VersionsRoute(props: Partial & { error?: s )) ?? null} + + void router.push('/docs/packages')}> + + + ); } diff --git a/packages/website/src/pages/docs/packages/index.tsx b/packages/website/src/pages/docs/packages/index.tsx index 3eb5f886da2c..5631ecaabc5a 100644 --- a/packages/website/src/pages/docs/packages/index.tsx +++ b/packages/website/src/pages/docs/packages/index.tsx @@ -1,4 +1,14 @@ -import { Container, UnstyledButton, createStyles, Group, ThemeIcon, Text, Stack, Title } from '@mantine/core'; +import { + Container, + UnstyledButton, + createStyles, + Group, + ThemeIcon, + Text, + Stack, + Title, + useMantineColorScheme, +} from '@mantine/core'; import Link from 'next/link'; import { VscArrowRight, VscPackage } from 'react-icons/vsc'; @@ -6,6 +16,7 @@ const useStyles = createStyles((theme) => ({ control: { padding: theme.spacing.xs, color: theme.colorScheme === 'dark' ? theme.colors.dark![0] : theme.black, + borderRadius: theme.radius.xs, '&:hover': { backgroundColor: theme.colorScheme === 'dark' ? theme.colors.dark![6] : theme.colors.gray![0], @@ -16,6 +27,8 @@ const useStyles = createStyles((theme) => ({ export default function PackagesRoute() { const { classes } = useStyles(); + const { colorScheme } = useMantineColorScheme(); + const packages = ['builders', 'collection', 'proxy', 'rest', 'voice', 'ws']; return ( @@ -29,7 +42,7 @@ export default function PackagesRoute() { - + From a55545850a3abb04f239adb14c341795fb9e313c Mon Sep 17 00:00:00 2001 From: iCrawl Date: Tue, 23 Aug 2022 01:02:46 +0200 Subject: [PATCH 065/155] refactor: better spacing --- .../website/src/components/DocContainer.tsx | 2 +- .../website/src/components/ParameterTable.tsx | 2 +- .../website/src/components/SidebarLayout.tsx | 24 +++++++++++++------ .../src/components/TableOfContentItems.tsx | 4 ++-- .../website/src/components/TypeParamTable.tsx | 18 +++++++------- 5 files changed, 29 insertions(+), 21 deletions(-) diff --git a/packages/website/src/components/DocContainer.tsx b/packages/website/src/components/DocContainer.tsx index 6fab957a799b..c12afc1e21ab 100644 --- a/packages/website/src/components/DocContainer.tsx +++ b/packages/website/src/components/DocContainer.tsx @@ -133,7 +133,7 @@ export function DocContainer({ {(kind === 'Class' || kind === 'Interface') && (methods?.length || properties?.length) ? ( diff --git a/packages/website/src/components/ParameterTable.tsx b/packages/website/src/components/ParameterTable.tsx index 8670ba180f64..75f3d6b5474d 100644 --- a/packages/website/src/components/ParameterTable.tsx +++ b/packages/website/src/components/ParameterTable.tsx @@ -19,7 +19,7 @@ export function ParameterTable({ data }: { data: ParameterDocumentation[] }) { return ( - +
diff --git a/packages/website/src/components/SidebarLayout.tsx b/packages/website/src/components/SidebarLayout.tsx index e9e4d0ab1598..394aafc42196 100644 --- a/packages/website/src/components/SidebarLayout.tsx +++ b/packages/website/src/components/SidebarLayout.tsx @@ -140,12 +140,12 @@ export function SidebarLayout({ return ( ({ main: { background: theme.colorScheme === 'dark' ? theme.colors.dark![8] : theme.colors.gray![0], overflowX: 'auto', }, - }} + })} padding={0} navbarOffsetBreakpoint="md" asideOffsetBreakpoint="md" @@ -213,7 +213,16 @@ export function SidebarLayout({ } header={ -
+
({ + boxShadow: + theme.colorScheme === 'dark' + ? '0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1)' + : 'unset', + })} + height={70} + p="md" + > @@ -244,12 +253,13 @@ export function SidebarLayout({ >
({ position: 'relative', minHeight: 'calc(100vh - 50px)', zIndex: 1, background: theme.colorScheme === 'dark' ? theme.colors.dark![8] : theme.colors.gray![0], - }} + boxShadow: '0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1)', + })} p="lg" pb={80} > @@ -257,7 +267,7 @@ export function SidebarLayout({ ({ position: 'fixed', bottom: 0, left: 0, @@ -274,7 +284,7 @@ export function SidebarLayout({ [theme.fn.smallerThan('md')]: { paddingLeft: 24, }, - }} + })} pt={70} >
diff --git a/packages/website/src/components/TableOfContentItems.tsx b/packages/website/src/components/TableOfContentItems.tsx index 8fbec025f756..bea884596ae4 100644 --- a/packages/website/src/components/TableOfContentItems.tsx +++ b/packages/website/src/components/TableOfContentItems.tsx @@ -67,9 +67,9 @@ export function TableOfContentItems({ return ( - + - Table of contents + Table of contents {propertyItems.length ? ( diff --git a/packages/website/src/components/TypeParamTable.tsx b/packages/website/src/components/TypeParamTable.tsx index ed27b6015db9..ceafefb752fd 100644 --- a/packages/website/src/components/TypeParamTable.tsx +++ b/packages/website/src/components/TypeParamTable.tsx @@ -1,4 +1,4 @@ -import { Box, ScrollArea } from '@mantine/core'; +import { ScrollArea } from '@mantine/core'; import { HyperlinkedText } from './HyperlinkedText'; import { Table } from './Table'; import { TSDoc } from './tsdoc/TSDoc'; @@ -20,14 +20,12 @@ export function TypeParamTable({ data }: { data: TypeParameterData[] }) { }; return ( - - -
- - + +
+ ); } From 0b56184ba77c287c9907545b5bc41fcb0804f9fe Mon Sep 17 00:00:00 2001 From: iCrawl Date: Tue, 23 Aug 2022 01:21:28 +0200 Subject: [PATCH 066/155] fix: github link and light theme hover nav link --- .../website/src/components/SidebarItems.tsx | 4 +++ .../website/src/components/SidebarLayout.tsx | 35 +++++++++++++------ 2 files changed, 29 insertions(+), 10 deletions(-) diff --git a/packages/website/src/components/SidebarItems.tsx b/packages/website/src/components/SidebarItems.tsx index 379c2f5c4ae9..cb0bb6796eae 100644 --- a/packages/website/src/components/SidebarItems.tsx +++ b/packages/website/src/components/SidebarItems.tsx @@ -81,6 +81,10 @@ const useStyles = createStyles((theme) => ({ '&:hover': { backgroundColor: theme.colorScheme === 'dark' ? theme.colors.dark![6] : theme.colors.gray![0], color: theme.colorScheme === 'dark' ? theme.white : theme.black, + + '&[data-active]': { + color: theme.white, + }, }, }, })); diff --git a/packages/website/src/components/SidebarLayout.tsx b/packages/website/src/components/SidebarLayout.tsx index 394aafc42196..aa4037122b63 100644 --- a/packages/website/src/components/SidebarLayout.tsx +++ b/packages/website/src/components/SidebarLayout.tsx @@ -26,7 +26,7 @@ import Image from 'next/future/image'; import Link from 'next/link'; import { useRouter } from 'next/router'; import { type PropsWithChildren, useState } from 'react'; -import { VscChevronDown, VscPackage, VscVersions } from 'react-icons/vsc'; +import { VscChevronDown, VscGithubInverted, VscPackage, VscVersions } from 'react-icons/vsc'; import { WiDaySunny, WiNightClear } from 'react-icons/wi'; import useSWR from 'swr'; import { SidebarItems } from './SidebarItems'; @@ -110,7 +110,6 @@ export function SidebarLayout({ ); const theme = useMantineTheme(); const { colorScheme, toggleColorScheme } = useMantineColorScheme(); - const dark = colorScheme === 'dark'; const [opened, setOpened] = useState(false); const [openedLibPicker, setOpenedLibPicker] = useState(false); @@ -239,14 +238,29 @@ export function SidebarLayout({ {breadcrumbs} - toggleColorScheme()} - title="Toggle color scheme" - > - {dark ? : } - + + + + + + + toggleColorScheme()} + title="Toggle color scheme" + radius="xs" + > + {colorScheme === 'dark' ? : } + + } @@ -267,6 +281,7 @@ export function SidebarLayout({ ({ position: 'fixed', bottom: 0, From 360936140b71f0c6a585dd702a24e3f6cfe94b3c Mon Sep 17 00:00:00 2001 From: iCrawl Date: Tue, 23 Aug 2022 01:26:57 +0200 Subject: [PATCH 067/155] fix: don't persist state between pages --- packages/website/src/pages/docs/[...slug].tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/website/src/pages/docs/[...slug].tsx b/packages/website/src/pages/docs/[...slug].tsx index 992b7a5d928f..83e81a7c4b7e 100644 --- a/packages/website/src/pages/docs/[...slug].tsx +++ b/packages/website/src/pages/docs/[...slug].tsx @@ -174,6 +174,7 @@ export const getStaticProps: GetStaticProps = async ({ params }) => { memberName && containerKey ? findMemberByKey(model, packageName, containerKey, branchName) ?? null : null, source: mdxSource, }, + key: `${memberName ?? 'index'}-${branchName}`, revalidate: 3600, }, }; From 2ecb862e76005948ad264ecdc9732efb054cba92 Mon Sep 17 00:00:00 2001 From: iCrawl Date: Tue, 23 Aug 2022 01:43:10 +0200 Subject: [PATCH 068/155] feat: use fallback with loading --- .../website/src/components/DocContainer.tsx | 78 +++++++++++-------- .../website/src/components/model/Class.tsx | 12 ++- .../website/src/components/model/Enum.tsx | 32 ++++---- .../website/src/components/model/Function.tsx | 8 +- .../src/components/model/Interface.tsx | 12 ++- packages/website/src/pages/docs/[...slug].tsx | 2 +- .../pages/docs/packages/[package]/index.tsx | 2 +- 7 files changed, 91 insertions(+), 55 deletions(-) diff --git a/packages/website/src/components/DocContainer.tsx b/packages/website/src/components/DocContainer.tsx index c12afc1e21ab..a212a03c5c15 100644 --- a/packages/website/src/components/DocContainer.tsx +++ b/packages/website/src/components/DocContainer.tsx @@ -1,5 +1,6 @@ -import { Group, Stack, Title, Text, Box, MediaQuery, Aside, ScrollArea } from '@mantine/core'; +import { Group, Stack, Title, Text, Box, MediaQuery, Aside, ScrollArea, Skeleton } from '@mantine/core'; import { useMediaQuery } from '@mantine/hooks'; +import { useRouter } from 'next/router'; import { Fragment, ReactNode } from 'react'; import { VscSymbolClass, @@ -61,32 +62,39 @@ export function DocContainer({ methods, properties, }: DocContainerProps) { + const router = useRouter(); const matches = useMediaQuery('(max-width: 768px)', true, { getInitialValueInEffect: false }); return ( - - <Group> - {generateIcon(kind)} - {name} - </Group> - + + + <Group> + {generateIcon(kind)} + {name} + </Group> + + -
} padded dense={matches}> - {summary ? : No summary provided.} -
+ +
} padded dense={matches}> + {summary ? : No summary provided.} +
+
- - - {excerpt} - - + + + + {excerpt} + + + {extendsTokens?.length ? ( @@ -115,20 +123,22 @@ export function DocContainer({ ) : null} - - {typeParams?.length ? ( -
} - padded - dense={matches} - defaultClosed - > - -
- ) : null} - {children} -
+ + + {typeParams?.length ? ( +
} + padded + dense={matches} + defaultClosed + > + +
+ ) : null} + {children} +
+
{(kind === 'Class' || kind === 'Interface') && (methods?.length || properties?.length) ? ( diff --git a/packages/website/src/components/model/Class.tsx b/packages/website/src/components/model/Class.tsx index 2bcd8728ec1f..9f09c57e7a5c 100644 --- a/packages/website/src/components/model/Class.tsx +++ b/packages/website/src/components/model/Class.tsx @@ -1,8 +1,12 @@ +import { Skeleton } from '@mantine/core'; +import { useRouter } from 'next/router'; import { DocContainer } from '../DocContainer'; import { ConstructorSection, MethodsSection, PropertiesSection } from '../Sections'; import type { ApiClassJSON } from '~/DocModel/ApiNodeJSONEncoder'; export function Class({ data }: { data: ApiClassJSON }) { + const router = useRouter(); + return ( {data.constructor ? : null} - - + + + + + + ); } diff --git a/packages/website/src/components/model/Enum.tsx b/packages/website/src/components/model/Enum.tsx index 0dfe7618428b..9723bdc4565d 100644 --- a/packages/website/src/components/model/Enum.tsx +++ b/packages/website/src/components/model/Enum.tsx @@ -1,5 +1,6 @@ -import { Stack } from '@mantine/core'; +import { Skeleton, Stack } from '@mantine/core'; import { useMediaQuery } from '@mantine/hooks'; +import { useRouter } from 'next/router'; import { VscSymbolEnumMember } from 'react-icons/vsc'; import { CodeListing, CodeListingSeparatorType } from '../CodeListing'; import { DocContainer } from '../DocContainer'; @@ -7,23 +8,26 @@ import { Section } from '../Section'; import type { ApiEnumJSON } from '~/DocModel/ApiNodeJSONEncoder'; export function Enum({ data }: { data: ApiEnumJSON }) { + const router = useRouter(); const matches = useMediaQuery('(max-width: 768px)', true, { getInitialValueInEffect: false }); return ( -
} padded dense={matches}> - - {data.members.map((member) => ( - - ))} - -
+ +
} padded dense={matches}> + + {data.members.map((member) => ( + + ))} + +
+
); } diff --git a/packages/website/src/components/model/Function.tsx b/packages/website/src/components/model/Function.tsx index 3314e3283142..0e1828a1b094 100644 --- a/packages/website/src/components/model/Function.tsx +++ b/packages/website/src/components/model/Function.tsx @@ -1,8 +1,12 @@ +import { Skeleton } from '@mantine/core'; +import { useRouter } from 'next/router'; import { DocContainer } from '../DocContainer'; import { ParametersSection } from '../Sections'; import type { ApiFunctionJSON } from '~/DocModel/ApiNodeJSONEncoder'; export function Function({ data }: { data: ApiFunctionJSON }) { + const router = useRouter(); + return ( 1 ? ` (${data.overloadIndex})` : ''}`} @@ -11,7 +15,9 @@ export function Function({ data }: { data: ApiFunctionJSON }) { summary={data.summary} typeParams={data.typeParameters} > - + + + ); } diff --git a/packages/website/src/components/model/Interface.tsx b/packages/website/src/components/model/Interface.tsx index a28b5ee1b573..7ee56de74354 100644 --- a/packages/website/src/components/model/Interface.tsx +++ b/packages/website/src/components/model/Interface.tsx @@ -1,8 +1,12 @@ +import { Skeleton } from '@mantine/core'; +import { useRouter } from 'next/router'; import { DocContainer } from '../DocContainer'; import { MethodsSection, PropertiesSection } from '../Sections'; import type { ApiInterfaceJSON } from '~/DocModel/ApiNodeJSONEncoder'; export function Interface({ data }: { data: ApiInterfaceJSON }) { + const router = useRouter(); + return ( - - + + + + + + ); } diff --git a/packages/website/src/pages/docs/[...slug].tsx b/packages/website/src/pages/docs/[...slug].tsx index 83e81a7c4b7e..bacfa89ea8f6 100644 --- a/packages/website/src/pages/docs/[...slug].tsx +++ b/packages/website/src/pages/docs/[...slug].tsx @@ -121,7 +121,7 @@ export const getStaticPaths: GetStaticPaths = async () => { return { paths: pkgs, - fallback: 'blocking', + fallback: true, }; }; diff --git a/packages/website/src/pages/docs/packages/[package]/index.tsx b/packages/website/src/pages/docs/packages/[package]/index.tsx index 285ebdd9b2ba..9350f29d912c 100644 --- a/packages/website/src/pages/docs/packages/[package]/index.tsx +++ b/packages/website/src/pages/docs/packages/[package]/index.tsx @@ -30,7 +30,7 @@ export const getStaticPaths: GetStaticPaths = () => { return { paths: versions, - fallback: 'blocking', + fallback: false, }; }; From 6062d361fbc92cb9c6f89fc6473378ccee6caaff Mon Sep 17 00:00:00 2001 From: iCrawl Date: Tue, 23 Aug 2022 02:13:10 +0200 Subject: [PATCH 069/155] feat: more fallback cases --- .../website/src/components/DocContainer.tsx | 8 +- .../website/src/components/SidebarLayout.tsx | 131 ++++++++++-------- .../website/src/components/model/Class.tsx | 4 +- .../website/src/components/model/Enum.tsx | 2 +- .../website/src/components/model/Function.tsx | 2 +- .../src/components/model/Interface.tsx | 4 +- packages/website/src/pages/docs/[...slug].tsx | 14 +- 7 files changed, 94 insertions(+), 71 deletions(-) diff --git a/packages/website/src/components/DocContainer.tsx b/packages/website/src/components/DocContainer.tsx index a212a03c5c15..61c8400df84d 100644 --- a/packages/website/src/components/DocContainer.tsx +++ b/packages/website/src/components/DocContainer.tsx @@ -68,7 +68,7 @@ export function DocContainer({ return ( - + <Group> {generateIcon(kind)} @@ -77,13 +77,13 @@ export function DocContainer({ - +
} padded dense={matches}> {summary ? : No summary provided.}
- + ) : null} - + {typeParams?.length ? (
{title} @@ -17,18 +12,13 @@ export function Block({ children, title }: BlockProps) { ); } -export interface BlockCommentProps { - tagName: string; - children: ReactNode; - index?: number | undefined; -} - -export interface ExampleBlockProps { +export function ExampleBlock({ + children, + exampleIndex, +}: { children: ReactNode; exampleIndex?: number | undefined; -} - -export function ExampleBlock({ children, exampleIndex }: ExampleBlockProps): JSX.Element { +}): JSX.Element { return {children}; } @@ -48,7 +38,15 @@ export function RemarksBlock({ children }: { children: ReactNode }): JSX.Element return {children}; } -export function BlockComment({ children, tagName, index }: BlockCommentProps): JSX.Element { +export function BlockComment({ + children, + tagName, + index, +}: { + tagName: string; + children: ReactNode; + index?: number | undefined; +}): JSX.Element { switch (tagName.toUpperCase()) { case StandardTags.example.tagNameWithUpperCase: return {children}; diff --git a/packages/website/src/pages/_app.tsx b/packages/website/src/pages/_app.tsx index 889440d76317..cbf08293c456 100644 --- a/packages/website/src/pages/_app.tsx +++ b/packages/website/src/pages/_app.tsx @@ -1,6 +1,6 @@ import { ColorScheme, ColorSchemeProvider, MantineProvider } from '@mantine/core'; import { useColorScheme } from '@mantine/hooks'; -import { SpotlightAction, SpotlightProvider } from '@mantine/spotlight'; +import { type SpotlightAction, SpotlightProvider } from '@mantine/spotlight'; import type { AppProps } from 'next/app'; import Head from 'next/head'; import { type NextRouter, useRouter } from 'next/router'; diff --git a/packages/website/src/pages/_document.tsx b/packages/website/src/pages/_document.tsx index 452d086dd25b..c95a42da3616 100644 --- a/packages/website/src/pages/_document.tsx +++ b/packages/website/src/pages/_document.tsx @@ -1,5 +1,5 @@ import { createStylesServer, ServerStyles } from '@mantine/next'; -import Document, { Html, Head, Main, NextScript, DocumentContext, DocumentInitialProps } from 'next/document'; +import Document, { Html, Head, Main, NextScript, type DocumentContext, type DocumentInitialProps } from 'next/document'; const stylesServer = createStylesServer(); diff --git a/packages/website/src/pages/docs/[...slug].tsx b/packages/website/src/pages/docs/[...slug].tsx index 47c394e4889a..38a9de0ffed0 100644 --- a/packages/website/src/pages/docs/[...slug].tsx +++ b/packages/website/src/pages/docs/[...slug].tsx @@ -2,7 +2,7 @@ import { readFile } from 'node:fs/promises'; import { join } from 'node:path'; import { Affix, Box, Button, LoadingOverlay, Transition } from '@mantine/core'; import { useMediaQuery, useWindowScroll } from '@mantine/hooks'; -import { ApiFunction, ApiPackage } from '@microsoft/api-extractor-model'; +import { ApiFunction, type ApiPackage } from '@microsoft/api-extractor-model'; import { MDXRemote } from 'next-mdx-remote'; import { serialize } from 'next-mdx-remote/serialize'; import Head from 'next/head'; @@ -175,7 +175,6 @@ export const getStaticProps: GetStaticProps = async ({ params }) => { memberName && containerKey ? findMemberByKey(model, packageName, containerKey, branchName) ?? null : null, source: mdxSource, }, - key: `${memberName ?? 'index'}-${branchName}`, revalidate: 3600, }, }; diff --git a/packages/website/src/util/api-model.server.ts b/packages/website/src/util/api-model.server.ts index b7f9aa805826..c6a797b1bc94 100644 --- a/packages/website/src/util/api-model.server.ts +++ b/packages/website/src/util/api-model.server.ts @@ -1,6 +1,6 @@ /* eslint-disable @typescript-eslint/no-unsafe-member-access */ /* eslint-disable @typescript-eslint/no-unsafe-assignment */ -import { ApiItem, ApiModel, ApiPackage } from '~/util/api-extractor.server'; +import { ApiItem, ApiModel, type ApiPackage } from '~/util/api-extractor.server'; import { TSDocConfigFile } from '~/util/tsdoc-config.server'; import { TSDocConfiguration } from '~/util/tsdoc.server'; diff --git a/packages/website/src/util/parse.server.ts b/packages/website/src/util/parse.server.ts index 10ea0ed0c850..077efe63fd19 100644 --- a/packages/website/src/util/parse.server.ts +++ b/packages/website/src/util/parse.server.ts @@ -10,10 +10,10 @@ import { type ApiPropertyItem, type ExcerptToken, type Parameter, - ApiFunction, + type ApiFunction, } from '@microsoft/api-extractor-model'; import type { DocNode, DocParagraph, DocPlainText } from '@microsoft/tsdoc'; -import { Meaning, ModuleSource } from '@microsoft/tsdoc/lib-commonjs/beta/DeclarationReference'; +import { type Meaning, ModuleSource } from '@microsoft/tsdoc/lib-commonjs/beta/DeclarationReference'; import { createCommentNode } from '~/DocModel/comment'; import type { DocBlockJSON } from '~/DocModel/comment/CommentBlock'; From caa5c0332f97fc112f73c2f15be3db43ccc0abf9 Mon Sep 17 00:00:00 2001 From: iCrawl Date: Tue, 23 Aug 2022 03:06:21 +0200 Subject: [PATCH 071/155] feat: add anchor icon --- packages/website/src/components/CodeListing.tsx | 11 +++++++++-- .../website/src/components/DocContainer.tsx | 2 +- packages/website/src/components/MethodItem.tsx | 17 ++++++++++------- packages/website/src/components/MethodList.tsx | 2 +- packages/website/src/components/Sections.tsx | 2 +- .../website/src/components/SidebarItems.tsx | 10 ++++++---- .../src/components/TableOfContentItems.tsx | 2 +- 7 files changed, 29 insertions(+), 17 deletions(-) diff --git a/packages/website/src/components/CodeListing.tsx b/packages/website/src/components/CodeListing.tsx index a0456d48c70c..015617eb4dde 100644 --- a/packages/website/src/components/CodeListing.tsx +++ b/packages/website/src/components/CodeListing.tsx @@ -1,5 +1,7 @@ -import { Badge, Group, Stack, Title } from '@mantine/core'; +import { ActionIcon, Badge, Group, Stack, Title } from '@mantine/core'; +import { useMediaQuery } from '@mantine/hooks'; import type { ReactNode } from 'react'; +import { FiLink } from 'react-icons/fi'; import { HyperlinkedText } from './HyperlinkedText'; import { InheritanceText } from './InheritanceText'; import { TSDoc } from './tsdoc/TSDoc'; @@ -35,9 +37,14 @@ export function CodeListing({ deprecation?: AnyDocNodeJSON | null; inheritanceData?: InheritanceData | null; }) { + const matches = useMediaQuery('(max-width: 768px)', true, { getInitialValueInEffect: false }); + return ( - + + + + {deprecation ? ( Deprecated diff --git a/packages/website/src/components/DocContainer.tsx b/packages/website/src/components/DocContainer.tsx index 6c7f7be365c3..22dea006dfc8 100644 --- a/packages/website/src/components/DocContainer.tsx +++ b/packages/website/src/components/DocContainer.tsx @@ -97,7 +97,7 @@ export function DocContainer({ {extendsTokens?.length ? ( - + Extends diff --git a/packages/website/src/components/MethodItem.tsx b/packages/website/src/components/MethodItem.tsx index 9036455bc317..52b08e4b970c 100644 --- a/packages/website/src/components/MethodItem.tsx +++ b/packages/website/src/components/MethodItem.tsx @@ -1,4 +1,6 @@ -import { Badge, Group, Stack, Title } from '@mantine/core'; +import { ActionIcon, Badge, Group, Stack, Title } from '@mantine/core'; +import { useMediaQuery } from '@mantine/hooks'; +import { FiLink } from 'react-icons/fi'; import { HyperlinkedText } from './HyperlinkedText'; import { InheritanceText } from './InheritanceText'; import { ParameterTable } from './ParameterTable'; @@ -17,17 +19,18 @@ function getShorthandName(data: ApiMethodJSON | ApiMethodSignatureJSON) { } export function MethodItem({ data }: { data: ApiMethodJSON | ApiMethodSignatureJSON }) { + const matches = useMediaQuery('(max-width: 768px)', true, { getInitialValueInEffect: false }); const method = data as ApiMethodJSON; + const key = `${data.name}${data.overloadIndex && data.overloadIndex > 1 ? `:${data.overloadIndex}` : ''}`; return ( - 1 ? `:${data.overloadIndex}` : ''}`} - className="scroll-mt-30" - spacing="xs" - > + - + + + + {data.deprecated ? ( Deprecated diff --git a/packages/website/src/components/MethodList.tsx b/packages/website/src/components/MethodList.tsx index e4d140fef411..effb382f4202 100644 --- a/packages/website/src/components/MethodList.tsx +++ b/packages/website/src/components/MethodList.tsx @@ -11,7 +11,7 @@ export function MethodList({ data }: { data: (ApiMethodJSON | ApiMethodSignature key={`${method.name}${method.overloadIndex && method.overloadIndex > 1 ? `:${method.overloadIndex}` : ''}`} > - + ))} diff --git a/packages/website/src/components/Sections.tsx b/packages/website/src/components/Sections.tsx index 9ef38d7ae0c8..111555b720cd 100644 --- a/packages/website/src/components/Sections.tsx +++ b/packages/website/src/components/Sections.tsx @@ -53,7 +53,7 @@ export function ConstructorSection({ data }: { data: ApiConstructorJSON }) { return data.parameters.length ? (
} padded dense={matches}> - + diff --git a/packages/website/src/components/SidebarItems.tsx b/packages/website/src/components/SidebarItems.tsx index cb0bb6796eae..118bb6dbcdcd 100644 --- a/packages/website/src/components/SidebarItems.tsx +++ b/packages/website/src/components/SidebarItems.tsx @@ -78,13 +78,15 @@ const useStyles = createStyles((theme) => ({ color: theme.colorScheme === 'dark' ? theme.colors.dark![0] : theme.colors.gray![7], borderLeft: `1px solid ${theme.colorScheme === 'dark' ? theme.colors.dark![4] : theme.colors.gray![3]}`, + '&[data-active]': { + '&:hover': { + color: theme.white, + }, + }, + '&:hover': { backgroundColor: theme.colorScheme === 'dark' ? theme.colors.dark![6] : theme.colors.gray![0], color: theme.colorScheme === 'dark' ? theme.white : theme.black, - - '&[data-active]': { - color: theme.white, - }, }, }, })); diff --git a/packages/website/src/components/TableOfContentItems.tsx b/packages/website/src/components/TableOfContentItems.tsx index bea884596ae4..4999d8a1fbe6 100644 --- a/packages/website/src/components/TableOfContentItems.tsx +++ b/packages/website/src/components/TableOfContentItems.tsx @@ -50,7 +50,7 @@ export function TableOfContentItems({ const key = `${member.name}${member.overloadIndex && member.overloadIndex > 1 ? `:${member.overloadIndex}` : ''}`; return ( - key={key} href={`#${key}`} component="a" className={classes.link}> + key={key} component="a" href={`#${key}`} className={classes.link}> {member.name} From af295acedcbc19daa7bb0069322bcf6de892d23f Mon Sep 17 00:00:00 2001 From: iCrawl Date: Tue, 23 Aug 2022 03:59:53 +0200 Subject: [PATCH 072/155] fix: wrong active item after anchor select --- packages/website/package.json | 1 - .../website/src/components/SidebarItems.tsx | 4 +- .../website/src/components/SidebarLayout.tsx | 4 +- packages/website/src/pages/docs/[...slug].tsx | 3 +- yarn.lock | 62 ------------------- 5 files changed, 6 insertions(+), 68 deletions(-) diff --git a/packages/website/package.json b/packages/website/package.json index 464b5c93d439..8e7c73374668 100644 --- a/packages/website/package.json +++ b/packages/website/package.json @@ -65,7 +65,6 @@ "react-dom": "^18.2.0", "react-icons": "^4.4.0", "react-syntax-highlighter": "^15.5.0", - "rehype-highlight": "^5.0.2", "rehype-ignore": "^1.0.1", "rehype-raw": "^6.1.1", "rehype-slug": "^5.0.1", diff --git a/packages/website/src/components/SidebarItems.tsx b/packages/website/src/components/SidebarItems.tsx index 118bb6dbcdcd..dec4fa451adb 100644 --- a/packages/website/src/components/SidebarItems.tsx +++ b/packages/website/src/components/SidebarItems.tsx @@ -102,6 +102,8 @@ export function SidebarItems({ const { classes } = useStyles(); const groupItems = groupMembers(members); + const asPathWithoutQueryAndAnchor = router.asPath.split('?')[0]?.split('#')[0]; + return ( <> {(Object.keys(groupItems) as (keyof GroupedMembers)[]) @@ -126,7 +128,7 @@ export function SidebarItems({ ) : null} } - active={router.asPath === member.path} + active={asPathWithoutQueryAndAnchor === member.path} variant="filled" > diff --git a/packages/website/src/components/SidebarLayout.tsx b/packages/website/src/components/SidebarLayout.tsx index 5e542e1ae6aa..a372eb0cb632 100644 --- a/packages/website/src/components/SidebarLayout.tsx +++ b/packages/website/src/components/SidebarLayout.tsx @@ -138,8 +138,8 @@ export function SidebarLayout({ )) ?? []; - const asPathWithoutQuery = router.asPath.split('?')[0]?.split('#')[0]; - const breadcrumbs = asPathWithoutQuery?.split('/').map((path, idx, original) => ( + const asPathWithoutQueryAndAnchor = router.asPath.split('?')[0]?.split('#')[0]; + const breadcrumbs = asPathWithoutQueryAndAnchor?.split('/').map((path, idx, original) => ( {path} diff --git a/packages/website/src/pages/docs/[...slug].tsx b/packages/website/src/pages/docs/[...slug].tsx index 38a9de0ffed0..27e914bfb032 100644 --- a/packages/website/src/pages/docs/[...slug].tsx +++ b/packages/website/src/pages/docs/[...slug].tsx @@ -9,7 +9,6 @@ import Head from 'next/head'; import { useRouter } from 'next/router'; import type { GetStaticPaths, GetStaticProps } from 'next/types'; import { VscChevronUp } from 'react-icons/vsc'; -import rehypeHighlight from 'rehype-highlight'; import rehypeIgnore from 'rehype-ignore'; import rehypeRaw from 'rehype-raw'; import rehypeSlug from 'rehype-slug'; @@ -138,7 +137,7 @@ export const getStaticProps: GetStaticProps = async ({ params }) => { mdxOptions: { remarkPlugins: [remarkGfm], remarkRehypeOptions: { allowDangerousHtml: true }, - rehypePlugins: [rehypeRaw, rehypeIgnore, rehypeSlug, [rehypeHighlight, { ignoreMissing: true }]], + rehypePlugins: [rehypeRaw, rehypeIgnore, rehypeSlug], format: 'md', }, }); diff --git a/yarn.lock b/yarn.lock index c865c4e27644..4218bb857f34 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2046,7 +2046,6 @@ __metadata: react-dom: ^18.2.0 react-icons: ^4.4.0 react-syntax-highlighter: ^15.5.0 - rehype-highlight: ^5.0.2 rehype-ignore: ^1.0.1 rehype-raw: ^6.1.1 rehype-slug: ^5.0.1 @@ -8431,15 +8430,6 @@ __metadata: languageName: node linkType: hard -"fault@npm:^2.0.0": - version: 2.0.1 - resolution: "fault@npm:2.0.1" - dependencies: - format: ^0.2.0 - checksum: c9b30f47d95769177130a9409976a899ed31eb598450fbad5b0d39f2f5f56d5f4a9ff9257e0bee8407cb0fc3ce37165657888c6aa6d78472e403893104329b72 - languageName: node - linkType: hard - "fb-watchman@npm:^2.0.0": version: 2.0.1 resolution: "fb-watchman@npm:2.0.1" @@ -9454,17 +9444,6 @@ __metadata: languageName: node linkType: hard -"hast-util-to-text@npm:^3.0.0": - version: 3.1.1 - resolution: "hast-util-to-text@npm:3.1.1" - dependencies: - "@types/hast": ^2.0.0 - hast-util-is-element: ^2.0.0 - unist-util-find-after: ^4.0.0 - checksum: 2312a818c8ec7b02307b04175357e5a7a9918f48624d05366668ba60918734ca62b0ee21006a2a448e0e5a198654cd1fa4ba8c813702b465cb487e2320db523a - languageName: node - linkType: hard - "hast-util-whitespace@npm:^2.0.0": version: 2.0.0 resolution: "hast-util-whitespace@npm:2.0.0" @@ -9521,13 +9500,6 @@ __metadata: languageName: node linkType: hard -"highlight.js@npm:~11.6.0": - version: 11.6.0 - resolution: "highlight.js@npm:11.6.0" - checksum: 3908eb34a4b442ca1e20c1ae6415ea935fbbcdb2b532a89948d82b0fa4ad41fc5de3802a0de4e88a0bcb7d97d4445579048cd2aab1d105ac47f59dd58a9a98ae - languageName: node - linkType: hard - "hoist-non-react-statics@npm:^3.3.1": version: 3.3.2 resolution: "hoist-non-react-statics@npm:3.3.2" @@ -11506,17 +11478,6 @@ __metadata: languageName: node linkType: hard -"lowlight@npm:^2.0.0": - version: 2.7.0 - resolution: "lowlight@npm:2.7.0" - dependencies: - "@types/hast": ^2.0.0 - fault: ^2.0.0 - highlight.js: ~11.6.0 - checksum: 6f8ed056cdeb387100ab13102b85623e59fae296a128de518cc04f5749f928a11b51eb2c2145728813f0efc3bed8130e12106129d9bc557e9110cdaaa238832f - languageName: node - linkType: hard - "lru-cache@npm:^6.0.0": version: 6.0.0 resolution: "lru-cache@npm:6.0.0" @@ -14332,19 +14293,6 @@ __metadata: languageName: node linkType: hard -"rehype-highlight@npm:^5.0.2": - version: 5.0.2 - resolution: "rehype-highlight@npm:5.0.2" - dependencies: - "@types/hast": ^2.0.0 - hast-util-to-text: ^3.0.0 - lowlight: ^2.0.0 - unified: ^10.0.0 - unist-util-visit: ^4.0.0 - checksum: 18ff061fdfabb7ac5b09d19f5fa23143d6e82eb6474be2670e5febe8e78e58a56e614dc7a049a1dcbb768d16bd4dee028b1f36d77b403d3c0aff7af1bab418ee - languageName: node - linkType: hard - "rehype-ignore@npm:^1.0.1": version: 1.0.1 resolution: "rehype-ignore@npm:1.0.1" @@ -16754,16 +16702,6 @@ __metadata: languageName: node linkType: hard -"unist-util-find-after@npm:^4.0.0": - version: 4.0.0 - resolution: "unist-util-find-after@npm:4.0.0" - dependencies: - "@types/unist": ^2.0.0 - unist-util-is: ^5.0.0 - checksum: 8381ef0bad18a0b1fa1c7ee47f94a2578ab6bf572eb126a1f179526b9dca47584fc070976f2d83bbe381161fa33b9164a894d0279a30ec83e65433356d43df57 - languageName: node - linkType: hard - "unist-util-generated@npm:^2.0.0": version: 2.0.0 resolution: "unist-util-generated@npm:2.0.0" From ac3bc6a2db548c4f32400cd4e447b24b874dedd9 Mon Sep 17 00:00:00 2001 From: iCrawl Date: Tue, 23 Aug 2022 04:11:12 +0200 Subject: [PATCH 073/155] style: spacing --- packages/website/src/pages/docs/packages/[package]/index.tsx | 2 +- packages/website/src/pages/docs/packages/index.tsx | 2 +- packages/website/src/pages/index.tsx | 4 ++-- 3 files changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/website/src/pages/docs/packages/[package]/index.tsx b/packages/website/src/pages/docs/packages/[package]/index.tsx index 9350f29d912c..8656f0af4f1e 100644 --- a/packages/website/src/pages/docs/packages/[package]/index.tsx +++ b/packages/website/src/pages/docs/packages/[package]/index.tsx @@ -87,7 +87,7 @@ export default function VersionsRoute(props: Partial & { error?: s return props.error ? ( {props.error} ) : ( - + Select a version: diff --git a/packages/website/src/pages/docs/packages/index.tsx b/packages/website/src/pages/docs/packages/index.tsx index 5631ecaabc5a..437933715b7c 100644 --- a/packages/website/src/pages/docs/packages/index.tsx +++ b/packages/website/src/pages/docs/packages/index.tsx @@ -32,7 +32,7 @@ export default function PackagesRoute() { const packages = ['builders', 'collection', 'proxy', 'rest', 'voice', 'ws']; return ( - <Container pt={96} size="xs"> + <Container pt={128} size="xs"> <Stack sx={{ flexGrow: 1 }}> <Title order={2} ml="xs"> Select a package: diff --git a/packages/website/src/pages/index.tsx b/packages/website/src/pages/index.tsx index 697e3670420f..77f0197d8ee5 100644 --- a/packages/website/src/pages/index.tsx +++ b/packages/website/src/pages/index.tsx @@ -8,8 +8,8 @@ const useStyles = createStyles((theme) => ({ display: 'flex', justifyContent: 'space-between', alignItems: 'center', - paddingTop: theme.spacing.xl * 4, - paddingBottom: theme.spacing.xl * 4, + paddingTop: theme.spacing.xl * 6, + paddingBottom: theme.spacing.xl * 2, [theme.fn.smallerThan('md')]: { flexDirection: 'column', From 206523587a386d8f3ea3d31adf1ef1f2a0c91cdd Mon Sep 17 00:00:00 2001 From: iCrawl <buechler.noel@outlook.com> Date: Tue, 23 Aug 2022 04:20:41 +0200 Subject: [PATCH 074/155] refactor: split out package constant --- .../website/src/components/SidebarLayout.tsx | 19 +++++-------------- packages/website/src/pages/docs/[...slug].tsx | 7 +++---- .../pages/docs/packages/[package]/index.tsx | 5 ++--- .../website/src/pages/docs/packages/index.tsx | 5 ++--- packages/website/src/util/packages.ts | 1 + packages/website/src/util/parse.server.ts | 1 + 6 files changed, 14 insertions(+), 24 deletions(-) create mode 100644 packages/website/src/util/packages.ts diff --git a/packages/website/src/components/SidebarLayout.tsx b/packages/website/src/components/SidebarLayout.tsx index a372eb0cb632..2eb2b6d63d0d 100644 --- a/packages/website/src/components/SidebarLayout.tsx +++ b/packages/website/src/components/SidebarLayout.tsx @@ -34,6 +34,7 @@ import useSWR from 'swr'; import { SidebarItems } from './SidebarItems'; import type { ApiItemJSON } from '~/DocModel/ApiNodeJSONEncoder'; import type { findMember } from '~/util/model.server'; +import { PACKAGES } from '~/util/packages'; import type { getMembers } from '~/util/parse.server'; const fetcher = (url: string) => fetch(url).then((res) => res.json()); @@ -89,19 +90,9 @@ const useStyles = createStyles( }), ); -const libraries = [ - { label: 'builders', value: 'builders' }, - { label: 'collection', value: 'collection' }, - { label: 'discord.js', value: 'discord.js' }, - { label: 'proxy', value: 'proxy' }, - { label: 'rest', value: 'rest' }, - { label: 'voice', value: 'voice' }, - { label: 'ws', value: 'ws' }, -]; - -const libraryMenuItems = libraries.map((item) => ( - <Menu.Item key={item.label} component={NextLink} href={`/docs/packages/${item.value}/main`}> - {item.label} +const packageMenuItems = PACKAGES.map((pkg) => ( + <Menu.Item key={pkg} component={NextLink} href={`/docs/packages/${pkg}/main`}> + {pkg} </Menu.Item> )); @@ -191,7 +182,7 @@ export function SidebarLayout({ </Group> </UnstyledButton> </Menu.Target> - <Menu.Dropdown>{libraryMenuItems}</Menu.Dropdown> + <Menu.Dropdown>{packageMenuItems}</Menu.Dropdown> </Menu> <Menu diff --git a/packages/website/src/pages/docs/[...slug].tsx b/packages/website/src/pages/docs/[...slug].tsx index 27e914bfb032..eacef5fb9f6e 100644 --- a/packages/website/src/pages/docs/[...slug].tsx +++ b/packages/website/src/pages/docs/[...slug].tsx @@ -32,14 +32,13 @@ import { Variable } from '~/components/model/Variable'; import { MemberProvider } from '~/contexts/member'; import { createApiModel } from '~/util/api-model.server'; import { findMember, findMemberByKey } from '~/util/model.server'; +import { PACKAGES } from '~/util/packages'; import { findPackage, getMembers } from '~/util/parse.server'; export const getStaticPaths: GetStaticPaths = async () => { - const packages = ['builders', 'collection', 'proxy', 'rest', 'voice', 'ws']; - const pkgs = ( await Promise.all( - packages.map(async (packageName) => { + PACKAGES.map(async (packageName) => { try { let data: any[] = []; let versions: string[] = []; @@ -121,7 +120,7 @@ export const getStaticPaths: GetStaticPaths = async () => { return { paths: pkgs, - fallback: true, + fallback: 'blocking', }; }; diff --git a/packages/website/src/pages/docs/packages/[package]/index.tsx b/packages/website/src/pages/docs/packages/[package]/index.tsx index 8656f0af4f1e..23dd85da0315 100644 --- a/packages/website/src/pages/docs/packages/[package]/index.tsx +++ b/packages/website/src/pages/docs/packages/[package]/index.tsx @@ -15,6 +15,7 @@ import Link from 'next/link'; import { useRouter } from 'next/router'; import type { GetStaticPaths, GetStaticProps } from 'next/types'; import { VscArrowLeft, VscArrowRight, VscPackage } from 'react-icons/vsc'; +import { PACKAGES } from '~/util/packages'; interface VersionProps { packageName: string; @@ -24,9 +25,7 @@ interface VersionProps { } export const getStaticPaths: GetStaticPaths = () => { - const packages = ['builders', 'collection', 'proxy', 'rest', 'voice', 'ws']; - - const versions = packages.map((packageName) => ({ params: { package: packageName } })); + const versions = PACKAGES.map((packageName) => ({ params: { package: packageName } })); return { paths: versions, diff --git a/packages/website/src/pages/docs/packages/index.tsx b/packages/website/src/pages/docs/packages/index.tsx index 437933715b7c..4e4cbe0ad3f3 100644 --- a/packages/website/src/pages/docs/packages/index.tsx +++ b/packages/website/src/pages/docs/packages/index.tsx @@ -11,6 +11,7 @@ import { } from '@mantine/core'; import Link from 'next/link'; import { VscArrowRight, VscPackage } from 'react-icons/vsc'; +import { PACKAGES } from '~/util/packages'; const useStyles = createStyles((theme) => ({ control: { @@ -29,15 +30,13 @@ export default function PackagesRoute() { const { classes } = useStyles(); const { colorScheme } = useMantineColorScheme(); - const packages = ['builders', 'collection', 'proxy', 'rest', 'voice', 'ws']; - return ( <Container pt={128} size="xs"> <Stack sx={{ flexGrow: 1 }}> <Title order={2} ml="xs"> Select a package: - {packages.map((pkg) => ( + {PACKAGES.map((pkg) => ( diff --git a/packages/website/src/util/packages.ts b/packages/website/src/util/packages.ts new file mode 100644 index 000000000000..8b02eb866936 --- /dev/null +++ b/packages/website/src/util/packages.ts @@ -0,0 +1 @@ +export const PACKAGES = ['builders', 'collection', 'proxy', 'rest', 'voice', 'ws']; diff --git a/packages/website/src/util/parse.server.ts b/packages/website/src/util/parse.server.ts index 077efe63fd19..5e940fbea107 100644 --- a/packages/website/src/util/parse.server.ts +++ b/packages/website/src/util/parse.server.ts @@ -25,6 +25,7 @@ export function findPackage(model: ApiModel, name: string): ApiPackage | undefin export function generatePath(items: readonly ApiItem[], version: string) { let path = '/docs/packages'; + for (const item of items) { switch (item.kind) { case ApiItemKind.Model: From 11e02f1e5d38bbe3489548f5e0be1f05c568d41c Mon Sep 17 00:00:00 2001 From: iCrawl Date: Tue, 23 Aug 2022 05:13:53 +0200 Subject: [PATCH 075/155] refactor: include item kind into url --- .../website/src/components/SidebarLayout.tsx | 2 +- packages/website/src/pages/docs/[...slug].tsx | 68 ++++++++++--------- packages/website/src/util/parse.server.ts | 6 +- 3 files changed, 39 insertions(+), 37 deletions(-) diff --git a/packages/website/src/components/SidebarLayout.tsx b/packages/website/src/components/SidebarLayout.tsx index 2eb2b6d63d0d..86e225378fc1 100644 --- a/packages/website/src/components/SidebarLayout.tsx +++ b/packages/website/src/components/SidebarLayout.tsx @@ -129,7 +129,7 @@ export function SidebarLayout({ )) ?? []; - const asPathWithoutQueryAndAnchor = router.asPath.split('?')[0]?.split('#')[0]; + const asPathWithoutQueryAndAnchor = router.asPath.split('?')[0]?.split('#')[0]?.split(':')[0]; const breadcrumbs = asPathWithoutQueryAndAnchor?.split('/').map((path, idx, original) => ( {path} diff --git a/packages/website/src/pages/docs/[...slug].tsx b/packages/website/src/pages/docs/[...slug].tsx index eacef5fb9f6e..5dde87adf2bb 100644 --- a/packages/website/src/pages/docs/[...slug].tsx +++ b/packages/website/src/pages/docs/[...slug].tsx @@ -2,7 +2,7 @@ import { readFile } from 'node:fs/promises'; import { join } from 'node:path'; import { Affix, Box, Button, LoadingOverlay, Transition } from '@mantine/core'; import { useMediaQuery, useWindowScroll } from '@mantine/hooks'; -import { ApiFunction, type ApiPackage } from '@microsoft/api-extractor-model'; +import { ApiFunction, ApiItemKind, type ApiPackage } from '@microsoft/api-extractor-model'; import { MDXRemote } from 'next-mdx-remote'; import { serialize } from 'next-mdx-remote/serialize'; import Head from 'next/head'; @@ -66,25 +66,29 @@ export const getStaticPaths: GetStaticPaths = async () => { const pkgs = models.map((model) => findPackage(model, packageName)) as ApiPackage[]; return [ - { params: { slug: ['packages', packageName, 'main'] } }, ...versions.map((version) => ({ params: { slug: ['packages', packageName, version] } })), ...pkgs .map((pkg, idx) => - getMembers(pkg, versions[idx]!) - // Filtering out enum `RESTEvents` because of interface with similar name `RestEvents` - // causing next.js export to error - .filter((member) => member.name !== 'RESTEvents') - .map((member) => { - if (member.kind === 'Function' && member.overloadIndex && member.overloadIndex > 1) { - return { - params: { - slug: ['packages', packageName, versions[idx]!, `${member.name}:${member.overloadIndex}`], - }, - }; - } + getMembers(pkg, versions[idx]!).map((member) => { + if (member.kind === ApiItemKind.Function && member.overloadIndex && member.overloadIndex > 1) { + return { + params: { + slug: [ + 'packages', + packageName, + versions[idx]!, + `${member.name}:${member.overloadIndex}:${member.kind}`, + ], + }, + }; + } - return { params: { slug: ['packages', packageName, versions[idx]!, member.name] } }; - }), + return { + params: { + slug: ['packages', packageName, versions[idx]!, `${member.name}:${member.kind}`], + }, + }; + }), ) .flat(), ]; @@ -95,21 +99,17 @@ export const getStaticPaths: GetStaticPaths = async () => { return [ { params: { slug: ['packages', packageName, 'main'] } }, - ...getMembers(pkg!, 'main') - // Filtering out enum `RESTEvents` because of interface with similar name `RestEvents` - // causing next.js export to error - .filter((member) => member.name !== 'RESTEvents') - .map((member) => { - if (member.kind === 'Function' && member.overloadIndex && member.overloadIndex > 1) { - return { - params: { - slug: ['packages', packageName, 'main', `${member.name}:${member.overloadIndex}`], - }, - }; - } + ...getMembers(pkg!, 'main').map((member) => { + if (member.kind === ApiItemKind.Function && member.overloadIndex && member.overloadIndex > 1) { + return { + params: { + slug: ['packages', packageName, 'main', `${member.name}:${member.overloadIndex}:${member.kind}`], + }, + }; + } - return { params: { slug: ['packages', packageName, 'main', member.name] } }; - }), + return { params: { slug: ['packages', packageName, 'main', `${member.name}:${member.kind}`] } }; + }), ]; } catch { return { params: { slug: [] } }; @@ -120,7 +120,7 @@ export const getStaticPaths: GetStaticPaths = async () => { return { paths: pkgs, - fallback: 'blocking', + fallback: true, }; }; @@ -159,7 +159,7 @@ export const getStaticProps: GetStaticProps = async ({ params }) => { const pkg = findPackage(model, packageName); let { containerKey, name } = findMember(model, packageName, memberName, branchName) ?? {}; - if (name && overloadIndex) { + if (name && overloadIndex && !Number.isNaN(parseInt(overloadIndex, 10))) { containerKey = ApiFunction.getContainerKey(name, parseInt(overloadIndex, 10)); } @@ -209,6 +209,8 @@ export default function SlugPage(props: Partial @@ -225,7 +227,7 @@ export default function SlugPage(props: Partial - discord.js | {props.data.member.name} + {name} {member(props.data.member)} diff --git a/packages/website/src/util/parse.server.ts b/packages/website/src/util/parse.server.ts index 5e940fbea107..5b982c036273 100644 --- a/packages/website/src/util/parse.server.ts +++ b/packages/website/src/util/parse.server.ts @@ -40,17 +40,17 @@ export function generatePath(items: readonly ApiItem[], version: string) { const functionItem = item as ApiFunction; path += `/${functionItem.displayName}${ functionItem.overloadIndex && functionItem.overloadIndex > 1 ? `:${functionItem.overloadIndex}` : '' - }`; + }:${item.kind}`; break; case ApiItemKind.Property: case ApiItemKind.Method: case ApiItemKind.MethodSignature: case ApiItemKind.PropertySignature: // TODO: Take overloads into account - path += `#${item.displayName}`; + path += `#${item.displayName}:${item.kind}`; break; default: - path += `/${item.displayName}`; + path += `/${item.displayName}:${item.kind}`; } } From f0ab393411a816a82879b859edd28b80ea7d2ac8 Mon Sep 17 00:00:00 2001 From: iCrawl Date: Tue, 23 Aug 2022 05:22:18 +0200 Subject: [PATCH 076/155] fix: use correct icon on version select --- packages/website/src/pages/docs/packages/[package]/index.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/website/src/pages/docs/packages/[package]/index.tsx b/packages/website/src/pages/docs/packages/[package]/index.tsx index 23dd85da0315..f7923065c938 100644 --- a/packages/website/src/pages/docs/packages/[package]/index.tsx +++ b/packages/website/src/pages/docs/packages/[package]/index.tsx @@ -14,7 +14,7 @@ import { import Link from 'next/link'; import { useRouter } from 'next/router'; import type { GetStaticPaths, GetStaticProps } from 'next/types'; -import { VscArrowLeft, VscArrowRight, VscPackage } from 'react-icons/vsc'; +import { VscArrowLeft, VscArrowRight, VscVersions } from 'react-icons/vsc'; import { PACKAGES } from '~/util/packages'; interface VersionProps { @@ -97,7 +97,7 @@ export default function VersionsRoute(props: Partial & { error?: s - + {version} From cf8570c19c15c24fc1044ffe326bef20f627e16a Mon Sep 17 00:00:00 2001 From: iCrawl Date: Tue, 23 Aug 2022 07:05:48 +0200 Subject: [PATCH 077/155] style: spacing on mobile --- packages/website/src/pages/index.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/packages/website/src/pages/index.tsx b/packages/website/src/pages/index.tsx index 77f0197d8ee5..05d96cbcbf48 100644 --- a/packages/website/src/pages/index.tsx +++ b/packages/website/src/pages/index.tsx @@ -12,6 +12,7 @@ const useStyles = createStyles((theme) => ({ paddingBottom: theme.spacing.xl * 2, [theme.fn.smallerThan('md')]: { + paddingTop: theme.spacing.xl * 2, flexDirection: 'column', gap: 50, }, @@ -97,7 +98,7 @@ export default function IndexRoute() {
- + Date: Tue, 23 Aug 2022 07:07:22 +0200 Subject: [PATCH 078/155] fix: check if router is ready before using its path --- packages/website/src/components/SidebarLayout.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/website/src/components/SidebarLayout.tsx b/packages/website/src/components/SidebarLayout.tsx index 86e225378fc1..aea3beadd2a5 100644 --- a/packages/website/src/components/SidebarLayout.tsx +++ b/packages/website/src/components/SidebarLayout.tsx @@ -243,8 +243,8 @@ export function SidebarLayout({ - - {breadcrumbs} + + {router.isReady ? {breadcrumbs} : null} From 8e4f77a63baa84f24937c654a618b49497dc8614 Mon Sep 17 00:00:00 2001 From: iCrawl Date: Tue, 23 Aug 2022 07:55:41 +0200 Subject: [PATCH 079/155] build: use module --- .../{.lintstagedrc.js => .lintstagedrc.cjs} | 0 .../{.prettierrc.js => .prettierrc.cjs} | 0 packages/website/next.config.js | 2 +- packages/website/package.json | 11 +------- .../website/src/components/DocContainer.tsx | 2 +- .../website/src/components/SidebarLayout.tsx | 4 +-- .../website/src/components/tsdoc/TSDoc.tsx | 2 +- packages/website/src/pages/404.tsx | 28 +++++++++++-------- packages/website/src/pages/docs/[...slug].tsx | 13 +++------ 9 files changed, 27 insertions(+), 35 deletions(-) rename packages/website/{.lintstagedrc.js => .lintstagedrc.cjs} (100%) rename packages/website/{.prettierrc.js => .prettierrc.cjs} (100%) diff --git a/packages/website/.lintstagedrc.js b/packages/website/.lintstagedrc.cjs similarity index 100% rename from packages/website/.lintstagedrc.js rename to packages/website/.lintstagedrc.cjs diff --git a/packages/website/.prettierrc.js b/packages/website/.prettierrc.cjs similarity index 100% rename from packages/website/.prettierrc.js rename to packages/website/.prettierrc.cjs diff --git a/packages/website/next.config.js b/packages/website/next.config.js index 9709d3ec2e52..83828df53dfa 100644 --- a/packages/website/next.config.js +++ b/packages/website/next.config.js @@ -1,7 +1,7 @@ /** * @type {import('next').NextConfig} */ -module.exports = { +export default { reactStrictMode: true, swcMinify: true, eslint: { diff --git a/packages/website/package.json b/packages/website/package.json index 8e7c73374668..8318a9aa6dd9 100644 --- a/packages/website/package.json +++ b/packages/website/package.json @@ -16,16 +16,7 @@ "lint": "prettier --check . && TIMING=1 eslint src --ext mjs,js,ts,tsx", "format": "prettier --write . && TIMING=1 eslint src --ext mjs,js,ts,tsx --fix" }, - "main": "./dist/index.js", - "module": "./dist/index.mjs", - "types": "./dist/index.d.ts", - "directories": { - "lib": "src", - "test": "__tests__" - }, - "files": [ - "dist" - ], + "type": "module", "contributors": [ "Crawl " ], diff --git a/packages/website/src/components/DocContainer.tsx b/packages/website/src/components/DocContainer.tsx index 22dea006dfc8..6e71ebffb4fd 100644 --- a/packages/website/src/components/DocContainer.tsx +++ b/packages/website/src/components/DocContainer.tsx @@ -12,7 +12,7 @@ import { VscSymbolParameter, } from 'react-icons/vsc'; import { PrismAsyncLight as SyntaxHighlighter } from 'react-syntax-highlighter'; -import { vscDarkPlus } from 'react-syntax-highlighter/dist/cjs/styles/prism'; +import vscDarkPlus from 'react-syntax-highlighter/dist/cjs/styles/prism'; import { HyperlinkedText } from './HyperlinkedText'; import { Section } from './Section'; import { TableOfContentItems } from './TableOfContentItems'; diff --git a/packages/website/src/components/SidebarLayout.tsx b/packages/website/src/components/SidebarLayout.tsx index aea3beadd2a5..86e225378fc1 100644 --- a/packages/website/src/components/SidebarLayout.tsx +++ b/packages/website/src/components/SidebarLayout.tsx @@ -243,8 +243,8 @@ export function SidebarLayout({ - - {router.isReady ? {breadcrumbs} : null} + + {breadcrumbs} diff --git a/packages/website/src/components/tsdoc/TSDoc.tsx b/packages/website/src/components/tsdoc/TSDoc.tsx index c644754c55eb..d6da7aab7ea7 100644 --- a/packages/website/src/components/tsdoc/TSDoc.tsx +++ b/packages/website/src/components/tsdoc/TSDoc.tsx @@ -3,7 +3,7 @@ import { DocNodeKind, StandardTags } from '@microsoft/tsdoc'; import Link from 'next/link'; import { Fragment, ReactNode } from 'react'; import { PrismAsyncLight as SyntaxHighlighter } from 'react-syntax-highlighter'; -import { vscDarkPlus } from 'react-syntax-highlighter/dist/cjs/styles/prism'; +import vscDarkPlus from 'react-syntax-highlighter/dist/cjs/styles/prism'; import { BlockComment } from './BlockComment'; import type { DocBlockJSON } from '~/DocModel/comment/CommentBlock'; import type { AnyDocNodeJSON } from '~/DocModel/comment/CommentNode'; diff --git a/packages/website/src/pages/404.tsx b/packages/website/src/pages/404.tsx index 68f3f41ba0ca..16cbc0657ee2 100644 --- a/packages/website/src/pages/404.tsx +++ b/packages/website/src/pages/404.tsx @@ -1,4 +1,5 @@ import { Container, Title, Group, Button, Box, createStyles } from '@mantine/core'; +import Head from 'next/head'; import Link from 'next/link'; const useStyles = createStyles((theme) => ({ @@ -20,16 +21,21 @@ export default function FourOhFourPage() { const { classes } = useStyles(); return ( - - 404 - Not found. - - - - - - + <> + + discord.js | 404 + + + 404 + Not found. + + + + + + + ); } diff --git a/packages/website/src/pages/docs/[...slug].tsx b/packages/website/src/pages/docs/[...slug].tsx index 5dde87adf2bb..f0ff76ee7961 100644 --- a/packages/website/src/pages/docs/[...slug].tsx +++ b/packages/website/src/pages/docs/[...slug].tsx @@ -1,5 +1,6 @@ import { readFile } from 'node:fs/promises'; import { join } from 'node:path'; +import { cwd } from 'node:process'; import { Affix, Box, Button, LoadingOverlay, Transition } from '@mantine/core'; import { useMediaQuery, useWindowScroll } from '@mantine/hooks'; import { ApiFunction, ApiItemKind, type ApiPackage } from '@microsoft/api-extractor-model'; @@ -43,10 +44,7 @@ export const getStaticPaths: GetStaticPaths = async () => { let data: any[] = []; let versions: string[] = []; if (process.env.NEXT_PUBLIC_LOCAL_DEV) { - const res = await readFile( - join(__dirname, '..', '..', '..', '..', '..', packageName, 'docs', 'docs.api.json'), - 'utf-8', - ); + const res = await readFile(join(cwd(), '..', packageName, 'docs', 'docs.api.json'), 'utf-8'); // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment data = JSON.parse(res); } else { @@ -130,7 +128,7 @@ export const getStaticProps: GetStaticProps = async ({ params }) => { const [memberName, overloadIndex] = member?.split(':') ?? []; try { - const readme = await readFile(join(__dirname, '..', '..', '..', '..', '..', packageName, 'README.md'), 'utf-8'); + const readme = await readFile(join(cwd(), '..', packageName, 'README.md'), 'utf-8'); const mdxSource = await serialize(readme, { mdxOptions: { @@ -143,10 +141,7 @@ export const getStaticProps: GetStaticProps = async ({ params }) => { let data; if (process.env.NEXT_PUBLIC_LOCAL_DEV) { - const res = await readFile( - join(__dirname, '..', '..', '..', '..', '..', packageName, 'docs', 'docs.api.json'), - 'utf-8', - ); + const res = await readFile(join(cwd(), '..', packageName, 'docs', 'docs.api.json'), 'utf-8'); // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment data = JSON.parse(res); } else { From b31a23b37c92cf5b3ee94ab034ed675690c923aa Mon Sep 17 00:00:00 2001 From: iCrawl Date: Tue, 23 Aug 2022 08:01:09 +0200 Subject: [PATCH 080/155] build: "no default export" --- packages/website/src/components/DocContainer.tsx | 2 +- packages/website/src/components/tsdoc/TSDoc.tsx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/website/src/components/DocContainer.tsx b/packages/website/src/components/DocContainer.tsx index 6e71ebffb4fd..22dea006dfc8 100644 --- a/packages/website/src/components/DocContainer.tsx +++ b/packages/website/src/components/DocContainer.tsx @@ -12,7 +12,7 @@ import { VscSymbolParameter, } from 'react-icons/vsc'; import { PrismAsyncLight as SyntaxHighlighter } from 'react-syntax-highlighter'; -import vscDarkPlus from 'react-syntax-highlighter/dist/cjs/styles/prism'; +import { vscDarkPlus } from 'react-syntax-highlighter/dist/cjs/styles/prism'; import { HyperlinkedText } from './HyperlinkedText'; import { Section } from './Section'; import { TableOfContentItems } from './TableOfContentItems'; diff --git a/packages/website/src/components/tsdoc/TSDoc.tsx b/packages/website/src/components/tsdoc/TSDoc.tsx index d6da7aab7ea7..c644754c55eb 100644 --- a/packages/website/src/components/tsdoc/TSDoc.tsx +++ b/packages/website/src/components/tsdoc/TSDoc.tsx @@ -3,7 +3,7 @@ import { DocNodeKind, StandardTags } from '@microsoft/tsdoc'; import Link from 'next/link'; import { Fragment, ReactNode } from 'react'; import { PrismAsyncLight as SyntaxHighlighter } from 'react-syntax-highlighter'; -import vscDarkPlus from 'react-syntax-highlighter/dist/cjs/styles/prism'; +import { vscDarkPlus } from 'react-syntax-highlighter/dist/cjs/styles/prism'; import { BlockComment } from './BlockComment'; import type { DocBlockJSON } from '~/DocModel/comment/CommentBlock'; import type { AnyDocNodeJSON } from '~/DocModel/comment/CommentNode'; From 17559becefc6b037a11e29fd29b249c5df75b4db Mon Sep 17 00:00:00 2001 From: iCrawl Date: Tue, 23 Aug 2022 08:18:36 +0200 Subject: [PATCH 081/155] refactor: change radius --- packages/website/src/components/DocContainer.tsx | 10 +++++----- packages/website/src/components/Section.tsx | 2 +- packages/website/src/components/SidebarItems.tsx | 6 +++--- packages/website/src/components/SidebarLayout.tsx | 12 ++++++------ .../website/src/components/TableOfContentItems.tsx | 12 ++++++------ packages/website/src/components/model/Class.tsx | 4 ++-- packages/website/src/components/model/Enum.tsx | 2 +- packages/website/src/components/model/Function.tsx | 2 +- packages/website/src/components/model/Interface.tsx | 4 ++-- .../website/src/components/tsdoc/BlockComment.tsx | 2 +- .../src/pages/docs/packages/[package]/index.tsx | 2 +- packages/website/src/pages/docs/packages/index.tsx | 2 +- packages/website/src/pages/index.tsx | 4 ++-- 13 files changed, 32 insertions(+), 32 deletions(-) diff --git a/packages/website/src/components/DocContainer.tsx b/packages/website/src/components/DocContainer.tsx index 22dea006dfc8..61aee7e4714e 100644 --- a/packages/website/src/components/DocContainer.tsx +++ b/packages/website/src/components/DocContainer.tsx @@ -1,7 +1,7 @@ import { Group, Stack, Title, Text, Box, MediaQuery, Aside, ScrollArea, Skeleton } from '@mantine/core'; import { useMediaQuery } from '@mantine/hooks'; import { useRouter } from 'next/router'; -import { Fragment, ReactNode } from 'react'; +import { Fragment, type ReactNode } from 'react'; import { VscSymbolClass, VscSymbolMethod, @@ -68,7 +68,7 @@ export function DocContainer({ return ( - + <Group> {generateIcon(kind)} @@ -77,13 +77,13 @@ export function DocContainer({ - +
} padded dense={matches}> {summary ? : No summary provided.}
- + ) : null} - + {typeParams?.length ? (
{icon ? ( - + {icon} ) : null} diff --git a/packages/website/src/components/SidebarItems.tsx b/packages/website/src/components/SidebarItems.tsx index dec4fa451adb..665dfc5a434b 100644 --- a/packages/website/src/components/SidebarItems.tsx +++ b/packages/website/src/components/SidebarItems.tsx @@ -1,4 +1,4 @@ -import { createStyles, Group, Text, NavLink } from '@mantine/core'; +import { createStyles, Group, Text, NavLink, Box } from '@mantine/core'; import Link from 'next/link'; import { useRouter } from 'next/router'; import type { Dispatch, SetStateAction } from 'react'; @@ -105,7 +105,7 @@ export function SidebarItems({ const asPathWithoutQueryAndAnchor = router.asPath.split('?')[0]?.split('#')[0]; return ( - <> + {(Object.keys(groupItems) as (keyof GroupedMembers)[]) .filter((group) => groupItems[group].length) .map((group, idx) => ( @@ -135,6 +135,6 @@ export function SidebarItems({ ))}
))} - +
); } diff --git a/packages/website/src/components/SidebarLayout.tsx b/packages/website/src/components/SidebarLayout.tsx index 86e225378fc1..b726b4289a26 100644 --- a/packages/website/src/components/SidebarLayout.tsx +++ b/packages/website/src/components/SidebarLayout.tsx @@ -164,14 +164,14 @@ export function SidebarLayout({
setOpenedLibPicker(true)} onClose={() => setOpenedLibPicker(false)} - radius="xs" + radius="sm" width="target" > - + @@ -188,14 +188,14 @@ export function SidebarLayout({ setOpenedVersionPicker(true)} onClose={() => setOpenedVersionPicker(false)} - radius="xs" + radius="sm" width="target" > - + @@ -243,7 +243,7 @@ export function SidebarLayout({ - + {breadcrumbs} @@ -266,7 +266,7 @@ export function SidebarLayout({ color={colorScheme === 'dark' ? 'yellow' : 'blue'} onClick={() => toggleColorScheme()} title="Toggle color scheme" - radius="xs" + radius="sm" > {colorScheme === 'dark' ? : } diff --git a/packages/website/src/components/TableOfContentItems.tsx b/packages/website/src/components/TableOfContentItems.tsx index 4999d8a1fbe6..179c703aee2e 100644 --- a/packages/website/src/components/TableOfContentItems.tsx +++ b/packages/website/src/components/TableOfContentItems.tsx @@ -66,16 +66,16 @@ export function TableOfContentItems({ }); return ( - - + + Table of contents - + {propertyItems.length ? ( - - + + @@ -90,7 +90,7 @@ export function TableOfContentItems({ {methodItems.length ? ( - + diff --git a/packages/website/src/components/model/Class.tsx b/packages/website/src/components/model/Class.tsx index 083bb613456e..d40bb5b29fdb 100644 --- a/packages/website/src/components/model/Class.tsx +++ b/packages/website/src/components/model/Class.tsx @@ -21,10 +21,10 @@ export function Class({ data }: { data: ApiClassJSON }) { properties={data.properties} > {data.constructor ? : null} - + - + diff --git a/packages/website/src/components/model/Enum.tsx b/packages/website/src/components/model/Enum.tsx index 69b52371e263..d4b984de5908 100644 --- a/packages/website/src/components/model/Enum.tsx +++ b/packages/website/src/components/model/Enum.tsx @@ -13,7 +13,7 @@ export function Enum({ data }: { data: ApiEnumJSON }) { return ( - +
} padded dense={matches}> {data.members.map((member) => ( diff --git a/packages/website/src/components/model/Function.tsx b/packages/website/src/components/model/Function.tsx index 559075db2b11..1d3f997eb1bf 100644 --- a/packages/website/src/components/model/Function.tsx +++ b/packages/website/src/components/model/Function.tsx @@ -15,7 +15,7 @@ export function Function({ data }: { data: ApiFunctionJSON }) { summary={data.summary} typeParams={data.typeParameters} > - + diff --git a/packages/website/src/components/model/Interface.tsx b/packages/website/src/components/model/Interface.tsx index 007f048bb293..a1e969a3b6d3 100644 --- a/packages/website/src/components/model/Interface.tsx +++ b/packages/website/src/components/model/Interface.tsx @@ -17,10 +17,10 @@ export function Interface({ data }: { data: ApiInterfaceJSON }) { methods={data.methods} properties={data.properties} > - + - + diff --git a/packages/website/src/components/tsdoc/BlockComment.tsx b/packages/website/src/components/tsdoc/BlockComment.tsx index 8f155b26a123..e5037a3f4b3a 100644 --- a/packages/website/src/components/tsdoc/BlockComment.tsx +++ b/packages/website/src/components/tsdoc/BlockComment.tsx @@ -24,7 +24,7 @@ export function ExampleBlock({ export function DeprecatedBlock({ children }: { children: ReactNode }): JSX.Element { return ( - } title="Deprecated" variant="outline" color="red" radius="xs"> + } title="Deprecated" variant="outline" color="red" radius="sm"> {children} ); diff --git a/packages/website/src/pages/docs/packages/[package]/index.tsx b/packages/website/src/pages/docs/packages/[package]/index.tsx index f7923065c938..9f7e77d1a7f1 100644 --- a/packages/website/src/pages/docs/packages/[package]/index.tsx +++ b/packages/website/src/pages/docs/packages/[package]/index.tsx @@ -96,7 +96,7 @@ export default function VersionsRoute(props: Partial & { error?: s - + diff --git a/packages/website/src/pages/docs/packages/index.tsx b/packages/website/src/pages/docs/packages/index.tsx index 4e4cbe0ad3f3..c5eb3254b9ad 100644 --- a/packages/website/src/pages/docs/packages/index.tsx +++ b/packages/website/src/pages/docs/packages/index.tsx @@ -41,7 +41,7 @@ export default function PackagesRoute() { - + diff --git a/packages/website/src/pages/index.tsx b/packages/website/src/pages/index.tsx index 05d96cbcbf48..8ab76c9f5e2e 100644 --- a/packages/website/src/pages/index.tsx +++ b/packages/website/src/pages/index.tsx @@ -84,12 +84,12 @@ export default function IndexRoute() { - - From c826ad3ade58cbae58df9b59c079fd9e35b5e56a Mon Sep 17 00:00:00 2001 From: iCrawl Date: Tue, 23 Aug 2022 08:48:44 +0200 Subject: [PATCH 082/155] feat: markdown syntax highlighting --- packages/website/package.json | 2 + .../website/src/components/SidebarItems.tsx | 7 +++- .../website/src/components/SidebarLayout.tsx | 8 +++- packages/website/src/pages/docs/[...slug].tsx | 3 +- .../pages/docs/packages/[package]/index.tsx | 2 +- .../website/src/pages/docs/packages/index.tsx | 2 +- packages/website/src/styles/main.css | 19 ++++++++-- yarn.lock | 38 +++++++++++++++++++ 8 files changed, 70 insertions(+), 11 deletions(-) diff --git a/packages/website/package.json b/packages/website/package.json index 8318a9aa6dd9..85fcd67587c2 100644 --- a/packages/website/package.json +++ b/packages/website/package.json @@ -57,10 +57,12 @@ "react-icons": "^4.4.0", "react-syntax-highlighter": "^15.5.0", "rehype-ignore": "^1.0.1", + "rehype-pretty-code": "^0.3.2", "rehype-raw": "^6.1.1", "rehype-slug": "^5.0.1", "remark-gfm": "^3.0.1", "sharp": "^0.30.7", + "shiki": "^0.11.1", "swr": "^1.3.0" }, "devDependencies": { diff --git a/packages/website/src/components/SidebarItems.tsx b/packages/website/src/components/SidebarItems.tsx index 665dfc5a434b..97f7ffeb936a 100644 --- a/packages/website/src/components/SidebarItems.tsx +++ b/packages/website/src/components/SidebarItems.tsx @@ -1,7 +1,7 @@ import { createStyles, Group, Text, NavLink, Box } from '@mantine/core'; import Link from 'next/link'; import { useRouter } from 'next/router'; -import type { Dispatch, SetStateAction } from 'react'; +import { type Dispatch, type SetStateAction, useEffect, useState } from 'react'; import { VscSymbolClass, VscSymbolEnum, @@ -99,10 +99,13 @@ export function SidebarItems({ setOpened: Dispatch>; }) { const router = useRouter(); + const [asPathWithoutQueryAndAnchor, setAsPathWithoutQueryAndAnchor] = useState(''); const { classes } = useStyles(); const groupItems = groupMembers(members); - const asPathWithoutQueryAndAnchor = router.asPath.split('?')[0]?.split('#')[0]; + useEffect(() => { + setAsPathWithoutQueryAndAnchor(router.asPath.split('?')[0]?.split('#')[0] ?? ''); + }, [router.asPath]); return ( diff --git a/packages/website/src/components/SidebarLayout.tsx b/packages/website/src/components/SidebarLayout.tsx index b726b4289a26..f928f903090b 100644 --- a/packages/website/src/components/SidebarLayout.tsx +++ b/packages/website/src/components/SidebarLayout.tsx @@ -103,6 +103,7 @@ export function SidebarLayout({ children, }: PropsWithChildren>) { const router = useRouter(); + const [asPathWithoutQueryAndAnchor, setAsPathWithoutQueryAndAnchor] = useState(''); const { data: versions } = useSWR( `https://docs.discordjs.dev/api/info?package=${packageName ?? 'builders'}`, fetcher, @@ -120,6 +121,10 @@ export function SidebarLayout({ setOpenedVersionPicker(false); }, []); + useEffect(() => { + setAsPathWithoutQueryAndAnchor(router.asPath.split('?')[0]?.split('#')[0]?.split(':')[0] ?? ''); + }, [router.asPath]); + const { classes } = useStyles({ openedLib: openedLibPicker, openedVersion: openedVersionPicker }); const versionMenuItems = @@ -129,8 +134,7 @@ export function SidebarLayout({ )) ?? []; - const asPathWithoutQueryAndAnchor = router.asPath.split('?')[0]?.split('#')[0]?.split(':')[0]; - const breadcrumbs = asPathWithoutQueryAndAnchor?.split('/').map((path, idx, original) => ( + const breadcrumbs = asPathWithoutQueryAndAnchor.split('/').map((path, idx, original) => ( {path} diff --git a/packages/website/src/pages/docs/[...slug].tsx b/packages/website/src/pages/docs/[...slug].tsx index f0ff76ee7961..d63a6fe7abb0 100644 --- a/packages/website/src/pages/docs/[...slug].tsx +++ b/packages/website/src/pages/docs/[...slug].tsx @@ -11,6 +11,7 @@ import { useRouter } from 'next/router'; import type { GetStaticPaths, GetStaticProps } from 'next/types'; import { VscChevronUp } from 'react-icons/vsc'; import rehypeIgnore from 'rehype-ignore'; +import rehypePrettyCode from 'rehype-pretty-code'; import rehypeRaw from 'rehype-raw'; import rehypeSlug from 'rehype-slug'; import remarkGfm from 'remark-gfm'; @@ -134,7 +135,7 @@ export const getStaticProps: GetStaticProps = async ({ params }) => { mdxOptions: { remarkPlugins: [remarkGfm], remarkRehypeOptions: { allowDangerousHtml: true }, - rehypePlugins: [rehypeRaw, rehypeIgnore, rehypeSlug], + rehypePlugins: [rehypeRaw, rehypeIgnore, rehypeSlug, [rehypePrettyCode, { theme: 'dark-plus' }]], format: 'md', }, }); diff --git a/packages/website/src/pages/docs/packages/[package]/index.tsx b/packages/website/src/pages/docs/packages/[package]/index.tsx index 9f7e77d1a7f1..8a1631bfeeea 100644 --- a/packages/website/src/pages/docs/packages/[package]/index.tsx +++ b/packages/website/src/pages/docs/packages/[package]/index.tsx @@ -86,7 +86,7 @@ export default function VersionsRoute(props: Partial & { error?: s return props.error ? ( {props.error} ) : ( - + Select a version: diff --git a/packages/website/src/pages/docs/packages/index.tsx b/packages/website/src/pages/docs/packages/index.tsx index c5eb3254b9ad..3bcf4874ac83 100644 --- a/packages/website/src/pages/docs/packages/index.tsx +++ b/packages/website/src/pages/docs/packages/index.tsx @@ -31,7 +31,7 @@ export default function PackagesRoute() { const { colorScheme } = useMantineColorScheme(); return ( - <Container pt={128} size="xs"> + <Container py={96} size="xs"> <Stack sx={{ flexGrow: 1 }}> <Title order={2} ml="xs"> Select a package: diff --git a/packages/website/src/styles/main.css b/packages/website/src/styles/main.css index acf0dc3d3aa8..8c7b5733c881 100644 --- a/packages/website/src/styles/main.css +++ b/packages/website/src/styles/main.css @@ -24,10 +24,21 @@ body { height: 100%; } -code { - font-family: 'JetBrains Mono'; +pre { + font-size: 13px !important; + white-space: pre; + word-spacing: normal; + word-break: normal; + line-height: 1.5; + tab-size: 4; + hyphens: none; + padding: 1em; + margin: 0.5em 0; + overflow: auto; + background: #1e1e1e; + border-radius: 4px; } -pre { - font-family: 'JetBrains Mono'; +code { + font-family: 'JetBrains Mono' !important; } diff --git a/yarn.lock b/yarn.lock index 4218bb857f34..81dd5c88f5ac 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2047,10 +2047,12 @@ __metadata: react-icons: ^4.4.0 react-syntax-highlighter: ^15.5.0 rehype-ignore: ^1.0.1 + rehype-pretty-code: ^0.3.2 rehype-raw: ^6.1.1 rehype-slug: ^5.0.1 remark-gfm: ^3.0.1 sharp: ^0.30.7 + shiki: ^0.11.1 swr: ^1.3.0 typescript: ^4.7.4 unocss: ^0.45.12 @@ -13397,6 +13399,13 @@ __metadata: languageName: node linkType: hard +"parse-numeric-range@npm:^1.3.0": + version: 1.3.0 + resolution: "parse-numeric-range@npm:1.3.0" + checksum: 289ca126d5b8ace7325b199218de198014f58ea6895ccc88a5247491d07f0143bf047f80b4a31784f1ca8911762278d7d6ecb90a31dfae31da91cc1a2524c8ce + languageName: node + linkType: hard + "parse5@npm:^6.0.0": version: 6.0.1 resolution: "parse5@npm:6.0.1" @@ -14304,6 +14313,17 @@ __metadata: languageName: node linkType: hard +"rehype-pretty-code@npm:^0.3.2": + version: 0.3.2 + resolution: "rehype-pretty-code@npm:0.3.2" + dependencies: + parse-numeric-range: ^1.3.0 + peerDependencies: + shiki: "*" + checksum: 7d5f5dc4758e65f4a141bb22fe6863d3d7f1e9b1712fab5bde3a0e5611c89cc4d5945fda59b5d51f993404785d62c1dcac14ccc368ac7892fbed8cee026c843b + languageName: node + linkType: hard + "rehype-raw@npm:^6.1.1": version: 6.1.1 resolution: "rehype-raw@npm:6.1.1" @@ -14899,6 +14919,17 @@ __metadata: languageName: node linkType: hard +"shiki@npm:^0.11.1": + version: 0.11.1 + resolution: "shiki@npm:0.11.1" + dependencies: + jsonc-parser: ^3.0.0 + vscode-oniguruma: ^1.6.1 + vscode-textmate: ^6.0.0 + checksum: 2a4ebc3b466816263fc244ae4f67a4ff96aa74d863b9c5e7e4affc50f37fd6d1a781405de0dbf763b777bc33e49a0d441de7ff3fededb8b01e3b8dbb37e2927d + languageName: node + linkType: hard + "side-channel@npm:^1.0.4": version: 1.0.4 resolution: "side-channel@npm:1.0.4" @@ -17185,6 +17216,13 @@ __metadata: languageName: node linkType: hard +"vscode-textmate@npm:^6.0.0": + version: 6.0.0 + resolution: "vscode-textmate@npm:6.0.0" + checksum: ff6f17a406c2906586afc14ef01cb122e33acd35312e815abb5c924347a777c6783ce3fe7db8b83f1760ebf843c669843b9390f905b69c433b3395af28e4b483 + languageName: node + linkType: hard + "walk-back@npm:^2.0.1": version: 2.0.1 resolution: "walk-back@npm:2.0.1" From 28422eea5812c06e2b01ae336b21bf241377959b Mon Sep 17 00:00:00 2001 From: iCrawl <buechler.noel@outlook.com> Date: Tue, 23 Aug 2022 09:15:33 +0200 Subject: [PATCH 083/155] fix: spacing of footer and affix --- .../src/DocModel/ApiNodeJSONEncoder.ts | 4 +-- .../website/src/components/SidebarLayout.tsx | 2 +- packages/website/src/pages/docs/[...slug].tsx | 28 ++++++++++--------- 3 files changed, 18 insertions(+), 16 deletions(-) diff --git a/packages/website/src/DocModel/ApiNodeJSONEncoder.ts b/packages/website/src/DocModel/ApiNodeJSONEncoder.ts index 36e4a57c402c..a7a97dc0b058 100644 --- a/packages/website/src/DocModel/ApiNodeJSONEncoder.ts +++ b/packages/website/src/DocModel/ApiNodeJSONEncoder.ts @@ -221,7 +221,7 @@ export class ApiNodeJSONEncoder { model: ApiModel, item: ApiTypeParameterListMixin & ApiDeclaredItem, version: string, - ) { + ): ApiTypeParameterListJSON { return { typeParameters: item.typeParameters.map((param) => generateTypeParamData(model, param, version, item.parent)), }; @@ -259,7 +259,7 @@ export class ApiNodeJSONEncoder { }; } - public static encodeFunction(model: ApiModel, item: ApiFunction, version: string) { + public static encodeFunction(model: ApiModel, item: ApiFunction, version: string): ApiFunctionJSON { return { ...this.encodeItem(model, item, version), ...this.encodeParameterList(model, item, version), diff --git a/packages/website/src/components/SidebarLayout.tsx b/packages/website/src/components/SidebarLayout.tsx index f928f903090b..5acef0f863ad 100644 --- a/packages/website/src/components/SidebarLayout.tsx +++ b/packages/website/src/components/SidebarLayout.tsx @@ -304,7 +304,7 @@ export function SidebarLayout({ height: 200, background: theme.colorScheme === 'dark' ? theme.colors.dark![7] : theme.colors.gray![0], paddingLeft: 324, - paddingRight: 324, + paddingRight: data?.member?.kind !== 'Class' && data?.member?.kind !== 'Interface' ? 24 : 324, [theme.fn.smallerThan('lg')]: { paddingRight: 24, diff --git a/packages/website/src/pages/docs/[...slug].tsx b/packages/website/src/pages/docs/[...slug].tsx index d63a6fe7abb0..858d4ebdf453 100644 --- a/packages/website/src/pages/docs/[...slug].tsx +++ b/packages/website/src/pages/docs/[...slug].tsx @@ -226,19 +226,6 @@ export default function SlugPage(props: Partial<SidebarLayoutProps & { error?: s <title key="title">{name} {member(props.data.member)} - - 250}> - {(transitionStyles) => ( - - )} - - ) : props.data?.source ? ( ) : null} + + 200}> + {(transitionStyles) => ( + + )} + + ); From ffafde0b6b26f3dde788c5cc9392e73ef4f691e4 Mon Sep 17 00:00:00 2001 From: iCrawl Date: Tue, 23 Aug 2022 09:36:19 +0200 Subject: [PATCH 084/155] refactor: make dark theme the default --- packages/website/src/pages/_app.tsx | 16 +++++++--------- packages/website/src/pages/_document.tsx | 15 ++++----------- 2 files changed, 11 insertions(+), 20 deletions(-) diff --git a/packages/website/src/pages/_app.tsx b/packages/website/src/pages/_app.tsx index cbf08293c456..1034359757f5 100644 --- a/packages/website/src/pages/_app.tsx +++ b/packages/website/src/pages/_app.tsx @@ -1,10 +1,9 @@ -import { ColorScheme, ColorSchemeProvider, MantineProvider } from '@mantine/core'; -import { useColorScheme } from '@mantine/hooks'; +import { type ColorScheme, ColorSchemeProvider, MantineProvider } from '@mantine/core'; +import { useLocalStorage } from '@mantine/hooks'; import { type SpotlightAction, SpotlightProvider } from '@mantine/spotlight'; import type { AppProps } from 'next/app'; import Head from 'next/head'; import { type NextRouter, useRouter } from 'next/router'; -import { useEffect, useState } from 'react'; import { VscPackage } from 'react-icons/vsc'; import { RouterTransition } from '~/components/RouterTransition'; import '../styles/unocss.css'; @@ -69,15 +68,14 @@ const actions: (router: NextRouter) => SpotlightAction[] = (router: NextRouter) export default function MyApp({ Component, pageProps }: AppProps) { const router = useRouter(); - const preferredColorScheme = useColorScheme('dark', { getInitialValueInEffect: true }); - const [colorScheme, setColorScheme] = useState(preferredColorScheme); + const [colorScheme, setColorScheme] = useLocalStorage({ + key: 'theme', + defaultValue: 'dark', + getInitialValueInEffect: true, + }); const toggleColorScheme = (value?: ColorScheme) => setColorScheme(value ?? (colorScheme === 'dark' ? 'light' : 'dark')); - useEffect(() => { - setColorScheme(preferredColorScheme); - }, [preferredColorScheme]); - return ( <> diff --git a/packages/website/src/pages/_document.tsx b/packages/website/src/pages/_document.tsx index c95a42da3616..123d1b786c81 100644 --- a/packages/website/src/pages/_document.tsx +++ b/packages/website/src/pages/_document.tsx @@ -1,17 +1,10 @@ -import { createStylesServer, ServerStyles } from '@mantine/next'; -import Document, { Html, Head, Main, NextScript, type DocumentContext, type DocumentInitialProps } from 'next/document'; +import { createGetInitialProps } from '@mantine/next'; +import Document, { Html, Head, Main, NextScript } from 'next/document'; -const stylesServer = createStylesServer(); +const getInitialProps = createGetInitialProps(); export default class _Document extends Document { - public static override async getInitialProps(ctx: DocumentContext): Promise { - const initialProps = await Document.getInitialProps(ctx); - - return { - ...initialProps, - styles: [initialProps.styles, ], - }; - } + public static override getInitialProps = getInitialProps; public override render() { return ( From 103e1bd8439c1c8bb236fa1775b9fa9036457666 Mon Sep 17 00:00:00 2001 From: iCrawl Date: Tue, 23 Aug 2022 10:11:07 +0200 Subject: [PATCH 085/155] feat: add footer links --- .../website/src/components/SidebarLayout.tsx | 70 +++++++++++++++---- packages/website/src/pages/docs/[...slug].tsx | 14 ++-- 2 files changed, 65 insertions(+), 19 deletions(-) diff --git a/packages/website/src/components/SidebarLayout.tsx b/packages/website/src/components/SidebarLayout.tsx index 5acef0f863ad..ed750e94537b 100644 --- a/packages/website/src/components/SidebarLayout.tsx +++ b/packages/website/src/components/SidebarLayout.tsx @@ -17,10 +17,11 @@ import { Menu, ActionIcon, useMantineColorScheme, - Center, Stack, Skeleton, LoadingOverlay, + Container, + Title, } from '@mantine/core'; import { NextLink } from '@mantine/next'; import type { MDXRemoteSerializeResult } from 'next-mdx-remote'; @@ -314,21 +315,60 @@ export function SidebarLayout({ paddingLeft: 24, }, })} - pt={70} + pt={50} > -
- - - - - -
+ + + + + + + + + + Community + + + + Discord + + + + + GitHub discussions + + + + + + Project + + + + discord.js + + + + + discord.js guide + + + + + discord-api-types + + + + + + + diff --git a/packages/website/src/pages/docs/[...slug].tsx b/packages/website/src/pages/docs/[...slug].tsx index 858d4ebdf453..dbae04ba8b79 100644 --- a/packages/website/src/pages/docs/[...slug].tsx +++ b/packages/website/src/pages/docs/[...slug].tsx @@ -1,7 +1,7 @@ import { readFile } from 'node:fs/promises'; import { join } from 'node:path'; import { cwd } from 'node:process'; -import { Affix, Box, Button, LoadingOverlay, Transition } from '@mantine/core'; +import { ActionIcon, Affix, Box, LoadingOverlay, Transition } from '@mantine/core'; import { useMediaQuery, useWindowScroll } from '@mantine/hooks'; import { ApiFunction, ApiItemKind, type ApiPackage } from '@microsoft/api-extractor-model'; import { MDXRemote } from 'next-mdx-remote'; @@ -255,9 +255,15 @@ export default function SlugPage(props: Partial 200}> {(transitionStyles) => ( - + scrollTo({ y: 0 })} + > + + )} From 331dedcb9dd24adaff95dba0a5cfe58662f27541 Mon Sep 17 00:00:00 2001 From: iCrawl Date: Tue, 23 Aug 2022 10:57:34 +0200 Subject: [PATCH 086/155] refactor: front page --- packages/website/src/pages/index.tsx | 76 +++++++++++++++++----------- 1 file changed, 46 insertions(+), 30 deletions(-) diff --git a/packages/website/src/pages/index.tsx b/packages/website/src/pages/index.tsx index 8ab76c9f5e2e..f66e51764097 100644 --- a/packages/website/src/pages/index.tsx +++ b/packages/website/src/pages/index.tsx @@ -1,18 +1,30 @@ import { createStyles, Container, Title, Button, Group, Text, Center, Box } from '@mantine/core'; import Image from 'next/future/image'; import Link from 'next/link'; -import codeSample from '../assets/code-sample.png'; +import { FiExternalLink } from 'react-icons/fi'; +import { PrismAsyncLight as SyntaxHighlighter } from 'react-syntax-highlighter'; +import { vscDarkPlus } from 'react-syntax-highlighter/dist/cjs/styles/prism'; const useStyles = createStyles((theme) => ({ + outer: { + display: 'flex', + flexDirection: 'column', + height: '100%', + justifyContent: 'center', + gap: 50, + padding: 32, + + [theme.fn.smallerThan('md')]: { + height: 'unset', + }, + }, + inner: { display: 'flex', justifyContent: 'space-between', alignItems: 'center', - paddingTop: theme.spacing.xl * 6, - paddingBottom: theme.spacing.xl * 2, [theme.fn.smallerThan('md')]: { - paddingTop: theme.spacing.xl * 2, flexDirection: 'column', gap: 50, }, @@ -20,7 +32,7 @@ const useStyles = createStyles((theme) => ({ content: { maxWidth: 480, - marginRight: theme.spacing.xl * 3, + marginRight: theme.spacing.xl, [theme.fn.smallerThan('md')]: { marginRight: 0, @@ -44,33 +56,13 @@ const useStyles = createStyles((theme) => ({ borderRadius: theme.radius.sm, padding: '4px 12px', }, - - control: { - [theme.fn.smallerThan('xs')]: { - flex: 1, - }, - }, - - image: { - flex: 1, - height: '100%', - maxWidth: 550, - - [theme.fn.smallerThan('xs')]: { - maxWidth: 350, - }, - }, - - vercel: { - paddingBottom: theme.spacing.xl * 4, - }, })); export default function IndexRoute() { const { classes } = useStyles(); return ( - + @@ -84,18 +76,43 @@ export default function IndexRoute() { <Group mt={30}> <Link href="/docs" passHref> - <Button component="a" radius="sm" size="md" className={classes.control}> + <Button component="a" radius="sm" size="md"> Docs </Button> </Link> <Link href="https://discordjs.guide" passHref> - <Button component="a" variant="default" radius="sm" size="md" className={classes.control}> + <Button component="a" variant="default" radius="sm" size="md" rightIcon={<FiExternalLink />}> Guide </Button> </Link> </Group> </Box> - <Image src={codeSample} className={classes.image} /> + <Box pb="xs"> + <SyntaxHighlighter + wrapLongLines + language="typescript" + style={vscDarkPlus} + codeTagProps={{ style: { fontFamily: 'JetBrains Mono' } }} + > + {`import { Client, GatewayIntentBits } from 'discord.js'; + +const client = new Client({ intents: [GatewayIntentBits.Guilds] }); + +client.on('ready', () => { + console.log(\`Logged in as \${client.user.tag}!\`); +}); + +client.on('interactionCreate', async (interaction) => { + if (!interaction.isChatInputCommand()) return; + + if (interaction.commandName === 'ping') { + await interaction.reply('Pong!'); + } +}); + +await client.login('token');`} + </SyntaxHighlighter> + </Box> </Box> <Center> <Link href="https://vercel.com/?utm_source=discordjs&utm_campaign=oss"> @@ -106,7 +123,6 @@ export default function IndexRoute() { width={0} height={0} style={{ height: '100%', width: '100%', maxWidth: 250 }} - className={classes.vercel} /> </a> </Link> From 2d5bce274cb4d36d6b360e7c043379e3ac21228b Mon Sep 17 00:00:00 2001 From: iCrawl <buechler.noel@outlook.com> Date: Tue, 23 Aug 2022 11:13:39 +0200 Subject: [PATCH 087/155] fix: footer on mobile --- .../website/src/components/SidebarLayout.tsx | 21 ++++++++++++++++--- 1 file changed, 18 insertions(+), 3 deletions(-) diff --git a/packages/website/src/components/SidebarLayout.tsx b/packages/website/src/components/SidebarLayout.tsx index ed750e94537b..156bc5009b4c 100644 --- a/packages/website/src/components/SidebarLayout.tsx +++ b/packages/website/src/components/SidebarLayout.tsx @@ -294,7 +294,7 @@ export function SidebarLayout({ > {children} </Box> - <Box sx={{ height: 200 }}></Box> + <Box sx={(theme) => ({ height: 200, [theme.fn.smallerThan('sm')]: { height: 300 } })}></Box> <Box component="footer" sx={(theme) => ({ @@ -314,11 +314,26 @@ export function SidebarLayout({ [theme.fn.smallerThan('md')]: { paddingLeft: 24, }, + + [theme.fn.smallerThan('sm')]: { + height: 300, + }, })} pt={50} > <Container> - <Group position="apart"> + <Box + sx={(theme) => ({ + display: 'flex', + justifyContent: 'space-between', + + [theme.fn.smallerThan('sm')]: { + flexDirection: 'column', + alignItems: 'center', + gap: 50, + }, + })} + > <Link href="https://vercel.com/?utm_source=discordjs&utm_campaign=oss" passHref> <a title="Vercel"> <Image @@ -367,7 +382,7 @@ export function SidebarLayout({ </Stack> </Stack> </Group> - </Group> + </Box> </Container> </Box> </article> From 0674820723ac9fe57cdd85acdd164a8a2305ea6d Mon Sep 17 00:00:00 2001 From: iCrawl <buechler.noel@outlook.com> Date: Tue, 23 Aug 2022 11:20:08 +0200 Subject: [PATCH 088/155] style: spacing --- packages/website/src/components/CodeListing.tsx | 10 ++++++---- packages/website/src/components/DocContainer.tsx | 2 +- packages/website/src/components/MethodItem.tsx | 10 ++++++---- 3 files changed, 13 insertions(+), 9 deletions(-) diff --git a/packages/website/src/components/CodeListing.tsx b/packages/website/src/components/CodeListing.tsx index 015617eb4dde..53e26fd088fd 100644 --- a/packages/website/src/components/CodeListing.tsx +++ b/packages/website/src/components/CodeListing.tsx @@ -1,4 +1,4 @@ -import { ActionIcon, Badge, Group, Stack, Title } from '@mantine/core'; +import { ActionIcon, Badge, Group, MediaQuery, Stack, Title } from '@mantine/core'; import { useMediaQuery } from '@mantine/hooks'; import type { ReactNode } from 'react'; import { FiLink } from 'react-icons/fi'; @@ -42,9 +42,11 @@ export function CodeListing({ return ( <Stack id={name} className="scroll-mt-30" spacing="xs"> <Group ml={matches ? 0 : -45}> - <ActionIcon component="a" href={`#${name}`} variant="transparent"> - <FiLink size={20} /> - </ActionIcon> + <MediaQuery smallerThan="sm" styles={{ display: 'none' }}> + <ActionIcon component="a" href={`#${name}`} variant="transparent"> + <FiLink size={20} /> + </ActionIcon> + </MediaQuery> {deprecation ? ( <Badge variant="filled" color="red"> Deprecated diff --git a/packages/website/src/components/DocContainer.tsx b/packages/website/src/components/DocContainer.tsx index 61aee7e4714e..afc8e4f6f58f 100644 --- a/packages/website/src/components/DocContainer.tsx +++ b/packages/website/src/components/DocContainer.tsx @@ -84,7 +84,7 @@ export function DocContainer({ </Skeleton> <Skeleton visible={router.isFallback} radius="sm"> - <Box px="xs" pb="xs"> + <Box pb="xs"> <SyntaxHighlighter wrapLongLines language="typescript" diff --git a/packages/website/src/components/MethodItem.tsx b/packages/website/src/components/MethodItem.tsx index 52b08e4b970c..8219d7808c55 100644 --- a/packages/website/src/components/MethodItem.tsx +++ b/packages/website/src/components/MethodItem.tsx @@ -1,4 +1,4 @@ -import { ActionIcon, Badge, Group, Stack, Title } from '@mantine/core'; +import { ActionIcon, Badge, Group, MediaQuery, Stack, Title } from '@mantine/core'; import { useMediaQuery } from '@mantine/hooks'; import { FiLink } from 'react-icons/fi'; import { HyperlinkedText } from './HyperlinkedText'; @@ -28,9 +28,11 @@ export function MethodItem({ data }: { data: ApiMethodJSON | ApiMethodSignatureJ <Group> <Stack> <Group ml={matches ? 0 : -45}> - <ActionIcon component="a" href={`#${key}`} variant="transparent"> - <FiLink size={20} /> - </ActionIcon> + <MediaQuery smallerThan="sm" styles={{ display: 'none' }}> + <ActionIcon component="a" href={`#${key}`} variant="transparent"> + <FiLink size={20} /> + </ActionIcon> + </MediaQuery> {data.deprecated ? ( <Badge variant="filled" color="red"> Deprecated From 70806b401e7d1ba78a6d427e55f43cb38f02a6d3 Mon Sep 17 00:00:00 2001 From: iCrawl <buechler.noel@outlook.com> Date: Tue, 23 Aug 2022 12:01:48 +0200 Subject: [PATCH 089/155] style: type import --- packages/website/src/components/tsdoc/TSDoc.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/website/src/components/tsdoc/TSDoc.tsx b/packages/website/src/components/tsdoc/TSDoc.tsx index c644754c55eb..4cc9926f8518 100644 --- a/packages/website/src/components/tsdoc/TSDoc.tsx +++ b/packages/website/src/components/tsdoc/TSDoc.tsx @@ -1,7 +1,7 @@ import { Anchor, Box, Code, Text } from '@mantine/core'; import { DocNodeKind, StandardTags } from '@microsoft/tsdoc'; import Link from 'next/link'; -import { Fragment, ReactNode } from 'react'; +import { Fragment, type ReactNode } from 'react'; import { PrismAsyncLight as SyntaxHighlighter } from 'react-syntax-highlighter'; import { vscDarkPlus } from 'react-syntax-highlighter/dist/cjs/styles/prism'; import { BlockComment } from './BlockComment'; From 32da9b386828fd6d39ef8b98d2ab36446681f12f Mon Sep 17 00:00:00 2001 From: iCrawl <buechler.noel@outlook.com> Date: Tue, 23 Aug 2022 12:06:18 +0200 Subject: [PATCH 090/155] fix: footer and sidebar mobile spacing --- packages/website/src/components/SidebarItems.tsx | 2 +- packages/website/src/components/SidebarLayout.tsx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/website/src/components/SidebarItems.tsx b/packages/website/src/components/SidebarItems.tsx index 97f7ffeb936a..cee8f5f0135f 100644 --- a/packages/website/src/components/SidebarItems.tsx +++ b/packages/website/src/components/SidebarItems.tsx @@ -108,7 +108,7 @@ export function SidebarItems({ }, [router.asPath]); return ( - <Box pb="xl"> + <Box sx={(theme) => ({ paddingBottom: 48, [theme.fn.smallerThan('md')]: { paddingBottom: 128 } })}> {(Object.keys(groupItems) as (keyof GroupedMembers)[]) .filter((group) => groupItems[group].length) .map((group, idx) => ( diff --git a/packages/website/src/components/SidebarLayout.tsx b/packages/website/src/components/SidebarLayout.tsx index 156bc5009b4c..4623991383da 100644 --- a/packages/website/src/components/SidebarLayout.tsx +++ b/packages/website/src/components/SidebarLayout.tsx @@ -345,7 +345,7 @@ export function SidebarLayout({ /> </a> </Link> - <Group align="flex-start" spacing={48}> + <Group sx={(theme) => ({ gap: 50, [theme.fn.smallerThan('sm')]: { gap: 25 } })} align="flex-start"> <Stack spacing={8}> <Title order={4}>Community From a57b9ba5c4c7dcff09caf8f59cc6f7a480932355 Mon Sep 17 00:00:00 2001 From: iCrawl Date: Tue, 23 Aug 2022 12:54:40 +0200 Subject: [PATCH 091/155] refactor: mobile layout for badges --- .../website/src/components/CodeListing.tsx | 50 ++++++++++++------ .../website/src/components/DocContainer.tsx | 3 +- .../website/src/components/MethodItem.tsx | 52 +++++++++++++------ packages/website/tsconfig.eslint.json | 1 + 4 files changed, 72 insertions(+), 34 deletions(-) diff --git a/packages/website/src/components/CodeListing.tsx b/packages/website/src/components/CodeListing.tsx index 53e26fd088fd..e3eeb3287981 100644 --- a/packages/website/src/components/CodeListing.tsx +++ b/packages/website/src/components/CodeListing.tsx @@ -1,4 +1,4 @@ -import { ActionIcon, Badge, Group, MediaQuery, Stack, Title } from '@mantine/core'; +import { ActionIcon, Badge, Box, Group, MediaQuery, Stack, Title } from '@mantine/core'; import { useMediaQuery } from '@mantine/hooks'; import type { ReactNode } from 'react'; import { FiLink } from 'react-icons/fi'; @@ -41,28 +41,44 @@ export function CodeListing({ return ( - + ({ + display: 'flex', + gap: 16, + + [theme.fn.smallerThan('sm')]: { + flexDirection: 'column', + }, + })} + ml={matches ? 0 : -45} + > - {deprecation ? ( - - Deprecated - + {deprecation || readonly || optional ? ( + + {deprecation ? ( + + Deprecated + + ) : null} + {readonly ? Readonly : null} + {optional ? Optional : null} + ) : null} - {readonly ? Readonly : null} - {optional ? Optional : null} - - {name} - {optional ? '?' : ''} - - {separator} - - <HyperlinkedText tokens={typeTokens} /> - - + + + {name} + {optional ? '?' : ''} + + {separator} + + <HyperlinkedText tokens={typeTokens} /> + + + {deprecation ? : null} diff --git a/packages/website/src/components/DocContainer.tsx b/packages/website/src/components/DocContainer.tsx index afc8e4f6f58f..ca83728b0007 100644 --- a/packages/website/src/components/DocContainer.tsx +++ b/packages/website/src/components/DocContainer.tsx @@ -1,4 +1,4 @@ -import { Group, Stack, Title, Text, Box, MediaQuery, Aside, ScrollArea, Skeleton } from '@mantine/core'; +import { Group, Stack, Title, Text, Box, MediaQuery, Aside, ScrollArea, Skeleton, Divider } from '@mantine/core'; import { useMediaQuery } from '@mantine/hooks'; import { useRouter } from 'next/router'; import { Fragment, type ReactNode } from 'react'; @@ -80,6 +80,7 @@ export function DocContainer({
} padded dense={matches}> {summary ? : No summary provided.} +
diff --git a/packages/website/src/components/MethodItem.tsx b/packages/website/src/components/MethodItem.tsx index 8219d7808c55..82b84feef4ed 100644 --- a/packages/website/src/components/MethodItem.tsx +++ b/packages/website/src/components/MethodItem.tsx @@ -1,4 +1,4 @@ -import { ActionIcon, Badge, Group, MediaQuery, Stack, Title } from '@mantine/core'; +import { ActionIcon, Badge, Box, Group, MediaQuery, Stack, Title } from '@mantine/core'; import { useMediaQuery } from '@mantine/hooks'; import { FiLink } from 'react-icons/fi'; import { HyperlinkedText } from './HyperlinkedText'; @@ -27,27 +27,47 @@ export function MethodItem({ data }: { data: ApiMethodJSON | ApiMethodSignatureJ - + ({ + display: 'flex', + gap: 16, + + [theme.fn.smallerThan('sm')]: { + flexDirection: 'column', + }, + })} + ml={matches ? 0 : -45} + > - {data.deprecated ? ( - - Deprecated - - ) : null} - {data.kind === 'Method' && method.visibility === Visibility.Protected ? ( - Protected + {data.deprecated || + (data.kind === 'Method' && method.visibility === Visibility.Protected) || + (data.kind === 'Method' && method.static) ? ( + + {data.deprecated ? ( + + Deprecated + + ) : null} + {data.kind === 'Method' && method.visibility === Visibility.Protected ? ( + Protected + ) : null} + {data.kind === 'Method' && method.static ? Static : null} + ) : null} - {data.kind === 'Method' && method.static ? Static : null} - {`${getShorthandName(data)}`} - : - - <HyperlinkedText tokens={data.returnTypeTokens} /> - - + + {`${getShorthandName( + data, + )}`} + : + + <HyperlinkedText tokens={data.returnTypeTokens} /> + + +
diff --git a/packages/website/tsconfig.eslint.json b/packages/website/tsconfig.eslint.json index d04d4be3aedc..63e703d904ba 100644 --- a/packages/website/tsconfig.eslint.json +++ b/packages/website/tsconfig.eslint.json @@ -7,6 +7,7 @@ "**/*.ts", "**/*.tsx", "**/*.js", + "**/*.cjs", "**/*.mjs", "**/*.jsx", "**/*.test.ts", From 5b4672bad331912d9d6c375a34b6deabe4ddba99 Mon Sep 17 00:00:00 2001 From: iCrawl Date: Tue, 23 Aug 2022 13:21:32 +0200 Subject: [PATCH 092/155] refactor: css --- .../website/src/components/CodeListing.tsx | 35 ++++---- .../website/src/components/DocContainer.tsx | 9 +- .../src/components/InheritanceText.tsx | 2 +- .../website/src/components/MethodItem.tsx | 28 +++--- packages/website/src/components/Section.tsx | 7 +- packages/website/src/components/Sections.tsx | 8 +- .../website/src/components/SidebarLayout.tsx | 90 +++++++++---------- .../website/src/components/model/Enum.tsx | 2 +- .../src/components/tsdoc/BlockComment.tsx | 20 ++--- packages/website/src/pages/docs/[...slug].tsx | 2 +- 10 files changed, 100 insertions(+), 103 deletions(-) diff --git a/packages/website/src/components/CodeListing.tsx b/packages/website/src/components/CodeListing.tsx index e3eeb3287981..6ba880d4e0a1 100644 --- a/packages/website/src/components/CodeListing.tsx +++ b/packages/website/src/components/CodeListing.tsx @@ -1,6 +1,6 @@ -import { ActionIcon, Badge, Box, Group, MediaQuery, Stack, Title } from '@mantine/core'; +import { ActionIcon, Badge, Box, createStyles, Group, MediaQuery, Stack, Title } from '@mantine/core'; import { useMediaQuery } from '@mantine/hooks'; -import type { ReactNode } from 'react'; +import type { PropsWithChildren } from 'react'; import { FiLink } from 'react-icons/fi'; import { HyperlinkedText } from './HyperlinkedText'; import { InheritanceText } from './InheritanceText'; @@ -14,6 +14,17 @@ export enum CodeListingSeparatorType { Value = '=', } +const useStyles = createStyles((theme) => ({ + outer: { + display: 'flex', + gap: 16, + + [theme.fn.smallerThan('sm')]: { + flexDirection: 'column', + }, + }, +})); + export function CodeListing({ name, separator = CodeListingSeparatorType.Type, @@ -25,7 +36,7 @@ export function CodeListing({ comment, deprecation, inheritanceData, -}: { +}: PropsWithChildren<{ name: string; separator?: CodeListingSeparatorType; typeTokens: TokenDocumentation[]; @@ -33,25 +44,15 @@ export function CodeListing({ optional?: boolean; summary?: ApiItemJSON['summary']; comment?: AnyDocNodeJSON | null; - children?: ReactNode; deprecation?: AnyDocNodeJSON | null; inheritanceData?: InheritanceData | null; -}) { - const matches = useMediaQuery('(max-width: 768px)', true, { getInitialValueInEffect: false }); +}>) { + const { classes } = useStyles(); + const matches = useMediaQuery('(max-width: 768px)'); return ( - ({ - display: 'flex', - gap: 16, - - [theme.fn.smallerThan('sm')]: { - flexDirection: 'column', - }, - })} - ml={matches ? 0 : -45} - > + diff --git a/packages/website/src/components/DocContainer.tsx b/packages/website/src/components/DocContainer.tsx index ca83728b0007..cf3d0fd4a7d6 100644 --- a/packages/website/src/components/DocContainer.tsx +++ b/packages/website/src/components/DocContainer.tsx @@ -1,7 +1,7 @@ import { Group, Stack, Title, Text, Box, MediaQuery, Aside, ScrollArea, Skeleton, Divider } from '@mantine/core'; import { useMediaQuery } from '@mantine/hooks'; import { useRouter } from 'next/router'; -import { Fragment, type ReactNode } from 'react'; +import { Fragment, type PropsWithChildren } from 'react'; import { VscSymbolClass, VscSymbolMethod, @@ -23,19 +23,18 @@ import type { TypeParameterData } from '~/DocModel/TypeParameterMixin'; import type { AnyDocNodeJSON } from '~/DocModel/comment/CommentNode'; import type { TokenDocumentation } from '~/util/parse.server'; -interface DocContainerProps { +type DocContainerProps = PropsWithChildren<{ name: string; kind: string; excerpt: string; summary?: ApiItemJSON['summary']; - children?: ReactNode; extendsTokens?: TokenDocumentation[] | null; implementsTokens?: TokenDocumentation[][]; typeParams?: TypeParameterData[]; comment?: AnyDocNodeJSON | null; methods?: ApiClassJSON['methods'] | ApiInterfaceJSON['methods'] | null; properties?: ApiClassJSON['properties'] | ApiInterfaceJSON['properties'] | null; -} +}>; function generateIcon(kind: string) { const icons = { @@ -63,7 +62,7 @@ export function DocContainer({ properties, }: DocContainerProps) { const router = useRouter(); - const matches = useMediaQuery('(max-width: 768px)', true, { getInitialValueInEffect: false }); + const matches = useMediaQuery('(max-width: 768px)'); return ( diff --git a/packages/website/src/components/InheritanceText.tsx b/packages/website/src/components/InheritanceText.tsx index 6f2fb999b47c..fe1eb035fe2e 100644 --- a/packages/website/src/components/InheritanceText.tsx +++ b/packages/website/src/components/InheritanceText.tsx @@ -4,7 +4,7 @@ import type { InheritanceData } from '~/DocModel/ApiNodeJSONEncoder'; export function InheritanceText({ data }: { data: InheritanceData }) { return ( - + {'Inherited from '} diff --git a/packages/website/src/components/MethodItem.tsx b/packages/website/src/components/MethodItem.tsx index 82b84feef4ed..a561566201cf 100644 --- a/packages/website/src/components/MethodItem.tsx +++ b/packages/website/src/components/MethodItem.tsx @@ -1,4 +1,4 @@ -import { ActionIcon, Badge, Box, Group, MediaQuery, Stack, Title } from '@mantine/core'; +import { ActionIcon, Badge, Box, createStyles, Group, MediaQuery, Stack, Title } from '@mantine/core'; import { useMediaQuery } from '@mantine/hooks'; import { FiLink } from 'react-icons/fi'; import { HyperlinkedText } from './HyperlinkedText'; @@ -8,6 +8,17 @@ import { TSDoc } from './tsdoc/TSDoc'; import type { ApiMethodJSON, ApiMethodSignatureJSON } from '~/DocModel/ApiNodeJSONEncoder'; import { Visibility } from '~/DocModel/Visibility'; +const useStyles = createStyles((theme) => ({ + outer: { + display: 'flex', + gap: 16, + + [theme.fn.smallerThan('sm')]: { + flexDirection: 'column', + }, + }, +})); + function getShorthandName(data: ApiMethodJSON | ApiMethodSignatureJSON) { return `${data.name}${data.optional ? '?' : ''}(${data.parameters.reduce((prev, cur, index) => { if (index === 0) { @@ -19,7 +30,8 @@ function getShorthandName(data: ApiMethodJSON | ApiMethodSignatureJSON) { } export function MethodItem({ data }: { data: ApiMethodJSON | ApiMethodSignatureJSON }) { - const matches = useMediaQuery('(max-width: 768px)', true, { getInitialValueInEffect: false }); + const { classes } = useStyles(); + const matches = useMediaQuery('(max-width: 768px)'); const method = data as ApiMethodJSON; const key = `${data.name}${data.overloadIndex && data.overloadIndex > 1 ? `:${data.overloadIndex}` : ''}`; @@ -27,17 +39,7 @@ export function MethodItem({ data }: { data: ApiMethodJSON | ApiMethodSignatureJ - ({ - display: 'flex', - gap: 16, - - [theme.fn.smallerThan('sm')]: { - flexDirection: 'column', - }, - })} - ml={matches ? 0 : -45} - > + diff --git a/packages/website/src/components/Section.tsx b/packages/website/src/components/Section.tsx index 948546d57f6a..ae17459fe785 100644 --- a/packages/website/src/components/Section.tsx +++ b/packages/website/src/components/Section.tsx @@ -8,7 +8,7 @@ import { Text, useMantineColorScheme, } from '@mantine/core'; -import { type ReactNode, useState, useEffect } from 'react'; +import { useState, useEffect, type PropsWithChildren } from 'react'; import { VscChevronDown } from 'react-icons/vsc'; const useStyles = createStyles((theme, { opened }: { opened: boolean }) => ({ @@ -39,14 +39,13 @@ export function Section({ dense = false, defaultClosed = false, children, -}: { +}: PropsWithChildren<{ title: string; icon?: JSX.Element; padded?: boolean; dense?: boolean; defaultClosed?: boolean; - children: ReactNode; -}) { +}>) { const [opened, setOpened] = useState(!defaultClosed); const { colorScheme } = useMantineColorScheme(); const { classes } = useStyles({ opened }); diff --git a/packages/website/src/components/Sections.tsx b/packages/website/src/components/Sections.tsx index 111555b720cd..7c1fc1166e79 100644 --- a/packages/website/src/components/Sections.tsx +++ b/packages/website/src/components/Sections.tsx @@ -10,7 +10,7 @@ import type { ApiClassJSON, ApiConstructorJSON, ApiInterfaceJSON } from '~/DocMo import type { ParameterDocumentation } from '~/util/parse.server'; export function PropertiesSection({ data }: { data: ApiClassJSON['properties'] | ApiInterfaceJSON['properties'] }) { - const matches = useMediaQuery('(max-width: 768px)', true, { getInitialValueInEffect: false }); + const matches = useMediaQuery('(max-width: 768px)'); return data.length ? (
} padded dense={matches}> @@ -20,7 +20,7 @@ export function PropertiesSection({ data }: { data: ApiClassJSON['properties'] | } export function MethodsSection({ data }: { data: ApiClassJSON['methods'] | ApiInterfaceJSON['methods'] }) { - const matches = useMediaQuery('(max-width: 768px)', true, { getInitialValueInEffect: false }); + const matches = useMediaQuery('(max-width: 768px)'); return data.length ? (
} padded dense={matches}> @@ -30,7 +30,7 @@ export function MethodsSection({ data }: { data: ApiClassJSON['methods'] | ApiIn } export function ParametersSection({ data }: { data: ParameterDocumentation[] }) { - const matches = useMediaQuery('(max-width: 768px)', true, { getInitialValueInEffect: false }); + const matches = useMediaQuery('(max-width: 768px)'); return data.length ? (
} padded dense={matches}> @@ -40,7 +40,7 @@ export function ParametersSection({ data }: { data: ParameterDocumentation[] }) } export function ConstructorSection({ data }: { data: ApiConstructorJSON }) { - const matches = useMediaQuery('(max-width: 768px)', true, { getInitialValueInEffect: false }); + const matches = useMediaQuery('(max-width: 768px)'); const getShorthandName = () => `constructor(${data.parameters.reduce((prev, cur, index) => { diff --git a/packages/website/src/components/SidebarLayout.tsx b/packages/website/src/components/SidebarLayout.tsx index 4623991383da..c30b36993fd3 100644 --- a/packages/website/src/components/SidebarLayout.tsx +++ b/packages/website/src/components/SidebarLayout.tsx @@ -88,6 +88,47 @@ const useStyles = createStyles( transition: 'transform 150ms ease', transform: openedVersion ? 'rotate(180deg)' : 'rotate(0deg)', }, + + content: { + position: 'relative', + minHeight: 'calc(100vh - 50px)', + zIndex: 1, + background: theme.colorScheme === 'dark' ? theme.colors.dark![8] : theme.colors.gray![0], + boxShadow: '0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1)', + }, + + footer: { + position: 'fixed', + bottom: 0, + left: 0, + right: 0, + height: 200, + background: theme.colorScheme === 'dark' ? theme.colors.dark![7] : theme.colors.gray![0], + paddingLeft: 324, + + [theme.fn.smallerThan('lg')]: { + paddingRight: 24, + }, + + [theme.fn.smallerThan('md')]: { + paddingLeft: 24, + }, + + [theme.fn.smallerThan('sm')]: { + height: 300, + }, + }, + + links: { + display: 'flex', + justifyContent: 'space-between', + + [theme.fn.smallerThan('sm')]: { + flexDirection: 'column', + alignItems: 'center', + gap: 50, + }, + }, }), ); @@ -281,59 +322,18 @@ export function SidebarLayout({ } >
- ({ - position: 'relative', - minHeight: 'calc(100vh - 50px)', - zIndex: 1, - background: theme.colorScheme === 'dark' ? theme.colors.dark![8] : theme.colors.gray![0], - boxShadow: '0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1)', - })} - p="lg" - pb={80} - > + {children} ({ height: 200, [theme.fn.smallerThan('sm')]: { height: 300 } })}> ({ - position: 'fixed', - bottom: 0, - left: 0, - right: 0, - height: 200, - background: theme.colorScheme === 'dark' ? theme.colors.dark![7] : theme.colors.gray![0], - paddingLeft: 324, - paddingRight: data?.member?.kind !== 'Class' && data?.member?.kind !== 'Interface' ? 24 : 324, - - [theme.fn.smallerThan('lg')]: { - paddingRight: 24, - }, - - [theme.fn.smallerThan('md')]: { - paddingLeft: 24, - }, - - [theme.fn.smallerThan('sm')]: { - height: 300, - }, - })} + sx={{ paddingRight: data?.member?.kind !== 'Class' && data?.member?.kind !== 'Interface' ? 24 : 324 }} + className={classes.footer} pt={50} > - ({ - display: 'flex', - justifyContent: 'space-between', - - [theme.fn.smallerThan('sm')]: { - flexDirection: 'column', - alignItems: 'center', - gap: 50, - }, - })} - > + diff --git a/packages/website/src/components/tsdoc/BlockComment.tsx b/packages/website/src/components/tsdoc/BlockComment.tsx index e5037a3f4b3a..31575ef72fff 100644 --- a/packages/website/src/components/tsdoc/BlockComment.tsx +++ b/packages/website/src/components/tsdoc/BlockComment.tsx @@ -1,9 +1,9 @@ import { Alert, Box, Title, Text } from '@mantine/core'; import { StandardTags } from '@microsoft/tsdoc'; -import type { ReactNode } from 'react'; +import type { PropsWithChildren } from 'react'; import { VscWarning } from 'react-icons/vsc'; -export function Block({ children, title }: { children: ReactNode; title: string }) { +export function Block({ children, title }: PropsWithChildren<{ title: string }>) { return ( {title} @@ -15,14 +15,11 @@ export function Block({ children, title }: { children: ReactNode; title: string export function ExampleBlock({ children, exampleIndex, -}: { - children: ReactNode; - exampleIndex?: number | undefined; -}): JSX.Element { +}: PropsWithChildren<{ exampleIndex?: number | undefined }>): JSX.Element { return {children}; } -export function DeprecatedBlock({ children }: { children: ReactNode }): JSX.Element { +export function DeprecatedBlock({ children }: PropsWithChildren): JSX.Element { return ( } title="Deprecated" variant="outline" color="red" radius="sm"> {children} @@ -30,11 +27,11 @@ export function DeprecatedBlock({ children }: { children: ReactNode }): JSX.Elem ); } -export function DefaultValueBlock({ children }: { children: ReactNode }): JSX.Element { +export function DefaultValueBlock({ children }: PropsWithChildren): JSX.Element { return {children}; } -export function RemarksBlock({ children }: { children: ReactNode }): JSX.Element { +export function RemarksBlock({ children }: PropsWithChildren): JSX.Element { return {children}; } @@ -42,11 +39,10 @@ export function BlockComment({ children, tagName, index, -}: { +}: PropsWithChildren<{ tagName: string; - children: ReactNode; index?: number | undefined; -}): JSX.Element { +}>): JSX.Element { switch (tagName.toUpperCase()) { case StandardTags.example.tagNameWithUpperCase: return {children}; diff --git a/packages/website/src/pages/docs/[...slug].tsx b/packages/website/src/pages/docs/[...slug].tsx index dbae04ba8b79..1058edaf5e5b 100644 --- a/packages/website/src/pages/docs/[...slug].tsx +++ b/packages/website/src/pages/docs/[...slug].tsx @@ -203,7 +203,7 @@ const member = (props?: ApiItemJSON | undefined) => { export default function SlugPage(props: Partial) { const router = useRouter(); const [scroll, scrollTo] = useWindowScroll(); - const matches = useMediaQuery('(max-width: 1200px)', true, { getInitialValueInEffect: false }); + const matches = useMediaQuery('(max-width: 1200px)'); const name = `discord.js${props.data?.member?.name ? ` | ${props.data.member.name}` : ''}`; From 28bc4f42c66c1b9a872a6ca56f7c43538b8d1905 Mon Sep 17 00:00:00 2001 From: iCrawl Date: Tue, 23 Aug 2022 14:00:02 +0200 Subject: [PATCH 093/155] feat: light theme code blocks --- .../website/src/components/CodeListing.tsx | 2 ++ .../website/src/components/DocContainer.tsx | 19 ++++++++++++++++--- .../website/src/components/MethodItem.tsx | 2 ++ .../website/src/components/SidebarLayout.tsx | 5 +++-- .../website/src/components/tsdoc/TSDoc.tsx | 8 +++++--- packages/website/src/pages/index.tsx | 7 ++++--- 6 files changed, 32 insertions(+), 11 deletions(-) diff --git a/packages/website/src/components/CodeListing.tsx b/packages/website/src/components/CodeListing.tsx index 6ba880d4e0a1..e620ebac18b1 100644 --- a/packages/website/src/components/CodeListing.tsx +++ b/packages/website/src/components/CodeListing.tsx @@ -17,10 +17,12 @@ export enum CodeListingSeparatorType { const useStyles = createStyles((theme) => ({ outer: { display: 'flex', + alignItems: 'center', gap: 16, [theme.fn.smallerThan('sm')]: { flexDirection: 'column', + alignItems: 'unset', }, }, })); diff --git a/packages/website/src/components/DocContainer.tsx b/packages/website/src/components/DocContainer.tsx index cf3d0fd4a7d6..9d475a08c3e5 100644 --- a/packages/website/src/components/DocContainer.tsx +++ b/packages/website/src/components/DocContainer.tsx @@ -1,4 +1,16 @@ -import { Group, Stack, Title, Text, Box, MediaQuery, Aside, ScrollArea, Skeleton, Divider } from '@mantine/core'; +import { + Group, + Stack, + Title, + Text, + Box, + MediaQuery, + Aside, + ScrollArea, + Skeleton, + Divider, + useMantineColorScheme, +} from '@mantine/core'; import { useMediaQuery } from '@mantine/hooks'; import { useRouter } from 'next/router'; import { Fragment, type PropsWithChildren } from 'react'; @@ -12,7 +24,7 @@ import { VscSymbolParameter, } from 'react-icons/vsc'; import { PrismAsyncLight as SyntaxHighlighter } from 'react-syntax-highlighter'; -import { vscDarkPlus } from 'react-syntax-highlighter/dist/cjs/styles/prism'; +import { vscDarkPlus, ghcolors } from 'react-syntax-highlighter/dist/cjs/styles/prism'; import { HyperlinkedText } from './HyperlinkedText'; import { Section } from './Section'; import { TableOfContentItems } from './TableOfContentItems'; @@ -63,6 +75,7 @@ export function DocContainer({ }: DocContainerProps) { const router = useRouter(); const matches = useMediaQuery('(max-width: 768px)'); + const { colorScheme } = useMantineColorScheme(); return ( @@ -88,7 +101,7 @@ export function DocContainer({ {excerpt} diff --git a/packages/website/src/components/MethodItem.tsx b/packages/website/src/components/MethodItem.tsx index a561566201cf..32a26df37c08 100644 --- a/packages/website/src/components/MethodItem.tsx +++ b/packages/website/src/components/MethodItem.tsx @@ -11,10 +11,12 @@ import { Visibility } from '~/DocModel/Visibility'; const useStyles = createStyles((theme) => ({ outer: { display: 'flex', + alignItems: 'center', gap: 16, [theme.fn.smallerThan('sm')]: { flexDirection: 'column', + alignItems: 'unset', }, }, })); diff --git a/packages/website/src/components/SidebarLayout.tsx b/packages/website/src/components/SidebarLayout.tsx index c30b36993fd3..39360f98294d 100644 --- a/packages/website/src/components/SidebarLayout.tsx +++ b/packages/website/src/components/SidebarLayout.tsx @@ -107,7 +107,7 @@ const useStyles = createStyles( paddingLeft: 324, [theme.fn.smallerThan('lg')]: { - paddingRight: 24, + paddingRight: 54, }, [theme.fn.smallerThan('md')]: { @@ -115,6 +115,7 @@ const useStyles = createStyles( }, [theme.fn.smallerThan('sm')]: { + paddingRight: 24, height: 300, }, }, @@ -328,7 +329,7 @@ export function SidebarLayout({ ({ height: 200, [theme.fn.smallerThan('sm')]: { height: 300 } })}> diff --git a/packages/website/src/components/tsdoc/TSDoc.tsx b/packages/website/src/components/tsdoc/TSDoc.tsx index 4cc9926f8518..97415d4e21c5 100644 --- a/packages/website/src/components/tsdoc/TSDoc.tsx +++ b/packages/website/src/components/tsdoc/TSDoc.tsx @@ -1,9 +1,9 @@ -import { Anchor, Box, Code, Text } from '@mantine/core'; +import { Anchor, Box, Code, Text, useMantineColorScheme } from '@mantine/core'; import { DocNodeKind, StandardTags } from '@microsoft/tsdoc'; import Link from 'next/link'; import { Fragment, type ReactNode } from 'react'; import { PrismAsyncLight as SyntaxHighlighter } from 'react-syntax-highlighter'; -import { vscDarkPlus } from 'react-syntax-highlighter/dist/cjs/styles/prism'; +import { vscDarkPlus, ghcolors } from 'react-syntax-highlighter/dist/cjs/styles/prism'; import { BlockComment } from './BlockComment'; import type { DocBlockJSON } from '~/DocModel/comment/CommentBlock'; import type { AnyDocNodeJSON } from '~/DocModel/comment/CommentNode'; @@ -14,6 +14,8 @@ import type { DocPlainTextJSON } from '~/DocModel/comment/PlainTextCommentNode'; import type { DocCommentJSON } from '~/DocModel/comment/RootComment'; export function TSDoc({ node }: { node: AnyDocNodeJSON }): JSX.Element { + const { colorScheme } = useMantineColorScheme(); + let numberOfExamples = 0; let exampleIndex = 0; @@ -74,7 +76,7 @@ export function TSDoc({ node }: { node: AnyDocNodeJSON }): JSX.Element { wrapLines wrapLongLines language={language} - style={vscDarkPlus} + style={colorScheme === 'dark' ? vscDarkPlus : ghcolors} codeTagProps={{ style: { fontFamily: 'JetBrains Mono' } }} > {code} diff --git a/packages/website/src/pages/index.tsx b/packages/website/src/pages/index.tsx index f66e51764097..5676322aa326 100644 --- a/packages/website/src/pages/index.tsx +++ b/packages/website/src/pages/index.tsx @@ -1,9 +1,9 @@ -import { createStyles, Container, Title, Button, Group, Text, Center, Box } from '@mantine/core'; +import { createStyles, Container, Title, Button, Group, Text, Center, Box, useMantineColorScheme } from '@mantine/core'; import Image from 'next/future/image'; import Link from 'next/link'; import { FiExternalLink } from 'react-icons/fi'; import { PrismAsyncLight as SyntaxHighlighter } from 'react-syntax-highlighter'; -import { vscDarkPlus } from 'react-syntax-highlighter/dist/cjs/styles/prism'; +import { vscDarkPlus, ghcolors } from 'react-syntax-highlighter/dist/cjs/styles/prism'; const useStyles = createStyles((theme) => ({ outer: { @@ -60,6 +60,7 @@ const useStyles = createStyles((theme) => ({ export default function IndexRoute() { const { classes } = useStyles(); + const { colorScheme } = useMantineColorScheme(); return ( @@ -91,7 +92,7 @@ export default function IndexRoute() { {`import { Client, GatewayIntentBits } from 'discord.js'; From 7b5c688844194c588553bd50240cb625289b4c1c Mon Sep 17 00:00:00 2001 From: iCrawl Date: Tue, 23 Aug 2022 14:21:48 +0200 Subject: [PATCH 094/155] fix: mobile centering --- .../website/src/pages/docs/packages/[package]/index.tsx | 8 +++++++- packages/website/src/pages/docs/packages/index.tsx | 8 +++++++- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/packages/website/src/pages/docs/packages/[package]/index.tsx b/packages/website/src/pages/docs/packages/[package]/index.tsx index 8a1631bfeeea..10670ed25279 100644 --- a/packages/website/src/pages/docs/packages/[package]/index.tsx +++ b/packages/website/src/pages/docs/packages/[package]/index.tsx @@ -66,6 +66,12 @@ export const getStaticProps: GetStaticProps = async ({ params }) => { }; const useStyles = createStyles((theme) => ({ + outer: { + display: 'flex', + height: '100%', + alignItems: 'center', + }, + control: { padding: theme.spacing.xs, color: theme.colorScheme === 'dark' ? theme.colors.dark![0] : theme.black, @@ -86,7 +92,7 @@ export default function VersionsRoute(props: Partial & { error?: s return props.error ? ( {props.error} ) : ( - + Select a version: diff --git a/packages/website/src/pages/docs/packages/index.tsx b/packages/website/src/pages/docs/packages/index.tsx index 3bcf4874ac83..bc94d76a2475 100644 --- a/packages/website/src/pages/docs/packages/index.tsx +++ b/packages/website/src/pages/docs/packages/index.tsx @@ -14,6 +14,12 @@ import { VscArrowRight, VscPackage } from 'react-icons/vsc'; import { PACKAGES } from '~/util/packages'; const useStyles = createStyles((theme) => ({ + outer: { + display: 'flex', + height: '100%', + alignItems: 'center', + }, + control: { padding: theme.spacing.xs, color: theme.colorScheme === 'dark' ? theme.colors.dark![0] : theme.black, @@ -31,7 +37,7 @@ export default function PackagesRoute() { const { colorScheme } = useMantineColorScheme(); return ( - <Container py={96} size="xs"> + <Container className={classes.outer} size="xs"> <Stack sx={{ flexGrow: 1 }}> <Title order={2} ml="xs"> Select a package: From 58d2a1e6d7fa3adff4006032df99f7e8613dd1ed Mon Sep 17 00:00:00 2001 From: iCrawl <buechler.noel@outlook.com> Date: Tue, 23 Aug 2022 15:17:17 +0200 Subject: [PATCH 095/155] chore: deps --- packages/actions/package.json | 2 +- packages/builders/package.json | 2 +- packages/collection/package.json | 2 +- packages/discord.js/cliff.toml | 2 +- packages/discord.js/package.json | 2 +- packages/docgen/package.json | 2 +- packages/proxy-container/package.json | 2 +- packages/proxy/package.json | 2 +- packages/rest/package.json | 2 +- packages/scripts/package.json | 2 +- packages/voice/package.json | 2 +- packages/website/package.json | 4 +- packages/ws/package.json | 2 +- yarn.lock | 62 +++++++++++++-------------- 14 files changed, 45 insertions(+), 45 deletions(-) diff --git a/packages/actions/package.json b/packages/actions/package.json index da8b2cf9b1da..f4fe0e4813c5 100644 --- a/packages/actions/package.json +++ b/packages/actions/package.json @@ -43,7 +43,7 @@ "tslib": "^2.4.0" }, "devDependencies": { - "@types/node": "^16.11.52", + "@types/node": "^16.11.54", "@typescript-eslint/eslint-plugin": "^5.34.0", "@typescript-eslint/parser": "^5.34.0", "@vitest/coverage-c8": "^0.22.1", diff --git a/packages/builders/package.json b/packages/builders/package.json index ff57ea4c5850..6f2c4b2a9bc7 100644 --- a/packages/builders/package.json +++ b/packages/builders/package.json @@ -64,7 +64,7 @@ "@discordjs/docgen": "workspace:^", "@favware/cliff-jumper": "^1.8.7", "@microsoft/api-extractor": "^7.29.3", - "@types/node": "^16.11.52", + "@types/node": "^16.11.54", "@typescript-eslint/eslint-plugin": "^5.34.0", "@typescript-eslint/parser": "^5.34.0", "@vitest/coverage-c8": "^0.22.1", diff --git a/packages/collection/package.json b/packages/collection/package.json index 0a78162903d1..d19c0a30cb4f 100644 --- a/packages/collection/package.json +++ b/packages/collection/package.json @@ -53,7 +53,7 @@ "@discordjs/docgen": "workspace:^", "@favware/cliff-jumper": "^1.8.7", "@microsoft/api-extractor": "^7.29.3", - "@types/node": "^16.11.52", + "@types/node": "^16.11.54", "@typescript-eslint/eslint-plugin": "^5.34.0", "@typescript-eslint/parser": "^5.34.0", "@vitest/coverage-c8": "^0.22.1", diff --git a/packages/discord.js/cliff.toml b/packages/discord.js/cliff.toml index 42da0c0cbdae..a4ac02b2a8aa 100644 --- a/packages/discord.js/cliff.toml +++ b/packages/discord.js/cliff.toml @@ -58,7 +58,7 @@ commit_parsers = [ ] filter_commits = true tag_pattern = "[0-9]*" -skip_tags = "v[0-9]*|9*|11*|12*|@discordjs*" +skip_tags = "v[0-9]*|9*|11*|12*|13*|@discordjs*" ignore_tags = "" date_order = true sort_commits = "newest" diff --git a/packages/discord.js/package.json b/packages/discord.js/package.json index 89d0361dae5f..c37b4d95a1c6 100644 --- a/packages/discord.js/package.json +++ b/packages/discord.js/package.json @@ -64,7 +64,7 @@ "devDependencies": { "@discordjs/docgen": "workspace:^", "@favware/cliff-jumper": "^1.8.7", - "@types/node": "^16.11.52", + "@types/node": "^16.11.54", "dtslint": "^4.2.1", "eslint": "^8.22.0", "jest": "^28.1.3", diff --git a/packages/docgen/package.json b/packages/docgen/package.json index 8cb8fbd0c375..2d0d1d0201f4 100644 --- a/packages/docgen/package.json +++ b/packages/docgen/package.json @@ -50,7 +50,7 @@ "devDependencies": { "@favware/cliff-jumper": "^1.8.7", "@types/jsdoc-to-markdown": "^7.0.3", - "@types/node": "^16.11.52", + "@types/node": "^16.11.54", "@typescript-eslint/eslint-plugin": "^5.34.0", "@typescript-eslint/parser": "^5.34.0", "eslint": "^8.22.0", diff --git a/packages/proxy-container/package.json b/packages/proxy-container/package.json index 531458ffa340..89f5e7bc516f 100644 --- a/packages/proxy-container/package.json +++ b/packages/proxy-container/package.json @@ -49,7 +49,7 @@ "tslib": "^2.4.0" }, "devDependencies": { - "@types/node": "^16.11.52", + "@types/node": "^16.11.54", "@typescript-eslint/eslint-plugin": "^5.34.0", "@typescript-eslint/parser": "^5.34.0", "eslint": "^8.22.0", diff --git a/packages/proxy/package.json b/packages/proxy/package.json index 283486d81fa1..141b3fc007e0 100644 --- a/packages/proxy/package.json +++ b/packages/proxy/package.json @@ -62,7 +62,7 @@ "@discordjs/docgen": "workspace:^", "@favware/cliff-jumper": "^1.8.7", "@microsoft/api-extractor": "^7.29.3", - "@types/node": "^16.11.52", + "@types/node": "^16.11.54", "@types/supertest": "^2.0.12", "@typescript-eslint/eslint-plugin": "^5.34.0", "@typescript-eslint/parser": "^5.34.0", diff --git a/packages/rest/package.json b/packages/rest/package.json index 76e5a413a64b..b89ba7ca7837 100644 --- a/packages/rest/package.json +++ b/packages/rest/package.json @@ -64,7 +64,7 @@ "@discordjs/docgen": "workspace:^", "@favware/cliff-jumper": "^1.8.7", "@microsoft/api-extractor": "^7.29.3", - "@types/node": "^16.11.52", + "@types/node": "^16.11.54", "@typescript-eslint/eslint-plugin": "^5.34.0", "@typescript-eslint/parser": "^5.34.0", "@vitest/coverage-c8": "^0.22.1", diff --git a/packages/scripts/package.json b/packages/scripts/package.json index 5d6ef5f3da04..8245d541e9e1 100644 --- a/packages/scripts/package.json +++ b/packages/scripts/package.json @@ -48,7 +48,7 @@ "tslib": "^2.4.0" }, "devDependencies": { - "@types/node": "^16.11.52", + "@types/node": "^16.11.54", "@typescript-eslint/eslint-plugin": "^5.34.0", "@typescript-eslint/parser": "^5.34.0", "@vitest/coverage-c8": "^0.22.1", diff --git a/packages/voice/package.json b/packages/voice/package.json index 3a47bbc45d3f..1873f1c66d95 100644 --- a/packages/voice/package.json +++ b/packages/voice/package.json @@ -66,7 +66,7 @@ "@favware/cliff-jumper": "^1.8.7", "@microsoft/api-extractor": "^7.29.3", "@types/jest": "^28.1.7", - "@types/node": "^16.11.52", + "@types/node": "^16.11.54", "@typescript-eslint/eslint-plugin": "^5.34.0", "@typescript-eslint/parser": "^5.34.0", "downlevel-dts": "^0.10.0", diff --git a/packages/website/package.json b/packages/website/package.json index 85fcd67587c2..d8fd693407b0 100644 --- a/packages/website/package.json +++ b/packages/website/package.json @@ -68,7 +68,7 @@ "devDependencies": { "@testing-library/react": "^13.3.0", "@testing-library/user-event": "^14.4.3", - "@types/node": "^16.11.52", + "@types/node": "^16.11.54", "@types/react-dom": "^18.0.6", "@types/react-syntax-highlighter": "^15.5.4", "@typescript-eslint/eslint-plugin": "^5.34.0", @@ -90,7 +90,7 @@ "prettier": "^2.7.1", "typescript": "^4.7.4", "unocss": "^0.45.12", - "vercel": "^28.1.0", + "vercel": "^28.1.1", "vitest": "^0.22.1" }, "engines": { diff --git a/packages/ws/package.json b/packages/ws/package.json index 2908568e3be8..843e03693642 100644 --- a/packages/ws/package.json +++ b/packages/ws/package.json @@ -65,7 +65,7 @@ "@discordjs/docgen": "workspace:^", "@favware/cliff-jumper": "^1.8.7", "@microsoft/api-extractor": "^7.29.3", - "@types/node": "^16.11.52", + "@types/node": "^16.11.54", "@typescript-eslint/eslint-plugin": "^5.34.0", "@typescript-eslint/parser": "^5.34.0", "@vitest/coverage-c8": "^0.22.1", diff --git a/yarn.lock b/yarn.lock index 81dd5c88f5ac..5fffa1e2ef7c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1737,7 +1737,7 @@ __metadata: resolution: "@discordjs/actions@workspace:packages/actions" dependencies: "@actions/core": ^1.9.1 - "@types/node": ^16.11.52 + "@types/node": ^16.11.54 "@typescript-eslint/eslint-plugin": ^5.34.0 "@typescript-eslint/parser": ^5.34.0 "@vitest/coverage-c8": ^0.22.1 @@ -1763,7 +1763,7 @@ __metadata: "@favware/cliff-jumper": ^1.8.7 "@microsoft/api-extractor": ^7.29.3 "@sapphire/shapeshift": ^3.5.1 - "@types/node": ^16.11.52 + "@types/node": ^16.11.54 "@typescript-eslint/eslint-plugin": ^5.34.0 "@typescript-eslint/parser": ^5.34.0 "@vitest/coverage-c8": ^0.22.1 @@ -1793,7 +1793,7 @@ __metadata: "@discordjs/docgen": "workspace:^" "@favware/cliff-jumper": ^1.8.7 "@microsoft/api-extractor": ^7.29.3 - "@types/node": ^16.11.52 + "@types/node": ^16.11.54 "@typescript-eslint/eslint-plugin": ^5.34.0 "@typescript-eslint/parser": ^5.34.0 "@vitest/coverage-c8": ^0.22.1 @@ -1837,7 +1837,7 @@ __metadata: dependencies: "@favware/cliff-jumper": ^1.8.7 "@types/jsdoc-to-markdown": ^7.0.3 - "@types/node": ^16.11.52 + "@types/node": ^16.11.54 "@typescript-eslint/eslint-plugin": ^5.34.0 "@typescript-eslint/parser": ^5.34.0 commander: ^9.4.0 @@ -1864,7 +1864,7 @@ __metadata: dependencies: "@discordjs/proxy": ^1.1.0 "@discordjs/rest": ^1.1.0 - "@types/node": ^16.11.52 + "@types/node": ^16.11.54 "@typescript-eslint/eslint-plugin": ^5.34.0 "@typescript-eslint/parser": ^5.34.0 eslint: ^8.22.0 @@ -1888,7 +1888,7 @@ __metadata: "@discordjs/rest": ^1.0.0 "@favware/cliff-jumper": ^1.8.7 "@microsoft/api-extractor": ^7.29.3 - "@types/node": ^16.11.52 + "@types/node": ^16.11.54 "@types/supertest": ^2.0.12 "@typescript-eslint/eslint-plugin": ^5.34.0 "@typescript-eslint/parser": ^5.34.0 @@ -1920,7 +1920,7 @@ __metadata: "@microsoft/api-extractor": ^7.29.3 "@sapphire/async-queue": ^1.5.0 "@sapphire/snowflake": ^3.2.2 - "@types/node": ^16.11.52 + "@types/node": ^16.11.54 "@typescript-eslint/eslint-plugin": ^5.34.0 "@typescript-eslint/parser": ^5.34.0 "@vitest/coverage-c8": ^0.22.1 @@ -1947,7 +1947,7 @@ __metadata: version: 0.0.0-use.local resolution: "@discordjs/scripts@workspace:packages/scripts" dependencies: - "@types/node": ^16.11.52 + "@types/node": ^16.11.54 "@typescript-eslint/eslint-plugin": ^5.34.0 "@typescript-eslint/parser": ^5.34.0 "@vitest/coverage-c8": ^0.22.1 @@ -1977,7 +1977,7 @@ __metadata: "@favware/cliff-jumper": ^1.8.7 "@microsoft/api-extractor": ^7.29.3 "@types/jest": ^28.1.7 - "@types/node": ^16.11.52 + "@types/node": ^16.11.54 "@types/ws": ^8.5.3 "@typescript-eslint/eslint-plugin": ^5.34.0 "@typescript-eslint/parser": ^5.34.0 @@ -2019,7 +2019,7 @@ __metadata: "@microsoft/tsdoc-config": 0.16.1 "@testing-library/react": ^13.3.0 "@testing-library/user-event": ^14.4.3 - "@types/node": ^16.11.52 + "@types/node": ^16.11.54 "@types/react-dom": ^18.0.6 "@types/react-syntax-highlighter": ^15.5.4 "@typescript-eslint/eslint-plugin": ^5.34.0 @@ -2056,7 +2056,7 @@ __metadata: swr: ^1.3.0 typescript: ^4.7.4 unocss: ^0.45.12 - vercel: ^28.1.0 + vercel: ^28.1.1 vitest: ^0.22.1 languageName: unknown linkType: soft @@ -2071,7 +2071,7 @@ __metadata: "@favware/cliff-jumper": ^1.8.7 "@microsoft/api-extractor": ^7.29.3 "@sapphire/async-queue": ^1.5.0 - "@types/node": ^16.11.52 + "@types/node": ^16.11.54 "@types/ws": ^8.5.3 "@typescript-eslint/eslint-plugin": ^5.34.0 "@typescript-eslint/parser": ^5.34.0 @@ -3958,10 +3958,10 @@ __metadata: languageName: node linkType: hard -"@types/node@npm:^16.11.52": - version: 16.11.52 - resolution: "@types/node@npm:16.11.52" - checksum: eb688bff28015f1399264b7aa347d5f40e165d438306bd5884d78993671c5e43b7849b8ddc74b91bf7c7b73e15ba54fc56ea1db2118b0e3f59f9fabd2adc7fe7 +"@types/node@npm:^16.11.54": + version: 16.11.54 + resolution: "@types/node@npm:16.11.54" + checksum: fa4d6a94498cc6ef96932a25557082587a178b5fa1da5e208bdb171b85265110a7ca6a4f296e740dca1b29d2a44b3c1e76e21d255e5eeed8be5f67ea538dcb9c languageName: node linkType: hard @@ -4476,10 +4476,10 @@ __metadata: languageName: node linkType: hard -"@vercel/next@npm:3.1.19": - version: 3.1.19 - resolution: "@vercel/next@npm:3.1.19" - checksum: cfcda13d756eaf6e956caf8e1705f0ad11fa3f2fb8366d306c58866999274b0ca28fb2c1a748582234280bdc554282c5b607376ace264886fa8d36b93497123f +"@vercel/next@npm:3.1.20": + version: 3.1.20 + resolution: "@vercel/next@npm:3.1.20" + checksum: 8e846dc44ffdae1e7e01d3bbae49d852fe10670eb1c6a20bd1ff6f7aa52a950d6b108047fc41fb8c4d18d6842c888c16ee83b7d32822008046571c52507bbf91 languageName: node linkType: hard @@ -4530,10 +4530,10 @@ __metadata: languageName: node linkType: hard -"@vercel/python@npm:3.1.9": - version: 3.1.9 - resolution: "@vercel/python@npm:3.1.9" - checksum: c9cf3cd84d09eb99f75c9cc47cba1fefa47240d6a598937fac7983ab2cbd417371d4b3a6dffeda2675368fa5d791ad6cae4c13a864f9945e63d609839b7f2e2d +"@vercel/python@npm:3.1.10": + version: 3.1.10 + resolution: "@vercel/python@npm:3.1.10" + checksum: 956b2e1d3df2a5270d7e6d6a990c5d9cc767e07481c3a8e727ff13fc21629dc295efacc49896b41cfe2d76a4a806d3f682e55386972241a92f775d6f823a9f3a languageName: node linkType: hard @@ -6839,7 +6839,7 @@ __metadata: "@discordjs/rest": "workspace:^" "@favware/cliff-jumper": ^1.8.7 "@sapphire/snowflake": ^3.2.2 - "@types/node": ^16.11.52 + "@types/node": ^16.11.54 "@types/ws": ^8.5.3 discord-api-types: ^0.37.4 dtslint: ^4.2.1 @@ -17058,16 +17058,16 @@ __metadata: languageName: node linkType: hard -"vercel@npm:^28.1.0": - version: 28.1.0 - resolution: "vercel@npm:28.1.0" +"vercel@npm:^28.1.1": + version: 28.1.1 + resolution: "vercel@npm:28.1.1" dependencies: "@vercel/build-utils": 5.3.1 "@vercel/go": 2.2.0 "@vercel/hydrogen": 0.0.14 - "@vercel/next": 3.1.19 + "@vercel/next": 3.1.20 "@vercel/node": 2.5.8 - "@vercel/python": 3.1.9 + "@vercel/python": 3.1.10 "@vercel/redwood": 1.0.18 "@vercel/remix": 1.0.19 "@vercel/ruby": 1.3.27 @@ -17076,7 +17076,7 @@ __metadata: bin: vc: dist/index.js vercel: dist/index.js - checksum: aa25e12a67eab2ebc18fbc0b4749460e8f8ccef2b50b716f0b917ce3562e06494a3d68660a5f40549d188337b4e1e78f2e79f32da6d2168cccc3e6b1342b2e6f + checksum: a24f32b69847ac10789714b67b26de1f25388b767ef499a73a827860d58e2df3c68c571a9860e72b889f2153b6f6d5d240bb7cb1c167ec86d5f2b4530558ace9 languageName: node linkType: hard From 6da405668fc26ac934c825cce0cecf0cbd9cd6a9 Mon Sep 17 00:00:00 2001 From: iCrawl <buechler.noel@outlook.com> Date: Tue, 23 Aug 2022 17:30:26 +0200 Subject: [PATCH 096/155] chore: just in case --- packages/website/src/pages/docs/[...slug].tsx | 3 +++ 1 file changed, 3 insertions(+) diff --git a/packages/website/src/pages/docs/[...slug].tsx b/packages/website/src/pages/docs/[...slug].tsx index 1058edaf5e5b..0e955e7f3380 100644 --- a/packages/website/src/pages/docs/[...slug].tsx +++ b/packages/website/src/pages/docs/[...slug].tsx @@ -215,6 +215,9 @@ export default function SlugPage(props: Partial<SidebarLayoutProps & { error?: s ); } + // Just in case + // return <iframe src="https://discord.js.org" style={{ border: 0, height: '100%', width: '100%' }}></iframe>; + return props.error ? ( <Box sx={{ display: 'flex', maxWidth: '100%', height: '100%' }}>{props.error}</Box> ) : ( From 84059b6b2567f3cd8b642d9fcfb8f81633fe3059 Mon Sep 17 00:00:00 2001 From: iCrawl <buechler.noel@outlook.com> Date: Tue, 23 Aug 2022 17:32:03 +0200 Subject: [PATCH 097/155] fix: affix position when ToC is visible --- packages/website/src/pages/docs/[...slug].tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/website/src/pages/docs/[...slug].tsx b/packages/website/src/pages/docs/[...slug].tsx index 0e955e7f3380..a4d6f001eaa2 100644 --- a/packages/website/src/pages/docs/[...slug].tsx +++ b/packages/website/src/pages/docs/[...slug].tsx @@ -253,7 +253,7 @@ export default function SlugPage(props: Partial<SidebarLayoutProps & { error?: s position={{ bottom: 20, right: - matches || (props.data?.member?.kind !== 'Class' && props.data?.member?.kind !== 'Interface') ? 20 : 280, + matches || (props.data?.member?.kind !== 'Class' && props.data?.member?.kind !== 'Interface') ? 20 : 268, }} > <Transition transition="slide-up" mounted={scroll.y > 200}> From abd3fc8ceb749f4009f9f8d78829756fbfcc543d Mon Sep 17 00:00:00 2001 From: iCrawl <buechler.noel@outlook.com> Date: Tue, 23 Aug 2022 18:53:38 +0200 Subject: [PATCH 098/155] fix: properly 404 and revalidate --- packages/website/src/pages/docs/[...slug].tsx | 6 ++---- .../website/src/pages/docs/packages/[package]/index.tsx | 6 ++---- 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/packages/website/src/pages/docs/[...slug].tsx b/packages/website/src/pages/docs/[...slug].tsx index a4d6f001eaa2..5b1212a06fd9 100644 --- a/packages/website/src/pages/docs/[...slug].tsx +++ b/packages/website/src/pages/docs/[...slug].tsx @@ -169,14 +169,12 @@ export const getStaticProps: GetStaticProps = async ({ params }) => { memberName && containerKey ? findMemberByKey(model, packageName, containerKey, branchName) ?? null : null, source: mdxSource, }, - revalidate: 3600, }, + revalidate: 3600, }; } catch { return { - props: { - notFound: true, - }, + notFound: true, }; } }; diff --git a/packages/website/src/pages/docs/packages/[package]/index.tsx b/packages/website/src/pages/docs/packages/[package]/index.tsx index 10670ed25279..61688371482c 100644 --- a/packages/website/src/pages/docs/packages/[package]/index.tsx +++ b/packages/website/src/pages/docs/packages/[package]/index.tsx @@ -53,14 +53,12 @@ export const getStaticProps: GetStaticProps = async ({ params }) => { data: { versions: data, }, - revalidate: 3600, }, + revalidate: 3600, }; } catch { return { - props: { - notFound: true, - }, + notFound: true, }; } }; From 92933c2b61428432e088572629099c9a442b5dd3 Mon Sep 17 00:00:00 2001 From: iCrawl <buechler.noel@outlook.com> Date: Tue, 23 Aug 2022 19:39:31 +0200 Subject: [PATCH 099/155] refactor: memoize everything --- .../src/components/RouterTransition.tsx | 2 +- .../website/src/components/SidebarItems.tsx | 4 +- .../website/src/components/SidebarLayout.tsx | 31 ++-- .../src/components/TableOfContentItems.tsx | 63 ++++--- .../website/src/components/tsdoc/TSDoc.tsx | 175 +++++++++--------- 5 files changed, 148 insertions(+), 127 deletions(-) diff --git a/packages/website/src/components/RouterTransition.tsx b/packages/website/src/components/RouterTransition.tsx index 2fa6dd979dd6..8d9a3005ab32 100644 --- a/packages/website/src/components/RouterTransition.tsx +++ b/packages/website/src/components/RouterTransition.tsx @@ -21,5 +21,5 @@ export function RouterTransition() { // eslint-disable-next-line react-hooks/exhaustive-deps }, [router.asPath]); - return <NavigationProgress />; + return <NavigationProgress color="blurple" />; } diff --git a/packages/website/src/components/SidebarItems.tsx b/packages/website/src/components/SidebarItems.tsx index cee8f5f0135f..b25ed46ccf59 100644 --- a/packages/website/src/components/SidebarItems.tsx +++ b/packages/website/src/components/SidebarItems.tsx @@ -1,7 +1,7 @@ import { createStyles, Group, Text, NavLink, Box } from '@mantine/core'; import Link from 'next/link'; import { useRouter } from 'next/router'; -import { type Dispatch, type SetStateAction, useEffect, useState } from 'react'; +import { type Dispatch, type SetStateAction, useEffect, useState, useMemo } from 'react'; import { VscSymbolClass, VscSymbolEnum, @@ -101,7 +101,7 @@ export function SidebarItems({ const router = useRouter(); const [asPathWithoutQueryAndAnchor, setAsPathWithoutQueryAndAnchor] = useState(''); const { classes } = useStyles(); - const groupItems = groupMembers(members); + const groupItems = useMemo(() => groupMembers(members), [members]); useEffect(() => { setAsPathWithoutQueryAndAnchor(router.asPath.split('?')[0]?.split('#')[0] ?? ''); diff --git a/packages/website/src/components/SidebarLayout.tsx b/packages/website/src/components/SidebarLayout.tsx index 39360f98294d..fc63311b737b 100644 --- a/packages/website/src/components/SidebarLayout.tsx +++ b/packages/website/src/components/SidebarLayout.tsx @@ -28,7 +28,7 @@ import type { MDXRemoteSerializeResult } from 'next-mdx-remote'; import Image from 'next/future/image'; import Link from 'next/link'; import { useRouter } from 'next/router'; -import { type PropsWithChildren, useState, useEffect } from 'react'; +import { type PropsWithChildren, useState, useEffect, useMemo } from 'react'; import { VscChevronDown, VscGithubInverted, VscPackage, VscVersions } from 'react-icons/vsc'; import { WiDaySunny, WiNightClear } from 'react-icons/wi'; import useSWR from 'swr'; @@ -170,18 +170,25 @@ export function SidebarLayout({ const { classes } = useStyles({ openedLib: openedLibPicker, openedVersion: openedVersionPicker }); - const versionMenuItems = - versions?.map((item) => ( - <Menu.Item key={item} component={NextLink} href={`/docs/packages/${packageName ?? 'builders'}/${item}`}> - {item} - </Menu.Item> - )) ?? []; + const versionMenuItems = useMemo( + () => + versions?.map((item) => ( + <Menu.Item key={item} component={NextLink} href={`/docs/packages/${packageName ?? 'builders'}/${item}`}> + {item} + </Menu.Item> + )) ?? [], + [versions], + ); - const breadcrumbs = asPathWithoutQueryAndAnchor.split('/').map((path, idx, original) => ( - <Link key={idx} href={original.slice(0, idx + 1).join('/')} passHref> - <Anchor component="a">{path}</Anchor> - </Link> - )); + const breadcrumbs = useMemo( + () => + asPathWithoutQueryAndAnchor.split('/').map((path, idx, original) => ( + <Link key={idx} href={original.slice(0, idx + 1).join('/')} passHref> + <Anchor component="a">{path}</Anchor> + </Link> + )), + [asPathWithoutQueryAndAnchor], + ); return ( <AppShell diff --git a/packages/website/src/components/TableOfContentItems.tsx b/packages/website/src/components/TableOfContentItems.tsx index 179c703aee2e..e0b65aeca829 100644 --- a/packages/website/src/components/TableOfContentItems.tsx +++ b/packages/website/src/components/TableOfContentItems.tsx @@ -1,4 +1,5 @@ import { createStyles, Group, Text, Box, Stack, ThemeIcon, useMantineColorScheme } from '@mantine/core'; +import { useMemo } from 'react'; import { VscListSelection, VscSymbolMethod, VscSymbolProperty } from 'react-icons/vsc'; import type { ApiClassJSON, ApiInterfaceJSON } from '~/DocModel/ApiNodeJSONEncoder'; @@ -36,34 +37,44 @@ export function TableOfContentItems({ const { colorScheme } = useMantineColorScheme(); const { classes } = useStyles(); - const propertyItems = properties.map((prop) => ( - <Box<'a'> key={prop.name} href={`#${prop.name}`} component="a" className={classes.link}> - <Group> - <Text sx={{ textOverflow: 'ellipsis', overflow: 'hidden' }} className="line-clamp-1"> - {prop.name} - </Text> - </Group> - </Box> - )); + const propertyItems = useMemo( + () => + properties.map((prop) => ( + <Box<'a'> key={prop.name} href={`#${prop.name}`} component="a" className={classes.link}> + <Group> + <Text sx={{ textOverflow: 'ellipsis', overflow: 'hidden' }} className="line-clamp-1"> + {prop.name} + </Text> + </Group> + </Box> + )), + [properties], + ); - const methodItems = methods.map((member) => { - const key = `${member.name}${member.overloadIndex && member.overloadIndex > 1 ? `:${member.overloadIndex}` : ''}`; + const methodItems = useMemo( + () => + methods.map((member) => { + const key = `${member.name}${ + member.overloadIndex && member.overloadIndex > 1 ? `:${member.overloadIndex}` : '' + }`; - return ( - <Box<'a'> key={key} component="a" href={`#${key}`} className={classes.link}> - <Group> - <Text sx={{ textOverflow: 'ellipsis', overflow: 'hidden' }} className="line-clamp-1"> - {member.name} - </Text> - {member.overloadIndex && member.overloadIndex > 1 ? ( - <Text size="xs" color="dimmed"> - {member.overloadIndex} - </Text> - ) : null} - </Group> - </Box> - ); - }); + return ( + <Box<'a'> key={key} component="a" href={`#${key}`} className={classes.link}> + <Group> + <Text sx={{ textOverflow: 'ellipsis', overflow: 'hidden' }} className="line-clamp-1"> + {member.name} + </Text> + {member.overloadIndex && member.overloadIndex > 1 ? ( + <Text size="xs" color="dimmed"> + {member.overloadIndex} + </Text> + ) : null} + </Group> + </Box> + ); + }), + [methods], + ); return ( <Box sx={{ wordBreak: 'break-all' }} pb="xl"> diff --git a/packages/website/src/components/tsdoc/TSDoc.tsx b/packages/website/src/components/tsdoc/TSDoc.tsx index 97415d4e21c5..f9dc5336b9cb 100644 --- a/packages/website/src/components/tsdoc/TSDoc.tsx +++ b/packages/website/src/components/tsdoc/TSDoc.tsx @@ -1,7 +1,7 @@ import { Anchor, Box, Code, Text, useMantineColorScheme } from '@mantine/core'; import { DocNodeKind, StandardTags } from '@microsoft/tsdoc'; import Link from 'next/link'; -import { Fragment, type ReactNode } from 'react'; +import { Fragment, useCallback, type ReactNode } from 'react'; import { PrismAsyncLight as SyntaxHighlighter } from 'react-syntax-highlighter'; import { vscDarkPlus, ghcolors } from 'react-syntax-highlighter/dist/cjs/styles/prism'; import { BlockComment } from './BlockComment'; @@ -16,105 +16,108 @@ import type { DocCommentJSON } from '~/DocModel/comment/RootComment'; export function TSDoc({ node }: { node: AnyDocNodeJSON }): JSX.Element { const { colorScheme } = useMantineColorScheme(); - let numberOfExamples = 0; - let exampleIndex = 0; + const createNode = useCallback( + (node: AnyDocNodeJSON, idx?: number): ReactNode => { + let numberOfExamples = 0; + let exampleIndex = 0; - const createNode = (node: AnyDocNodeJSON, idx?: number): ReactNode => { - switch (node.kind) { - case DocNodeKind.PlainText: - return ( - <Text key={idx} span style={{ wordBreak: 'break-word' }}> - {(node as DocPlainTextJSON).text} - </Text> - ); - case DocNodeKind.Paragraph: - return ( - <Text key={idx} inline style={{ wordBreak: 'break-word' }}> - {(node as DocNodeContainerJSON).nodes.map((node, idx) => createNode(node, idx))} - </Text> - ); - case DocNodeKind.SoftBreak: - return <Fragment key={idx} />; - case DocNodeKind.LinkTag: { - const { codeDestination, urlDestination, text } = node as DocLinkTagJSON; + switch (node.kind) { + case DocNodeKind.PlainText: + return ( + <Text key={idx} span style={{ wordBreak: 'break-word' }}> + {(node as DocPlainTextJSON).text} + </Text> + ); + case DocNodeKind.Paragraph: + return ( + <Text key={idx} inline style={{ wordBreak: 'break-word' }}> + {(node as DocNodeContainerJSON).nodes.map((node, idx) => createNode(node, idx))} + </Text> + ); + case DocNodeKind.SoftBreak: + return <Fragment key={idx} />; + case DocNodeKind.LinkTag: { + const { codeDestination, urlDestination, text } = node as DocLinkTagJSON; + + if (codeDestination) { + return ( + <Link key={idx} href={codeDestination.path} passHref> + <Anchor component="a" className="font-mono"> + {text ?? codeDestination.name} + </Anchor> + </Link> + ); + } - if (codeDestination) { + if (urlDestination) { + return ( + <Link key={idx} href={urlDestination} passHref> + <Anchor component="a" className="font-mono"> + {text ?? urlDestination} + </Anchor> + </Link> + ); + } + + return null; + } + case DocNodeKind.CodeSpan: { + const { code } = node as DocFencedCodeJSON; return ( - <Link key={idx} href={codeDestination.path} passHref> - <Anchor component="a" className="font-mono"> - {text ?? codeDestination.name} - </Anchor> - </Link> + <Code key={idx} sx={{ display: 'inline' }} className="text-sm font-mono"> + {code} + </Code> ); } - - if (urlDestination) { + case DocNodeKind.FencedCode: { + const { language, code } = node as DocFencedCodeJSON; return ( - <Link key={idx} href={urlDestination} passHref> - <Anchor component="a" className="font-mono"> - {text ?? urlDestination} - </Anchor> - </Link> + <SyntaxHighlighter + key={idx} + wrapLines + wrapLongLines + language={language} + style={colorScheme === 'dark' ? vscDarkPlus : ghcolors} + codeTagProps={{ style: { fontFamily: 'JetBrains Mono' } }} + > + {code} + </SyntaxHighlighter> ); } + case DocNodeKind.ParamBlock: + case DocNodeKind.Block: { + const { tag } = node as DocBlockJSON; - return null; - } - case DocNodeKind.CodeSpan: { - const { code } = node as DocFencedCodeJSON; - return ( - <Code key={idx} sx={{ display: 'inline' }} className="text-sm font-mono"> - {code} - </Code> - ); - } - case DocNodeKind.FencedCode: { - const { language, code } = node as DocFencedCodeJSON; - return ( - <SyntaxHighlighter - key={idx} - wrapLines - wrapLongLines - language={language} - style={colorScheme === 'dark' ? vscDarkPlus : ghcolors} - codeTagProps={{ style: { fontFamily: 'JetBrains Mono' } }} - > - {code} - </SyntaxHighlighter> - ); - } - case DocNodeKind.ParamBlock: - case DocNodeKind.Block: { - const { tag } = node as DocBlockJSON; - - if (tag.tagName.toUpperCase() === StandardTags.example.tagNameWithUpperCase) { - exampleIndex++; - } + if (tag.tagName.toUpperCase() === StandardTags.example.tagNameWithUpperCase) { + exampleIndex++; + } - const index = numberOfExamples > 1 ? exampleIndex : undefined; + const index = numberOfExamples > 1 ? exampleIndex : undefined; - return ( - <BlockComment tagName={tag.tagName} key={idx} index={index}> - {(node as DocBlockJSON).content.map((node, idx) => createNode(node, idx))} - </BlockComment> - ); - } - case DocNodeKind.Comment: { - const comment = node as DocCommentJSON; - // Cheat a bit by finding out how many comments we have beforehand... - numberOfExamples = comment.customBlocks.filter( - (block) => block.tag.tagName.toUpperCase() === StandardTags.example.tagNameWithUpperCase, - ).length; + return ( + <BlockComment tagName={tag.tagName} key={idx} index={index}> + {(node as DocBlockJSON).content.map((node, idx) => createNode(node, idx))} + </BlockComment> + ); + } + case DocNodeKind.Comment: { + const comment = node as DocCommentJSON; + // Cheat a bit by finding out how many comments we have beforehand... + numberOfExamples = comment.customBlocks.filter( + (block) => block.tag.tagName.toUpperCase() === StandardTags.example.tagNameWithUpperCase, + ).length; - return <Box key={idx}>{comment.customBlocks.map((node, idx) => createNode(node, idx))}</Box>; + return <Box key={idx}>{comment.customBlocks.map((node, idx) => createNode(node, idx))}</Box>; + } + default: + console.log(`Captured unknown node kind: ${node.kind}`); + break; } - default: - console.log(`Captured unknown node kind: ${node.kind}`); - break; - } - return null; - }; + return null; + }, + [colorScheme], + ); return ( <Box> From 249ba0a9a6a19e9685869f87bf935f3a0f6d55e3 Mon Sep 17 00:00:00 2001 From: iCrawl <buechler.noel@outlook.com> Date: Tue, 23 Aug 2022 21:31:38 +0200 Subject: [PATCH 100/155] refactor: contrast & colors --- .../website/src/components/DocContainer.tsx | 2 +- .../website/src/components/MethodItem.tsx | 2 +- .../website/src/components/SidebarItems.tsx | 2 ++ .../website/src/components/SidebarLayout.tsx | 30 ++++++++++++++----- .../src/components/TableOfContentItems.tsx | 8 ++--- packages/website/src/pages/_app.tsx | 20 ++++++------- 6 files changed, 40 insertions(+), 24 deletions(-) diff --git a/packages/website/src/components/DocContainer.tsx b/packages/website/src/components/DocContainer.tsx index 9d475a08c3e5..2559392709bf 100644 --- a/packages/website/src/components/DocContainer.tsx +++ b/packages/website/src/components/DocContainer.tsx @@ -121,7 +121,7 @@ export function DocContainer({ ) : null} {implementsTokens?.length ? ( - <Group noWrap> + <Group pb="xs" noWrap> <Title order={3} ml="xs"> Implements diff --git a/packages/website/src/components/MethodItem.tsx b/packages/website/src/components/MethodItem.tsx index 32a26df37c08..93698a217c5f 100644 --- a/packages/website/src/components/MethodItem.tsx +++ b/packages/website/src/components/MethodItem.tsx @@ -43,7 +43,7 @@ export function MethodItem({ data }: { data: ApiMethodJSON | ApiMethodSignatureJ - + diff --git a/packages/website/src/components/SidebarItems.tsx b/packages/website/src/components/SidebarItems.tsx index b25ed46ccf59..7396f0f212b8 100644 --- a/packages/website/src/components/SidebarItems.tsx +++ b/packages/website/src/components/SidebarItems.tsx @@ -67,7 +67,9 @@ function resolveIcon(item: keyof GroupedMembers) { } const useStyles = createStyles((theme) => ({ + // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment link: { + ...theme.fn.focusStyles(), fontWeight: 500, display: 'block', width: 'unset', diff --git a/packages/website/src/components/SidebarLayout.tsx b/packages/website/src/components/SidebarLayout.tsx index fc63311b737b..a7d30461e878 100644 --- a/packages/website/src/components/SidebarLayout.tsx +++ b/packages/website/src/components/SidebarLayout.tsx @@ -130,11 +130,18 @@ const useStyles = createStyles( gap: 50, }, }, + + link: { color: theme.colorScheme === 'dark' ? theme.white : theme.black }, }), ); const packageMenuItems = PACKAGES.map((pkg) => ( - + ({ color: theme.colorScheme === 'dark' ? theme.white : theme.black })} + > {pkg} )); @@ -173,7 +180,12 @@ export function SidebarLayout({ const versionMenuItems = useMemo( () => versions?.map((item) => ( - + ({ color: theme.colorScheme === 'dark' ? theme.white : theme.black })} + > {item} )) ?? [], @@ -184,7 +196,9 @@ export function SidebarLayout({ () => asPathWithoutQueryAndAnchor.split('/').map((path, idx, original) => ( - {path} + ({ color: theme.colorScheme === 'dark' ? theme.white : theme.black })}> + {path} + )), [asPathWithoutQueryAndAnchor], @@ -358,12 +372,12 @@ export function SidebarLayout({ Community - + Discord - + GitHub discussions @@ -373,17 +387,17 @@ export function SidebarLayout({ Project - + discord.js - + discord.js guide - + discord-api-types diff --git a/packages/website/src/components/TableOfContentItems.tsx b/packages/website/src/components/TableOfContentItems.tsx index e0b65aeca829..266e59e233dc 100644 --- a/packages/website/src/components/TableOfContentItems.tsx +++ b/packages/website/src/components/TableOfContentItems.tsx @@ -7,18 +7,18 @@ const useStyles = createStyles((theme) => ({ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment link: { ...theme.fn.focusStyles(), + fontWeight: 500, display: 'block', textDecoration: 'none', color: theme.colorScheme === 'dark' ? theme.colors.dark![0] : theme.colors.gray![7], lineHeight: 1.2, fontSize: theme.fontSizes.sm, - padding: theme.spacing.xs, + padding: 5, paddingLeft: theme.spacing.md, marginLeft: 14, borderTopRightRadius: theme.radius.sm, borderBottomRightRadius: theme.radius.sm, borderLeft: `1px solid ${theme.colorScheme === 'dark' ? theme.colors.dark![4] : theme.colors.gray![3]}`, - fontWeight: 500, '&:hover': { backgroundColor: theme.colorScheme === 'dark' ? theme.colors.dark![6] : theme.colors.gray![0], @@ -48,7 +48,7 @@ export function TableOfContentItems({ )), - [properties], + [properties, colorScheme], ); const methodItems = useMemo( @@ -73,7 +73,7 @@ export function TableOfContentItems({ ); }), - [methods], + [methods, colorScheme], ); return ( diff --git a/packages/website/src/pages/_app.tsx b/packages/website/src/pages/_app.tsx index 1034359757f5..b66b00d57096 100644 --- a/packages/website/src/pages/_app.tsx +++ b/packages/website/src/pages/_app.tsx @@ -93,16 +93,16 @@ export default function MyApp({ Component, pageProps }: AppProps) { colorScheme, colors: { blurple: [ - '#5865F2', - '#5865F2', - '#5865F2', - '#5865F2', - '#5865F2', - '#5865F2', - '#5865F2', - '#5865F2', - '#5865F2', - '#5865F2', + '#5865f2', + '#5865f2', + '#5865f2', + '#5865f2', + '#5865f2', + '#5865f2', + '#5865f2', + '#5865f2', + '#5865f2', + '#5865f2', ], }, primaryColor: 'blurple', From 204f4dd7c426e5825e7b39ab2f26456708490cb4 Mon Sep 17 00:00:00 2001 From: iCrawl Date: Tue, 23 Aug 2022 22:37:19 +0200 Subject: [PATCH 101/155] chore: some logging --- packages/website/src/pages/docs/[...slug].tsx | 5 ++++- .../website/src/pages/docs/packages/[package]/index.tsx | 7 ++++++- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/packages/website/src/pages/docs/[...slug].tsx b/packages/website/src/pages/docs/[...slug].tsx index 5b1212a06fd9..7eb1cff7c3b5 100644 --- a/packages/website/src/pages/docs/[...slug].tsx +++ b/packages/website/src/pages/docs/[...slug].tsx @@ -172,7 +172,10 @@ export const getStaticProps: GetStaticProps = async ({ params }) => { }, revalidate: 3600, }; - } catch { + } catch (e) { + const error = e as Error; + console.log(error); + return { notFound: true, }; diff --git a/packages/website/src/pages/docs/packages/[package]/index.tsx b/packages/website/src/pages/docs/packages/[package]/index.tsx index 61688371482c..bb4d10286cdd 100644 --- a/packages/website/src/pages/docs/packages/[package]/index.tsx +++ b/packages/website/src/pages/docs/packages/[package]/index.tsx @@ -42,6 +42,8 @@ export const getStaticProps: GetStaticProps = async ({ params }) => { const data: string[] = await res.json(); if (!data.length) { + console.log('No tags'); + return { notFound: true, }; @@ -56,7 +58,10 @@ export const getStaticProps: GetStaticProps = async ({ params }) => { }, revalidate: 3600, }; - } catch { + } catch (e) { + const error = e as Error; + console.log(error); + return { notFound: true, }; From b58e6a65ad671b0d21be41f57329c06464f795e7 Mon Sep 17 00:00:00 2001 From: iCrawl Date: Wed, 24 Aug 2022 05:23:03 +0200 Subject: [PATCH 102/155] fix: don't throw on not serializable kind --- packages/website/src/DocModel/ApiNodeJSONEncoder.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/website/src/DocModel/ApiNodeJSONEncoder.ts b/packages/website/src/DocModel/ApiNodeJSONEncoder.ts index a7a97dc0b058..433586b6ffa6 100644 --- a/packages/website/src/DocModel/ApiNodeJSONEncoder.ts +++ b/packages/website/src/DocModel/ApiNodeJSONEncoder.ts @@ -152,7 +152,8 @@ export interface ApiConstructorJSON extends ApiItemJSON, ApiParameterListJSON { export class ApiNodeJSONEncoder { public static encode(model: ApiModel, node: ApiItem, version: string) { if (!(node instanceof ApiDeclaredItem)) { - throw new Error(`Cannot serialize node of type ${node.kind}`); + console.log(`Cannot serialize node of type ${node.kind}`); + return undefined; } switch (node.kind) { @@ -169,7 +170,8 @@ export class ApiNodeJSONEncoder { case ApiItemKind.Variable: return this.encodeVariable(model, node as ApiVariable, version); default: - throw new Error(`Unknown API item kind: ${node.kind}`); + console.log(`Unknown API item kind: ${node.kind}`); + return undefined; } } From 5f093dde244bbaa63c13a423dd85b99ecb9a2564 Mon Sep 17 00:00:00 2001 From: iCrawl Date: Wed, 24 Aug 2022 05:36:10 +0200 Subject: [PATCH 103/155] chore: log errors as errors --- packages/website/src/pages/docs/[...slug].tsx | 2 +- packages/website/src/pages/docs/packages/[package]/index.tsx | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/website/src/pages/docs/[...slug].tsx b/packages/website/src/pages/docs/[...slug].tsx index 7eb1cff7c3b5..7f673afce832 100644 --- a/packages/website/src/pages/docs/[...slug].tsx +++ b/packages/website/src/pages/docs/[...slug].tsx @@ -174,7 +174,7 @@ export const getStaticProps: GetStaticProps = async ({ params }) => { }; } catch (e) { const error = e as Error; - console.log(error); + console.error(error); return { notFound: true, diff --git a/packages/website/src/pages/docs/packages/[package]/index.tsx b/packages/website/src/pages/docs/packages/[package]/index.tsx index bb4d10286cdd..d1671a3d5cb6 100644 --- a/packages/website/src/pages/docs/packages/[package]/index.tsx +++ b/packages/website/src/pages/docs/packages/[package]/index.tsx @@ -42,7 +42,7 @@ export const getStaticProps: GetStaticProps = async ({ params }) => { const data: string[] = await res.json(); if (!data.length) { - console.log('No tags'); + console.error('No tags'); return { notFound: true, @@ -60,7 +60,7 @@ export const getStaticProps: GetStaticProps = async ({ params }) => { }; } catch (e) { const error = e as Error; - console.log(error); + console.error(error); return { notFound: true, From 1d6b31b78d8791a30d44c56d019f4e06ee07d729 Mon Sep 17 00:00:00 2001 From: iCrawl Date: Wed, 24 Aug 2022 05:42:43 +0200 Subject: [PATCH 104/155] fix: revalidate on notFound --- packages/website/src/pages/docs/[...slug].tsx | 1 + packages/website/src/pages/docs/packages/[package]/index.tsx | 2 ++ 2 files changed, 3 insertions(+) diff --git a/packages/website/src/pages/docs/[...slug].tsx b/packages/website/src/pages/docs/[...slug].tsx index 7f673afce832..afa77a2fd4a0 100644 --- a/packages/website/src/pages/docs/[...slug].tsx +++ b/packages/website/src/pages/docs/[...slug].tsx @@ -178,6 +178,7 @@ export const getStaticProps: GetStaticProps = async ({ params }) => { return { notFound: true, + revalidate: 3600, }; } }; diff --git a/packages/website/src/pages/docs/packages/[package]/index.tsx b/packages/website/src/pages/docs/packages/[package]/index.tsx index d1671a3d5cb6..0ed923b9867d 100644 --- a/packages/website/src/pages/docs/packages/[package]/index.tsx +++ b/packages/website/src/pages/docs/packages/[package]/index.tsx @@ -46,6 +46,7 @@ export const getStaticProps: GetStaticProps = async ({ params }) => { return { notFound: true, + revalidate: 3600, }; } @@ -64,6 +65,7 @@ export const getStaticProps: GetStaticProps = async ({ params }) => { return { notFound: true, + revalidate: 3600, }; } }; From 13baf75cae395353f0528804ff0d71468f21daa9 Mon Sep 17 00:00:00 2001 From: iCrawl Date: Wed, 24 Aug 2022 06:09:39 +0200 Subject: [PATCH 105/155] chore: return error --- packages/website/src/pages/docs/[...slug].tsx | 4 +++- .../website/src/pages/docs/packages/[package]/index.tsx | 8 ++++++-- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/packages/website/src/pages/docs/[...slug].tsx b/packages/website/src/pages/docs/[...slug].tsx index afa77a2fd4a0..31ce9d3e5d6c 100644 --- a/packages/website/src/pages/docs/[...slug].tsx +++ b/packages/website/src/pages/docs/[...slug].tsx @@ -177,7 +177,9 @@ export const getStaticProps: GetStaticProps = async ({ params }) => { console.error(error); return { - notFound: true, + props: { + error: e, + }, revalidate: 3600, }; } diff --git a/packages/website/src/pages/docs/packages/[package]/index.tsx b/packages/website/src/pages/docs/packages/[package]/index.tsx index 0ed923b9867d..27f355e1142b 100644 --- a/packages/website/src/pages/docs/packages/[package]/index.tsx +++ b/packages/website/src/pages/docs/packages/[package]/index.tsx @@ -45,7 +45,9 @@ export const getStaticProps: GetStaticProps = async ({ params }) => { console.error('No tags'); return { - notFound: true, + props: { + error: 'No tags', + }, revalidate: 3600, }; } @@ -64,7 +66,9 @@ export const getStaticProps: GetStaticProps = async ({ params }) => { console.error(error); return { - notFound: true, + props: { + error: e, + }, revalidate: 3600, }; } From 682e0e1802720ead2e940dbd1723239c691681cb Mon Sep 17 00:00:00 2001 From: iCrawl Date: Fri, 26 Aug 2022 12:00:25 +0200 Subject: [PATCH 106/155] fix: don't prefetch as links enter viewport --- .../website/src/components/HyperlinkedText.tsx | 2 +- .../website/src/components/InheritanceText.tsx | 2 +- packages/website/src/components/SidebarItems.tsx | 2 +- .../website/src/components/SidebarLayout.tsx | 16 ++++++++-------- packages/website/src/components/tsdoc/TSDoc.tsx | 4 ++-- packages/website/src/pages/404.tsx | 2 +- .../src/pages/docs/packages/[package]/index.tsx | 2 +- .../website/src/pages/docs/packages/index.tsx | 2 +- packages/website/src/pages/index.tsx | 6 +++--- 9 files changed, 19 insertions(+), 19 deletions(-) diff --git a/packages/website/src/components/HyperlinkedText.tsx b/packages/website/src/components/HyperlinkedText.tsx index 28fdd135a50f..9991d304ef0d 100644 --- a/packages/website/src/components/HyperlinkedText.tsx +++ b/packages/website/src/components/HyperlinkedText.tsx @@ -15,7 +15,7 @@ export function HyperlinkedText({ tokens }: { tokens: TokenDocumentation[] }) { {tokens.map((token, idx) => { if (token.path) { return ( - + {token.text} diff --git a/packages/website/src/components/InheritanceText.tsx b/packages/website/src/components/InheritanceText.tsx index fe1eb035fe2e..f7e964890139 100644 --- a/packages/website/src/components/InheritanceText.tsx +++ b/packages/website/src/components/InheritanceText.tsx @@ -6,7 +6,7 @@ export function InheritanceText({ data }: { data: InheritanceData }) { return ( {'Inherited from '} - + {data.parentName} diff --git a/packages/website/src/components/SidebarItems.tsx b/packages/website/src/components/SidebarItems.tsx index 7396f0f212b8..a0bd16bb4eeb 100644 --- a/packages/website/src/components/SidebarItems.tsx +++ b/packages/website/src/components/SidebarItems.tsx @@ -116,7 +116,7 @@ export function SidebarItems({ .map((group, idx) => (
{groupItems[group].map((member, i) => ( - + asPathWithoutQueryAndAnchor.split('/').map((path, idx, original) => ( - + ({ color: theme.colorScheme === 'dark' ? theme.white : theme.black })}> {path} @@ -317,7 +317,7 @@ export function SidebarLayout({ - + - + Community - + Discord - + GitHub discussions @@ -386,17 +386,17 @@ export function SidebarLayout({ Project - + discord.js - + discord.js guide - + discord-api-types diff --git a/packages/website/src/components/tsdoc/TSDoc.tsx b/packages/website/src/components/tsdoc/TSDoc.tsx index f9dc5336b9cb..e8207b525a03 100644 --- a/packages/website/src/components/tsdoc/TSDoc.tsx +++ b/packages/website/src/components/tsdoc/TSDoc.tsx @@ -41,7 +41,7 @@ export function TSDoc({ node }: { node: AnyDocNodeJSON }): JSX.Element { if (codeDestination) { return ( - + {text ?? codeDestination.name} @@ -51,7 +51,7 @@ export function TSDoc({ node }: { node: AnyDocNodeJSON }): JSX.Element { if (urlDestination) { return ( - + {text ?? urlDestination} diff --git a/packages/website/src/pages/404.tsx b/packages/website/src/pages/404.tsx index 16cbc0657ee2..896cc214aa72 100644 --- a/packages/website/src/pages/404.tsx +++ b/packages/website/src/pages/404.tsx @@ -29,7 +29,7 @@ export default function FourOhFourPage() { 404 Not found. - + diff --git a/packages/website/src/pages/docs/packages/[package]/index.tsx b/packages/website/src/pages/docs/packages/[package]/index.tsx index 27f355e1142b..668a6f86ba88 100644 --- a/packages/website/src/pages/docs/packages/[package]/index.tsx +++ b/packages/website/src/pages/docs/packages/[package]/index.tsx @@ -107,7 +107,7 @@ export default function VersionsRoute(props: Partial & { error?: s Select a version: {props.data?.versions.map((version) => ( - + diff --git a/packages/website/src/pages/docs/packages/index.tsx b/packages/website/src/pages/docs/packages/index.tsx index bc94d76a2475..1412800b07a7 100644 --- a/packages/website/src/pages/docs/packages/index.tsx +++ b/packages/website/src/pages/docs/packages/index.tsx @@ -43,7 +43,7 @@ export default function PackagesRoute() { Select a package: {PACKAGES.map((pkg) => ( - + diff --git a/packages/website/src/pages/index.tsx b/packages/website/src/pages/index.tsx index 5676322aa326..cd4ffa41c016 100644 --- a/packages/website/src/pages/index.tsx +++ b/packages/website/src/pages/index.tsx @@ -76,12 +76,12 @@ export default function IndexRoute() { - + - + @@ -116,7 +116,7 @@ await client.login('token');`}
- + Date: Mon, 29 Aug 2022 18:04:37 +0200 Subject: [PATCH 107/155] chore(github): resolved typos in issue templates (#8564) --- .github/ISSUE_TEMPLATE/bug_report.yml | 2 +- .github/ISSUE_TEMPLATE/feature_request.yml | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/ISSUE_TEMPLATE/bug_report.yml b/.github/ISSUE_TEMPLATE/bug_report.yml index 754d0788bdf2..f800fbb26f76 100644 --- a/.github/ISSUE_TEMPLATE/bug_report.yml +++ b/.github/ISSUE_TEMPLATE/bug_report.yml @@ -52,7 +52,7 @@ body: id: djs-version attributes: label: Package version - description: Which version of are you using? Run `npm list ` in your project directory and paste the output. + description: Which version of the package are you using? Run `npm list ` in your project directory and paste the output. placeholder: We no longer support version 12 or earlier of discord.js validations: required: true diff --git a/.github/ISSUE_TEMPLATE/feature_request.yml b/.github/ISSUE_TEMPLATE/feature_request.yml index e011dda35c4f..c49dd9d2ae24 100644 --- a/.github/ISSUE_TEMPLATE/feature_request.yml +++ b/.github/ISSUE_TEMPLATE/feature_request.yml @@ -5,7 +5,7 @@ body: - type: markdown attributes: value: | - We can only implement features that Discord publishes, documents and merges into the Discord API documentation. + We can only implement features that Discord publishes, documents, and merges into the Discord API documentation. We do not implement unreleased features. Use Discord for questions: https://discord.gg/djs - type: dropdown From 40324574ebea9894cadcc967e0db0e4e21d62768 Mon Sep 17 00:00:00 2001 From: Suneet Tipirneni <77477100+suneettipirneni@users.noreply.github.com> Date: Mon, 29 Aug 2022 12:05:30 -0400 Subject: [PATCH 108/155] docs: remove xml tag from collection#find (#8550) --- packages/collection/src/collection.ts | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/collection/src/collection.ts b/packages/collection/src/collection.ts index 911ab1a6b55d..ea2fb02d6eb6 100644 --- a/packages/collection/src/collection.ts +++ b/packages/collection/src/collection.ts @@ -227,9 +227,9 @@ export class Collection extends Map { /** * Searches for a single item where the given function returns a truthy value. This behaves like * {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/find | Array.find()}. - * All collections used in Discord.js are mapped using their `id` property, and if you want to find by id you + * All collections used in Discord.js are mapped using their `id` property, and if you want to find by id you * should use the `get` method. See - * {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map/get | MDN} for details. + * {@link https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Map/get | MDN} for details. * * @param fn - The function to test with (should return boolean) * @param thisArg - Value to use as `this` when executing function From d5dcddd35079e81b2df7cd6d29dd646942d7bf80 Mon Sep 17 00:00:00 2001 From: Suneet Tipirneni <77477100+suneettipirneni@users.noreply.github.com> Date: Mon, 29 Aug 2022 15:41:51 -0400 Subject: [PATCH 109/155] feat: add util package for generating search indices (#8571) --- packages/api-extractor-utils/.eslintrc.json | 7 ++ packages/api-extractor-utils/.gitignore | 27 ++++++ packages/api-extractor-utils/.lintstagedrc.js | 1 + packages/api-extractor-utils/.prettierignore | 8 ++ packages/api-extractor-utils/package.json | 65 +++++++++++++ .../src}/ApiNodeJSONEncoder.ts | 24 ++--- .../src/TypeParameterJSONEncoder.ts} | 6 +- packages/api-extractor-utils/src/index.ts | 4 + .../src/parse.ts} | 4 +- .../src/tsdoc}/CommentBlock.ts | 0 .../src/tsdoc}/CommentBlockTag.ts | 0 .../src/tsdoc}/CommentCodeSpan.ts | 0 .../src/tsdoc}/CommentNode.ts | 0 .../src/tsdoc}/CommentNodeContainer.ts | 0 .../src/tsdoc}/FencedCodeCommentNode.ts | 0 .../src/tsdoc}/LinkTagCommentNode.ts | 6 +- .../src/tsdoc}/ParamBlock.ts | 0 .../src/tsdoc}/PlainTextCommentNode.ts | 0 .../src/tsdoc}/RootComment.ts | 0 .../src/tsdoc}/index.ts | 11 +++ .../api-extractor-utils/tsconfig.eslint.json | 20 ++++ packages/api-extractor-utils/tsconfig.json | 8 ++ packages/scripts/.gitignore | 2 + packages/scripts/package.json | 4 +- packages/scripts/src/generateIndex.ts | 91 +++++++++++++++++++ packages/scripts/src/index.ts | 2 +- packages/website/package.json | 1 + packages/website/src/DocModel/Visibility.ts | 4 - .../website/src/components/CodeListing.tsx | 4 +- .../website/src/components/DocContainer.tsx | 12 ++- .../src/components/HyperlinkedText.tsx | 2 +- .../src/components/InheritanceText.tsx | 2 +- .../website/src/components/MethodItem.tsx | 9 +- .../website/src/components/MethodList.tsx | 2 +- .../website/src/components/ParameterTable.tsx | 2 +- .../website/src/components/PropertyList.tsx | 2 +- packages/website/src/components/Sections.tsx | 8 +- .../website/src/components/SidebarLayout.tsx | 3 +- .../src/components/TableOfContentItems.tsx | 2 +- .../website/src/components/TypeParamTable.tsx | 2 +- .../website/src/components/model/Class.tsx | 2 +- .../website/src/components/model/Enum.tsx | 2 +- .../website/src/components/model/Function.tsx | 2 +- .../src/components/model/Interface.tsx | 2 +- .../src/components/model/TypeAlias.tsx | 2 +- .../website/src/components/model/Variable.tsx | 2 +- .../website/src/components/tsdoc/TSDoc.tsx | 16 ++-- packages/website/src/contexts/member.tsx | 2 +- packages/website/src/pages/docs/[...slug].tsx | 25 ++--- .../website/src/util/api-extractor.server.ts | 1 - packages/website/src/util/api-model.server.ts | 7 +- packages/website/src/util/model.server.ts | 3 +- .../website/src/util/tsdoc-config.server.ts | 1 - packages/website/src/util/tsdoc.server.tsx | 1 - yarn.lock | 64 ++++++++++++- 55 files changed, 384 insertions(+), 93 deletions(-) create mode 100644 packages/api-extractor-utils/.eslintrc.json create mode 100644 packages/api-extractor-utils/.gitignore create mode 100644 packages/api-extractor-utils/.lintstagedrc.js create mode 100644 packages/api-extractor-utils/.prettierignore create mode 100644 packages/api-extractor-utils/package.json rename packages/{website/src/DocModel => api-extractor-utils/src}/ApiNodeJSONEncoder.ts (94%) rename packages/{website/src/DocModel/TypeParameterMixin.ts => api-extractor-utils/src/TypeParameterJSONEncoder.ts} (80%) create mode 100644 packages/api-extractor-utils/src/index.ts rename packages/{website/src/util/parse.server.ts => api-extractor-utils/src/parse.ts} (97%) rename packages/{website/src/DocModel/comment => api-extractor-utils/src/tsdoc}/CommentBlock.ts (100%) rename packages/{website/src/DocModel/comment => api-extractor-utils/src/tsdoc}/CommentBlockTag.ts (100%) rename packages/{website/src/DocModel/comment => api-extractor-utils/src/tsdoc}/CommentCodeSpan.ts (100%) rename packages/{website/src/DocModel/comment => api-extractor-utils/src/tsdoc}/CommentNode.ts (100%) rename packages/{website/src/DocModel/comment => api-extractor-utils/src/tsdoc}/CommentNodeContainer.ts (100%) rename packages/{website/src/DocModel/comment => api-extractor-utils/src/tsdoc}/FencedCodeCommentNode.ts (100%) rename packages/{website/src/DocModel/comment => api-extractor-utils/src/tsdoc}/LinkTagCommentNode.ts (88%) rename packages/{website/src/DocModel/comment => api-extractor-utils/src/tsdoc}/ParamBlock.ts (100%) rename packages/{website/src/DocModel/comment => api-extractor-utils/src/tsdoc}/PlainTextCommentNode.ts (100%) rename packages/{website/src/DocModel/comment => api-extractor-utils/src/tsdoc}/RootComment.ts (100%) rename packages/{website/src/DocModel/comment => api-extractor-utils/src/tsdoc}/index.ts (82%) create mode 100644 packages/api-extractor-utils/tsconfig.eslint.json create mode 100644 packages/api-extractor-utils/tsconfig.json create mode 100644 packages/scripts/src/generateIndex.ts delete mode 100644 packages/website/src/DocModel/Visibility.ts delete mode 100644 packages/website/src/util/api-extractor.server.ts delete mode 100644 packages/website/src/util/tsdoc-config.server.ts delete mode 100644 packages/website/src/util/tsdoc.server.tsx diff --git a/packages/api-extractor-utils/.eslintrc.json b/packages/api-extractor-utils/.eslintrc.json new file mode 100644 index 000000000000..6115ee5c022e --- /dev/null +++ b/packages/api-extractor-utils/.eslintrc.json @@ -0,0 +1,7 @@ +{ + "extends": "../../.eslintrc.json", + "plugins": ["eslint-plugin-tsdoc"], + "rules": { + "tsdoc/syntax": "warn" + } +} diff --git a/packages/api-extractor-utils/.gitignore b/packages/api-extractor-utils/.gitignore new file mode 100644 index 000000000000..86b93e929ae6 --- /dev/null +++ b/packages/api-extractor-utils/.gitignore @@ -0,0 +1,27 @@ +# Packages +node_modules/ + +# Log files +logs/ +*.log +npm-debug.log* + +# Runtime data +pids +*.pid +*.seed + +# Env +.env + +# Dist +dist/ +typings/ +docs/**/* +!docs/index.json +!docs/README.md + +# Miscellaneous +.tmp/ +coverage/ +tsconfig.tsbuildinfo diff --git a/packages/api-extractor-utils/.lintstagedrc.js b/packages/api-extractor-utils/.lintstagedrc.js new file mode 100644 index 000000000000..dc17706a55ac --- /dev/null +++ b/packages/api-extractor-utils/.lintstagedrc.js @@ -0,0 +1 @@ +module.exports = require('../../.lintstagedrc.json'); diff --git a/packages/api-extractor-utils/.prettierignore b/packages/api-extractor-utils/.prettierignore new file mode 100644 index 000000000000..8b94c7d45e03 --- /dev/null +++ b/packages/api-extractor-utils/.prettierignore @@ -0,0 +1,8 @@ +# Autogenerated +CHANGELOG.md +.turbo +dist/ +docs/**/* +!docs/index.yml +!docs/README.md +coverage/ \ No newline at end of file diff --git a/packages/api-extractor-utils/package.json b/packages/api-extractor-utils/package.json new file mode 100644 index 000000000000..5f14d291e458 --- /dev/null +++ b/packages/api-extractor-utils/package.json @@ -0,0 +1,65 @@ +{ + "name": "@discordjs/api-extractor-utils", + "version": "1.0.0", + "description": "Utilities for api-extractor", + "private": true, + "scripts": { + "build": "unbuild", + "lint": "prettier --check . && TIMING=1 eslint src --ext mjs,js,ts", + "format": "prettier --write . && TIMING=1 eslint src --ext mjs,js,ts --fix", + "fmt": "yarn format" + }, + "main": "./dist/index.cjs", + "module": "./dist/index.mjs", + "types": "./dist/index.d.ts", + "exports": { + "import": "./dist/index.mjs", + "require": "./dist/index.cjs", + "types": "./dist/index.d.ts" + }, + "directories": { + "lib": "src", + "test": "__tests__" + }, + "files": [ + "dist" + ], + "contributors": [ + "Suneet Tipirneni " + ], + "license": "Apache-2.0", + "repository": { + "type": "git", + "url": "git+https://github.com/discordjs/discord.js.git" + }, + "bugs": { + "url": "https://github.com/discordjs/discord.js/issues" + }, + "homepage": "https://discord.js.org", + "dependencies": { + "@microsoft/api-extractor-model": "^7.23.3", + "@microsoft/tsdoc": "^0.14.1" + }, + "devDependencies": { + "@favware/cliff-jumper": "^1.8.7", + "@types/node": "^16.11.54", + "@typescript-eslint/eslint-plugin": "^5.34.0", + "@typescript-eslint/parser": "^5.34.0", + "eslint": "^8.22.0", + "eslint-config-marine": "^9.4.1", + "eslint-config-prettier": "^8.5.0", + "eslint-import-resolver-typescript": "^3.5.0", + "eslint-plugin-import": "^2.26.0", + "eslint-plugin-tsdoc": "^0.2.16", + "prettier": "^2.7.1", + "rollup-plugin-typescript2": "^0.33.0", + "typescript": "^4.7.4", + "unbuild": "^0.8.9" + }, + "engines": { + "node": ">=16.9.0" + }, + "publishConfig": { + "access": "public" + } +} diff --git a/packages/website/src/DocModel/ApiNodeJSONEncoder.ts b/packages/api-extractor-utils/src/ApiNodeJSONEncoder.ts similarity index 94% rename from packages/website/src/DocModel/ApiNodeJSONEncoder.ts rename to packages/api-extractor-utils/src/ApiNodeJSONEncoder.ts index 433586b6ffa6..cd0923b850ee 100644 --- a/packages/website/src/DocModel/ApiNodeJSONEncoder.ts +++ b/packages/api-extractor-utils/src/ApiNodeJSONEncoder.ts @@ -18,20 +18,12 @@ import { type ApiConstructor, type ApiItemContainerMixin, } from '@microsoft/api-extractor-model'; -import { generateTypeParamData } from './TypeParameterMixin'; -import { Visibility } from './Visibility'; -import { createCommentNode } from './comment'; -import type { DocBlockJSON } from './comment/CommentBlock'; -import type { AnyDocNodeJSON } from './comment/CommentNode'; -import { type DocNodeContainerJSON, nodeContainer } from './comment/CommentNodeContainer'; -import { - generatePath, - genParameter, - genReference, - genToken, - resolveName, - type TokenDocumentation, -} from '~/util/parse.server'; +import { generateTypeParamData } from './TypeParameterJSONEncoder'; +import { type TokenDocumentation, resolveName, genReference, genToken, genParameter, generatePath } from './parse'; +import { createCommentNode } from './tsdoc'; +import type { DocBlockJSON } from './tsdoc/CommentBlock'; +import type { AnyDocNodeJSON } from './tsdoc/CommentNode'; +import { type DocNodeContainerJSON, nodeContainer } from './tsdoc/CommentNodeContainer'; export interface ReferenceData { name: string; @@ -96,7 +88,7 @@ export interface ApiMethodSignatureJSON export interface ApiMethodJSON extends ApiMethodSignatureJSON { static: boolean; - visibility: Visibility; + protected: boolean; } export interface ApiParameterJSON { @@ -293,7 +285,7 @@ export class ApiNodeJSONEncoder { return { ...this.encodeMethodSignature(model, item, parent, version), static: item.isStatic, - visibility: item.isProtected ? Visibility.Protected : Visibility.Public, + protected: item.isProtected, }; } diff --git a/packages/website/src/DocModel/TypeParameterMixin.ts b/packages/api-extractor-utils/src/TypeParameterJSONEncoder.ts similarity index 80% rename from packages/website/src/DocModel/TypeParameterMixin.ts rename to packages/api-extractor-utils/src/TypeParameterJSONEncoder.ts index 45f90a254259..43a028786936 100644 --- a/packages/website/src/DocModel/TypeParameterMixin.ts +++ b/packages/api-extractor-utils/src/TypeParameterJSONEncoder.ts @@ -1,6 +1,6 @@ -import type { ApiItem, ApiModel, TypeParameter } from '@microsoft/api-extractor-model'; -import { block, type DocBlockJSON } from './comment/CommentBlock'; -import { genToken, type TokenDocumentation } from '~/util/parse.server'; +import type { TypeParameter, ApiModel, ApiItem } from '@microsoft/api-extractor-model'; +import { type TokenDocumentation, genToken } from './parse'; +import { type DocBlockJSON, block } from './tsdoc/CommentBlock'; export interface TypeParameterData { name: string; diff --git a/packages/api-extractor-utils/src/index.ts b/packages/api-extractor-utils/src/index.ts new file mode 100644 index 000000000000..833d0a0f5e86 --- /dev/null +++ b/packages/api-extractor-utils/src/index.ts @@ -0,0 +1,4 @@ +export * from './ApiNodeJSONEncoder'; +export * from './parse'; +export * from './tsdoc'; +export * from './TypeParameterJSONEncoder'; diff --git a/packages/website/src/util/parse.server.ts b/packages/api-extractor-utils/src/parse.ts similarity index 97% rename from packages/website/src/util/parse.server.ts rename to packages/api-extractor-utils/src/parse.ts index 5b982c036273..c1558843fc21 100644 --- a/packages/website/src/util/parse.server.ts +++ b/packages/api-extractor-utils/src/parse.ts @@ -14,8 +14,8 @@ import { } from '@microsoft/api-extractor-model'; import type { DocNode, DocParagraph, DocPlainText } from '@microsoft/tsdoc'; import { type Meaning, ModuleSource } from '@microsoft/tsdoc/lib-commonjs/beta/DeclarationReference'; -import { createCommentNode } from '~/DocModel/comment'; -import type { DocBlockJSON } from '~/DocModel/comment/CommentBlock'; +import { createCommentNode } from './tsdoc'; +import type { DocBlockJSON } from './tsdoc/CommentBlock'; export function findPackage(model: ApiModel, name: string): ApiPackage | undefined { return (model.findMembersByName(name)[0] ?? model.findMembersByName(`@discordjs/${name}`)[0]) as diff --git a/packages/website/src/DocModel/comment/CommentBlock.ts b/packages/api-extractor-utils/src/tsdoc/CommentBlock.ts similarity index 100% rename from packages/website/src/DocModel/comment/CommentBlock.ts rename to packages/api-extractor-utils/src/tsdoc/CommentBlock.ts diff --git a/packages/website/src/DocModel/comment/CommentBlockTag.ts b/packages/api-extractor-utils/src/tsdoc/CommentBlockTag.ts similarity index 100% rename from packages/website/src/DocModel/comment/CommentBlockTag.ts rename to packages/api-extractor-utils/src/tsdoc/CommentBlockTag.ts diff --git a/packages/website/src/DocModel/comment/CommentCodeSpan.ts b/packages/api-extractor-utils/src/tsdoc/CommentCodeSpan.ts similarity index 100% rename from packages/website/src/DocModel/comment/CommentCodeSpan.ts rename to packages/api-extractor-utils/src/tsdoc/CommentCodeSpan.ts diff --git a/packages/website/src/DocModel/comment/CommentNode.ts b/packages/api-extractor-utils/src/tsdoc/CommentNode.ts similarity index 100% rename from packages/website/src/DocModel/comment/CommentNode.ts rename to packages/api-extractor-utils/src/tsdoc/CommentNode.ts diff --git a/packages/website/src/DocModel/comment/CommentNodeContainer.ts b/packages/api-extractor-utils/src/tsdoc/CommentNodeContainer.ts similarity index 100% rename from packages/website/src/DocModel/comment/CommentNodeContainer.ts rename to packages/api-extractor-utils/src/tsdoc/CommentNodeContainer.ts diff --git a/packages/website/src/DocModel/comment/FencedCodeCommentNode.ts b/packages/api-extractor-utils/src/tsdoc/FencedCodeCommentNode.ts similarity index 100% rename from packages/website/src/DocModel/comment/FencedCodeCommentNode.ts rename to packages/api-extractor-utils/src/tsdoc/FencedCodeCommentNode.ts diff --git a/packages/website/src/DocModel/comment/LinkTagCommentNode.ts b/packages/api-extractor-utils/src/tsdoc/LinkTagCommentNode.ts similarity index 88% rename from packages/website/src/DocModel/comment/LinkTagCommentNode.ts rename to packages/api-extractor-utils/src/tsdoc/LinkTagCommentNode.ts index 65e50a89ed95..3a0e14e00b5f 100644 --- a/packages/website/src/DocModel/comment/LinkTagCommentNode.ts +++ b/packages/api-extractor-utils/src/tsdoc/LinkTagCommentNode.ts @@ -1,7 +1,7 @@ import type { ApiItem, ApiModel } from '@microsoft/api-extractor-model'; import type { DocDeclarationReference, DocLinkTag } from '@microsoft/tsdoc'; import { type DocNodeJSON, node } from './CommentNode'; -import { generatePath, resolveName } from '~/util/parse.server'; +import { resolveName, generatePath } from '../parse'; interface LinkTagCodeLink { name: string; @@ -15,7 +15,7 @@ export interface DocLinkTagJSON extends DocNodeJSON { urlDestination: string | null; } -export function genToken( +export function genLinkToken( model: ApiModel, ref: DocDeclarationReference, context: ApiItem | null, @@ -46,7 +46,7 @@ export function linkTagNode( : null; const codeDestination = linkNode.codeDestination - ? genToken(model, linkNode.codeDestination, parentItem ?? packageEntryPoint ?? null, version) + ? genLinkToken(model, linkNode.codeDestination, parentItem ?? packageEntryPoint ?? null, version) : null; const text = linkNode.linkText ?? null; const urlDestination = linkNode.urlDestination ?? null; diff --git a/packages/website/src/DocModel/comment/ParamBlock.ts b/packages/api-extractor-utils/src/tsdoc/ParamBlock.ts similarity index 100% rename from packages/website/src/DocModel/comment/ParamBlock.ts rename to packages/api-extractor-utils/src/tsdoc/ParamBlock.ts diff --git a/packages/website/src/DocModel/comment/PlainTextCommentNode.ts b/packages/api-extractor-utils/src/tsdoc/PlainTextCommentNode.ts similarity index 100% rename from packages/website/src/DocModel/comment/PlainTextCommentNode.ts rename to packages/api-extractor-utils/src/tsdoc/PlainTextCommentNode.ts diff --git a/packages/website/src/DocModel/comment/RootComment.ts b/packages/api-extractor-utils/src/tsdoc/RootComment.ts similarity index 100% rename from packages/website/src/DocModel/comment/RootComment.ts rename to packages/api-extractor-utils/src/tsdoc/RootComment.ts diff --git a/packages/website/src/DocModel/comment/index.ts b/packages/api-extractor-utils/src/tsdoc/index.ts similarity index 82% rename from packages/website/src/DocModel/comment/index.ts rename to packages/api-extractor-utils/src/tsdoc/index.ts index 6c4042594bba..d8c12c2b48de 100644 --- a/packages/website/src/DocModel/comment/index.ts +++ b/packages/api-extractor-utils/src/tsdoc/index.ts @@ -50,3 +50,14 @@ export function createCommentNode( return _node(node); } } + +export * from './CommentNode'; +export * from './CommentNodeContainer'; +export * from './CommentBlock'; +export * from './CommentBlockTag'; +export * from './CommentCodeSpan'; +export * from './FencedCodeCommentNode'; +export * from './LinkTagCommentNode'; +export * from './ParamBlock'; +export * from './PlainTextCommentNode'; +export * from './RootComment'; diff --git a/packages/api-extractor-utils/tsconfig.eslint.json b/packages/api-extractor-utils/tsconfig.eslint.json new file mode 100644 index 000000000000..d04d4be3aedc --- /dev/null +++ b/packages/api-extractor-utils/tsconfig.eslint.json @@ -0,0 +1,20 @@ +{ + "extends": "./tsconfig.json", + "compilerOptions": { + "allowJs": true + }, + "include": [ + "**/*.ts", + "**/*.tsx", + "**/*.js", + "**/*.mjs", + "**/*.jsx", + "**/*.test.ts", + "**/*.test.js", + "**/*.test.mjs", + "**/*.spec.ts", + "**/*.spec.js", + "**/*.spec.mjs" + ], + "exclude": [] +} diff --git a/packages/api-extractor-utils/tsconfig.json b/packages/api-extractor-utils/tsconfig.json new file mode 100644 index 000000000000..80a91e8d4162 --- /dev/null +++ b/packages/api-extractor-utils/tsconfig.json @@ -0,0 +1,8 @@ +{ + "extends": "../../tsconfig.json", + "compilerOptions": { + "skipDefaultLibCheck": true, + "skipLibCheck": true + }, + "include": ["src/**/*.ts"] +} diff --git a/packages/scripts/.gitignore b/packages/scripts/.gitignore index 5189c6c61a41..47873baa971d 100644 --- a/packages/scripts/.gitignore +++ b/packages/scripts/.gitignore @@ -23,3 +23,5 @@ docs/**/* # Miscellaneous .tmp/ coverage/ + +searchIndex/ \ No newline at end of file diff --git a/packages/scripts/package.json b/packages/scripts/package.json index 8245d541e9e1..8ab1fb51238d 100644 --- a/packages/scripts/package.json +++ b/packages/scripts/package.json @@ -4,7 +4,6 @@ "description": "A set of scripts that we use for our workflows", "private": true, "scripts": { - "test": "vitest run", "build": "unbuild", "lint": "prettier --check . && TIMING=1 eslint src --ext mjs,js,ts", "format": "prettier --write . && TIMING=1 eslint src --ext mjs,js,ts --fix", @@ -44,6 +43,9 @@ }, "homepage": "https://discord.js.org", "dependencies": { + "@discordjs/api-extractor-utils": "workspace:^", + "@microsoft/api-extractor-model": "^7.23.3", + "@microsoft/tsdoc": "^0.14.1", "commander": "^9.4.0", "tslib": "^2.4.0" }, diff --git a/packages/scripts/src/generateIndex.ts b/packages/scripts/src/generateIndex.ts new file mode 100644 index 000000000000..4509b88dd068 --- /dev/null +++ b/packages/scripts/src/generateIndex.ts @@ -0,0 +1,91 @@ +import fs from 'node:fs/promises'; +import path from 'node:path'; +import { generatePath } from '@discordjs/api-extractor-utils'; +import { ApiDeclaredItem, ApiItem, ApiItemContainerMixin, ApiModel } from '@microsoft/api-extractor-model'; +import { DocCodeSpan, DocNode, DocNodeKind, DocParagraph, DocPlainText } from '@microsoft/tsdoc'; + +export interface MemberJSON { + name: string; + kind: string; + summary: string | null; + path: string; +} + +/** + * Attempts to resolve the summary text for the given item. + * @param item - The API item to resolve the summary text for. + */ +function tryResolveSummaryText(item: ApiDeclaredItem): string | null { + if (!item.tsdocComment) { + return null; + } + + const { summarySection } = item.tsdocComment; + + let retVal = ''; + + // Recursively visit the nodes in the summary section. + const visitTSDocNode = (node: DocNode) => { + switch (node.kind) { + case DocNodeKind.CodeSpan: + retVal += (node as DocCodeSpan).code; + break; + case DocNodeKind.PlainText: + retVal += (node as DocPlainText).text; + break; + case DocNodeKind.Section: + case DocNodeKind.Paragraph: + return (node as DocParagraph).nodes.forEach(visitTSDocNode); + default: // We'll ignore all other nodes. + break; + } + }; + + for (const node of summarySection.nodes) { + visitTSDocNode(node); + } + + if (retVal === '') { + return null; + } + + return retVal; +} + +export function visitNodes(item: ApiItem, tag: string) { + const members: MemberJSON[] = []; + + for (const member of item.members) { + if (!(member instanceof ApiDeclaredItem)) { + continue; + } + + if (ApiItemContainerMixin.isBaseClassOf(member)) { + members.push(...visitNodes(member, tag)); + } + + members.push({ + name: member.displayName, + kind: member.kind, + summary: tryResolveSummaryText(member), + path: generatePath(member.getHierarchy(), tag), + }); + } + + return members; +} + +export async function generateIndex(model: ApiModel, packageName: string, tag: string) { + const members = visitNodes(model, tag); + + const dir = 'searchIndex'; + + if (!(await fs.stat(dir)).isDirectory()) { + await fs.mkdir(dir); + } + + await fs.writeFile( + path.join('searchIndex', `${packageName}-${tag}-doc-index.json`), + JSON.stringify(members, undefined, 2), + ); +} diff --git a/packages/scripts/src/index.ts b/packages/scripts/src/index.ts index cb0ff5c3b541..1b4fba204387 100644 --- a/packages/scripts/src/index.ts +++ b/packages/scripts/src/index.ts @@ -1 +1 @@ -export {}; +export * from './generateIndex'; diff --git a/packages/website/package.json b/packages/website/package.json index d8fd693407b0..81390a3576f1 100644 --- a/packages/website/package.json +++ b/packages/website/package.json @@ -39,6 +39,7 @@ }, "homepage": "https://discord.js.org", "dependencies": { + "@discordjs/api-extractor-utils": "workspace:^", "@emotion/react": "^11.10.0", "@emotion/server": "^11.10.0", "@mantine/core": "^5.2.3", diff --git a/packages/website/src/DocModel/Visibility.ts b/packages/website/src/DocModel/Visibility.ts deleted file mode 100644 index 3a0ca0019e1f..000000000000 --- a/packages/website/src/DocModel/Visibility.ts +++ /dev/null @@ -1,4 +0,0 @@ -export enum Visibility { - Public, - Protected, -} diff --git a/packages/website/src/components/CodeListing.tsx b/packages/website/src/components/CodeListing.tsx index e620ebac18b1..15c27407da9c 100644 --- a/packages/website/src/components/CodeListing.tsx +++ b/packages/website/src/components/CodeListing.tsx @@ -1,3 +1,4 @@ +import type { TokenDocumentation, ApiItemJSON, AnyDocNodeJSON, InheritanceData } from '@discordjs/api-extractor-utils'; import { ActionIcon, Badge, Box, createStyles, Group, MediaQuery, Stack, Title } from '@mantine/core'; import { useMediaQuery } from '@mantine/hooks'; import type { PropsWithChildren } from 'react'; @@ -5,9 +6,6 @@ import { FiLink } from 'react-icons/fi'; import { HyperlinkedText } from './HyperlinkedText'; import { InheritanceText } from './InheritanceText'; import { TSDoc } from './tsdoc/TSDoc'; -import type { ApiItemJSON, InheritanceData } from '~/DocModel/ApiNodeJSONEncoder'; -import type { AnyDocNodeJSON } from '~/DocModel/comment/CommentNode'; -import type { TokenDocumentation } from '~/util/parse.server'; export enum CodeListingSeparatorType { Type = ':', diff --git a/packages/website/src/components/DocContainer.tsx b/packages/website/src/components/DocContainer.tsx index 2559392709bf..42af51317ec4 100644 --- a/packages/website/src/components/DocContainer.tsx +++ b/packages/website/src/components/DocContainer.tsx @@ -1,3 +1,11 @@ +import type { + ApiItemJSON, + TokenDocumentation, + TypeParameterData, + AnyDocNodeJSON, + ApiClassJSON, + ApiInterfaceJSON, +} from '@discordjs/api-extractor-utils'; import { Group, Stack, @@ -30,10 +38,6 @@ import { Section } from './Section'; import { TableOfContentItems } from './TableOfContentItems'; import { TypeParamTable } from './TypeParamTable'; import { TSDoc } from './tsdoc/TSDoc'; -import type { ApiClassJSON, ApiInterfaceJSON, ApiItemJSON } from '~/DocModel/ApiNodeJSONEncoder'; -import type { TypeParameterData } from '~/DocModel/TypeParameterMixin'; -import type { AnyDocNodeJSON } from '~/DocModel/comment/CommentNode'; -import type { TokenDocumentation } from '~/util/parse.server'; type DocContainerProps = PropsWithChildren<{ name: string; diff --git a/packages/website/src/components/HyperlinkedText.tsx b/packages/website/src/components/HyperlinkedText.tsx index 9991d304ef0d..d6953701ed24 100644 --- a/packages/website/src/components/HyperlinkedText.tsx +++ b/packages/website/src/components/HyperlinkedText.tsx @@ -1,6 +1,6 @@ +import type { TokenDocumentation } from '@discordjs/api-extractor-utils'; import { Anchor, Text } from '@mantine/core'; import Link from 'next/link'; -import type { TokenDocumentation } from '~/util/parse.server'; /** * Constructs a hyperlinked html node based on token type references diff --git a/packages/website/src/components/InheritanceText.tsx b/packages/website/src/components/InheritanceText.tsx index f7e964890139..744d6b7e6373 100644 --- a/packages/website/src/components/InheritanceText.tsx +++ b/packages/website/src/components/InheritanceText.tsx @@ -1,6 +1,6 @@ +import type { InheritanceData } from '@discordjs/api-extractor-utils'; import { Anchor, Text } from '@mantine/core'; import Link from 'next/link'; -import type { InheritanceData } from '~/DocModel/ApiNodeJSONEncoder'; export function InheritanceText({ data }: { data: InheritanceData }) { return ( diff --git a/packages/website/src/components/MethodItem.tsx b/packages/website/src/components/MethodItem.tsx index 93698a217c5f..3ef6f1d37a48 100644 --- a/packages/website/src/components/MethodItem.tsx +++ b/packages/website/src/components/MethodItem.tsx @@ -1,3 +1,4 @@ +import type { ApiMethodJSON, ApiMethodSignatureJSON } from '@discordjs/api-extractor-utils'; import { ActionIcon, Badge, Box, createStyles, Group, MediaQuery, Stack, Title } from '@mantine/core'; import { useMediaQuery } from '@mantine/hooks'; import { FiLink } from 'react-icons/fi'; @@ -5,8 +6,6 @@ import { HyperlinkedText } from './HyperlinkedText'; import { InheritanceText } from './InheritanceText'; import { ParameterTable } from './ParameterTable'; import { TSDoc } from './tsdoc/TSDoc'; -import type { ApiMethodJSON, ApiMethodSignatureJSON } from '~/DocModel/ApiNodeJSONEncoder'; -import { Visibility } from '~/DocModel/Visibility'; const useStyles = createStyles((theme) => ({ outer: { @@ -48,7 +47,7 @@ export function MethodItem({ data }: { data: ApiMethodJSON | ApiMethodSignatureJ {data.deprecated || - (data.kind === 'Method' && method.visibility === Visibility.Protected) || + (data.kind === 'Method' && method.protected) || (data.kind === 'Method' && method.static) ? ( {data.deprecated ? ( @@ -56,9 +55,7 @@ export function MethodItem({ data }: { data: ApiMethodJSON | ApiMethodSignatureJ Deprecated ) : null} - {data.kind === 'Method' && method.visibility === Visibility.Protected ? ( - Protected - ) : null} + {data.kind === 'Method' && method.protected ? Protected : null} {data.kind === 'Method' && method.static ? Static : null} ) : null} diff --git a/packages/website/src/components/MethodList.tsx b/packages/website/src/components/MethodList.tsx index effb382f4202..6f994fec3519 100644 --- a/packages/website/src/components/MethodList.tsx +++ b/packages/website/src/components/MethodList.tsx @@ -1,7 +1,7 @@ +import type { ApiMethodJSON, ApiMethodSignatureJSON } from '@discordjs/api-extractor-utils'; import { Divider, Stack } from '@mantine/core'; import { Fragment } from 'react'; import { MethodItem } from './MethodItem'; -import type { ApiMethodJSON, ApiMethodSignatureJSON } from '~/DocModel/ApiNodeJSONEncoder'; export function MethodList({ data }: { data: (ApiMethodJSON | ApiMethodSignatureJSON)[] }) { return ( diff --git a/packages/website/src/components/ParameterTable.tsx b/packages/website/src/components/ParameterTable.tsx index d5a1cb50d7e6..4666f387bd82 100644 --- a/packages/website/src/components/ParameterTable.tsx +++ b/packages/website/src/components/ParameterTable.tsx @@ -1,8 +1,8 @@ +import type { ParameterDocumentation } from '@discordjs/api-extractor-utils'; import { Box, ScrollArea } from '@mantine/core'; import { HyperlinkedText } from './HyperlinkedText'; import { Table } from './Table'; import { TSDoc } from './tsdoc/TSDoc'; -import type { ParameterDocumentation } from '~/util/parse.server'; const columnStyles = { Name: 'font-mono whitespace-nowrap', diff --git a/packages/website/src/components/PropertyList.tsx b/packages/website/src/components/PropertyList.tsx index 7397df3754dd..4c47b8908d80 100644 --- a/packages/website/src/components/PropertyList.tsx +++ b/packages/website/src/components/PropertyList.tsx @@ -1,6 +1,6 @@ +import type { ApiPropertyItemJSON } from '@discordjs/api-extractor-utils'; import { Stack } from '@mantine/core'; import { CodeListing } from './CodeListing'; -import type { ApiPropertyItemJSON } from '~/DocModel/ApiNodeJSONEncoder'; export function PropertyList({ data }: { data: ApiPropertyItemJSON[] }) { return ( diff --git a/packages/website/src/components/Sections.tsx b/packages/website/src/components/Sections.tsx index 7c1fc1166e79..6a809b2fb455 100644 --- a/packages/website/src/components/Sections.tsx +++ b/packages/website/src/components/Sections.tsx @@ -1,3 +1,9 @@ +import type { + ApiClassJSON, + ApiInterfaceJSON, + ParameterDocumentation, + ApiConstructorJSON, +} from '@discordjs/api-extractor-utils'; import { Stack, Group, Badge, Title } from '@mantine/core'; import { useMediaQuery } from '@mantine/hooks'; import { VscSymbolConstant, VscSymbolMethod, VscSymbolProperty } from 'react-icons/vsc'; @@ -6,8 +12,6 @@ import { ParameterTable } from './ParameterTable'; import { PropertyList } from './PropertyList'; import { Section } from './Section'; import { TSDoc } from './tsdoc/TSDoc'; -import type { ApiClassJSON, ApiConstructorJSON, ApiInterfaceJSON } from '~/DocModel/ApiNodeJSONEncoder'; -import type { ParameterDocumentation } from '~/util/parse.server'; export function PropertiesSection({ data }: { data: ApiClassJSON['properties'] | ApiInterfaceJSON['properties'] }) { const matches = useMediaQuery('(max-width: 768px)'); diff --git a/packages/website/src/components/SidebarLayout.tsx b/packages/website/src/components/SidebarLayout.tsx index 7c8278f02ede..0bd9053ee819 100644 --- a/packages/website/src/components/SidebarLayout.tsx +++ b/packages/website/src/components/SidebarLayout.tsx @@ -1,3 +1,4 @@ +import type { getMembers, ApiItemJSON } from '@discordjs/api-extractor-utils'; import { useMantineTheme, AppShell, @@ -33,10 +34,8 @@ import { VscChevronDown, VscGithubInverted, VscPackage, VscVersions } from 'reac import { WiDaySunny, WiNightClear } from 'react-icons/wi'; import useSWR from 'swr'; import { SidebarItems } from './SidebarItems'; -import type { ApiItemJSON } from '~/DocModel/ApiNodeJSONEncoder'; import type { findMember } from '~/util/model.server'; import { PACKAGES } from '~/util/packages'; -import type { getMembers } from '~/util/parse.server'; const fetcher = (url: string) => fetch(url).then((res) => res.json()); diff --git a/packages/website/src/components/TableOfContentItems.tsx b/packages/website/src/components/TableOfContentItems.tsx index 266e59e233dc..ba3d7dd11aca 100644 --- a/packages/website/src/components/TableOfContentItems.tsx +++ b/packages/website/src/components/TableOfContentItems.tsx @@ -1,7 +1,7 @@ +import type { ApiClassJSON, ApiInterfaceJSON } from '@discordjs/api-extractor-utils'; import { createStyles, Group, Text, Box, Stack, ThemeIcon, useMantineColorScheme } from '@mantine/core'; import { useMemo } from 'react'; import { VscListSelection, VscSymbolMethod, VscSymbolProperty } from 'react-icons/vsc'; -import type { ApiClassJSON, ApiInterfaceJSON } from '~/DocModel/ApiNodeJSONEncoder'; const useStyles = createStyles((theme) => ({ // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment diff --git a/packages/website/src/components/TypeParamTable.tsx b/packages/website/src/components/TypeParamTable.tsx index 580b4794e30d..063e96e49ee4 100644 --- a/packages/website/src/components/TypeParamTable.tsx +++ b/packages/website/src/components/TypeParamTable.tsx @@ -1,8 +1,8 @@ +import type { TypeParameterData } from '@discordjs/api-extractor-utils'; import { ScrollArea } from '@mantine/core'; import { HyperlinkedText } from './HyperlinkedText'; import { Table } from './Table'; import { TSDoc } from './tsdoc/TSDoc'; -import type { TypeParameterData } from '~/DocModel/TypeParameterMixin'; const rowElements = { Name: 'font-mono whitespace-nowrap', diff --git a/packages/website/src/components/model/Class.tsx b/packages/website/src/components/model/Class.tsx index d40bb5b29fdb..ffc001b78d7f 100644 --- a/packages/website/src/components/model/Class.tsx +++ b/packages/website/src/components/model/Class.tsx @@ -1,8 +1,8 @@ +import type { ApiClassJSON } from '@discordjs/api-extractor-utils'; import { Skeleton } from '@mantine/core'; import { useRouter } from 'next/router'; import { DocContainer } from '../DocContainer'; import { ConstructorSection, MethodsSection, PropertiesSection } from '../Sections'; -import type { ApiClassJSON } from '~/DocModel/ApiNodeJSONEncoder'; export function Class({ data }: { data: ApiClassJSON }) { const router = useRouter(); diff --git a/packages/website/src/components/model/Enum.tsx b/packages/website/src/components/model/Enum.tsx index 69f2f1f085df..490106ff2d6f 100644 --- a/packages/website/src/components/model/Enum.tsx +++ b/packages/website/src/components/model/Enum.tsx @@ -1,3 +1,4 @@ +import type { ApiEnumJSON } from '@discordjs/api-extractor-utils'; import { Skeleton, Stack } from '@mantine/core'; import { useMediaQuery } from '@mantine/hooks'; import { useRouter } from 'next/router'; @@ -5,7 +6,6 @@ import { VscSymbolEnumMember } from 'react-icons/vsc'; import { CodeListing, CodeListingSeparatorType } from '../CodeListing'; import { DocContainer } from '../DocContainer'; import { Section } from '../Section'; -import type { ApiEnumJSON } from '~/DocModel/ApiNodeJSONEncoder'; export function Enum({ data }: { data: ApiEnumJSON }) { const router = useRouter(); diff --git a/packages/website/src/components/model/Function.tsx b/packages/website/src/components/model/Function.tsx index 1d3f997eb1bf..9c81ef4840de 100644 --- a/packages/website/src/components/model/Function.tsx +++ b/packages/website/src/components/model/Function.tsx @@ -1,8 +1,8 @@ +import type { ApiFunctionJSON } from '@discordjs/api-extractor-utils'; import { Skeleton } from '@mantine/core'; import { useRouter } from 'next/router'; import { DocContainer } from '../DocContainer'; import { ParametersSection } from '../Sections'; -import type { ApiFunctionJSON } from '~/DocModel/ApiNodeJSONEncoder'; export function Function({ data }: { data: ApiFunctionJSON }) { const router = useRouter(); diff --git a/packages/website/src/components/model/Interface.tsx b/packages/website/src/components/model/Interface.tsx index a1e969a3b6d3..72a9315d3d69 100644 --- a/packages/website/src/components/model/Interface.tsx +++ b/packages/website/src/components/model/Interface.tsx @@ -1,8 +1,8 @@ +import type { ApiInterfaceJSON } from '@discordjs/api-extractor-utils'; import { Skeleton } from '@mantine/core'; import { useRouter } from 'next/router'; import { DocContainer } from '../DocContainer'; import { MethodsSection, PropertiesSection } from '../Sections'; -import type { ApiInterfaceJSON } from '~/DocModel/ApiNodeJSONEncoder'; export function Interface({ data }: { data: ApiInterfaceJSON }) { const router = useRouter(); diff --git a/packages/website/src/components/model/TypeAlias.tsx b/packages/website/src/components/model/TypeAlias.tsx index f2e1ee4e583e..0094d3d21ec4 100644 --- a/packages/website/src/components/model/TypeAlias.tsx +++ b/packages/website/src/components/model/TypeAlias.tsx @@ -1,5 +1,5 @@ +import type { ApiTypeAliasJSON } from '@discordjs/api-extractor-utils'; import { DocContainer } from '../DocContainer'; -import type { ApiTypeAliasJSON } from '~/DocModel/ApiNodeJSONEncoder'; export function TypeAlias({ data }: { data: ApiTypeAliasJSON }) { return ( diff --git a/packages/website/src/components/model/Variable.tsx b/packages/website/src/components/model/Variable.tsx index 65b1fabc70fe..359dda290724 100644 --- a/packages/website/src/components/model/Variable.tsx +++ b/packages/website/src/components/model/Variable.tsx @@ -1,5 +1,5 @@ +import type { ApiVariableJSON } from '@discordjs/api-extractor-utils'; import { DocContainer } from '../DocContainer'; -import type { ApiVariableJSON } from '~/DocModel/ApiNodeJSONEncoder'; export function Variable({ data }: { data: ApiVariableJSON }) { return ; diff --git a/packages/website/src/components/tsdoc/TSDoc.tsx b/packages/website/src/components/tsdoc/TSDoc.tsx index e8207b525a03..cae45400a58f 100644 --- a/packages/website/src/components/tsdoc/TSDoc.tsx +++ b/packages/website/src/components/tsdoc/TSDoc.tsx @@ -1,3 +1,12 @@ +import type { + AnyDocNodeJSON, + DocPlainTextJSON, + DocNodeContainerJSON, + DocLinkTagJSON, + DocFencedCodeJSON, + DocBlockJSON, + DocCommentJSON, +} from '@discordjs/api-extractor-utils'; import { Anchor, Box, Code, Text, useMantineColorScheme } from '@mantine/core'; import { DocNodeKind, StandardTags } from '@microsoft/tsdoc'; import Link from 'next/link'; @@ -5,13 +14,6 @@ import { Fragment, useCallback, type ReactNode } from 'react'; import { PrismAsyncLight as SyntaxHighlighter } from 'react-syntax-highlighter'; import { vscDarkPlus, ghcolors } from 'react-syntax-highlighter/dist/cjs/styles/prism'; import { BlockComment } from './BlockComment'; -import type { DocBlockJSON } from '~/DocModel/comment/CommentBlock'; -import type { AnyDocNodeJSON } from '~/DocModel/comment/CommentNode'; -import type { DocNodeContainerJSON } from '~/DocModel/comment/CommentNodeContainer'; -import type { DocFencedCodeJSON } from '~/DocModel/comment/FencedCodeCommentNode'; -import type { DocLinkTagJSON } from '~/DocModel/comment/LinkTagCommentNode'; -import type { DocPlainTextJSON } from '~/DocModel/comment/PlainTextCommentNode'; -import type { DocCommentJSON } from '~/DocModel/comment/RootComment'; export function TSDoc({ node }: { node: AnyDocNodeJSON }): JSX.Element { const { colorScheme } = useMantineColorScheme(); diff --git a/packages/website/src/contexts/member.tsx b/packages/website/src/contexts/member.tsx index f45fd071b80a..5c15056d2d42 100644 --- a/packages/website/src/contexts/member.tsx +++ b/packages/website/src/contexts/member.tsx @@ -1,5 +1,5 @@ +import type { ApiItemJSON } from '@discordjs/api-extractor-utils'; import { createContext, useContext, type ReactNode } from 'react'; -import type { ApiItemJSON } from '~/DocModel/ApiNodeJSONEncoder'; export const MemberContext = createContext(undefined); diff --git a/packages/website/src/pages/docs/[...slug].tsx b/packages/website/src/pages/docs/[...slug].tsx index 31ce9d3e5d6c..3b8337f86afb 100644 --- a/packages/website/src/pages/docs/[...slug].tsx +++ b/packages/website/src/pages/docs/[...slug].tsx @@ -1,6 +1,17 @@ import { readFile } from 'node:fs/promises'; import { join } from 'node:path'; import { cwd } from 'node:process'; +import { + findPackage, + getMembers, + type ApiItemJSON, + type ApiClassJSON, + type ApiFunctionJSON, + type ApiInterfaceJSON, + type ApiTypeAliasJSON, + type ApiVariableJSON, + type ApiEnumJSON, +} from '@discordjs/api-extractor-utils'; import { ActionIcon, Affix, Box, LoadingOverlay, Transition } from '@mantine/core'; import { useMediaQuery, useWindowScroll } from '@mantine/hooks'; import { ApiFunction, ApiItemKind, type ApiPackage } from '@microsoft/api-extractor-model'; @@ -15,15 +26,6 @@ import rehypePrettyCode from 'rehype-pretty-code'; import rehypeRaw from 'rehype-raw'; import rehypeSlug from 'rehype-slug'; import remarkGfm from 'remark-gfm'; -import type { - ApiClassJSON, - ApiEnumJSON, - ApiFunctionJSON, - ApiInterfaceJSON, - ApiItemJSON, - ApiTypeAliasJSON, - ApiVariableJSON, -} from '~/DocModel/ApiNodeJSONEncoder'; import { SidebarLayout, type SidebarLayoutProps } from '~/components/SidebarLayout'; import { Class } from '~/components/model/Class'; import { Enum } from '~/components/model/Enum'; @@ -35,7 +37,6 @@ import { MemberProvider } from '~/contexts/member'; import { createApiModel } from '~/util/api-model.server'; import { findMember, findMemberByKey } from '~/util/model.server'; import { PACKAGES } from '~/util/packages'; -import { findPackage, getMembers } from '~/util/parse.server'; export const getStaticPaths: GetStaticPaths = async () => { const pkgs = ( @@ -94,11 +95,11 @@ export const getStaticPaths: GetStaticPaths = async () => { } const model = createApiModel(data); - const pkg = findPackage(model, packageName); + const pkg = findPackage(model, packageName)!; return [ { params: { slug: ['packages', packageName, 'main'] } }, - ...getMembers(pkg!, 'main').map((member) => { + ...getMembers(pkg, 'main').map((member) => { if (member.kind === ApiItemKind.Function && member.overloadIndex && member.overloadIndex > 1) { return { params: { diff --git a/packages/website/src/util/api-extractor.server.ts b/packages/website/src/util/api-extractor.server.ts deleted file mode 100644 index 6c4ee0f76da5..000000000000 --- a/packages/website/src/util/api-extractor.server.ts +++ /dev/null @@ -1 +0,0 @@ -export * from '@microsoft/api-extractor-model'; diff --git a/packages/website/src/util/api-model.server.ts b/packages/website/src/util/api-model.server.ts index c6a797b1bc94..db961a41ebc8 100644 --- a/packages/website/src/util/api-model.server.ts +++ b/packages/website/src/util/api-model.server.ts @@ -1,8 +1,9 @@ /* eslint-disable @typescript-eslint/no-unsafe-member-access */ /* eslint-disable @typescript-eslint/no-unsafe-assignment */ -import { ApiItem, ApiModel, type ApiPackage } from '~/util/api-extractor.server'; -import { TSDocConfigFile } from '~/util/tsdoc-config.server'; -import { TSDocConfiguration } from '~/util/tsdoc.server'; + +import { ApiModel, ApiItem, type ApiPackage } from '@microsoft/api-extractor-model'; +import { TSDocConfiguration } from '@microsoft/tsdoc'; +import { TSDocConfigFile } from '@microsoft/tsdoc-config'; export function createApiModel(data: any) { const model = new ApiModel(); diff --git a/packages/website/src/util/model.server.ts b/packages/website/src/util/model.server.ts index a1a96bd55f29..360f8ccdc5ca 100644 --- a/packages/website/src/util/model.server.ts +++ b/packages/website/src/util/model.server.ts @@ -1,6 +1,5 @@ +import { findPackage, ApiNodeJSONEncoder } from '@discordjs/api-extractor-utils'; import type { ApiEntryPoint, ApiModel } from '@microsoft/api-extractor-model'; -import { findPackage } from './parse.server'; -import { ApiNodeJSONEncoder } from '~/DocModel/ApiNodeJSONEncoder'; export function findMemberByKey(model: ApiModel, packageName: string, containerKey: string, version: string) { const pkg = findPackage(model, packageName)!; diff --git a/packages/website/src/util/tsdoc-config.server.ts b/packages/website/src/util/tsdoc-config.server.ts deleted file mode 100644 index 8c8a52eac1a0..000000000000 --- a/packages/website/src/util/tsdoc-config.server.ts +++ /dev/null @@ -1 +0,0 @@ -export * from '@microsoft/tsdoc-config'; diff --git a/packages/website/src/util/tsdoc.server.tsx b/packages/website/src/util/tsdoc.server.tsx deleted file mode 100644 index f89461991fc9..000000000000 --- a/packages/website/src/util/tsdoc.server.tsx +++ /dev/null @@ -1 +0,0 @@ -export * from '@microsoft/tsdoc'; diff --git a/yarn.lock b/yarn.lock index 5fffa1e2ef7c..58837b15d952 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1755,6 +1755,29 @@ __metadata: languageName: unknown linkType: soft +"@discordjs/api-extractor-utils@workspace:^, @discordjs/api-extractor-utils@workspace:packages/api-extractor-utils": + version: 0.0.0-use.local + resolution: "@discordjs/api-extractor-utils@workspace:packages/api-extractor-utils" + dependencies: + "@favware/cliff-jumper": ^1.8.7 + "@microsoft/api-extractor-model": ^7.23.3 + "@microsoft/tsdoc": ^0.14.1 + "@types/node": ^16.11.54 + "@typescript-eslint/eslint-plugin": ^5.34.0 + "@typescript-eslint/parser": ^5.34.0 + eslint: ^8.22.0 + eslint-config-marine: ^9.4.1 + eslint-config-prettier: ^8.5.0 + eslint-import-resolver-typescript: ^3.5.0 + eslint-plugin-import: ^2.26.0 + eslint-plugin-tsdoc: ^0.2.16 + prettier: ^2.7.1 + rollup-plugin-typescript2: ^0.33.0 + typescript: ^4.7.4 + unbuild: ^0.8.9 + languageName: unknown + linkType: soft + "@discordjs/builders@workspace:^, @discordjs/builders@workspace:packages/builders": version: 0.0.0-use.local resolution: "@discordjs/builders@workspace:packages/builders" @@ -1947,6 +1970,9 @@ __metadata: version: 0.0.0-use.local resolution: "@discordjs/scripts@workspace:packages/scripts" dependencies: + "@discordjs/api-extractor-utils": "workspace:^" + "@microsoft/api-extractor-model": ^7.23.3 + "@microsoft/tsdoc": ^0.14.1 "@types/node": ^16.11.54 "@typescript-eslint/eslint-plugin": ^5.34.0 "@typescript-eslint/parser": ^5.34.0 @@ -2007,6 +2033,7 @@ __metadata: version: 0.0.0-use.local resolution: "@discordjs/website@workspace:packages/website" dependencies: + "@discordjs/api-extractor-utils": "workspace:^" "@emotion/react": ^11.10.0 "@emotion/server": ^11.10.0 "@mantine/core": ^5.2.3 @@ -2908,7 +2935,7 @@ __metadata: languageName: node linkType: hard -"@microsoft/api-extractor-model@npm:7.23.1, @microsoft/api-extractor-model@npm:^7.23.1": +"@microsoft/api-extractor-model@npm:7.23.1": version: 7.23.1 resolution: "@microsoft/api-extractor-model@npm:7.23.1" dependencies: @@ -2919,6 +2946,17 @@ __metadata: languageName: node linkType: hard +"@microsoft/api-extractor-model@npm:^7.23.1, @microsoft/api-extractor-model@npm:^7.23.3": + version: 7.23.3 + resolution: "@microsoft/api-extractor-model@npm:7.23.3" + dependencies: + "@microsoft/tsdoc": 0.14.1 + "@microsoft/tsdoc-config": ~0.16.1 + "@rushstack/node-core-library": 3.51.1 + checksum: 00ec7a31d1f6d1583c3fcd97b16130bf8570e27cd3be2ecd07cf601b0c91ef63885a55bf068932c5d9278f8a9ab2046dc8305c0047158e6df5e86f5e56e35b77 + languageName: node + linkType: hard + "@microsoft/api-extractor@npm:^7.29.3": version: 7.29.3 resolution: "@microsoft/api-extractor@npm:7.29.3" @@ -2965,7 +3003,7 @@ __metadata: languageName: node linkType: hard -"@microsoft/tsdoc@npm:0.14.1": +"@microsoft/tsdoc@npm:0.14.1, @microsoft/tsdoc@npm:^0.14.1": version: 0.14.1 resolution: "@microsoft/tsdoc@npm:0.14.1" checksum: e4ad038ccff2cd96e0d53ee42e2136f0f5a925b16cfda14261f1c2eb55ba0088a0e3b08ff819b476ddc69b2242a391925fab7f6ae2afabb19b96f87e19c114fc @@ -3401,6 +3439,22 @@ __metadata: languageName: node linkType: hard +"@rushstack/node-core-library@npm:3.51.1": + version: 3.51.1 + resolution: "@rushstack/node-core-library@npm:3.51.1" + dependencies: + "@types/node": 12.20.24 + colors: ~1.2.1 + fs-extra: ~7.0.1 + import-lazy: ~4.0.0 + jju: ~1.4.0 + resolve: ~1.17.0 + semver: ~7.3.0 + z-schema: ~5.0.2 + checksum: 92f7e39f03f4931a7007b4a79427d82bfe078146133a138219205abf873607898f7667fa368e3cb28c93bb1a2b9dc70ddaf2d316bc47a9a17b591d69d1025068 + languageName: node + linkType: hard + "@rushstack/rig-package@npm:0.3.14": version: 0.3.14 resolution: "@rushstack/rig-package@npm:0.3.14" @@ -3959,9 +4013,9 @@ __metadata: linkType: hard "@types/node@npm:^16.11.54": - version: 16.11.54 - resolution: "@types/node@npm:16.11.54" - checksum: fa4d6a94498cc6ef96932a25557082587a178b5fa1da5e208bdb171b85265110a7ca6a4f296e740dca1b29d2a44b3c1e76e21d255e5eeed8be5f67ea538dcb9c + version: 16.11.56 + resolution: "@types/node@npm:16.11.56" + checksum: b4efade16eb08a39810921c54a1637e69c8f3184a20d87e8fe74d557d9bda73f0829ac318e2a30a32b1903e4b099812defd1dfe438be70b98dbfbea5b0d99a53 languageName: node linkType: hard From fd97da9b6c423384fd98e95038829d42bd1ccc8c Mon Sep 17 00:00:00 2001 From: iCrawl Date: Mon, 29 Aug 2022 21:48:12 +0200 Subject: [PATCH 110/155] chore: missing config files --- package.json | 6 +- packages/actions/package.json | 10 +- packages/api-extractor-utils/.prettierrc.js | 1 + packages/api-extractor-utils/LICENSE | 190 ++ packages/api-extractor-utils/README.md | 34 + packages/api-extractor-utils/package.json | 22 +- packages/builders/package.json | 18 +- packages/collection/package.json | 14 +- packages/discord.js/package.json | 14 +- packages/docgen/package.json | 12 +- packages/proxy-container/package.json | 10 +- packages/proxy/package.json | 16 +- packages/rest/package.json | 20 +- packages/scripts/package.json | 10 +- packages/scripts/src/generateIndex.ts | 13 +- packages/voice/package.json | 20 +- packages/website/package.json | 36 +- packages/ws/package.json | 18 +- yarn.lock | 1869 ++++++++++--------- 19 files changed, 1326 insertions(+), 1007 deletions(-) create mode 100644 packages/api-extractor-utils/.prettierrc.js create mode 100644 packages/api-extractor-utils/LICENSE create mode 100644 packages/api-extractor-utils/README.md diff --git a/package.json b/package.json index c093c372df19..4f8aa8a5b320 100644 --- a/package.json +++ b/package.json @@ -37,8 +37,8 @@ }, "homepage": "https://discord.js.org", "devDependencies": { - "@commitlint/cli": "^17.0.3", - "@commitlint/config-angular": "^17.0.3", + "@commitlint/cli": "^17.1.2", + "@commitlint/config-angular": "^17.1.0", "@favware/cliff-jumper": "^1.8.7", "@favware/npm-deprecate": "^1.0.5", "@types/is-ci": "^3.0.0", @@ -48,7 +48,7 @@ "is-ci": "^3.0.1", "lint-staged": "^13.0.3", "turbo": "^1.4.3", - "typescript": "^4.7.4" + "typescript": "^4.8.2" }, "resolutions": { "@microsoft/tsdoc-config": "patch:@microsoft/tsdoc-config@npm:0.16.1#.yarn/patches/@microsoft-tsdoc-config-npm-0.16.1-81031b1bbf.patch" diff --git a/packages/actions/package.json b/packages/actions/package.json index f4fe0e4813c5..5b3a9838f06a 100644 --- a/packages/actions/package.json +++ b/packages/actions/package.json @@ -43,18 +43,18 @@ "tslib": "^2.4.0" }, "devDependencies": { - "@types/node": "^16.11.54", - "@typescript-eslint/eslint-plugin": "^5.34.0", - "@typescript-eslint/parser": "^5.34.0", + "@types/node": "^16.11.56", + "@typescript-eslint/eslint-plugin": "^5.35.1", + "@typescript-eslint/parser": "^5.35.1", "@vitest/coverage-c8": "^0.22.1", - "eslint": "^8.22.0", + "eslint": "^8.23.0", "eslint-config-marine": "^9.4.1", "eslint-config-prettier": "^8.5.0", "eslint-import-resolver-typescript": "^3.5.0", "eslint-plugin-import": "^2.26.0", "prettier": "^2.7.1", "rollup-plugin-typescript2": "^0.33.0", - "typescript": "^4.7.4", + "typescript": "^4.8.2", "unbuild": "^0.8.9", "vitest": "^0.22.1" }, diff --git a/packages/api-extractor-utils/.prettierrc.js b/packages/api-extractor-utils/.prettierrc.js new file mode 100644 index 000000000000..f004026c7647 --- /dev/null +++ b/packages/api-extractor-utils/.prettierrc.js @@ -0,0 +1 @@ +module.exports = require('../../.prettierrc.json'); diff --git a/packages/api-extractor-utils/LICENSE b/packages/api-extractor-utils/LICENSE new file mode 100644 index 000000000000..e2822e9d8ffa --- /dev/null +++ b/packages/api-extractor-utils/LICENSE @@ -0,0 +1,190 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + Copyright 2022 Noel Buechler + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. diff --git a/packages/api-extractor-utils/README.md b/packages/api-extractor-utils/README.md new file mode 100644 index 000000000000..543c22ad1a65 --- /dev/null +++ b/packages/api-extractor-utils/README.md @@ -0,0 +1,34 @@ +
+
+

+ discord.js +

+
+

+ Discord server + Build status +

+

+ Vercel +

+
+ +## Links + +- [Website](https://discord.js.org/) ([source](https://github.com/discordjs/discord.js/tree/main/packages/website)) +- [Documentation](https://discord.js.org/#/docs) +- [Guide](https://discordjs.guide/) ([source](https://github.com/discordjs/guide)) + See also the [Update Guide](https://discordjs.guide/additional-info/changes-in-v14.html), including updated and removed items in the library. +- [discord.js Discord server](https://discord.gg/djs) +- [Discord API Discord server](https://discord.gg/discord-api) +- [GitHub](https://github.com/discordjs/discord.js/tree/main/packages/scripts) +- [Related libraries](https://discord.com/developers/docs/topics/community-resources#libraries) + +## Contributing + +See [the contribution guide](https://github.com/discordjs/discord.js/blob/main/.github/CONTRIBUTING.md) if you'd like to submit a PR. + +## Help + +If you don't understand something in the documentation, you are experiencing problems, or you just need a gentle +nudge in the right direction, please don't hesitate to join our official [discord.js Server](https://discord.gg/djs). diff --git a/packages/api-extractor-utils/package.json b/packages/api-extractor-utils/package.json index 5f14d291e458..c790f8a555dc 100644 --- a/packages/api-extractor-utils/package.json +++ b/packages/api-extractor-utils/package.json @@ -9,17 +9,10 @@ "format": "prettier --write . && TIMING=1 eslint src --ext mjs,js,ts --fix", "fmt": "yarn format" }, - "main": "./dist/index.cjs", - "module": "./dist/index.mjs", + "main": "./dist/index.mjs", "types": "./dist/index.d.ts", - "exports": { - "import": "./dist/index.mjs", - "require": "./dist/index.cjs", - "types": "./dist/index.d.ts" - }, "directories": { - "lib": "src", - "test": "__tests__" + "lib": "src" }, "files": [ "dist" @@ -41,11 +34,10 @@ "@microsoft/tsdoc": "^0.14.1" }, "devDependencies": { - "@favware/cliff-jumper": "^1.8.7", - "@types/node": "^16.11.54", - "@typescript-eslint/eslint-plugin": "^5.34.0", - "@typescript-eslint/parser": "^5.34.0", - "eslint": "^8.22.0", + "@types/node": "^16.11.56", + "@typescript-eslint/eslint-plugin": "^5.35.1", + "@typescript-eslint/parser": "^5.35.1", + "eslint": "^8.23.0", "eslint-config-marine": "^9.4.1", "eslint-config-prettier": "^8.5.0", "eslint-import-resolver-typescript": "^3.5.0", @@ -53,7 +45,7 @@ "eslint-plugin-tsdoc": "^0.2.16", "prettier": "^2.7.1", "rollup-plugin-typescript2": "^0.33.0", - "typescript": "^4.7.4", + "typescript": "^4.8.2", "unbuild": "^0.8.9" }, "engines": { diff --git a/packages/builders/package.json b/packages/builders/package.json index 6f2c4b2a9bc7..a96dc9d2d1cc 100644 --- a/packages/builders/package.json +++ b/packages/builders/package.json @@ -54,8 +54,8 @@ }, "homepage": "https://discord.js.org", "dependencies": { - "@sapphire/shapeshift": "^3.5.1", - "discord-api-types": "^0.37.4", + "@sapphire/shapeshift": "^3.6.0", + "discord-api-types": "^0.37.5", "fast-deep-equal": "^3.1.3", "ts-mixer": "^6.0.1", "tslib": "^2.4.0" @@ -63,13 +63,13 @@ "devDependencies": { "@discordjs/docgen": "workspace:^", "@favware/cliff-jumper": "^1.8.7", - "@microsoft/api-extractor": "^7.29.3", - "@types/node": "^16.11.54", - "@typescript-eslint/eslint-plugin": "^5.34.0", - "@typescript-eslint/parser": "^5.34.0", + "@microsoft/api-extractor": "^7.29.5", + "@types/node": "^16.11.56", + "@typescript-eslint/eslint-plugin": "^5.35.1", + "@typescript-eslint/parser": "^5.35.1", "@vitest/coverage-c8": "^0.22.1", - "downlevel-dts": "^0.10.0", - "eslint": "^8.22.0", + "downlevel-dts": "^0.10.1", + "eslint": "^8.23.0", "eslint-config-marine": "^9.4.1", "eslint-config-prettier": "^8.5.0", "eslint-import-resolver-typescript": "^3.5.0", @@ -77,7 +77,7 @@ "eslint-plugin-tsdoc": "^0.2.16", "prettier": "^2.7.1", "rollup-plugin-typescript2": "^0.33.0", - "typescript": "^4.7.4", + "typescript": "^4.8.2", "unbuild": "^0.8.9", "vitest": "^0.22.1" }, diff --git a/packages/collection/package.json b/packages/collection/package.json index d19c0a30cb4f..0fcffdcfdca8 100644 --- a/packages/collection/package.json +++ b/packages/collection/package.json @@ -52,13 +52,13 @@ "devDependencies": { "@discordjs/docgen": "workspace:^", "@favware/cliff-jumper": "^1.8.7", - "@microsoft/api-extractor": "^7.29.3", - "@types/node": "^16.11.54", - "@typescript-eslint/eslint-plugin": "^5.34.0", - "@typescript-eslint/parser": "^5.34.0", + "@microsoft/api-extractor": "^7.29.5", + "@types/node": "^16.11.56", + "@typescript-eslint/eslint-plugin": "^5.35.1", + "@typescript-eslint/parser": "^5.35.1", "@vitest/coverage-c8": "^0.22.1", - "downlevel-dts": "^0.10.0", - "eslint": "^8.22.0", + "downlevel-dts": "^0.10.1", + "eslint": "^8.23.0", "eslint-config-marine": "^9.4.1", "eslint-config-prettier": "^8.5.0", "eslint-import-resolver-typescript": "^3.5.0", @@ -66,7 +66,7 @@ "eslint-plugin-tsdoc": "^0.2.16", "prettier": "^2.7.1", "rollup-plugin-typescript2": "^0.33.0", - "typescript": "^4.7.4", + "typescript": "^4.8.2", "unbuild": "^0.8.9", "vitest": "^0.22.1" }, diff --git a/packages/discord.js/package.json b/packages/discord.js/package.json index c37b4d95a1c6..7bdd1140aa01 100644 --- a/packages/discord.js/package.json +++ b/packages/discord.js/package.json @@ -54,24 +54,24 @@ "@discordjs/rest": "workspace:^", "@sapphire/snowflake": "^3.2.2", "@types/ws": "^8.5.3", - "discord-api-types": "^0.37.4", + "discord-api-types": "^0.37.5", "fast-deep-equal": "^3.1.3", "lodash.snakecase": "^4.1.1", "tslib": "^2.4.0", - "undici": "^5.9.1", + "undici": "^5.10.0", "ws": "^8.8.1" }, "devDependencies": { "@discordjs/docgen": "workspace:^", "@favware/cliff-jumper": "^1.8.7", - "@types/node": "^16.11.54", + "@types/node": "^16.11.56", "dtslint": "^4.2.1", - "eslint": "^8.22.0", - "jest": "^28.1.3", + "eslint": "^8.23.0", + "jest": "^29.0.1", "prettier": "^2.7.1", - "tsd": "^0.22.0", + "tsd": "^0.23.0", "tslint": "^6.1.3", - "typescript": "^4.7.4" + "typescript": "^4.8.2" }, "engines": { "node": ">=16.9.0" diff --git a/packages/docgen/package.json b/packages/docgen/package.json index 2d0d1d0201f4..e2976e7eb796 100644 --- a/packages/docgen/package.json +++ b/packages/docgen/package.json @@ -45,22 +45,22 @@ "commander": "^9.4.0", "jsdoc-to-markdown": "^7.1.1", "tslib": "^2.4.0", - "typedoc": "^0.23.10" + "typedoc": "^0.23.11" }, "devDependencies": { "@favware/cliff-jumper": "^1.8.7", "@types/jsdoc-to-markdown": "^7.0.3", - "@types/node": "^16.11.54", - "@typescript-eslint/eslint-plugin": "^5.34.0", - "@typescript-eslint/parser": "^5.34.0", - "eslint": "^8.22.0", + "@types/node": "^16.11.56", + "@typescript-eslint/eslint-plugin": "^5.35.1", + "@typescript-eslint/parser": "^5.35.1", + "eslint": "^8.23.0", "eslint-config-marine": "^9.4.1", "eslint-config-prettier": "^8.5.0", "eslint-import-resolver-typescript": "^3.5.0", "eslint-plugin-import": "^2.26.0", "prettier": "^2.7.1", "rollup-plugin-typescript2": "^0.33.0", - "typescript": "^4.7.4", + "typescript": "^4.8.2", "unbuild": "^0.8.9" }, "engines": { diff --git a/packages/proxy-container/package.json b/packages/proxy-container/package.json index 89f5e7bc516f..326461561d70 100644 --- a/packages/proxy-container/package.json +++ b/packages/proxy-container/package.json @@ -49,17 +49,17 @@ "tslib": "^2.4.0" }, "devDependencies": { - "@types/node": "^16.11.54", - "@typescript-eslint/eslint-plugin": "^5.34.0", - "@typescript-eslint/parser": "^5.34.0", - "eslint": "^8.22.0", + "@types/node": "^16.11.56", + "@typescript-eslint/eslint-plugin": "^5.35.1", + "@typescript-eslint/parser": "^5.35.1", + "eslint": "^8.23.0", "eslint-config-marine": "^9.4.1", "eslint-config-prettier": "^8.5.0", "eslint-import-resolver-typescript": "^3.5.0", "eslint-plugin-import": "^2.26.0", "prettier": "^2.7.1", "rollup-plugin-typescript2": "^0.33.0", - "typescript": "^4.7.4", + "typescript": "^4.8.2", "unbuild": "^0.8.9" }, "engines": { diff --git a/packages/proxy/package.json b/packages/proxy/package.json index 141b3fc007e0..653c3081612f 100644 --- a/packages/proxy/package.json +++ b/packages/proxy/package.json @@ -56,19 +56,19 @@ "dependencies": { "@discordjs/rest": "^1.0.0", "tslib": "^2.4.0", - "undici": "^5.9.1" + "undici": "^5.10.0" }, "devDependencies": { "@discordjs/docgen": "workspace:^", "@favware/cliff-jumper": "^1.8.7", - "@microsoft/api-extractor": "^7.29.3", - "@types/node": "^16.11.54", + "@microsoft/api-extractor": "^7.29.5", + "@types/node": "^16.11.56", "@types/supertest": "^2.0.12", - "@typescript-eslint/eslint-plugin": "^5.34.0", - "@typescript-eslint/parser": "^5.34.0", + "@typescript-eslint/eslint-plugin": "^5.35.1", + "@typescript-eslint/parser": "^5.35.1", "@vitest/coverage-c8": "^0.22.1", - "downlevel-dts": "^0.10.0", - "eslint": "^8.22.0", + "downlevel-dts": "^0.10.1", + "eslint": "^8.23.0", "eslint-config-marine": "^9.4.1", "eslint-config-prettier": "^8.5.0", "eslint-import-resolver-typescript": "^3.5.0", @@ -76,7 +76,7 @@ "prettier": "^2.7.1", "rollup-plugin-typescript2": "^0.33.0", "supertest": "^6.2.4", - "typescript": "^4.7.4", + "typescript": "^4.8.2", "unbuild": "^0.8.9", "vitest": "^0.22.1" }, diff --git a/packages/rest/package.json b/packages/rest/package.json index b89ba7ca7837..2de395170024 100644 --- a/packages/rest/package.json +++ b/packages/rest/package.json @@ -55,21 +55,21 @@ "@discordjs/collection": "workspace:^", "@sapphire/async-queue": "^1.5.0", "@sapphire/snowflake": "^3.2.2", - "discord-api-types": "^0.37.4", - "file-type": "^17.1.6", + "discord-api-types": "^0.37.5", + "file-type": "^18.0.0", "tslib": "^2.4.0", - "undici": "^5.9.1" + "undici": "^5.10.0" }, "devDependencies": { "@discordjs/docgen": "workspace:^", "@favware/cliff-jumper": "^1.8.7", - "@microsoft/api-extractor": "^7.29.3", - "@types/node": "^16.11.54", - "@typescript-eslint/eslint-plugin": "^5.34.0", - "@typescript-eslint/parser": "^5.34.0", + "@microsoft/api-extractor": "^7.29.5", + "@types/node": "^16.11.56", + "@typescript-eslint/eslint-plugin": "^5.35.1", + "@typescript-eslint/parser": "^5.35.1", "@vitest/coverage-c8": "^0.22.1", - "downlevel-dts": "^0.10.0", - "eslint": "^8.22.0", + "downlevel-dts": "^0.10.1", + "eslint": "^8.23.0", "eslint-config-marine": "^9.4.1", "eslint-config-prettier": "^8.5.0", "eslint-import-resolver-typescript": "^3.5.0", @@ -77,7 +77,7 @@ "eslint-plugin-tsdoc": "^0.2.16", "prettier": "^2.7.1", "rollup-plugin-typescript2": "^0.33.0", - "typescript": "^4.7.4", + "typescript": "^4.8.2", "unbuild": "^0.8.9", "vitest": "^0.22.1" }, diff --git a/packages/scripts/package.json b/packages/scripts/package.json index 8ab1fb51238d..83ab8a2b3b4e 100644 --- a/packages/scripts/package.json +++ b/packages/scripts/package.json @@ -50,18 +50,18 @@ "tslib": "^2.4.0" }, "devDependencies": { - "@types/node": "^16.11.54", - "@typescript-eslint/eslint-plugin": "^5.34.0", - "@typescript-eslint/parser": "^5.34.0", + "@types/node": "^16.11.56", + "@typescript-eslint/eslint-plugin": "^5.35.1", + "@typescript-eslint/parser": "^5.35.1", "@vitest/coverage-c8": "^0.22.1", - "eslint": "^8.22.0", + "eslint": "^8.23.0", "eslint-config-marine": "^9.4.1", "eslint-config-prettier": "^8.5.0", "eslint-import-resolver-typescript": "^3.5.0", "eslint-plugin-import": "^2.26.0", "prettier": "^2.7.1", "rollup-plugin-typescript2": "^0.33.0", - "typescript": "^4.7.4", + "typescript": "^4.8.2", "unbuild": "^0.8.9", "vitest": "^0.22.1" }, diff --git a/packages/scripts/src/generateIndex.ts b/packages/scripts/src/generateIndex.ts index 4509b88dd068..3231fc3d14d0 100644 --- a/packages/scripts/src/generateIndex.ts +++ b/packages/scripts/src/generateIndex.ts @@ -1,5 +1,5 @@ -import fs from 'node:fs/promises'; -import path from 'node:path'; +import { stat, mkdir, writeFile } from 'node:fs/promises'; +import { join } from 'node:path'; import { generatePath } from '@discordjs/api-extractor-utils'; import { ApiDeclaredItem, ApiItem, ApiItemContainerMixin, ApiModel } from '@microsoft/api-extractor-model'; import { DocCodeSpan, DocNode, DocNodeKind, DocParagraph, DocPlainText } from '@microsoft/tsdoc'; @@ -80,12 +80,9 @@ export async function generateIndex(model: ApiModel, packageName: string, tag: s const dir = 'searchIndex'; - if (!(await fs.stat(dir)).isDirectory()) { - await fs.mkdir(dir); + if (!(await stat(dir)).isDirectory()) { + await mkdir(dir); } - await fs.writeFile( - path.join('searchIndex', `${packageName}-${tag}-doc-index.json`), - JSON.stringify(members, undefined, 2), - ); + await writeFile(join('searchIndex', `${packageName}-${tag}-doc-index.json`), JSON.stringify(members, undefined, 2)); } diff --git a/packages/voice/package.json b/packages/voice/package.json index 1873f1c66d95..b1c8fec0e5bb 100644 --- a/packages/voice/package.json +++ b/packages/voice/package.json @@ -53,7 +53,7 @@ "homepage": "https://discord.js.org", "dependencies": { "@types/ws": "^8.5.3", - "discord-api-types": "^0.37.4", + "discord-api-types": "^0.37.5", "prism-media": "^1.3.4", "tslib": "^2.4.0", "ws": "^8.8.1" @@ -64,25 +64,25 @@ "@babel/preset-typescript": "^7.18.6", "@discordjs/docgen": "workspace:^", "@favware/cliff-jumper": "^1.8.7", - "@microsoft/api-extractor": "^7.29.3", - "@types/jest": "^28.1.7", - "@types/node": "^16.11.54", - "@typescript-eslint/eslint-plugin": "^5.34.0", - "@typescript-eslint/parser": "^5.34.0", - "downlevel-dts": "^0.10.0", - "eslint": "^8.22.0", + "@microsoft/api-extractor": "^7.29.5", + "@types/jest": "^28.1.8", + "@types/node": "^16.11.56", + "@typescript-eslint/eslint-plugin": "^5.35.1", + "@typescript-eslint/parser": "^5.35.1", + "downlevel-dts": "^0.10.1", + "eslint": "^8.23.0", "eslint-config-marine": "^9.4.1", "eslint-config-prettier": "^8.5.0", "eslint-import-resolver-typescript": "^3.5.0", "eslint-plugin-import": "^2.26.0", "eslint-plugin-tsdoc": "^0.2.16", - "jest": "^28.1.3", + "jest": "^29.0.1", "jest-websocket-mock": "^2.4.0", "mock-socket": "^9.1.5", "prettier": "^2.7.1", "rollup-plugin-typescript2": "^0.33.0", "tweetnacl": "^1.0.3", - "typescript": "^4.7.4", + "typescript": "^4.8.2", "unbuild": "^0.8.9" }, "engines": { diff --git a/packages/website/package.json b/packages/website/package.json index 81390a3576f1..6bd88543e63f 100644 --- a/packages/website/package.json +++ b/packages/website/package.json @@ -42,12 +42,12 @@ "@discordjs/api-extractor-utils": "workspace:^", "@emotion/react": "^11.10.0", "@emotion/server": "^11.10.0", - "@mantine/core": "^5.2.3", - "@mantine/hooks": "^5.2.3", - "@mantine/next": "^5.2.3", - "@mantine/nprogress": "^5.2.3", - "@mantine/spotlight": "^5.2.3", - "@microsoft/api-extractor-model": "^7.23.1", + "@mantine/core": "^5.2.4", + "@mantine/hooks": "^5.2.4", + "@mantine/next": "^5.2.4", + "@mantine/nprogress": "^5.2.4", + "@mantine/spotlight": "^5.2.4", + "@microsoft/api-extractor-model": "^7.23.3", "@microsoft/tsdoc": "0.14.1", "@microsoft/tsdoc-config": "0.16.1", "@vscode/codicons": "^0.0.32", @@ -69,29 +69,29 @@ "devDependencies": { "@testing-library/react": "^13.3.0", "@testing-library/user-event": "^14.4.3", - "@types/node": "^16.11.54", + "@types/node": "^16.11.56", "@types/react-dom": "^18.0.6", - "@types/react-syntax-highlighter": "^15.5.4", - "@typescript-eslint/eslint-plugin": "^5.34.0", - "@typescript-eslint/parser": "^5.34.0", - "@unocss/cli": "^0.45.12", - "@unocss/preset-web-fonts": "^0.45.12", - "@unocss/reset": "^0.45.12", + "@types/react-syntax-highlighter": "^15.5.5", + "@typescript-eslint/eslint-plugin": "^5.35.1", + "@typescript-eslint/parser": "^5.35.1", + "@unocss/cli": "^0.45.13", + "@unocss/preset-web-fonts": "^0.45.13", + "@unocss/reset": "^0.45.13", "@vitejs/plugin-react": "^2.0.1", "@vitest/coverage-c8": "^0.22.1", "concurrently": "^7.3.0", - "eslint": "^8.22.0", + "eslint": "^8.23.0", "eslint-config-marine": "^9.4.1", "eslint-config-prettier": "^8.5.0", "eslint-import-resolver-typescript": "^3.5.0", "eslint-plugin-import": "^2.26.0", - "eslint-plugin-react": "^7.30.1", + "eslint-plugin-react": "^7.31.1", "eslint-plugin-react-hooks": "^4.6.0", "happy-dom": "^6.0.4", "prettier": "^2.7.1", - "typescript": "^4.7.4", - "unocss": "^0.45.12", - "vercel": "^28.1.1", + "typescript": "^4.8.2", + "unocss": "^0.45.13", + "vercel": "^28.2.0", "vitest": "^0.22.1" }, "engines": { diff --git a/packages/ws/package.json b/packages/ws/package.json index 843e03693642..34e3c65fd8cc 100644 --- a/packages/ws/package.json +++ b/packages/ws/package.json @@ -57,20 +57,20 @@ "@sapphire/async-queue": "^1.5.0", "@types/ws": "^8.5.3", "@vladfrangu/async_event_emitter": "^2.0.1", - "discord-api-types": "^0.37.4", + "discord-api-types": "^0.37.5", "tslib": "^2.4.0", "ws": "^8.8.1" }, "devDependencies": { "@discordjs/docgen": "workspace:^", "@favware/cliff-jumper": "^1.8.7", - "@microsoft/api-extractor": "^7.29.3", - "@types/node": "^16.11.54", - "@typescript-eslint/eslint-plugin": "^5.34.0", - "@typescript-eslint/parser": "^5.34.0", + "@microsoft/api-extractor": "^7.29.5", + "@types/node": "^16.11.56", + "@typescript-eslint/eslint-plugin": "^5.35.1", + "@typescript-eslint/parser": "^5.35.1", "@vitest/coverage-c8": "^0.22.1", - "downlevel-dts": "^0.10.0", - "eslint": "^8.22.0", + "downlevel-dts": "^0.10.1", + "eslint": "^8.23.0", "eslint-config-marine": "^9.4.1", "eslint-config-prettier": "^8.5.0", "eslint-import-resolver-typescript": "^3.5.0", @@ -79,9 +79,9 @@ "mock-socket": "^9.1.5", "prettier": "^2.7.1", "rollup-plugin-typescript2": "^0.33.0", - "typescript": "^4.7.4", + "typescript": "^4.8.2", "unbuild": "^0.8.9", - "undici": "^5.9.1", + "undici": "^5.10.0", "vitest": "^0.22.1", "zlib-sync": "^0.1.7" }, diff --git a/yarn.lock b/yarn.lock index 58837b15d952..5c193ec82027 100644 --- a/yarn.lock +++ b/yarn.lock @@ -737,7 +737,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-jsx@npm:^7.17.12, @babel/plugin-syntax-jsx@npm:^7.18.6": +"@babel/plugin-syntax-jsx@npm:^7.17.12, @babel/plugin-syntax-jsx@npm:^7.18.6, @babel/plugin-syntax-jsx@npm:^7.7.2": version: 7.18.6 resolution: "@babel/plugin-syntax-jsx@npm:7.18.6" dependencies: @@ -1493,14 +1493,14 @@ __metadata: languageName: node linkType: hard -"@commitlint/cli@npm:^17.0.3": - version: 17.0.3 - resolution: "@commitlint/cli@npm:17.0.3" +"@commitlint/cli@npm:^17.1.2": + version: 17.1.2 + resolution: "@commitlint/cli@npm:17.1.2" dependencies: "@commitlint/format": ^17.0.0 - "@commitlint/lint": ^17.0.3 - "@commitlint/load": ^17.0.3 - "@commitlint/read": ^17.0.0 + "@commitlint/lint": ^17.1.0 + "@commitlint/load": ^17.1.2 + "@commitlint/read": ^17.1.0 "@commitlint/types": ^17.0.0 execa: ^5.0.0 lodash: ^4.17.19 @@ -1509,7 +1509,7 @@ __metadata: yargs: ^17.0.0 bin: commitlint: cli.js - checksum: d8319889e0b5290d15c53b1f1f7588cb364d9c062cdf52f56b83e474dfe371a9430a1e3682a7b9668c5173a006d4c4eed0c9747580b44225864ea388014d58dd + checksum: 2f87c560ede9c731574ceb3a4be0d4a12fed60aedef57a567a98b978537105da0aa70d189803f7894ee7a079038f63ee45345ebd29e9d29789d9fdf4c64006d4 languageName: node linkType: hard @@ -1520,22 +1520,22 @@ __metadata: languageName: node linkType: hard -"@commitlint/config-angular@npm:^17.0.3": - version: 17.0.3 - resolution: "@commitlint/config-angular@npm:17.0.3" +"@commitlint/config-angular@npm:^17.1.0": + version: 17.1.0 + resolution: "@commitlint/config-angular@npm:17.1.0" dependencies: "@commitlint/config-angular-type-enum": ^17.0.0 - checksum: 3eeb7158c50721cb583ce2dfb78dc8c39103bd4bc60ec44a7f81efa8383ab7350ebeecaafe72d60ae94de6fe203919438f64e1032f2dfe645f28310785da8b50 + checksum: 6e5293db135ffa0869cf548c0364dcc64e019b61b0f1b576bf51565b523f3c727ce38c8a368c20cd6221e3100e5fd3cd8468c873fa1133fdd5ec4b58ceeba1f6 languageName: node linkType: hard -"@commitlint/config-validator@npm:^17.0.3": - version: 17.0.3 - resolution: "@commitlint/config-validator@npm:17.0.3" +"@commitlint/config-validator@npm:^17.1.0": + version: 17.1.0 + resolution: "@commitlint/config-validator@npm:17.1.0" dependencies: "@commitlint/types": ^17.0.0 ajv: ^8.11.0 - checksum: bc543193bbe132e1fc351bd912434a7214055e8b865ea661b016c6e05c84714d75d8dc54ac6dcc1d53e872ef3665e4a0cf0e3817cff88a01201bf0b37d23744f + checksum: 18b4779837979bf9e240de689c49b9d0dc1e053e677ec13826204594edc052510f37a30bcd8826a054cbcb42a7285fc23e160082b281e0089f18039958ec6a53 languageName: node linkType: hard @@ -1566,44 +1566,45 @@ __metadata: languageName: node linkType: hard -"@commitlint/is-ignored@npm:^17.0.3": - version: 17.0.3 - resolution: "@commitlint/is-ignored@npm:17.0.3" +"@commitlint/is-ignored@npm:^17.1.0": + version: 17.1.0 + resolution: "@commitlint/is-ignored@npm:17.1.0" dependencies: "@commitlint/types": ^17.0.0 semver: 7.3.7 - checksum: 5a0b1921ea03cf8b5fd735b1c0903e6a28b4ff0a730977b8c2afe827feed8162c95264127d60cfe8f03e46be194436a44d4c3049ab07396c9bce2daa730a212c + checksum: d371e7dbf137dee40d06b54f7edd1ac079d6ff696d756fb8b6a9c1a69b12a92295ecd2cf6d7079db229783c510b57a5f88080f486d3810177aef85b098f2464d languageName: node linkType: hard -"@commitlint/lint@npm:^17.0.3": - version: 17.0.3 - resolution: "@commitlint/lint@npm:17.0.3" +"@commitlint/lint@npm:^17.1.0": + version: 17.1.0 + resolution: "@commitlint/lint@npm:17.1.0" dependencies: - "@commitlint/is-ignored": ^17.0.3 + "@commitlint/is-ignored": ^17.1.0 "@commitlint/parse": ^17.0.0 "@commitlint/rules": ^17.0.0 "@commitlint/types": ^17.0.0 - checksum: 5bbb8bc1f3b37fd680700c00a6135a72d6737dac85c79bcaa85a211828e2dff08d742e721255edca859d75996352b20b888ee47bdef5b47fc2718f9fd08d5b53 + checksum: a457461da400d9adc5fa52bdc78c0e97f9b0f3e021f4b74efae2e7aae1b3febea759ef4a952cde2330a247cd48203345b038197ed1fcc750433ac042a4a7217d languageName: node linkType: hard -"@commitlint/load@npm:^17.0.3": - version: 17.0.3 - resolution: "@commitlint/load@npm:17.0.3" +"@commitlint/load@npm:^17.1.2": + version: 17.1.2 + resolution: "@commitlint/load@npm:17.1.2" dependencies: - "@commitlint/config-validator": ^17.0.3 + "@commitlint/config-validator": ^17.1.0 "@commitlint/execute-rule": ^17.0.0 - "@commitlint/resolve-extends": ^17.0.3 + "@commitlint/resolve-extends": ^17.1.0 "@commitlint/types": ^17.0.0 - "@types/node": ">=12" + "@types/node": ^14.0.0 chalk: ^4.1.0 cosmiconfig: ^7.0.0 - cosmiconfig-typescript-loader: ^2.0.0 + cosmiconfig-typescript-loader: ^4.0.0 lodash: ^4.17.19 resolve-from: ^5.0.0 + ts-node: ^10.8.1 typescript: ^4.6.4 - checksum: 786b7064470b4c38577a10910ad725b4371e9f649fbcd4b6018ec4dec2b7f30bc60c6f02807b154ca59f5d5fd347f3d4a46523c9f44e324c05902a2fd29dfb17 + checksum: c01e2d8a5b9b20706d91d7930f960b901450aa1e306d597eb0fca56f60d692bd1f63495914614bd59b0a6bcc51e11036a2291c79beb96ab7e8463034c5c5ecbb languageName: node linkType: hard @@ -1625,29 +1626,30 @@ __metadata: languageName: node linkType: hard -"@commitlint/read@npm:^17.0.0": - version: 17.0.0 - resolution: "@commitlint/read@npm:17.0.0" +"@commitlint/read@npm:^17.1.0": + version: 17.1.0 + resolution: "@commitlint/read@npm:17.1.0" dependencies: "@commitlint/top-level": ^17.0.0 "@commitlint/types": ^17.0.0 fs-extra: ^10.0.0 git-raw-commits: ^2.0.0 - checksum: 5307d9ba06279343280cae4ab64bc6a153a44a24bc8948bbd80f07f5fac1f5b64586d34386ce5f6fd0fd221de4787c21fd82607f44a7969ab499c84bab1f0fa6 + minimist: ^1.2.6 + checksum: b9f728860a17db3e6c2e7872eca788b83192e1b83fbed3c4acdc0a83674573576df40041ca136eec9e19c1d0964efe31cfa98ec3f0907ccdefa80f6b5e7eeca4 languageName: node linkType: hard -"@commitlint/resolve-extends@npm:^17.0.3": - version: 17.0.3 - resolution: "@commitlint/resolve-extends@npm:17.0.3" +"@commitlint/resolve-extends@npm:^17.1.0": + version: 17.1.0 + resolution: "@commitlint/resolve-extends@npm:17.1.0" dependencies: - "@commitlint/config-validator": ^17.0.3 + "@commitlint/config-validator": ^17.1.0 "@commitlint/types": ^17.0.0 import-fresh: ^3.0.0 lodash: ^4.17.19 resolve-from: ^5.0.0 resolve-global: ^1.0.0 - checksum: 384fc59a5a8f3da2b4551b92b2734f8d22c39ba389ca31df2f7a8ea1e68e8c15b137faf4ae20529a7b826ca6a7f5e5cd30ab2c903f9d65f74d0b43dcac5f8e0c + checksum: cc50ed7ca987dc9e308d49b8620d014a84b26f2354b247dddd74e40406c3554946c4565d978e63538527fa46c6be2ca73c05b29e5c6d6f4c4c6f97bd1d0d29fb languageName: node linkType: hard @@ -1737,11 +1739,11 @@ __metadata: resolution: "@discordjs/actions@workspace:packages/actions" dependencies: "@actions/core": ^1.9.1 - "@types/node": ^16.11.54 - "@typescript-eslint/eslint-plugin": ^5.34.0 - "@typescript-eslint/parser": ^5.34.0 + "@types/node": ^16.11.56 + "@typescript-eslint/eslint-plugin": ^5.35.1 + "@typescript-eslint/parser": ^5.35.1 "@vitest/coverage-c8": ^0.22.1 - eslint: ^8.22.0 + eslint: ^8.23.0 eslint-config-marine: ^9.4.1 eslint-config-prettier: ^8.5.0 eslint-import-resolver-typescript: ^3.5.0 @@ -1749,7 +1751,7 @@ __metadata: prettier: ^2.7.1 rollup-plugin-typescript2: ^0.33.0 tslib: ^2.4.0 - typescript: ^4.7.4 + typescript: ^4.8.2 unbuild: ^0.8.9 vitest: ^0.22.1 languageName: unknown @@ -1759,13 +1761,12 @@ __metadata: version: 0.0.0-use.local resolution: "@discordjs/api-extractor-utils@workspace:packages/api-extractor-utils" dependencies: - "@favware/cliff-jumper": ^1.8.7 "@microsoft/api-extractor-model": ^7.23.3 "@microsoft/tsdoc": ^0.14.1 - "@types/node": ^16.11.54 - "@typescript-eslint/eslint-plugin": ^5.34.0 - "@typescript-eslint/parser": ^5.34.0 - eslint: ^8.22.0 + "@types/node": ^16.11.56 + "@typescript-eslint/eslint-plugin": ^5.35.1 + "@typescript-eslint/parser": ^5.35.1 + eslint: ^8.23.0 eslint-config-marine: ^9.4.1 eslint-config-prettier: ^8.5.0 eslint-import-resolver-typescript: ^3.5.0 @@ -1773,7 +1774,7 @@ __metadata: eslint-plugin-tsdoc: ^0.2.16 prettier: ^2.7.1 rollup-plugin-typescript2: ^0.33.0 - typescript: ^4.7.4 + typescript: ^4.8.2 unbuild: ^0.8.9 languageName: unknown linkType: soft @@ -1784,15 +1785,15 @@ __metadata: dependencies: "@discordjs/docgen": "workspace:^" "@favware/cliff-jumper": ^1.8.7 - "@microsoft/api-extractor": ^7.29.3 - "@sapphire/shapeshift": ^3.5.1 - "@types/node": ^16.11.54 - "@typescript-eslint/eslint-plugin": ^5.34.0 - "@typescript-eslint/parser": ^5.34.0 + "@microsoft/api-extractor": ^7.29.5 + "@sapphire/shapeshift": ^3.6.0 + "@types/node": ^16.11.56 + "@typescript-eslint/eslint-plugin": ^5.35.1 + "@typescript-eslint/parser": ^5.35.1 "@vitest/coverage-c8": ^0.22.1 - discord-api-types: ^0.37.4 - downlevel-dts: ^0.10.0 - eslint: ^8.22.0 + discord-api-types: ^0.37.5 + downlevel-dts: ^0.10.1 + eslint: ^8.23.0 eslint-config-marine: ^9.4.1 eslint-config-prettier: ^8.5.0 eslint-import-resolver-typescript: ^3.5.0 @@ -1803,7 +1804,7 @@ __metadata: rollup-plugin-typescript2: ^0.33.0 ts-mixer: ^6.0.1 tslib: ^2.4.0 - typescript: ^4.7.4 + typescript: ^4.8.2 unbuild: ^0.8.9 vitest: ^0.22.1 languageName: unknown @@ -1815,13 +1816,13 @@ __metadata: dependencies: "@discordjs/docgen": "workspace:^" "@favware/cliff-jumper": ^1.8.7 - "@microsoft/api-extractor": ^7.29.3 - "@types/node": ^16.11.54 - "@typescript-eslint/eslint-plugin": ^5.34.0 - "@typescript-eslint/parser": ^5.34.0 + "@microsoft/api-extractor": ^7.29.5 + "@types/node": ^16.11.56 + "@typescript-eslint/eslint-plugin": ^5.35.1 + "@typescript-eslint/parser": ^5.35.1 "@vitest/coverage-c8": ^0.22.1 - downlevel-dts: ^0.10.0 - eslint: ^8.22.0 + downlevel-dts: ^0.10.1 + eslint: ^8.23.0 eslint-config-marine: ^9.4.1 eslint-config-prettier: ^8.5.0 eslint-import-resolver-typescript: ^3.5.0 @@ -1829,7 +1830,7 @@ __metadata: eslint-plugin-tsdoc: ^0.2.16 prettier: ^2.7.1 rollup-plugin-typescript2: ^0.33.0 - typescript: ^4.7.4 + typescript: ^4.8.2 unbuild: ^0.8.9 vitest: ^0.22.1 languageName: unknown @@ -1839,8 +1840,8 @@ __metadata: version: 0.0.0-use.local resolution: "@discordjs/discord.js@workspace:." dependencies: - "@commitlint/cli": ^17.0.3 - "@commitlint/config-angular": ^17.0.3 + "@commitlint/cli": ^17.1.2 + "@commitlint/config-angular": ^17.1.0 "@favware/cliff-jumper": ^1.8.7 "@favware/npm-deprecate": ^1.0.5 "@types/is-ci": ^3.0.0 @@ -1850,7 +1851,7 @@ __metadata: is-ci: ^3.0.1 lint-staged: ^13.0.3 turbo: ^1.4.3 - typescript: ^4.7.4 + typescript: ^4.8.2 languageName: unknown linkType: soft @@ -1860,11 +1861,11 @@ __metadata: dependencies: "@favware/cliff-jumper": ^1.8.7 "@types/jsdoc-to-markdown": ^7.0.3 - "@types/node": ^16.11.54 - "@typescript-eslint/eslint-plugin": ^5.34.0 - "@typescript-eslint/parser": ^5.34.0 + "@types/node": ^16.11.56 + "@typescript-eslint/eslint-plugin": ^5.35.1 + "@typescript-eslint/parser": ^5.35.1 commander: ^9.4.0 - eslint: ^8.22.0 + eslint: ^8.23.0 eslint-config-marine: ^9.4.1 eslint-config-prettier: ^8.5.0 eslint-import-resolver-typescript: ^3.5.0 @@ -1873,8 +1874,8 @@ __metadata: prettier: ^2.7.1 rollup-plugin-typescript2: ^0.33.0 tslib: ^2.4.0 - typedoc: ^0.23.10 - typescript: ^4.7.4 + typedoc: ^0.23.11 + typescript: ^4.8.2 unbuild: ^0.8.9 bin: docgen: ./dist/cli.cjs @@ -1887,10 +1888,10 @@ __metadata: dependencies: "@discordjs/proxy": ^1.1.0 "@discordjs/rest": ^1.1.0 - "@types/node": ^16.11.54 - "@typescript-eslint/eslint-plugin": ^5.34.0 - "@typescript-eslint/parser": ^5.34.0 - eslint: ^8.22.0 + "@types/node": ^16.11.56 + "@typescript-eslint/eslint-plugin": ^5.35.1 + "@typescript-eslint/parser": ^5.35.1 + eslint: ^8.23.0 eslint-config-marine: ^9.4.1 eslint-config-prettier: ^8.5.0 eslint-import-resolver-typescript: ^3.5.0 @@ -1898,7 +1899,7 @@ __metadata: prettier: ^2.7.1 rollup-plugin-typescript2: ^0.33.0 tslib: ^2.4.0 - typescript: ^4.7.4 + typescript: ^4.8.2 unbuild: ^0.8.9 languageName: unknown linkType: soft @@ -1910,14 +1911,14 @@ __metadata: "@discordjs/docgen": "workspace:^" "@discordjs/rest": ^1.0.0 "@favware/cliff-jumper": ^1.8.7 - "@microsoft/api-extractor": ^7.29.3 - "@types/node": ^16.11.54 + "@microsoft/api-extractor": ^7.29.5 + "@types/node": ^16.11.56 "@types/supertest": ^2.0.12 - "@typescript-eslint/eslint-plugin": ^5.34.0 - "@typescript-eslint/parser": ^5.34.0 + "@typescript-eslint/eslint-plugin": ^5.35.1 + "@typescript-eslint/parser": ^5.35.1 "@vitest/coverage-c8": ^0.22.1 - downlevel-dts: ^0.10.0 - eslint: ^8.22.0 + downlevel-dts: ^0.10.1 + eslint: ^8.23.0 eslint-config-marine: ^9.4.1 eslint-config-prettier: ^8.5.0 eslint-import-resolver-typescript: ^3.5.0 @@ -1926,9 +1927,9 @@ __metadata: rollup-plugin-typescript2: ^0.33.0 supertest: ^6.2.4 tslib: ^2.4.0 - typescript: ^4.7.4 + typescript: ^4.8.2 unbuild: ^0.8.9 - undici: ^5.9.1 + undici: ^5.10.0 vitest: ^0.22.1 languageName: unknown linkType: soft @@ -1940,28 +1941,28 @@ __metadata: "@discordjs/collection": "workspace:^" "@discordjs/docgen": "workspace:^" "@favware/cliff-jumper": ^1.8.7 - "@microsoft/api-extractor": ^7.29.3 + "@microsoft/api-extractor": ^7.29.5 "@sapphire/async-queue": ^1.5.0 "@sapphire/snowflake": ^3.2.2 - "@types/node": ^16.11.54 - "@typescript-eslint/eslint-plugin": ^5.34.0 - "@typescript-eslint/parser": ^5.34.0 + "@types/node": ^16.11.56 + "@typescript-eslint/eslint-plugin": ^5.35.1 + "@typescript-eslint/parser": ^5.35.1 "@vitest/coverage-c8": ^0.22.1 - discord-api-types: ^0.37.4 - downlevel-dts: ^0.10.0 - eslint: ^8.22.0 + discord-api-types: ^0.37.5 + downlevel-dts: ^0.10.1 + eslint: ^8.23.0 eslint-config-marine: ^9.4.1 eslint-config-prettier: ^8.5.0 eslint-import-resolver-typescript: ^3.5.0 eslint-plugin-import: ^2.26.0 eslint-plugin-tsdoc: ^0.2.16 - file-type: ^17.1.6 + file-type: ^18.0.0 prettier: ^2.7.1 rollup-plugin-typescript2: ^0.33.0 tslib: ^2.4.0 - typescript: ^4.7.4 + typescript: ^4.8.2 unbuild: ^0.8.9 - undici: ^5.9.1 + undici: ^5.10.0 vitest: ^0.22.1 languageName: unknown linkType: soft @@ -1973,12 +1974,12 @@ __metadata: "@discordjs/api-extractor-utils": "workspace:^" "@microsoft/api-extractor-model": ^7.23.3 "@microsoft/tsdoc": ^0.14.1 - "@types/node": ^16.11.54 - "@typescript-eslint/eslint-plugin": ^5.34.0 - "@typescript-eslint/parser": ^5.34.0 + "@types/node": ^16.11.56 + "@typescript-eslint/eslint-plugin": ^5.35.1 + "@typescript-eslint/parser": ^5.35.1 "@vitest/coverage-c8": ^0.22.1 commander: ^9.4.0 - eslint: ^8.22.0 + eslint: ^8.23.0 eslint-config-marine: ^9.4.1 eslint-config-prettier: ^8.5.0 eslint-import-resolver-typescript: ^3.5.0 @@ -1986,7 +1987,7 @@ __metadata: prettier: ^2.7.1 rollup-plugin-typescript2: ^0.33.0 tslib: ^2.4.0 - typescript: ^4.7.4 + typescript: ^4.8.2 unbuild: ^0.8.9 vitest: ^0.22.1 languageName: unknown @@ -2001,21 +2002,21 @@ __metadata: "@babel/preset-typescript": ^7.18.6 "@discordjs/docgen": "workspace:^" "@favware/cliff-jumper": ^1.8.7 - "@microsoft/api-extractor": ^7.29.3 - "@types/jest": ^28.1.7 - "@types/node": ^16.11.54 + "@microsoft/api-extractor": ^7.29.5 + "@types/jest": ^28.1.8 + "@types/node": ^16.11.56 "@types/ws": ^8.5.3 - "@typescript-eslint/eslint-plugin": ^5.34.0 - "@typescript-eslint/parser": ^5.34.0 - discord-api-types: ^0.37.4 - downlevel-dts: ^0.10.0 - eslint: ^8.22.0 + "@typescript-eslint/eslint-plugin": ^5.35.1 + "@typescript-eslint/parser": ^5.35.1 + discord-api-types: ^0.37.5 + downlevel-dts: ^0.10.1 + eslint: ^8.23.0 eslint-config-marine: ^9.4.1 eslint-config-prettier: ^8.5.0 eslint-import-resolver-typescript: ^3.5.0 eslint-plugin-import: ^2.26.0 eslint-plugin-tsdoc: ^0.2.16 - jest: ^28.1.3 + jest: ^29.0.1 jest-websocket-mock: ^2.4.0 mock-socket: ^9.1.5 prettier: ^2.7.1 @@ -2023,7 +2024,7 @@ __metadata: rollup-plugin-typescript2: ^0.33.0 tslib: ^2.4.0 tweetnacl: ^1.0.3 - typescript: ^4.7.4 + typescript: ^4.8.2 unbuild: ^0.8.9 ws: ^8.8.1 languageName: unknown @@ -2036,34 +2037,34 @@ __metadata: "@discordjs/api-extractor-utils": "workspace:^" "@emotion/react": ^11.10.0 "@emotion/server": ^11.10.0 - "@mantine/core": ^5.2.3 - "@mantine/hooks": ^5.2.3 - "@mantine/next": ^5.2.3 - "@mantine/nprogress": ^5.2.3 - "@mantine/spotlight": ^5.2.3 - "@microsoft/api-extractor-model": ^7.23.1 + "@mantine/core": ^5.2.4 + "@mantine/hooks": ^5.2.4 + "@mantine/next": ^5.2.4 + "@mantine/nprogress": ^5.2.4 + "@mantine/spotlight": ^5.2.4 + "@microsoft/api-extractor-model": ^7.23.3 "@microsoft/tsdoc": 0.14.1 "@microsoft/tsdoc-config": 0.16.1 "@testing-library/react": ^13.3.0 "@testing-library/user-event": ^14.4.3 - "@types/node": ^16.11.54 + "@types/node": ^16.11.56 "@types/react-dom": ^18.0.6 - "@types/react-syntax-highlighter": ^15.5.4 - "@typescript-eslint/eslint-plugin": ^5.34.0 - "@typescript-eslint/parser": ^5.34.0 - "@unocss/cli": ^0.45.12 - "@unocss/preset-web-fonts": ^0.45.12 - "@unocss/reset": ^0.45.12 + "@types/react-syntax-highlighter": ^15.5.5 + "@typescript-eslint/eslint-plugin": ^5.35.1 + "@typescript-eslint/parser": ^5.35.1 + "@unocss/cli": ^0.45.13 + "@unocss/preset-web-fonts": ^0.45.13 + "@unocss/reset": ^0.45.13 "@vitejs/plugin-react": ^2.0.1 "@vitest/coverage-c8": ^0.22.1 "@vscode/codicons": ^0.0.32 concurrently: ^7.3.0 - eslint: ^8.22.0 + eslint: ^8.23.0 eslint-config-marine: ^9.4.1 eslint-config-prettier: ^8.5.0 eslint-import-resolver-typescript: ^3.5.0 eslint-plugin-import: ^2.26.0 - eslint-plugin-react: ^7.30.1 + eslint-plugin-react: ^7.31.1 eslint-plugin-react-hooks: ^4.6.0 happy-dom: ^6.0.4 next: ^12.2.5 @@ -2081,9 +2082,9 @@ __metadata: sharp: ^0.30.7 shiki: ^0.11.1 swr: ^1.3.0 - typescript: ^4.7.4 - unocss: ^0.45.12 - vercel: ^28.1.1 + typescript: ^4.8.2 + unocss: ^0.45.13 + vercel: ^28.2.0 vitest: ^0.22.1 languageName: unknown linkType: soft @@ -2096,17 +2097,17 @@ __metadata: "@discordjs/docgen": "workspace:^" "@discordjs/rest": "workspace:^" "@favware/cliff-jumper": ^1.8.7 - "@microsoft/api-extractor": ^7.29.3 + "@microsoft/api-extractor": ^7.29.5 "@sapphire/async-queue": ^1.5.0 - "@types/node": ^16.11.54 + "@types/node": ^16.11.56 "@types/ws": ^8.5.3 - "@typescript-eslint/eslint-plugin": ^5.34.0 - "@typescript-eslint/parser": ^5.34.0 + "@typescript-eslint/eslint-plugin": ^5.35.1 + "@typescript-eslint/parser": ^5.35.1 "@vitest/coverage-c8": ^0.22.1 "@vladfrangu/async_event_emitter": ^2.0.1 - discord-api-types: ^0.37.4 - downlevel-dts: ^0.10.0 - eslint: ^8.22.0 + discord-api-types: ^0.37.5 + downlevel-dts: ^0.10.1 + eslint: ^8.23.0 eslint-config-marine: ^9.4.1 eslint-config-prettier: ^8.5.0 eslint-import-resolver-typescript: ^3.5.0 @@ -2116,9 +2117,9 @@ __metadata: prettier: ^2.7.1 rollup-plugin-typescript2: ^0.33.0 tslib: ^2.4.0 - typescript: ^4.7.4 + typescript: ^4.8.2 unbuild: ^0.8.9 - undici: ^5.9.1 + undici: ^5.10.0 vitest: ^0.22.1 ws: ^8.8.1 zlib-sync: ^0.1.7 @@ -2301,20 +2302,20 @@ __metadata: languageName: node linkType: hard -"@eslint/eslintrc@npm:^1.3.0": - version: 1.3.0 - resolution: "@eslint/eslintrc@npm:1.3.0" +"@eslint/eslintrc@npm:^1.3.1": + version: 1.3.1 + resolution: "@eslint/eslintrc@npm:1.3.1" dependencies: ajv: ^6.12.4 debug: ^4.3.2 - espree: ^9.3.2 + espree: ^9.4.0 globals: ^13.15.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: a1e734ad31a8b5328dce9f479f185fd4fc83dd7f06c538e1fa457fd8226b89602a55cc6458cd52b29573b01cdfaf42331be8cfc1fec732570086b591f4ed6515 + checksum: 9844dcc58a44399649926d5a17a2d53d529b80d3e8c3e9d0964ae198bac77ee6bb1cf44940f30cd9c2e300f7568ec82500be42ace6cacefb08aebf9905fe208e languageName: node linkType: hard @@ -2425,6 +2426,13 @@ __metadata: languageName: node linkType: hard +"@humanwhocodes/module-importer@npm:^1.0.1": + version: 1.0.1 + resolution: "@humanwhocodes/module-importer@npm:1.0.1" + checksum: 0fd22007db8034a2cdf2c764b140d37d9020bbfce8a49d3ec5c05290e77d4b0263b1b972b752df8c89e5eaa94073408f2b7d977aed131faf6cf396ebb5d7fb61 + languageName: node + linkType: hard + "@humanwhocodes/object-schema@npm:^1.2.1": version: 1.2.1 resolution: "@humanwhocodes/object-schema@npm:1.2.1" @@ -2480,51 +2488,50 @@ __metadata: languageName: node linkType: hard -"@jest/console@npm:^28.1.3": - version: 28.1.3 - resolution: "@jest/console@npm:28.1.3" +"@jest/console@npm:^29.0.1": + version: 29.0.1 + resolution: "@jest/console@npm:29.0.1" dependencies: - "@jest/types": ^28.1.3 + "@jest/types": ^29.0.1 "@types/node": "*" chalk: ^4.0.0 - jest-message-util: ^28.1.3 - jest-util: ^28.1.3 + jest-message-util: ^29.0.1 + jest-util: ^29.0.1 slash: ^3.0.0 - checksum: fe50d98d26d02ce2901c76dff4bd5429a33c13affb692c9ebf8a578ca2f38a5dd854363d40d6c394f215150791fd1f692afd8e730a4178dda24107c8dfd9750a + checksum: a6c9424f1e398d91c7746001fceb7ce93ae6cd359df7241ba25020f0fe0b0be348b28de89bc0fdb552cea583cafe8cefd408bb8d93d045dba7f47b625e7456ea languageName: node linkType: hard -"@jest/core@npm:^28.1.3": - version: 28.1.3 - resolution: "@jest/core@npm:28.1.3" +"@jest/core@npm:^29.0.1": + version: 29.0.1 + resolution: "@jest/core@npm:29.0.1" dependencies: - "@jest/console": ^28.1.3 - "@jest/reporters": ^28.1.3 - "@jest/test-result": ^28.1.3 - "@jest/transform": ^28.1.3 - "@jest/types": ^28.1.3 + "@jest/console": ^29.0.1 + "@jest/reporters": ^29.0.1 + "@jest/test-result": ^29.0.1 + "@jest/transform": ^29.0.1 + "@jest/types": ^29.0.1 "@types/node": "*" ansi-escapes: ^4.2.1 chalk: ^4.0.0 ci-info: ^3.2.0 exit: ^0.1.2 graceful-fs: ^4.2.9 - jest-changed-files: ^28.1.3 - jest-config: ^28.1.3 - jest-haste-map: ^28.1.3 - jest-message-util: ^28.1.3 - jest-regex-util: ^28.0.2 - jest-resolve: ^28.1.3 - jest-resolve-dependencies: ^28.1.3 - jest-runner: ^28.1.3 - jest-runtime: ^28.1.3 - jest-snapshot: ^28.1.3 - jest-util: ^28.1.3 - jest-validate: ^28.1.3 - jest-watcher: ^28.1.3 + jest-changed-files: ^29.0.0 + jest-config: ^29.0.1 + jest-haste-map: ^29.0.1 + jest-message-util: ^29.0.1 + jest-regex-util: ^29.0.0 + jest-resolve: ^29.0.1 + jest-resolve-dependencies: ^29.0.1 + jest-runner: ^29.0.1 + jest-runtime: ^29.0.1 + jest-snapshot: ^29.0.1 + jest-util: ^29.0.1 + jest-validate: ^29.0.1 + jest-watcher: ^29.0.1 micromatch: ^4.0.4 - pretty-format: ^28.1.3 - rimraf: ^3.0.0 + pretty-format: ^29.0.1 slash: ^3.0.0 strip-ansi: ^6.0.0 peerDependencies: @@ -2532,19 +2539,19 @@ __metadata: peerDependenciesMeta: node-notifier: optional: true - checksum: cb79f34bafc4637e7130df12257f5b29075892a2be2c7f45c6d4c0420853e80b5dae11016e652530eb234f4c44c00910cdca3c2cd86275721860725073f7d9b4 + checksum: da8eb20fbe9ab53fe7b554df2443510f6c55e29823c820bbbc5f197b9a1bc899bf3b03fddcb8cc08b3b9ffd43cbf50d38c4e3724e3347a8ce82a7303947a8a50 languageName: node linkType: hard -"@jest/environment@npm:^28.1.3": - version: 28.1.3 - resolution: "@jest/environment@npm:28.1.3" +"@jest/environment@npm:^29.0.1": + version: 29.0.1 + resolution: "@jest/environment@npm:29.0.1" dependencies: - "@jest/fake-timers": ^28.1.3 - "@jest/types": ^28.1.3 + "@jest/fake-timers": ^29.0.1 + "@jest/types": ^29.0.1 "@types/node": "*" - jest-mock: ^28.1.3 - checksum: 14c496b84aef951df33128cea68988e9de43b2e9d62be9f9c4308d4ac307fa345642813679f80d0a4cedeb900cf6f0b6bb2b92ce089528e8721f72295fdc727f + jest-mock: ^29.0.1 + checksum: d0713707b08ab995360133a6746d27d2695c034a1a74a53c5c863490f88ab9dbd05f10038fec776a6540148e7cba8277c6cace776ae30435c456f82bda1f4c3a languageName: node linkType: hard @@ -2557,51 +2564,61 @@ __metadata: languageName: node linkType: hard -"@jest/expect@npm:^28.1.3": - version: 28.1.3 - resolution: "@jest/expect@npm:28.1.3" +"@jest/expect-utils@npm:^29.0.1": + version: 29.0.1 + resolution: "@jest/expect-utils@npm:29.0.1" dependencies: - expect: ^28.1.3 - jest-snapshot: ^28.1.3 - checksum: 4197f6fdddc33dc45ba4e838f992fc61839c421d7aed0dfe665ef9c2f172bb1df8a8cac9cecee272b40e744a326da521d5e182709fe82a0b936055bfffa3b473 + jest-get-type: ^29.0.0 + checksum: d2cfe72f91fcb86a3f2ffc7c09e02cba7e9da0c41705a98e7fbed016b2141ab29764b15615806ece4ed6a21b60252f024b121be68c2bd66d055305a1d34b10f8 languageName: node linkType: hard -"@jest/fake-timers@npm:^28.1.3": - version: 28.1.3 - resolution: "@jest/fake-timers@npm:28.1.3" +"@jest/expect@npm:^29.0.1": + version: 29.0.1 + resolution: "@jest/expect@npm:29.0.1" dependencies: - "@jest/types": ^28.1.3 + expect: ^29.0.1 + jest-snapshot: ^29.0.1 + checksum: 408a0037620ca75c6f91390fcfbb820076b39ad4bd3db911403895ba28195621f3a6169c99e27adc4394577ea9ec88245af71384b796ca6736d931e78410a95c + languageName: node + linkType: hard + +"@jest/fake-timers@npm:^29.0.1": + version: 29.0.1 + resolution: "@jest/fake-timers@npm:29.0.1" + dependencies: + "@jest/types": ^29.0.1 "@sinonjs/fake-timers": ^9.1.2 "@types/node": "*" - jest-message-util: ^28.1.3 - jest-mock: ^28.1.3 - jest-util: ^28.1.3 - checksum: cec14d5b14913a54dce64a62912c5456235f5d90b509ceae19c727565073114dae1aaf960ac6be96b3eb94789a3a758b96b72c8fca7e49a6ccac415fbc0321e1 + jest-message-util: ^29.0.1 + jest-mock: ^29.0.1 + jest-util: ^29.0.1 + checksum: 6f4e40837b9330643bbf80a1b69a1872c53bb7c02294fb3d29baf75120aa34fc4b736ab98c64f45d81a0df0eca56d2099b2b0f6bcc32135646043ed06373e76f languageName: node linkType: hard -"@jest/globals@npm:^28.1.3": - version: 28.1.3 - resolution: "@jest/globals@npm:28.1.3" +"@jest/globals@npm:^29.0.1": + version: 29.0.1 + resolution: "@jest/globals@npm:29.0.1" dependencies: - "@jest/environment": ^28.1.3 - "@jest/expect": ^28.1.3 - "@jest/types": ^28.1.3 - checksum: 3504bb23de629d466c6f2b6b75d2e1c1b10caccbbcfb7eaa82d22cc37711c8e364c243929581184846605c023b475ea6c42c2e3ea5994429a988d8d527af32cd + "@jest/environment": ^29.0.1 + "@jest/expect": ^29.0.1 + "@jest/types": ^29.0.1 + jest-mock: ^29.0.1 + checksum: 5a0f50e3bacb1b9f298be4f49f36df8fc9d656fe5f01e38fe524955a6893b1aeffad219e5001dd0ef05975e497d27660d9c335bb0c994c8c688a777344a50bda languageName: node linkType: hard -"@jest/reporters@npm:^28.1.3": - version: 28.1.3 - resolution: "@jest/reporters@npm:28.1.3" +"@jest/reporters@npm:^29.0.1": + version: 29.0.1 + resolution: "@jest/reporters@npm:29.0.1" dependencies: "@bcoe/v8-coverage": ^0.2.3 - "@jest/console": ^28.1.3 - "@jest/test-result": ^28.1.3 - "@jest/transform": ^28.1.3 - "@jest/types": ^28.1.3 - "@jridgewell/trace-mapping": ^0.3.13 + "@jest/console": ^29.0.1 + "@jest/test-result": ^29.0.1 + "@jest/transform": ^29.0.1 + "@jest/types": ^29.0.1 + "@jridgewell/trace-mapping": ^0.3.15 "@types/node": "*" chalk: ^4.0.0 collect-v8-coverage: ^1.0.0 @@ -2613,9 +2630,9 @@ __metadata: istanbul-lib-report: ^3.0.0 istanbul-lib-source-maps: ^4.0.0 istanbul-reports: ^3.1.3 - jest-message-util: ^28.1.3 - jest-util: ^28.1.3 - jest-worker: ^28.1.3 + jest-message-util: ^29.0.1 + jest-util: ^29.0.1 + jest-worker: ^29.0.1 slash: ^3.0.0 string-length: ^4.0.1 strip-ansi: ^6.0.0 @@ -2626,7 +2643,7 @@ __metadata: peerDependenciesMeta: node-notifier: optional: true - checksum: a7440887ce837922cbeaa64c3232eb48aae02aa9123f29fc4280ad3e1afe4b35dcba171ba1d5fd219037c396c5152d9c2d102cff1798dd5ae3bd33ac4759ae0a + checksum: 33032410e926e229702b3ba8f581d510fef38b53f368bedcf30c761a0fe887d4faff56497e04664760a84f2dcf49f1fb206e392872e96a3b37f9f27af31ad54a languageName: node linkType: hard @@ -2639,61 +2656,70 @@ __metadata: languageName: node linkType: hard -"@jest/source-map@npm:^28.1.2": - version: 28.1.2 - resolution: "@jest/source-map@npm:28.1.2" +"@jest/schemas@npm:^29.0.0": + version: 29.0.0 + resolution: "@jest/schemas@npm:29.0.0" dependencies: - "@jridgewell/trace-mapping": ^0.3.13 + "@sinclair/typebox": ^0.24.1 + checksum: 41355c78f09eb1097e57a3c5d0ca11c9099e235e01ea5fa4e3953562a79a6a9296c1d300f1ba50ca75236048829e056b00685cd2f1ff8285e56fd2ce01249acb + languageName: node + linkType: hard + +"@jest/source-map@npm:^29.0.0": + version: 29.0.0 + resolution: "@jest/source-map@npm:29.0.0" + dependencies: + "@jridgewell/trace-mapping": ^0.3.15 callsites: ^3.0.0 graceful-fs: ^4.2.9 - checksum: b82a5c2e93d35d86779c61a02ccb967d1b5cd2e9dd67d26d8add44958637cbbb99daeeb8129c7653389cb440dc2a2f5ae4d2183dc453c67669ff98938b775a3a + checksum: dd97bc5826cf68d6eb5565383816332f800476232fd12800bd027a259cbf3ef216f1633405f3ad0861dde3b12a7886301798c078b334f6d3012044d43abcf4f6 languageName: node linkType: hard -"@jest/test-result@npm:^28.1.3": - version: 28.1.3 - resolution: "@jest/test-result@npm:28.1.3" +"@jest/test-result@npm:^29.0.1": + version: 29.0.1 + resolution: "@jest/test-result@npm:29.0.1" dependencies: - "@jest/console": ^28.1.3 - "@jest/types": ^28.1.3 + "@jest/console": ^29.0.1 + "@jest/types": ^29.0.1 "@types/istanbul-lib-coverage": ^2.0.0 collect-v8-coverage: ^1.0.0 - checksum: 957a5dd2fd2e84aabe86698f93c0825e96128ccaa23abf548b159a9b08ac74e4bde7acf4bec48479243dbdb27e4ea1b68c171846d21fb64855c6b55cead9ef27 + checksum: cb012a42f9fe82ad08e4b9f7d9626d0a04c21f43c932ea9d2373c36ceb974c87f0a1d2fa825a814fa64175073bf9c8493f250ac8f7c9bba470e43f92040ccfb7 languageName: node linkType: hard -"@jest/test-sequencer@npm:^28.1.3": - version: 28.1.3 - resolution: "@jest/test-sequencer@npm:28.1.3" +"@jest/test-sequencer@npm:^29.0.1": + version: 29.0.1 + resolution: "@jest/test-sequencer@npm:29.0.1" dependencies: - "@jest/test-result": ^28.1.3 + "@jest/test-result": ^29.0.1 graceful-fs: ^4.2.9 - jest-haste-map: ^28.1.3 + jest-haste-map: ^29.0.1 slash: ^3.0.0 - checksum: 13f8905e6d1ec8286694146f7be3cf90eff801bbdea5e5c403e6881444bb390ed15494c7b9948aa94bd7e9c9a851e0d3002ed6e7371d048b478596e5b23df953 + checksum: 151c35636b1fa5e1676e7deef234e556a09fd08cc91363dae18fe608aeb547f9889c48f0602d4635a2ee872170633e2330c08c0a018959897e49ea747a3d431a languageName: node linkType: hard -"@jest/transform@npm:^28.1.3": - version: 28.1.3 - resolution: "@jest/transform@npm:28.1.3" +"@jest/transform@npm:^29.0.1": + version: 29.0.1 + resolution: "@jest/transform@npm:29.0.1" dependencies: "@babel/core": ^7.11.6 - "@jest/types": ^28.1.3 - "@jridgewell/trace-mapping": ^0.3.13 + "@jest/types": ^29.0.1 + "@jridgewell/trace-mapping": ^0.3.15 babel-plugin-istanbul: ^6.1.1 chalk: ^4.0.0 convert-source-map: ^1.4.0 - fast-json-stable-stringify: ^2.0.0 + fast-json-stable-stringify: ^2.1.0 graceful-fs: ^4.2.9 - jest-haste-map: ^28.1.3 - jest-regex-util: ^28.0.2 - jest-util: ^28.1.3 + jest-haste-map: ^29.0.1 + jest-regex-util: ^29.0.0 + jest-util: ^29.0.1 micromatch: ^4.0.4 pirates: ^4.0.4 slash: ^3.0.0 write-file-atomic: ^4.0.1 - checksum: dadf618936e0aa84342f07f532801d5bed43cdf95d1417b929e4f8782c872cff1adc84096d5a287a796d0039a2691c06d8450cce5a713a8b52fbb9f872a1e760 + checksum: dcd1e2c46b663f90f9bf536669d142af7638b06b36e7ffa0901ae18cf3b4c1d4898189b6a08c30604dfbb7d8bcee63e166827696fa96e3406ae400ae863457e0 languageName: node linkType: hard @@ -2711,6 +2737,20 @@ __metadata: languageName: node linkType: hard +"@jest/types@npm:^29.0.1": + version: 29.0.1 + resolution: "@jest/types@npm:29.0.1" + dependencies: + "@jest/schemas": ^29.0.0 + "@types/istanbul-lib-coverage": ^2.0.0 + "@types/istanbul-reports": ^3.0.0 + "@types/node": "*" + "@types/yargs": ^17.0.8 + chalk: ^4.0.0 + checksum: 50a3658d69cad32fe270ef22e9a21cbad38c387d0b17cb1f23b144f9c9081e81623feda940b6b23459df656f88153ffe7765f36cd3bc3f3b2d8cd0ca246d75b2 + languageName: node + linkType: hard + "@jridgewell/gen-mapping@npm:^0.1.0": version: 0.1.1 resolution: "@jridgewell/gen-mapping@npm:0.1.1" @@ -2763,7 +2803,7 @@ __metadata: languageName: node linkType: hard -"@jridgewell/trace-mapping@npm:^0.3.12, @jridgewell/trace-mapping@npm:^0.3.13, @jridgewell/trace-mapping@npm:^0.3.9": +"@jridgewell/trace-mapping@npm:^0.3.12, @jridgewell/trace-mapping@npm:^0.3.15, @jridgewell/trace-mapping@npm:^0.3.9": version: 0.3.15 resolution: "@jridgewell/trace-mapping@npm:0.3.15" dependencies: @@ -2773,92 +2813,92 @@ __metadata: languageName: node linkType: hard -"@mantine/core@npm:^5.2.3": - version: 5.2.3 - resolution: "@mantine/core@npm:5.2.3" +"@mantine/core@npm:^5.2.4": + version: 5.2.4 + resolution: "@mantine/core@npm:5.2.4" dependencies: "@floating-ui/react-dom-interactions": 0.6.6 - "@mantine/styles": 5.2.3 - "@mantine/utils": 5.2.3 + "@mantine/styles": 5.2.4 + "@mantine/utils": 5.2.4 "@radix-ui/react-scroll-area": 1.0.0 react-textarea-autosize: 8.3.4 peerDependencies: - "@mantine/hooks": 5.2.3 + "@mantine/hooks": 5.2.4 react: ">=16.8.0" react-dom: ">=16.8.0" - checksum: 39c3328335a9de3d1f72a8e7d043005f0920039e37ff4ff8029d1955ec5b4fad9f5fb2a112490862061e0ecf1803d0fdaeb532c0b716394681d17abd6b410cc8 + checksum: d7702274a4c0e9f3dd88dda702fee296edfdba2069a0c50c4a106a995ccac058c3711c92812e7134bf80e118267aaee54aa5726427e40cf9b9b3a2ebff8e1230 languageName: node linkType: hard -"@mantine/hooks@npm:^5.2.3": - version: 5.2.3 - resolution: "@mantine/hooks@npm:5.2.3" +"@mantine/hooks@npm:^5.2.4": + version: 5.2.4 + resolution: "@mantine/hooks@npm:5.2.4" peerDependencies: react: ">=16.8.0" - checksum: da49a092cd5401366609bb3def6c37df61a9d8cf86b1c1491f17483b1b31475ba50b4330edfe7ada712e37fc1bc9af1dd116ed0d411b2b143eadf30ec53e89d6 + checksum: f7eef948eb5abf2266cbbe126ea9eff19ed2594dabfb62ca7bbee5520aa3ba168f8169db7bcd438dafabf60c17b8ed6944bedbdf803568caaabf7e93da80d651 languageName: node linkType: hard -"@mantine/next@npm:^5.2.3": - version: 5.2.3 - resolution: "@mantine/next@npm:5.2.3" +"@mantine/next@npm:^5.2.4": + version: 5.2.4 + resolution: "@mantine/next@npm:5.2.4" dependencies: - "@mantine/ssr": 5.2.3 - "@mantine/styles": 5.2.3 + "@mantine/ssr": 5.2.4 + "@mantine/styles": 5.2.4 peerDependencies: next: "*" react: ">=16.8.0" react-dom: ">=16.8.0" - checksum: bd77c1f8c4a2605ab3a16436b33685b93fb5c91bd82984868fbce43c4566b3a28c00e80adc5f9a454ada6614e5f1c8aa948f64871eab534468881ff47d86bbd7 + checksum: 78baee7042eb4cb71320296797b626c3b0f10da176e6b80991e9442351fffd59ac2a419207cbde6873b01a45602b2a1faa96fca3e0734b5fae7de2ac43a1027a languageName: node linkType: hard -"@mantine/nprogress@npm:^5.2.3": - version: 5.2.3 - resolution: "@mantine/nprogress@npm:5.2.3" +"@mantine/nprogress@npm:^5.2.4": + version: 5.2.4 + resolution: "@mantine/nprogress@npm:5.2.4" dependencies: - "@mantine/utils": 5.2.3 + "@mantine/utils": 5.2.4 peerDependencies: - "@mantine/core": 5.2.3 - "@mantine/hooks": 5.2.3 + "@mantine/core": 5.2.4 + "@mantine/hooks": 5.2.4 react: ">=16.8.0" react-dom: ">=16.8.0" - checksum: c921a3d94e12f26945da5afb10b693705535a25d356b33be73e16fe0f01ac55b91ed0777ad5e14187ae87f107c33932e9ea81bb571ca044044638d145c08d7b2 + checksum: 048b78453afd8ee36b32078169197c7cb5dbd3f6f901376f90d406ea5bf650536fda77895dbce2283757382c0d643c669f613d175577779768490859c58ad10d languageName: node linkType: hard -"@mantine/spotlight@npm:^5.2.3": - version: 5.2.3 - resolution: "@mantine/spotlight@npm:5.2.3" +"@mantine/spotlight@npm:^5.2.4": + version: 5.2.4 + resolution: "@mantine/spotlight@npm:5.2.4" dependencies: - "@mantine/utils": 5.2.3 + "@mantine/utils": 5.2.4 peerDependencies: - "@mantine/core": 5.2.3 - "@mantine/hooks": 5.2.3 + "@mantine/core": 5.2.4 + "@mantine/hooks": 5.2.4 react: ">=16.8.0" react-dom: ">=16.8.0" - checksum: fabf35c0416579fae7c0bce1bd1b93862a9fdfb451851c225a9d484825cc8df3e11bd4d0395cc455f6518071e2434b9f37479c0ea16c7fb87df76d443c0eddeb + checksum: 4dd281b6f88c8621c229ec14c35a4bc7342cc3ea2e975e2991b30f393d7c17c4eef2f823ae92efbe0e3c779c28cdfe59e6852ef604b170c2e08fbbd1d475196b languageName: node linkType: hard -"@mantine/ssr@npm:5.2.3": - version: 5.2.3 - resolution: "@mantine/ssr@npm:5.2.3" +"@mantine/ssr@npm:5.2.4": + version: 5.2.4 + resolution: "@mantine/ssr@npm:5.2.4" dependencies: - "@mantine/styles": 5.2.3 + "@mantine/styles": 5.2.4 html-react-parser: 1.4.12 peerDependencies: "@emotion/react": ">=11.9.0" "@emotion/server": ">=11.4.0" react: ">=16.8.0" react-dom: ">=16.8.0" - checksum: f9212233489b3d88198756646db6013fe1e9dce62619254431c5f029a3ff61da057993daecf10ffafe55f14f75ac78f85d0efbdacfff50f34df492bb13e81413 + checksum: 05d590eb263259f4a6fb7b4261a15b7b1de62cc4f075eda30eb22e396f27a35c89ac92009d1ef3c9616e1b16e28af61de74204972b319b807d7884a6c09e7910 languageName: node linkType: hard -"@mantine/styles@npm:5.2.3": - version: 5.2.3 - resolution: "@mantine/styles@npm:5.2.3" +"@mantine/styles@npm:5.2.4": + version: 5.2.4 + resolution: "@mantine/styles@npm:5.2.4" dependencies: clsx: 1.1.1 csstype: 3.0.9 @@ -2866,16 +2906,16 @@ __metadata: "@emotion/react": ">=11.9.0" react: ">=16.8.0" react-dom: ">=16.8.0" - checksum: 39e9e3c7462386da8106260787e0537b767e54b8b01b5077b3e371c9026ad78228e8bea801d4d3968faca6254e509bdd3ca783eba8a62be0d011f585bdf6019e + checksum: 8a0dee38931285d04bf022349a0cadaf812ee1a4d239b3c8246454002b9e5f37079d3fa5eef6706d610408c5fde06f5b82fd604177812169d3de3f9c8196900f languageName: node linkType: hard -"@mantine/utils@npm:5.2.3": - version: 5.2.3 - resolution: "@mantine/utils@npm:5.2.3" +"@mantine/utils@npm:5.2.4": + version: 5.2.4 + resolution: "@mantine/utils@npm:5.2.4" peerDependencies: react: ">=16.8.0" - checksum: bac3a5637efc2163b8308d42bbb4bc828b0cbeecfcbcb81dfb4b252afd728197b5a96abd37b0f0c7a432be2ab30e0525bbdefbe3f89f35bf321c168464af4a01 + checksum: c3c58b60255c140dc336615fc582960b88b2fc0e540da359bf8c6c4bdfbe43a07bf886a0da7ca6d9d11fbb457e86ed73c761765a850b0db7112c5ce6dec61d19 languageName: node linkType: hard @@ -2935,18 +2975,7 @@ __metadata: languageName: node linkType: hard -"@microsoft/api-extractor-model@npm:7.23.1": - version: 7.23.1 - resolution: "@microsoft/api-extractor-model@npm:7.23.1" - dependencies: - "@microsoft/tsdoc": 0.14.1 - "@microsoft/tsdoc-config": ~0.16.1 - "@rushstack/node-core-library": 3.50.2 - checksum: 8295761acf053dc792efaa51d7a46d60e941a713ab9953e4a1d452d3c63e60b922f8f8f5c16632144e20c161f5b010a46523e3d937fd204baa2719b8f57c0748 - languageName: node - linkType: hard - -"@microsoft/api-extractor-model@npm:^7.23.1, @microsoft/api-extractor-model@npm:^7.23.3": +"@microsoft/api-extractor-model@npm:7.23.3, @microsoft/api-extractor-model@npm:^7.23.3": version: 7.23.3 resolution: "@microsoft/api-extractor-model@npm:7.23.3" dependencies: @@ -2957,14 +2986,14 @@ __metadata: languageName: node linkType: hard -"@microsoft/api-extractor@npm:^7.29.3": - version: 7.29.3 - resolution: "@microsoft/api-extractor@npm:7.29.3" +"@microsoft/api-extractor@npm:^7.29.5": + version: 7.29.5 + resolution: "@microsoft/api-extractor@npm:7.29.5" dependencies: - "@microsoft/api-extractor-model": 7.23.1 + "@microsoft/api-extractor-model": 7.23.3 "@microsoft/tsdoc": 0.14.1 "@microsoft/tsdoc-config": ~0.16.1 - "@rushstack/node-core-library": 3.50.2 + "@rushstack/node-core-library": 3.51.1 "@rushstack/rig-package": 0.3.14 "@rushstack/ts-command-line": 4.12.2 colors: ~1.2.1 @@ -2975,7 +3004,7 @@ __metadata: typescript: ~4.7.4 bin: api-extractor: bin/api-extractor - checksum: 237e075bf1b68324e710d71d4e58f0df892777ff4d769d6cf065c97f87be0fdc274210979ab576f3f81f59a3b081d22deeae7cd7d405d3d755885dcfd19f36fa + checksum: f80f5963591384029f71c8db2f3cd32eb098ce4f622e420b695ac947c104612a5a483126428aade638d5d751e840f79e4f36cb0c8e59c363663cf72971937b73 languageName: node linkType: hard @@ -3422,23 +3451,6 @@ __metadata: languageName: node linkType: hard -"@rushstack/node-core-library@npm:3.50.2": - version: 3.50.2 - resolution: "@rushstack/node-core-library@npm:3.50.2" - dependencies: - "@types/node": 12.20.24 - colors: ~1.2.1 - fs-extra: ~7.0.1 - import-lazy: ~4.0.0 - jju: ~1.4.0 - resolve: ~1.17.0 - semver: ~7.3.0 - timsort: ~0.3.0 - z-schema: ~5.0.2 - checksum: 7c48c6533181c7514c688f3c7677de81d69258a7e0ff938c8cb53390722b68446ccf68e1860a4785f192da771b1c6d4684febe602b1e2548309ca5f51f2fe65e - languageName: node - linkType: hard - "@rushstack/node-core-library@npm:3.51.1": version: 3.51.1 resolution: "@rushstack/node-core-library@npm:3.51.1" @@ -3500,13 +3512,13 @@ __metadata: languageName: node linkType: hard -"@sapphire/shapeshift@npm:^3.5.1": - version: 3.5.1 - resolution: "@sapphire/shapeshift@npm:3.5.1" +"@sapphire/shapeshift@npm:^3.6.0": + version: 3.6.0 + resolution: "@sapphire/shapeshift@npm:3.6.0" dependencies: fast-deep-equal: ^3.1.3 lodash.uniqwith: ^4.5.0 - checksum: caecfef844c9e43e921a5051da888fae7da8980bfd9f9bb4f7fee85931d40929ffb9b6dfae464c0dccee61e56f7698f998e4d9a54d25f35fad39a51ba1a4f391 + checksum: 31b426424d064c516144c6eda07dfa0e44d7cbb8309dde919b923aa6ae939faac6384fa4d08db391a8da11efa3a83c18c9be1ebd053ba29403e61f5e2450b788 languageName: node linkType: hard @@ -3674,13 +3686,10 @@ __metadata: languageName: node linkType: hard -"@tsd/typescript@npm:~4.7.4": - version: 4.7.4 - resolution: "@tsd/typescript@npm:4.7.4" - bin: - tsc: typescript/bin/tsc - tsserver: typescript/bin/tsserver - checksum: 1a84773cb4bb01898fb0b6011ec5c2fb3e3c91585ea009bbf9d525b46d40f1827417dfc5f7b1efdf534b111a5947b063ae04490d147bda37b038e1a7d264672d +"@tsd/typescript@npm:^4.8.2": + version: 4.8.2 + resolution: "@tsd/typescript@npm:4.8.2" + checksum: c193a64d2347ba7da7e426e41d9cf9186ad71e782be2404db8ead310b3975a17ad206e0ba5f2c60bf9d8714cbccd7fbebde0345f2dce1938c1d1a8168e23f6b7 languageName: node linkType: hard @@ -3883,13 +3892,13 @@ __metadata: languageName: node linkType: hard -"@types/jest@npm:^28.1.7": - version: 28.1.7 - resolution: "@types/jest@npm:28.1.7" +"@types/jest@npm:^28.1.8": + version: 28.1.8 + resolution: "@types/jest@npm:28.1.8" dependencies: expect: ^28.0.0 pretty-format: ^28.0.0 - checksum: 17c9bf9667cd4f062eba5aa9eaea248927bf6479da1cc009e0b7d26d501f460f068dd23eddb67d2602264e915a30b63ae7c9cbb516723ffd18589f6f9d267d43 + checksum: d4cd36158a3ae1d4b42cc48a77c95de74bc56b84cf81e09af3ee0399c34f4a7da8ab9e787570f10004bd642f9e781b0033c37327fbbf4a8e4b6e37e8ee3693a7 languageName: node linkType: hard @@ -3984,7 +3993,7 @@ __metadata: languageName: node linkType: hard -"@types/node@npm:*, @types/node@npm:>=12": +"@types/node@npm:*": version: 18.7.4 resolution: "@types/node@npm:18.7.4" checksum: 051d2147e4d8129fceb63ee9384259b2f224dbc4e4b0c46d96a6b61cbaad4e3fe4060950e7f4fc3d5692b1e6ea47e68ad03b61155754bfa169593747cfe3f8f4 @@ -4005,6 +4014,13 @@ __metadata: languageName: node linkType: hard +"@types/node@npm:^14.0.0": + version: 14.18.26 + resolution: "@types/node@npm:14.18.26" + checksum: c6ac3f9d4f6f77c0fa5ac17757779ad4d9835abfe3af5708b7552597cb5c7c1103e83499ccaf767a1cfa70040990bcf3f58761c547051dc8d5077f3c419091b1 + languageName: node + linkType: hard + "@types/node@npm:^14.14.35": version: 14.18.23 resolution: "@types/node@npm:14.18.23" @@ -4012,7 +4028,7 @@ __metadata: languageName: node linkType: hard -"@types/node@npm:^16.11.54": +"@types/node@npm:^16.11.56": version: 16.11.56 resolution: "@types/node@npm:16.11.56" checksum: b4efade16eb08a39810921c54a1637e69c8f3184a20d87e8fe74d557d9bda73f0829ac318e2a30a32b1903e4b099812defd1dfe438be70b98dbfbea5b0d99a53 @@ -4084,12 +4100,12 @@ __metadata: languageName: node linkType: hard -"@types/react-syntax-highlighter@npm:^15.5.4": - version: 15.5.4 - resolution: "@types/react-syntax-highlighter@npm:15.5.4" +"@types/react-syntax-highlighter@npm:^15.5.5": + version: 15.5.5 + resolution: "@types/react-syntax-highlighter@npm:15.5.5" dependencies: "@types/react": "*" - checksum: 5008a8752f95502d8029b9c067d516050c1a04a898fcaf34fe5ed00ec563cc7aa3df0d6c2e585320d4cd07780d438e7bcaaddba96a72f1ae25ca19c285aad570 + checksum: c0b3a5b7aa39c8c1b823d4d64818ac53900c1a5bd65ed43fae56402b746f8d21e2b768ba7201d9d9b15447b377c271d09aebd75af05b02a1ff67459670c5d2f7 languageName: node linkType: hard @@ -4187,13 +4203,13 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/eslint-plugin@npm:^5.34.0": - version: 5.34.0 - resolution: "@typescript-eslint/eslint-plugin@npm:5.34.0" +"@typescript-eslint/eslint-plugin@npm:^5.35.1": + version: 5.35.1 + resolution: "@typescript-eslint/eslint-plugin@npm:5.35.1" dependencies: - "@typescript-eslint/scope-manager": 5.34.0 - "@typescript-eslint/type-utils": 5.34.0 - "@typescript-eslint/utils": 5.34.0 + "@typescript-eslint/scope-manager": 5.35.1 + "@typescript-eslint/type-utils": 5.35.1 + "@typescript-eslint/utils": 5.35.1 debug: ^4.3.4 functional-red-black-tree: ^1.0.1 ignore: ^5.2.0 @@ -4206,42 +4222,42 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: c984549931ffd20a3fb612bfd01e244484d36031198a6343ed6b27a0a0cf7bf271b382ac26f88d3d63a15fe61af6ab6a3a3870b9538897c4c09034b20ea87140 + checksum: 073f4dffd863881f1c87e1c217ac13bda44aaa2db12ef260032b5e8eb6ffd6b9cf6f62c85132dbf84152f353c435c66dd4f75c3bcb86eb23e926737aa4fb66fa languageName: node linkType: hard -"@typescript-eslint/parser@npm:^5.34.0": - version: 5.34.0 - resolution: "@typescript-eslint/parser@npm:5.34.0" +"@typescript-eslint/parser@npm:^5.35.1": + version: 5.35.1 + resolution: "@typescript-eslint/parser@npm:5.35.1" dependencies: - "@typescript-eslint/scope-manager": 5.34.0 - "@typescript-eslint/types": 5.34.0 - "@typescript-eslint/typescript-estree": 5.34.0 + "@typescript-eslint/scope-manager": 5.35.1 + "@typescript-eslint/types": 5.35.1 + "@typescript-eslint/typescript-estree": 5.35.1 debug: ^4.3.4 peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 peerDependenciesMeta: typescript: optional: true - checksum: eacbfe1495998b7a00b1254631f410874d001a59163daac877265cace428eb608acc0320a2801d950dcd8900f63aa1e056507e022def9ac312f7eabe87a1e4a9 + checksum: 57ea1a1da60b370f8d5c11c86155f7339359a90f2c59e34c89f626f1a79cb440248f07bd307a27ebbbcc997d2731cb9754cdbc37639770940521a938dd89870c languageName: node linkType: hard -"@typescript-eslint/scope-manager@npm:5.34.0": - version: 5.34.0 - resolution: "@typescript-eslint/scope-manager@npm:5.34.0" +"@typescript-eslint/scope-manager@npm:5.35.1": + version: 5.35.1 + resolution: "@typescript-eslint/scope-manager@npm:5.35.1" dependencies: - "@typescript-eslint/types": 5.34.0 - "@typescript-eslint/visitor-keys": 5.34.0 - checksum: 039893fa1b8d349427c642a24932dba7932be823f860ce191691d999cd77ac99c3cc743ecd9dd68ad58ba987626e77c1ec458dad9534623e136766b9f9c5c9bf + "@typescript-eslint/types": 5.35.1 + "@typescript-eslint/visitor-keys": 5.35.1 + checksum: 5a969a081309bac5962f99ee6dfdfd9c68ea677bc79d9796592dce82a36217f67aa55c7bf421b2c97b46c5149d6a9401bb4c57829595e8c19f47cfa9e8c2dd86 languageName: node linkType: hard -"@typescript-eslint/type-utils@npm:5.34.0": - version: 5.34.0 - resolution: "@typescript-eslint/type-utils@npm:5.34.0" +"@typescript-eslint/type-utils@npm:5.35.1": + version: 5.35.1 + resolution: "@typescript-eslint/type-utils@npm:5.35.1" dependencies: - "@typescript-eslint/utils": 5.34.0 + "@typescript-eslint/utils": 5.35.1 debug: ^4.3.4 tsutils: ^3.21.0 peerDependencies: @@ -4249,23 +4265,23 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: d26c4c14e24ff18f3f542afae85e95e88895de23ba0f3ac6f98286464473ca1b93325e60c8ae24fee0e24a450ea65682250791fca8ec193e081f661b4a17d225 + checksum: af317ba156f2767f76a7f97193873a00468370e157fdcc6ac19f664bc6c4c0a6836bd25028d17fdd54d339b6842fda68b82f1ce4142a222de6953625ea6c0a9c languageName: node linkType: hard -"@typescript-eslint/types@npm:5.34.0": - version: 5.34.0 - resolution: "@typescript-eslint/types@npm:5.34.0" - checksum: 74ad0302ebac160d1b8178ff07183868018a9b558137c638140b24589ba71dbeccfcedf57156f4d6b7443b139e186ede24a01cba66132f0bda6f891d515878fb +"@typescript-eslint/types@npm:5.35.1": + version: 5.35.1 + resolution: "@typescript-eslint/types@npm:5.35.1" + checksum: a4e1001867f43f3364b109fc5a07b91ae7a34b78ab191c6c5c4695dac9bb2b80b0a602651c0b807c1c7c1fc3656d2bbd47c637afa08a09e7b1c39eae3c489e00 languageName: node linkType: hard -"@typescript-eslint/typescript-estree@npm:5.34.0": - version: 5.34.0 - resolution: "@typescript-eslint/typescript-estree@npm:5.34.0" +"@typescript-eslint/typescript-estree@npm:5.35.1": + version: 5.35.1 + resolution: "@typescript-eslint/typescript-estree@npm:5.35.1" dependencies: - "@typescript-eslint/types": 5.34.0 - "@typescript-eslint/visitor-keys": 5.34.0 + "@typescript-eslint/types": 5.35.1 + "@typescript-eslint/visitor-keys": 5.35.1 debug: ^4.3.4 globby: ^11.1.0 is-glob: ^4.0.3 @@ -4274,54 +4290,54 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: 2b9dac41d6dc544a2f61384ef8ed6559a15bdc19d9e49257829441dd166dd0ca395f4f6b42c97fbb2f006b1a6e7c8907c149add7644267b638ec7f1c0d01de30 + checksum: a917ca4753a3f92c8d8555c96f5414383a9742761625476fa36a019401543aa74996159afa0f7fc7fae05fe0f904e3c6f4153a55412070c8a94e8171e81084c7 languageName: node linkType: hard -"@typescript-eslint/utils@npm:5.34.0": - version: 5.34.0 - resolution: "@typescript-eslint/utils@npm:5.34.0" +"@typescript-eslint/utils@npm:5.35.1": + version: 5.35.1 + resolution: "@typescript-eslint/utils@npm:5.35.1" dependencies: "@types/json-schema": ^7.0.9 - "@typescript-eslint/scope-manager": 5.34.0 - "@typescript-eslint/types": 5.34.0 - "@typescript-eslint/typescript-estree": 5.34.0 + "@typescript-eslint/scope-manager": 5.35.1 + "@typescript-eslint/types": 5.35.1 + "@typescript-eslint/typescript-estree": 5.35.1 eslint-scope: ^5.1.1 eslint-utils: ^3.0.0 peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - checksum: 6b05bb2bf5c492dec19ae8ee29550ede1c76cc46c5aa03c4b83aff4b1205611e3e03e7fbf3839d60acce8c596ee7cbf715117b474fdcfd47c6879d504a4c3401 + checksum: 2b04092583c3139dd090727c24fb9d7fdb1fb9f20f2e3f0141cab5b98b6a1934b0fc8cab948f7faae55588385b0f1fb7bbf91f52c705ce4528036a527c3119c6 languageName: node linkType: hard -"@typescript-eslint/visitor-keys@npm:5.34.0": - version: 5.34.0 - resolution: "@typescript-eslint/visitor-keys@npm:5.34.0" +"@typescript-eslint/visitor-keys@npm:5.35.1": + version: 5.35.1 + resolution: "@typescript-eslint/visitor-keys@npm:5.35.1" dependencies: - "@typescript-eslint/types": 5.34.0 + "@typescript-eslint/types": 5.35.1 eslint-visitor-keys: ^3.3.0 - checksum: b5574ce8363f905f0a11e14126ec606130bbcc151c326c004d0f510c8e4e884175a70e0299adb0a82ed817db469558d2d385137c09837249118e15cbfa47bff2 + checksum: ef3c8377aac89935b5cc2fcf37bb3e42aa5f98848e7c22bdcbe5bb06c0fe8a1373a6897fd21109be8929b4708ad06c8874d2ef7bba17ff64911964203457330d languageName: node linkType: hard -"@unocss/astro@npm:0.45.12": - version: 0.45.12 - resolution: "@unocss/astro@npm:0.45.12" +"@unocss/astro@npm:0.45.13": + version: 0.45.13 + resolution: "@unocss/astro@npm:0.45.13" dependencies: - "@unocss/core": 0.45.12 - "@unocss/reset": 0.45.12 - "@unocss/vite": 0.45.12 - checksum: 8292b46722681ed3629e75e9726aa42fb3300e819025e4f4fb7d9b2aaffe05d5249e022d43eb2549a1c5db66099f14c7fa404b5771c722926c33e3d10941f0a7 + "@unocss/core": 0.45.13 + "@unocss/reset": 0.45.13 + "@unocss/vite": 0.45.13 + checksum: e73f844038e21cd4dbf40bd0f163b188da8a3a839f4258f5be22a7da6187277c49066949480826ea69173b0bb95c0d24423f6f6b289e6e27d2b766d771c9d821 languageName: node linkType: hard -"@unocss/cli@npm:0.45.12, @unocss/cli@npm:^0.45.12": - version: 0.45.12 - resolution: "@unocss/cli@npm:0.45.12" +"@unocss/cli@npm:0.45.13, @unocss/cli@npm:^0.45.13": + version: 0.45.13 + resolution: "@unocss/cli@npm:0.45.13" dependencies: - "@unocss/config": 0.45.12 - "@unocss/core": 0.45.12 - "@unocss/preset-uno": 0.45.12 + "@unocss/config": 0.45.13 + "@unocss/core": 0.45.13 + "@unocss/preset-uno": 0.45.13 cac: ^6.7.12 chokidar: ^3.5.3 colorette: ^2.0.19 @@ -4331,215 +4347,215 @@ __metadata: perfect-debounce: ^0.1.3 bin: unocss: bin/unocss.mjs - checksum: 23b2078b3a0a6c5aaef03c7564b55d44342627fa91c13f41d18c2cc117e2cd3311f93f0adc524bf3af036dc5ed395a587def3e4c96e43de986086b01d4af0bbb + checksum: b618b36634079b34efaa8cd826a41c097448d73beeae22f604f8869142e0b3355e5e905b552ea2e65b42028fcb855049d712d858a9305f6271a85c391b5e34b1 languageName: node linkType: hard -"@unocss/config@npm:0.45.12": - version: 0.45.12 - resolution: "@unocss/config@npm:0.45.12" +"@unocss/config@npm:0.45.13": + version: 0.45.13 + resolution: "@unocss/config@npm:0.45.13" dependencies: - "@unocss/core": 0.45.12 + "@unocss/core": 0.45.13 unconfig: ^0.3.5 - checksum: 78ad0a967eb24255bddc001c238e60680828455e1a438ecacc37ed883d3a605164f58e5d4f43dc8f1668b2594572f40a5c3036632572603162f25f4d26d4f710 + checksum: 907741d67d89221feda749397a95c7546795d0e3ff6e8ceb8ce6baed33b0ad4dcd262edbe8c101b66cbf24222d8d91f1244597e028d18a7f9dc5ce63efa6f744 languageName: node linkType: hard -"@unocss/core@npm:0.45.12": - version: 0.45.12 - resolution: "@unocss/core@npm:0.45.12" - checksum: e3bcd8e708703716fff91f5ede1ded5dc5860853ab712368bad3c5ff46efbbb5fea83dbf38358879a6b0098d0398655296ce46e1712fe62c7d3dfbf84ae407d7 +"@unocss/core@npm:0.45.13": + version: 0.45.13 + resolution: "@unocss/core@npm:0.45.13" + checksum: d4cc6d934c4f28220ec1994cf7abc63a395948deb59dcd1b8d005b3b4f35c167ee9147bf31bd93620512a8e652da303abb0b02e5e4c964ff87699dcbd84b8d65 languageName: node linkType: hard -"@unocss/inspector@npm:0.45.12": - version: 0.45.12 - resolution: "@unocss/inspector@npm:0.45.12" +"@unocss/inspector@npm:0.45.13": + version: 0.45.13 + resolution: "@unocss/inspector@npm:0.45.13" dependencies: gzip-size: ^6.0.0 sirv: ^2.0.2 - checksum: 3eb6cc6458e607aab765622a91616ba54ed762dd8bffdceb797a1c010dd7ef75d22412f757253eb7328f1c542d27612b80e3fc7d43601d6807149d13acceb711 + checksum: 8d6898752170747a2221401786047e1481152959756e1d9f8c35b870777e00dab045910fc2796c3136b44d16c03d5223fa4e636f060a88e84616f6c5549f1207 languageName: node linkType: hard -"@unocss/preset-attributify@npm:0.45.12": - version: 0.45.12 - resolution: "@unocss/preset-attributify@npm:0.45.12" +"@unocss/preset-attributify@npm:0.45.13": + version: 0.45.13 + resolution: "@unocss/preset-attributify@npm:0.45.13" dependencies: - "@unocss/core": 0.45.12 - checksum: 1aff4fe5af0d2a5d12dc4c564876762323e0f076a7e9e8e2083ec81334bfd9764dd8106921336227a9c10d9954506c41e8bf5fa03a94cdee0e76eea8379b1874 + "@unocss/core": 0.45.13 + checksum: 3f2b9713c0d74bb15addf4fd0bcd7fa9ccb47c46f2092b206e018a5ca4a84f147890423b6ec07ff0e5b5ae97dbed68808e051d5acf1e81092fdda049630359b1 languageName: node linkType: hard -"@unocss/preset-icons@npm:0.45.12": - version: 0.45.12 - resolution: "@unocss/preset-icons@npm:0.45.12" +"@unocss/preset-icons@npm:0.45.13": + version: 0.45.13 + resolution: "@unocss/preset-icons@npm:0.45.13" dependencies: "@iconify/utils": ^1.0.33 - "@unocss/core": 0.45.12 + "@unocss/core": 0.45.13 ohmyfetch: ^0.4.18 - checksum: 911f5ceab5a2ac953d15a773751322fd27276890bdf567c9e27692bfb17e253394e4d3dc7b0b55bef7babb613bd9e857675d0700277969769bf33eaeac622a9a + checksum: 529a21a1c3f115990d1053d0bc6435a5ed33f334dc50a9b90098dd608d7be180fa176e0d1f99552cfe70ac5669e89a3e64cc28397006f2f590ee553f7bba1446 languageName: node linkType: hard -"@unocss/preset-mini@npm:0.45.12": - version: 0.45.12 - resolution: "@unocss/preset-mini@npm:0.45.12" +"@unocss/preset-mini@npm:0.45.13": + version: 0.45.13 + resolution: "@unocss/preset-mini@npm:0.45.13" dependencies: - "@unocss/core": 0.45.12 - checksum: ee40f47e10c98c7874bb0e0154484d3e4285306371174fd57beefb632a4014f3ee545d6c63c19a65e747f883a1f53d1eec97b0088e0e584d525c15739f6b30a6 + "@unocss/core": 0.45.13 + checksum: 8f602d1e75214a9353749d12dbee5cab9428310515dc2325e4775ecaea01ba4d02f249be33ba5fbb0e63536ddf7f9d75c46fc84f21174f5e69b862f49580c269 languageName: node linkType: hard -"@unocss/preset-tagify@npm:0.45.12": - version: 0.45.12 - resolution: "@unocss/preset-tagify@npm:0.45.12" +"@unocss/preset-tagify@npm:0.45.13": + version: 0.45.13 + resolution: "@unocss/preset-tagify@npm:0.45.13" dependencies: - "@unocss/core": 0.45.12 - checksum: dbe8a698e36ebe961400a802b1df4a0389d274aaf25296560d531e9b29b37d26fe668b9997ae19e4622dfd9f7acbdae68f2d03251ac0d0f9e276fa0a46bc2e1c + "@unocss/core": 0.45.13 + checksum: d707a2d9c9fe10c3b65da2d2562ddf825c3bfc13a6984e7cad108ff5d13594c2b5322ee242b30c617cb8c25c6efb1c3827963af2fca9c62cefbd3d651452c670 languageName: node linkType: hard -"@unocss/preset-typography@npm:0.45.12": - version: 0.45.12 - resolution: "@unocss/preset-typography@npm:0.45.12" +"@unocss/preset-typography@npm:0.45.13": + version: 0.45.13 + resolution: "@unocss/preset-typography@npm:0.45.13" dependencies: - "@unocss/core": 0.45.12 - checksum: e3eeba14e4f59a2b36dc4bd8b455ebaae8d837831eb846cadab5333bbd658016e8ad3f5f69dbca229eaa5524546de6e540dcc36e18f797f0a53cea50a669b9dd + "@unocss/core": 0.45.13 + checksum: 3dbd910f570d425ea8dff5b7d26b7f62d8d8a5d38807846ccafa722a172871b2b7a4046a49f24ffcce97cd532afe95982349410c04f1f0b672c98be24e5f50fc languageName: node linkType: hard -"@unocss/preset-uno@npm:0.45.12": - version: 0.45.12 - resolution: "@unocss/preset-uno@npm:0.45.12" +"@unocss/preset-uno@npm:0.45.13": + version: 0.45.13 + resolution: "@unocss/preset-uno@npm:0.45.13" dependencies: - "@unocss/core": 0.45.12 - "@unocss/preset-mini": 0.45.12 - "@unocss/preset-wind": 0.45.12 - checksum: 8c314e32f69649989b466e73be033a2a23a0def249b788bbbffc6b33441ec3cb76147e1a7af389420a3cbc946e1ae00dcb2a21cbd7f0f0c19558b2fd7cd36a38 + "@unocss/core": 0.45.13 + "@unocss/preset-mini": 0.45.13 + "@unocss/preset-wind": 0.45.13 + checksum: a708bdd95b8474e615cdae3a0983266cd1be0e4f9eef1260a3c49cccaa668bd9559e845d4dd9204d1576b36a6c1c1a6af9f96ab6ea25537bac62d0241077a06b languageName: node linkType: hard -"@unocss/preset-web-fonts@npm:0.45.12, @unocss/preset-web-fonts@npm:^0.45.12": - version: 0.45.12 - resolution: "@unocss/preset-web-fonts@npm:0.45.12" +"@unocss/preset-web-fonts@npm:0.45.13, @unocss/preset-web-fonts@npm:^0.45.13": + version: 0.45.13 + resolution: "@unocss/preset-web-fonts@npm:0.45.13" dependencies: - "@unocss/core": 0.45.12 + "@unocss/core": 0.45.13 ohmyfetch: ^0.4.18 - checksum: a8534cf3b1714867980ec6c6032f3a46a1bc28b256939d8ada693083e850ef800d5db9f4c40b5d21a2ee923a5bf932a653ed4ed42ba69efaef1e8c16a8274a16 + checksum: e519f2b750e3531a100bdd822953b44c8526fcfbd5040a305537e21d6cc2a9a979f41c7473aefa7b9305202349b9081d723bd0e127cbd78b431a3767c38eab49 languageName: node linkType: hard -"@unocss/preset-wind@npm:0.45.12": - version: 0.45.12 - resolution: "@unocss/preset-wind@npm:0.45.12" +"@unocss/preset-wind@npm:0.45.13": + version: 0.45.13 + resolution: "@unocss/preset-wind@npm:0.45.13" dependencies: - "@unocss/core": 0.45.12 - "@unocss/preset-mini": 0.45.12 - checksum: 4149ff888905050c12f4742ca39434a8e9abc98851706733030a27cc37908458c1e231d8856137d061a4ae432177fcc34c0636fbb4209445a99e4fd636cf94ba + "@unocss/core": 0.45.13 + "@unocss/preset-mini": 0.45.13 + checksum: b7b18b79b5619fc9adf517adfa51a9a456996e494462c9dca6d18e49c90fde775565c0596ecde59e94b055982a08768e915a0e7cb9d5784bca7acf41d84598bc languageName: node linkType: hard -"@unocss/reset@npm:0.45.12, @unocss/reset@npm:^0.45.12": - version: 0.45.12 - resolution: "@unocss/reset@npm:0.45.12" - checksum: 7e00b3be17a97336598a3972a4144ccaf7a732db92270b12e46bd44675b30fed19c26cc9b915d0ab1d830813412b489f98aeac169e4ea0a42af0c6af9c7c49bc +"@unocss/reset@npm:0.45.13, @unocss/reset@npm:^0.45.13": + version: 0.45.13 + resolution: "@unocss/reset@npm:0.45.13" + checksum: 8323f4f1305dc944e36ea4723a2491ff7a3ecd55c649cea65ac9b2d4c7d085b7ec131d351f0eae06748bf239a87b6d5ba6964232b80935921cdc1e17e6c2344b languageName: node linkType: hard -"@unocss/scope@npm:0.45.12": - version: 0.45.12 - resolution: "@unocss/scope@npm:0.45.12" - checksum: 2dbb8f4ddf67a93ce88b111079efa58b336d58954ae09b42f6dd9e4ea921a5e99797e145d57a305f166ba2c0decbf55c6500abf7436d5405d627d8af4898a3fc +"@unocss/scope@npm:0.45.13": + version: 0.45.13 + resolution: "@unocss/scope@npm:0.45.13" + checksum: 231379070977e718d2a280c276c8105c4bb4c78e42c4fdf51e858f054195bec7609ae8a74968e81ed77b21c9eddf3136be47a92276a0e9e2bc8f16dd951963aa languageName: node linkType: hard -"@unocss/transformer-attributify-jsx@npm:0.45.12": - version: 0.45.12 - resolution: "@unocss/transformer-attributify-jsx@npm:0.45.12" +"@unocss/transformer-attributify-jsx@npm:0.45.13": + version: 0.45.13 + resolution: "@unocss/transformer-attributify-jsx@npm:0.45.13" dependencies: - "@unocss/core": 0.45.12 - checksum: c6d2076a7e9f7f2f57b66200d6e464c0418fc5e980b6cbff1f6150fdb5e698c94d09e9a7dffae75604e7398e1e8ca2d6556a0e7c1578a3b705df33b994aedd40 + "@unocss/core": 0.45.13 + checksum: d1199713377ff22f5ac35195792092c5149f530e6964016a77665c55f0ea13383c51bc4d073c5ea4f610ea00691c92efcd388cb699d06814bc0cb4ead6c9ff7a languageName: node linkType: hard -"@unocss/transformer-compile-class@npm:0.45.12": - version: 0.45.12 - resolution: "@unocss/transformer-compile-class@npm:0.45.12" +"@unocss/transformer-compile-class@npm:0.45.13": + version: 0.45.13 + resolution: "@unocss/transformer-compile-class@npm:0.45.13" dependencies: - "@unocss/core": 0.45.12 - checksum: dfa9dd8c08df51c5fbe568a251a1e54bd31e84927ea98af2dfee7c29558f79208310784fa492fc0f66c592abd0ffd473092dc35a78b40d271e090d2c6ee1cca5 + "@unocss/core": 0.45.13 + checksum: b8c1f8ff7a2404e17d3055707c811bfcfbae657c079d13640cb3aafd3b7d0eec5047440710820f392de577831ec40f8be3b5fd7489b168ac28ef99fcaf747fd2 languageName: node linkType: hard -"@unocss/transformer-directives@npm:0.45.12": - version: 0.45.12 - resolution: "@unocss/transformer-directives@npm:0.45.12" +"@unocss/transformer-directives@npm:0.45.13": + version: 0.45.13 + resolution: "@unocss/transformer-directives@npm:0.45.13" dependencies: - "@unocss/core": 0.45.12 + "@unocss/core": 0.45.13 css-tree: ^2.2.1 - checksum: feaf465d924b27638c683b6eb2a2bccfa443210490d12b37a8c801b7a1598fdcfed95907fb2a21f5765c63fb1484ec573235700ec6b36baa4632eb31d5f4a53d + checksum: 064b356ec6dfe1a06b981ea83370f8790100e17f56fb7a311522a4316bd4a382456036d8b5f6b0832648ba69fe1fc81ebe1e1d701db50840ca2c0674e426f447 languageName: node linkType: hard -"@unocss/transformer-variant-group@npm:0.45.12": - version: 0.45.12 - resolution: "@unocss/transformer-variant-group@npm:0.45.12" +"@unocss/transformer-variant-group@npm:0.45.13": + version: 0.45.13 + resolution: "@unocss/transformer-variant-group@npm:0.45.13" dependencies: - "@unocss/core": 0.45.12 - checksum: 607fc3eb0f0db74fbe6dad7b09a99fb4d19a3dd31255c03d41974024382ac06f04dc13524b6dae9d97acb750c25cc0609a58690ac8ab2ef5f3bb4d68c2ec529f + "@unocss/core": 0.45.13 + checksum: efe5a1d951180a0b772de554de64c7a749e3a09d47d5810f9b467f11052d17661fe3b06a1754fb3e395738227b83d1b76ab4343502d6c3309745dfe1a4b5eab9 languageName: node linkType: hard -"@unocss/vite@npm:0.45.12": - version: 0.45.12 - resolution: "@unocss/vite@npm:0.45.12" +"@unocss/vite@npm:0.45.13": + version: 0.45.13 + resolution: "@unocss/vite@npm:0.45.13" dependencies: "@ampproject/remapping": ^2.2.0 "@rollup/pluginutils": ^4.2.1 - "@unocss/config": 0.45.12 - "@unocss/core": 0.45.12 - "@unocss/inspector": 0.45.12 - "@unocss/scope": 0.45.12 - "@unocss/transformer-directives": 0.45.12 + "@unocss/config": 0.45.13 + "@unocss/core": 0.45.13 + "@unocss/inspector": 0.45.13 + "@unocss/scope": 0.45.13 + "@unocss/transformer-directives": 0.45.13 magic-string: ^0.26.2 peerDependencies: vite: ^2.9.0 || ^3.0.0-0 - checksum: afd295bc1b3bfeecbaf41859b829b643a10268cdbf8fa21c913de607e1c40c56e79d9f279f99a0a08e99be981fb8df8d68775ed9c3e2aa7949508bc2b6c33518 + checksum: 4e1818759bc2170118d8e5058ac0a10338d409f4c23f6703306afb939bafb8f8fcf16f830cc2d70266c749802f54564095f103d9381ae905f92ae6d49287d85e languageName: node linkType: hard -"@vercel/build-utils@npm:5.3.1": - version: 5.3.1 - resolution: "@vercel/build-utils@npm:5.3.1" - checksum: bb036f84b065c843b8d0ca1ba9aa8675998d713ba40de73e522a25ba0ebe60843ae0eebae5a855ac4b70633cbe26994cf569ce98c9904ca94ff3a889ad545ea9 +"@vercel/build-utils@npm:5.4.0": + version: 5.4.0 + resolution: "@vercel/build-utils@npm:5.4.0" + checksum: 815942c08a1e446591557b6b19fd4f1c86b9bc51860816a8c03f186515d1a18432c2d6e21b1845bc077881a1101eb3fc532b48b643ddf22fbc9007690682768f languageName: node linkType: hard -"@vercel/go@npm:2.2.0": - version: 2.2.0 - resolution: "@vercel/go@npm:2.2.0" - checksum: 03840a878c7174fcd3fdecd2af519519bdf7d128e7c7b7cec03eecba3abe5192c265d24071aa77b602546cc7b7e69c60195c91b6692a6df8da6a3363daf33594 +"@vercel/go@npm:2.2.3": + version: 2.2.3 + resolution: "@vercel/go@npm:2.2.3" + checksum: e499848a3b07fd63400b20c5496883d1f20daedea2a587eba11b233833fa65c78a33bf1e33cbcad855dda709c8b718b2933b24d4afa91d4adea20c03d406667e languageName: node linkType: hard -"@vercel/hydrogen@npm:0.0.14": - version: 0.0.14 - resolution: "@vercel/hydrogen@npm:0.0.14" - checksum: aeff76c1475916bc527f866655a06275f4e777209b06677136c4fc084e29d15e73fa6a2be432a340a986521b95d1c1d1a482be3920b385dc4b1df789c705a040 +"@vercel/hydrogen@npm:0.0.16": + version: 0.0.16 + resolution: "@vercel/hydrogen@npm:0.0.16" + checksum: 2b3043dabef88624cf481f884fcb97d12f695a742b643dcb72b30ebf546c3a2cc0427c538ac44ebf490e4397ec4601d12590a02096e7eb2095be9ba232051d90 languageName: node linkType: hard -"@vercel/next@npm:3.1.20": - version: 3.1.20 - resolution: "@vercel/next@npm:3.1.20" - checksum: 8e846dc44ffdae1e7e01d3bbae49d852fe10670eb1c6a20bd1ff6f7aa52a950d6b108047fc41fb8c4d18d6842c888c16ee83b7d32822008046571c52507bbf91 +"@vercel/next@npm:3.1.22": + version: 3.1.22 + resolution: "@vercel/next@npm:3.1.22" + checksum: a3ceca8bc467dd831d7ea34597f21dc0a1b9affc0d59546f4f367cba2b20b60eaa043c2ff528a98c7438b35b088dccbf61a3e07d515b62a47d422d6ba9a48263 languageName: node linkType: hard -"@vercel/nft@npm:0.21.0": - version: 0.21.0 - resolution: "@vercel/nft@npm:0.21.0" +"@vercel/nft@npm:0.22.0": + version: 0.22.0 + resolution: "@vercel/nft@npm:0.22.0" dependencies: "@mapbox/node-pre-gyp": ^1.0.5 acorn: ^8.6.0 @@ -4554,7 +4570,7 @@ __metadata: rollup-pluginutils: ^2.8.2 bin: nft: out/cli.js - checksum: 832e71f0770ce0f1a01da432ebceedc3a20bca1f6b99db1451134b889a96e69c23e9774f2eebeb507798f448de13770997bd851eecd80fff6b15fd1cfc5b1dda + checksum: 06f649f76a0ffae0c02964cfe66acb9b722de054e0317829f0a992dfb9b941328cfa7cb722af847b8d641b87497c994cb315ecf2c7d1fbe8c15176af57676887 languageName: node linkType: hard @@ -4565,13 +4581,13 @@ __metadata: languageName: node linkType: hard -"@vercel/node@npm:2.5.8": - version: 2.5.8 - resolution: "@vercel/node@npm:2.5.8" +"@vercel/node@npm:2.5.11": + version: 2.5.11 + resolution: "@vercel/node@npm:2.5.11" dependencies: "@edge-runtime/vm": 1.1.0-beta.23 "@types/node": "*" - "@vercel/build-utils": 5.3.1 + "@vercel/build-utils": 5.4.0 "@vercel/node-bridge": 3.0.0 "@vercel/static-config": 2.0.3 edge-runtime: 1.1.0-beta.23 @@ -4580,34 +4596,34 @@ __metadata: node-fetch: 2.6.7 ts-node: 8.9.1 typescript: 4.3.4 - checksum: 2032cfc277cf38fbd65083d3d5d57f0a85fbc48df6daa7687759fea451faf014e90830d528d86dea09cd03cc5e85b869a5a6201239cbd9bc04ea1e0ece451217 + checksum: 14f970251089b60ab056edd1771990cb83dacfad990180994372d625e5a10a141070163c1f5061e017f60c559d227d2355ac218eb92cd3b2e1cb1e80974e0368 languageName: node linkType: hard -"@vercel/python@npm:3.1.10": - version: 3.1.10 - resolution: "@vercel/python@npm:3.1.10" - checksum: 956b2e1d3df2a5270d7e6d6a990c5d9cc767e07481c3a8e727ff13fc21629dc295efacc49896b41cfe2d76a4a806d3f682e55386972241a92f775d6f823a9f3a +"@vercel/python@npm:3.1.12": + version: 3.1.12 + resolution: "@vercel/python@npm:3.1.12" + checksum: cd2d3a3da806250aea6879ddc8dfe74c0a1b96fae1040abd084e55bea8a399895e4397f16ca4291561608c2190c996cfc06c11ee7fc5df1489be13f740c27c04 languageName: node linkType: hard -"@vercel/redwood@npm:1.0.18": - version: 1.0.18 - resolution: "@vercel/redwood@npm:1.0.18" +"@vercel/redwood@npm:1.0.20": + version: 1.0.20 + resolution: "@vercel/redwood@npm:1.0.20" dependencies: - "@vercel/nft": 0.21.0 + "@vercel/nft": 0.22.0 "@vercel/routing-utils": 2.0.2 semver: 6.1.1 - checksum: 85f6c79032a4b1edc87afcf737303dfeb16a010db0fc3917fcd6a1693eaa83b5f1ef17cc3323b3f5ad719b9bc1564774a29a30c712f29c7789a8a6a6e00c6a01 + checksum: 96f148361274e06ab39123a945d020caa8649115606e123f67352cb9303ee7c5c9ad1bdbfca8d90a03d8754de3678745fe20bd56c521ca8c37a10b2d7f0bec0c languageName: node linkType: hard -"@vercel/remix@npm:1.0.19": - version: 1.0.19 - resolution: "@vercel/remix@npm:1.0.19" +"@vercel/remix@npm:1.0.21": + version: 1.0.21 + resolution: "@vercel/remix@npm:1.0.21" dependencies: - "@vercel/nft": 0.21.0 - checksum: 76d9b24affc08635462dea29765c0f0e65c5cca172604a30bb588bf726847f58882c8befef08ca965a3fed45195970321e62b3efe90779a69bd5c4fed6634ddb + "@vercel/nft": 0.22.0 + checksum: 79d96113195abe47cf477063a83c3517e3f31c3c447bb5f7ee9c31e3a49089b438d087e49e7b33bed4708d409d648675a1042a0e6770b94919ddb9a45dffadeb languageName: node linkType: hard @@ -4624,17 +4640,17 @@ __metadata: languageName: node linkType: hard -"@vercel/ruby@npm:1.3.27": - version: 1.3.27 - resolution: "@vercel/ruby@npm:1.3.27" - checksum: aa6948e1288a20f23a1f6da6c90efef312f93123b0b7aa2e37507e97f341ae44fb3945f316b153f03f999e8d020213b28927fa1d0bdd30734f1df648c2986c34 +"@vercel/ruby@npm:1.3.29": + version: 1.3.29 + resolution: "@vercel/ruby@npm:1.3.29" + checksum: ecf3752075f6f4fb8ae2277a1bad2ae65081c597ac0b2ca8b3e2fd9c2d7e9da2350c86276dc10a2863fce23c71fe5a7389b3a800b6eb83ce7c9f98eb56ab2527 languageName: node linkType: hard -"@vercel/static-build@npm:1.0.18": - version: 1.0.18 - resolution: "@vercel/static-build@npm:1.0.18" - checksum: 5988a6d0c903d0f7301c70e0ae9e1e3927676c18f6f9a8d62fa3579e9e6c89b274ba5e09536b513dd33196e6066cb1d4df0c58751c086d41a47bfa951d07e513 +"@vercel/static-build@npm:1.0.20": + version: 1.0.20 + resolution: "@vercel/static-build@npm:1.0.20" + checksum: d51a0b662134ed129c69bcbd0a78ea91048cd7a44d228d5d53ad7fb834a157b6767c0eea5dcfdb9a0fbaf71d03a3c840b043d6271ebc2f759b39e6f3d03d9dc9 languageName: node linkType: hard @@ -5176,20 +5192,20 @@ __metadata: languageName: node linkType: hard -"babel-jest@npm:^28.1.3": - version: 28.1.3 - resolution: "babel-jest@npm:28.1.3" +"babel-jest@npm:^29.0.1": + version: 29.0.1 + resolution: "babel-jest@npm:29.0.1" dependencies: - "@jest/transform": ^28.1.3 + "@jest/transform": ^29.0.1 "@types/babel__core": ^7.1.14 babel-plugin-istanbul: ^6.1.1 - babel-preset-jest: ^28.1.3 + babel-preset-jest: ^29.0.0 chalk: ^4.0.0 graceful-fs: ^4.2.9 slash: ^3.0.0 peerDependencies: "@babel/core": ^7.8.0 - checksum: 57ccd2296e1839687b5df2fd138c3d00717e0369e385254b012ccd4ee70e75f5d5c8e6cfcdf92d155015b468cfebb847b38e69bb5805d8aaf730e20575127cc6 + checksum: 8aa919a981eb8129e16d802e5fd19674fdf4a6bacf11ce2360ebff2fa3aad013e8b14afa3ab247ebea26e4b64cad131036e42310fd9022ffc6a081fc7378914f languageName: node linkType: hard @@ -5215,15 +5231,15 @@ __metadata: languageName: node linkType: hard -"babel-plugin-jest-hoist@npm:^28.1.3": - version: 28.1.3 - resolution: "babel-plugin-jest-hoist@npm:28.1.3" +"babel-plugin-jest-hoist@npm:^29.0.0": + version: 29.0.0 + resolution: "babel-plugin-jest-hoist@npm:29.0.0" dependencies: "@babel/template": ^7.3.3 "@babel/types": ^7.3.3 "@types/babel__core": ^7.1.14 "@types/babel__traverse": ^7.0.6 - checksum: 648d89f9d80f6450ce7e50d0c32eb91b7f26269b47c3e37aaf2e0f2f66a980978345bd6b8c9b8c3aa6a8252ad2bc2c9fb50630e9895622c9a0972af5f70ed20e + checksum: e6f4c0821369bfb7e24e9cb7f62457dad9a38060a29c55775cfd6b99a0f21746b7b762eefab63544b3e7d807c135505253c50e931bf64a1875b5c64bea56e60b languageName: node linkType: hard @@ -5296,15 +5312,15 @@ __metadata: languageName: node linkType: hard -"babel-preset-jest@npm:^28.1.3": - version: 28.1.3 - resolution: "babel-preset-jest@npm:28.1.3" +"babel-preset-jest@npm:^29.0.0": + version: 29.0.0 + resolution: "babel-preset-jest@npm:29.0.0" dependencies: - babel-plugin-jest-hoist: ^28.1.3 + babel-plugin-jest-hoist: ^29.0.0 babel-preset-current-node-syntax: ^1.0.0 peerDependencies: "@babel/core": ^7.0.0 - checksum: 8248a4a5ca4242cc06ad13b10b9183ad2664da8fb0da060c352223dcf286f0ce9c708fa17901dc44ecabec25e6d309e5e5b9830a61dd777c3925f187a345a47d + checksum: b93b4c5a801527246a34ef847764e462ad4789893190cbefc3c42df972cdd057d0e50910650503d1051b3503dc89b9c2d06488c6d57e11fddcaac96cf3f7818a languageName: node linkType: hard @@ -6493,21 +6509,19 @@ __metadata: languageName: node linkType: hard -"cosmiconfig-typescript-loader@npm:^2.0.0": - version: 2.0.2 - resolution: "cosmiconfig-typescript-loader@npm:2.0.2" - dependencies: - cosmiconfig: ^7 - ts-node: ^10.8.1 +"cosmiconfig-typescript-loader@npm:^4.0.0": + version: 4.0.0 + resolution: "cosmiconfig-typescript-loader@npm:4.0.0" peerDependencies: "@types/node": "*" cosmiconfig: ">=7" + ts-node: ">=10" typescript: ">=3" - checksum: 0c9a777e2e3ff7594d753e5781e8c3817ce5ba493a4e69cfde698a8e231b438695248dcc62a16c661f93ada7f762ac6e24457889439c94f58c094a24aecbd982 + checksum: 9151ffe62d0b3b0bac7435add229febf04d72f4db8199390813fef071343865e91e823bd75210f9aabe218dc97a2cc2c776120c0dc886e9164947b80a910c19b languageName: node linkType: hard -"cosmiconfig@npm:^7, cosmiconfig@npm:^7.0.0": +"cosmiconfig@npm:^7.0.0": version: 7.0.1 resolution: "cosmiconfig@npm:7.0.1" dependencies: @@ -6837,6 +6851,13 @@ __metadata: languageName: node linkType: hard +"diff-sequences@npm:^29.0.0": + version: 29.0.0 + resolution: "diff-sequences@npm:29.0.0" + checksum: 2c084a3db03ecde26f649f6f2559974e01e174451debeb301a7e17199e73423a8e8ddeb9a35ae38638c084b4fa51296a4a20fa7f44f3db0c0ba566bdc704ed3d + languageName: node + linkType: hard + "diff@npm:^3.2.0": version: 3.5.0 resolution: "diff@npm:3.5.0" @@ -6876,10 +6897,10 @@ __metadata: languageName: node linkType: hard -"discord-api-types@npm:^0.37.4": - version: 0.37.4 - resolution: "discord-api-types@npm:0.37.4" - checksum: 18b74acfcd5f6c554668eb5cb31a5db9076dfb5cb6b5c538a342ab9d22816644bada22a66285468fe7dd9980287921d5d50ba3b11cc8e391fe4f09e761bcd179 +"discord-api-types@npm:^0.37.5": + version: 0.37.5 + resolution: "discord-api-types@npm:0.37.5" + checksum: 10a23b813d9a30d836aa27169f768883eeed971ab67e58325ff272bfe6b63b169d727ae983d7c1b69c7e0b02ed9072e66e79319ce48174b36cd4a2a5fafe2e9f languageName: node linkType: hard @@ -6893,20 +6914,20 @@ __metadata: "@discordjs/rest": "workspace:^" "@favware/cliff-jumper": ^1.8.7 "@sapphire/snowflake": ^3.2.2 - "@types/node": ^16.11.54 + "@types/node": ^16.11.56 "@types/ws": ^8.5.3 - discord-api-types: ^0.37.4 + discord-api-types: ^0.37.5 dtslint: ^4.2.1 - eslint: ^8.22.0 + eslint: ^8.23.0 fast-deep-equal: ^3.1.3 - jest: ^28.1.3 + jest: ^29.0.1 lodash.snakecase: ^4.1.1 prettier: ^2.7.1 - tsd: ^0.22.0 + tsd: ^0.23.0 tslib: ^2.4.0 tslint: ^6.1.3 - typescript: ^4.7.4 - undici: ^5.9.1 + typescript: ^4.8.2 + undici: ^5.10.0 ws: ^8.8.1 languageName: unknown linkType: soft @@ -7003,16 +7024,16 @@ __metadata: languageName: node linkType: hard -"downlevel-dts@npm:^0.10.0": - version: 0.10.0 - resolution: "downlevel-dts@npm:0.10.0" +"downlevel-dts@npm:^0.10.1": + version: 0.10.1 + resolution: "downlevel-dts@npm:0.10.1" dependencies: semver: ^7.3.2 shelljs: ^0.8.3 typescript: next bin: downlevel-dts: index.js - checksum: c0ac21a13a5060913a31ece1af8f817d50b7ad4875cd855b34f0560d46d78e0f02b93bdd8eb81735db9cbfaeef22f56c5be4e9d74b91ea44f63c5335c0d32bbf + checksum: d66fe88fdd6e2309fbec1fe57f2697bb3d925db2d1a9e5ed2c8d58adf1bc6f9ead44e8bd5d484179d3ee84f110b9bfed8abda63867d8418515a61daedccbbee4 languageName: node linkType: hard @@ -8067,9 +8088,9 @@ __metadata: languageName: node linkType: hard -"eslint-plugin-react@npm:^7.30.1": - version: 7.30.1 - resolution: "eslint-plugin-react@npm:7.30.1" +"eslint-plugin-react@npm:^7.31.1": + version: 7.31.1 + resolution: "eslint-plugin-react@npm:7.31.1" dependencies: array-includes: ^3.1.5 array.prototype.flatmap: ^1.3.0 @@ -8087,7 +8108,7 @@ __metadata: string.prototype.matchall: ^4.0.7 peerDependencies: eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 - checksum: 553fb9ece6beb7c14cf6f84670c786c8ac978c2918421994dcc4edd2385302022e5d5ac4a39fafdb35954e29cecddefed61758040c3c530cafcf651f674a9d51 + checksum: 6217d4c4e36c8fea24facd0cdcf22b2fd38a3603db94ec7c0a6f430046c8564b6c6884e0a9d4a4b8766201f66e8b18af594002210421bf9b6623b1fc32e15a3a languageName: node linkType: hard @@ -8153,13 +8174,14 @@ __metadata: languageName: node linkType: hard -"eslint@npm:^8.22.0": - version: 8.22.0 - resolution: "eslint@npm:8.22.0" +"eslint@npm:^8.23.0": + version: 8.23.0 + resolution: "eslint@npm:8.23.0" dependencies: - "@eslint/eslintrc": ^1.3.0 + "@eslint/eslintrc": ^1.3.1 "@humanwhocodes/config-array": ^0.10.4 "@humanwhocodes/gitignore-to-minimatch": ^1.0.2 + "@humanwhocodes/module-importer": ^1.0.1 ajv: ^6.10.0 chalk: ^4.0.0 cross-spawn: ^7.0.2 @@ -8169,7 +8191,7 @@ __metadata: eslint-scope: ^7.1.1 eslint-utils: ^3.0.0 eslint-visitor-keys: ^3.3.0 - espree: ^9.3.3 + espree: ^9.4.0 esquery: ^1.4.0 esutils: ^2.0.2 fast-deep-equal: ^3.1.3 @@ -8195,21 +8217,20 @@ __metadata: strip-ansi: ^6.0.1 strip-json-comments: ^3.1.0 text-table: ^0.2.0 - v8-compile-cache: ^2.0.3 bin: eslint: bin/eslint.js - checksum: 2d84a7a2207138cdb250759b047fdb05a57fede7f87b7a039d9370edba7f26e23a873a208becfd4b2c9e4b5499029f3fc3b9318da3290e693d25c39084119c80 + checksum: ff6075daa28d817a7ac4508f31bc108a04d9ab5056608c8651b5bf9cfea5d708ca16dea6cdab2c3c0ae99b0bf0e726af8504eaa8e17c8e12e242cb68237ead64 languageName: node linkType: hard -"espree@npm:^9.3.2, espree@npm:^9.3.3": - version: 9.3.3 - resolution: "espree@npm:9.3.3" +"espree@npm:^9.4.0": + version: 9.4.0 + resolution: "espree@npm:9.4.0" dependencies: acorn: ^8.8.0 acorn-jsx: ^5.3.2 eslint-visitor-keys: ^3.3.0 - checksum: 33e8a36fc15d082e68672e322e22a53856b564d60aad8f291a667bfc21b2c900c42412d37dd3c7a0f18b9d0d8f8858dabe8776dbd4b4c2f72c5cf4d6afeabf65 + checksum: 2e3020dde67892d2ba3632413b44d0dc31d92c29ce72267d7ec24216a562f0a6494d3696e2fa39a3ec8c0e0088d773947ab2925fbb716801a11eb8dd313ac89c languageName: node linkType: hard @@ -8393,7 +8414,7 @@ __metadata: languageName: node linkType: hard -"expect@npm:^28.0.0, expect@npm:^28.1.3": +"expect@npm:^28.0.0": version: 28.1.3 resolution: "expect@npm:28.1.3" dependencies: @@ -8406,6 +8427,19 @@ __metadata: languageName: node linkType: hard +"expect@npm:^29.0.1": + version: 29.0.1 + resolution: "expect@npm:29.0.1" + dependencies: + "@jest/expect-utils": ^29.0.1 + jest-get-type: ^29.0.0 + jest-matcher-utils: ^29.0.1 + jest-message-util: ^29.0.1 + jest-util: ^29.0.1 + checksum: 103d9ecd00d5caefa0e536cde7abefa767f66d0e9ed8e00cf9e1bc1a14dfcee02080ebb9857974250dc68f3e525a85d81796fc37e405838d4cdb3613d76e48a4 + languageName: node + linkType: hard + "extend@npm:^3.0.0, extend@npm:~3.0.2": version: 3.0.2 resolution: "extend@npm:3.0.2" @@ -8447,7 +8481,7 @@ __metadata: languageName: node linkType: hard -"fast-json-stable-stringify@npm:^2.0.0": +"fast-json-stable-stringify@npm:^2.0.0, fast-json-stable-stringify@npm:^2.1.0": version: 2.1.0 resolution: "fast-json-stable-stringify@npm:2.1.0" checksum: b191531e36c607977e5b1c47811158733c34ccb3bfde92c44798929e9b4154884378536d26ad90dfecd32e1ffc09c545d23535ad91b3161a27ddbb8ebe0cbecb @@ -8514,14 +8548,14 @@ __metadata: languageName: node linkType: hard -"file-type@npm:^17.1.6": - version: 17.1.6 - resolution: "file-type@npm:17.1.6" +"file-type@npm:^18.0.0": + version: 18.0.0 + resolution: "file-type@npm:18.0.0" dependencies: readable-web-to-node-stream: ^3.0.2 - strtok3: ^7.0.0-alpha.9 - token-types: ^5.0.0-alpha.2 - checksum: 797e0d155ecaf4b575d4569a0188bfed85af19d18cf3d93ec8bb66d797172a1fde9f13d56135c6a0b471cacd7ecc1adb0c9a45c6e3a19436f682a275d0be16cc + strtok3: ^7.0.0 + token-types: ^5.0.1 + checksum: 67f5a927b8030e35a4faf9dd9dea9e17bcb042fb61b9851b7dd1b1b3bb3ecfdd9f83bc3bc72686316ea2bac70df652c61e10affa9b5957b1a3d731df4925e3cb languageName: node linkType: hard @@ -10412,57 +10446,57 @@ __metadata: languageName: node linkType: hard -"jest-changed-files@npm:^28.1.3": - version: 28.1.3 - resolution: "jest-changed-files@npm:28.1.3" +"jest-changed-files@npm:^29.0.0": + version: 29.0.0 + resolution: "jest-changed-files@npm:29.0.0" dependencies: execa: ^5.0.0 p-limit: ^3.1.0 - checksum: c78af14a68b9b19101623ae7fde15a2488f9b3dbe8cca12a05c4a223bc9bfd3bf41ee06830f20fb560c52434435d6153c9cc6cf450b1f7b03e5e7f96a953a6a6 + checksum: 5642ace8cd1e7e4f9e3ee423b97d0b018b00ad85ea7e5864592b4657e8500ef56ec50d2189229b912223046bbf31c9196c8ef2442a917be9726a5911d40db1b2 languageName: node linkType: hard -"jest-circus@npm:^28.1.3": - version: 28.1.3 - resolution: "jest-circus@npm:28.1.3" +"jest-circus@npm:^29.0.1": + version: 29.0.1 + resolution: "jest-circus@npm:29.0.1" dependencies: - "@jest/environment": ^28.1.3 - "@jest/expect": ^28.1.3 - "@jest/test-result": ^28.1.3 - "@jest/types": ^28.1.3 + "@jest/environment": ^29.0.1 + "@jest/expect": ^29.0.1 + "@jest/test-result": ^29.0.1 + "@jest/types": ^29.0.1 "@types/node": "*" chalk: ^4.0.0 co: ^4.6.0 dedent: ^0.7.0 is-generator-fn: ^2.0.0 - jest-each: ^28.1.3 - jest-matcher-utils: ^28.1.3 - jest-message-util: ^28.1.3 - jest-runtime: ^28.1.3 - jest-snapshot: ^28.1.3 - jest-util: ^28.1.3 + jest-each: ^29.0.1 + jest-matcher-utils: ^29.0.1 + jest-message-util: ^29.0.1 + jest-runtime: ^29.0.1 + jest-snapshot: ^29.0.1 + jest-util: ^29.0.1 p-limit: ^3.1.0 - pretty-format: ^28.1.3 + pretty-format: ^29.0.1 slash: ^3.0.0 stack-utils: ^2.0.3 - checksum: b635e60a9c92adaefc3f24def8eba691e7c2fdcf6c9fa640cddf2eb8c8b26ee62eab73ebb88798fd7c52a74c1495a984e39b748429b610426f02e9d3d56e09b2 + checksum: 9cdb10b8def60ee9419f7efdba22dc94544d3e150d0d3350c8085bc1dc9330abb586a8d2bd840915198a11064704c2cf22902ecfbe97c698b896c5a9dafa345e languageName: node linkType: hard -"jest-cli@npm:^28.1.3": - version: 28.1.3 - resolution: "jest-cli@npm:28.1.3" +"jest-cli@npm:^29.0.1": + version: 29.0.1 + resolution: "jest-cli@npm:29.0.1" dependencies: - "@jest/core": ^28.1.3 - "@jest/test-result": ^28.1.3 - "@jest/types": ^28.1.3 + "@jest/core": ^29.0.1 + "@jest/test-result": ^29.0.1 + "@jest/types": ^29.0.1 chalk: ^4.0.0 exit: ^0.1.2 graceful-fs: ^4.2.9 import-local: ^3.0.2 - jest-config: ^28.1.3 - jest-util: ^28.1.3 - jest-validate: ^28.1.3 + jest-config: ^29.0.1 + jest-util: ^29.0.1 + jest-validate: ^29.0.1 prompts: ^2.0.1 yargs: ^17.3.1 peerDependencies: @@ -10472,34 +10506,34 @@ __metadata: optional: true bin: jest: bin/jest.js - checksum: fb424576bf38346318daddee3fcc597cd78cb8dda1759d09c529d8ba1a748f2765c17b00671072a838826e59465a810ff8a232bc6ba2395c131bf3504425a363 + checksum: 5bd9c5fa6f58d7ca686391edb44fcc8a5f161f698ce8bad6cc8a9ee8e0d355d870ef8db26a49559fa1229518bc90926d83a6da1509a004f9a2ed618177516fb4 languageName: node linkType: hard -"jest-config@npm:^28.1.3": - version: 28.1.3 - resolution: "jest-config@npm:28.1.3" +"jest-config@npm:^29.0.1": + version: 29.0.1 + resolution: "jest-config@npm:29.0.1" dependencies: "@babel/core": ^7.11.6 - "@jest/test-sequencer": ^28.1.3 - "@jest/types": ^28.1.3 - babel-jest: ^28.1.3 + "@jest/test-sequencer": ^29.0.1 + "@jest/types": ^29.0.1 + babel-jest: ^29.0.1 chalk: ^4.0.0 ci-info: ^3.2.0 deepmerge: ^4.2.2 glob: ^7.1.3 graceful-fs: ^4.2.9 - jest-circus: ^28.1.3 - jest-environment-node: ^28.1.3 - jest-get-type: ^28.0.2 - jest-regex-util: ^28.0.2 - jest-resolve: ^28.1.3 - jest-runner: ^28.1.3 - jest-util: ^28.1.3 - jest-validate: ^28.1.3 + jest-circus: ^29.0.1 + jest-environment-node: ^29.0.1 + jest-get-type: ^29.0.0 + jest-regex-util: ^29.0.0 + jest-resolve: ^29.0.1 + jest-runner: ^29.0.1 + jest-util: ^29.0.1 + jest-validate: ^29.0.1 micromatch: ^4.0.4 parse-json: ^5.2.0 - pretty-format: ^28.1.3 + pretty-format: ^29.0.1 slash: ^3.0.0 strip-json-comments: ^3.1.1 peerDependencies: @@ -10510,7 +10544,7 @@ __metadata: optional: true ts-node: optional: true - checksum: ddabffd3a3a8cb6c2f58f06cdf3535157dbf8c70bcde3e5c3de7bee6a8d617840ffc8cffb0083e38c6814f2a08c225ca19f58898efaf4f351af94679f22ce6bc + checksum: 2660a91907838a1fb1eebcb3983f4968d973f8ad66e8ccecfc1eae6bfbd3b5d4db937e04b8dd57b969126b19a008d96d26d68d5307a1ea55bbc79adbf968524a languageName: node linkType: hard @@ -10526,39 +10560,51 @@ __metadata: languageName: node linkType: hard -"jest-docblock@npm:^28.1.1": - version: 28.1.1 - resolution: "jest-docblock@npm:28.1.1" +"jest-diff@npm:^29.0.1": + version: 29.0.1 + resolution: "jest-diff@npm:29.0.1" + dependencies: + chalk: ^4.0.0 + diff-sequences: ^29.0.0 + jest-get-type: ^29.0.0 + pretty-format: ^29.0.1 + checksum: f6f80ab9af14dee8046342d074ab64b1c0c4eb5d4a5d71aec0c71eba0192be1864fc5c270a33c6163184561b1fe516c0e2ecd3f21b267340cf710bab61441b3d + languageName: node + linkType: hard + +"jest-docblock@npm:^29.0.0": + version: 29.0.0 + resolution: "jest-docblock@npm:29.0.0" dependencies: detect-newline: ^3.0.0 - checksum: 22fca68d988ecb2933bc65f448facdca85fc71b4bd0a188ea09a5ae1b0cc3a049a2a6ec7e7eaa2542c1d5cb5e5145e420a3df4fa280f5070f486c44da1d36151 + checksum: b4f81426cc0dffb05b873d3cc373a1643040be62d72cce4dfed499fbcb57c55ac02c44af7aba5e7753915ff5e85b8d6030456981156eaea20be1cb57d2719904 languageName: node linkType: hard -"jest-each@npm:^28.1.3": - version: 28.1.3 - resolution: "jest-each@npm:28.1.3" +"jest-each@npm:^29.0.1": + version: 29.0.1 + resolution: "jest-each@npm:29.0.1" dependencies: - "@jest/types": ^28.1.3 + "@jest/types": ^29.0.1 chalk: ^4.0.0 - jest-get-type: ^28.0.2 - jest-util: ^28.1.3 - pretty-format: ^28.1.3 - checksum: 5c5b8ccb1484e58b027bea682cfa020a45e5bf5379cc7c23bdec972576c1dc3c3bf03df2b78416cefc1a58859dd33b7cf5fff54c370bc3c0f14a3e509eb87282 + jest-get-type: ^29.0.0 + jest-util: ^29.0.1 + pretty-format: ^29.0.1 + checksum: 522ccc7dde6df3f979ab62145998780b6103086ac05dc512554a11095b6927d1246d177e3081b32f3b0030d87114ac85eb6ada7a42473c1ba1e3b7826ef60015 languageName: node linkType: hard -"jest-environment-node@npm:^28.1.3": - version: 28.1.3 - resolution: "jest-environment-node@npm:28.1.3" +"jest-environment-node@npm:^29.0.1": + version: 29.0.1 + resolution: "jest-environment-node@npm:29.0.1" dependencies: - "@jest/environment": ^28.1.3 - "@jest/fake-timers": ^28.1.3 - "@jest/types": ^28.1.3 + "@jest/environment": ^29.0.1 + "@jest/fake-timers": ^29.0.1 + "@jest/types": ^29.0.1 "@types/node": "*" - jest-mock: ^28.1.3 - jest-util: ^28.1.3 - checksum: 1048fe306a6a8b0880a4c66278ebb57479f29c12cff89aab3aa79ab77a8859cf17ab8aa9919fd21c329a7db90e35581b43664e694ad453d5b04e00f3c6420469 + jest-mock: ^29.0.1 + jest-util: ^29.0.1 + checksum: a7e47ae14471e6c3a1de611fe67e1810c8ea7fe288282b6c084058de8d2b825017a2393bed689a6c0ac8abafd3ac00e3c48b5ccdadc5be7d577b1ec68f51aac3 languageName: node linkType: hard @@ -10569,36 +10615,43 @@ __metadata: languageName: node linkType: hard -"jest-haste-map@npm:^28.1.3": - version: 28.1.3 - resolution: "jest-haste-map@npm:28.1.3" +"jest-get-type@npm:^29.0.0": + version: 29.0.0 + resolution: "jest-get-type@npm:29.0.0" + checksum: 9abdd11d69788963a92fb9d813a7b887654ecc8f3a3c8bf83166d33aaf4d57ed380e74ab8ef106f57565dd235446ca6ebc607679f0c516c4633e6d09f0540a2b + languageName: node + linkType: hard + +"jest-haste-map@npm:^29.0.1": + version: 29.0.1 + resolution: "jest-haste-map@npm:29.0.1" dependencies: - "@jest/types": ^28.1.3 + "@jest/types": ^29.0.1 "@types/graceful-fs": ^4.1.3 "@types/node": "*" anymatch: ^3.0.3 fb-watchman: ^2.0.0 fsevents: ^2.3.2 graceful-fs: ^4.2.9 - jest-regex-util: ^28.0.2 - jest-util: ^28.1.3 - jest-worker: ^28.1.3 + jest-regex-util: ^29.0.0 + jest-util: ^29.0.1 + jest-worker: ^29.0.1 micromatch: ^4.0.4 walker: ^1.0.8 dependenciesMeta: fsevents: optional: true - checksum: d05fdc108645fc2b39fcd4001952cc7a8cb550e93494e98c1e9ab1fc542686f6ac67177c132e564cf94fe8f81503f3f8db8b825b9b713dc8c5748aec63ba4688 + checksum: fd3835bad2d4fd78768a868f801bb0eb47e22e1b4cf4098ae22edba01d3e1ac5bdf9ff795284f70bc4a307cd5b763eb427ee3a3da17f04a29f052309e4e57f78 languageName: node linkType: hard -"jest-leak-detector@npm:^28.1.3": - version: 28.1.3 - resolution: "jest-leak-detector@npm:28.1.3" +"jest-leak-detector@npm:^29.0.1": + version: 29.0.1 + resolution: "jest-leak-detector@npm:29.0.1" dependencies: - jest-get-type: ^28.0.2 - pretty-format: ^28.1.3 - checksum: 2e976a4880cf9af11f53a19f6a3820e0f90b635a900737a5427fc42e337d5628ba446dcd7c020ecea3806cf92bc0bbf6982ed62a9cd84e5a13d8751aa30fbbb7 + jest-get-type: ^29.0.0 + pretty-format: ^29.0.1 + checksum: 57cbe9d1cc4c56029c323f7c9cebf841a28265fc4edab1fe4f7ba48941e2bd1a65b3fd2c530ec8d7a2ad71b97a002e2cd88bb7751de82abe001262a1ae27c9e8 languageName: node linkType: hard @@ -10614,6 +10667,18 @@ __metadata: languageName: node linkType: hard +"jest-matcher-utils@npm:^29.0.1": + version: 29.0.1 + resolution: "jest-matcher-utils@npm:29.0.1" + dependencies: + chalk: ^4.0.0 + jest-diff: ^29.0.1 + jest-get-type: ^29.0.0 + pretty-format: ^29.0.1 + checksum: 1ad41a91d05703b3396c9a344a4c1afd9155913403289b0d5282e42e67540418f17f802a60bae4e3931eb80a08d42b4e6f1e04835d4d122cc83ccd68fe181524 + languageName: node + linkType: hard + "jest-message-util@npm:^28.1.3": version: 28.1.3 resolution: "jest-message-util@npm:28.1.3" @@ -10631,13 +10696,30 @@ __metadata: languageName: node linkType: hard -"jest-mock@npm:^28.1.3": - version: 28.1.3 - resolution: "jest-mock@npm:28.1.3" +"jest-message-util@npm:^29.0.1": + version: 29.0.1 + resolution: "jest-message-util@npm:29.0.1" dependencies: - "@jest/types": ^28.1.3 + "@babel/code-frame": ^7.12.13 + "@jest/types": ^29.0.1 + "@types/stack-utils": ^2.0.0 + chalk: ^4.0.0 + graceful-fs: ^4.2.9 + micromatch: ^4.0.4 + pretty-format: ^29.0.1 + slash: ^3.0.0 + stack-utils: ^2.0.3 + checksum: cef700aeb8746d1e55a39ba4d9bfc91d580373cf4afca22ee9499dee7ab0147ea8349ccb0c2b2d89ab5f374a9f67ec0560dc6eeb123a28795fafb6bf0ac5f9a3 + languageName: node + linkType: hard + +"jest-mock@npm:^29.0.1": + version: 29.0.1 + resolution: "jest-mock@npm:29.0.1" + dependencies: + "@jest/types": ^29.0.1 "@types/node": "*" - checksum: a573bf8e5f12f4c29c661266c31b5c6b69a28d3195b83049983bce025b2b1a0152351567e89e63b102ef817034c2a3aa97eda4e776f3bae2aee54c5765573aa7 + checksum: a81974c381112f4316e0e9491936b0a11d283959f7bb238ce8b99bb38d243828fedfa084d3cefc7a7e2f4d7fd3ac546a556085d5f17262b1667e2ca348c0ccd6 languageName: node linkType: hard @@ -10653,127 +10735,128 @@ __metadata: languageName: node linkType: hard -"jest-regex-util@npm:^28.0.2": - version: 28.0.2 - resolution: "jest-regex-util@npm:28.0.2" - checksum: 0ea8c5c82ec88bc85e273c0ec82e0c0f35f7a1e2d055070e50f0cc2a2177f848eec55f73e37ae0d045c3db5014c42b2f90ac62c1ab3fdb354d2abd66a9e08add +"jest-regex-util@npm:^29.0.0": + version: 29.0.0 + resolution: "jest-regex-util@npm:29.0.0" + checksum: dce16394c357213008e6f84f2288f77c64bba59b7cb48ea614e85c5aae036a7e46dbfd1f45aa08180b7e7c576102bf4f8f0ff8bc60fb9721fb80874adc3ae0ea languageName: node linkType: hard -"jest-resolve-dependencies@npm:^28.1.3": - version: 28.1.3 - resolution: "jest-resolve-dependencies@npm:28.1.3" +"jest-resolve-dependencies@npm:^29.0.1": + version: 29.0.1 + resolution: "jest-resolve-dependencies@npm:29.0.1" dependencies: - jest-regex-util: ^28.0.2 - jest-snapshot: ^28.1.3 - checksum: 4eea9ec33aefc1c71dc5956391efbcc7be76bda986b366ab3931d99c5f7ed01c9ebd7520e405ea2c76e1bb2c7ce504be6eca2b9831df16564d1e625500f3bfe7 + jest-regex-util: ^29.0.0 + jest-snapshot: ^29.0.1 + checksum: e8d16137def352324f0b57195be484cd139d8d7eab67bc7d23633a61210c19cd396d18be8bf5a2d6fe269e3a70661fd6cad792a401b4609363375787a991bbe9 languageName: node linkType: hard -"jest-resolve@npm:^28.1.3": - version: 28.1.3 - resolution: "jest-resolve@npm:28.1.3" +"jest-resolve@npm:^29.0.1": + version: 29.0.1 + resolution: "jest-resolve@npm:29.0.1" dependencies: chalk: ^4.0.0 graceful-fs: ^4.2.9 - jest-haste-map: ^28.1.3 + jest-haste-map: ^29.0.1 jest-pnp-resolver: ^1.2.2 - jest-util: ^28.1.3 - jest-validate: ^28.1.3 + jest-util: ^29.0.1 + jest-validate: ^29.0.1 resolve: ^1.20.0 resolve.exports: ^1.1.0 slash: ^3.0.0 - checksum: df61a490c93f4f4cf52135e43d6a4fcacb07b0b7d4acc6319e9289529c1d14f2d8e1638e095dbf96f156834802755e38db68caca69dba21a3261ee711d4426b6 + checksum: f6716177c430ea4a073accc4e72d4f55f9d12804e789e10363946b9db89ffd12104b18541c7c468340a85a5dc4226d2538fb70e79f4be6b0761aed3d7315b5c9 languageName: node linkType: hard -"jest-runner@npm:^28.1.3": - version: 28.1.3 - resolution: "jest-runner@npm:28.1.3" +"jest-runner@npm:^29.0.1": + version: 29.0.1 + resolution: "jest-runner@npm:29.0.1" dependencies: - "@jest/console": ^28.1.3 - "@jest/environment": ^28.1.3 - "@jest/test-result": ^28.1.3 - "@jest/transform": ^28.1.3 - "@jest/types": ^28.1.3 + "@jest/console": ^29.0.1 + "@jest/environment": ^29.0.1 + "@jest/test-result": ^29.0.1 + "@jest/transform": ^29.0.1 + "@jest/types": ^29.0.1 "@types/node": "*" chalk: ^4.0.0 emittery: ^0.10.2 graceful-fs: ^4.2.9 - jest-docblock: ^28.1.1 - jest-environment-node: ^28.1.3 - jest-haste-map: ^28.1.3 - jest-leak-detector: ^28.1.3 - jest-message-util: ^28.1.3 - jest-resolve: ^28.1.3 - jest-runtime: ^28.1.3 - jest-util: ^28.1.3 - jest-watcher: ^28.1.3 - jest-worker: ^28.1.3 + jest-docblock: ^29.0.0 + jest-environment-node: ^29.0.1 + jest-haste-map: ^29.0.1 + jest-leak-detector: ^29.0.1 + jest-message-util: ^29.0.1 + jest-resolve: ^29.0.1 + jest-runtime: ^29.0.1 + jest-util: ^29.0.1 + jest-watcher: ^29.0.1 + jest-worker: ^29.0.1 p-limit: ^3.1.0 source-map-support: 0.5.13 - checksum: 32405cd970fa6b11e039192dae699fd1bcc6f61f67d50605af81d193f24dd4373b25f5fcc1c571a028ec1b02174e8a4b6d0d608772063fb06f08a5105693533b + checksum: 1b8933732c8fe897de193068155db86e70ff0795ab406a2294469f98fa3d902d0fd517add61c6116abc3e507304a0bbfbfe58271642a26d15211d2f6d8d8fa8d languageName: node linkType: hard -"jest-runtime@npm:^28.1.3": - version: 28.1.3 - resolution: "jest-runtime@npm:28.1.3" - dependencies: - "@jest/environment": ^28.1.3 - "@jest/fake-timers": ^28.1.3 - "@jest/globals": ^28.1.3 - "@jest/source-map": ^28.1.2 - "@jest/test-result": ^28.1.3 - "@jest/transform": ^28.1.3 - "@jest/types": ^28.1.3 +"jest-runtime@npm:^29.0.1": + version: 29.0.1 + resolution: "jest-runtime@npm:29.0.1" + dependencies: + "@jest/environment": ^29.0.1 + "@jest/fake-timers": ^29.0.1 + "@jest/globals": ^29.0.1 + "@jest/source-map": ^29.0.0 + "@jest/test-result": ^29.0.1 + "@jest/transform": ^29.0.1 + "@jest/types": ^29.0.1 + "@types/node": "*" chalk: ^4.0.0 cjs-module-lexer: ^1.0.0 collect-v8-coverage: ^1.0.0 - execa: ^5.0.0 glob: ^7.1.3 graceful-fs: ^4.2.9 - jest-haste-map: ^28.1.3 - jest-message-util: ^28.1.3 - jest-mock: ^28.1.3 - jest-regex-util: ^28.0.2 - jest-resolve: ^28.1.3 - jest-snapshot: ^28.1.3 - jest-util: ^28.1.3 + jest-haste-map: ^29.0.1 + jest-message-util: ^29.0.1 + jest-mock: ^29.0.1 + jest-regex-util: ^29.0.0 + jest-resolve: ^29.0.1 + jest-snapshot: ^29.0.1 + jest-util: ^29.0.1 slash: ^3.0.0 strip-bom: ^4.0.0 - checksum: b17c40af858e74dafa4f515ef3711c1e9ef3d4ad7d74534ee0745422534bc04fd166d4eceb62a3aa7dc951505d6f6d2a81d16e90bebb032be409ec0500974a36 + checksum: a5e87370aefc489ae4294c88e633d0dcfd69197c4f5f7a2d68e447bcdfcae3bf220527dddd85832279e3f68548f429219609cbe29c406a744f75ed70487ae8b6 languageName: node linkType: hard -"jest-snapshot@npm:^28.1.3": - version: 28.1.3 - resolution: "jest-snapshot@npm:28.1.3" +"jest-snapshot@npm:^29.0.1": + version: 29.0.1 + resolution: "jest-snapshot@npm:29.0.1" dependencies: "@babel/core": ^7.11.6 "@babel/generator": ^7.7.2 + "@babel/plugin-syntax-jsx": ^7.7.2 "@babel/plugin-syntax-typescript": ^7.7.2 "@babel/traverse": ^7.7.2 "@babel/types": ^7.3.3 - "@jest/expect-utils": ^28.1.3 - "@jest/transform": ^28.1.3 - "@jest/types": ^28.1.3 + "@jest/expect-utils": ^29.0.1 + "@jest/transform": ^29.0.1 + "@jest/types": ^29.0.1 "@types/babel__traverse": ^7.0.6 "@types/prettier": ^2.1.5 babel-preset-current-node-syntax: ^1.0.0 chalk: ^4.0.0 - expect: ^28.1.3 + expect: ^29.0.1 graceful-fs: ^4.2.9 - jest-diff: ^28.1.3 - jest-get-type: ^28.0.2 - jest-haste-map: ^28.1.3 - jest-matcher-utils: ^28.1.3 - jest-message-util: ^28.1.3 - jest-util: ^28.1.3 + jest-diff: ^29.0.1 + jest-get-type: ^29.0.0 + jest-haste-map: ^29.0.1 + jest-matcher-utils: ^29.0.1 + jest-message-util: ^29.0.1 + jest-util: ^29.0.1 natural-compare: ^1.4.0 - pretty-format: ^28.1.3 + pretty-format: ^29.0.1 semver: ^7.3.5 - checksum: 2a46a5493f1fb50b0a236a21f25045e7f46a244f9f3ae37ef4fbcd40249d0d68bb20c950ce77439e4e2cac985b05c3061c90b34739bf6069913a1199c8c716e1 + checksum: 838bd4b322622f5f0f6956f1a9a77dab6f4aa6e864e9144b21a37caa6bf2ed9ca1e16a89c7dd3a1eecd6ce754c351781e8ff16edddc2c72f9876f3b02cf873df languageName: node linkType: hard @@ -10791,33 +10874,47 @@ __metadata: languageName: node linkType: hard -"jest-validate@npm:^28.1.3": - version: 28.1.3 - resolution: "jest-validate@npm:28.1.3" +"jest-util@npm:^29.0.1": + version: 29.0.1 + resolution: "jest-util@npm:29.0.1" dependencies: - "@jest/types": ^28.1.3 + "@jest/types": ^29.0.1 + "@types/node": "*" + chalk: ^4.0.0 + ci-info: ^3.2.0 + graceful-fs: ^4.2.9 + picomatch: ^2.2.3 + checksum: 7404658788d9a8f3c69b946cbf7d9a773f1b353474792ab4d63b0e7f44cf07be87999102b49f2396e205a43b1b995a742ccc1d4a23966594c4b8976d0d116935 + languageName: node + linkType: hard + +"jest-validate@npm:^29.0.1": + version: 29.0.1 + resolution: "jest-validate@npm:29.0.1" + dependencies: + "@jest/types": ^29.0.1 camelcase: ^6.2.0 chalk: ^4.0.0 - jest-get-type: ^28.0.2 + jest-get-type: ^29.0.0 leven: ^3.1.0 - pretty-format: ^28.1.3 - checksum: 95e0513b3803c3372a145cda86edbdb33d9dfeaa18818176f2d581e821548ceac9a179f065b6d4671a941de211354efd67f1fff8789a4fb89962565c85f646db + pretty-format: ^29.0.1 + checksum: a78523cc57ee26d5a4eec8a1b185dc63dc954172560b44321c979836ba7f699ba20d282359ac54b1c57811b87a626aae362b687ff8ff3d22f3e73b65dbbd57b4 languageName: node linkType: hard -"jest-watcher@npm:^28.1.3": - version: 28.1.3 - resolution: "jest-watcher@npm:28.1.3" +"jest-watcher@npm:^29.0.1": + version: 29.0.1 + resolution: "jest-watcher@npm:29.0.1" dependencies: - "@jest/test-result": ^28.1.3 - "@jest/types": ^28.1.3 + "@jest/test-result": ^29.0.1 + "@jest/types": ^29.0.1 "@types/node": "*" ansi-escapes: ^4.2.1 chalk: ^4.0.0 emittery: ^0.10.2 - jest-util: ^28.1.3 + jest-util: ^29.0.1 string-length: ^4.0.1 - checksum: 8f6d674a4865e7df251f71544f1b51f06fd36b5a3a61f2ac81aeb81fa2a196be354fba51d0f97911c88f67cd254583b3a22ee124bf2c5b6ee2fadec27356c207 + checksum: e5e188d35db7253813600fb7b229738e4fe306f1afdf74bfe66b0c4db111fdea70fa1b2d078443119558fd8f84677a78bd1fd65367ff88f263773a24d49e277c languageName: node linkType: hard @@ -10831,25 +10928,25 @@ __metadata: languageName: node linkType: hard -"jest-worker@npm:^28.1.3": - version: 28.1.3 - resolution: "jest-worker@npm:28.1.3" +"jest-worker@npm:^29.0.1": + version: 29.0.1 + resolution: "jest-worker@npm:29.0.1" dependencies: "@types/node": "*" merge-stream: ^2.0.0 supports-color: ^8.0.0 - checksum: e921c9a1b8f0909da9ea07dbf3592f95b653aef3a8bb0cbcd20fc7f9a795a1304adecac31eecb308992c167e8d7e75c522061fec38a5928ace0f9571c90169ca + checksum: f246b3b326ea3bca0f2f7023601ea74db9e51c1ae5801a0ff9a27f0044298db1579c09dbe27ea2accd2fa0bb295958bae8c5c6af4fa512082425b69a1b8730ee languageName: node linkType: hard -"jest@npm:^28.1.3": - version: 28.1.3 - resolution: "jest@npm:28.1.3" +"jest@npm:^29.0.1": + version: 29.0.1 + resolution: "jest@npm:29.0.1" dependencies: - "@jest/core": ^28.1.3 - "@jest/types": ^28.1.3 + "@jest/core": ^29.0.1 + "@jest/types": ^29.0.1 import-local: ^3.0.2 - jest-cli: ^28.1.3 + jest-cli: ^29.0.1 peerDependencies: node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 peerDependenciesMeta: @@ -10857,7 +10954,7 @@ __metadata: optional: true bin: jest: bin/jest.js - checksum: b9dcb542eb7c16261c281cdc2bf37155dbb3f1205bae0b567f05051db362c85ddd4b765f126591efb88f6d298eb10336d0aa6c7d5373b4d53f918137a9a70182 + checksum: a2ece945c4477099df84dfc084a790b26050f609af6cb92ad7a0fd7faa66200d04a2360c223d14274f57d375c9a7768487f2be7add8590509d8844408b7b009a languageName: node linkType: hard @@ -11686,7 +11783,7 @@ __metadata: languageName: node linkType: hard -"marked@npm:^4.0.10, marked@npm:^4.0.12, marked@npm:^4.0.18": +"marked@npm:^4.0.10, marked@npm:^4.0.12": version: 4.0.18 resolution: "marked@npm:4.0.18" bin: @@ -11695,6 +11792,15 @@ __metadata: languageName: node linkType: hard +"marked@npm:^4.0.19": + version: 4.0.19 + resolution: "marked@npm:4.0.19" + bin: + marked: bin/marked.js + checksum: 0521f3c6a06a078b91ec5b6754f939e7be1a621e1a7c1e85d4e6a4eb7848e798275566b38dea05ea8a57e85d557fbc9edad4f3fa3e8b494a371133b9ba2fb720 + languageName: node + linkType: hard + "mdast-util-definitions@npm:^5.0.0": version: 5.1.1 resolution: "mdast-util-definitions@npm:5.1.1" @@ -13782,6 +13888,17 @@ __metadata: languageName: node linkType: hard +"pretty-format@npm:^29.0.1": + version: 29.0.1 + resolution: "pretty-format@npm:29.0.1" + dependencies: + "@jest/schemas": ^29.0.0 + ansi-styles: ^5.0.0 + react-is: ^18.0.0 + checksum: d31e72769b0bc0453123c52259dba28551cfc3f02b4968fa286c14dcaed08c1e68e45d5383d425f1ac5ab829c908ebe18f9aee4e4df507be5fc82ab51b1e8995 + languageName: node + linkType: hard + "pretty-ms@npm:7.0.1": version: 7.0.1 resolution: "pretty-ms@npm:7.0.1" @@ -14962,17 +15079,6 @@ __metadata: languageName: node linkType: hard -"shiki@npm:^0.10.1": - version: 0.10.1 - resolution: "shiki@npm:0.10.1" - dependencies: - jsonc-parser: ^3.0.0 - vscode-oniguruma: ^1.6.1 - vscode-textmate: 5.2.0 - checksum: fb746f3cb3de7e545e3b10a6cb658d3938f840e4ccc9a3c90ceb7e69a8f89dbb432171faac1e9f02a03f103684dad88ee5e54b5c4964fa6b579fca6e8e26424d - languageName: node - linkType: hard - "shiki@npm:^0.11.1": version: 0.11.1 resolution: "shiki@npm:0.11.1" @@ -15538,7 +15644,7 @@ __metadata: languageName: node linkType: hard -"strtok3@npm:^7.0.0-alpha.9": +"strtok3@npm:^7.0.0": version: 7.0.0 resolution: "strtok3@npm:7.0.0" dependencies: @@ -15925,13 +16031,6 @@ __metadata: languageName: node linkType: hard -"timsort@npm:~0.3.0": - version: 0.3.0 - resolution: "timsort@npm:0.3.0" - checksum: 1a66cb897dacabd7dd7c91b7e2301498ca9e224de2edb9e42d19f5b17c4b6dc62a8d4cbc64f28be82aaf1541cb5a78ab49aa818f42a2989ebe049a64af731e2a - languageName: node - linkType: hard - "tiny-glob@npm:^0.2.9": version: 0.2.9 resolution: "tiny-glob@npm:0.2.9" @@ -15995,7 +16094,7 @@ __metadata: languageName: node linkType: hard -"token-types@npm:^5.0.0-alpha.2": +"token-types@npm:^5.0.1": version: 5.0.1 resolution: "token-types@npm:5.0.1" dependencies: @@ -16153,11 +16252,11 @@ __metadata: languageName: node linkType: hard -"tsd@npm:^0.22.0": - version: 0.22.0 - resolution: "tsd@npm:0.22.0" +"tsd@npm:^0.23.0": + version: 0.23.0 + resolution: "tsd@npm:0.23.0" dependencies: - "@tsd/typescript": ~4.7.4 + "@tsd/typescript": ^4.8.2 eslint-formatter-pretty: ^4.1.0 globby: ^11.0.1 meow: ^9.0.0 @@ -16165,7 +16264,7 @@ __metadata: read-pkg-up: ^7.0.0 bin: tsd: dist/cli.js - checksum: d6977e6cc8de13ae480cdb5599be5f42daec203b94e03d40016072203749d5468cc6a33cdc7bce20efbc00f52ff7071cc1d2b3cc42b361648503dfb55715f647 + checksum: b9b268c375dec8da8aeb5c87f0c0b3af44927a997c62c1d378efd470d10d6cc11707062e48ebf7ebdc794aa31fa9969918e6af9e17591679e2c1c6bd05e68cbc languageName: node linkType: hard @@ -16503,19 +16602,19 @@ __metadata: languageName: node linkType: hard -"typedoc@npm:^0.23.10": - version: 0.23.10 - resolution: "typedoc@npm:0.23.10" +"typedoc@npm:^0.23.11": + version: 0.23.11 + resolution: "typedoc@npm:0.23.11" dependencies: lunr: ^2.3.9 - marked: ^4.0.18 + marked: ^4.0.19 minimatch: ^5.1.0 - shiki: ^0.10.1 + shiki: ^0.11.1 peerDependencies: - typescript: 4.6.x || 4.7.x + typescript: 4.6.x || 4.7.x || 4.8.x bin: typedoc: bin/typedoc - checksum: 58dd8bc12856801c4f315812d03f209f706435e5f56edceeb3e01e456c7d058a127f3dee1674529d62b64dcc04847d8be5e4ce06921b9c5388b901dd976b92bf + checksum: 02bc1e4c15ea064c0a35e049500b40f99ce8dec1d2778edd9dbc12c0ca348c630253ad17e1c2b901961fcd56e3eea31fd62f82eed4ff95864e9e1d2e5e7564d7 languageName: node linkType: hard @@ -16539,6 +16638,16 @@ __metadata: languageName: node linkType: hard +"typescript@npm:^4.8.2": + version: 4.8.2 + resolution: "typescript@npm:4.8.2" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: 7f5b81d0d558c9067f952c7af52ab7f19c2e70a916817929e4a5b256c93990bf3178eccb1ac8a850bc75df35f6781b6f4cb3370ce20d8b1ded92ed462348f628 + languageName: node + linkType: hard + "typescript@npm:next": version: 4.9.0-dev.20220815 resolution: "typescript@npm:4.9.0-dev.20220815" @@ -16569,6 +16678,16 @@ __metadata: languageName: node linkType: hard +"typescript@patch:typescript@^4.8.2#~builtin": + version: 4.8.2 + resolution: "typescript@patch:typescript@npm%3A4.8.2#~builtin::version=4.8.2&hash=7ad353" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: 6f49363af8af2fe480da1d5fa68712644438785208b06690a3cbe5e7365fd652c3a0f1e587bc8684d78fb69de3dde4de185c0bad7bb4f3664ddfc813ce8caad6 + languageName: node + linkType: hard + "typescript@patch:typescript@next#~builtin": version: 4.9.0-dev.20220815 resolution: "typescript@patch:typescript@npm%3A4.9.0-dev.20220815#~builtin::version=4.9.0-dev.20220815&hash=7ad353" @@ -16691,6 +16810,13 @@ __metadata: languageName: node linkType: hard +"undici@npm:^5.10.0": + version: 5.10.0 + resolution: "undici@npm:5.10.0" + checksum: 7ba2b71dccc74cd2bdf645b83e9aaef374ae04855943d0a2f42a3d0b9e5556f37cc9b5156fb5288277a2fa95fd46a56f3ae0d5cf73db3f008d75ec41104b136c + languageName: node + linkType: hard + "undici@npm:^5.2.0": version: 5.8.2 resolution: "undici@npm:5.8.2" @@ -16698,13 +16824,6 @@ __metadata: languageName: node linkType: hard -"undici@npm:^5.9.1": - version: 5.9.1 - resolution: "undici@npm:5.9.1" - checksum: 8acabbac8e18943ff822574f831d03d65e697e66ef486a679763f7778f37b28980caf7097ededf4017b58c099809e8efd8509a6688f60638360fb86ef47a59df - languageName: node - linkType: hard - "unicode-canonical-property-names-ecmascript@npm:^2.0.0": version: 2.0.0 resolution: "unicode-canonical-property-names-ecmascript@npm:2.0.0" @@ -16873,33 +16992,33 @@ __metadata: languageName: node linkType: hard -"unocss@npm:^0.45.12": - version: 0.45.12 - resolution: "unocss@npm:0.45.12" - dependencies: - "@unocss/astro": 0.45.12 - "@unocss/cli": 0.45.12 - "@unocss/core": 0.45.12 - "@unocss/preset-attributify": 0.45.12 - "@unocss/preset-icons": 0.45.12 - "@unocss/preset-mini": 0.45.12 - "@unocss/preset-tagify": 0.45.12 - "@unocss/preset-typography": 0.45.12 - "@unocss/preset-uno": 0.45.12 - "@unocss/preset-web-fonts": 0.45.12 - "@unocss/preset-wind": 0.45.12 - "@unocss/reset": 0.45.12 - "@unocss/transformer-attributify-jsx": 0.45.12 - "@unocss/transformer-compile-class": 0.45.12 - "@unocss/transformer-directives": 0.45.12 - "@unocss/transformer-variant-group": 0.45.12 - "@unocss/vite": 0.45.12 +"unocss@npm:^0.45.13": + version: 0.45.13 + resolution: "unocss@npm:0.45.13" + dependencies: + "@unocss/astro": 0.45.13 + "@unocss/cli": 0.45.13 + "@unocss/core": 0.45.13 + "@unocss/preset-attributify": 0.45.13 + "@unocss/preset-icons": 0.45.13 + "@unocss/preset-mini": 0.45.13 + "@unocss/preset-tagify": 0.45.13 + "@unocss/preset-typography": 0.45.13 + "@unocss/preset-uno": 0.45.13 + "@unocss/preset-web-fonts": 0.45.13 + "@unocss/preset-wind": 0.45.13 + "@unocss/reset": 0.45.13 + "@unocss/transformer-attributify-jsx": 0.45.13 + "@unocss/transformer-compile-class": 0.45.13 + "@unocss/transformer-directives": 0.45.13 + "@unocss/transformer-variant-group": 0.45.13 + "@unocss/vite": 0.45.13 peerDependencies: - "@unocss/webpack": 0.45.12 + "@unocss/webpack": 0.45.13 peerDependenciesMeta: "@unocss/webpack": optional: true - checksum: b2c161804697038c3f95bb9a52cf19e75b198cbd815ba249dd52d7fd53aabc7e64a7ab1f0920d9dbc8818164b9da96b14745213ffd0bdcb66f7ef72104eb0c99 + checksum: a4b5ef53a48937625f323f45157a820b37e9f9e234077f6a32a669d2c402c26ec2c96d2fab7f3a696be1ad964b5a80d719b5c37d7401e5970427273a7c552c73 languageName: node linkType: hard @@ -17059,13 +17178,6 @@ __metadata: languageName: node linkType: hard -"v8-compile-cache@npm:^2.0.3": - version: 2.3.0 - resolution: "v8-compile-cache@npm:2.3.0" - checksum: adb0a271eaa2297f2f4c536acbfee872d0dd26ec2d76f66921aa7fc437319132773483344207bdbeee169225f4739016d8d2dbf0553913a52bb34da6d0334f8e - languageName: node - linkType: hard - "v8-to-istanbul@npm:^9.0.0, v8-to-istanbul@npm:^9.0.1": version: 9.0.1 resolution: "v8-to-istanbul@npm:9.0.1" @@ -17112,25 +17224,25 @@ __metadata: languageName: node linkType: hard -"vercel@npm:^28.1.1": - version: 28.1.1 - resolution: "vercel@npm:28.1.1" - dependencies: - "@vercel/build-utils": 5.3.1 - "@vercel/go": 2.2.0 - "@vercel/hydrogen": 0.0.14 - "@vercel/next": 3.1.20 - "@vercel/node": 2.5.8 - "@vercel/python": 3.1.10 - "@vercel/redwood": 1.0.18 - "@vercel/remix": 1.0.19 - "@vercel/ruby": 1.3.27 - "@vercel/static-build": 1.0.18 +"vercel@npm:^28.2.0": + version: 28.2.0 + resolution: "vercel@npm:28.2.0" + dependencies: + "@vercel/build-utils": 5.4.0 + "@vercel/go": 2.2.3 + "@vercel/hydrogen": 0.0.16 + "@vercel/next": 3.1.22 + "@vercel/node": 2.5.11 + "@vercel/python": 3.1.12 + "@vercel/redwood": 1.0.20 + "@vercel/remix": 1.0.21 + "@vercel/ruby": 1.3.29 + "@vercel/static-build": 1.0.20 update-notifier: 5.1.0 bin: vc: dist/index.js vercel: dist/index.js - checksum: a24f32b69847ac10789714b67b26de1f25388b767ef499a73a827860d58e2df3c68c571a9860e72b889f2153b6f6d5d240bb7cb1c167ec86d5f2b4530558ace9 + checksum: 23d326bdd052af021ecfc2aba73954559041b96b46667759b8648fbef3fa3c02b5e85545a1e554dad74d8b1c8b5a3e793b0173c9b26e100e27a3c47efffed909 languageName: node linkType: hard @@ -17263,13 +17375,6 @@ __metadata: languageName: node linkType: hard -"vscode-textmate@npm:5.2.0": - version: 5.2.0 - resolution: "vscode-textmate@npm:5.2.0" - checksum: 5449b42d451080f6f3649b66948f4b5ee4643c4e88cfe3558a3b31c84c78060cfdd288c4958c1690eaa5cd65d09992fa6b7c3bef9d4aa72b3651054a04624d20 - languageName: node - linkType: hard - "vscode-textmate@npm:^6.0.0": version: 6.0.0 resolution: "vscode-textmate@npm:6.0.0" From 4bdb0593ae5b66afce22c2677787d9a2efb10862 Mon Sep 17 00:00:00 2001 From: Parbez Date: Wed, 31 Aug 2022 01:53:00 +0530 Subject: [PATCH 111/155] chore: bump typescript-eslint to support ts 4.8 (#8573) --- packages/actions/package.json | 4 +- packages/api-extractor-utils/package.json | 4 +- packages/builders/package.json | 4 +- packages/collection/package.json | 4 +- packages/docgen/package.json | 4 +- packages/proxy-container/package.json | 4 +- packages/proxy/package.json | 4 +- packages/rest/package.json | 4 +- packages/scripts/package.json | 4 +- packages/voice/package.json | 4 +- packages/website/package.json | 4 +- packages/ws/package.json | 4 +- yarn.lock | 335 +++++++--------------- 13 files changed, 128 insertions(+), 255 deletions(-) diff --git a/packages/actions/package.json b/packages/actions/package.json index 5b3a9838f06a..e6656a59d7fc 100644 --- a/packages/actions/package.json +++ b/packages/actions/package.json @@ -44,8 +44,8 @@ }, "devDependencies": { "@types/node": "^16.11.56", - "@typescript-eslint/eslint-plugin": "^5.35.1", - "@typescript-eslint/parser": "^5.35.1", + "@typescript-eslint/eslint-plugin": "^5.36.1", + "@typescript-eslint/parser": "^5.36.1", "@vitest/coverage-c8": "^0.22.1", "eslint": "^8.23.0", "eslint-config-marine": "^9.4.1", diff --git a/packages/api-extractor-utils/package.json b/packages/api-extractor-utils/package.json index c790f8a555dc..ddb543cc0dc1 100644 --- a/packages/api-extractor-utils/package.json +++ b/packages/api-extractor-utils/package.json @@ -35,8 +35,8 @@ }, "devDependencies": { "@types/node": "^16.11.56", - "@typescript-eslint/eslint-plugin": "^5.35.1", - "@typescript-eslint/parser": "^5.35.1", + "@typescript-eslint/eslint-plugin": "^5.36.1", + "@typescript-eslint/parser": "^5.36.1", "eslint": "^8.23.0", "eslint-config-marine": "^9.4.1", "eslint-config-prettier": "^8.5.0", diff --git a/packages/builders/package.json b/packages/builders/package.json index a96dc9d2d1cc..ebee5ebeee39 100644 --- a/packages/builders/package.json +++ b/packages/builders/package.json @@ -65,8 +65,8 @@ "@favware/cliff-jumper": "^1.8.7", "@microsoft/api-extractor": "^7.29.5", "@types/node": "^16.11.56", - "@typescript-eslint/eslint-plugin": "^5.35.1", - "@typescript-eslint/parser": "^5.35.1", + "@typescript-eslint/eslint-plugin": "^5.36.1", + "@typescript-eslint/parser": "^5.36.1", "@vitest/coverage-c8": "^0.22.1", "downlevel-dts": "^0.10.1", "eslint": "^8.23.0", diff --git a/packages/collection/package.json b/packages/collection/package.json index 0fcffdcfdca8..611936e2477d 100644 --- a/packages/collection/package.json +++ b/packages/collection/package.json @@ -54,8 +54,8 @@ "@favware/cliff-jumper": "^1.8.7", "@microsoft/api-extractor": "^7.29.5", "@types/node": "^16.11.56", - "@typescript-eslint/eslint-plugin": "^5.35.1", - "@typescript-eslint/parser": "^5.35.1", + "@typescript-eslint/eslint-plugin": "^5.36.1", + "@typescript-eslint/parser": "^5.36.1", "@vitest/coverage-c8": "^0.22.1", "downlevel-dts": "^0.10.1", "eslint": "^8.23.0", diff --git a/packages/docgen/package.json b/packages/docgen/package.json index e2976e7eb796..615c0fc3d7ac 100644 --- a/packages/docgen/package.json +++ b/packages/docgen/package.json @@ -51,8 +51,8 @@ "@favware/cliff-jumper": "^1.8.7", "@types/jsdoc-to-markdown": "^7.0.3", "@types/node": "^16.11.56", - "@typescript-eslint/eslint-plugin": "^5.35.1", - "@typescript-eslint/parser": "^5.35.1", + "@typescript-eslint/eslint-plugin": "^5.36.1", + "@typescript-eslint/parser": "^5.36.1", "eslint": "^8.23.0", "eslint-config-marine": "^9.4.1", "eslint-config-prettier": "^8.5.0", diff --git a/packages/proxy-container/package.json b/packages/proxy-container/package.json index 326461561d70..7de606b19fc7 100644 --- a/packages/proxy-container/package.json +++ b/packages/proxy-container/package.json @@ -50,8 +50,8 @@ }, "devDependencies": { "@types/node": "^16.11.56", - "@typescript-eslint/eslint-plugin": "^5.35.1", - "@typescript-eslint/parser": "^5.35.1", + "@typescript-eslint/eslint-plugin": "^5.36.1", + "@typescript-eslint/parser": "^5.36.1", "eslint": "^8.23.0", "eslint-config-marine": "^9.4.1", "eslint-config-prettier": "^8.5.0", diff --git a/packages/proxy/package.json b/packages/proxy/package.json index 653c3081612f..5aa3fdff88d3 100644 --- a/packages/proxy/package.json +++ b/packages/proxy/package.json @@ -64,8 +64,8 @@ "@microsoft/api-extractor": "^7.29.5", "@types/node": "^16.11.56", "@types/supertest": "^2.0.12", - "@typescript-eslint/eslint-plugin": "^5.35.1", - "@typescript-eslint/parser": "^5.35.1", + "@typescript-eslint/eslint-plugin": "^5.36.1", + "@typescript-eslint/parser": "^5.36.1", "@vitest/coverage-c8": "^0.22.1", "downlevel-dts": "^0.10.1", "eslint": "^8.23.0", diff --git a/packages/rest/package.json b/packages/rest/package.json index 2de395170024..6d9351d1fc16 100644 --- a/packages/rest/package.json +++ b/packages/rest/package.json @@ -65,8 +65,8 @@ "@favware/cliff-jumper": "^1.8.7", "@microsoft/api-extractor": "^7.29.5", "@types/node": "^16.11.56", - "@typescript-eslint/eslint-plugin": "^5.35.1", - "@typescript-eslint/parser": "^5.35.1", + "@typescript-eslint/eslint-plugin": "^5.36.1", + "@typescript-eslint/parser": "^5.36.1", "@vitest/coverage-c8": "^0.22.1", "downlevel-dts": "^0.10.1", "eslint": "^8.23.0", diff --git a/packages/scripts/package.json b/packages/scripts/package.json index 83ab8a2b3b4e..44522517dd69 100644 --- a/packages/scripts/package.json +++ b/packages/scripts/package.json @@ -51,8 +51,8 @@ }, "devDependencies": { "@types/node": "^16.11.56", - "@typescript-eslint/eslint-plugin": "^5.35.1", - "@typescript-eslint/parser": "^5.35.1", + "@typescript-eslint/eslint-plugin": "^5.36.1", + "@typescript-eslint/parser": "^5.36.1", "@vitest/coverage-c8": "^0.22.1", "eslint": "^8.23.0", "eslint-config-marine": "^9.4.1", diff --git a/packages/voice/package.json b/packages/voice/package.json index b1c8fec0e5bb..2d2d29afd045 100644 --- a/packages/voice/package.json +++ b/packages/voice/package.json @@ -67,8 +67,8 @@ "@microsoft/api-extractor": "^7.29.5", "@types/jest": "^28.1.8", "@types/node": "^16.11.56", - "@typescript-eslint/eslint-plugin": "^5.35.1", - "@typescript-eslint/parser": "^5.35.1", + "@typescript-eslint/eslint-plugin": "^5.36.1", + "@typescript-eslint/parser": "^5.36.1", "downlevel-dts": "^0.10.1", "eslint": "^8.23.0", "eslint-config-marine": "^9.4.1", diff --git a/packages/website/package.json b/packages/website/package.json index 6bd88543e63f..62b0ce867e7e 100644 --- a/packages/website/package.json +++ b/packages/website/package.json @@ -72,8 +72,8 @@ "@types/node": "^16.11.56", "@types/react-dom": "^18.0.6", "@types/react-syntax-highlighter": "^15.5.5", - "@typescript-eslint/eslint-plugin": "^5.35.1", - "@typescript-eslint/parser": "^5.35.1", + "@typescript-eslint/eslint-plugin": "^5.36.1", + "@typescript-eslint/parser": "^5.36.1", "@unocss/cli": "^0.45.13", "@unocss/preset-web-fonts": "^0.45.13", "@unocss/reset": "^0.45.13", diff --git a/packages/ws/package.json b/packages/ws/package.json index 34e3c65fd8cc..0cd93832a92c 100644 --- a/packages/ws/package.json +++ b/packages/ws/package.json @@ -66,8 +66,8 @@ "@favware/cliff-jumper": "^1.8.7", "@microsoft/api-extractor": "^7.29.5", "@types/node": "^16.11.56", - "@typescript-eslint/eslint-plugin": "^5.35.1", - "@typescript-eslint/parser": "^5.35.1", + "@typescript-eslint/eslint-plugin": "^5.36.1", + "@typescript-eslint/parser": "^5.36.1", "@vitest/coverage-c8": "^0.22.1", "downlevel-dts": "^0.10.1", "eslint": "^8.23.0", diff --git a/yarn.lock b/yarn.lock index 5c193ec82027..749707f67125 100644 --- a/yarn.lock +++ b/yarn.lock @@ -67,30 +67,7 @@ __metadata: languageName: node linkType: hard -"@babel/core@npm:^7.11.6, @babel/core@npm:^7.12.3, @babel/core@npm:^7.18.10": - version: 7.18.10 - resolution: "@babel/core@npm:7.18.10" - dependencies: - "@ampproject/remapping": ^2.1.0 - "@babel/code-frame": ^7.18.6 - "@babel/generator": ^7.18.10 - "@babel/helper-compilation-targets": ^7.18.9 - "@babel/helper-module-transforms": ^7.18.9 - "@babel/helpers": ^7.18.9 - "@babel/parser": ^7.18.10 - "@babel/template": ^7.18.10 - "@babel/traverse": ^7.18.10 - "@babel/types": ^7.18.10 - convert-source-map: ^1.7.0 - debug: ^4.1.0 - gensync: ^1.0.0-beta.2 - json5: ^2.2.1 - semver: ^6.3.0 - checksum: 3a3fcd878430a9e1cb165f755c89fff45acc4efe4dd3a2ba356e89af331cb1947886b9782d56902a49af19ba3c24f08cf638a632699b9c5a4d8305c57c6a150d - languageName: node - linkType: hard - -"@babel/core@npm:^7.18.13": +"@babel/core@npm:^7.11.6, @babel/core@npm:^7.12.3, @babel/core@npm:^7.18.10, @babel/core@npm:^7.18.13": version: 7.18.13 resolution: "@babel/core@npm:7.18.13" dependencies: @@ -113,18 +90,7 @@ __metadata: languageName: node linkType: hard -"@babel/generator@npm:^7.18.10, @babel/generator@npm:^7.7.2": - version: 7.18.12 - resolution: "@babel/generator@npm:7.18.12" - dependencies: - "@babel/types": ^7.18.10 - "@jridgewell/gen-mapping": ^0.3.2 - jsesc: ^2.5.1 - checksum: 07dd71d255144bb703a80ab0156c35d64172ce81ddfb70ff24e2be687b052080233840c9a28d92fa2c33f7ecb8a8b30aef03b807518afc53b74c7908bf8859b1 - languageName: node - linkType: hard - -"@babel/generator@npm:^7.18.13": +"@babel/generator@npm:^7.18.13, @babel/generator@npm:^7.7.2": version: 7.18.13 resolution: "@babel/generator@npm:7.18.13" dependencies: @@ -407,16 +373,7 @@ __metadata: languageName: node linkType: hard -"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.14.7, @babel/parser@npm:^7.18.10, @babel/parser@npm:^7.18.11, @babel/parser@npm:^7.9.4": - version: 7.18.11 - resolution: "@babel/parser@npm:7.18.11" - bin: - parser: ./bin/babel-parser.js - checksum: 5ecc75b83e62ec53a947b1635a6ca75d6210d4a4f962f9f16f4239a6783f98e57f9662b598fa2fb1b8e12c0ad5c2bd86846ed0b97b85eb73dd7498b3a6d71a4b - languageName: node - linkType: hard - -"@babel/parser@npm:^7.18.13": +"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.14.7, @babel/parser@npm:^7.18.10, @babel/parser@npm:^7.18.13, @babel/parser@npm:^7.9.4": version: 7.18.13 resolution: "@babel/parser@npm:7.18.13" bin: @@ -1428,25 +1385,7 @@ __metadata: languageName: node linkType: hard -"@babel/traverse@npm:^7.18.10, @babel/traverse@npm:^7.18.11, @babel/traverse@npm:^7.18.9, @babel/traverse@npm:^7.7.2": - version: 7.18.11 - resolution: "@babel/traverse@npm:7.18.11" - dependencies: - "@babel/code-frame": ^7.18.6 - "@babel/generator": ^7.18.10 - "@babel/helper-environment-visitor": ^7.18.9 - "@babel/helper-function-name": ^7.18.9 - "@babel/helper-hoist-variables": ^7.18.6 - "@babel/helper-split-export-declaration": ^7.18.6 - "@babel/parser": ^7.18.11 - "@babel/types": ^7.18.10 - debug: ^4.1.0 - globals: ^11.1.0 - checksum: 727409464d5cf27f33555010098ce9bb435f0648cc76e674f4fb7513522356655ba62be99c8df330982b391ccf5f0c0c23c7bd7453d4936d47e2181693fed14c - languageName: node - linkType: hard - -"@babel/traverse@npm:^7.18.13": +"@babel/traverse@npm:^7.18.11, @babel/traverse@npm:^7.18.13, @babel/traverse@npm:^7.18.9, @babel/traverse@npm:^7.7.2": version: 7.18.13 resolution: "@babel/traverse@npm:7.18.13" dependencies: @@ -1464,18 +1403,7 @@ __metadata: languageName: node linkType: hard -"@babel/types@npm:^7.0.0, @babel/types@npm:^7.18.10, @babel/types@npm:^7.18.6, @babel/types@npm:^7.18.9, @babel/types@npm:^7.3.0, @babel/types@npm:^7.3.3, @babel/types@npm:^7.4.4, @babel/types@npm:^7.8.3": - version: 7.18.10 - resolution: "@babel/types@npm:7.18.10" - dependencies: - "@babel/helper-string-parser": ^7.18.10 - "@babel/helper-validator-identifier": ^7.18.6 - to-fast-properties: ^2.0.0 - checksum: 11632c9b106e54021937a6498138014ebc9ad6c327a07b2af3ba8700773945aba4055fd136431cbe3a500d0f363cbf9c68eb4d6d38229897c5de9d06e14c85e8 - languageName: node - linkType: hard - -"@babel/types@npm:^7.18.13": +"@babel/types@npm:^7.0.0, @babel/types@npm:^7.18.10, @babel/types@npm:^7.18.13, @babel/types@npm:^7.18.6, @babel/types@npm:^7.18.9, @babel/types@npm:^7.3.0, @babel/types@npm:^7.3.3, @babel/types@npm:^7.4.4, @babel/types@npm:^7.8.3": version: 7.18.13 resolution: "@babel/types@npm:7.18.13" dependencies: @@ -1740,8 +1668,8 @@ __metadata: dependencies: "@actions/core": ^1.9.1 "@types/node": ^16.11.56 - "@typescript-eslint/eslint-plugin": ^5.35.1 - "@typescript-eslint/parser": ^5.35.1 + "@typescript-eslint/eslint-plugin": ^5.36.1 + "@typescript-eslint/parser": ^5.36.1 "@vitest/coverage-c8": ^0.22.1 eslint: ^8.23.0 eslint-config-marine: ^9.4.1 @@ -1764,8 +1692,8 @@ __metadata: "@microsoft/api-extractor-model": ^7.23.3 "@microsoft/tsdoc": ^0.14.1 "@types/node": ^16.11.56 - "@typescript-eslint/eslint-plugin": ^5.35.1 - "@typescript-eslint/parser": ^5.35.1 + "@typescript-eslint/eslint-plugin": ^5.36.1 + "@typescript-eslint/parser": ^5.36.1 eslint: ^8.23.0 eslint-config-marine: ^9.4.1 eslint-config-prettier: ^8.5.0 @@ -1788,8 +1716,8 @@ __metadata: "@microsoft/api-extractor": ^7.29.5 "@sapphire/shapeshift": ^3.6.0 "@types/node": ^16.11.56 - "@typescript-eslint/eslint-plugin": ^5.35.1 - "@typescript-eslint/parser": ^5.35.1 + "@typescript-eslint/eslint-plugin": ^5.36.1 + "@typescript-eslint/parser": ^5.36.1 "@vitest/coverage-c8": ^0.22.1 discord-api-types: ^0.37.5 downlevel-dts: ^0.10.1 @@ -1818,8 +1746,8 @@ __metadata: "@favware/cliff-jumper": ^1.8.7 "@microsoft/api-extractor": ^7.29.5 "@types/node": ^16.11.56 - "@typescript-eslint/eslint-plugin": ^5.35.1 - "@typescript-eslint/parser": ^5.35.1 + "@typescript-eslint/eslint-plugin": ^5.36.1 + "@typescript-eslint/parser": ^5.36.1 "@vitest/coverage-c8": ^0.22.1 downlevel-dts: ^0.10.1 eslint: ^8.23.0 @@ -1862,8 +1790,8 @@ __metadata: "@favware/cliff-jumper": ^1.8.7 "@types/jsdoc-to-markdown": ^7.0.3 "@types/node": ^16.11.56 - "@typescript-eslint/eslint-plugin": ^5.35.1 - "@typescript-eslint/parser": ^5.35.1 + "@typescript-eslint/eslint-plugin": ^5.36.1 + "@typescript-eslint/parser": ^5.36.1 commander: ^9.4.0 eslint: ^8.23.0 eslint-config-marine: ^9.4.1 @@ -1889,8 +1817,8 @@ __metadata: "@discordjs/proxy": ^1.1.0 "@discordjs/rest": ^1.1.0 "@types/node": ^16.11.56 - "@typescript-eslint/eslint-plugin": ^5.35.1 - "@typescript-eslint/parser": ^5.35.1 + "@typescript-eslint/eslint-plugin": ^5.36.1 + "@typescript-eslint/parser": ^5.36.1 eslint: ^8.23.0 eslint-config-marine: ^9.4.1 eslint-config-prettier: ^8.5.0 @@ -1914,8 +1842,8 @@ __metadata: "@microsoft/api-extractor": ^7.29.5 "@types/node": ^16.11.56 "@types/supertest": ^2.0.12 - "@typescript-eslint/eslint-plugin": ^5.35.1 - "@typescript-eslint/parser": ^5.35.1 + "@typescript-eslint/eslint-plugin": ^5.36.1 + "@typescript-eslint/parser": ^5.36.1 "@vitest/coverage-c8": ^0.22.1 downlevel-dts: ^0.10.1 eslint: ^8.23.0 @@ -1945,8 +1873,8 @@ __metadata: "@sapphire/async-queue": ^1.5.0 "@sapphire/snowflake": ^3.2.2 "@types/node": ^16.11.56 - "@typescript-eslint/eslint-plugin": ^5.35.1 - "@typescript-eslint/parser": ^5.35.1 + "@typescript-eslint/eslint-plugin": ^5.36.1 + "@typescript-eslint/parser": ^5.36.1 "@vitest/coverage-c8": ^0.22.1 discord-api-types: ^0.37.5 downlevel-dts: ^0.10.1 @@ -1975,8 +1903,8 @@ __metadata: "@microsoft/api-extractor-model": ^7.23.3 "@microsoft/tsdoc": ^0.14.1 "@types/node": ^16.11.56 - "@typescript-eslint/eslint-plugin": ^5.35.1 - "@typescript-eslint/parser": ^5.35.1 + "@typescript-eslint/eslint-plugin": ^5.36.1 + "@typescript-eslint/parser": ^5.36.1 "@vitest/coverage-c8": ^0.22.1 commander: ^9.4.0 eslint: ^8.23.0 @@ -2006,8 +1934,8 @@ __metadata: "@types/jest": ^28.1.8 "@types/node": ^16.11.56 "@types/ws": ^8.5.3 - "@typescript-eslint/eslint-plugin": ^5.35.1 - "@typescript-eslint/parser": ^5.35.1 + "@typescript-eslint/eslint-plugin": ^5.36.1 + "@typescript-eslint/parser": ^5.36.1 discord-api-types: ^0.37.5 downlevel-dts: ^0.10.1 eslint: ^8.23.0 @@ -2050,8 +1978,8 @@ __metadata: "@types/node": ^16.11.56 "@types/react-dom": ^18.0.6 "@types/react-syntax-highlighter": ^15.5.5 - "@typescript-eslint/eslint-plugin": ^5.35.1 - "@typescript-eslint/parser": ^5.35.1 + "@typescript-eslint/eslint-plugin": ^5.36.1 + "@typescript-eslint/parser": ^5.36.1 "@unocss/cli": ^0.45.13 "@unocss/preset-web-fonts": ^0.45.13 "@unocss/reset": ^0.45.13 @@ -2101,8 +2029,8 @@ __metadata: "@sapphire/async-queue": ^1.5.0 "@types/node": ^16.11.56 "@types/ws": ^8.5.3 - "@typescript-eslint/eslint-plugin": ^5.35.1 - "@typescript-eslint/parser": ^5.35.1 + "@typescript-eslint/eslint-plugin": ^5.36.1 + "@typescript-eslint/parser": ^5.36.1 "@vitest/coverage-c8": ^0.22.1 "@vladfrangu/async_event_emitter": ^2.0.1 discord-api-types: ^0.37.5 @@ -3529,14 +3457,7 @@ __metadata: languageName: node linkType: hard -"@sapphire/utilities@npm:^3.8.0": - version: 3.9.0 - resolution: "@sapphire/utilities@npm:3.9.0" - checksum: 2d8fdf173abc39d7f8bdeb593daebe8b1e2fb71ffa91951cb4ef57845eec45938bfd1d4f5db2e78a0b9ab212c0d033a4fbefcf6335a28afb8a1cea7f44926160 - languageName: node - linkType: hard - -"@sapphire/utilities@npm:^3.9.2": +"@sapphire/utilities@npm:^3.8.0, @sapphire/utilities@npm:^3.9.2": version: 3.9.2 resolution: "@sapphire/utilities@npm:3.9.2" checksum: eeef33b03b802e931ada752b8c335cc8bde4017f8029b577b0247e3f3d2b57bf5f1936b2c8c29aef5e2c6975d9b162363e4c5c434c4fead0bba74253d067b4d9 @@ -4014,20 +3935,13 @@ __metadata: languageName: node linkType: hard -"@types/node@npm:^14.0.0": +"@types/node@npm:^14.0.0, @types/node@npm:^14.14.35": version: 14.18.26 resolution: "@types/node@npm:14.18.26" checksum: c6ac3f9d4f6f77c0fa5ac17757779ad4d9835abfe3af5708b7552597cb5c7c1103e83499ccaf767a1cfa70040990bcf3f58761c547051dc8d5077f3c419091b1 languageName: node linkType: hard -"@types/node@npm:^14.14.35": - version: 14.18.23 - resolution: "@types/node@npm:14.18.23" - checksum: 119d5ab18426694ade0d3feefbdb42afc5a47b9144e523293f1554f9d34b41c7f21eafc9d0f1295db5700d134aa74e7fd37556e9438f6d64dbeddf791527e1e4 - languageName: node - linkType: hard - "@types/node@npm:^16.11.56": version: 16.11.56 resolution: "@types/node@npm:16.11.56" @@ -4203,13 +4117,13 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/eslint-plugin@npm:^5.35.1": - version: 5.35.1 - resolution: "@typescript-eslint/eslint-plugin@npm:5.35.1" +"@typescript-eslint/eslint-plugin@npm:^5.36.1": + version: 5.36.1 + resolution: "@typescript-eslint/eslint-plugin@npm:5.36.1" dependencies: - "@typescript-eslint/scope-manager": 5.35.1 - "@typescript-eslint/type-utils": 5.35.1 - "@typescript-eslint/utils": 5.35.1 + "@typescript-eslint/scope-manager": 5.36.1 + "@typescript-eslint/type-utils": 5.36.1 + "@typescript-eslint/utils": 5.36.1 debug: ^4.3.4 functional-red-black-tree: ^1.0.1 ignore: ^5.2.0 @@ -4222,42 +4136,43 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: 073f4dffd863881f1c87e1c217ac13bda44aaa2db12ef260032b5e8eb6ffd6b9cf6f62c85132dbf84152f353c435c66dd4f75c3bcb86eb23e926737aa4fb66fa + checksum: a4c555688d840c3ff0d3d71ceca583291e206cc523eade45c56fb8e1c8af84ae50ef8d344cdf8e3f9c38f430bc03c95eb8d49870094e0e5b57e0fa3e61c0ec91 languageName: node linkType: hard -"@typescript-eslint/parser@npm:^5.35.1": - version: 5.35.1 - resolution: "@typescript-eslint/parser@npm:5.35.1" +"@typescript-eslint/parser@npm:^5.36.1": + version: 5.36.1 + resolution: "@typescript-eslint/parser@npm:5.36.1" dependencies: - "@typescript-eslint/scope-manager": 5.35.1 - "@typescript-eslint/types": 5.35.1 - "@typescript-eslint/typescript-estree": 5.35.1 + "@typescript-eslint/scope-manager": 5.36.1 + "@typescript-eslint/types": 5.36.1 + "@typescript-eslint/typescript-estree": 5.36.1 debug: ^4.3.4 peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 peerDependenciesMeta: typescript: optional: true - checksum: 57ea1a1da60b370f8d5c11c86155f7339359a90f2c59e34c89f626f1a79cb440248f07bd307a27ebbbcc997d2731cb9754cdbc37639770940521a938dd89870c + checksum: 0f0f94e56ae1d55b6e7223ce5a2b0c93e5cc082ef2951a2b24ae4b22bb8ffbeb90d2d16682bfa8bc972ba2c7fb4703aedd79b7dbd09bcee397e1ab90d11506d9 languageName: node linkType: hard -"@typescript-eslint/scope-manager@npm:5.35.1": - version: 5.35.1 - resolution: "@typescript-eslint/scope-manager@npm:5.35.1" +"@typescript-eslint/scope-manager@npm:5.36.1": + version: 5.36.1 + resolution: "@typescript-eslint/scope-manager@npm:5.36.1" dependencies: - "@typescript-eslint/types": 5.35.1 - "@typescript-eslint/visitor-keys": 5.35.1 - checksum: 5a969a081309bac5962f99ee6dfdfd9c68ea677bc79d9796592dce82a36217f67aa55c7bf421b2c97b46c5149d6a9401bb4c57829595e8c19f47cfa9e8c2dd86 + "@typescript-eslint/types": 5.36.1 + "@typescript-eslint/visitor-keys": 5.36.1 + checksum: c46497226af75baed7458838ec0bfbddf19f8084115d78b915b46a8ceb4c05619ac61da127dfd3c8ee11bc916896d57bf8b9f936b0306ce69658160f910e3ad0 languageName: node linkType: hard -"@typescript-eslint/type-utils@npm:5.35.1": - version: 5.35.1 - resolution: "@typescript-eslint/type-utils@npm:5.35.1" +"@typescript-eslint/type-utils@npm:5.36.1": + version: 5.36.1 + resolution: "@typescript-eslint/type-utils@npm:5.36.1" dependencies: - "@typescript-eslint/utils": 5.35.1 + "@typescript-eslint/typescript-estree": 5.36.1 + "@typescript-eslint/utils": 5.36.1 debug: ^4.3.4 tsutils: ^3.21.0 peerDependencies: @@ -4265,23 +4180,23 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: af317ba156f2767f76a7f97193873a00468370e157fdcc6ac19f664bc6c4c0a6836bd25028d17fdd54d339b6842fda68b82f1ce4142a222de6953625ea6c0a9c + checksum: d2905289e253a83a9eacbad765cfba03440663086c8beb1b19345b46593c9053fb051ee13d3cc27ccd800fe95ffbf3be2b1273b0f0ac6a59452fc94e6460898b languageName: node linkType: hard -"@typescript-eslint/types@npm:5.35.1": - version: 5.35.1 - resolution: "@typescript-eslint/types@npm:5.35.1" - checksum: a4e1001867f43f3364b109fc5a07b91ae7a34b78ab191c6c5c4695dac9bb2b80b0a602651c0b807c1c7c1fc3656d2bbd47c637afa08a09e7b1c39eae3c489e00 +"@typescript-eslint/types@npm:5.36.1": + version: 5.36.1 + resolution: "@typescript-eslint/types@npm:5.36.1" + checksum: 10c8965c64e16bc6920dc0c62aae2b139062aca945d03df2ad6fe7c299d2faa684621d571f8d9807a67643d4e9fa5217c69d5f538f9936fc757f9df5ded57623 languageName: node linkType: hard -"@typescript-eslint/typescript-estree@npm:5.35.1": - version: 5.35.1 - resolution: "@typescript-eslint/typescript-estree@npm:5.35.1" +"@typescript-eslint/typescript-estree@npm:5.36.1": + version: 5.36.1 + resolution: "@typescript-eslint/typescript-estree@npm:5.36.1" dependencies: - "@typescript-eslint/types": 5.35.1 - "@typescript-eslint/visitor-keys": 5.35.1 + "@typescript-eslint/types": 5.36.1 + "@typescript-eslint/visitor-keys": 5.36.1 debug: ^4.3.4 globby: ^11.1.0 is-glob: ^4.0.3 @@ -4290,33 +4205,33 @@ __metadata: peerDependenciesMeta: typescript: optional: true - checksum: a917ca4753a3f92c8d8555c96f5414383a9742761625476fa36a019401543aa74996159afa0f7fc7fae05fe0f904e3c6f4153a55412070c8a94e8171e81084c7 + checksum: acaf2938001673918dbbe690a353cf92e2cfabc79f74cd5946e303a8c24eb9c08ae2053dd261810ed0c9c471ebe879f386564c1b01dd2504dc84f4ce5f4dc696 languageName: node linkType: hard -"@typescript-eslint/utils@npm:5.35.1": - version: 5.35.1 - resolution: "@typescript-eslint/utils@npm:5.35.1" +"@typescript-eslint/utils@npm:5.36.1": + version: 5.36.1 + resolution: "@typescript-eslint/utils@npm:5.36.1" dependencies: "@types/json-schema": ^7.0.9 - "@typescript-eslint/scope-manager": 5.35.1 - "@typescript-eslint/types": 5.35.1 - "@typescript-eslint/typescript-estree": 5.35.1 + "@typescript-eslint/scope-manager": 5.36.1 + "@typescript-eslint/types": 5.36.1 + "@typescript-eslint/typescript-estree": 5.36.1 eslint-scope: ^5.1.1 eslint-utils: ^3.0.0 peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - checksum: 2b04092583c3139dd090727c24fb9d7fdb1fb9f20f2e3f0141cab5b98b6a1934b0fc8cab948f7faae55588385b0f1fb7bbf91f52c705ce4528036a527c3119c6 + checksum: 77853d526af86ac508d7938916046ed4ad6374c7414981064c5122a2baa96fa234751137f481ac264a07387fd4dcec1cd26b33e29732cc58e855aae77a001d7c languageName: node linkType: hard -"@typescript-eslint/visitor-keys@npm:5.35.1": - version: 5.35.1 - resolution: "@typescript-eslint/visitor-keys@npm:5.35.1" +"@typescript-eslint/visitor-keys@npm:5.36.1": + version: 5.36.1 + resolution: "@typescript-eslint/visitor-keys@npm:5.36.1" dependencies: - "@typescript-eslint/types": 5.35.1 + "@typescript-eslint/types": 5.36.1 eslint-visitor-keys: ^3.3.0 - checksum: ef3c8377aac89935b5cc2fcf37bb3e42aa5f98848e7c22bdcbe5bb06c0fe8a1373a6897fd21109be8929b4708ad06c8874d2ef7bba17ff64911964203457330d + checksum: 45ab7c2fd455a8e4beff418bed6c9e7e1f9f66bcaad3bfaed868f97a3f8cfec1fa4faa45948af1a1c32ce573a7b1c6d10427119c257622445b06b488fefd8b49 languageName: node linkType: hard @@ -6771,14 +6686,7 @@ __metadata: languageName: node linkType: hard -"defu@npm:^6.0.0": - version: 6.0.0 - resolution: "defu@npm:6.0.0" - checksum: 3c24ef0009b796e32a1655a23fc1f11a79b42012255b6bc88889242da77b7e45bfa4293d9661d28f3f6c12c931309e18f5047efa492670585a3da768887cea74 - languageName: node - linkType: hard - -"defu@npm:^6.1.0": +"defu@npm:^6.0.0, defu@npm:^6.1.0": version: 6.1.0 resolution: "defu@npm:6.1.0" checksum: 403a9ba8ab08dca87576eb062fa488c5cc58a5c8601955f2325dcc077c23da8a68169591505654a8c70ca3567006516ef92a4c44129643f928c58c4e7281195a @@ -11783,16 +11691,7 @@ __metadata: languageName: node linkType: hard -"marked@npm:^4.0.10, marked@npm:^4.0.12": - version: 4.0.18 - resolution: "marked@npm:4.0.18" - bin: - marked: bin/marked.js - checksum: a13e886d5059a8500a6fd552feecc16e18fc3636aa491fce372384b1fdea67e323d67ac49f7618f6977e66ca96e39f27400eb5c1273d5ee9c2301e8c33e90dce - languageName: node - linkType: hard - -"marked@npm:^4.0.19": +"marked@npm:^4.0.10, marked@npm:^4.0.12, marked@npm:^4.0.19": version: 4.0.19 resolution: "marked@npm:4.0.19" bin: @@ -12759,7 +12658,7 @@ __metadata: languageName: node linkType: hard -"mlly@npm:^0.5.13": +"mlly@npm:^0.5.13, mlly@npm:^0.5.3": version: 0.5.13 resolution: "mlly@npm:0.5.13" dependencies: @@ -12771,18 +12670,6 @@ __metadata: languageName: node linkType: hard -"mlly@npm:^0.5.3": - version: 0.5.12 - resolution: "mlly@npm:0.5.12" - dependencies: - acorn: ^8.8.0 - pathe: ^0.3.4 - pkg-types: ^0.3.3 - ufo: ^0.8.5 - checksum: fe8cf9e7f758b356298fd64fcf892e665977b9eada8159aae7a3689b8800d0d506b7779e8637403c06b80dc0b9af0d7fb98cd5b36349fb820af2ee8eadd134f3 - languageName: node - linkType: hard - "mock-socket@npm:^9.1.0, mock-socket@npm:^9.1.5": version: 9.1.5 resolution: "mock-socket@npm:9.1.5" @@ -13659,14 +13546,7 @@ __metadata: languageName: node linkType: hard -"pathe@npm:^0.3.0, pathe@npm:^0.3.4": - version: 0.3.4 - resolution: "pathe@npm:0.3.4" - checksum: 4ebed2a60e5b7e88b2752137606e228570af2f0e06d5964c92f0b47ada3523842a1c73feb9976a054a47b96789a62ab861fb3b8170e5f80c83b4625e1d42c2d7 - languageName: node - linkType: hard - -"pathe@npm:^0.3.5": +"pathe@npm:^0.3.0, pathe@npm:^0.3.4, pathe@npm:^0.3.5": version: 0.3.5 resolution: "pathe@npm:0.3.5" checksum: 734f54de80dae59a1cc6e62eb09bbd8f88062d118a01b8a428423c168160cee44d6a09c415ff1d7c410ee4a767a76206c13da6af289e11f6eb1a040382a28edd @@ -16628,17 +16508,7 @@ __metadata: languageName: node linkType: hard -"typescript@npm:^4.6.4, typescript@npm:^4.7.4, typescript@npm:~4.7.4": - version: 4.7.4 - resolution: "typescript@npm:4.7.4" - bin: - tsc: bin/tsc - tsserver: bin/tsserver - checksum: 5750181b1cd7e6482c4195825547e70f944114fb47e58e4aa7553e62f11b3f3173766aef9c281783edfd881f7b8299cf35e3ca8caebe73d8464528c907a164df - languageName: node - linkType: hard - -"typescript@npm:^4.8.2": +"typescript@npm:^4.6.4, typescript@npm:^4.7.4, typescript@npm:^4.8.2": version: 4.8.2 resolution: "typescript@npm:4.8.2" bin: @@ -16658,27 +16528,27 @@ __metadata: languageName: node linkType: hard -"typescript@patch:typescript@4.3.4#~builtin": - version: 4.3.4 - resolution: "typescript@patch:typescript@npm%3A4.3.4#~builtin::version=4.3.4&hash=7ad353" +"typescript@npm:~4.7.4": + version: 4.7.4 + resolution: "typescript@npm:4.7.4" bin: tsc: bin/tsc tsserver: bin/tsserver - checksum: 6ccc2e1148e172da119ea4b72c66395a0c18a53884d21fb82bb4503a948a7169e9961defe24a359040a3d77bf5ff338945804296e0e27c87b5bd22ea1d25781b + checksum: 5750181b1cd7e6482c4195825547e70f944114fb47e58e4aa7553e62f11b3f3173766aef9c281783edfd881f7b8299cf35e3ca8caebe73d8464528c907a164df languageName: node linkType: hard -"typescript@patch:typescript@^4.6.4#~builtin, typescript@patch:typescript@^4.7.4#~builtin, typescript@patch:typescript@~4.7.4#~builtin": - version: 4.7.4 - resolution: "typescript@patch:typescript@npm%3A4.7.4#~builtin::version=4.7.4&hash=7ad353" +"typescript@patch:typescript@4.3.4#~builtin": + version: 4.3.4 + resolution: "typescript@patch:typescript@npm%3A4.3.4#~builtin::version=4.3.4&hash=7ad353" bin: tsc: bin/tsc tsserver: bin/tsserver - checksum: 9096d8f6c16cb80ef3bf96fcbbd055bf1c4a43bd14f3b7be45a9fbe7ada46ec977f604d5feed3263b4f2aa7d4c7477ce5f9cd87de0d6feedec69a983f3a4f93e + checksum: 6ccc2e1148e172da119ea4b72c66395a0c18a53884d21fb82bb4503a948a7169e9961defe24a359040a3d77bf5ff338945804296e0e27c87b5bd22ea1d25781b languageName: node linkType: hard -"typescript@patch:typescript@^4.8.2#~builtin": +"typescript@patch:typescript@^4.6.4#~builtin, typescript@patch:typescript@^4.7.4#~builtin, typescript@patch:typescript@^4.8.2#~builtin": version: 4.8.2 resolution: "typescript@patch:typescript@npm%3A4.8.2#~builtin::version=4.8.2&hash=7ad353" bin: @@ -16698,6 +16568,16 @@ __metadata: languageName: node linkType: hard +"typescript@patch:typescript@~4.7.4#~builtin": + version: 4.7.4 + resolution: "typescript@patch:typescript@npm%3A4.7.4#~builtin::version=4.7.4&hash=7ad353" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: 9096d8f6c16cb80ef3bf96fcbbd055bf1c4a43bd14f3b7be45a9fbe7ada46ec977f604d5feed3263b4f2aa7d4c7477ce5f9cd87de0d6feedec69a983f3a4f93e + languageName: node + linkType: hard + "typical@npm:^2.4.2, typical@npm:^2.6.0, typical@npm:^2.6.1": version: 2.6.1 resolution: "typical@npm:2.6.1" @@ -16810,20 +16690,13 @@ __metadata: languageName: node linkType: hard -"undici@npm:^5.10.0": +"undici@npm:^5.10.0, undici@npm:^5.2.0": version: 5.10.0 resolution: "undici@npm:5.10.0" checksum: 7ba2b71dccc74cd2bdf645b83e9aaef374ae04855943d0a2f42a3d0b9e5556f37cc9b5156fb5288277a2fa95fd46a56f3ae0d5cf73db3f008d75ec41104b136c languageName: node linkType: hard -"undici@npm:^5.2.0": - version: 5.8.2 - resolution: "undici@npm:5.8.2" - checksum: 726e04bb37e2e285b4f632600c792efc9eaa5e06e37f9f34338352ac5e1dbd8ae3cdd12dd8761abfecffc5f200d1c7b91b41efb3a31c4e804ea341e5808ddfcf - languageName: node - linkType: hard - "unicode-canonical-property-names-ecmascript@npm:^2.0.0": version: 2.0.0 resolution: "unicode-canonical-property-names-ecmascript@npm:2.0.0" From edadb9fe5dfd9ff51a3cfc9b25cb242d3f9f5241 Mon Sep 17 00:00:00 2001 From: Suneet Tipirneni <77477100+suneettipirneni@users.noreply.github.com> Date: Thu, 1 Sep 2022 14:50:16 -0400 Subject: [PATCH 112/155] refactor: use `eslint-config-neon` for packages. (#8579) Co-authored-by: Noel --- .eslintrc.json | 5 +- packages/actions/__tests__/formatTag.test.ts | 2 +- packages/actions/package.json | 7 +- packages/actions/src/formatTag/formatTag.ts | 1 + packages/actions/src/formatTag/index.ts | 2 +- packages/actions/src/index.ts | 2 +- packages/api-extractor-utils/package.json | 8 +- .../src/ApiNodeJSONEncoder.ts | 54 +- .../src/TypeParameterJSONEncoder.ts | 8 +- packages/api-extractor-utils/src/index.ts | 8 +- packages/api-extractor-utils/src/parse.ts | 40 +- .../src/tsdoc/CommentBlock.ts | 4 +- .../src/tsdoc/CommentBlockTag.ts | 2 +- .../src/tsdoc/CommentCodeSpan.ts | 2 +- .../src/tsdoc/CommentNode.ts | 12 +- .../src/tsdoc/CommentNodeContainer.ts | 2 +- .../src/tsdoc/FencedCodeCommentNode.ts | 2 +- .../src/tsdoc/LinkTagCommentNode.ts | 8 +- .../src/tsdoc/ParamBlock.ts | 2 +- .../src/tsdoc/PlainTextCommentNode.ts | 2 +- .../src/tsdoc/RootComment.ts | 10 +- .../api-extractor-utils/src/tsdoc/index.ts | 39 +- .../__tests__/components/actionRow.test.ts | 9 +- .../__tests__/components/button.test.ts | 14 +- .../__tests__/components/components.test.ts | 14 +- .../__tests__/components/selectMenu.test.ts | 37 +- .../__tests__/components/textInput.test.ts | 10 +- .../interactions/ContextMenuCommands.test.ts | 6 +- .../SlashCommands/Options.test.ts | 20 +- .../SlashCommands/SlashCommands.test.ts | 24 +- .../__tests__/interactions/modal.test.ts | 14 +- .../builders/__tests__/messages/embed.test.ts | 14 +- .../__tests__/messages/formatters.test.ts | 17 +- packages/builders/__tests__/util.test.ts | 2 +- packages/builders/package.json | 8 +- packages/builders/src/components/ActionRow.ts | 20 +- .../builders/src/components/Assertions.ts | 6 +- packages/builders/src/components/Component.ts | 2 +- .../builders/src/components/Components.ts | 17 +- .../builders/src/components/button/Button.ts | 11 +- .../src/components/selectMenu/SelectMenu.ts | 20 +- .../components/selectMenu/SelectMenuOption.ts | 5 +- .../src/components/textInput/Assertions.ts | 10 +- .../src/components/textInput/TextInput.ts | 14 +- packages/builders/src/index.ts | 78 +- .../contextMenuCommands/Assertions.ts | 3 +- .../ContextMenuCommandBuilder.ts | 14 +- .../src/interactions/modals/Assertions.ts | 6 +- .../builders/src/interactions/modals/Modal.ts | 13 +- .../interactions/slashCommands/Assertions.ts | 4 +- .../slashCommands/SlashCommandBuilder.ts | 15 +- .../slashCommands/SlashCommandSubcommands.ts | 12 +- ...ionCommandNumericOptionMinMaxValueMixin.ts | 1 + .../mixins/ApplicationCommandOptionBase.ts | 4 +- ...ndOptionWithChoicesAndAutocompleteMixin.ts | 10 +- .../mixins/NameAndDescription.ts | 19 +- .../mixins/SharedSlashCommandOptions.ts | 52 +- .../slashCommands/options/attachment.ts | 4 +- .../slashCommands/options/boolean.ts | 4 +- .../slashCommands/options/channel.ts | 6 +- .../slashCommands/options/integer.ts | 8 +- .../slashCommands/options/mentionable.ts | 4 +- .../slashCommands/options/number.ts | 8 +- .../slashCommands/options/role.ts | 4 +- .../slashCommands/options/string.ts | 12 +- .../slashCommands/options/user.ts | 4 +- .../builders/src/messages/embed/Assertions.ts | 8 +- packages/builders/src/messages/embed/Embed.ts | 22 +- packages/builders/src/messages/formatters.ts | 13 +- packages/builders/src/util/equatable.ts | 3 +- packages/builders/src/util/jsonEncodable.ts | 3 +- .../collection/__tests__/collection.test.ts | 60 +- packages/collection/package.json | 8 +- packages/collection/src/collection.ts | 66 +- packages/collection/src/index.ts | 2 +- packages/docgen/package.json | 7 +- packages/docgen/src/cli.ts | 8 +- packages/docgen/src/documentation.ts | 68 +- packages/docgen/src/index.ts | 36 +- packages/docgen/src/interfaces/access.type.ts | 2 +- .../docgen/src/interfaces/childTypes.type.ts | 2 +- .../docgen/src/interfaces/class.interface.ts | 10 +- .../docgen/src/interfaces/config.interface.ts | 4 +- .../src/interfaces/constructor.interface.ts | 4 +- .../src/interfaces/customDocs.interface.ts | 6 +- .../docgen/src/interfaces/event.interface.ts | 8 +- .../src/interfaces/exception.interface.ts | 4 +- .../src/interfaces/external.interface.ts | 2 +- .../src/interfaces/interface.interface.ts | 4 +- .../docgen/src/interfaces/item.interface.ts | 6 +- .../docgen/src/interfaces/member.interface.ts | 18 +- .../docgen/src/interfaces/meta.interface.ts | 2 +- .../docgen/src/interfaces/method.interface.ts | 26 +- .../docgen/src/interfaces/param.interface.ts | 6 +- .../docgen/src/interfaces/return.interface.ts | 4 +- .../docgen/src/interfaces/rootTypes.type.ts | 2 +- .../src/interfaces/typedef.interface.ts | 12 +- .../src/interfaces/var-type.interface.ts | 2 +- packages/docgen/src/types/class.ts | 59 +- packages/docgen/src/types/constructor.ts | 22 +- packages/docgen/src/types/event.ts | 44 +- packages/docgen/src/types/external.ts | 2 +- packages/docgen/src/types/interface.ts | 2 +- packages/docgen/src/types/item-meta.ts | 4 +- packages/docgen/src/types/item.ts | 9 +- packages/docgen/src/types/member.ts | 48 +- packages/docgen/src/types/method.ts | 50 +- packages/docgen/src/types/param.ts | 11 +- packages/docgen/src/types/typedef.ts | 73 +- packages/docgen/src/types/var-type.ts | 2 +- packages/docgen/src/util/parseType.ts | 82 +- packages/docgen/src/util/splitVarName.ts | 6 +- packages/docgen/src/util/types.ts | 32 +- packages/proxy-container/package.json | 7 +- packages/proxy-container/src/index.ts | 3 +- .../proxy/__tests__/proxyRequests.test.ts | 4 +- packages/proxy/package.json | 7 +- packages/proxy/src/handlers/proxyRequests.ts | 12 +- packages/proxy/src/index.ts | 6 +- packages/proxy/src/util/responseHelpers.ts | 2 +- packages/proxy/src/util/util.ts | 2 +- packages/rest/__tests__/CDN.test.ts | 4 +- .../rest/__tests__/DiscordAPIError.test.ts | 21 +- packages/rest/__tests__/REST.test.ts | 34 +- .../rest/__tests__/RequestHandler.test.ts | 67 +- .../rest/__tests__/RequestManager.test.ts | 9 +- packages/rest/__tests__/Util.test.ts | 19 +- packages/rest/__tests__/util.ts | 2 +- packages/rest/__tests__/utils.test.ts | 4 +- packages/rest/package.json | 8 +- packages/rest/src/index.ts | 16 +- packages/rest/src/lib/CDN.ts | 20 +- packages/rest/src/lib/REST.ts | 162 ++-- packages/rest/src/lib/RequestManager.ts | 92 +- .../rest/src/lib/errors/DiscordAPIError.ts | 34 +- packages/rest/src/lib/errors/HTTPError.ts | 6 +- .../rest/src/lib/errors/RateLimitError.ts | 8 + packages/rest/src/lib/handlers/IHandler.ts | 24 +- .../src/lib/handlers/SequentialHandler.ts | 45 +- packages/rest/src/lib/utils/constants.ts | 9 +- packages/rest/src/lib/utils/utils.ts | 15 +- packages/scripts/package.json | 7 +- packages/scripts/src/generateIndex.ts | 19 +- packages/scripts/src/index.ts | 2 +- packages/voice/.eslintrc.json | 3 +- packages/voice/__tests__/AudioPlayer.test.ts | 49 +- .../__tests__/AudioReceiveStream.test.ts | 8 +- .../voice/__tests__/AudioResource.test.ts | 13 +- packages/voice/__tests__/DataStore.test.ts | 13 +- packages/voice/__tests__/SSRCMap.test.ts | 8 +- packages/voice/__tests__/Secretbox.test.ts | 2 +- packages/voice/__tests__/SpeakingMap.test.ts | 3 +- .../voice/__tests__/TransformerGraph.test.ts | 3 +- .../voice/__tests__/VoiceConnection.test.ts | 31 +- .../voice/__tests__/VoiceReceiver.test.ts | 12 +- .../voice/__tests__/VoiceUDPSocket.test.ts | 40 +- .../voice/__tests__/VoiceWebSocket.test.ts | 12 +- packages/voice/__tests__/demuxProbe.test.ts | 23 +- packages/voice/__tests__/entersState.test.ts | 9 +- packages/voice/package.json | 8 +- packages/voice/src/DataStore.ts | 18 +- packages/voice/src/VoiceConnection.ts | 93 +- packages/voice/src/audio/AudioPlayer.ts | 96 +- packages/voice/src/audio/AudioPlayerError.ts | 1 + packages/voice/src/audio/AudioResource.ts | 39 +- .../voice/src/audio/PlayerSubscription.ts | 2 +- packages/voice/src/audio/TransformerGraph.ts | 39 +- packages/voice/src/index.ts | 6 +- packages/voice/src/joinVoiceChannel.ts | 17 +- packages/voice/src/networking/Networking.ts | 79 +- .../voice/src/networking/VoiceUDPSocket.ts | 15 +- .../voice/src/networking/VoiceWebSocket.ts | 33 +- .../voice/src/receive/AudioReceiveStream.ts | 23 +- packages/voice/src/receive/SSRCMap.ts | 12 +- packages/voice/src/receive/SpeakingMap.ts | 3 + packages/voice/src/receive/VoiceReceiver.ts | 16 +- packages/voice/src/util/Secretbox.ts | 15 +- packages/voice/src/util/abortAfter.ts | 2 +- packages/voice/src/util/adapter.ts | 25 +- packages/voice/src/util/demuxProbe.ts | 26 +- packages/voice/src/util/entersState.ts | 15 +- .../src/util/generateDependencyReport.ts | 6 +- packages/website/.eslintrc.json | 2 +- packages/website/package.json | 9 +- .../website/src/components/CodeListing.tsx | 12 +- .../website/src/components/DocContainer.tsx | 12 +- .../src/components/HyperlinkedText.tsx | 7 - packages/website/src/components/Section.tsx | 8 +- .../website/src/components/SidebarItems.tsx | 10 +- .../website/src/components/SidebarLayout.tsx | 20 +- packages/website/src/components/Table.tsx | 2 +- .../src/components/TableOfContentItems.tsx | 3 +- .../website/src/components/model/Class.tsx | 1 - .../src/components/tsdoc/BlockComment.tsx | 2 +- .../website/src/components/tsdoc/TSDoc.tsx | 5 + packages/website/src/contexts/member.tsx | 2 +- packages/website/src/middleware.ts | 3 +- packages/website/src/pages/_app.tsx | 2 +- packages/website/src/pages/docs/[...slug].tsx | 67 +- .../pages/docs/packages/[package]/index.tsx | 14 +- .../WorkerContextFetchingStrategy.test.ts | 9 +- .../strategy/WorkerShardingStrategy.test.ts | 18 +- .../__tests__/util/IdentifyThrottler.test.ts | 4 +- .../ws/__tests__/ws/WebSocketManager.test.ts | 12 +- packages/ws/package.json | 8 +- packages/ws/src/index.ts | 22 +- .../context/IContextFetchingStrategy.ts | 7 +- .../context/SimpleContextFetchingStrategy.ts | 4 +- .../context/WorkerContextFetchingStrategy.ts | 13 +- .../strategies/sharding/IShardingStrategy.ts | 14 +- .../sharding/SimpleShardingStrategy.ts | 16 +- .../sharding/WorkerShardingStrategy.ts | 34 +- packages/ws/src/strategies/sharding/worker.ts | 21 +- packages/ws/src/utils/IdentifyThrottler.ts | 2 +- packages/ws/src/utils/constants.ts | 5 +- packages/ws/src/utils/utils.ts | 4 +- packages/ws/src/ws/WebSocketManager.ts | 139 +-- packages/ws/src/ws/WebSocketShard.ts | 62 +- yarn.lock | 859 ++++++++++++------ 219 files changed, 2576 insertions(+), 2021 deletions(-) diff --git a/.eslintrc.json b/.eslintrc.json index 809a8448bd25..fe9f20cddfe4 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -1,9 +1,12 @@ { "root": true, - "extends": "marine/prettier/node", + "extends": ["neon/common", "neon/node", "neon/typescript", "neon/prettier"], "parserOptions": { "project": "./tsconfig.eslint.json" }, + "rules": { + "@typescript-eslint/consistent-type-definitions": ["error", "interface"] + }, "ignorePatterns": ["**/dist/*"], "env": { "jest": true diff --git a/packages/actions/__tests__/formatTag.test.ts b/packages/actions/__tests__/formatTag.test.ts index 1d4bc83c375d..47cc8ffd735b 100644 --- a/packages/actions/__tests__/formatTag.test.ts +++ b/packages/actions/__tests__/formatTag.test.ts @@ -1,5 +1,5 @@ import { describe, test, expect } from 'vitest'; -import { formatTag } from '../src'; +import { formatTag } from '../src/index.js'; describe('Format Tag', () => { test('GIVEN tag with a prefix THEN format tag to not contain the prefix', () => { diff --git a/packages/actions/package.json b/packages/actions/package.json index e6656a59d7fc..bd507d9829b1 100644 --- a/packages/actions/package.json +++ b/packages/actions/package.json @@ -44,14 +44,9 @@ }, "devDependencies": { "@types/node": "^16.11.56", - "@typescript-eslint/eslint-plugin": "^5.36.1", - "@typescript-eslint/parser": "^5.36.1", "@vitest/coverage-c8": "^0.22.1", "eslint": "^8.23.0", - "eslint-config-marine": "^9.4.1", - "eslint-config-prettier": "^8.5.0", - "eslint-import-resolver-typescript": "^3.5.0", - "eslint-plugin-import": "^2.26.0", + "eslint-config-neon": "^0.1.23", "prettier": "^2.7.1", "rollup-plugin-typescript2": "^0.33.0", "typescript": "^4.8.2", diff --git a/packages/actions/src/formatTag/formatTag.ts b/packages/actions/src/formatTag/formatTag.ts index 4b8ce2560098..c1c792fe505d 100644 --- a/packages/actions/src/formatTag/formatTag.ts +++ b/packages/actions/src/formatTag/formatTag.ts @@ -1,4 +1,5 @@ export function formatTag(tag: string) { + // eslint-disable-next-line unicorn/no-unsafe-regex, prefer-named-capture-group const parsed = /(^@.*\/(?.*)@v?)?(?\d+.\d+.\d+)-?.*/.exec(tag); if (parsed?.groups) { diff --git a/packages/actions/src/formatTag/index.ts b/packages/actions/src/formatTag/index.ts index c078f1306905..031b89dc9b43 100644 --- a/packages/actions/src/formatTag/index.ts +++ b/packages/actions/src/formatTag/index.ts @@ -1,5 +1,5 @@ import { getInput, setOutput } from '@actions/core'; -import { formatTag } from './formatTag'; +import { formatTag } from './formatTag.js'; const tag = getInput('tag', { required: true }); const parsed = formatTag(tag); diff --git a/packages/actions/src/index.ts b/packages/actions/src/index.ts index 5119838f7058..4cfb594c252d 100644 --- a/packages/actions/src/index.ts +++ b/packages/actions/src/index.ts @@ -1 +1 @@ -export * from './formatTag/formatTag'; +export * from './formatTag/formatTag.js'; diff --git a/packages/api-extractor-utils/package.json b/packages/api-extractor-utils/package.json index ddb543cc0dc1..a13bb8924fb0 100644 --- a/packages/api-extractor-utils/package.json +++ b/packages/api-extractor-utils/package.json @@ -35,14 +35,8 @@ }, "devDependencies": { "@types/node": "^16.11.56", - "@typescript-eslint/eslint-plugin": "^5.36.1", - "@typescript-eslint/parser": "^5.36.1", "eslint": "^8.23.0", - "eslint-config-marine": "^9.4.1", - "eslint-config-prettier": "^8.5.0", - "eslint-import-resolver-typescript": "^3.5.0", - "eslint-plugin-import": "^2.26.0", - "eslint-plugin-tsdoc": "^0.2.16", + "eslint-config-neon": "^0.1.23", "prettier": "^2.7.1", "rollup-plugin-typescript2": "^0.33.0", "typescript": "^4.8.2", diff --git a/packages/api-extractor-utils/src/ApiNodeJSONEncoder.ts b/packages/api-extractor-utils/src/ApiNodeJSONEncoder.ts index cd0923b850ee..8952b41162e8 100644 --- a/packages/api-extractor-utils/src/ApiNodeJSONEncoder.ts +++ b/packages/api-extractor-utils/src/ApiNodeJSONEncoder.ts @@ -18,12 +18,12 @@ import { type ApiConstructor, type ApiItemContainerMixin, } from '@microsoft/api-extractor-model'; -import { generateTypeParamData } from './TypeParameterJSONEncoder'; -import { type TokenDocumentation, resolveName, genReference, genToken, genParameter, generatePath } from './parse'; -import { createCommentNode } from './tsdoc'; +import { generateTypeParamData } from './TypeParameterJSONEncoder.js'; +import { type TokenDocumentation, resolveName, genReference, genToken, genParameter, generatePath } from './parse.js'; import type { DocBlockJSON } from './tsdoc/CommentBlock'; import type { AnyDocNodeJSON } from './tsdoc/CommentNode'; -import { type DocNodeContainerJSON, nodeContainer } from './tsdoc/CommentNodeContainer'; +import { type DocNodeContainerJSON, nodeContainer } from './tsdoc/CommentNodeContainer.js'; +import { createCommentNode } from './tsdoc/index.js'; export interface ReferenceData { name: string; @@ -31,9 +31,9 @@ export interface ReferenceData { } export interface InheritanceData { + parentKey: string; parentName: string; path: string; - parentKey: string; } export interface ApiInheritableJSON { @@ -41,23 +41,23 @@ export interface ApiInheritableJSON { } export interface ApiItemJSON { + comment: AnyDocNodeJSON | null; + containerKey: string; + deprecated: DocNodeContainerJSON | null; + excerpt: string; + excerptTokens: TokenDocumentation[]; kind: string; name: string; + path: string[]; referenceData: ReferenceData; - excerpt: string; - excerptTokens: TokenDocumentation[]; remarks: DocNodeContainerJSON | null; summary: DocNodeContainerJSON | null; - deprecated: DocNodeContainerJSON | null; - comment: AnyDocNodeJSON | null; - containerKey: string; - path: string[]; } export interface ApiPropertyItemJSON extends ApiItemJSON, ApiInheritableJSON { + optional: boolean; propertyTypeTokens: TokenDocumentation[]; readonly: boolean; - optional: boolean; } export interface ApiTypeParameterListJSON { @@ -65,11 +65,11 @@ export interface ApiTypeParameterListJSON { } export interface ApiTypeParameterJSON { - name: string; + commentBlock: DocBlockJSON | null; constraintTokens: TokenDocumentation[]; defaultTokens: TokenDocumentation[]; + name: string; optional: boolean; - commentBlock: DocBlockJSON | null; } export interface ApiParameterListJSON { @@ -81,29 +81,29 @@ export interface ApiMethodSignatureJSON ApiTypeParameterListJSON, ApiParameterListJSON, ApiInheritableJSON { - returnTypeTokens: TokenDocumentation[]; optional: boolean; overloadIndex: number; + returnTypeTokens: TokenDocumentation[]; } export interface ApiMethodJSON extends ApiMethodSignatureJSON { - static: boolean; protected: boolean; + static: boolean; } export interface ApiParameterJSON { - name: string; isOptional: boolean; - tokens: TokenDocumentation[]; + name: string; paramCommentBlock: DocBlockJSON | null; + tokens: TokenDocumentation[]; } export interface ApiClassJSON extends ApiItemJSON, ApiTypeParameterListJSON { constructor: ApiConstructorJSON | null; - properties: ApiPropertyItemJSON[]; - methods: ApiMethodJSON[]; extendsTokens: TokenDocumentation[]; implementsTokens: TokenDocumentation[][]; + methods: ApiMethodJSON[]; + properties: ApiPropertyItemJSON[]; } export interface ApiTypeAliasJSON extends ApiItemJSON, ApiTypeParameterListJSON { @@ -111,8 +111,8 @@ export interface ApiTypeAliasJSON extends ApiItemJSON, ApiTypeParameterListJSON } export interface EnumMemberData { - name: string; initializerTokens: TokenDocumentation[]; + name: string; summary: DocNodeContainerJSON | null; } @@ -121,19 +121,19 @@ export interface ApiEnumJSON extends ApiItemJSON { } export interface ApiInterfaceJSON extends ApiItemJSON, ApiTypeParameterListJSON { - properties: ApiPropertyItemJSON[]; - methods: ApiMethodSignatureJSON[]; extendsTokens: TokenDocumentation[][] | null; + methods: ApiMethodSignatureJSON[]; + properties: ApiPropertyItemJSON[]; } export interface ApiVariableJSON extends ApiItemJSON { - typeTokens: TokenDocumentation[]; readonly: boolean; + typeTokens: TokenDocumentation[]; } export interface ApiFunctionJSON extends ApiItemJSON, ApiTypeParameterListJSON, ApiParameterListJSON { - returnTypeTokens: TokenDocumentation[]; overloadIndex: number; + returnTypeTokens: TokenDocumentation[]; } export interface ApiConstructorJSON extends ApiItemJSON, ApiParameterListJSON { @@ -203,7 +203,7 @@ export class ApiNodeJSONEncoder { public static encodeParameterList( model: ApiModel, - item: ApiParameterListMixin & ApiDeclaredItem, + item: ApiDeclaredItem & ApiParameterListMixin, version: string, ): { parameters: ApiParameterJSON[] } { return { @@ -213,7 +213,7 @@ export class ApiNodeJSONEncoder { public static encodeTypeParameterList( model: ApiModel, - item: ApiTypeParameterListMixin & ApiDeclaredItem, + item: ApiDeclaredItem & ApiTypeParameterListMixin, version: string, ): ApiTypeParameterListJSON { return { diff --git a/packages/api-extractor-utils/src/TypeParameterJSONEncoder.ts b/packages/api-extractor-utils/src/TypeParameterJSONEncoder.ts index 43a028786936..d3c528df0679 100644 --- a/packages/api-extractor-utils/src/TypeParameterJSONEncoder.ts +++ b/packages/api-extractor-utils/src/TypeParameterJSONEncoder.ts @@ -1,13 +1,13 @@ import type { TypeParameter, ApiModel, ApiItem } from '@microsoft/api-extractor-model'; -import { type TokenDocumentation, genToken } from './parse'; -import { type DocBlockJSON, block } from './tsdoc/CommentBlock'; +import { type TokenDocumentation, genToken } from './parse.js'; +import { type DocBlockJSON, block } from './tsdoc/CommentBlock.js'; export interface TypeParameterData { - name: string; + commentBlock: DocBlockJSON | null; constraintTokens: TokenDocumentation[]; defaultTokens: TokenDocumentation[]; + name: string; optional: boolean; - commentBlock: DocBlockJSON | null; } export function generateTypeParamData( diff --git a/packages/api-extractor-utils/src/index.ts b/packages/api-extractor-utils/src/index.ts index 833d0a0f5e86..68ea66bd5251 100644 --- a/packages/api-extractor-utils/src/index.ts +++ b/packages/api-extractor-utils/src/index.ts @@ -1,4 +1,4 @@ -export * from './ApiNodeJSONEncoder'; -export * from './parse'; -export * from './tsdoc'; -export * from './TypeParameterJSONEncoder'; +export * from './ApiNodeJSONEncoder.js'; +export * from './parse.js'; +export * from './tsdoc/index.js'; +export * from './TypeParameterJSONEncoder.js'; diff --git a/packages/api-extractor-utils/src/parse.ts b/packages/api-extractor-utils/src/parse.ts index c1558843fc21..0938ce8eed42 100644 --- a/packages/api-extractor-utils/src/parse.ts +++ b/packages/api-extractor-utils/src/parse.ts @@ -14,8 +14,8 @@ import { } from '@microsoft/api-extractor-model'; import type { DocNode, DocParagraph, DocPlainText } from '@microsoft/tsdoc'; import { type Meaning, ModuleSource } from '@microsoft/tsdoc/lib-commonjs/beta/DeclarationReference'; -import { createCommentNode } from './tsdoc'; -import type { DocBlockJSON } from './tsdoc/CommentBlock'; +import type { DocBlockJSON } from './tsdoc/CommentBlock.js'; +import { createCommentNode } from './tsdoc/index.js'; export function findPackage(model: ApiModel, name: string): ApiPackage | undefined { return (model.findMembersByName(name)[0] ?? model.findMembersByName(`@discordjs/${name}`)[0]) as @@ -54,6 +54,7 @@ export function generatePath(items: readonly ApiItem[], version: string) { } } + // eslint-disable-next-line prefer-named-capture-group, unicorn/no-unsafe-regex return path.replace(/@discordjs\/(.*)\/(.*)?/, `$1/${version}/$2`); } @@ -70,26 +71,22 @@ export function resolveDocComment(item: ApiDocumentedItem) { const { summarySection } = tsdocComment; - function recurseNodes(nodes: readonly DocNode[] | undefined): string | null { - if (!nodes) { + function recurseNodes(node: DocNode | undefined): string | null { + if (!node) { return null; } - for (const node of nodes) { - switch (node.kind) { - case 'Paragraph': - return recurseNodes((node as DocParagraph).nodes); - case 'PlainText': - return (node as DocPlainText).text; - default: - return null; - } + switch (node.kind) { + case 'Paragraph': + return recurseNodes(node as DocParagraph); + case 'PlainText': + return (node as DocPlainText).text; + default: + return null; } - - return null; } - return recurseNodes(summarySection.nodes); + return recurseNodes(summarySection); } export function findReferences(model: ApiModel, excerpt: Excerpt) { @@ -107,6 +104,7 @@ export function findReferences(model: ApiModel, excerpt: Excerpt) { break; } + default: break; } @@ -142,16 +140,16 @@ export function getProperties(item: ApiItem) { } export interface TokenDocumentation { - text: string; - path: string | null; kind: string; + path: string | null; + text: string; } export interface ParameterDocumentation { - name: string; isOptional: boolean; - tokens: TokenDocumentation[]; + name: string; paramCommentBlock: DocBlockJSON | null; + tokens: TokenDocumentation[]; } function createDapiTypesURL(meaning: Meaning, name: string) { @@ -174,7 +172,7 @@ export function genReference(item: ApiItem, version: string) { export function genToken(model: ApiModel, token: ExcerptToken, version: string) { if (token.canonicalReference) { - // @ts-expect-error + // @ts-expect-error: Symbol is not publicly accessible token.canonicalReference._navigation = '.'; } diff --git a/packages/api-extractor-utils/src/tsdoc/CommentBlock.ts b/packages/api-extractor-utils/src/tsdoc/CommentBlock.ts index 5dea2609b254..2f7a039a5d0c 100644 --- a/packages/api-extractor-utils/src/tsdoc/CommentBlock.ts +++ b/packages/api-extractor-utils/src/tsdoc/CommentBlock.ts @@ -1,8 +1,8 @@ import type { ApiModel, ApiItem } from '@microsoft/api-extractor-model'; import type { DocBlock } from '@microsoft/tsdoc'; +import { blockTag, type DocBlockTagJSON } from './CommentBlockTag.js'; +import { type AnyDocNodeJSON, type DocNodeJSON, node } from './CommentNode.js'; import { createCommentNode } from '.'; -import { blockTag, type DocBlockTagJSON } from './CommentBlockTag'; -import { type AnyDocNodeJSON, type DocNodeJSON, node } from './CommentNode'; export interface DocBlockJSON extends DocNodeJSON { content: AnyDocNodeJSON[]; diff --git a/packages/api-extractor-utils/src/tsdoc/CommentBlockTag.ts b/packages/api-extractor-utils/src/tsdoc/CommentBlockTag.ts index 608188316b9f..214057c6137f 100644 --- a/packages/api-extractor-utils/src/tsdoc/CommentBlockTag.ts +++ b/packages/api-extractor-utils/src/tsdoc/CommentBlockTag.ts @@ -1,5 +1,5 @@ import type { DocBlockTag } from '@microsoft/tsdoc'; -import { type DocNodeJSON, node } from './CommentNode'; +import { type DocNodeJSON, node } from './CommentNode.js'; export interface DocBlockTagJSON extends DocNodeJSON { tagName: string; diff --git a/packages/api-extractor-utils/src/tsdoc/CommentCodeSpan.ts b/packages/api-extractor-utils/src/tsdoc/CommentCodeSpan.ts index 94b1766397a9..d8d42bf4fbf7 100644 --- a/packages/api-extractor-utils/src/tsdoc/CommentCodeSpan.ts +++ b/packages/api-extractor-utils/src/tsdoc/CommentCodeSpan.ts @@ -1,5 +1,5 @@ import type { DocCodeSpan } from '@microsoft/tsdoc'; -import { type DocNodeJSON, node } from './CommentNode'; +import { type DocNodeJSON, node } from './CommentNode.js'; export interface DocCodeSpanJSON extends DocNodeJSON { code: string; diff --git a/packages/api-extractor-utils/src/tsdoc/CommentNode.ts b/packages/api-extractor-utils/src/tsdoc/CommentNode.ts index 838676c7c285..5542a6bafa70 100644 --- a/packages/api-extractor-utils/src/tsdoc/CommentNode.ts +++ b/packages/api-extractor-utils/src/tsdoc/CommentNode.ts @@ -12,14 +12,14 @@ export interface DocNodeJSON { } export type AnyDocNodeJSON = - | DocNodeJSON - | DocPlainTextJSON - | DocNodeContainerJSON - | DocLinkTagJSON - | DocFencedCodeJSON | DocBlockJSON + | DocCodeSpanJSON | DocCommentJSON - | DocCodeSpanJSON; + | DocFencedCodeJSON + | DocLinkTagJSON + | DocNodeContainerJSON + | DocNodeJSON + | DocPlainTextJSON; export function node(node: DocNode): DocNodeJSON { return { diff --git a/packages/api-extractor-utils/src/tsdoc/CommentNodeContainer.ts b/packages/api-extractor-utils/src/tsdoc/CommentNodeContainer.ts index 115f529c228a..294d6843ed97 100644 --- a/packages/api-extractor-utils/src/tsdoc/CommentNodeContainer.ts +++ b/packages/api-extractor-utils/src/tsdoc/CommentNodeContainer.ts @@ -1,7 +1,7 @@ import type { ApiItem, ApiModel } from '@microsoft/api-extractor-model'; import type { DocNodeContainer } from '@microsoft/tsdoc'; +import { type AnyDocNodeJSON, type DocNodeJSON, node } from './CommentNode.js'; import { createCommentNode } from '.'; -import { type AnyDocNodeJSON, type DocNodeJSON, node } from './CommentNode'; export interface DocNodeContainerJSON extends DocNodeJSON { nodes: AnyDocNodeJSON[]; diff --git a/packages/api-extractor-utils/src/tsdoc/FencedCodeCommentNode.ts b/packages/api-extractor-utils/src/tsdoc/FencedCodeCommentNode.ts index 254ece1905ba..52f7b26335f6 100644 --- a/packages/api-extractor-utils/src/tsdoc/FencedCodeCommentNode.ts +++ b/packages/api-extractor-utils/src/tsdoc/FencedCodeCommentNode.ts @@ -1,5 +1,5 @@ import type { DocFencedCode } from '@microsoft/tsdoc'; -import { type DocNodeJSON, node } from './CommentNode'; +import { type DocNodeJSON, node } from './CommentNode.js'; export interface DocFencedCodeJSON extends DocNodeJSON { code: string; diff --git a/packages/api-extractor-utils/src/tsdoc/LinkTagCommentNode.ts b/packages/api-extractor-utils/src/tsdoc/LinkTagCommentNode.ts index 3a0e14e00b5f..c1004bfb3c8e 100644 --- a/packages/api-extractor-utils/src/tsdoc/LinkTagCommentNode.ts +++ b/packages/api-extractor-utils/src/tsdoc/LinkTagCommentNode.ts @@ -1,17 +1,17 @@ import type { ApiItem, ApiModel } from '@microsoft/api-extractor-model'; import type { DocDeclarationReference, DocLinkTag } from '@microsoft/tsdoc'; -import { type DocNodeJSON, node } from './CommentNode'; -import { resolveName, generatePath } from '../parse'; +import { resolveName, generatePath } from '../parse.js'; +import { type DocNodeJSON, node } from './CommentNode.js'; interface LinkTagCodeLink { - name: string; kind: string; + name: string; path: string; } export interface DocLinkTagJSON extends DocNodeJSON { - text: string | null; codeDestination: LinkTagCodeLink | null; + text: string | null; urlDestination: string | null; } diff --git a/packages/api-extractor-utils/src/tsdoc/ParamBlock.ts b/packages/api-extractor-utils/src/tsdoc/ParamBlock.ts index f564255c75e8..8e9010dea4a8 100644 --- a/packages/api-extractor-utils/src/tsdoc/ParamBlock.ts +++ b/packages/api-extractor-utils/src/tsdoc/ParamBlock.ts @@ -1,6 +1,6 @@ import type { ApiItem, ApiModel } from '@microsoft/api-extractor-model'; import type { DocParamBlock } from '@microsoft/tsdoc'; -import { block, type DocBlockJSON } from './CommentBlock'; +import { block, type DocBlockJSON } from './CommentBlock.js'; interface DocParamBlockJSON extends DocBlockJSON { name: string; diff --git a/packages/api-extractor-utils/src/tsdoc/PlainTextCommentNode.ts b/packages/api-extractor-utils/src/tsdoc/PlainTextCommentNode.ts index 00774b1d11a1..097660a50c68 100644 --- a/packages/api-extractor-utils/src/tsdoc/PlainTextCommentNode.ts +++ b/packages/api-extractor-utils/src/tsdoc/PlainTextCommentNode.ts @@ -1,5 +1,5 @@ import type { DocPlainText } from '@microsoft/tsdoc'; -import { type DocNodeJSON, node } from './CommentNode'; +import { type DocNodeJSON, node } from './CommentNode.js'; export interface DocPlainTextJSON extends DocNodeJSON { text: string; diff --git a/packages/api-extractor-utils/src/tsdoc/RootComment.ts b/packages/api-extractor-utils/src/tsdoc/RootComment.ts index a8ee9a1f1677..19f10d85f985 100644 --- a/packages/api-extractor-utils/src/tsdoc/RootComment.ts +++ b/packages/api-extractor-utils/src/tsdoc/RootComment.ts @@ -1,14 +1,14 @@ import type { ApiItem, ApiModel } from '@microsoft/api-extractor-model'; import type { DocComment } from '@microsoft/tsdoc'; +import { block, type DocBlockJSON } from './CommentBlock.js'; +import { type DocNodeJSON, node } from './CommentNode.js'; import { createCommentNode } from '.'; -import { block, type DocBlockJSON } from './CommentBlock'; -import { type DocNodeJSON, node } from './CommentNode'; export interface DocCommentJSON extends DocNodeJSON { - summary: DocNodeJSON[]; - remarks: DocNodeJSON[]; - deprecated: DocNodeJSON[]; customBlocks: DocBlockJSON[]; + deprecated: DocNodeJSON[]; + remarks: DocNodeJSON[]; + summary: DocNodeJSON[]; } export function comment(comment: DocComment, model: ApiModel, version: string, parentItem?: ApiItem): DocCommentJSON { diff --git a/packages/api-extractor-utils/src/tsdoc/index.ts b/packages/api-extractor-utils/src/tsdoc/index.ts index d8c12c2b48de..3784656fe22d 100644 --- a/packages/api-extractor-utils/src/tsdoc/index.ts +++ b/packages/api-extractor-utils/src/tsdoc/index.ts @@ -11,16 +11,15 @@ import { type DocCodeSpan, type DocParamBlock, } from '@microsoft/tsdoc'; -import { block } from './CommentBlock'; -import { codeSpan } from './CommentCodeSpan'; -import type { AnyDocNodeJSON } from './CommentNode'; -import { node as _node } from './CommentNode'; -import { nodeContainer } from './CommentNodeContainer'; -import { fencedCode } from './FencedCodeCommentNode'; -import { linkTagNode } from './LinkTagCommentNode'; -import { paramBlock } from './ParamBlock'; -import { plainTextNode } from './PlainTextCommentNode'; -import { comment } from './RootComment'; +import { block } from './CommentBlock.js'; +import { codeSpan } from './CommentCodeSpan.js'; +import { node as _node, type AnyDocNodeJSON } from './CommentNode.js'; +import { nodeContainer } from './CommentNodeContainer.js'; +import { fencedCode } from './FencedCodeCommentNode.js'; +import { linkTagNode } from './LinkTagCommentNode.js'; +import { paramBlock } from './ParamBlock.js'; +import { plainTextNode } from './PlainTextCommentNode.js'; +import { comment } from './RootComment.js'; export function createCommentNode( node: DocNode, @@ -51,13 +50,13 @@ export function createCommentNode( } } -export * from './CommentNode'; -export * from './CommentNodeContainer'; -export * from './CommentBlock'; -export * from './CommentBlockTag'; -export * from './CommentCodeSpan'; -export * from './FencedCodeCommentNode'; -export * from './LinkTagCommentNode'; -export * from './ParamBlock'; -export * from './PlainTextCommentNode'; -export * from './RootComment'; +export * from './CommentNode.js'; +export * from './CommentNodeContainer.js'; +export * from './CommentBlock.js'; +export * from './CommentBlockTag.js'; +export * from './CommentCodeSpan.js'; +export * from './FencedCodeCommentNode.js'; +export * from './LinkTagCommentNode.js'; +export * from './ParamBlock.js'; +export * from './PlainTextCommentNode.js'; +export * from './RootComment.js'; diff --git a/packages/builders/__tests__/components/actionRow.test.ts b/packages/builders/__tests__/components/actionRow.test.ts index 9bb74328e1ff..d0bb9f7b584f 100644 --- a/packages/builders/__tests__/components/actionRow.test.ts +++ b/packages/builders/__tests__/components/actionRow.test.ts @@ -1,4 +1,9 @@ -import { APIActionRowComponent, APIMessageActionRowComponent, ButtonStyle, ComponentType } from 'discord-api-types/v10'; +import { + ButtonStyle, + ComponentType, + type APIActionRowComponent, + type APIMessageActionRowComponent, +} from 'discord-api-types/v10'; import { describe, test, expect } from 'vitest'; import { ActionRowBuilder, @@ -6,7 +11,7 @@ import { createComponentBuilder, SelectMenuBuilder, SelectMenuOptionBuilder, -} from '../../src'; +} from '../../src/index.js'; const rowWithButtonData: APIActionRowComponent = { type: ComponentType.ActionRow, diff --git a/packages/builders/__tests__/components/button.test.ts b/packages/builders/__tests__/components/button.test.ts index 7bd5cadb23bb..11f34a3cb56f 100644 --- a/packages/builders/__tests__/components/button.test.ts +++ b/packages/builders/__tests__/components/button.test.ts @@ -1,12 +1,12 @@ import { - APIButtonComponentWithCustomId, - APIButtonComponentWithURL, ButtonStyle, ComponentType, + type APIButtonComponentWithCustomId, + type APIButtonComponentWithURL, } from 'discord-api-types/v10'; import { describe, test, expect } from 'vitest'; -import { buttonLabelValidator, buttonStyleValidator } from '../../src/components/Assertions'; -import { ButtonBuilder } from '../../src/components/button/Button'; +import { buttonLabelValidator, buttonStyleValidator } from '../../src/components/Assertions.js'; +import { ButtonBuilder } from '../../src/components/button/Button.js'; const buttonComponent = () => new ButtonBuilder(); @@ -71,7 +71,7 @@ describe('Button Components', () => { }).toThrowError(); expect(() => { - // @ts-expect-error + // @ts-expect-error: invalid emoji const button = buttonComponent().setEmoji('test'); button.toJSON(); }).toThrowError(); @@ -103,9 +103,9 @@ describe('Button Components', () => { expect(() => buttonComponent().setStyle(24)).toThrowError(); expect(() => buttonComponent().setLabel(longStr)).toThrowError(); - // @ts-expect-error + // @ts-expect-error: invalid parameter for disabled expect(() => buttonComponent().setDisabled(0)).toThrowError(); - // @ts-expect-error + // @ts-expect-error: invalid emoji expect(() => buttonComponent().setEmoji('foo')).toThrowError(); expect(() => buttonComponent().setURL('foobar')).toThrowError(); diff --git a/packages/builders/__tests__/components/components.test.ts b/packages/builders/__tests__/components/components.test.ts index baa21ea66d77..520244d438eb 100644 --- a/packages/builders/__tests__/components/components.test.ts +++ b/packages/builders/__tests__/components/components.test.ts @@ -1,12 +1,12 @@ import { - APIActionRowComponent, - APIButtonComponent, - APIMessageActionRowComponent, - APISelectMenuComponent, - APITextInputComponent, ButtonStyle, ComponentType, TextInputStyle, + type APIButtonComponent, + type APIMessageActionRowComponent, + type APISelectMenuComponent, + type APITextInputComponent, + type APIActionRowComponent, } from 'discord-api-types/v10'; import { describe, test, expect } from 'vitest'; import { @@ -15,7 +15,7 @@ import { createComponentBuilder, SelectMenuBuilder, TextInputBuilder, -} from '../../src/index'; +} from '../../src/index.js'; describe('createComponentBuilder', () => { test.each([ButtonBuilder, SelectMenuBuilder, TextInputBuilder])( @@ -67,7 +67,7 @@ describe('createComponentBuilder', () => { }); test('GIVEN an unknown component type THEN throws error', () => { - // @ts-expect-error + // @ts-expect-error: Unknown component type expect(() => createComponentBuilder({ type: 'invalid' })).toThrowError(); }); }); diff --git a/packages/builders/__tests__/components/selectMenu.test.ts b/packages/builders/__tests__/components/selectMenu.test.ts index e5b4e6e0300e..39a6c0e111ab 100644 --- a/packages/builders/__tests__/components/selectMenu.test.ts +++ b/packages/builders/__tests__/components/selectMenu.test.ts @@ -1,6 +1,6 @@ -import { APISelectMenuComponent, APISelectMenuOption, ComponentType } from 'discord-api-types/v10'; +import { ComponentType, type APISelectMenuComponent, type APISelectMenuOption } from 'discord-api-types/v10'; import { describe, test, expect } from 'vitest'; -import { SelectMenuBuilder, SelectMenuOptionBuilder } from '../../src/index'; +import { SelectMenuBuilder, SelectMenuOptionBuilder } from '../../src/index.js'; const selectMenu = () => new SelectMenuBuilder(); const selectMenuOption = () => new SelectMenuOptionBuilder(); @@ -74,7 +74,8 @@ describe('Select Menu Components', () => { ]), ).not.toThrowError(); - const options = new Array(25).fill({ label: 'test', value: 'test' }); + const options = Array.from({ length: 25 }).fill({ label: 'test', value: 'test' }); + expect(() => selectMenu().addOptions(...options)).not.toThrowError(); expect(() => selectMenu().setOptions(...options)).not.toThrowError(); expect(() => selectMenu().addOptions(options)).not.toThrowError(); @@ -83,12 +84,13 @@ describe('Select Menu Components', () => { expect(() => selectMenu() .addOptions({ label: 'test', value: 'test' }) - .addOptions(...new Array(24).fill({ label: 'test', value: 'test' })), + + .addOptions(...Array.from({ length: 24 }).fill({ label: 'test', value: 'test' })), ).not.toThrowError(); expect(() => selectMenu() .addOptions([{ label: 'test', value: 'test' }]) - .addOptions(new Array(24).fill({ label: 'test', value: 'test' })), + .addOptions(Array.from({ length: 24 }).fill({ label: 'test', value: 'test' })), ).not.toThrowError(); }); @@ -96,33 +98,34 @@ describe('Select Menu Components', () => { expect(() => selectMenu().setCustomId(longStr)).toThrowError(); expect(() => selectMenu().setMaxValues(30)).toThrowError(); expect(() => selectMenu().setMinValues(-20)).toThrowError(); - // @ts-expect-error + // @ts-expect-error: invalid disabled value expect(() => selectMenu().setDisabled(0)).toThrowError(); expect(() => selectMenu().setPlaceholder(longStr)).toThrowError(); - // @ts-expect-error + // @ts-expect-error: invalid option expect(() => selectMenu().addOptions({ label: 'test' })).toThrowError(); expect(() => selectMenu().addOptions({ label: longStr, value: 'test' })).toThrowError(); expect(() => selectMenu().addOptions({ value: longStr, label: 'test' })).toThrowError(); expect(() => selectMenu().addOptions({ label: 'test', value: 'test', description: longStr })).toThrowError(); - // @ts-expect-error + // @ts-expect-error: invalid option expect(() => selectMenu().addOptions({ label: 'test', value: 'test', default: 100 })).toThrowError(); - // @ts-expect-error + // @ts-expect-error: invalid option expect(() => selectMenu().addOptions({ value: 'test' })).toThrowError(); - // @ts-expect-error + // @ts-expect-error: invalid option expect(() => selectMenu().addOptions({ default: true })).toThrowError(); - // @ts-expect-error + // @ts-expect-error: invalid option expect(() => selectMenu().addOptions([{ label: 'test' }])).toThrowError(); expect(() => selectMenu().addOptions([{ label: longStr, value: 'test' }])).toThrowError(); expect(() => selectMenu().addOptions([{ value: longStr, label: 'test' }])).toThrowError(); expect(() => selectMenu().addOptions([{ label: 'test', value: 'test', description: longStr }])).toThrowError(); - // @ts-expect-error + // @ts-expect-error: invalid option expect(() => selectMenu().addOptions([{ label: 'test', value: 'test', default: 100 }])).toThrowError(); - // @ts-expect-error + // @ts-expect-error: invalid option expect(() => selectMenu().addOptions([{ value: 'test' }])).toThrowError(); - // @ts-expect-error + // @ts-expect-error: invalid option expect(() => selectMenu().addOptions([{ default: true }])).toThrowError(); - const tooManyOptions = new Array(26).fill({ label: 'test', value: 'test' }); + const tooManyOptions = Array.from({ length: 26 }).fill({ label: 'test', value: 'test' }); + expect(() => selectMenu().setOptions(...tooManyOptions)).toThrowError(); expect(() => selectMenu().setOptions(tooManyOptions)).toThrowError(); @@ -141,9 +144,9 @@ describe('Select Menu Components', () => { selectMenuOption() .setLabel(longStr) .setValue(longStr) - // @ts-expect-error + // @ts-expect-error: invalid default value .setDefault(-1) - // @ts-expect-error + // @ts-expect-error: invalid emoji .setEmoji({ name: 1 }) .setDescription(longStr); }).toThrowError(); diff --git a/packages/builders/__tests__/components/textInput.test.ts b/packages/builders/__tests__/components/textInput.test.ts index 1e9b338f9834..62b0085f6505 100644 --- a/packages/builders/__tests__/components/textInput.test.ts +++ b/packages/builders/__tests__/components/textInput.test.ts @@ -1,4 +1,4 @@ -import { APITextInputComponent, ComponentType, TextInputStyle } from 'discord-api-types/v10'; +import { ComponentType, TextInputStyle, type APITextInputComponent } from 'discord-api-types/v10'; import { describe, test, expect } from 'vitest'; import { labelValidator, @@ -7,10 +7,10 @@ import { placeholderValidator, valueValidator, textInputStyleValidator, -} from '../../src/components/textInput/Assertions'; -import { TextInputBuilder } from '../../src/components/textInput/TextInput'; +} from '../../src/components/textInput/Assertions.js'; +import { TextInputBuilder } from '../../src/components/textInput/TextInput.js'; -const superLongStr = 'a'.repeat(5000); +const superLongStr = 'a'.repeat(5_000); const textInputComponent = () => new TextInputBuilder(); @@ -47,7 +47,7 @@ describe('Text Input Components', () => { }); test('GIVEN invalid min length THEN validator does throw 2', () => { - expect(() => maxLengthValidator.parse(4001)).toThrowError(); + expect(() => maxLengthValidator.parse(4_001)).toThrowError(); }); test('GIVEN valid value THEN validator does not throw', () => { diff --git a/packages/builders/__tests__/interactions/ContextMenuCommands.test.ts b/packages/builders/__tests__/interactions/ContextMenuCommands.test.ts index afa352ae1205..d2cbe3802788 100644 --- a/packages/builders/__tests__/interactions/ContextMenuCommands.test.ts +++ b/packages/builders/__tests__/interactions/ContextMenuCommands.test.ts @@ -1,6 +1,6 @@ import { PermissionFlagsBits } from 'discord-api-types/v10'; import { describe, test, expect } from 'vitest'; -import { ContextMenuCommandAssertions, ContextMenuCommandBuilder } from '../../src/index'; +import { ContextMenuCommandAssertions, ContextMenuCommandBuilder } from '../../src/index.js'; const getBuilder = () => new ContextMenuCommandBuilder(); @@ -105,9 +105,9 @@ describe('Context Menu Commands', () => { }); test('GIVEN invalid name localizations THEN does throw error', () => { - // @ts-expect-error + // @ts-expect-error: invalid localization expect(() => getBuilder().setNameLocalization('en-U', 'foobar')).toThrowError(); - // @ts-expect-error + // @ts-expect-error: invalid localization expect(() => getBuilder().setNameLocalizations({ 'en-U': 'foobar' })).toThrowError(); }); diff --git a/packages/builders/__tests__/interactions/SlashCommands/Options.test.ts b/packages/builders/__tests__/interactions/SlashCommands/Options.test.ts index 2c18fc696416..25875bb6716b 100644 --- a/packages/builders/__tests__/interactions/SlashCommands/Options.test.ts +++ b/packages/builders/__tests__/interactions/SlashCommands/Options.test.ts @@ -1,15 +1,15 @@ import { - APIApplicationCommandAttachmentOption, - APIApplicationCommandBooleanOption, - APIApplicationCommandChannelOption, - APIApplicationCommandIntegerOption, - APIApplicationCommandMentionableOption, - APIApplicationCommandNumberOption, - APIApplicationCommandRoleOption, - APIApplicationCommandStringOption, - APIApplicationCommandUserOption, ApplicationCommandOptionType, ChannelType, + type APIApplicationCommandAttachmentOption, + type APIApplicationCommandBooleanOption, + type APIApplicationCommandChannelOption, + type APIApplicationCommandIntegerOption, + type APIApplicationCommandMentionableOption, + type APIApplicationCommandNumberOption, + type APIApplicationCommandRoleOption, + type APIApplicationCommandStringOption, + type APIApplicationCommandUserOption, } from 'discord-api-types/v10'; import { describe, test, expect } from 'vitest'; import { @@ -22,7 +22,7 @@ import { SlashCommandRoleOption, SlashCommandStringOption, SlashCommandUserOption, -} from '../../../src/index'; +} from '../../../src/index.js'; const getBooleanOption = () => new SlashCommandBooleanOption().setName('owo').setDescription('Testing 123').setRequired(true); diff --git a/packages/builders/__tests__/interactions/SlashCommands/SlashCommands.test.ts b/packages/builders/__tests__/interactions/SlashCommands/SlashCommands.test.ts index 642eb112919f..ef03954d5f34 100644 --- a/packages/builders/__tests__/interactions/SlashCommands/SlashCommands.test.ts +++ b/packages/builders/__tests__/interactions/SlashCommands/SlashCommands.test.ts @@ -1,4 +1,4 @@ -import { APIApplicationCommandOptionChoice, ChannelType, PermissionFlagsBits } from 'discord-api-types/v10'; +import { ChannelType, PermissionFlagsBits, type APIApplicationCommandOptionChoice } from 'discord-api-types/v10'; import { describe, test, expect } from 'vitest'; import { SlashCommandAssertions, @@ -14,7 +14,7 @@ import { SlashCommandSubcommandBuilder, SlashCommandSubcommandGroupBuilder, SlashCommandUserOption, -} from '../../../src/index'; +} from '../../../src/index.js'; const largeArray = Array.from({ length: 26 }, () => 1 as unknown as APIApplicationCommandOptionChoice); @@ -33,9 +33,7 @@ const getSubcommandGroup = () => new SlashCommandSubcommandGroupBuilder().setNam const getSubcommand = () => new SlashCommandSubcommandBuilder().setName('owo').setDescription('Testing 123'); class Collection { - public get [Symbol.toStringTag]() { - return 'Map'; - } + public readonly [Symbol.toStringTag] = 'Map'; } describe('Slash Commands', () => { @@ -248,16 +246,16 @@ describe('Slash Commands', () => { }); test('GIVEN a builder with invalid number min/max options THEN does throw an error', () => { - // @ts-expect-error + // @ts-expect-error: invalid max value expect(() => getBuilder().addNumberOption(getNumberOption().setMaxValue('test'))).toThrowError(); - // @ts-expect-error + // @ts-expect-error: invalid max value expect(() => getBuilder().addIntegerOption(getIntegerOption().setMaxValue('test'))).toThrowError(); - // @ts-expect-error + // @ts-expect-error: invalid min value expect(() => getBuilder().addNumberOption(getNumberOption().setMinValue('test'))).toThrowError(); - // @ts-expect-error + // @ts-expect-error: invalid min value expect(() => getBuilder().addIntegerOption(getIntegerOption().setMinValue('test'))).toThrowError(); expect(() => getBuilder().addIntegerOption(getIntegerOption().setMinValue(1.5))).toThrowError(); @@ -444,9 +442,9 @@ describe('Slash Commands', () => { }); test('GIVEN invalid name localizations THEN does throw error', () => { - // @ts-expect-error + // @ts-expect-error: invalid localization expect(() => getBuilder().setNameLocalization('en-U', 'foobar')).toThrowError(); - // @ts-expect-error + // @ts-expect-error: invalid localization expect(() => getBuilder().setNameLocalizations({ 'en-U': 'foobar' })).toThrowError(); }); @@ -467,9 +465,9 @@ describe('Slash Commands', () => { }); test('GIVEN invalid description localizations THEN does throw error', () => { - // @ts-expect-error + // @ts-expect-error: invalid localization description expect(() => getBuilder().setDescriptionLocalization('en-U', 'foobar')).toThrowError(); - // @ts-expect-error + // @ts-expect-error: invalid localization description expect(() => getBuilder().setDescriptionLocalizations({ 'en-U': 'foobar' })).toThrowError(); }); diff --git a/packages/builders/__tests__/interactions/modal.test.ts b/packages/builders/__tests__/interactions/modal.test.ts index 63a6adb126b0..3eaa934ad074 100644 --- a/packages/builders/__tests__/interactions/modal.test.ts +++ b/packages/builders/__tests__/interactions/modal.test.ts @@ -1,22 +1,22 @@ import { - APIModalInteractionResponseCallbackData, - APITextInputComponent, ComponentType, TextInputStyle, + type APIModalInteractionResponseCallbackData, + type APITextInputComponent, } from 'discord-api-types/v10'; import { describe, test, expect } from 'vitest'; import { ActionRowBuilder, ButtonBuilder, ModalBuilder, - ModalActionRowComponentBuilder, TextInputBuilder, -} from '../../src'; + type ModalActionRowComponentBuilder, +} from '../../src/index.js'; import { componentsValidator, titleValidator, validateRequiredParameters, -} from '../../src/interactions/modals/Assertions'; +} from '../../src/interactions/modals/Assertions.js'; const modal = () => new ModalBuilder(); @@ -46,7 +46,7 @@ describe('Modals', () => { test('GIVEN invalid required parameters THEN validator does throw', () => { expect(() => - // @ts-expect-error + // @ts-expect-error: missing required parameter validateRequiredParameters('123', undefined, [new ActionRowBuilder(), new ButtonBuilder()]), ).toThrowError(); }); @@ -66,7 +66,7 @@ describe('Modals', () => { test('GIVEN invalid fields THEN builder does throw', () => { expect(() => modal().setTitle('test').setCustomId('foobar').toJSON()).toThrowError(); - // @ts-expect-error + // @ts-expect-error: customId is invalid expect(() => modal().setTitle('test').setCustomId(42).toJSON()).toThrowError(); }); diff --git a/packages/builders/__tests__/messages/embed.test.ts b/packages/builders/__tests__/messages/embed.test.ts index f7d234083419..0c33255bf0c9 100644 --- a/packages/builders/__tests__/messages/embed.test.ts +++ b/packages/builders/__tests__/messages/embed.test.ts @@ -1,5 +1,5 @@ import { describe, test, expect } from 'vitest'; -import { EmbedBuilder, embedLength } from '../../src'; +import { EmbedBuilder, embedLength } from '../../src/index.js'; const alpha = 'abcdefghijklmnopqrstuvwxyz'; @@ -74,7 +74,7 @@ describe('Embed', () => { test('GIVEN an embed with an invalid description THEN throws error', () => { const embed = new EmbedBuilder(); - expect(() => embed.setDescription('a'.repeat(4097))).toThrowError(); + expect(() => embed.setDescription('a'.repeat(4_097))).toThrowError(); }); }); @@ -130,11 +130,11 @@ describe('Embed', () => { test('GIVEN an embed with an invalid color THEN throws error', () => { const embed = new EmbedBuilder(); - // @ts-expect-error + // @ts-expect-error: invalid color expect(() => embed.setColor('RED')).toThrowError(); - // @ts-expect-error + // @ts-expect-error: invalid color expect(() => embed.setColor([42, 36])).toThrowError(); - expect(() => embed.setColor([42, 36, 1000])).toThrowError(); + expect(() => embed.setColor([42, 36, 1_000])).toThrowError(); }); }); @@ -307,7 +307,7 @@ describe('Embed', () => { test('GIVEN an embed with invalid footer text THEN throws error', () => { const embed = new EmbedBuilder(); - expect(() => embed.setFooter({ text: 'a'.repeat(2049) })).toThrowError(); + expect(() => embed.setFooter({ text: 'a'.repeat(2_049) })).toThrowError(); }); }); @@ -411,7 +411,7 @@ describe('Embed', () => { test('4', () => { const embed = new EmbedBuilder(); - expect(() => embed.addFields({ name: '', value: 'a'.repeat(1025) })).toThrowError(); + expect(() => embed.addFields({ name: '', value: 'a'.repeat(1_025) })).toThrowError(); }); }); }); diff --git a/packages/builders/__tests__/messages/formatters.test.ts b/packages/builders/__tests__/messages/formatters.test.ts index 92a291f81ac7..467cf547de53 100644 --- a/packages/builders/__tests__/messages/formatters.test.ts +++ b/packages/builders/__tests__/messages/formatters.test.ts @@ -1,3 +1,4 @@ +/* eslint-disable no-template-curly-in-string */ import { URL } from 'node:url'; import { describe, test, expect, vitest } from 'vitest'; import { @@ -21,7 +22,7 @@ import { TimestampStyles, underscore, userMention, -} from '../../src'; +} from '../../src/index.js'; describe('Message formatters', () => { describe('codeBlock', () => { @@ -183,7 +184,7 @@ describe('Message formatters', () => { describe('time', () => { test('GIVEN no arguments THEN returns ""', () => { vitest.useFakeTimers(); - vitest.setSystemTime(1566424897579); + vitest.setSystemTime(1_566_424_897_579); expect<``>(time()).toEqual(''); @@ -191,29 +192,29 @@ describe('Message formatters', () => { }); test('GIVEN a date THEN returns ""', () => { - expect<``>(time(new Date(1867424897579))).toEqual(''); + expect<``>(time(new Date(1_867_424_897_579))).toEqual(''); }); test('GIVEN a date and a style from string THEN returns ""', () => { - expect<``>(time(new Date(1867424897579), 'd')).toEqual(''); + expect<``>(time(new Date(1_867_424_897_579), 'd')).toEqual(''); }); test('GIVEN a date and a format from enum THEN returns ""', () => { - expect<``>(time(new Date(1867424897579), TimestampStyles.RelativeTime)).toEqual( + expect<``>(time(new Date(1_867_424_897_579), TimestampStyles.RelativeTime)).toEqual( '', ); }); test('GIVEN a date THEN returns ""', () => { - expect<''>(time(1867424897)).toEqual(''); + expect<''>(time(1_867_424_897)).toEqual(''); }); test('GIVEN a date and a style from string THEN returns ""', () => { - expect<''>(time(1867424897, 'd')).toEqual(''); + expect<''>(time(1_867_424_897, 'd')).toEqual(''); }); test('GIVEN a date and a format from enum THEN returns ""', () => { - expect<''>(time(1867424897, TimestampStyles.RelativeTime)).toEqual(''); + expect<''>(time(1_867_424_897, TimestampStyles.RelativeTime)).toEqual(''); }); }); diff --git a/packages/builders/__tests__/util.test.ts b/packages/builders/__tests__/util.test.ts index 893345754dec..abe1431d5c44 100644 --- a/packages/builders/__tests__/util.test.ts +++ b/packages/builders/__tests__/util.test.ts @@ -6,7 +6,7 @@ import { enableValidators, disableValidators, isValidationEnabled, -} from '../src/index'; +} from '../src/index.js'; describe('isEquatable', () => { test('returns true if the object is equatable', () => { diff --git a/packages/builders/package.json b/packages/builders/package.json index ebee5ebeee39..ac914e8e53cd 100644 --- a/packages/builders/package.json +++ b/packages/builders/package.json @@ -65,16 +65,10 @@ "@favware/cliff-jumper": "^1.8.7", "@microsoft/api-extractor": "^7.29.5", "@types/node": "^16.11.56", - "@typescript-eslint/eslint-plugin": "^5.36.1", - "@typescript-eslint/parser": "^5.36.1", "@vitest/coverage-c8": "^0.22.1", "downlevel-dts": "^0.10.1", "eslint": "^8.23.0", - "eslint-config-marine": "^9.4.1", - "eslint-config-prettier": "^8.5.0", - "eslint-import-resolver-typescript": "^3.5.0", - "eslint-plugin-import": "^2.26.0", - "eslint-plugin-tsdoc": "^0.2.16", + "eslint-config-neon": "^0.1.23", "prettier": "^2.7.1", "rollup-plugin-typescript2": "^0.33.0", "typescript": "^4.8.2", diff --git a/packages/builders/src/components/ActionRow.ts b/packages/builders/src/components/ActionRow.ts index 245fa1dc4984..3a74a21c72be 100644 --- a/packages/builders/src/components/ActionRow.ts +++ b/packages/builders/src/components/ActionRow.ts @@ -1,21 +1,21 @@ import { type APIActionRowComponent, ComponentType, - APIMessageActionRowComponent, - APIModalActionRowComponent, - APIActionRowComponentTypes, + type APIMessageActionRowComponent, + type APIModalActionRowComponent, + type APIActionRowComponentTypes, } from 'discord-api-types/v10'; -import { ComponentBuilder } from './Component'; -import { createComponentBuilder } from './Components'; +import { normalizeArray, type RestOrArray } from '../util/normalizeArray.js'; +import { ComponentBuilder } from './Component.js'; +import { createComponentBuilder } from './Components.js'; import type { ButtonBuilder } from './button/Button'; import type { SelectMenuBuilder } from './selectMenu/SelectMenu'; import type { TextInputBuilder } from './textInput/TextInput'; -import { normalizeArray, type RestOrArray } from '../util/normalizeArray'; export type MessageComponentBuilder = - | MessageActionRowComponentBuilder - | ActionRowBuilder; -export type ModalComponentBuilder = ModalActionRowComponentBuilder | ActionRowBuilder; + | ActionRowBuilder + | MessageActionRowComponentBuilder; +export type ModalComponentBuilder = ActionRowBuilder | ModalActionRowComponentBuilder; export type MessageActionRowComponentBuilder = ButtonBuilder | SelectMenuBuilder; export type ModalActionRowComponentBuilder = TextInputBuilder; export type AnyComponentBuilder = MessageActionRowComponentBuilder | ModalActionRowComponentBuilder; @@ -35,7 +35,7 @@ export class ActionRowBuilder extends ComponentBu public constructor({ components, ...data }: Partial> = {}) { super({ type: ComponentType.ActionRow, ...data }); - this.components = (components?.map((c) => createComponentBuilder(c)) ?? []) as T[]; + this.components = (components?.map((component) => createComponentBuilder(component)) ?? []) as T[]; } /** diff --git a/packages/builders/src/components/Assertions.ts b/packages/builders/src/components/Assertions.ts index 5fa6c7efceaf..faae51dd16b7 100644 --- a/packages/builders/src/components/Assertions.ts +++ b/packages/builders/src/components/Assertions.ts @@ -1,7 +1,7 @@ import { s } from '@sapphire/shapeshift'; -import { APIMessageComponentEmoji, ButtonStyle } from 'discord-api-types/v10'; -import { SelectMenuOptionBuilder } from './selectMenu/SelectMenuOption'; -import { isValidationEnabled } from '../util/validation'; +import { ButtonStyle, type APIMessageComponentEmoji } from 'discord-api-types/v10'; +import { isValidationEnabled } from '../util/validation.js'; +import { SelectMenuOptionBuilder } from './selectMenu/SelectMenuOption.js'; export const customIdValidator = s.string .lengthGreaterThanOrEqual(1) diff --git a/packages/builders/src/components/Component.ts b/packages/builders/src/components/Component.ts index b9f85674af9b..d56e235dda4a 100644 --- a/packages/builders/src/components/Component.ts +++ b/packages/builders/src/components/Component.ts @@ -6,7 +6,7 @@ import type { } from 'discord-api-types/v10'; import type { JSONEncodable } from '../util/jsonEncodable'; -export type AnyAPIActionRowComponent = APIActionRowComponentTypes | APIActionRowComponent; +export type AnyAPIActionRowComponent = APIActionRowComponent | APIActionRowComponentTypes; /** * Represents a discord component diff --git a/packages/builders/src/components/Components.ts b/packages/builders/src/components/Components.ts index b45ae95e9ff2..4c73932f70b7 100644 --- a/packages/builders/src/components/Components.ts +++ b/packages/builders/src/components/Components.ts @@ -1,14 +1,14 @@ -import { APIMessageComponent, APIModalComponent, ComponentType } from 'discord-api-types/v10'; +import { ComponentType, type APIMessageComponent, type APIModalComponent } from 'discord-api-types/v10'; import { ActionRowBuilder, type AnyComponentBuilder, type MessageComponentBuilder, type ModalComponentBuilder, -} from './ActionRow'; -import { ComponentBuilder } from './Component'; -import { ButtonBuilder } from './button/Button'; -import { SelectMenuBuilder } from './selectMenu/SelectMenu'; -import { TextInputBuilder } from './textInput/TextInput'; +} from './ActionRow.js'; +import { ComponentBuilder } from './Component.js'; +import { ButtonBuilder } from './button/Button.js'; +import { SelectMenuBuilder } from './selectMenu/SelectMenu.js'; +import { TextInputBuilder } from './textInput/TextInput.js'; export interface MappedComponentTypes { [ComponentType.ActionRow]: ActionRowBuilder; @@ -23,7 +23,8 @@ export interface MappedComponentTypes { * @param data - The api data to transform to a component class */ export function createComponentBuilder( - data: (APIMessageComponent | APIModalComponent) & { type: T }, + // eslint-disable-next-line @typescript-eslint/sort-type-union-intersection-members + data: (APIModalComponent | APIMessageComponent) & { type: T }, ): MappedComponentTypes[T]; export function createComponentBuilder(data: C): C; export function createComponentBuilder( @@ -43,7 +44,7 @@ export function createComponentBuilder( case ComponentType.TextInput: return new TextInputBuilder(data); default: - // @ts-expect-error + // @ts-expect-error: This case can still occur if we get a newer unsupported component type // eslint-disable-next-line @typescript-eslint/restrict-template-expressions throw new Error(`Cannot properly serialize component type: ${data.type}`); } diff --git a/packages/builders/src/components/button/Button.ts b/packages/builders/src/components/button/Button.ts index 63ed260909f3..4b63002fbc87 100644 --- a/packages/builders/src/components/button/Button.ts +++ b/packages/builders/src/components/button/Button.ts @@ -1,10 +1,10 @@ import { ComponentType, - ButtonStyle, type APIMessageComponentEmoji, type APIButtonComponent, type APIButtonComponentWithURL, type APIButtonComponentWithCustomId, + type ButtonStyle, } from 'discord-api-types/v10'; import { buttonLabelValidator, @@ -14,8 +14,8 @@ import { emojiValidator, urlValidator, validateRequiredButtonParameters, -} from '../Assertions'; -import { ComponentBuilder } from '../Component'; +} from '../Assertions.js'; +import { ComponentBuilder } from '../Component.js'; /** * Represents a button component @@ -23,8 +23,8 @@ import { ComponentBuilder } from '../Component'; export class ButtonBuilder extends ComponentBuilder { /** * Creates a new button from API data - * @param data - The API data to create this button with * + * @param data - The API data to create this button with * @example * Creating a button from an API data object * ```ts @@ -38,7 +38,6 @@ export class ButtonBuilder extends ComponentBuilder { * custom_id: '12345678901234567890123456789012', * }); * ``` - * * @example * Creating a button using setters and API data * ```ts @@ -70,7 +69,6 @@ export class ButtonBuilder extends ComponentBuilder { * @remarks * This method is only available to buttons using the `Link` button style. * Only three types of URL schemes are currently supported: `https://`, `http://` and `discord://` - * * @param url - The URL to open when this button is clicked */ public setURL(url: string) { @@ -83,7 +81,6 @@ export class ButtonBuilder extends ComponentBuilder { * * @remarks * This method is only applicable to buttons that are not using the `Link` button style. - * * @param customId - The custom id to use for this button */ public setCustomId(customId: string) { diff --git a/packages/builders/src/components/selectMenu/SelectMenu.ts b/packages/builders/src/components/selectMenu/SelectMenu.ts index 55751ee70938..39fdfb6d688b 100644 --- a/packages/builders/src/components/selectMenu/SelectMenu.ts +++ b/packages/builders/src/components/selectMenu/SelectMenu.ts @@ -1,6 +1,5 @@ -import { APISelectMenuOption, ComponentType, type APISelectMenuComponent } from 'discord-api-types/v10'; -import { SelectMenuOptionBuilder } from './SelectMenuOption'; -import { normalizeArray, type RestOrArray } from '../../util/normalizeArray'; +import { ComponentType, type APISelectMenuComponent, type APISelectMenuOption } from 'discord-api-types/v10'; +import { normalizeArray, type RestOrArray } from '../../util/normalizeArray.js'; import { customIdValidator, disabledValidator, @@ -9,8 +8,9 @@ import { optionsLengthValidator, placeholderValidator, validateRequiredSelectMenuParameters, -} from '../Assertions'; -import { ComponentBuilder } from '../Component'; +} from '../Assertions.js'; +import { ComponentBuilder } from '../Component.js'; +import { SelectMenuOptionBuilder } from './SelectMenuOption.js'; /** * Represents a select menu component @@ -24,7 +24,7 @@ export class SelectMenuBuilder extends ComponentBuilder public constructor(data?: Partial) { const { options, ...initData } = data ?? {}; super({ type: ComponentType.SelectMenu, ...initData }); - this.options = options?.map((o) => new SelectMenuOptionBuilder(o)) ?? []; + this.options = options?.map((option) => new SelectMenuOptionBuilder(option)) ?? []; } /** @@ -83,7 +83,8 @@ export class SelectMenuBuilder extends ComponentBuilder * @param options - The options to add to this select menu * @returns */ - public addOptions(...options: RestOrArray) { + public addOptions(...options: RestOrArray) { + // eslint-disable-next-line no-param-reassign options = normalizeArray(options); optionsLengthValidator.parse(this.options.length + options.length); this.options.push( @@ -101,7 +102,8 @@ export class SelectMenuBuilder extends ComponentBuilder * * @param options - The options to set on this select menu */ - public setOptions(...options: RestOrArray) { + public setOptions(...options: RestOrArray) { + // eslint-disable-next-line no-param-reassign options = normalizeArray(options); optionsLengthValidator.parse(options.length); this.options.splice( @@ -124,7 +126,7 @@ export class SelectMenuBuilder extends ComponentBuilder // eslint-disable-next-line @typescript-eslint/consistent-type-assertions return { ...this.data, - options: this.options.map((o) => o.toJSON()), + options: this.options.map((option) => option.toJSON()), } as APISelectMenuComponent; } } diff --git a/packages/builders/src/components/selectMenu/SelectMenuOption.ts b/packages/builders/src/components/selectMenu/SelectMenuOption.ts index 3dba43869373..26edf23dc6a0 100644 --- a/packages/builders/src/components/selectMenu/SelectMenuOption.ts +++ b/packages/builders/src/components/selectMenu/SelectMenuOption.ts @@ -1,12 +1,11 @@ import type { APIMessageComponentEmoji, APISelectMenuOption } from 'discord-api-types/v10'; -import type { JSONEncodable } from '../../util/jsonEncodable'; - +import type { JSONEncodable } from '../../util/jsonEncodable.js'; import { defaultValidator, emojiValidator, labelValueDescriptionValidator, validateRequiredSelectMenuOptionParameters, -} from '../Assertions'; +} from '../Assertions.js'; /** * Represents a option within a select menu component diff --git a/packages/builders/src/components/textInput/Assertions.ts b/packages/builders/src/components/textInput/Assertions.ts index b468c0029a30..f0cfc4a3f802 100644 --- a/packages/builders/src/components/textInput/Assertions.ts +++ b/packages/builders/src/components/textInput/Assertions.ts @@ -1,19 +1,19 @@ import { s } from '@sapphire/shapeshift'; import { TextInputStyle } from 'discord-api-types/v10'; -import { isValidationEnabled } from '../../util/validation'; -import { customIdValidator } from '../Assertions'; +import { isValidationEnabled } from '../../util/validation.js'; +import { customIdValidator } from '../Assertions.js'; export const textInputStyleValidator = s.nativeEnum(TextInputStyle); export const minLengthValidator = s.number.int .greaterThanOrEqual(0) - .lessThanOrEqual(4000) + .lessThanOrEqual(4_000) .setValidationEnabled(isValidationEnabled); export const maxLengthValidator = s.number.int .greaterThanOrEqual(1) - .lessThanOrEqual(4000) + .lessThanOrEqual(4_000) .setValidationEnabled(isValidationEnabled); export const requiredValidator = s.boolean; -export const valueValidator = s.string.lengthLessThanOrEqual(4000).setValidationEnabled(isValidationEnabled); +export const valueValidator = s.string.lengthLessThanOrEqual(4_000).setValidationEnabled(isValidationEnabled); export const placeholderValidator = s.string.lengthLessThanOrEqual(100).setValidationEnabled(isValidationEnabled); export const labelValidator = s.string .lengthGreaterThanOrEqual(1) diff --git a/packages/builders/src/components/textInput/TextInput.ts b/packages/builders/src/components/textInput/TextInput.ts index 9bcbe7c41b6c..4c68a0e20b1f 100644 --- a/packages/builders/src/components/textInput/TextInput.ts +++ b/packages/builders/src/components/textInput/TextInput.ts @@ -1,5 +1,9 @@ import { ComponentType, type TextInputStyle, type APITextInputComponent } from 'discord-api-types/v10'; import isEqual from 'fast-deep-equal'; +import type { Equatable } from '../../util/equatable'; +import { isJSONEncodable, type JSONEncodable } from '../../util/jsonEncodable.js'; +import { customIdValidator } from '../Assertions.js'; +import { ComponentBuilder } from '../Component.js'; import { maxLengthValidator, minLengthValidator, @@ -9,15 +13,11 @@ import { validateRequiredParameters, labelValidator, textInputStyleValidator, -} from './Assertions'; -import type { Equatable } from '../../util/equatable'; -import { isJSONEncodable, type JSONEncodable } from '../../util/jsonEncodable'; -import { customIdValidator } from '../Assertions'; -import { ComponentBuilder } from '../Component'; +} from './Assertions.js'; export class TextInputBuilder extends ComponentBuilder - implements Equatable | APITextInputComponent> + implements Equatable> { public constructor(data?: APITextInputComponent & { type?: ComponentType.TextInput }) { super({ type: ComponentType.TextInput, ...data }); @@ -117,7 +117,7 @@ export class TextInputBuilder /** * {@inheritDoc Equatable.equals} */ - public equals(other: JSONEncodable | APITextInputComponent): boolean { + public equals(other: APITextInputComponent | JSONEncodable): boolean { if (isJSONEncodable(other)) { return isEqual(other.toJSON(), this.data); } diff --git a/packages/builders/src/index.ts b/packages/builders/src/index.ts index ba087db94133..58c0a5f57928 100644 --- a/packages/builders/src/index.ts +++ b/packages/builders/src/index.ts @@ -1,43 +1,43 @@ -export * as EmbedAssertions from './messages/embed/Assertions'; -export * from './messages/embed/Embed'; -export * from './messages/formatters'; +export * as EmbedAssertions from './messages/embed/Assertions.js'; +export * from './messages/embed/Embed.js'; +export * from './messages/formatters.js'; -export * as ComponentAssertions from './components/Assertions'; -export * from './components/ActionRow'; -export * from './components/button/Button'; -export * from './components/Component'; -export * from './components/Components'; -export * from './components/textInput/TextInput'; -export * as TextInputAssertions from './components/textInput/Assertions'; -export * from './interactions/modals/Modal'; -export * as ModalAssertions from './interactions/modals/Assertions'; -export * from './components/selectMenu/SelectMenu'; -export * from './components/selectMenu/SelectMenuOption'; +export * as ComponentAssertions from './components/Assertions.js'; +export * from './components/ActionRow.js'; +export * from './components/button/Button.js'; +export * from './components/Component.js'; +export * from './components/Components.js'; +export * from './components/textInput/TextInput.js'; +export * as TextInputAssertions from './components/textInput/Assertions.js'; +export * from './interactions/modals/Modal.js'; +export * as ModalAssertions from './interactions/modals/Assertions.js'; +export * from './components/selectMenu/SelectMenu.js'; +export * from './components/selectMenu/SelectMenuOption.js'; -export * as SlashCommandAssertions from './interactions/slashCommands/Assertions'; -export * from './interactions/slashCommands/SlashCommandBuilder'; -export * from './interactions/slashCommands/SlashCommandSubcommands'; -export * from './interactions/slashCommands/options/boolean'; -export * from './interactions/slashCommands/options/channel'; -export * from './interactions/slashCommands/options/integer'; -export * from './interactions/slashCommands/options/mentionable'; -export * from './interactions/slashCommands/options/number'; -export * from './interactions/slashCommands/options/role'; -export * from './interactions/slashCommands/options/attachment'; -export * from './interactions/slashCommands/options/string'; -export * from './interactions/slashCommands/options/user'; -export * from './interactions/slashCommands/mixins/ApplicationCommandNumericOptionMinMaxValueMixin'; -export * from './interactions/slashCommands/mixins/ApplicationCommandOptionBase'; -export * from './interactions/slashCommands/mixins/ApplicationCommandOptionChannelTypesMixin'; -export * from './interactions/slashCommands/mixins/ApplicationCommandOptionWithChoicesAndAutocompleteMixin'; -export * from './interactions/slashCommands/mixins/NameAndDescription'; -export * from './interactions/slashCommands/mixins/SharedSlashCommandOptions'; +export * as SlashCommandAssertions from './interactions/slashCommands/Assertions.js'; +export * from './interactions/slashCommands/SlashCommandBuilder.js'; +export * from './interactions/slashCommands/SlashCommandSubcommands.js'; +export * from './interactions/slashCommands/options/boolean.js'; +export * from './interactions/slashCommands/options/channel.js'; +export * from './interactions/slashCommands/options/integer.js'; +export * from './interactions/slashCommands/options/mentionable.js'; +export * from './interactions/slashCommands/options/number.js'; +export * from './interactions/slashCommands/options/role.js'; +export * from './interactions/slashCommands/options/attachment.js'; +export * from './interactions/slashCommands/options/string.js'; +export * from './interactions/slashCommands/options/user.js'; +export * from './interactions/slashCommands/mixins/ApplicationCommandNumericOptionMinMaxValueMixin.js'; +export * from './interactions/slashCommands/mixins/ApplicationCommandOptionBase.js'; +export * from './interactions/slashCommands/mixins/ApplicationCommandOptionChannelTypesMixin.js'; +export * from './interactions/slashCommands/mixins/ApplicationCommandOptionWithChoicesAndAutocompleteMixin.js'; +export * from './interactions/slashCommands/mixins/NameAndDescription.js'; +export * from './interactions/slashCommands/mixins/SharedSlashCommandOptions.js'; -export * as ContextMenuCommandAssertions from './interactions/contextMenuCommands/Assertions'; -export * from './interactions/contextMenuCommands/ContextMenuCommandBuilder'; +export * as ContextMenuCommandAssertions from './interactions/contextMenuCommands/Assertions.js'; +export * from './interactions/contextMenuCommands/ContextMenuCommandBuilder.js'; -export * from './util/jsonEncodable'; -export * from './util/equatable'; -export * from './util/componentUtil'; -export * from './util/normalizeArray'; -export * from './util/validation'; +export * from './util/jsonEncodable.js'; +export * from './util/equatable.js'; +export * from './util/componentUtil.js'; +export * from './util/normalizeArray.js'; +export * from './util/validation.js'; diff --git a/packages/builders/src/interactions/contextMenuCommands/Assertions.ts b/packages/builders/src/interactions/contextMenuCommands/Assertions.ts index af5ffa9b114b..7f65a0344e5b 100644 --- a/packages/builders/src/interactions/contextMenuCommands/Assertions.ts +++ b/packages/builders/src/interactions/contextMenuCommands/Assertions.ts @@ -1,11 +1,12 @@ import { s } from '@sapphire/shapeshift'; import { ApplicationCommandType } from 'discord-api-types/v10'; +import { isValidationEnabled } from '../../util/validation.js'; import type { ContextMenuCommandType } from './ContextMenuCommandBuilder'; -import { isValidationEnabled } from '../../util/validation'; const namePredicate = s.string .lengthGreaterThanOrEqual(1) .lengthLessThanOrEqual(32) + // eslint-disable-next-line prefer-named-capture-group, unicorn/no-unsafe-regex .regex(/^( *[\p{L}\p{N}\p{sc=Devanagari}\p{sc=Thai}_-]+ *)+$/u) .setValidationEnabled(isValidationEnabled); const typePredicate = s diff --git a/packages/builders/src/interactions/contextMenuCommands/ContextMenuCommandBuilder.ts b/packages/builders/src/interactions/contextMenuCommands/ContextMenuCommandBuilder.ts index 53c6ae70a268..4deb42a26036 100644 --- a/packages/builders/src/interactions/contextMenuCommands/ContextMenuCommandBuilder.ts +++ b/packages/builders/src/interactions/contextMenuCommands/ContextMenuCommandBuilder.ts @@ -5,6 +5,7 @@ import type { Permissions, RESTPostAPIApplicationCommandsJSONBody, } from 'discord-api-types/v10'; +import { validateLocale, validateLocalizationMap } from '../slashCommands/Assertions.js'; import { validateRequiredParameters, validateName, @@ -12,8 +13,7 @@ import { validateDefaultPermission, validateDefaultMemberPermissions, validateDMPermission, -} from './Assertions'; -import { validateLocale, validateLocalizationMap } from '../slashCommands/Assertions'; +} from './Assertions.js'; export class ContextMenuCommandBuilder { /** @@ -84,7 +84,6 @@ export class ContextMenuCommandBuilder { * **Note**: If set to `false`, you will have to later `PUT` the permissions for this command. * * @param value - Whether or not to enable this command by default - * * @see https://discord.com/developers/docs/interactions/application-commands#permissions * @deprecated Use {@link ContextMenuCommandBuilder.setDefaultMemberPermissions} or {@link ContextMenuCommandBuilder.setDMPermission} instead. */ @@ -103,7 +102,6 @@ export class ContextMenuCommandBuilder { * **Note:** You can set this to `'0'` to disable the command by default. * * @param permissions - The permissions bit field to set - * * @see https://discord.com/developers/docs/interactions/application-commands#permissions */ public setDefaultMemberPermissions(permissions: Permissions | bigint | number | null | undefined) { @@ -120,7 +118,6 @@ export class ContextMenuCommandBuilder { * By default, commands are visible. * * @param enabled - If the command should be enabled in DMs - * * @see https://discord.com/developers/docs/interactions/application-commands#permissions */ public setDMPermission(enabled: boolean | null | undefined) { @@ -169,9 +166,8 @@ export class ContextMenuCommandBuilder { Reflect.set(this, 'name_localizations', {}); - Object.entries(localizedNames).forEach((args) => - this.setNameLocalization(...(args as [LocaleString, string | null])), - ); + for (const args of Object.entries(localizedNames)) + this.setNameLocalization(...(args as [LocaleString, string | null])); return this; } @@ -189,4 +185,4 @@ export class ContextMenuCommandBuilder { } } -export type ContextMenuCommandType = ApplicationCommandType.User | ApplicationCommandType.Message; +export type ContextMenuCommandType = ApplicationCommandType.Message | ApplicationCommandType.User; diff --git a/packages/builders/src/interactions/modals/Assertions.ts b/packages/builders/src/interactions/modals/Assertions.ts index 2b972f23d3a3..a59bb24cfe62 100644 --- a/packages/builders/src/interactions/modals/Assertions.ts +++ b/packages/builders/src/interactions/modals/Assertions.ts @@ -1,7 +1,7 @@ import { s } from '@sapphire/shapeshift'; -import { ActionRowBuilder, type ModalActionRowComponentBuilder } from '../../components/ActionRow'; -import { customIdValidator } from '../../components/Assertions'; -import { isValidationEnabled } from '../../util/validation'; +import { ActionRowBuilder, type ModalActionRowComponentBuilder } from '../../components/ActionRow.js'; +import { customIdValidator } from '../../components/Assertions.js'; +import { isValidationEnabled } from '../../util/validation.js'; export const titleValidator = s.string .lengthGreaterThanOrEqual(1) diff --git a/packages/builders/src/interactions/modals/Modal.ts b/packages/builders/src/interactions/modals/Modal.ts index d320b8958870..db0c619a6ab3 100644 --- a/packages/builders/src/interactions/modals/Modal.ts +++ b/packages/builders/src/interactions/modals/Modal.ts @@ -3,20 +3,21 @@ import type { APIModalActionRowComponent, APIModalInteractionResponseCallbackData, } from 'discord-api-types/v10'; -import { titleValidator, validateRequiredParameters } from './Assertions'; -import { ActionRowBuilder, type ModalActionRowComponentBuilder } from '../../components/ActionRow'; -import { customIdValidator } from '../../components/Assertions'; -import { createComponentBuilder } from '../../components/Components'; +import { ActionRowBuilder, type ModalActionRowComponentBuilder } from '../../components/ActionRow.js'; +import { customIdValidator } from '../../components/Assertions.js'; +import { createComponentBuilder } from '../../components/Components.js'; import type { JSONEncodable } from '../../util/jsonEncodable'; -import { normalizeArray, type RestOrArray } from '../../util/normalizeArray'; +import { normalizeArray, type RestOrArray } from '../../util/normalizeArray.js'; +import { titleValidator, validateRequiredParameters } from './Assertions.js'; export class ModalBuilder implements JSONEncodable { public readonly data: Partial; + public readonly components: ActionRowBuilder[] = []; public constructor({ components, ...data }: Partial = {}) { this.data = { ...data }; - this.components = (components?.map((c) => createComponentBuilder(c)) ?? + this.components = (components?.map((component) => createComponentBuilder(component)) ?? []) as ActionRowBuilder[]; } diff --git a/packages/builders/src/interactions/slashCommands/Assertions.ts b/packages/builders/src/interactions/slashCommands/Assertions.ts index 27c8fc5ed580..7a251a616583 100644 --- a/packages/builders/src/interactions/slashCommands/Assertions.ts +++ b/packages/builders/src/interactions/slashCommands/Assertions.ts @@ -1,9 +1,9 @@ import { s } from '@sapphire/shapeshift'; -import { type APIApplicationCommandOptionChoice, Locale, LocalizationMap } from 'discord-api-types/v10'; +import { Locale, type APIApplicationCommandOptionChoice, type LocalizationMap } from 'discord-api-types/v10'; +import { isValidationEnabled } from '../../util/validation.js'; import type { ToAPIApplicationCommandOptions } from './SlashCommandBuilder'; import type { SlashCommandSubcommandBuilder, SlashCommandSubcommandGroupBuilder } from './SlashCommandSubcommands'; import type { ApplicationCommandOptionBase } from './mixins/ApplicationCommandOptionBase'; -import { isValidationEnabled } from '../../util/validation'; const namePredicate = s.string .lengthGreaterThanOrEqual(1) diff --git a/packages/builders/src/interactions/slashCommands/SlashCommandBuilder.ts b/packages/builders/src/interactions/slashCommands/SlashCommandBuilder.ts index 39c19575dfa2..fdfa4d3c1fa8 100644 --- a/packages/builders/src/interactions/slashCommands/SlashCommandBuilder.ts +++ b/packages/builders/src/interactions/slashCommands/SlashCommandBuilder.ts @@ -13,10 +13,10 @@ import { validateDMPermission, validateMaxOptionsLength, validateRequiredParameters, -} from './Assertions'; -import { SlashCommandSubcommandBuilder, SlashCommandSubcommandGroupBuilder } from './SlashCommandSubcommands'; -import { SharedNameAndDescription } from './mixins/NameAndDescription'; -import { SharedSlashCommandOptions } from './mixins/SharedSlashCommandOptions'; +} from './Assertions.js'; +import { SlashCommandSubcommandBuilder, SlashCommandSubcommandGroupBuilder } from './SlashCommandSubcommands.js'; +import { SharedNameAndDescription } from './mixins/NameAndDescription.js'; +import { SharedSlashCommandOptions } from './mixins/SharedSlashCommandOptions.js'; @mix(SharedSlashCommandOptions, SharedNameAndDescription) export class SlashCommandBuilder { @@ -87,7 +87,6 @@ export class SlashCommandBuilder { * **Note**: If set to `false`, you will have to later `PUT` the permissions for this command. * * @param value - Whether or not to enable this command by default - * * @see https://discord.com/developers/docs/interactions/application-commands#permissions * @deprecated Use {@link (SlashCommandBuilder:class).setDefaultMemberPermissions} or {@link (SlashCommandBuilder:class).setDMPermission} instead. */ @@ -106,7 +105,6 @@ export class SlashCommandBuilder { * **Note:** You can set this to `'0'` to disable the command by default. * * @param permissions - The permissions bit field to set - * * @see https://discord.com/developers/docs/interactions/application-commands#permissions */ public setDefaultMemberPermissions(permissions: Permissions | bigint | number | null | undefined) { @@ -123,7 +121,6 @@ export class SlashCommandBuilder { * By default, commands are visible. * * @param enabled - If the command should be enabled in DMs - * * @see https://discord.com/developers/docs/interactions/application-commands#permissions */ public setDMPermission(enabled: boolean | null | undefined) { @@ -192,7 +189,7 @@ export interface SlashCommandBuilder extends SharedNameAndDescription, SharedSla export interface SlashCommandSubcommandsOnlyBuilder extends SharedNameAndDescription, - Pick {} + Pick {} export interface SlashCommandOptionsOnlyBuilder extends SharedNameAndDescription, @@ -200,5 +197,5 @@ export interface SlashCommandOptionsOnlyBuilder Pick {} export interface ToAPIApplicationCommandOptions { - toJSON: () => APIApplicationCommandOption; + toJSON(): APIApplicationCommandOption; } diff --git a/packages/builders/src/interactions/slashCommands/SlashCommandSubcommands.ts b/packages/builders/src/interactions/slashCommands/SlashCommandSubcommands.ts index 369c3556ab65..22550b26347e 100644 --- a/packages/builders/src/interactions/slashCommands/SlashCommandSubcommands.ts +++ b/packages/builders/src/interactions/slashCommands/SlashCommandSubcommands.ts @@ -1,14 +1,14 @@ import { - APIApplicationCommandSubcommandGroupOption, - APIApplicationCommandSubcommandOption, ApplicationCommandOptionType, + type APIApplicationCommandSubcommandGroupOption, + type APIApplicationCommandSubcommandOption, } from 'discord-api-types/v10'; import { mix } from 'ts-mixer'; -import { assertReturnOfBuilder, validateMaxOptionsLength, validateRequiredParameters } from './Assertions'; -import type { ToAPIApplicationCommandOptions } from './SlashCommandBuilder'; +import { assertReturnOfBuilder, validateMaxOptionsLength, validateRequiredParameters } from './Assertions.js'; +import type { ToAPIApplicationCommandOptions } from './SlashCommandBuilder.js'; import type { ApplicationCommandOptionBase } from './mixins/ApplicationCommandOptionBase'; -import { SharedNameAndDescription } from './mixins/NameAndDescription'; -import { SharedSlashCommandOptions } from './mixins/SharedSlashCommandOptions'; +import { SharedNameAndDescription } from './mixins/NameAndDescription.js'; +import { SharedSlashCommandOptions } from './mixins/SharedSlashCommandOptions.js'; /** * Represents a folder for subcommands diff --git a/packages/builders/src/interactions/slashCommands/mixins/ApplicationCommandNumericOptionMinMaxValueMixin.ts b/packages/builders/src/interactions/slashCommands/mixins/ApplicationCommandNumericOptionMinMaxValueMixin.ts index ae107058bc79..5ac38d1f6a89 100644 --- a/packages/builders/src/interactions/slashCommands/mixins/ApplicationCommandNumericOptionMinMaxValueMixin.ts +++ b/packages/builders/src/interactions/slashCommands/mixins/ApplicationCommandNumericOptionMinMaxValueMixin.ts @@ -1,5 +1,6 @@ export abstract class ApplicationCommandNumericOptionMinMaxValueMixin { public readonly max_value?: number; + public readonly min_value?: number; /** diff --git a/packages/builders/src/interactions/slashCommands/mixins/ApplicationCommandOptionBase.ts b/packages/builders/src/interactions/slashCommands/mixins/ApplicationCommandOptionBase.ts index beba4af33408..b40ce0c96934 100644 --- a/packages/builders/src/interactions/slashCommands/mixins/ApplicationCommandOptionBase.ts +++ b/packages/builders/src/interactions/slashCommands/mixins/ApplicationCommandOptionBase.ts @@ -1,6 +1,6 @@ import type { APIApplicationCommandBasicOption, ApplicationCommandOptionType } from 'discord-api-types/v10'; -import { SharedNameAndDescription } from './NameAndDescription'; -import { validateRequiredParameters, validateRequired, validateLocalizationMap } from '../Assertions'; +import { validateRequiredParameters, validateRequired, validateLocalizationMap } from '../Assertions.js'; +import { SharedNameAndDescription } from './NameAndDescription.js'; export abstract class ApplicationCommandOptionBase extends SharedNameAndDescription { public abstract readonly type: ApplicationCommandOptionType; diff --git a/packages/builders/src/interactions/slashCommands/mixins/ApplicationCommandOptionWithChoicesAndAutocompleteMixin.ts b/packages/builders/src/interactions/slashCommands/mixins/ApplicationCommandOptionWithChoicesAndAutocompleteMixin.ts index 76a2dcb408f0..5ea7105f14c4 100644 --- a/packages/builders/src/interactions/slashCommands/mixins/ApplicationCommandOptionWithChoicesAndAutocompleteMixin.ts +++ b/packages/builders/src/interactions/slashCommands/mixins/ApplicationCommandOptionWithChoicesAndAutocompleteMixin.ts @@ -1,9 +1,9 @@ import { s } from '@sapphire/shapeshift'; -import { APIApplicationCommandOptionChoice, ApplicationCommandOptionType } from 'discord-api-types/v10'; -import { localizationMapPredicate, validateChoicesLength } from '../Assertions'; +import { ApplicationCommandOptionType, type APIApplicationCommandOptionChoice } from 'discord-api-types/v10'; +import { localizationMapPredicate, validateChoicesLength } from '../Assertions.js'; const stringPredicate = s.string.lengthGreaterThanOrEqual(1).lengthLessThanOrEqual(100); -const numberPredicate = s.number.greaterThan(-Infinity).lessThan(Infinity); +const numberPredicate = s.number.greaterThan(Number.NEGATIVE_INFINITY).lessThan(Number.POSITIVE_INFINITY); const choicesPredicate = s.object({ name: stringPredicate, name_localizations: localizationMapPredicate, @@ -11,8 +11,9 @@ const choicesPredicate = s.object({ }).array; const booleanPredicate = s.boolean; -export class ApplicationCommandOptionWithChoicesAndAutocompleteMixin { +export class ApplicationCommandOptionWithChoicesAndAutocompleteMixin { public readonly choices?: APIApplicationCommandOptionChoice[]; + public readonly autocomplete?: boolean; // Since this is present and this is a mixin, this is needed @@ -65,6 +66,7 @@ export class ApplicationCommandOptionWithChoicesAndAutocompleteMixin - this.setNameLocalization(...(args as [LocaleString, string | null])), - ); + for (const args of Object.entries(localizedNames)) { + this.setNameLocalization(...(args as [LocaleString, string | null])); + } + return this; } @@ -114,9 +118,10 @@ export class SharedNameAndDescription { } Reflect.set(this, 'description_localizations', {}); - Object.entries(localizedDescriptions).forEach((args) => - this.setDescriptionLocalization(...(args as [LocaleString, string | null])), - ); + for (const args of Object.entries(localizedDescriptions)) { + this.setDescriptionLocalization(...(args as [LocaleString, string | null])); + } + return this; } } diff --git a/packages/builders/src/interactions/slashCommands/mixins/SharedSlashCommandOptions.ts b/packages/builders/src/interactions/slashCommands/mixins/SharedSlashCommandOptions.ts index 6acf9becea9b..db278d83dd13 100644 --- a/packages/builders/src/interactions/slashCommands/mixins/SharedSlashCommandOptions.ts +++ b/packages/builders/src/interactions/slashCommands/mixins/SharedSlashCommandOptions.ts @@ -1,15 +1,15 @@ -import type { ApplicationCommandOptionBase } from './ApplicationCommandOptionBase'; -import { assertReturnOfBuilder, validateMaxOptionsLength } from '../Assertions'; +import { assertReturnOfBuilder, validateMaxOptionsLength } from '../Assertions.js'; import type { ToAPIApplicationCommandOptions } from '../SlashCommandBuilder'; -import { SlashCommandAttachmentOption } from '../options/attachment'; -import { SlashCommandBooleanOption } from '../options/boolean'; -import { SlashCommandChannelOption } from '../options/channel'; -import { SlashCommandIntegerOption } from '../options/integer'; -import { SlashCommandMentionableOption } from '../options/mentionable'; -import { SlashCommandNumberOption } from '../options/number'; -import { SlashCommandRoleOption } from '../options/role'; -import { SlashCommandStringOption } from '../options/string'; -import { SlashCommandUserOption } from '../options/user'; +import { SlashCommandAttachmentOption } from '../options/attachment.js'; +import { SlashCommandBooleanOption } from '../options/boolean.js'; +import { SlashCommandChannelOption } from '../options/channel.js'; +import { SlashCommandIntegerOption } from '../options/integer.js'; +import { SlashCommandMentionableOption } from '../options/mentionable.js'; +import { SlashCommandNumberOption } from '../options/number.js'; +import { SlashCommandRoleOption } from '../options/role.js'; +import { SlashCommandStringOption } from '../options/string.js'; +import { SlashCommandUserOption } from '../options/user.js'; +import type { ApplicationCommandOptionBase } from './ApplicationCommandOptionBase.js'; export class SharedSlashCommandOptions { public readonly options!: ToAPIApplicationCommandOptions[]; @@ -83,15 +83,15 @@ export class SharedSlashCommandOptions { */ public addStringOption( input: - | SlashCommandStringOption - | Omit | Omit + | Omit + | SlashCommandStringOption | (( builder: SlashCommandStringOption, ) => - | SlashCommandStringOption + | Omit | Omit - | Omit), + | SlashCommandStringOption), ) { return this._sharedAddOptionMethod(input, SlashCommandStringOption); } @@ -103,15 +103,15 @@ export class SharedSlashCommandOptions { */ public addIntegerOption( input: - | SlashCommandIntegerOption - | Omit | Omit + | Omit + | SlashCommandIntegerOption | (( builder: SlashCommandIntegerOption, ) => - | SlashCommandIntegerOption + | Omit | Omit - | Omit), + | SlashCommandIntegerOption), ) { return this._sharedAddOptionMethod(input, SlashCommandIntegerOption); } @@ -123,25 +123,25 @@ export class SharedSlashCommandOptions { */ public addNumberOption( input: - | SlashCommandNumberOption - | Omit | Omit + | Omit + | SlashCommandNumberOption | (( builder: SlashCommandNumberOption, ) => - | SlashCommandNumberOption + | Omit | Omit - | Omit), + | SlashCommandNumberOption), ) { return this._sharedAddOptionMethod(input, SlashCommandNumberOption); } private _sharedAddOptionMethod( input: - | T - | Omit | Omit - | ((builder: T) => T | Omit | Omit), + | Omit + | T + | ((builder: T) => Omit | Omit | T), Instance: new () => T, ): ShouldOmitSubcommandFunctions extends true ? Omit : this { const { options } = this; diff --git a/packages/builders/src/interactions/slashCommands/options/attachment.ts b/packages/builders/src/interactions/slashCommands/options/attachment.ts index e590e46292f1..006911033f78 100644 --- a/packages/builders/src/interactions/slashCommands/options/attachment.ts +++ b/packages/builders/src/interactions/slashCommands/options/attachment.ts @@ -1,5 +1,5 @@ -import { APIApplicationCommandAttachmentOption, ApplicationCommandOptionType } from 'discord-api-types/v10'; -import { ApplicationCommandOptionBase } from '../mixins/ApplicationCommandOptionBase'; +import { ApplicationCommandOptionType, type APIApplicationCommandAttachmentOption } from 'discord-api-types/v10'; +import { ApplicationCommandOptionBase } from '../mixins/ApplicationCommandOptionBase.js'; export class SlashCommandAttachmentOption extends ApplicationCommandOptionBase { public override readonly type = ApplicationCommandOptionType.Attachment as const; diff --git a/packages/builders/src/interactions/slashCommands/options/boolean.ts b/packages/builders/src/interactions/slashCommands/options/boolean.ts index 0faaee592429..f2c9768bad6e 100644 --- a/packages/builders/src/interactions/slashCommands/options/boolean.ts +++ b/packages/builders/src/interactions/slashCommands/options/boolean.ts @@ -1,5 +1,5 @@ -import { APIApplicationCommandBooleanOption, ApplicationCommandOptionType } from 'discord-api-types/v10'; -import { ApplicationCommandOptionBase } from '../mixins/ApplicationCommandOptionBase'; +import { ApplicationCommandOptionType, type APIApplicationCommandBooleanOption } from 'discord-api-types/v10'; +import { ApplicationCommandOptionBase } from '../mixins/ApplicationCommandOptionBase.js'; export class SlashCommandBooleanOption extends ApplicationCommandOptionBase { public readonly type = ApplicationCommandOptionType.Boolean as const; diff --git a/packages/builders/src/interactions/slashCommands/options/channel.ts b/packages/builders/src/interactions/slashCommands/options/channel.ts index 1e5111aef90d..e3dac0aa6c15 100644 --- a/packages/builders/src/interactions/slashCommands/options/channel.ts +++ b/packages/builders/src/interactions/slashCommands/options/channel.ts @@ -1,7 +1,7 @@ -import { APIApplicationCommandChannelOption, ApplicationCommandOptionType } from 'discord-api-types/v10'; +import { ApplicationCommandOptionType, type APIApplicationCommandChannelOption } from 'discord-api-types/v10'; import { mix } from 'ts-mixer'; -import { ApplicationCommandOptionBase } from '../mixins/ApplicationCommandOptionBase'; -import { ApplicationCommandOptionChannelTypesMixin } from '../mixins/ApplicationCommandOptionChannelTypesMixin'; +import { ApplicationCommandOptionBase } from '../mixins/ApplicationCommandOptionBase.js'; +import { ApplicationCommandOptionChannelTypesMixin } from '../mixins/ApplicationCommandOptionChannelTypesMixin.js'; @mix(ApplicationCommandOptionChannelTypesMixin) export class SlashCommandChannelOption extends ApplicationCommandOptionBase { diff --git a/packages/builders/src/interactions/slashCommands/options/integer.ts b/packages/builders/src/interactions/slashCommands/options/integer.ts index a2276e2ba953..e8a98f4c44d0 100644 --- a/packages/builders/src/interactions/slashCommands/options/integer.ts +++ b/packages/builders/src/interactions/slashCommands/options/integer.ts @@ -1,9 +1,9 @@ import { s } from '@sapphire/shapeshift'; -import { APIApplicationCommandIntegerOption, ApplicationCommandOptionType } from 'discord-api-types/v10'; +import { ApplicationCommandOptionType, type APIApplicationCommandIntegerOption } from 'discord-api-types/v10'; import { mix } from 'ts-mixer'; -import { ApplicationCommandNumericOptionMinMaxValueMixin } from '../mixins/ApplicationCommandNumericOptionMinMaxValueMixin'; -import { ApplicationCommandOptionBase } from '../mixins/ApplicationCommandOptionBase'; -import { ApplicationCommandOptionWithChoicesAndAutocompleteMixin } from '../mixins/ApplicationCommandOptionWithChoicesAndAutocompleteMixin'; +import { ApplicationCommandNumericOptionMinMaxValueMixin } from '../mixins/ApplicationCommandNumericOptionMinMaxValueMixin.js'; +import { ApplicationCommandOptionBase } from '../mixins/ApplicationCommandOptionBase.js'; +import { ApplicationCommandOptionWithChoicesAndAutocompleteMixin } from '../mixins/ApplicationCommandOptionWithChoicesAndAutocompleteMixin.js'; const numberValidator = s.number.int; diff --git a/packages/builders/src/interactions/slashCommands/options/mentionable.ts b/packages/builders/src/interactions/slashCommands/options/mentionable.ts index be7416f1437c..91a0416dfd62 100644 --- a/packages/builders/src/interactions/slashCommands/options/mentionable.ts +++ b/packages/builders/src/interactions/slashCommands/options/mentionable.ts @@ -1,5 +1,5 @@ -import { APIApplicationCommandMentionableOption, ApplicationCommandOptionType } from 'discord-api-types/v10'; -import { ApplicationCommandOptionBase } from '../mixins/ApplicationCommandOptionBase'; +import { ApplicationCommandOptionType, type APIApplicationCommandMentionableOption } from 'discord-api-types/v10'; +import { ApplicationCommandOptionBase } from '../mixins/ApplicationCommandOptionBase.js'; export class SlashCommandMentionableOption extends ApplicationCommandOptionBase { public readonly type = ApplicationCommandOptionType.Mentionable as const; diff --git a/packages/builders/src/interactions/slashCommands/options/number.ts b/packages/builders/src/interactions/slashCommands/options/number.ts index 6dc820633702..80b5cd6e5593 100644 --- a/packages/builders/src/interactions/slashCommands/options/number.ts +++ b/packages/builders/src/interactions/slashCommands/options/number.ts @@ -1,9 +1,9 @@ import { s } from '@sapphire/shapeshift'; -import { APIApplicationCommandNumberOption, ApplicationCommandOptionType } from 'discord-api-types/v10'; +import { ApplicationCommandOptionType, type APIApplicationCommandNumberOption } from 'discord-api-types/v10'; import { mix } from 'ts-mixer'; -import { ApplicationCommandNumericOptionMinMaxValueMixin } from '../mixins/ApplicationCommandNumericOptionMinMaxValueMixin'; -import { ApplicationCommandOptionBase } from '../mixins/ApplicationCommandOptionBase'; -import { ApplicationCommandOptionWithChoicesAndAutocompleteMixin } from '../mixins/ApplicationCommandOptionWithChoicesAndAutocompleteMixin'; +import { ApplicationCommandNumericOptionMinMaxValueMixin } from '../mixins/ApplicationCommandNumericOptionMinMaxValueMixin.js'; +import { ApplicationCommandOptionBase } from '../mixins/ApplicationCommandOptionBase.js'; +import { ApplicationCommandOptionWithChoicesAndAutocompleteMixin } from '../mixins/ApplicationCommandOptionWithChoicesAndAutocompleteMixin.js'; const numberValidator = s.number; diff --git a/packages/builders/src/interactions/slashCommands/options/role.ts b/packages/builders/src/interactions/slashCommands/options/role.ts index 85dc376536cf..4f5871d56069 100644 --- a/packages/builders/src/interactions/slashCommands/options/role.ts +++ b/packages/builders/src/interactions/slashCommands/options/role.ts @@ -1,5 +1,5 @@ -import { APIApplicationCommandRoleOption, ApplicationCommandOptionType } from 'discord-api-types/v10'; -import { ApplicationCommandOptionBase } from '../mixins/ApplicationCommandOptionBase'; +import { ApplicationCommandOptionType, type APIApplicationCommandRoleOption } from 'discord-api-types/v10'; +import { ApplicationCommandOptionBase } from '../mixins/ApplicationCommandOptionBase.js'; export class SlashCommandRoleOption extends ApplicationCommandOptionBase { public override readonly type = ApplicationCommandOptionType.Role as const; diff --git a/packages/builders/src/interactions/slashCommands/options/string.ts b/packages/builders/src/interactions/slashCommands/options/string.ts index 15d4cbaa9b48..345b7934a12a 100644 --- a/packages/builders/src/interactions/slashCommands/options/string.ts +++ b/packages/builders/src/interactions/slashCommands/options/string.ts @@ -1,16 +1,18 @@ import { s } from '@sapphire/shapeshift'; -import { APIApplicationCommandStringOption, ApplicationCommandOptionType } from 'discord-api-types/v10'; +import { ApplicationCommandOptionType, type APIApplicationCommandStringOption } from 'discord-api-types/v10'; import { mix } from 'ts-mixer'; -import { ApplicationCommandOptionBase } from '../mixins/ApplicationCommandOptionBase'; -import { ApplicationCommandOptionWithChoicesAndAutocompleteMixin } from '../mixins/ApplicationCommandOptionWithChoicesAndAutocompleteMixin'; +import { ApplicationCommandOptionBase } from '../mixins/ApplicationCommandOptionBase.js'; +import { ApplicationCommandOptionWithChoicesAndAutocompleteMixin } from '../mixins/ApplicationCommandOptionWithChoicesAndAutocompleteMixin.js'; -const minLengthValidator = s.number.greaterThanOrEqual(0).lessThanOrEqual(6000); -const maxLengthValidator = s.number.greaterThanOrEqual(1).lessThanOrEqual(6000); +const minLengthValidator = s.number.greaterThanOrEqual(0).lessThanOrEqual(6_000); +const maxLengthValidator = s.number.greaterThanOrEqual(1).lessThanOrEqual(6_000); @mix(ApplicationCommandOptionWithChoicesAndAutocompleteMixin) export class SlashCommandStringOption extends ApplicationCommandOptionBase { public readonly type = ApplicationCommandOptionType.String as const; + public readonly max_length?: number; + public readonly min_length?: number; /** diff --git a/packages/builders/src/interactions/slashCommands/options/user.ts b/packages/builders/src/interactions/slashCommands/options/user.ts index 9a750067daba..609450fa5d11 100644 --- a/packages/builders/src/interactions/slashCommands/options/user.ts +++ b/packages/builders/src/interactions/slashCommands/options/user.ts @@ -1,5 +1,5 @@ -import { APIApplicationCommandUserOption, ApplicationCommandOptionType } from 'discord-api-types/v10'; -import { ApplicationCommandOptionBase } from '../mixins/ApplicationCommandOptionBase'; +import { ApplicationCommandOptionType, type APIApplicationCommandUserOption } from 'discord-api-types/v10'; +import { ApplicationCommandOptionBase } from '../mixins/ApplicationCommandOptionBase.js'; export class SlashCommandUserOption extends ApplicationCommandOptionBase { public readonly type = ApplicationCommandOptionType.User as const; diff --git a/packages/builders/src/messages/embed/Assertions.ts b/packages/builders/src/messages/embed/Assertions.ts index 909575d8891b..fe2bcb308274 100644 --- a/packages/builders/src/messages/embed/Assertions.ts +++ b/packages/builders/src/messages/embed/Assertions.ts @@ -1,6 +1,6 @@ import { s } from '@sapphire/shapeshift'; import type { APIEmbedField } from 'discord-api-types/v10'; -import { isValidationEnabled } from '../../util/validation'; +import { isValidationEnabled } from '../../util/validation.js'; export const fieldNamePredicate = s.string .lengthGreaterThanOrEqual(1) @@ -9,7 +9,7 @@ export const fieldNamePredicate = s.string export const fieldValuePredicate = s.string .lengthGreaterThanOrEqual(1) - .lengthLessThanOrEqual(1024) + .lengthLessThanOrEqual(1_024) .setValidationEnabled(isValidationEnabled); export const fieldInlinePredicate = s.boolean.optional; @@ -64,12 +64,12 @@ export const colorPredicate = s.number.int export const descriptionPredicate = s.string .lengthGreaterThanOrEqual(1) - .lengthLessThanOrEqual(4096) + .lengthLessThanOrEqual(4_096) .nullable.setValidationEnabled(isValidationEnabled); export const footerTextPredicate = s.string .lengthGreaterThanOrEqual(1) - .lengthLessThanOrEqual(2048) + .lengthLessThanOrEqual(2_048) .nullable.setValidationEnabled(isValidationEnabled); export const embedFooterPredicate = s diff --git a/packages/builders/src/messages/embed/Embed.ts b/packages/builders/src/messages/embed/Embed.ts index eece585db33e..c6ad12187891 100644 --- a/packages/builders/src/messages/embed/Embed.ts +++ b/packages/builders/src/messages/embed/Embed.ts @@ -1,4 +1,5 @@ import type { APIEmbed, APIEmbedAuthor, APIEmbedField, APIEmbedFooter, APIEmbedImage } from 'discord-api-types/v10'; +import { normalizeArray, type RestOrArray } from '../../util/normalizeArray.js'; import { colorPredicate, descriptionPredicate, @@ -10,8 +11,7 @@ import { titlePredicate, urlPredicate, validateFieldLength, -} from './Assertions'; -import { normalizeArray, type RestOrArray } from '../../util/normalizeArray'; +} from './Assertions.js'; export type RGBTuple = [red: number, green: number, blue: number]; @@ -26,11 +26,11 @@ export interface IconData { proxyIconURL?: string; } -export type EmbedAuthorData = Omit & IconData; +export type EmbedAuthorData = IconData & Omit; export type EmbedAuthorOptions = Omit; -export type EmbedFooterData = Omit & IconData; +export type EmbedFooterData = IconData & Omit; export type EmbedFooterOptions = Omit; @@ -57,7 +57,6 @@ export class EmbedBuilder { * @remarks * This method accepts either an array of fields or a variable number of field parameters. * The maximum amount of fields that can be added is 25. - * * @example * Using an array * ```ts @@ -65,7 +64,6 @@ export class EmbedBuilder { * const embed = new EmbedBuilder() * .addFields(fields); * ``` - * * @example * Using rest parameters (variadic) * ```ts @@ -75,10 +73,10 @@ export class EmbedBuilder { * { name: 'Field 2', value: 'Value 2' }, * ); * ``` - * * @param fields - The fields to add */ public addFields(...fields: RestOrArray): this { + // eslint-disable-next-line no-param-reassign fields = normalizeArray(fields); // Ensure adding these fields won't exceed the 25 field limit validateFieldLength(fields.length, this.data.fields); @@ -100,26 +98,22 @@ export class EmbedBuilder { * The maximum amount of fields that can be added is 25. * * It's useful for modifying and adjusting order of the already-existing fields of an embed. - * * @example * Remove the first field * ```ts * embed.spliceFields(0, 1); * ``` - * * @example * Remove the first n fields * ```ts * const n = 4 * embed.spliceFields(0, n); * ``` - * * @example * Remove the last field * ```ts * embed.spliceFields(-1, 1); * ``` - * * @param index - The index to start at * @param deleteCount - The number of fields to remove * @param fields - The replacing field objects @@ -143,7 +137,6 @@ export class EmbedBuilder { * it splices the entire array of fields, replacing them with the provided fields. * * You can set a maximum of 25 fields. - * * @param fields - The fields to set */ public setFields(...fields: RestOrArray) { @@ -175,7 +168,7 @@ export class EmbedBuilder { * * @param color - The color of the embed */ - public setColor(color: number | RGBTuple | null): this { + public setColor(color: RGBTuple | number | null): this { // Data assertions colorPredicate.parse(color); @@ -184,6 +177,7 @@ export class EmbedBuilder { this.data.color = (red << 16) + (green << 8) + blue; return this; } + this.data.color = color ?? undefined; return this; } @@ -250,7 +244,7 @@ export class EmbedBuilder { * * @param timestamp - The timestamp or date */ - public setTimestamp(timestamp: number | Date | null = Date.now()): this { + public setTimestamp(timestamp: Date | number | null = Date.now()): this { // Data assertions timestampPredicate.parse(timestamp); diff --git a/packages/builders/src/messages/formatters.ts b/packages/builders/src/messages/formatters.ts index b2822c87730f..9396d36cfbba 100644 --- a/packages/builders/src/messages/formatters.ts +++ b/packages/builders/src/messages/formatters.ts @@ -1,4 +1,4 @@ -import type { URL } from 'url'; +import type { URL } from 'node:url'; import type { Snowflake } from 'discord-api-types/globals'; /** @@ -95,7 +95,7 @@ export function hideLinkEmbed(url: C): `<${C}>`; * @param url - The URL to wrap */ export function hideLinkEmbed(url: URL): `<${string}>`; -export function hideLinkEmbed(url: string | URL) { +export function hideLinkEmbed(url: URL | string) { // eslint-disable-next-line @typescript-eslint/restrict-template-expressions return `<${url}>`; } @@ -141,7 +141,7 @@ export function hyperlink( url: U, title: T, ): `[${C}](${U} "${T}")`; -export function hyperlink(content: string, url: string | URL, title?: string) { +export function hyperlink(content: string, url: URL | string, title?: string) { // eslint-disable-next-line @typescript-eslint/restrict-template-expressions return title ? `[${content}](${url} "${title}")` : `[${content}](${url})`; } @@ -203,7 +203,7 @@ export function formatEmoji(emojiId: C, animated?: true): ` * @param emojiId - The emoji ID to format * @param animated - Whether the emoji is animated or not. Defaults to `false` */ -export function formatEmoji(emojiId: C, animated = false): `` | `<:_:${C}>` { +export function formatEmoji(emojiId: C, animated = false): `<:_:${C}>` | `` { return `<${animated ? 'a' : ''}:_:${emojiId}>`; } @@ -293,9 +293,10 @@ export function time(seconds: C): ``; * @param style - The style to use */ export function time(seconds: C, style: S): ``; -export function time(timeOrSeconds?: number | Date, style?: TimestampStylesString): string { +export function time(timeOrSeconds?: Date | number, style?: TimestampStylesString): string { if (typeof timeOrSeconds !== 'number') { - timeOrSeconds = Math.floor((timeOrSeconds?.getTime() ?? Date.now()) / 1000); + // eslint-disable-next-line no-param-reassign + timeOrSeconds = Math.floor((timeOrSeconds?.getTime() ?? Date.now()) / 1_000); } return typeof style === 'string' ? `` : ``; diff --git a/packages/builders/src/util/equatable.ts b/packages/builders/src/util/equatable.ts index 254853f54d8c..a308e6b8a967 100644 --- a/packages/builders/src/util/equatable.ts +++ b/packages/builders/src/util/equatable.ts @@ -8,11 +8,12 @@ export interface Equatable { /** * Whether or not this is equal to another structure */ - equals: (other: T) => boolean; + equals(other: T): boolean; } /** * Indicates if an object is equatable or not. + * * @param maybeEquatable - The object to check against */ export function isEquatable(maybeEquatable: unknown): maybeEquatable is Equatable { diff --git a/packages/builders/src/util/jsonEncodable.ts b/packages/builders/src/util/jsonEncodable.ts index 432719be8ebb..f32eb2f7817a 100644 --- a/packages/builders/src/util/jsonEncodable.ts +++ b/packages/builders/src/util/jsonEncodable.ts @@ -7,11 +7,12 @@ export interface JSONEncodable { /** * Transforms this object to its JSON format */ - toJSON: () => T; + toJSON(): T; } /** * Indicates if an object is encodable or not. + * * @param maybeEncodable - The object to check against */ export function isJSONEncodable(maybeEncodable: unknown): maybeEncodable is JSONEncodable { diff --git a/packages/collection/__tests__/collection.test.ts b/packages/collection/__tests__/collection.test.ts index f0fd3746d744..1ea89164f8b4 100644 --- a/packages/collection/__tests__/collection.test.ts +++ b/packages/collection/__tests__/collection.test.ts @@ -1,5 +1,7 @@ +/* eslint-disable unicorn/no-array-method-this-argument */ +/* eslint-disable id-length */ import { describe, test, expect } from 'vitest'; -import { Collection } from '../src'; +import { Collection } from '../src/index.js'; type TestCollection = Collection; @@ -131,9 +133,9 @@ describe('each() tests', () => { const coll = createTestCollection(); test('throws if fn is not a function', () => { - // @ts-expect-error + // @ts-expect-error: invalid function expectInvalidFunctionError(() => coll.each()); - // @ts-expect-error + // @ts-expect-error: invalid function expectInvalidFunctionError(() => coll.each(123), 123); }); @@ -152,7 +154,7 @@ describe('each() tests', () => { describe('ensure() tests', () => { test('throws if defaultValueGenerator is not a function', () => { const coll = createTestCollection(); - // @ts-expect-error + // @ts-expect-error: invalid function expectInvalidFunctionError(() => coll.ensure('d', 'abc'), 'abc'); }); @@ -176,7 +178,7 @@ describe('equals() tests', () => { const coll2 = createTestCollection(); test('returns false if no collection is passed', () => { - // @ts-expect-error + // @ts-expect-error: invalid function expect(coll1.equals()).toBeFalsy(); }); @@ -198,9 +200,9 @@ describe('every() tests', () => { const coll = createTestCollection(); test('throws if fn is not a function', () => { - // @ts-expect-error + // @ts-expect-error: invalid function expectInvalidFunctionError(() => coll.every()); - // @ts-expect-error + // @ts-expect-error: invalid function expectInvalidFunctionError(() => coll.every(123), 123); }); @@ -224,9 +226,9 @@ describe('filter() tests', () => { const coll = createTestCollection(); test('throws if fn is not a function', () => { - // @ts-expect-error + // @ts-expect-error: invalid function expectInvalidFunctionError(() => coll.filter()); - // @ts-expect-error + // @ts-expect-error: invalid function expectInvalidFunctionError(() => coll.filter(123), 123); }); @@ -251,9 +253,9 @@ describe('find() tests', () => { const coll = createTestCollection(); test('throws if fn is not a function', () => { - // @ts-expect-error + // @ts-expect-error: invalid function expectInvalidFunctionError(() => createCollection().find()); - // @ts-expect-error + // @ts-expect-error: invalid function expectInvalidFunctionError(() => createCollection().find(123), 123); }); @@ -275,9 +277,9 @@ describe('findKey() tests', () => { const coll = createTestCollection(); test('throws if fn is not a function', () => { - // @ts-expect-error + // @ts-expect-error: invalid function expectInvalidFunctionError(() => coll.findKey()); - // @ts-expect-error + // @ts-expect-error: invalid function expectInvalidFunctionError(() => coll.findKey(123), 123); }); @@ -506,9 +508,9 @@ describe('map() tests', () => { const coll = createTestCollection(); test('throws if fn is not a function', () => { - // @ts-expect-error + // @ts-expect-error: invalid function expectInvalidFunctionError(() => coll.map()); - // @ts-expect-error + // @ts-expect-error: invalid function expectInvalidFunctionError(() => coll.map(123), 123); }); @@ -529,9 +531,9 @@ describe('mapValues() tests', () => { const coll = createTestCollection(); test('throws if fn is not a function', () => { - // @ts-expect-error + // @ts-expect-error: invalid function expectInvalidFunctionError(() => coll.mapValues()); - // @ts-expect-error + // @ts-expect-error: invalid function expectInvalidFunctionError(() => coll.mapValues(123), 123); }); @@ -606,9 +608,9 @@ describe('partition() tests', () => { const coll = createTestCollection(); test('throws if fn is not a function', () => { - // @ts-expect-error + // @ts-expect-error: invalid function expectInvalidFunctionError(() => coll.partition()); - // @ts-expect-error + // @ts-expect-error: invalid function expectInvalidFunctionError(() => coll.partition(123), 123); }); @@ -690,9 +692,9 @@ describe('reduce() tests', () => { const coll = createTestCollection(); test('throws if fn is not a function', () => { - // @ts-expect-error + // @ts-expect-error: invalid function expectInvalidFunctionError(() => coll.reduce()); - // @ts-expect-error + // @ts-expect-error: invalid function expectInvalidFunctionError(() => coll.reduce(123), 123); }); @@ -729,19 +731,15 @@ describe('some() tests', () => { const coll = createTestCollection(); test('throws if fn is not a function', () => { - // @ts-expect-error + // @ts-expect-error: invalid function expectInvalidFunctionError(() => coll.some()); - // @ts-expect-error + // @ts-expect-error: invalid function expectInvalidFunctionError(() => coll.some(123), 123); }); test('returns false if no items pass the predicate', () => { expect(coll.some((v) => v > 3)).toBeFalsy(); }); - - test('returns true if at least one item passes the predicate', () => { - expect(coll.some((x) => x === 2)).toBeTruthy(); - }); }); describe('sort() tests', () => { @@ -777,9 +775,9 @@ describe('sweep() test', () => { const coll = createTestCollection(); test('throws if fn is not a function', () => { - // @ts-expect-error + // @ts-expect-error: invalid function expectInvalidFunctionError(() => coll.sweep()); - // @ts-expect-error + // @ts-expect-error: invalid function expectInvalidFunctionError(() => coll.sweep(123), 123); }); @@ -804,9 +802,9 @@ describe('tap() tests', () => { const coll = createTestCollection(); test('throws if fn is not a function', () => { - // @ts-expect-error + // @ts-expect-error: invalid function expectInvalidFunctionError(() => coll.tap()); - // @ts-expect-error + // @ts-expect-error: invalid function expectInvalidFunctionError(() => coll.tap(123), 123); }); diff --git a/packages/collection/package.json b/packages/collection/package.json index 611936e2477d..7a7e2ff925f1 100644 --- a/packages/collection/package.json +++ b/packages/collection/package.json @@ -54,16 +54,10 @@ "@favware/cliff-jumper": "^1.8.7", "@microsoft/api-extractor": "^7.29.5", "@types/node": "^16.11.56", - "@typescript-eslint/eslint-plugin": "^5.36.1", - "@typescript-eslint/parser": "^5.36.1", "@vitest/coverage-c8": "^0.22.1", "downlevel-dts": "^0.10.1", "eslint": "^8.23.0", - "eslint-config-marine": "^9.4.1", - "eslint-config-prettier": "^8.5.0", - "eslint-import-resolver-typescript": "^3.5.0", - "eslint-plugin-import": "^2.26.0", - "eslint-plugin-tsdoc": "^0.2.16", + "eslint-config-neon": "^0.1.23", "prettier": "^2.7.1", "rollup-plugin-typescript2": "^0.33.0", "typescript": "^4.8.2", diff --git a/packages/collection/src/collection.ts b/packages/collection/src/collection.ts index ea2fb02d6eb6..edd837bebe2d 100644 --- a/packages/collection/src/collection.ts +++ b/packages/collection/src/collection.ts @@ -1,10 +1,12 @@ +/* eslint-disable id-length */ +/* eslint-disable no-param-reassign */ /* eslint-disable @typescript-eslint/restrict-template-expressions */ /** * @internal */ export interface CollectionConstructor { new (): Collection; - new (entries?: ReadonlyArray | null): Collection; + new (entries?: readonly (readonly [K, V])[] | null): Collection; new (iterable: Iterable): Collection; readonly prototype: Collection; readonly [Symbol.species]: CollectionConstructor; @@ -13,8 +15,11 @@ export interface CollectionConstructor { /** * Represents an immutable version of a collection */ -export type ReadonlyCollection = ReadonlyMap & - Omit, 'forEach' | 'ensure' | 'reverse' | 'sweep' | 'sort' | 'get' | 'set' | 'delete'>; +export type ReadonlyCollection = Omit< + Collection, + 'delete' | 'ensure' | 'forEach' | 'get' | 'reverse' | 'set' | 'sort' | 'sweep' +> & + ReadonlyMap; /** * Separate interface for the constructor so that emitted js does not have a constructor that overwrites itself @@ -38,7 +43,6 @@ export class Collection extends Map { * * @param key - The key to get if it exists, or set otherwise * @param defaultValueGenerator - A function that generates the default value - * * @example * ```ts * collection.ensure(guildId, () => defaultGuildConfig); @@ -56,7 +60,6 @@ export class Collection extends Map { * Checks if all of the elements exist in the collection. * * @param keys - The keys of the elements to check for - * * @returns `true` if all of the elements exist, `false` if at least one does not exist. */ public hasAll(...keys: K[]) { @@ -67,7 +70,6 @@ export class Collection extends Map { * Checks if any of the elements exist in the collection. * * @param keys - The keys of the elements to check for - * * @returns `true` if any of the elements exist, `false` if none exist. */ public hasAny(...keys: K[]) { @@ -78,7 +80,6 @@ export class Collection extends Map { * Obtains the first value(s) in this collection. * * @param amount - Amount of values to obtain from the beginning - * * @returns A single value if no amount is provided or an array of values, starting from the end if amount is negative */ public first(): V | undefined; @@ -97,7 +98,6 @@ export class Collection extends Map { * Obtains the first key(s) in this collection. * * @param amount - Amount of keys to obtain from the beginning - * * @returns A single key if no amount is provided or an array of keys, starting from the end if * amount is negative */ @@ -117,7 +117,6 @@ export class Collection extends Map { * Obtains the last value(s) in this collection. * * @param amount - Amount of values to obtain from the end - * * @returns A single value if no amount is provided or an array of values, starting from the start if * amount is negative */ @@ -135,7 +134,6 @@ export class Collection extends Map { * Obtains the last key(s) in this collection. * * @param amount - Amount of keys to obtain from the end - * * @returns A single key if no amount is provided or an array of keys, starting from the start if * amount is negative */ @@ -179,7 +177,6 @@ export class Collection extends Map { * Obtains unique random value(s) from this collection. * * @param amount - Amount of values to obtain randomly - * * @returns A single value if no amount is provided or an array of values */ public random(): V | undefined; @@ -198,7 +195,6 @@ export class Collection extends Map { * Obtains unique random key(s) from this collection. * * @param amount - Amount of keys to obtain randomly - * * @returns A single key if no amount is provided or an array */ public randomKey(): K | undefined; @@ -233,7 +229,6 @@ export class Collection extends Map { * * @param fn - The function to test with (should return boolean) * @param thisArg - Value to use as `this` when executing function - * * @example * ```ts * collection.find(user => user.username === 'Bob'); @@ -252,6 +247,7 @@ export class Collection extends Map { for (const [key, val] of this) { if (fn(val, key, this)) return val; } + return undefined; } @@ -262,7 +258,6 @@ export class Collection extends Map { * * @param fn - The function to test with (should return boolean) * @param thisArg - Value to use as `this` when executing function - * * @example * ```ts * collection.findKey(user => user.username === 'Bob'); @@ -281,6 +276,7 @@ export class Collection extends Map { for (const [key, val] of this) { if (fn(val, key, this)) return key; } + return undefined; } @@ -289,7 +285,6 @@ export class Collection extends Map { * * @param fn - Function used to test (should return a boolean) * @param thisArg - Value to use as `this` when executing function - * * @returns The number of removed entries */ public sweep(fn: (value: V, key: K, collection: this) => boolean): number; @@ -301,6 +296,7 @@ export class Collection extends Map { for (const [key, val] of this) { if (fn(val, key, this)) this.delete(key); } + return previousSize - this.size; } @@ -311,7 +307,6 @@ export class Collection extends Map { * * @param fn - The function to test with (should return boolean) * @param thisArg - Value to use as `this` when executing function - * * @example * ```ts * collection.filter(user => user.username === 'Bob'); @@ -336,6 +331,7 @@ export class Collection extends Map { for (const [key, val] of this) { if (fn(val, key, this)) results.set(key, val); } + return results; } @@ -345,7 +341,6 @@ export class Collection extends Map { * * @param fn - Function used to test (should return a boolean) * @param thisArg - Value to use as `this` when executing function - * * @example * ```ts * const [big, small] = collection.partition(guild => guild.memberCount > 250); @@ -387,6 +382,7 @@ export class Collection extends Map { results[1].set(key, val); } } + return results; } @@ -396,7 +392,6 @@ export class Collection extends Map { * * @param fn - Function that produces a new Collection * @param thisArg - Value to use as `this` when executing function - * * @example * ```ts * collection.flatMap(guild => guild.members.cache); @@ -408,6 +403,7 @@ export class Collection extends Map { thisArg: This, ): Collection; public flatMap(fn: (value: V, key: K, collection: this) => Collection, thisArg?: unknown): Collection { + // eslint-disable-next-line unicorn/no-array-method-this-argument const collections = this.map(fn, thisArg); return new this.constructor[Symbol.species]().concat(...collections); } @@ -418,7 +414,6 @@ export class Collection extends Map { * * @param fn - Function that produces an element of the new array, taking three arguments * @param thisArg - Value to use as `this` when executing function - * * @example * ```ts * collection.map(user => user.tag); @@ -444,7 +439,6 @@ export class Collection extends Map { * * @param fn - Function that produces an element of the new collection, taking three arguments * @param thisArg - Value to use as `this` when executing function - * * @example * ```ts * collection.mapValues(user => user.tag); @@ -466,7 +460,6 @@ export class Collection extends Map { * * @param fn - Function used to test (should return a boolean) * @param thisArg - Value to use as `this` when executing function - * * @example * ```ts * collection.some(user => user.discriminator === '0000'); @@ -480,6 +473,7 @@ export class Collection extends Map { for (const [key, val] of this) { if (fn(val, key, this)) return true; } + return false; } @@ -489,7 +483,6 @@ export class Collection extends Map { * * @param fn - Function used to test (should return a boolean) * @param thisArg - Value to use as `this` when executing function - * * @example * ```ts * collection.every(user => !user.bot); @@ -513,6 +506,7 @@ export class Collection extends Map { for (const [key, val] of this) { if (!fn(val, key, this)) return false; } + return true; } @@ -523,7 +517,6 @@ export class Collection extends Map { * @param fn - Function used to reduce, taking four arguments; `accumulator`, `currentValue`, `currentKey`, * and `collection` * @param initialValue - Starting value for the accumulator - * * @example * ```ts * collection.reduce((acc, guild) => acc + guild.memberCount, 0); @@ -538,6 +531,7 @@ export class Collection extends Map { for (const [key, val] of this) accumulator = fn(accumulator, val, key, this); return accumulator; } + let first = true; for (const [key, val] of this) { if (first) { @@ -545,6 +539,7 @@ export class Collection extends Map { first = false; continue; } + accumulator = fn(accumulator, val, key, this); } @@ -563,7 +558,6 @@ export class Collection extends Map { * * @param fn - Function to execute for each element * @param thisArg - Value to use as `this` when executing function - * * @example * ```ts * collection @@ -576,6 +570,7 @@ export class Collection extends Map { public each(fn: (this: T, value: V, key: K, collection: this) => void, thisArg: T): this; public each(fn: (value: V, key: K, collection: this) => void, thisArg?: unknown): this { if (typeof fn !== 'function') throw new TypeError(`${fn} is not a function`); + // eslint-disable-next-line unicorn/no-array-method-this-argument this.forEach(fn as (value: V, key: K, map: Map) => void, thisArg); return this; } @@ -585,7 +580,6 @@ export class Collection extends Map { * * @param fn - Function to execute * @param thisArg - Value to use as `this` when executing function - * * @example * ```ts * collection @@ -619,7 +613,6 @@ export class Collection extends Map { * Combines this collection with others into a new collection. None of the source collections are modified. * * @param collections - Collections to merge - * * @example * ```ts * const newColl = someColl.concat(someOtherColl, anotherColl, ohBoyAColl); @@ -630,6 +623,7 @@ export class Collection extends Map { for (const coll of collections) { for (const [key, val] of coll) newColl.set(key, val); } + return newColl; } @@ -639,7 +633,6 @@ export class Collection extends Map { * the collections may be different objects, but contain the same data. * * @param collection - Collection to compare with - * * @returns Whether the collections have identical contents */ public equals(collection: ReadonlyCollection) { @@ -652,6 +645,7 @@ export class Collection extends Map { return false; } } + return true; } @@ -662,7 +656,6 @@ export class Collection extends Map { * * @param compareFunction - Specifies a function that defines the sort order. * If omitted, the collection is sorted according to each character's Unicode code point value, according to the string conversion of each element. - * * @example * ```ts * collection.sort((userA, userB) => userA.createdTimestamp - userB.createdTimestamp); @@ -679,6 +672,7 @@ export class Collection extends Map { for (const [k, v] of entries) { super.set(k, v); } + return this; } @@ -694,6 +688,7 @@ export class Collection extends Map { coll.set(k, v); } } + return coll; } @@ -702,24 +697,26 @@ export class Collection extends Map { * * @param other - The other Collection to filter against */ - public difference(other: ReadonlyCollection): Collection { - const coll = new this.constructor[Symbol.species](); + public difference(other: ReadonlyCollection): Collection { + const coll = new this.constructor[Symbol.species](); for (const [k, v] of other) { if (!this.has(k)) coll.set(k, v); } + for (const [k, v] of this) { if (!other.has(k)) coll.set(k, v); } + return coll; } /** * Merges two Collections together into a new Collection. + * * @param other - The other Collection to merge with * @param whenInSelf - Function getting the result if the entry only exists in this Collection * @param whenInOther - Function getting the result if the entry only exists in the other Collection * @param whenInBoth - Function getting the result if the entry exists in both Collections - * * @example * ```ts * // Sums up the entries in two collections. @@ -730,7 +727,6 @@ export class Collection extends Map { * (x, y) => ({ keep: true, value: x + y }), * ); * ``` - * * @example * ```ts * // Intersects two collections in a left-biased manner. @@ -765,6 +761,7 @@ export class Collection extends Map { if (r.keep) coll.set(k, r.value); } } + return coll; } @@ -776,7 +773,6 @@ export class Collection extends Map { * @param compareFunction - Specifies a function that defines the sort order. * If omitted, the collection is sorted according to each character's Unicode code point value, * according to the string conversion of each element. - * * @example * ```ts * collection.sorted((userA, userB) => userA.createdTimestamp - userB.createdTimestamp); @@ -800,7 +796,6 @@ export class Collection extends Map { * * @param entries - The list of entries * @param combine - Function to combine an existing entry with a new one - * * @example * ```ts * Collection.combineEntries([["a", 1], ["b", 2], ["a", 2]], (x, y) => x + y); @@ -819,6 +814,7 @@ export class Collection extends Map { coll.set(k, v); } } + return coll; } } @@ -826,7 +822,7 @@ export class Collection extends Map { /** * @internal */ -export type Keep = { keep: true; value: V } | { keep: false }; +export type Keep = { keep: false } | { keep: true; value: V }; /** * @internal diff --git a/packages/collection/src/index.ts b/packages/collection/src/index.ts index 989b92da864d..da5b1e4674fc 100644 --- a/packages/collection/src/index.ts +++ b/packages/collection/src/index.ts @@ -1 +1 @@ -export * from './collection'; +export * from './collection.js'; diff --git a/packages/docgen/package.json b/packages/docgen/package.json index 615c0fc3d7ac..f61813daa84b 100644 --- a/packages/docgen/package.json +++ b/packages/docgen/package.json @@ -51,13 +51,8 @@ "@favware/cliff-jumper": "^1.8.7", "@types/jsdoc-to-markdown": "^7.0.3", "@types/node": "^16.11.56", - "@typescript-eslint/eslint-plugin": "^5.36.1", - "@typescript-eslint/parser": "^5.36.1", "eslint": "^8.23.0", - "eslint-config-marine": "^9.4.1", - "eslint-config-prettier": "^8.5.0", - "eslint-import-resolver-typescript": "^3.5.0", - "eslint-plugin-import": "^2.26.0", + "eslint-config-neon": "^0.1.23", "prettier": "^2.7.1", "rollup-plugin-typescript2": "^0.33.0", "typescript": "^4.8.2", diff --git a/packages/docgen/src/cli.ts b/packages/docgen/src/cli.ts index 0e00e33f19d9..9ecfeed3b519 100644 --- a/packages/docgen/src/cli.ts +++ b/packages/docgen/src/cli.ts @@ -1,13 +1,15 @@ #!/usr/bin/env node +/* eslint-disable n/shebang */ +import process from 'node:process'; import { createCommand } from 'commander'; -import { build } from './index.js'; import packageFile from '../package.json'; +import { build } from './index.js'; export interface CLIOptions { - input: string[]; custom: string; - root: string; + input: string[]; output: string; + root: string; typescript: boolean; } diff --git a/packages/docgen/src/documentation.ts b/packages/docgen/src/documentation.ts index fbfeaf41c46e..7b4830064062 100644 --- a/packages/docgen/src/documentation.ts +++ b/packages/docgen/src/documentation.ts @@ -1,5 +1,6 @@ import { dirname, join, relative } from 'node:path'; import type { DeclarationReflection } from 'typedoc'; +import packageFile from '../package.json'; import type { ChildTypes, Class, Config, CustomDocs, RootTypes } from './interfaces/index.js'; import { DocumentedClass } from './types/class.js'; import { DocumentedConstructor } from './types/constructor.js'; @@ -9,7 +10,6 @@ import { DocumentedInterface } from './types/interface.js'; import { DocumentedMember } from './types/member.js'; import { DocumentedMethod } from './types/method.js'; import { DocumentedTypeDef } from './types/typedef.js'; -import packageFile from '../package.json'; export class Documentation { public readonly classes = new Map(); @@ -23,7 +23,7 @@ export class Documentation { public readonly externals = new Map(); public constructor( - data: RootTypes[] | DeclarationReflection[], + data: DeclarationReflection[] | RootTypes[], private readonly config: Config, private readonly custom?: Record, ) { @@ -37,6 +37,7 @@ export class Documentation { if (item.children) { this.parse(item.children, item); } + break; } @@ -52,6 +53,7 @@ export class Documentation { if (item.children) { this.parse(item.children, item); } + break; default: @@ -60,37 +62,43 @@ export class Documentation { } } else { let items = data as RootTypes[]; - items = items.filter((i) => !i.ignore); + items = items.filter((item) => !item.ignore); for (const item of items) { switch (item.kind) { case 'class': { this.classes.set(item.name, new DocumentedClass(item, config)); - items = items.filter((i) => i.longname !== item.longname || i.kind !== item.kind); + items = items.filter((otherItem) => otherItem.longname !== item.longname || otherItem.kind !== item.kind); break; } + case 'function': { if (item.scope === 'global' || !item.memberof) { this.functions.set(item.name, new DocumentedMethod(item, config)); - items = items.filter((i) => i.longname !== item.longname); + items = items.filter((otherItem) => otherItem.longname !== item.longname); } + break; } + case 'interface': { this.interfaces.set(item.name, new DocumentedInterface(item as unknown as Class, config)); - items = items.filter((i) => i.longname !== item.longname); + items = items.filter((otherItem) => otherItem.longname !== item.longname); break; } + case 'typedef': { this.typedefs.set(item.name, new DocumentedTypeDef(item, config)); - items = items.filter((i) => i.longname !== item.longname); + items = items.filter((otherItem) => otherItem.longname !== item.longname); break; } + case 'external': { this.externals.set(item.name, new DocumentedExternal(item, config)); - items = items.filter((i) => i.longname !== item.longname); + items = items.filter((otherItem) => otherItem.longname !== item.longname); break; } + default: break; } @@ -100,39 +108,43 @@ export class Documentation { } } - public parse(items: ChildTypes[] | DeclarationReflection[], p?: DeclarationReflection) { + public parse(items: ChildTypes[] | DeclarationReflection[], prop?: DeclarationReflection) { if (this.config.typescript) { const it = items as DeclarationReflection[]; for (const member of it) { - let item: DocumentedMethod | DocumentedConstructor | DocumentedMember | DocumentedEvent | null = null; + let item: DocumentedConstructor | DocumentedEvent | DocumentedMember | DocumentedMethod | null = null; switch (member.kindString) { case 'Constructor': { item = new DocumentedConstructor(member, this.config); break; } + case 'Method': { - const event = p?.groups?.find((group) => group.title === 'Events'); + const event = prop?.groups?.find((group) => group.title === 'Events'); // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition if ((event?.children as unknown as number[])?.includes(member.id)) { item = new DocumentedEvent(member, this.config); break; } + item = new DocumentedMethod(member, this.config); break; } + case 'Property': { item = new DocumentedMember(member, this.config); break; } + default: { // eslint-disable-next-line @typescript-eslint/restrict-template-expressions console.warn(`- Unknown documentation kind "${member.kindString}" - \n${JSON.stringify(member)}\n`); } } - const parent = this.classes.get(p!.name) ?? this.interfaces.get(p!.name); + const parent = this.classes.get(prop!.name) ?? this.interfaces.get(prop!.name); if (parent) { if (item) { parent.add(item); @@ -141,6 +153,7 @@ export class Documentation { `- Documentation item could not be constructed for "${member.name}" - \n${JSON.stringify(member)}\n`, ); } + continue; } @@ -155,9 +168,10 @@ export class Documentation { path: dirname(member.sources?.[0]?.fileName ?? ''), }; - if (p!.name) { - info.push(`member of "${p!.name}"`); + if (prop!.name) { + info.push(`member of "${prop!.name}"`); } + if (meta) { info.push( `${relative(this.config.root, join(meta.path, meta.file ?? ''))}${meta.line ? `:${meta.line}` : ''}`, @@ -173,27 +187,31 @@ export class Documentation { const it = items as ChildTypes[]; for (const member of it) { - let item: DocumentedMethod | DocumentedConstructor | DocumentedMember | DocumentedEvent | null = null; + let item: DocumentedConstructor | DocumentedEvent | DocumentedMember | DocumentedMethod | null = null; switch (member.kind) { case 'constructor': { item = new DocumentedConstructor(member, this.config); break; } + case 'function': { item = new DocumentedMethod(member, this.config); break; } + case 'member': { item = new DocumentedMember(member, this.config); break; } + case 'event': { item = new DocumentedEvent(member, this.config); break; } + default: { - // @ts-expect-error + // @ts-expect-error: This is a valid case // eslint-disable-next-line @typescript-eslint/restrict-template-expressions console.warn(`- Unknown documentation kind "${member.kind}" - \n${JSON.stringify(member)}\n`); } @@ -208,12 +226,13 @@ export class Documentation { `- Documentation item could not be constructed for "${member.name}" - \n${JSON.stringify(member)}\n`, ); } + continue; } const info = []; const name = (member.name || item?.data.name) ?? 'UNKNOWN'; - // @ts-expect-error + // @ts-expect-error: Typescript can't infer this // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unnecessary-condition const memberof = member.memberof ?? item?.data?.memberof; const meta = @@ -224,6 +243,7 @@ export class Documentation { if (memberof) { info.push(`member of "${memberof as string}"`); } + if (meta) { info.push(`${relative(this.config.root, join(meta.path, meta.file))}${meta.line ? `:${meta.line}` : ''}`); } @@ -243,16 +263,14 @@ export class Documentation { format: Documentation.FORMAT_VERSION, date: Date.now(), }, - classes: [...this.classes.values()].map((c) => c.serialize()), - functions: [...this.functions.values()].map((f) => f.serialize()), - interfaces: [...this.interfaces.values()].map((i) => i.serialize()), - typedefs: [...this.typedefs.values()].map((t) => t.serialize()), - externals: [...this.externals.values()].map((e) => e.serialize()), + classes: [...this.classes.values()].map((_class) => _class.serialize()), + functions: [...this.functions.values()].map((_function) => _function.serialize()), + interfaces: [...this.interfaces.values()].map((_interface) => _interface.serialize()), + typedefs: [...this.typedefs.values()].map((_typedef) => _typedef.serialize()), + externals: [...this.externals.values()].map((_external) => _external.serialize()), custom: this.custom, }; } - public static get FORMAT_VERSION() { - return 30; - } + public static readonly FORMAT_VERSION = 30; } diff --git a/packages/docgen/src/index.ts b/packages/docgen/src/index.ts index 195c4b88045f..de35a5009f7f 100644 --- a/packages/docgen/src/index.ts +++ b/packages/docgen/src/index.ts @@ -3,22 +3,22 @@ import { dirname, join, extname, basename, relative } from 'node:path'; import jsdoc2md from 'jsdoc-to-markdown'; import { type DeclarationReflection, Application, TSConfigReader } from 'typedoc'; import type { CLIOptions } from './cli'; -import { Documentation } from './documentation'; +import { Documentation } from './documentation.js'; import type { RootTypes, ChildTypes, CustomDocs } from './interfaces'; interface CustomFiles { - id?: string; - name: string; - path?: string; files: { id?: string; name: string; path: string; }[]; + id?: string; + name: string; + path?: string; } export function build({ input, custom: customDocs, root, output, typescript }: CLIOptions) { - let data: (RootTypes & ChildTypes)[] | DeclarationReflection[] = []; + let data: (ChildTypes & RootTypes)[] | DeclarationReflection[] = []; if (typescript) { console.log('Parsing Typescript in source files...'); const app = new Application(); @@ -26,13 +26,14 @@ export function build({ input, custom: customDocs, root, output, typescript }: C app.bootstrap({ entryPoints: input }); const project = app.convert(); if (project) { - // @ts-expect-error + // @ts-expect-error: Types are lost with this method data = app.serializer.toObject(project).children!; console.log(`${data.length} items parsed.`); } } else { console.log('Parsing JSDocs in source files...'); - data = jsdoc2md.getTemplateDataSync({ files: input }) as (RootTypes & ChildTypes)[]; + // eslint-disable-next-line n/no-sync + data = jsdoc2md.getTemplateDataSync({ files: input }) as (ChildTypes & RootTypes)[]; console.log(`${data.length} JSDoc items parsed.`); } @@ -40,7 +41,7 @@ export function build({ input, custom: customDocs, root, output, typescript }: C if (customDocs) { console.log('Loading custom docs files...'); const customDir = dirname(customDocs); - const file = readFileSync(customDocs, 'utf-8'); + const file = readFileSync(customDocs, 'utf8'); const data = JSON.parse(file) as CustomFiles[]; for (const category of data) { @@ -51,23 +52,23 @@ export function build({ input, custom: customDocs, root, output, typescript }: C files: {}, }; - for (const f of category.files) { - const fileRootPath = join(dir, f.path); - const extension = extname(f.path); - const fileId = f.id ?? basename(f.path, extension); - const fileData = readFileSync(fileRootPath, 'utf-8'); + for (const file of category.files) { + const fileRootPath = join(dir, file.path); + const extension = extname(file.path); + const fileId = file.id ?? basename(file.path, extension); + const fileData = readFileSync(fileRootPath, 'utf8'); custom[categoryId]!.files[fileId] = { - name: f.name, + name: file.name, type: extension.toLowerCase().replace(/^\./, ''), content: fileData, - path: relative(root, fileRootPath).replace(/\\/g, '/'), + path: relative(root, fileRootPath).replaceAll('\\', '/'), }; } } const fileCount = Object.keys(custom) - .map((k) => Object.keys(custom[k]!)) - .reduce((prev, c) => prev + c.length, 0); + .map((key) => Object.keys(custom[key]!)) + .reduce((prev, content) => prev + content.length, 0); const categoryCount = Object.keys(custom).length; console.log( `${fileCount} custom docs file${fileCount === 1 ? '' : 's'} in ` + @@ -82,5 +83,6 @@ export function build({ input, custom: customDocs, root, output, typescript }: C console.log(`Writing to ${output}...`); writeFileSync(output, JSON.stringify(docs.serialize())); } + console.log('Done!'); } diff --git a/packages/docgen/src/interfaces/access.type.ts b/packages/docgen/src/interfaces/access.type.ts index 29c4a4be05ef..f60aa6df5382 100644 --- a/packages/docgen/src/interfaces/access.type.ts +++ b/packages/docgen/src/interfaces/access.type.ts @@ -1 +1 @@ -export type Access = 'public' | 'private' | 'protected'; +export type Access = 'private' | 'protected' | 'public'; diff --git a/packages/docgen/src/interfaces/childTypes.type.ts b/packages/docgen/src/interfaces/childTypes.type.ts index 7c1181871bad..0f74d224f1cd 100644 --- a/packages/docgen/src/interfaces/childTypes.type.ts +++ b/packages/docgen/src/interfaces/childTypes.type.ts @@ -1,3 +1,3 @@ import type { Constructor, Event, Member, Method } from './index.js'; -export type ChildTypes = Constructor | Member | Method | Event; +export type ChildTypes = Constructor | Event | Member | Method; diff --git a/packages/docgen/src/interfaces/class.interface.ts b/packages/docgen/src/interfaces/class.interface.ts index 7ef86fe58ad6..278f85f347cc 100644 --- a/packages/docgen/src/interfaces/class.interface.ts +++ b/packages/docgen/src/interfaces/class.interface.ts @@ -1,13 +1,13 @@ import type { Access, Item, Meta, Scope } from './index.js'; export interface Class extends Item { + access?: Access; + augments?: string[]; + deprecated?: boolean | string; + implements?: string[]; kind: 'class'; + meta: Meta; scope: Scope; - implements?: string[]; - augments?: string[]; see?: string[]; - access?: Access; virtual?: boolean; - deprecated?: boolean | string; - meta: Meta; } diff --git a/packages/docgen/src/interfaces/config.interface.ts b/packages/docgen/src/interfaces/config.interface.ts index 3a72f94d1610..f73ebf8b48d5 100644 --- a/packages/docgen/src/interfaces/config.interface.ts +++ b/packages/docgen/src/interfaces/config.interface.ts @@ -1,7 +1,7 @@ export interface Config { - input: string[]; custom: string; - root: string; + input: string[]; output: string; + root: string; typescript: boolean; } diff --git a/packages/docgen/src/interfaces/constructor.interface.ts b/packages/docgen/src/interfaces/constructor.interface.ts index 2e18838b03da..da029d23d0f5 100644 --- a/packages/docgen/src/interfaces/constructor.interface.ts +++ b/packages/docgen/src/interfaces/constructor.interface.ts @@ -1,9 +1,9 @@ import type { Access, Item, Param } from './index.js'; export interface Constructor extends Item { + access?: Access; kind: 'constructor'; memberof: string; - see?: string[]; - access?: Access; params?: Param[]; + see?: string[]; } diff --git a/packages/docgen/src/interfaces/customDocs.interface.ts b/packages/docgen/src/interfaces/customDocs.interface.ts index 5ad119c8b9be..87b92a5cc266 100644 --- a/packages/docgen/src/interfaces/customDocs.interface.ts +++ b/packages/docgen/src/interfaces/customDocs.interface.ts @@ -1,12 +1,12 @@ export interface CustomDocs { - name?: string; files: Record< string, { - name?: string; - type?: string; content?: string; + name?: string; path?: string; + type?: string; } >; + name?: string; } diff --git a/packages/docgen/src/interfaces/event.interface.ts b/packages/docgen/src/interfaces/event.interface.ts index fc389b5c31fd..b0407af8e750 100644 --- a/packages/docgen/src/interfaces/event.interface.ts +++ b/packages/docgen/src/interfaces/event.interface.ts @@ -1,11 +1,11 @@ import type { Item, Meta, Param, Scope } from './index.js'; export interface Event extends Item { + deprecated?: boolean | string; kind: 'event'; - scope: Scope; memberof: string; - see?: string[]; - deprecated?: boolean | string; - params?: Param[]; meta: Meta; + params?: Param[]; + scope: Scope; + see?: string[]; } diff --git a/packages/docgen/src/interfaces/exception.interface.ts b/packages/docgen/src/interfaces/exception.interface.ts index 763bb541fadc..7de11b1ce7d0 100644 --- a/packages/docgen/src/interfaces/exception.interface.ts +++ b/packages/docgen/src/interfaces/exception.interface.ts @@ -1,7 +1,7 @@ import type { Type } from './index.js'; export interface Exception { - type: Type; - nullable?: boolean; description?: string; + nullable?: boolean; + type: Type; } diff --git a/packages/docgen/src/interfaces/external.interface.ts b/packages/docgen/src/interfaces/external.interface.ts index aef5da7fd7cb..e404dc215ed3 100644 --- a/packages/docgen/src/interfaces/external.interface.ts +++ b/packages/docgen/src/interfaces/external.interface.ts @@ -2,6 +2,6 @@ import type { Item, Meta } from './index.js'; export interface External extends Item { kind: 'external'; - see?: string[]; meta: Meta; + see?: string[]; } diff --git a/packages/docgen/src/interfaces/interface.interface.ts b/packages/docgen/src/interfaces/interface.interface.ts index 01aa7293e65d..3236760b5d03 100644 --- a/packages/docgen/src/interfaces/interface.interface.ts +++ b/packages/docgen/src/interfaces/interface.interface.ts @@ -1,7 +1,7 @@ import type { Class } from './index.js'; -// @ts-expect-error +// @ts-expect-error: Inheritance type error export interface Interface extends Class { - kind: 'interface'; classdesc: string; + kind: 'interface'; } diff --git a/packages/docgen/src/interfaces/item.interface.ts b/packages/docgen/src/interfaces/item.interface.ts index a160b3128d1f..0c3bdbe13d74 100644 --- a/packages/docgen/src/interfaces/item.interface.ts +++ b/packages/docgen/src/interfaces/item.interface.ts @@ -1,9 +1,9 @@ export interface Item { + description: string; id: string; + ignore?: boolean; + kind: string; longname: string; name: string; - kind: string; - description: string; order: number; - ignore?: boolean; } diff --git a/packages/docgen/src/interfaces/member.interface.ts b/packages/docgen/src/interfaces/member.interface.ts index c71a08379924..0c6430b6cec6 100644 --- a/packages/docgen/src/interfaces/member.interface.ts +++ b/packages/docgen/src/interfaces/member.interface.ts @@ -1,17 +1,17 @@ import type { Access, Item, Meta, Param, Scope, Type } from './index.js'; export interface Member extends Item { + access?: Access; + default?: string; + deprecated?: boolean | string; kind: 'member'; - see?: string[]; - scope: Scope; memberof: string; - type: Type; - access?: Access; - readonly?: boolean; + meta: Meta; nullable?: boolean; - virtual?: boolean; - deprecated?: boolean | string; - default?: string; properties?: Param[]; - meta: Meta; + readonly?: boolean; + scope: Scope; + see?: string[]; + type: Type; + virtual?: boolean; } diff --git a/packages/docgen/src/interfaces/meta.interface.ts b/packages/docgen/src/interfaces/meta.interface.ts index df50bf525991..d1a4bfc738bd 100644 --- a/packages/docgen/src/interfaces/meta.interface.ts +++ b/packages/docgen/src/interfaces/meta.interface.ts @@ -1,5 +1,5 @@ export interface Meta { - lineno: number; filename: string; + lineno: number; path: string; } diff --git a/packages/docgen/src/interfaces/method.interface.ts b/packages/docgen/src/interfaces/method.interface.ts index 4d2421d208ad..737e7f584484 100644 --- a/packages/docgen/src/interfaces/method.interface.ts +++ b/packages/docgen/src/interfaces/method.interface.ts @@ -1,22 +1,22 @@ import type { Access, Exception, Item, Meta, Param, Return, Scope } from './index.js'; export interface Method extends Item { - kind: 'function'; - see?: string[]; - scope: Scope; access?: Access; - inherits?: string; - inherited?: boolean; - implements?: string[]; - examples?: string[]; - virtual?: boolean; + async?: boolean; deprecated?: boolean | string; + examples?: string[]; + exceptions?: Exception[]; + fires?: string[]; + generator?: boolean; + implements?: string[]; + inherited?: boolean; + inherits?: string; + kind: 'function'; memberof?: string; + meta: Meta; params?: Param[]; - async?: boolean; - generator?: boolean; - fires?: string[]; returns?: Return[]; - exceptions?: Exception[]; - meta: Meta; + scope: Scope; + see?: string[]; + virtual?: boolean; } diff --git a/packages/docgen/src/interfaces/param.interface.ts b/packages/docgen/src/interfaces/param.interface.ts index d6bde6839533..ee3a8b7a879b 100644 --- a/packages/docgen/src/interfaces/param.interface.ts +++ b/packages/docgen/src/interfaces/param.interface.ts @@ -1,11 +1,11 @@ import type { Type } from './index.js'; export interface Param { - type: Type; + defaultvalue?: string; description: string; name: string; + nullable?: boolean; optional?: boolean; - defaultvalue?: string; + type: Type; variable?: string; - nullable?: boolean; } diff --git a/packages/docgen/src/interfaces/return.interface.ts b/packages/docgen/src/interfaces/return.interface.ts index b567eb4104a4..3dd0d1e1b673 100644 --- a/packages/docgen/src/interfaces/return.interface.ts +++ b/packages/docgen/src/interfaces/return.interface.ts @@ -1,7 +1,7 @@ import type { Type } from './index.js'; export interface Return { - type: Required; - nullable?: boolean; description?: string; + nullable?: boolean; + type: Required; } diff --git a/packages/docgen/src/interfaces/rootTypes.type.ts b/packages/docgen/src/interfaces/rootTypes.type.ts index 0247aa03e42b..a6352a309647 100644 --- a/packages/docgen/src/interfaces/rootTypes.type.ts +++ b/packages/docgen/src/interfaces/rootTypes.type.ts @@ -1,3 +1,3 @@ import type { Class, External, Interface, Method, Typedef } from './index.js'; -export type RootTypes = Class | Method | Interface | Typedef | External; +export type RootTypes = Class | External | Interface | Method | Typedef; diff --git a/packages/docgen/src/interfaces/typedef.interface.ts b/packages/docgen/src/interfaces/typedef.interface.ts index 73da28bbec13..9d86a476fc6c 100644 --- a/packages/docgen/src/interfaces/typedef.interface.ts +++ b/packages/docgen/src/interfaces/typedef.interface.ts @@ -1,14 +1,14 @@ import type { Access, Item, Meta, Param, Return, Scope, Type } from './index.js'; export interface Typedef extends Item { - kind: 'typedef'; - scope: Scope; - see?: string[]; access?: Access; deprecated?: boolean | string; - type: Type; - properties?: Param[]; + kind: 'typedef'; + meta: Meta; params?: Param[]; + properties?: Param[]; returns?: Return[]; - meta: Meta; + scope: Scope; + see?: string[]; + type: Type; } diff --git a/packages/docgen/src/interfaces/var-type.interface.ts b/packages/docgen/src/interfaces/var-type.interface.ts index 990f11267814..cef3abe92ff7 100644 --- a/packages/docgen/src/interfaces/var-type.interface.ts +++ b/packages/docgen/src/interfaces/var-type.interface.ts @@ -1,7 +1,7 @@ import type { Type } from './index.js'; export interface VarType extends Type { - type?: Required | undefined; description?: string | undefined; nullable?: boolean | undefined; + type?: Required | undefined; } diff --git a/packages/docgen/src/types/class.ts b/packages/docgen/src/types/class.ts index 581ff8336106..0a2aa0eb8e58 100644 --- a/packages/docgen/src/types/class.ts +++ b/packages/docgen/src/types/class.ts @@ -1,5 +1,7 @@ import { parse } from 'node:path'; import type { DeclarationReflection } from 'typedoc'; +import type { Class, Config } from '../interfaces/index.js'; +import { parseType } from '../util/parseType.js'; import { DocumentedConstructor } from './constructor.js'; import { DocumentedEvent } from './event.js'; import { DocumentedItemMeta } from './item-meta.js'; @@ -7,8 +9,6 @@ import { DocumentedItem } from './item.js'; import { DocumentedMember } from './member.js'; import { DocumentedMethod } from './method.js'; import { DocumentedVarType } from './var-type.js'; -import type { Class, Config } from '../interfaces/index.js'; -import { parseType } from '../util/parseType.js'; export class DocumentedClass extends DocumentedItem { public readonly props = new Map(); @@ -27,51 +27,55 @@ export class DocumentedClass extends DocumentedItem t.tag === '@see').length + const see = signature.comment?.blockTags?.filter((block) => block.tag === '@see').length ? signature.comment.blockTags - .filter((t) => t.tag === '@see') - .map((t) => t.content.find((c) => c.kind === 'text')?.text.trim()) + .filter((block) => block.tag === '@see') + .map((block) => block.content.find((contentText) => contentText.kind === 'text')?.text.trim()) : undefined; return { - // @ts-expect-error + // @ts-expect-error: Type cannot be inferred // eslint-disable-next-line @typescript-eslint/no-unsafe-argument name: signature.name === 'default' ? parse(meta?.file ?? 'default').name : signature.name, - // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing + // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing, no-param-reassign description: signature.comment?.summary.reduce((prev, curr) => (prev += curr.text), '').trim() || undefined, see, extends: this.extends?.serialize(), @@ -106,22 +110,23 @@ export class DocumentedClass extends DocumentedItem t.tag === '@private' || t.tag === '@internal') + signature.comment?.blockTags?.some((block) => block.tag === '@private' || block.tag === '@internal') ? 'private' : undefined, // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing, @typescript-eslint/no-unnecessary-condition - abstract: signature.comment?.blockTags?.some((t) => t.tag === '@abstract') || undefined, + abstract: signature.comment?.blockTags?.some((block) => block.tag === '@abstract') || undefined, // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition - deprecated: signature.comment?.blockTags?.some((t) => t.tag === '@deprecated') + deprecated: signature.comment?.blockTags?.some((block) => block.tag === '@deprecated') ? signature.comment.blockTags - .find((t) => t.tag === '@deprecated') + .find((block) => block.tag === '@deprecated') + // eslint-disable-next-line no-param-reassign ?.content.reduce((prev, curr) => (prev += curr.text), '') .trim() ?? true : undefined, construct: this.construct?.serialize(), - props: this.props.size ? [...this.props.values()].map((p) => p.serialize()) : undefined, - methods: this.methods.size ? [...this.methods.values()].map((m) => m.serialize()) : undefined, - events: this.events.size ? [...this.events.values()].map((e) => e.serialize()) : undefined, + props: this.props.size ? [...this.props.values()].map((param) => param.serialize()) : undefined, + methods: this.methods.size ? [...this.methods.values()].map((method) => method.serialize()) : undefined, + events: this.events.size ? [...this.events.values()].map((event) => event.serialize()) : undefined, meta, }; } @@ -137,9 +142,9 @@ export class DocumentedClass extends DocumentedItem p.serialize()) : undefined, - methods: this.methods.size ? [...this.methods.values()].map((m) => m.serialize()) : undefined, - events: this.events.size ? [...this.events.values()].map((e) => e.serialize()) : undefined, + props: this.props.size ? [...this.props.values()].map((param) => param.serialize()) : undefined, + methods: this.methods.size ? [...this.methods.values()].map((method) => method.serialize()) : undefined, + events: this.events.size ? [...this.events.values()].map((event) => event.serialize()) : undefined, meta: new DocumentedItemMeta(data.meta, this.config).serialize(), }; } diff --git a/packages/docgen/src/types/constructor.ts b/packages/docgen/src/types/constructor.ts index 80397be26012..c88ab68b1717 100644 --- a/packages/docgen/src/types/constructor.ts +++ b/packages/docgen/src/types/constructor.ts @@ -1,7 +1,7 @@ import type { DeclarationReflection, SignatureReflection } from 'typedoc'; +import type { Constructor } from '../interfaces/index.js'; import { DocumentedItem } from './item.js'; import { DocumentedParam } from './param.js'; -import type { Constructor } from '../interfaces/index.js'; export class DocumentedConstructor extends DocumentedItem { public override serializer() { @@ -10,26 +10,28 @@ export class DocumentedConstructor extends DocumentedItem t.tag === '@see').length + const see = signature.comment?.blockTags?.filter((block) => block.tag === '@see').length ? signature.comment.blockTags - .filter((t) => t.tag === '@see') - .map((t) => t.content.find((c) => c.kind === 'text')?.text.trim()) + .filter((block) => block.tag === '@see') + .map((block) => block.content.find((textContent) => textContent.kind === 'text')?.text.trim()) : undefined; return { name: signature.name, - // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition, @typescript-eslint/prefer-nullish-coalescing + // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition, @typescript-eslint/prefer-nullish-coalescing, no-param-reassign description: signature.comment?.summary?.reduce((prev, curr) => (prev += curr.text), '').trim() || undefined, see, access: data.flags.isPrivate || // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition - signature.comment?.blockTags?.some((t) => t.tag === '@private' || t.tag === '@internal') + signature.comment?.blockTags?.some((block) => block.tag === '@private' || block.tag === '@internal') ? 'private' : undefined, - // @ts-expect-error + // @ts-expect-error: No type for params params: signature.parameters - ? (signature as SignatureReflection).parameters?.map((p) => new DocumentedParam(p, this.config).serialize()) + ? (signature as SignatureReflection).parameters?.map((param) => + new DocumentedParam(param, this.config).serialize(), + ) : undefined, }; } @@ -40,7 +42,9 @@ export class DocumentedConstructor extends DocumentedItem new DocumentedParam(p, this.config).serialize()) : undefined, + params: data.params?.length + ? data.params.map((param) => new DocumentedParam(param, this.config).serialize()) + : undefined, }; } } diff --git a/packages/docgen/src/types/event.ts b/packages/docgen/src/types/event.ts index 0158b7ebb6b6..6af0b050ee02 100644 --- a/packages/docgen/src/types/event.ts +++ b/packages/docgen/src/types/event.ts @@ -1,12 +1,12 @@ import type { DeclarationReflection, SignatureReflection } from 'typedoc'; +import type { Event } from '../interfaces/index.js'; +import { parseType } from '../util/parseType.js'; import { DocumentedItemMeta } from './item-meta.js'; import { DocumentedItem } from './item.js'; import { DocumentedParam } from './param.js'; import { DocumentedVarType } from './var-type.js'; -import type { Event } from '../interfaces/index.js'; -import { parseType } from '../util/parseType.js'; -export class DocumentedEvent extends DocumentedItem { +export class DocumentedEvent extends DocumentedItem { public override serializer() { if (this.config.typescript) { const data = this.data as DeclarationReflection; @@ -19,45 +19,47 @@ export class DocumentedEvent extends DocumentedItem t.tag === '@see').length + const see = signature.comment?.blockTags?.filter((block) => block.tag === '@see').length ? signature.comment.blockTags - .filter((t) => t.tag === '@see') - .map((t) => t.content.find((c) => c.kind === 'text')?.text.trim()) + .filter((block) => block.tag === '@see') + .map((block) => block.content.find((contentText) => contentText.kind === 'text')?.text.trim()) : undefined; // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition - const examples = signature.comment?.blockTags?.filter((t) => t.tag === '@example').length + const examples = signature.comment?.blockTags?.filter((block) => block.tag === '@example').length ? signature.comment.blockTags - .filter((t) => t.tag === '@example') - .map((t) => t.content.reduce((prev, curr) => (prev += curr.text), '').trim()) + .filter((block) => block.tag === '@example') + // eslint-disable-next-line no-param-reassign + .map((block) => block.content.reduce((prev, curr) => (prev += curr.text), '').trim()) : undefined; return { - // @ts-expect-error + // @ts-expect-error: No type for params // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access name: signature.parameters?.[0]?.type?.value, - // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition, @typescript-eslint/prefer-nullish-coalescing + // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition, @typescript-eslint/prefer-nullish-coalescing, no-param-reassign description: signature.comment?.summary?.reduce((prev, curr) => (prev += curr.text), '').trim() || undefined, see, access: data.flags.isPrivate || // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition - signature.comment?.blockTags?.some((t) => t.tag === '@private' || t.tag === '@internal') + signature.comment?.blockTags?.some((block) => block.tag === '@private' || block.tag === '@internal') ? 'private' : undefined, examples, // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition - deprecated: signature.comment?.blockTags?.some((t) => t.tag === '@deprecated') + deprecated: signature.comment?.blockTags?.some((block) => block.tag === '@deprecated') ? signature.comment.blockTags - .find((t) => t.tag === '@deprecated') + .find((block) => block.tag === '@deprecated') + // eslint-disable-next-line no-param-reassign ?.content.reduce((prev, curr) => (prev += curr.text), '') .trim() ?? true : undefined, - // @ts-expect-error + // @ts-expect-error: Parameters type is not available params: signature.parameters ? (signature as SignatureReflection).parameters ?.slice(1) - .map((p) => new DocumentedParam(p, this.config).serialize()) + .map((param) => new DocumentedParam(param, this.config).serialize()) : undefined, returns: signature.type ? [ @@ -67,7 +69,8 @@ export class DocumentedEvent extends DocumentedItem t.tag === '@returns') + ?.find((block) => block.tag === '@returns') + // eslint-disable-next-line no-param-reassign ?.content.reduce((prev, curr) => (prev += curr.text), '') // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing .trim() || undefined, @@ -79,7 +82,8 @@ export class DocumentedEvent extends DocumentedItem t.tag === '@returns') + ?.find((block) => block.tag === '@returns') + // eslint-disable-next-line no-param-reassign ?.content.reduce((prev, curr) => (prev += curr.text), '') // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing .trim() || undefined, @@ -93,7 +97,9 @@ export class DocumentedEvent extends DocumentedItem new DocumentedParam(p, this.config).serialize()) : undefined, + params: data.params?.length + ? data.params.map((param) => new DocumentedParam(param, this.config).serialize()) + : undefined, meta: new DocumentedItemMeta(data.meta, this.config).serialize(), }; } diff --git a/packages/docgen/src/types/external.ts b/packages/docgen/src/types/external.ts index 477797972d70..7b30a1b63304 100644 --- a/packages/docgen/src/types/external.ts +++ b/packages/docgen/src/types/external.ts @@ -1,6 +1,6 @@ +import type { External } from '../interfaces/index.js'; import { DocumentedItemMeta } from './item-meta.js'; import { DocumentedItem } from './item.js'; -import type { External } from '../interfaces/index.js'; export class DocumentedExternal extends DocumentedItem { public override serializer() { diff --git a/packages/docgen/src/types/interface.ts b/packages/docgen/src/types/interface.ts index 39b94f1d416e..f09cde53494a 100644 --- a/packages/docgen/src/types/interface.ts +++ b/packages/docgen/src/types/interface.ts @@ -1,5 +1,5 @@ -import { DocumentedClass } from './class.js'; import type { Interface } from '../interfaces/index.js'; +import { DocumentedClass } from './class.js'; export class DocumentedInterface extends DocumentedClass { public override serializer() { diff --git a/packages/docgen/src/types/item-meta.ts b/packages/docgen/src/types/item-meta.ts index 20d02719068b..e49ddde3c4b0 100644 --- a/packages/docgen/src/types/item-meta.ts +++ b/packages/docgen/src/types/item-meta.ts @@ -1,7 +1,7 @@ import { basename, relative } from 'node:path'; import type { SourceReference } from 'typedoc'; -import { DocumentedItem } from './item.js'; import type { Meta } from '../interfaces/index.js'; +import { DocumentedItem } from './item.js'; export class DocumentedItemMeta extends DocumentedItem { public override serializer() { @@ -20,7 +20,7 @@ export class DocumentedItemMeta extends DocumentedItem { return { line: data.lineno, file: data.filename, - path: relative(this.config.root, data.path).replace(/\\/g, '/'), + path: relative(this.config.root, data.path).replaceAll('\\', '/'), }; } } diff --git a/packages/docgen/src/types/item.ts b/packages/docgen/src/types/item.ts index 7128fe5a36dd..d8db85f239c3 100644 --- a/packages/docgen/src/types/item.ts +++ b/packages/docgen/src/types/item.ts @@ -1,14 +1,15 @@ import type { DeclarationReflection } from 'typedoc'; import type { Config, Item } from '../interfaces/index.js'; -export class DocumentedItem { +export class DocumentedItem { public constructor(public readonly data: T, public readonly config: Config) {} public serialize(): unknown { try { - return this.serializer(); - } catch (err) { - const error = err as Error; + this.serializer(); + return; + } catch (error_) { + const error = error_ as Error; error.message = `Error while serializing ${this.detailedName()}: ${error.message}`; throw error; } diff --git a/packages/docgen/src/types/member.ts b/packages/docgen/src/types/member.ts index ddd932b70519..d25dbf3a301e 100644 --- a/packages/docgen/src/types/member.ts +++ b/packages/docgen/src/types/member.ts @@ -1,12 +1,12 @@ import type { DeclarationReflection } from 'typedoc'; +import type { Member } from '../interfaces/index.js'; +import { parseType } from '../util/parseType.js'; import { DocumentedItemMeta } from './item-meta.js'; import { DocumentedItem } from './item.js'; import { DocumentedParam } from './param.js'; import { DocumentedVarType } from './var-type.js'; -import type { Member } from '../interfaces/index.js'; -import { parseType } from '../util/parseType.js'; -export class DocumentedMember extends DocumentedItem { +export class DocumentedMember extends DocumentedItem { public override serializer() { if (this.config.typescript) { const data = this.data as DeclarationReflection; @@ -19,31 +19,32 @@ export class DocumentedMember extends DocumentedItem t.tag === '@see').length + const see = signature.comment?.blockTags?.filter((block) => block.tag === '@see').length ? signature.comment.blockTags - .filter((t) => t.tag === '@see') - .map((t) => t.content.find((c) => c.kind === 'text')?.text.trim()) + .filter((block) => block.tag === '@see') + .map((block) => block.content.find((contentText) => contentText.kind === 'text')?.text.trim()) : undefined; const base = { name: signature.name, - // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition, @typescript-eslint/prefer-nullish-coalescing + // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition, @typescript-eslint/prefer-nullish-coalescing, no-param-reassign description: signature.comment?.summary?.reduce((prev, curr) => (prev += curr.text), '').trim() || undefined, see, scope: data.flags.isStatic ? 'static' : undefined, access: data.flags.isPrivate || // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition - signature.comment?.blockTags?.some((t) => t.tag === '@private' || t.tag === '@internal') + signature.comment?.blockTags?.some((block) => block.tag === '@private' || block.tag === '@internal') ? 'private' : undefined, readonly: data.flags.isReadonly, // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition, @typescript-eslint/prefer-nullish-coalescing - abstract: signature.comment?.blockTags?.some((t) => t.tag === '@abstract') || undefined, + abstract: signature.comment?.blockTags?.some((block) => block.tag === '@abstract') || undefined, // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition - deprecated: signature.comment?.blockTags?.some((t) => t.tag === '@deprecated') + deprecated: signature.comment?.blockTags?.some((block) => block.tag === '@deprecated') ? signature.comment.blockTags - .find((t) => t.tag === '@deprecated') + .find((block) => block.tag === '@deprecated') + // eslint-disable-next-line no-param-reassign ?.content.reduce((prev, curr) => (prev += curr.text), '') .trim() ?? true : undefined, @@ -51,7 +52,8 @@ export class DocumentedMember extends DocumentedItem t.tag === '@default') + ?.find((block) => block.tag === '@default') + // eslint-disable-next-line no-param-reassign ?.content.reduce((prev, curr) => (prev += curr.text), '') // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing .trim() || @@ -75,30 +77,31 @@ export class DocumentedMember extends DocumentedItem t.tag === '@see').length + const see = getter.comment?.blockTags?.filter((block) => block.tag === '@see').length ? getter.comment.blockTags - .filter((t) => t.tag === '@see') - .map((t) => t.content.find((c) => c.kind === 'text')?.text.trim()) + .filter((block) => block.tag === '@see') + .map((block) => block.content.find((contentText) => contentText.kind === 'text')?.text.trim()) : undefined; return { ...base, - // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition, @typescript-eslint/prefer-nullish-coalescing + // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition, @typescript-eslint/prefer-nullish-coalescing, no-param-reassign description: getter.comment?.summary?.reduce((prev, curr) => (prev += curr.text), '').trim() || undefined, see, access: data.flags.isPrivate || // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition - getter.comment?.blockTags?.some((t) => t.tag === '@private' || t.tag === '@internal') + getter.comment?.blockTags?.some((block) => block.tag === '@private' || block.tag === '@internal') ? 'private' : undefined, readonly: base.readonly || !hasSetter, // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition, @typescript-eslint/prefer-nullish-coalescing - abstract: getter.comment?.blockTags?.some((t) => t.tag === '@abstract') || undefined, + abstract: getter.comment?.blockTags?.some((block) => block.tag === '@abstract') || undefined, // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition - deprecated: getter.comment?.blockTags?.some((t) => t.tag === '@deprecated') + deprecated: getter.comment?.blockTags?.some((block) => block.tag === '@deprecated') ? getter.comment.blockTags - .find((t) => t.tag === '@deprecated') + .find((block) => block.tag === '@deprecated') + // eslint-disable-next-line no-param-reassign ?.content.reduce((prev, curr) => (prev += curr.text), '') .trim() ?? true : undefined, @@ -106,7 +109,8 @@ export class DocumentedMember extends DocumentedItem t.tag === '@default') + ?.find((block) => block.tag === '@default') + // eslint-disable-next-line no-param-reassign ?.content.reduce((prev, curr) => (prev += curr.text), '') // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing .trim() || @@ -132,7 +136,7 @@ export class DocumentedMember extends DocumentedItem new DocumentedParam(p, this.config).serialize()) + ? data.properties.map((prop) => new DocumentedParam(prop, this.config).serialize()) : undefined, meta: new DocumentedItemMeta(data.meta, this.config).serialize(), }; diff --git a/packages/docgen/src/types/method.ts b/packages/docgen/src/types/method.ts index dec8e6f7ebe7..cd20ab90c24a 100644 --- a/packages/docgen/src/types/method.ts +++ b/packages/docgen/src/types/method.ts @@ -1,12 +1,12 @@ import type { DeclarationReflection, SignatureReflection } from 'typedoc'; +import type { Method } from '../interfaces/index.js'; +import { parseType } from '../util/parseType.js'; import { DocumentedItemMeta } from './item-meta.js'; import { DocumentedItem } from './item.js'; import { DocumentedParam } from './param.js'; import { DocumentedVarType } from './var-type.js'; -import type { Method } from '../interfaces/index.js'; -import { parseType } from '../util/parseType.js'; -export class DocumentedMethod extends DocumentedItem { +export class DocumentedMethod extends DocumentedItem { public override serializer() { if (this.config.typescript) { const data = this.data as DeclarationReflection; @@ -19,46 +19,50 @@ export class DocumentedMethod extends DocumentedItem t.tag === '@see').length + const see = signature.comment?.blockTags?.filter((block) => block.tag === '@see').length ? signature.comment.blockTags - .filter((t) => t.tag === '@see') - .map((t) => t.content.find((c) => c.kind === 'text')?.text.trim()) + .filter((block) => block.tag === '@see') + .map((block) => block.content.find((innerContent) => innerContent.kind === 'text')?.text.trim()) : undefined; // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition - const examples = signature.comment?.blockTags?.filter((t) => t.tag === '@example').length + const examples = signature.comment?.blockTags?.filter((block) => block.tag === '@example').length ? signature.comment.blockTags - .filter((t) => t.tag === '@example') - .map((t) => t.content.reduce((prev, curr) => (prev += curr.text), '').trim()) + .filter((block) => block.tag === '@example') + // eslint-disable-next-line no-param-reassign + .map((block) => block.content.reduce((prev, curr) => (prev += curr.text), '').trim()) : undefined; return { name: signature.name, - // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition, @typescript-eslint/prefer-nullish-coalescing + // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition, @typescript-eslint/prefer-nullish-coalescing, no-param-reassign description: signature.comment?.summary?.reduce((prev, curr) => (prev += curr.text), '').trim() || undefined, see, scope: data.flags.isStatic ? 'static' : undefined, access: data.flags.isPrivate || // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition - signature.comment?.blockTags?.some((t) => t.tag === '@private' || t.tag === '@internal') + signature.comment?.blockTags?.some((block) => block.tag === '@private' || block.tag === '@internal') ? 'private' : undefined, examples, // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition, @typescript-eslint/prefer-nullish-coalescing - abstract: signature.comment?.blockTags?.some((t) => t.tag === '@abstract') || undefined, + abstract: signature.comment?.blockTags?.some((block) => block.tag === '@abstract') || undefined, // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition - deprecated: signature.comment?.blockTags?.some((t) => t.tag === '@deprecated') + deprecated: signature.comment?.blockTags?.some((block) => block.tag === '@deprecated') ? signature.comment.blockTags - .find((t) => t.tag === '@deprecated') + .find((block) => block.tag === '@deprecated') + // eslint-disable-next-line no-param-reassign ?.content.reduce((prev, curr) => (prev += curr.text), '') .trim() ?? true : undefined, // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition // emits: signature.comment?.blockTags?.filter((t) => t.tag === '@emits').map((t) => t.content), - // @ts-expect-error + // @ts-expect-error: Typescript doesn't know that this is a SignatureReflection params: signature.parameters - ? (signature as SignatureReflection).parameters?.map((p) => new DocumentedParam(p, this.config).serialize()) + ? (signature as SignatureReflection).parameters?.map((param) => + new DocumentedParam(param, this.config).serialize(), + ) : undefined, returns: signature.type ? [ @@ -68,7 +72,8 @@ export class DocumentedMethod extends DocumentedItem t.tag === '@returns') + ?.find((block) => block.tag === '@returns') + // eslint-disable-next-line no-param-reassign ?.content.reduce((prev, curr) => (prev += curr.text), '') // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing .trim() || undefined, @@ -80,7 +85,8 @@ export class DocumentedMethod extends DocumentedItem t.tag === '@returns') + ?.find((block) => block.tag === '@returns') + // eslint-disable-next-line no-param-reassign ?.content.reduce((prev, curr) => (prev += curr.text), '') // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing .trim() || undefined, @@ -103,13 +109,15 @@ export class DocumentedMethod extends DocumentedItem new DocumentedParam(p, this.config).serialize()) : undefined, + params: data.params?.length + ? data.params.map((param) => new DocumentedParam(param, this.config).serialize()) + : undefined, async: data.async, generator: data.generator, returns: data.returns?.length - ? data.returns.map((p) => + ? data.returns.map((param) => new DocumentedVarType( - { names: p.type.names, description: p.description, nullable: p.nullable }, + { names: param.type.names, description: param.description, nullable: param.nullable }, this.config, ).serialize(), ) diff --git a/packages/docgen/src/types/param.ts b/packages/docgen/src/types/param.ts index 89e428b6a6ab..9d4bfa36d3c3 100644 --- a/packages/docgen/src/types/param.ts +++ b/packages/docgen/src/types/param.ts @@ -1,8 +1,8 @@ import type { ParameterReflection } from 'typedoc'; -import { DocumentedItem } from './item.js'; -import { DocumentedVarType } from './var-type.js'; import type { Param } from '../interfaces/index.js'; import { parseType } from '../util/parseType.js'; +import { DocumentedItem } from './item.js'; +import { DocumentedVarType } from './var-type.js'; export class DocumentedParam extends DocumentedItem { public override serializer() { @@ -11,14 +11,15 @@ export class DocumentedParam extends DocumentedItem return { name: data.name, - // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition, @typescript-eslint/prefer-nullish-coalescing + // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition, @typescript-eslint/prefer-nullish-coalescing, no-param-reassign description: data.comment?.summary?.reduce((prev, curr) => (prev += curr.text), '').trim() || undefined, - optional: data.flags.isOptional || typeof data.defaultValue != 'undefined', + optional: data.flags.isOptional || typeof data.defaultValue !== 'undefined', default: (data.defaultValue === '...' ? undefined : data.defaultValue) ?? (data.comment?.blockTags // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition - ?.find((t) => t.tag === '@default') + ?.find((block) => block.tag === '@default') + // eslint-disable-next-line no-param-reassign ?.content.reduce((prev, curr) => (prev += curr.text), '') // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing .trim() || diff --git a/packages/docgen/src/types/typedef.ts b/packages/docgen/src/types/typedef.ts index 93bab4b2595f..17df02874473 100644 --- a/packages/docgen/src/types/typedef.ts +++ b/packages/docgen/src/types/typedef.ts @@ -1,13 +1,13 @@ import type { DeclarationReflection, LiteralType } from 'typedoc'; +import type { Typedef } from '../interfaces/index.js'; +import { parseType } from '../util/parseType.js'; +import { isReflectionType } from '../util/types.js'; import { DocumentedItemMeta } from './item-meta.js'; import { DocumentedItem } from './item.js'; import { DocumentedParam } from './param.js'; import { DocumentedVarType } from './var-type.js'; -import type { Typedef } from '../interfaces/index.js'; -import { parseType } from '../util/parseType.js'; -import { isReflectionType } from '../util/types.js'; -export class DocumentedTypeDef extends DocumentedItem { +export class DocumentedTypeDef extends DocumentedItem { public override serializer() { if (this.config.typescript) { const data = this.data as DeclarationReflection; @@ -20,27 +20,28 @@ export class DocumentedTypeDef extends DocumentedItem t.tag === '@see').length + const see = signature.comment?.blockTags?.filter((block) => block.tag === '@see').length ? signature.comment.blockTags - .filter((t) => t.tag === '@see') - .map((t) => t.content.find((c) => c.kind === 'text')?.text.trim()) + .filter((block) => block.tag === '@see') + .map((block) => block.content.find((contentText) => contentText.kind === 'text')?.text.trim()) : undefined; const baseReturn = { name: signature.name, - // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition, @typescript-eslint/prefer-nullish-coalescing + // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition, @typescript-eslint/prefer-nullish-coalescing, no-param-reassign description: signature.comment?.summary?.reduce((prev, curr) => (prev += curr.text), '').trim() || undefined, see, access: data.flags.isPrivate || // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition - signature.comment?.blockTags?.some((t) => t.tag === '@private' || t.tag === '@internal') + signature.comment?.blockTags?.some((block) => block.tag === '@private' || block.tag === '@internal') ? 'private' : undefined, // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition - deprecated: signature.comment?.blockTags?.some((t) => t.tag === '@deprecated') + deprecated: signature.comment?.blockTags?.some((block) => block.tag === '@deprecated') ? signature.comment.blockTags - .find((t) => t.tag === '@deprecated') + .find((block) => block.tag === '@deprecated') + // eslint-disable-next-line no-param-reassign ?.content.reduce((prev, curr) => (prev += curr.text), '') .trim() ?? true : undefined, @@ -63,7 +64,7 @@ export class DocumentedTypeDef extends DocumentedItem (prev += curr.text), '') // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing .trim() || undefined, @@ -81,19 +82,20 @@ export class DocumentedTypeDef extends DocumentedItem (prev += curr.text), '') // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing .trim() || - // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition, @typescript-eslint/prefer-nullish-coalescing + // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition, @typescript-eslint/prefer-nullish-coalescing, no-param-reassign child.signatures?.[0]?.comment?.summary?.reduce((prev, curr) => (prev += curr.text), '').trim() || undefined, - optional: child.flags.isOptional || typeof child.defaultValue != 'undefined', + optional: child.flags.isOptional || typeof child.defaultValue !== 'undefined', default: (child.defaultValue === '...' ? undefined : child.defaultValue) ?? (child.comment?.blockTags // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition - ?.find((t) => t.tag === '@default') + ?.find((block) => block.tag === '@default') + // eslint-disable-next-line no-param-reassign ?.content.reduce((prev, curr) => (prev += curr.text), '') // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing .trim() || @@ -111,7 +113,8 @@ export class DocumentedTypeDef extends DocumentedItem t.tag === '@returns') + ?.find((block) => block.tag === '@returns') + // eslint-disable-next-line no-param-reassign ?.content.reduce((prev, curr) => (prev += curr.text), '') .trim(), }, @@ -131,14 +134,15 @@ export class DocumentedTypeDef extends DocumentedItem ({ name: param.name, - // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition, @typescript-eslint/prefer-nullish-coalescing + // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition, @typescript-eslint/prefer-nullish-coalescing, no-param-reassign description: param.comment?.summary?.reduce((prev, curr) => (prev += curr.text), '').trim() || undefined, - optional: param.flags.isOptional || typeof param.defaultValue != 'undefined', + optional: param.flags.isOptional || typeof param.defaultValue !== 'undefined', default: (param.defaultValue === '...' ? undefined : param.defaultValue) ?? (param.comment?.blockTags // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition - ?.find((t) => t.tag === '@default') + ?.find((block) => block.tag === '@default') + // eslint-disable-next-line no-param-reassign ?.content.reduce((prev, curr) => (prev += curr.text), '') // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing .trim() || @@ -149,27 +153,28 @@ export class DocumentedTypeDef extends DocumentedItem t.tag === '@see').length + const see = sig?.comment?.blockTags?.filter((block) => block.tag === '@see').length ? sig.comment.blockTags - .filter((t) => t.tag === '@see') - .map((t) => t.content.find((c) => c.kind === 'text')?.text.trim()) + .filter((block) => block.tag === '@see') + .map((block) => block.content.find((contentText) => contentText.kind === 'text')?.text.trim()) : undefined; return { ...baseReturn, - // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition, @typescript-eslint/prefer-nullish-coalescing + // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition, @typescript-eslint/prefer-nullish-coalescing, no-param-reassign description: sig?.comment?.summary?.reduce((prev, curr) => (prev += curr.text), '').trim() || undefined, see, access: sig?.flags.isPrivate || // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition - sig?.comment?.blockTags?.some((t) => t.tag === '@private' || t.tag === '@internal') + sig?.comment?.blockTags?.some((block) => block.tag === '@private' || block.tag === '@internal') ? 'private' : undefined, // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition - deprecated: sig?.comment?.blockTags?.some((t) => t.tag === '@deprecated') + deprecated: sig?.comment?.blockTags?.some((block) => block.tag === '@deprecated') ? sig.comment.blockTags - .find((t) => t.tag === '@deprecated') + .find((block) => block.tag === '@deprecated') + // eslint-disable-next-line no-param-reassign ?.content.reduce((prev, curr) => (prev += curr.text), '') .trim() ?? true : undefined, @@ -182,7 +187,8 @@ export class DocumentedTypeDef extends DocumentedItem t.tag === '@returns') + ?.find((block) => block.tag === '@returns') + // eslint-disable-next-line no-param-reassign ?.content.reduce((prev, curr) => (prev += curr.text), '') // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing .trim() || undefined, @@ -194,7 +200,8 @@ export class DocumentedTypeDef extends DocumentedItem t.tag === '@returns') + ?.find((block) => block.tag === '@returns') + // eslint-disable-next-line no-param-reassign ?.content.reduce((prev, curr) => (prev += curr.text), '') // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing .trim() || undefined, @@ -215,11 +222,13 @@ export class DocumentedTypeDef extends DocumentedItem new DocumentedParam(p, this.config).serialize()) + ? data.properties.map((prop) => new DocumentedParam(prop, this.config).serialize()) + : undefined, + params: data.params?.length + ? data.params.map((param) => new DocumentedParam(param, this.config).serialize()) : undefined, - params: data.params?.length ? data.params.map((p) => new DocumentedParam(p, this.config).serialize()) : undefined, returns: data.returns?.length - ? data.returns.map((p) => new DocumentedVarType(p, this.config).serialize()) + ? data.returns.map((prop) => new DocumentedVarType(prop, this.config).serialize()) : undefined, meta: new DocumentedItemMeta(data.meta, this.config).serialize(), }; diff --git a/packages/docgen/src/types/var-type.ts b/packages/docgen/src/types/var-type.ts index d5636ba2a983..3fffe113f715 100644 --- a/packages/docgen/src/types/var-type.ts +++ b/packages/docgen/src/types/var-type.ts @@ -1,7 +1,7 @@ -import { DocumentedItem } from './item.js'; import type { VarType } from '../interfaces/index.js'; import { parseType } from '../util/parseType.js'; import { splitVarName } from '../util/splitVarName.js'; +import { DocumentedItem } from './item.js'; export class DocumentedVarType extends DocumentedItem { public override serializer() { diff --git a/packages/docgen/src/util/parseType.ts b/packages/docgen/src/util/parseType.ts index e75a5974ea76..06f7c17b5e74 100644 --- a/packages/docgen/src/util/parseType.ts +++ b/packages/docgen/src/util/parseType.ts @@ -15,44 +15,48 @@ import { isInferredType, isIntrinsicType, isUnknownType, -} from './types'; +} from './types.js'; -export function parseType(t: JSONOutput.SomeType | JSONOutput.Type | string): string { - if (typeof t === 'string') { - return t; +export function parseType(someType: JSONOutput.SomeType | JSONOutput.Type | string): string { + if (typeof someType === 'string') { + return someType; } - if (isArrayType(t)) { - return `Array<${parseType(t.elementType)}>`; + if (isArrayType(someType)) { + return `Array<${parseType(someType.elementType)}>`; } - if (isConditionalType(t)) { - const { checkType, extendsType, trueType, falseType } = t; + if (isConditionalType(someType)) { + const { checkType, extendsType, trueType, falseType } = someType; return `${parseType(checkType)} extends ${parseType(extendsType)} ? ${parseType(trueType)} : ${parseType( falseType, )}`; } - if (isIndexedAccessType(t)) { - return `${parseType(t.objectType)}[${parseType(t.indexType)}]`; + if (isIndexedAccessType(someType)) { + return `${parseType(someType.objectType)}[${parseType(someType.indexType)}]`; } - if (isIntersectionType(t)) { - return t.types.map(parseType).join(' & '); + if (isIntersectionType(someType)) { + return someType.types.map(parseType).join(' & '); } - if (isPredicateType(t)) { - return (t.asserts ? 'asserts ' : '') + t.name + (t.targetType ? ` is ${parseType(t.targetType)}` : ''); + if (isPredicateType(someType)) { + return ( + (someType.asserts ? 'asserts ' : '') + + someType.name + + (someType.targetType ? ` is ${parseType(someType.targetType)}` : '') + ); } - if (isReferenceType(t)) { - return t.name + (t.typeArguments ? `<${t.typeArguments.map(parseType).join(', ')}>` : ''); + if (isReferenceType(someType)) { + return someType.name + (someType.typeArguments ? `<${someType.typeArguments.map(parseType).join(', ')}>` : ''); } - if (isReflectionType(t)) { + if (isReflectionType(someType)) { const obj: Record = {}; - const { children, signatures } = t.declaration!; + const { children, signatures } = someType.declaration!; // This is run when we're parsing interface-like declaration if (children && children.length > 0) { @@ -62,6 +66,7 @@ export function parseType(t: JSONOutput.SomeType | JSONOutput.Type | string): st obj[child.name] = parseType(type); } } + return `{\n${Object.entries(obj) .map(([key, value]) => `${key}: ${value as string}`) .join(',\n')}\n}`; @@ -69,43 +74,48 @@ export function parseType(t: JSONOutput.SomeType | JSONOutput.Type | string): st // This is run if we're parsing a function type if (signatures && signatures.length > 0) { - const s = signatures[0]; - const params = s?.parameters?.map((p) => `${p.name}: ${p.type ? parseType(p.type) : 'unknown'}`); - return `(${params?.join(', ') ?? '...args: unknown[]'}) => ${s?.type ? parseType(s.type) : 'unknown'}`; + const signature = signatures[0]; + const params = signature?.parameters?.map( + (param) => `${param.name}: ${param.type ? parseType(param.type) : 'unknown'}`, + ); + return `(${params?.join(', ') ?? '...args: unknown[]'}) => ${ + signature?.type ? parseType(signature.type) : 'unknown' + }`; } return '{}'; } - if (isLiteralType(t)) { - if (typeof t.value == 'string') { - return `'${t.value}'`; + if (isLiteralType(someType)) { + if (typeof someType.value === 'string') { + return `'${someType.value}'`; } + // eslint-disable-next-line @typescript-eslint/restrict-template-expressions - return `${t.value}`; + return `${someType.value}`; } - if (isTupleType(t)) { - return `[${(t.elements ?? []).map(parseType).join(', ')}]`; + if (isTupleType(someType)) { + return `[${(someType.elements ?? []).map(parseType).join(', ')}]`; } - if (isTypeOperatorType(t)) { - return `${t.operator} ${parseType(t.target)}`; + if (isTypeOperatorType(someType)) { + return `${someType.operator} ${parseType(someType.target)}`; } - if (isUnionType(t)) { - return t.types + if (isUnionType(someType)) { + return someType.types .map(parseType) - .filter((s) => Boolean(s) && s.trim().length > 0) + .filter((currentType) => Boolean(currentType) && currentType.trim().length > 0) .join(' | '); } - if (isQueryType(t)) { - return `(typeof ${parseType(t.queryType)})`; + if (isQueryType(someType)) { + return `(typeof ${parseType(someType.queryType)})`; } - if (isInferredType(t) || isIntrinsicType(t) || isUnknownType(t)) { - return t.name; + if (isInferredType(someType) || isIntrinsicType(someType) || isUnknownType(someType)) { + return someType.name; } return 'unknown'; diff --git a/packages/docgen/src/util/splitVarName.ts b/packages/docgen/src/util/splitVarName.ts index 7ab52bdc38a5..2f7cc82a7b67 100644 --- a/packages/docgen/src/util/splitVarName.ts +++ b/packages/docgen/src/util/splitVarName.ts @@ -1,10 +1,10 @@ +const isASymbol = (char: string) => '-!$%^&*()_+|~=`{}[]:;<>?,. '.includes(char); + export function splitVarName(str: string) { const res: string[][] = []; let currGroup: string[] = []; let currStr = ''; - const isASymbol = (char: string) => '-!$%^&*()_+|~=`{}[]:;<>?,. '.includes(char); - for (const char of str) { const currentlyInASymbolSection = isASymbol(currStr[0]!); const charIsASymbol = isASymbol(char); @@ -13,6 +13,7 @@ export function splitVarName(str: string) { if (char === '.') { continue; } + currGroup.push(currStr); currStr = char; @@ -24,6 +25,7 @@ export function splitVarName(str: string) { currStr += char; } } + currGroup.push(currStr); res.push(currGroup); diff --git a/packages/docgen/src/util/types.ts b/packages/docgen/src/util/types.ts index e9a3fc83611d..b2270fcb4031 100644 --- a/packages/docgen/src/util/types.ts +++ b/packages/docgen/src/util/types.ts @@ -2,66 +2,66 @@ import type { JSONOutput } from 'typedoc'; interface QueryType { - type: 'query'; queryType: JSONOutput.SomeType; + type: 'query'; } export function isArrayType(value: any): value is JSONOutput.ArrayType { - return typeof value == 'object' && value.type === 'array'; + return typeof value === 'object' && value.type === 'array'; } export function isConditionalType(value: any): value is JSONOutput.ConditionalType { - return typeof value == 'object' && value.type === 'conditional'; + return typeof value === 'object' && value.type === 'conditional'; } export function isIndexedAccessType(value: any): value is JSONOutput.IndexedAccessType { - return typeof value == 'object' && value.type === 'indexedAccess'; + return typeof value === 'object' && value.type === 'indexedAccess'; } export function isInferredType(value: any): value is JSONOutput.InferredType { - return typeof value == 'object' && value.type === 'inferred'; + return typeof value === 'object' && value.type === 'inferred'; } export function isIntersectionType(value: any): value is JSONOutput.IntersectionType { - return typeof value == 'object' && value.type === 'intersection'; + return typeof value === 'object' && value.type === 'intersection'; } export function isIntrinsicType(value: any): value is JSONOutput.IntrinsicType { - return typeof value == 'object' && value.type === 'intrinsic'; + return typeof value === 'object' && value.type === 'intrinsic'; } export function isPredicateType(value: any): value is JSONOutput.PredicateType { - return typeof value == 'object' && value.type === 'predicate'; + return typeof value === 'object' && value.type === 'predicate'; } export function isReferenceType(value: any): value is JSONOutput.ReferenceType { - return typeof value == 'object' && value.type === 'reference'; + return typeof value === 'object' && value.type === 'reference'; } export function isReflectionType(value: any): value is JSONOutput.ReflectionType { - return typeof value == 'object' && value.type === 'reflection'; + return typeof value === 'object' && value.type === 'reflection'; } export function isLiteralType(value: any): value is JSONOutput.LiteralType { - return typeof value == 'object' && value.type === 'literal'; + return typeof value === 'object' && value.type === 'literal'; } export function isTupleType(value: any): value is JSONOutput.TupleType { - return typeof value == 'object' && value.type === 'tuple'; + return typeof value === 'object' && value.type === 'tuple'; } export function isTypeOperatorType(value: any): value is JSONOutput.TypeOperatorType { - return typeof value == 'object' && value.type === 'typeOperator'; + return typeof value === 'object' && value.type === 'typeOperator'; } export function isUnionType(value: any): value is JSONOutput.UnionType { - return typeof value == 'object' && value.type === 'union'; + return typeof value === 'object' && value.type === 'union'; } export function isUnknownType(value: any): value is JSONOutput.UnknownType { - return typeof value == 'object' && value.type === 'unknown'; + return typeof value === 'object' && value.type === 'unknown'; } export function isQueryType(value: any): value is QueryType { - return typeof value == 'object' && value.type === 'query'; + return typeof value === 'object' && value.type === 'query'; } diff --git a/packages/proxy-container/package.json b/packages/proxy-container/package.json index 7de606b19fc7..d92c99a2d673 100644 --- a/packages/proxy-container/package.json +++ b/packages/proxy-container/package.json @@ -50,13 +50,8 @@ }, "devDependencies": { "@types/node": "^16.11.56", - "@typescript-eslint/eslint-plugin": "^5.36.1", - "@typescript-eslint/parser": "^5.36.1", "eslint": "^8.23.0", - "eslint-config-marine": "^9.4.1", - "eslint-config-prettier": "^8.5.0", - "eslint-import-resolver-typescript": "^3.5.0", - "eslint-plugin-import": "^2.26.0", + "eslint-config-neon": "^0.1.23", "prettier": "^2.7.1", "rollup-plugin-typescript2": "^0.33.0", "typescript": "^4.8.2", diff --git a/packages/proxy-container/src/index.ts b/packages/proxy-container/src/index.ts index 8ddca58417c4..48284a8c1c44 100644 --- a/packages/proxy-container/src/index.ts +++ b/packages/proxy-container/src/index.ts @@ -1,4 +1,5 @@ import { createServer } from 'node:http'; +import process from 'node:process'; import { proxyRequests } from '@discordjs/proxy'; import { REST } from '@discordjs/rest'; @@ -11,5 +12,5 @@ const api = new REST({ rejectOnRateLimit: () => true, retries: 0 }).setToken(pro // eslint-disable-next-line @typescript-eslint/no-misused-promises const server = createServer(proxyRequests(api)); -const port = parseInt(process.env.PORT ?? '8080', 10); +const port = Number.parseInt(process.env.PORT ?? '8080', 10); server.listen(port, () => console.log(`Listening on port ${port}`)); diff --git a/packages/proxy/__tests__/proxyRequests.test.ts b/packages/proxy/__tests__/proxyRequests.test.ts index e010fec7bcc0..f956958be8b5 100644 --- a/packages/proxy/__tests__/proxyRequests.test.ts +++ b/packages/proxy/__tests__/proxyRequests.test.ts @@ -1,10 +1,10 @@ import { createServer } from 'node:http'; import { REST } from '@discordjs/rest'; import supertest from 'supertest'; -import { MockAgent, Interceptable, setGlobalDispatcher } from 'undici'; +import { MockAgent, setGlobalDispatcher, type Interceptable } from 'undici'; import type { MockInterceptor } from 'undici/types/mock-interceptor'; import { beforeEach, afterAll, afterEach, test, expect } from 'vitest'; -import { proxyRequests } from '../src'; +import { proxyRequests } from '../src/index.js'; let mockAgent: MockAgent; let mockPool: Interceptable; diff --git a/packages/proxy/package.json b/packages/proxy/package.json index 5aa3fdff88d3..8d2d3649540b 100644 --- a/packages/proxy/package.json +++ b/packages/proxy/package.json @@ -64,15 +64,10 @@ "@microsoft/api-extractor": "^7.29.5", "@types/node": "^16.11.56", "@types/supertest": "^2.0.12", - "@typescript-eslint/eslint-plugin": "^5.36.1", - "@typescript-eslint/parser": "^5.36.1", "@vitest/coverage-c8": "^0.22.1", "downlevel-dts": "^0.10.1", "eslint": "^8.23.0", - "eslint-config-marine": "^9.4.1", - "eslint-config-prettier": "^8.5.0", - "eslint-import-resolver-typescript": "^3.5.0", - "eslint-plugin-import": "^2.26.0", + "eslint-config-neon": "^0.1.23", "prettier": "^2.7.1", "rollup-plugin-typescript2": "^0.33.0", "supertest": "^6.2.4", diff --git a/packages/proxy/src/handlers/proxyRequests.ts b/packages/proxy/src/handlers/proxyRequests.ts index 823c9c14c615..1efb8601f355 100644 --- a/packages/proxy/src/handlers/proxyRequests.ts +++ b/packages/proxy/src/handlers/proxyRequests.ts @@ -1,11 +1,18 @@ import { URL } from 'node:url'; -import { DiscordAPIError, HTTPError, RateLimitError, RequestMethod, REST, RouteLike } from '@discordjs/rest'; +import { + DiscordAPIError, + HTTPError, + RateLimitError, + type RequestMethod, + type REST, + type RouteLike, +} from '@discordjs/rest'; import { populateAbortErrorResponse, populateGeneralErrorResponse, populateSuccessfulResponse, populateRatelimitErrorResponse, -} from '../util/responseHelpers'; +} from '../util/responseHelpers.js'; import type { RequestHandler } from '../util/util'; /** @@ -25,6 +32,7 @@ export function proxyRequests(rest: REST): RequestHandler { // The 2nd parameter is here so the URL constructor doesn't complain about an "invalid url" when the origin is missing // we don't actually care about the origin and the value passed is irrelevant + // eslint-disable-next-line prefer-named-capture-group, unicorn/no-unsafe-regex const fullRoute = new URL(url, 'http://noop').pathname.replace(/^\/api(\/v\d+)?/, '') as RouteLike; try { diff --git a/packages/proxy/src/index.ts b/packages/proxy/src/index.ts index 9faf38000709..3c5391723f48 100644 --- a/packages/proxy/src/index.ts +++ b/packages/proxy/src/index.ts @@ -1,3 +1,3 @@ -export * from './handlers/proxyRequests'; -export * from './util/responseHelpers'; -export type { RequestHandler } from './util/util'; +export * from './handlers/proxyRequests.js'; +export * from './util/responseHelpers.js'; +export type { RequestHandler } from './util/util.js'; diff --git a/packages/proxy/src/util/responseHelpers.ts b/packages/proxy/src/util/responseHelpers.ts index 638ed92a98fe..7127ab633426 100644 --- a/packages/proxy/src/util/responseHelpers.ts +++ b/packages/proxy/src/util/responseHelpers.ts @@ -47,7 +47,7 @@ export function populateGeneralErrorResponse(res: ServerResponse, error: Discord */ export function populateRatelimitErrorResponse(res: ServerResponse, error: RateLimitError): void { res.statusCode = 429; - res.setHeader('Retry-After', error.timeToReset / 1000); + res.setHeader('Retry-After', error.timeToReset / 1_000); } /** diff --git a/packages/proxy/src/util/util.ts b/packages/proxy/src/util/util.ts index 79e06a9ee213..58f77681df17 100644 --- a/packages/proxy/src/util/util.ts +++ b/packages/proxy/src/util/util.ts @@ -3,7 +3,7 @@ import type { IncomingMessage, ServerResponse } from 'node:http'; /** * Represents a potentially awaitable value */ -export type Awaitable = T | PromiseLike; +export type Awaitable = PromiseLike | T; /** * Represents a simple HTTP request handler diff --git a/packages/rest/__tests__/CDN.test.ts b/packages/rest/__tests__/CDN.test.ts index c7c6d413f6db..8efe234e587d 100644 --- a/packages/rest/__tests__/CDN.test.ts +++ b/packages/rest/__tests__/CDN.test.ts @@ -1,11 +1,11 @@ import { test, expect } from 'vitest'; -import { CDN } from '../src'; +import { CDN } from '../src/index.js'; const base = 'https://discord.com'; const id = '123456'; const hash = 'abcdef'; const animatedHash = 'a_bcdef'; -const defaultAvatar = 1234 % 5; +const defaultAvatar = 1_234 % 5; const cdn = new CDN(base); diff --git a/packages/rest/__tests__/DiscordAPIError.test.ts b/packages/rest/__tests__/DiscordAPIError.test.ts index 604df7216f77..05fe6703a2c6 100644 --- a/packages/rest/__tests__/DiscordAPIError.test.ts +++ b/packages/rest/__tests__/DiscordAPIError.test.ts @@ -1,5 +1,6 @@ +import { URLSearchParams } from 'node:url'; import { test, expect } from 'vitest'; -import { DiscordAPIError } from '../src'; +import { DiscordAPIError } from '../src/index.js'; test('Unauthorized', () => { const error = new DiscordAPIError( @@ -27,13 +28,13 @@ test('Unauthorized', () => { test('Invalid Form Body Error (error.{property}._errors.{index})', () => { const error = new DiscordAPIError( { - code: 50035, + code: 50_035, errors: { username: { _errors: [{ code: 'BASE_TYPE_BAD_LENGTH', message: 'Must be between 2 and 32 in length.' }] }, }, message: 'Invalid Form Body', }, - 50035, + 50_035, 400, 'PATCH', 'https://discord.com/api/v10/users/@me', @@ -45,7 +46,7 @@ test('Invalid Form Body Error (error.{property}._errors.{index})', () => { }, ); - expect(error.code).toEqual(50035); + expect(error.code).toEqual(50_035); expect(error.message).toEqual( ['Invalid Form Body', 'username[BASE_TYPE_BAD_LENGTH]: Must be between 2 and 32 in length.'].join('\n'), ); @@ -60,7 +61,7 @@ test('Invalid Form Body Error (error.{property}._errors.{index})', () => { test('Invalid FormFields Error (error.errors.{property}.{property}.{index}.{property}._errors.{index})', () => { const error = new DiscordAPIError( { - code: 50035, + code: 50_035, errors: { embed: { fields: { '0': { value: { _errors: [{ code: 'BASE_TYPE_REQUIRED', message: 'This field is required' }] } } }, @@ -68,14 +69,14 @@ test('Invalid FormFields Error (error.errors.{property}.{property}.{index}.{prop }, message: 'Invalid Form Body', }, - 50035, + 50_035, 400, 'POST', 'https://discord.com/api/v10/channels/:id', {}, ); - expect(error.code).toEqual(50035); + expect(error.code).toEqual(50_035); expect(error.message).toEqual( ['Invalid Form Body', 'embed.fields[0].value[BASE_TYPE_REQUIRED]: This field is required'].join('\n'), ); @@ -88,7 +89,7 @@ test('Invalid FormFields Error (error.errors.{property}.{property}.{index}.{prop test('Invalid FormFields Error (error.errors.{property}.{property}._errors.{index}._errors)', () => { const error = new DiscordAPIError( { - code: 50035, + code: 50_035, errors: { form_fields: { label: { _errors: [{ _errors: [{ code: 'BASE_TYPE_REQUIRED', message: 'This field is required' }] }] }, @@ -96,14 +97,14 @@ test('Invalid FormFields Error (error.errors.{property}.{property}._errors.{inde }, message: 'Invalid Form Body', }, - 50035, + 50_035, 400, 'PATCH', 'https://discord.com/api/v10/guilds/:id', {}, ); - expect(error.code).toEqual(50035); + expect(error.code).toEqual(50_035); expect(error.message).toEqual( ['Invalid Form Body', 'form_fields.label[0][BASE_TYPE_REQUIRED]: This field is required'].join('\n'), ); diff --git a/packages/rest/__tests__/REST.test.ts b/packages/rest/__tests__/REST.test.ts index 946771656cd3..ee9c854a137b 100644 --- a/packages/rest/__tests__/REST.test.ts +++ b/packages/rest/__tests__/REST.test.ts @@ -1,10 +1,14 @@ +import { Buffer } from 'node:buffer'; +import { URLSearchParams } from 'node:url'; import { DiscordSnowflake } from '@sapphire/snowflake'; -import { Routes, Snowflake } from 'discord-api-types/v10'; -import { File, FormData, MockAgent, setGlobalDispatcher } from 'undici'; +import type { Snowflake } from 'discord-api-types/v10'; +import { Routes } from 'discord-api-types/v10'; +import type { FormData } from 'undici'; +import { File, MockAgent, setGlobalDispatcher } from 'undici'; import type { Interceptable, MockInterceptor } from 'undici/types/mock-interceptor'; import { beforeEach, afterEach, test, expect } from 'vitest'; -import { genPath } from './util'; -import { REST } from '../src'; +import { REST } from '../src/index.js'; +import { genPath } from './util.js'; const newSnowflake: Snowflake = DiscordSnowflake.generate().toString(); @@ -142,7 +146,7 @@ test('getQuery', async () => { expect( await api.get('/getQuery', { - query: query, + query, }), ).toStrictEqual({ test: true }); }); @@ -153,8 +157,8 @@ test('getAuth', async () => { path: genPath('/getAuth'), method: 'GET', }) - .reply((t) => ({ - data: { auth: (t.headers as unknown as Record)['Authorization'] ?? null }, + .reply((from) => ({ + data: { auth: (from.headers as unknown as Record).Authorization ?? null }, statusCode: 200, responseOptions, })) @@ -184,8 +188,8 @@ test('getReason', async () => { path: genPath('/getReason'), method: 'GET', }) - .reply((t) => ({ - data: { reason: (t.headers as unknown as Record)['X-Audit-Log-Reason'] ?? null }, + .reply((from) => ({ + data: { reason: (from.headers as unknown as Record)['X-Audit-Log-Reason'] ?? null }, statusCode: 200, responseOptions, })) @@ -215,8 +219,8 @@ test('urlEncoded', async () => { path: genPath('/urlEncoded'), method: 'POST', }) - .reply((t) => ({ - data: t.body!, + .reply((from) => ({ + data: from.body!, statusCode: 200, })); @@ -245,8 +249,8 @@ test('postEcho', async () => { path: genPath('/postEcho'), method: 'POST', }) - .reply((t) => ({ - data: t.body!, + .reply((from) => ({ + data: from.body!, statusCode: 200, responseOptions, })); @@ -260,8 +264,8 @@ test('201 status code', async () => { path: genPath('/postNon200StatusCode'), method: 'POST', }) - .reply((t) => ({ - data: t.body!, + .reply((from) => ({ + data: from.body!, statusCode: 201, responseOptions, })); diff --git a/packages/rest/__tests__/RequestHandler.test.ts b/packages/rest/__tests__/RequestHandler.test.ts index 3dc5bbc06702..2bd7330a587a 100644 --- a/packages/rest/__tests__/RequestHandler.test.ts +++ b/packages/rest/__tests__/RequestHandler.test.ts @@ -1,15 +1,18 @@ +/* eslint-disable id-length */ +/* eslint-disable promise/prefer-await-to-then */ import { performance } from 'node:perf_hooks'; +import { setInterval, clearInterval } from 'node:timers'; import { MockAgent, setGlobalDispatcher } from 'undici'; import type { Interceptable, MockInterceptor } from 'undici/types/mock-interceptor'; import { beforeEach, afterEach, test, expect, vitest } from 'vitest'; -import { genPath } from './util'; -import { DiscordAPIError, HTTPError, RateLimitError, REST, RESTEvents } from '../src'; +import { DiscordAPIError, HTTPError, RateLimitError, REST, RESTEvents } from '../src/index.js'; +import { genPath } from './util.js'; let mockAgent: MockAgent; let mockPool: Interceptable; -const api = new REST({ timeout: 2000, offset: 5 }).setToken('A-Very-Fake-Token'); -const invalidAuthApi = new REST({ timeout: 2000 }).setToken('Definitely-Not-A-Fake-Token'); +const api = new REST({ timeout: 2_000, offset: 5 }).setToken('A-Very-Fake-Token'); +const invalidAuthApi = new REST({ timeout: 2_000 }).setToken('Definitely-Not-A-Fake-Token'); const rateLimitErrorApi = new REST({ rejectOnRateLimit: ['/channels'] }).setToken('Obviously-Not-A-Fake-Token'); beforeEach(() => { @@ -52,7 +55,7 @@ const sublimitIntervals: { }; const sublimit = { body: { name: 'newname' } }; -const noSublimit = { body: { bitrate: 40000 } }; +const noSublimit = { body: { bitrate: 40_000 } }; function startSublimitIntervals() { // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition @@ -63,13 +66,14 @@ function startSublimitIntervals() { sublimitResetAfter = Date.now() + 250; }, 250); } + // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition if (!sublimitIntervals.retry) { - retryAfter = Date.now() + 1000; + retryAfter = Date.now() + 1_000; sublimitIntervals.retry = setInterval(() => { sublimitHits = 0; - retryAfter = Date.now() + 1000; - }, 1000); + retryAfter = Date.now() + 1_000; + }, 1_000); } } @@ -80,7 +84,7 @@ test('Significant Invalid Requests', async () => { path: genPath('/badRequest'), method: 'GET', }) - .reply(403, { message: 'Missing Permissions', code: 50013 }, responseOptions) + .reply(403, { message: 'Missing Permissions', code: 50_013 }, responseOptions) .times(10); const invalidListener = vitest.fn(); @@ -89,6 +93,7 @@ test('Significant Invalid Requests', async () => { // Ensure listeners on REST do not get double added api.on(RESTEvents.InvalidRequestWarning, invalidListener2); api.off(RESTEvents.InvalidRequestWarning, invalidListener2); + const [a, b, c, d, e] = [ api.get('/badRequest'), api.get('/badRequest'), @@ -102,7 +107,9 @@ test('Significant Invalid Requests', async () => { await expect(d).rejects.toThrowError('Missing Permissions'); await expect(e).rejects.toThrowError('Missing Permissions'); expect(invalidListener).toHaveBeenCalledTimes(0); + // eslint-disable-next-line require-atomic-updates api.requestManager.options.invalidRequestWarningInterval = 2; + const [f, g, h, i, j] = [ api.get('/badRequest'), api.get('/badRequest'), @@ -137,7 +144,7 @@ test('Handle standard rate limits', async () => { headers: { 'x-ratelimit-limit': '1', 'x-ratelimit-remaining': '0', - 'x-ratelimit-reset-after': ((resetAfter - Date.now()) / 1000).toString(), + 'x-ratelimit-reset-after': ((resetAfter - Date.now()) / 1_000).toString(), 'x-ratelimit-bucket': '80c17d2f203122d936070c88c8d10f33', via: '1.1 google', }, @@ -150,7 +157,7 @@ test('Handle standard rate limits', async () => { data: { limit: '1', remaining: '0', - resetAfter: (resetAfter / 1000).toString(), + resetAfter: (resetAfter / 1_000).toString(), bucket: '80c17d2f203122d936070c88c8d10f33', retryAfter: (resetAfter - Date.now()).toString(), }, @@ -158,7 +165,7 @@ test('Handle standard rate limits', async () => { headers: { 'x-ratelimit-limit': '1', 'x-ratelimit-remaining': '0', - 'x-ratelimit-reset-after': ((resetAfter - Date.now()) / 1000).toString(), + 'x-ratelimit-reset-after': ((resetAfter - Date.now()) / 1_000).toString(), 'x-ratelimit-bucket': '80c17d2f203122d936070c88c8d10f33', 'retry-after': (resetAfter - Date.now()).toString(), via: '1.1 google', @@ -187,8 +194,8 @@ test('Handle sublimits', async () => { path: genPath('/channels/:id'), method: 'PATCH', }) - .reply((t) => { - const body = JSON.parse(t.body as string) as Record; + .reply((from) => { + const body = JSON.parse(from.body as string) as Record; if ('name' in body || 'topic' in body) { sublimitHits += 1; @@ -204,7 +211,7 @@ test('Handle sublimits', async () => { headers: { 'x-ratelimit-limit': '10', 'x-ratelimit-remaining': `${10 - sublimitRequests}`, - 'x-ratelimit-reset-after': ((sublimitResetAfter - Date.now()) / 1000).toString(), + 'x-ratelimit-reset-after': ((sublimitResetAfter - Date.now()) / 1_000).toString(), via: '1.1 google', }, }, @@ -216,15 +223,15 @@ test('Handle sublimits', async () => { data: { limit: '10', remaining: `${10 - sublimitRequests}`, - resetAfter: (sublimitResetAfter / 1000).toString(), - retryAfter: ((retryAfter - Date.now()) / 1000).toString(), + resetAfter: (sublimitResetAfter / 1_000).toString(), + retryAfter: ((retryAfter - Date.now()) / 1_000).toString(), }, responseOptions: { headers: { 'x-ratelimit-limit': '10', 'x-ratelimit-remaining': `${10 - sublimitRequests}`, - 'x-ratelimit-reset-after': ((sublimitResetAfter - Date.now()) / 1000).toString(), - 'retry-after': ((retryAfter - Date.now()) / 1000).toString(), + 'x-ratelimit-reset-after': ((sublimitResetAfter - Date.now()) / 1_000).toString(), + 'retry-after': ((retryAfter - Date.now()) / 1_000).toString(), via: '1.1 google', ...responseOptions.headers, }, @@ -243,7 +250,7 @@ test('Handle sublimits', async () => { headers: { 'x-ratelimit-limit': '10', 'x-ratelimit-remaining': `${10 - sublimitRequests}`, - 'x-ratelimit-reset-after': ((sublimitResetAfter - Date.now()) / 1000).toString(), + 'x-ratelimit-reset-after': ((sublimitResetAfter - Date.now()) / 1_000).toString(), via: '1.1 google', }, }, @@ -255,15 +262,15 @@ test('Handle sublimits', async () => { data: { limit: '10', remaining: `${10 - sublimitRequests}`, - resetAfter: (sublimitResetAfter / 1000).toString(), - retryAfter: ((sublimitResetAfter - Date.now()) / 1000).toString(), + resetAfter: (sublimitResetAfter / 1_000).toString(), + retryAfter: ((sublimitResetAfter - Date.now()) / 1_000).toString(), }, responseOptions: { headers: { 'x-ratelimit-limit': '10', 'x-ratelimit-remaining': `${10 - sublimitRequests}`, - 'x-ratelimit-reset-after': ((sublimitResetAfter - Date.now()) / 1000).toString(), - 'retry-after': ((sublimitResetAfter - Date.now()) / 1000).toString(), + 'x-ratelimit-reset-after': ((sublimitResetAfter - Date.now()) / 1_000).toString(), + 'retry-after': ((sublimitResetAfter - Date.now()) / 1_000).toString(), via: '1.1 google', ...responseOptions.headers, }, @@ -294,6 +301,7 @@ test('Handle sublimits', async () => { api.patch('/channels/:id', sublimit).then(() => Date.now()), api.patch('/channels/:id', noSublimit).then(() => Date.now()), ]); // For additional sublimited checks + const e = await eP; expect(a).toBeLessThanOrEqual(b); @@ -314,6 +322,7 @@ test('Handle sublimits', async () => { rateLimitErrorApi.patch('/channels/:id', sublimit), rateLimitErrorApi.patch('/channels/:id', sublimit), ]; + // eslint-disable-next-line @typescript-eslint/await-thenable await expect(aP2).resolves; await expect(bP2).rejects.toThrowError(); await expect(bP2).rejects.toBeInstanceOf(RateLimitError); @@ -364,8 +373,8 @@ test('Handle unexpected 429', async () => { expect(await unexepectedSublimit).toStrictEqual({ test: true }); expect(await queuedSublimit).toStrictEqual({ test: true }); - expect(performance.now()).toBeGreaterThanOrEqual(previous + 1000); - // @ts-expect-error + expect(performance.now()).toBeGreaterThanOrEqual(previous + 1_000); + // @ts-expect-error: This is intentional expect(secondResolvedTime).toBeGreaterThan(firstResolvedTime); }); @@ -400,7 +409,7 @@ test('Handle unexpected 429 cloudflare', async () => { const previous = Date.now(); expect(await api.get('/unexpected-cf')).toStrictEqual({ test: true }); - expect(Date.now()).toBeGreaterThanOrEqual(previous + 1000); + expect(Date.now()).toBeGreaterThanOrEqual(previous + 1_000); }); test('Handle global rate limits', async () => { @@ -486,7 +495,7 @@ test('server responding too slow', async () => { const promise = api2.get('/slow'); await expect(promise).rejects.toThrowError('Request aborted'); -}, 1000); +}, 1_000); test('Unauthorized', async () => { mockPool @@ -518,7 +527,7 @@ test('Bad Request', async () => { path: genPath('/badRequest'), method: 'GET', }) - .reply(403, { message: 'Missing Permissions', code: 50013 }, responseOptions); + .reply(403, { message: 'Missing Permissions', code: 50_013 }, responseOptions); const promise = api.get('/badRequest'); await expect(promise).rejects.toThrowError('Missing Permissions'); diff --git a/packages/rest/__tests__/RequestManager.test.ts b/packages/rest/__tests__/RequestManager.test.ts index 947a861a177b..73dcf6285365 100644 --- a/packages/rest/__tests__/RequestManager.test.ts +++ b/packages/rest/__tests__/RequestManager.test.ts @@ -1,8 +1,7 @@ -import { MockAgent, setGlobalDispatcher } from 'undici'; -import type { Interceptable } from 'undici/types/mock-interceptor'; +import { MockAgent, setGlobalDispatcher, type Interceptable } from 'undici'; import { beforeEach, afterEach, test, expect } from 'vitest'; -import { genPath } from './util'; -import { REST } from '../src'; +import { REST } from '../src/index.js'; +import { genPath } from './util.js'; const api = new REST(); @@ -35,7 +34,7 @@ test('no token', async () => { }); test('negative offset', () => { - const badREST = new REST({ offset: -5000 }); + const badREST = new REST({ offset: -5_000 }); expect(badREST.requestManager.options.offset).toEqual(0); }); diff --git a/packages/rest/__tests__/Util.test.ts b/packages/rest/__tests__/Util.test.ts index d323efc7d7f1..76504b974962 100644 --- a/packages/rest/__tests__/Util.test.ts +++ b/packages/rest/__tests__/Util.test.ts @@ -1,6 +1,7 @@ -import { Blob } from 'node:buffer'; +import { Blob, Buffer } from 'node:buffer'; +import { URLSearchParams } from 'node:url'; import { test, expect } from 'vitest'; -import { resolveBody, parseHeader } from '../src/lib/utils/utils'; +import { resolveBody, parseHeader } from '../src/lib/utils/utils.js'; test('GIVEN string parseHeader returns string', () => { const header = 'application/json'; @@ -37,7 +38,7 @@ test('resolveBody', async () => { const iterable: Iterable = { *[Symbol.iterator]() { - for (let i = 0; i < 3; i++) { + for (let index = 0; index < 3; index++) { yield new Uint8Array([1, 2, 3]); } }, @@ -46,15 +47,15 @@ test('resolveBody', async () => { const asyncIterable: AsyncIterable = { [Symbol.asyncIterator]() { - let i = 0; + let index = 0; return { - next() { - if (i < 3) { - i++; - return Promise.resolve({ value: new Uint8Array([1, 2, 3]), done: false }); + async next() { + if (index < 3) { + index++; + return { value: new Uint8Array([1, 2, 3]), done: false }; } - return Promise.resolve({ value: undefined, done: true }); + return { value: undefined, done: true }; }, }; }, diff --git a/packages/rest/__tests__/util.ts b/packages/rest/__tests__/util.ts index 6ef1c435b316..a1241cc69cd0 100644 --- a/packages/rest/__tests__/util.ts +++ b/packages/rest/__tests__/util.ts @@ -1,4 +1,4 @@ -import { DefaultRestOptions } from '../src'; +import { DefaultRestOptions } from '../src/index.js'; export function genPath(path: `/${string}`) { return `/api/v${DefaultRestOptions.version}${path}` as const; diff --git a/packages/rest/__tests__/utils.test.ts b/packages/rest/__tests__/utils.test.ts index b5ded819f109..90482b9ada56 100644 --- a/packages/rest/__tests__/utils.test.ts +++ b/packages/rest/__tests__/utils.test.ts @@ -1,5 +1,5 @@ import { describe, test, expect } from 'vitest'; -import { makeURLSearchParams } from '../src'; +import { makeURLSearchParams } from '../src/index.js'; describe('makeURLSearchParams', () => { test('GIVEN undefined THEN returns empty URLSearchParams', () => { @@ -41,7 +41,7 @@ describe('makeURLSearchParams', () => { describe('objects', () => { test('GIVEN a record of date values THEN URLSearchParams with ISO string values', () => { - const params = makeURLSearchParams({ before: new Date('2022-04-04T15:43:05.108Z'), after: new Date(NaN) }); + const params = makeURLSearchParams({ before: new Date('2022-04-04T15:43:05.108Z'), after: new Date(Number.NaN) }); expect([...params.entries()]).toEqual([['before', '2022-04-04T15:43:05.108Z']]); }); diff --git a/packages/rest/package.json b/packages/rest/package.json index 6d9351d1fc16..6d117b113b98 100644 --- a/packages/rest/package.json +++ b/packages/rest/package.json @@ -65,16 +65,10 @@ "@favware/cliff-jumper": "^1.8.7", "@microsoft/api-extractor": "^7.29.5", "@types/node": "^16.11.56", - "@typescript-eslint/eslint-plugin": "^5.36.1", - "@typescript-eslint/parser": "^5.36.1", "@vitest/coverage-c8": "^0.22.1", "downlevel-dts": "^0.10.1", "eslint": "^8.23.0", - "eslint-config-marine": "^9.4.1", - "eslint-config-prettier": "^8.5.0", - "eslint-import-resolver-typescript": "^3.5.0", - "eslint-plugin-import": "^2.26.0", - "eslint-plugin-tsdoc": "^0.2.16", + "eslint-config-neon": "^0.1.23", "prettier": "^2.7.1", "rollup-plugin-typescript2": "^0.33.0", "typescript": "^4.8.2", diff --git a/packages/rest/src/index.ts b/packages/rest/src/index.ts index eee7ee0c1791..ab6fa949ba67 100644 --- a/packages/rest/src/index.ts +++ b/packages/rest/src/index.ts @@ -1,8 +1,8 @@ -export * from './lib/CDN'; -export * from './lib/errors/DiscordAPIError'; -export * from './lib/errors/HTTPError'; -export * from './lib/errors/RateLimitError'; -export * from './lib/RequestManager'; -export * from './lib/REST'; -export * from './lib/utils/constants'; -export { makeURLSearchParams, parseResponse } from './lib/utils/utils'; +export * from './lib/CDN.js'; +export * from './lib/errors/DiscordAPIError.js'; +export * from './lib/errors/HTTPError.js'; +export * from './lib/errors/RateLimitError.js'; +export * from './lib/RequestManager.js'; +export * from './lib/REST.js'; +export * from './lib/utils/constants.js'; +export { makeURLSearchParams, parseResponse } from './lib/utils/utils.js'; diff --git a/packages/rest/src/lib/CDN.ts b/packages/rest/src/lib/CDN.ts index 0385adc03d4d..327225fd4aed 100644 --- a/packages/rest/src/lib/CDN.ts +++ b/packages/rest/src/lib/CDN.ts @@ -1,12 +1,14 @@ +/* eslint-disable jsdoc/check-param-names */ +import { URL } from 'node:url'; import { ALLOWED_EXTENSIONS, ALLOWED_SIZES, ALLOWED_STICKER_EXTENSIONS, DefaultRestOptions, - ImageExtension, - ImageSize, - StickerExtension, -} from './utils/constants'; + type ImageExtension, + type ImageSize, + type StickerExtension, +} from './utils/constants.js'; /** * The options used for image URLs @@ -38,6 +40,10 @@ export interface ImageURLOptions extends BaseImageURLOptions { * The options to use when making a CDN URL */ export interface MakeURLOptions { + /** + * The allowed extensions that can be used + */ + allowedExtensions?: readonly string[]; /** * The extension to use for the image URL * @@ -48,10 +54,6 @@ export interface MakeURLOptions { * The size specified in the image URL */ size?: ImageSize; - /** - * The allowed extensions that can be used - */ - allowedExtensions?: ReadonlyArray; } /** @@ -192,6 +194,7 @@ export class CDN { /** * Generates a URL for the icon of a role + * * @param roleId - The id of the role that has the icon * @param roleIconHash - The hash provided by Discord for this role icon * @param options - Optional options for the role icon @@ -285,6 +288,7 @@ export class CDN { route: string, { allowedExtensions = ALLOWED_EXTENSIONS, extension = 'webp', size }: Readonly = {}, ): string { + // eslint-disable-next-line no-param-reassign extension = String(extension).toLowerCase(); if (!allowedExtensions.includes(extension)) { diff --git a/packages/rest/src/lib/REST.ts b/packages/rest/src/lib/REST.ts index adb148a487a3..7b2a1afd4060 100644 --- a/packages/rest/src/lib/REST.ts +++ b/packages/rest/src/lib/REST.ts @@ -1,19 +1,19 @@ import { EventEmitter } from 'node:events'; import type { Collection } from '@discordjs/collection'; import type { request, Dispatcher } from 'undici'; -import { CDN } from './CDN'; +import { CDN } from './CDN.js'; import { - HandlerRequestData, - InternalRequest, - RequestData, RequestManager, RequestMethod, - RouteLike, -} from './RequestManager'; -import type { HashData } from './RequestManager'; + type HashData, + type HandlerRequestData, + type InternalRequest, + type RequestData, + type RouteLike, +} from './RequestManager.js'; import type { IHandler } from './handlers/IHandler'; -import { DefaultRestOptions, RESTEvents } from './utils/constants'; -import { parseResponse } from './utils/utils'; +import { DefaultRestOptions, RESTEvents } from './utils/constants.js'; +import { parseResponse } from './utils/utils.js'; /** * Options to be passed when creating the REST instance @@ -25,6 +25,7 @@ export interface RESTOptions { agent: Dispatcher; /** * The base api path, without version + * * @defaultValue `'https://discord.com/api'` */ api: string; @@ -34,13 +35,37 @@ export interface RESTOptions { * * @defaultValue `'Bot'` */ - authPrefix: 'Bot' | 'Bearer'; + authPrefix: 'Bearer' | 'Bot'; /** * The cdn path * * @defaultValue 'https://cdn.discordapp.com' */ cdn: string; + /** + * How many requests to allow sending per second (Infinity for unlimited, 50 for the standard global limit used by Discord) + * + * @defaultValue `50` + */ + globalRequestsPerSecond: number; + /** + * The amount of time in milliseconds that passes between each hash sweep. (defaults to 1h) + * + * @defaultValue `3_600_000` + */ + handlerSweepInterval: number; + /** + * The maximum amount of time a hash can exist in milliseconds without being hit with a request (defaults to 24h) + * + * @defaultValue `86_400_000` + */ + hashLifetime: number; + /** + * The amount of time in milliseconds that passes between each hash sweep. (defaults to 4h) + * + * @defaultValue `14_400_000` + */ + hashSweepInterval: number; /** * Additional headers to send for all API requests * @@ -54,12 +79,6 @@ export interface RESTOptions { * @defaultValue `0` */ invalidRequestWarningInterval: number; - /** - * How many requests to allow sending per second (Infinity for unlimited, 50 for the standard global limit used by Discord) - * - * @defaultValue `50` - */ - globalRequestsPerSecond: number; /** * The extra offset to add to rate limits in milliseconds * @@ -74,7 +93,7 @@ export interface RESTOptions { * * @defaultValue `null` */ - rejectOnRateLimit: string[] | RateLimitQueueFilter | null; + rejectOnRateLimit: RateLimitQueueFilter | string[] | null; /** * The number of retries for errors with the 500 code, or errors * that timeout @@ -100,24 +119,6 @@ export interface RESTOptions { * @defaultValue `'10'` */ version: string; - /** - * The amount of time in milliseconds that passes between each hash sweep. (defaults to 4h) - * - * @defaultValue `14_400_000` - */ - hashSweepInterval: number; - /** - * The maximum amount of time a hash can exist in milliseconds without being hit with a request (defaults to 24h) - * - * @defaultValue `86_400_000` - */ - hashLifetime: number; - /** - * The amount of time in milliseconds that passes between each hash sweep. (defaults to 1h) - * - * @defaultValue `3_600_000` - */ - handlerSweepInterval: number; } /** @@ -125,72 +126,72 @@ export interface RESTOptions { */ export interface RateLimitData { /** - * The time, in milliseconds, until the request-lock is reset + * Whether the rate limit that was reached was the global limit */ - timeToReset: number; + global: boolean; /** - * The amount of requests we can perform before locking requests + * The bucket hash for this request */ - limit: number; + hash: string; /** - * The HTTP method being performed + * The amount of requests we can perform before locking requests */ - method: string; + limit: number; /** - * The bucket hash for this request + * The major parameter of the route + * + * For example, in `/channels/x`, this will be `x`. + * If there is no major parameter (e.g: `/bot/gateway`) this will be `global`. */ - hash: string; + majorParameter: string; /** - * The full URL for this request + * The HTTP method being performed */ - url: string; + method: string; /** * The route being hit in this request */ route: string; /** - * The major parameter of the route - * - * For example, in `/channels/x`, this will be `x`. - * If there is no major parameter (e.g: `/bot/gateway`) this will be `global`. + * The time, in milliseconds, until the request-lock is reset */ - majorParameter: string; + timeToReset: number; /** - * Whether the rate limit that was reached was the global limit + * The full URL for this request */ - global: boolean; + url: string; } /** * A function that determines whether the rate limit hit should throw an Error */ -export type RateLimitQueueFilter = (rateLimitData: RateLimitData) => boolean | Promise; +export type RateLimitQueueFilter = (rateLimitData: RateLimitData) => Promise | boolean; export interface APIRequest { /** - * The HTTP method used in this request - */ - method: string; - /** - * The full path used to make the request + * The data that was used to form the body of this request */ - path: RouteLike; + data: HandlerRequestData; /** - * The API route identifying the ratelimit for this request + * The HTTP method used in this request */ - route: string; + method: string; /** * Additional HTTP options for this request */ options: RequestOptions; /** - * The data that was used to form the body of this request + * The full path used to make the request */ - data: HandlerRequestData; + path: RouteLike; /** * The number of times this request has been attempted */ retries: number; + /** + * The API route identifying the ratelimit for this request + */ + route: string; } export interface InvalidRequestWarningData { @@ -205,29 +206,29 @@ export interface InvalidRequestWarningData { } export interface RestEvents { + handlerSweep: [sweptHandlers: Collection]; + hashSweep: [sweptHashes: Collection]; invalidRequestWarning: [invalidRequestInfo: InvalidRequestWarningData]; - restDebug: [info: string]; - rateLimited: [rateLimitInfo: RateLimitData]; - response: [request: APIRequest, response: Dispatcher.ResponseData]; newListener: [name: string, listener: (...args: any) => void]; + rateLimited: [rateLimitInfo: RateLimitData]; removeListener: [name: string, listener: (...args: any) => void]; - hashSweep: [sweptHashes: Collection]; - handlerSweep: [sweptHandlers: Collection]; + response: [request: APIRequest, response: Dispatcher.ResponseData]; + restDebug: [info: string]; } export interface REST { - on: ((event: K, listener: (...args: RestEvents[K]) => void) => this) & - ((event: Exclude, listener: (...args: any[]) => void) => this); - - once: ((event: K, listener: (...args: RestEvents[K]) => void) => this) & - ((event: Exclude, listener: (...args: any[]) => void) => this); - emit: ((event: K, ...args: RestEvents[K]) => boolean) & ((event: Exclude, ...args: any[]) => boolean); off: ((event: K, listener: (...args: RestEvents[K]) => void) => this) & ((event: Exclude, listener: (...args: any[]) => void) => this); + on: ((event: K, listener: (...args: RestEvents[K]) => void) => this) & + ((event: Exclude, listener: (...args: any[]) => void) => this); + + once: ((event: K, listener: (...args: RestEvents[K]) => void) => this) & + ((event: Exclude, listener: (...args: any[]) => void) => this); + removeAllListeners: ((event?: K) => this) & ((event?: Exclude) => this); } @@ -236,6 +237,7 @@ export type RequestOptions = Exclude[1], undefined>; export class REST extends EventEmitter { public readonly cdn: CDN; + public readonly requestManager: RequestManager; public constructor(options: Partial = {}) { @@ -288,7 +290,7 @@ export class REST extends EventEmitter { * @param fullRoute - The full route to query * @param options - Optional request options */ - public get(fullRoute: RouteLike, options: RequestData = {}) { + public async get(fullRoute: RouteLike, options: RequestData = {}) { return this.request({ ...options, fullRoute, method: RequestMethod.Get }); } @@ -298,7 +300,7 @@ export class REST extends EventEmitter { * @param fullRoute - The full route to query * @param options - Optional request options */ - public delete(fullRoute: RouteLike, options: RequestData = {}) { + public async delete(fullRoute: RouteLike, options: RequestData = {}) { return this.request({ ...options, fullRoute, method: RequestMethod.Delete }); } @@ -308,7 +310,7 @@ export class REST extends EventEmitter { * @param fullRoute - The full route to query * @param options - Optional request options */ - public post(fullRoute: RouteLike, options: RequestData = {}) { + public async post(fullRoute: RouteLike, options: RequestData = {}) { return this.request({ ...options, fullRoute, method: RequestMethod.Post }); } @@ -318,7 +320,7 @@ export class REST extends EventEmitter { * @param fullRoute - The full route to query * @param options - Optional request options */ - public put(fullRoute: RouteLike, options: RequestData = {}) { + public async put(fullRoute: RouteLike, options: RequestData = {}) { return this.request({ ...options, fullRoute, method: RequestMethod.Put }); } @@ -328,7 +330,7 @@ export class REST extends EventEmitter { * @param fullRoute - The full route to query * @param options - Optional request options */ - public patch(fullRoute: RouteLike, options: RequestData = {}) { + public async patch(fullRoute: RouteLike, options: RequestData = {}) { return this.request({ ...options, fullRoute, method: RequestMethod.Patch }); } @@ -347,7 +349,7 @@ export class REST extends EventEmitter { * * @param options - Request options */ - public raw(options: InternalRequest) { + public async raw(options: InternalRequest) { return this.requestManager.queueRequest(options); } } diff --git a/packages/rest/src/lib/RequestManager.ts b/packages/rest/src/lib/RequestManager.ts index 3ef43edc01d6..594ad128df40 100644 --- a/packages/rest/src/lib/RequestManager.ts +++ b/packages/rest/src/lib/RequestManager.ts @@ -1,16 +1,20 @@ -import { Blob } from 'node:buffer'; +import { Blob, Buffer } from 'node:buffer'; import { EventEmitter } from 'node:events'; +import { setInterval, clearInterval } from 'node:timers'; +import type { URLSearchParams } from 'node:url'; import { Collection } from '@discordjs/collection'; import { DiscordSnowflake } from '@sapphire/snowflake'; -import { FormData, type RequestInit, type BodyInit, type Dispatcher, Agent } from 'undici'; +import { FormData, type RequestInit, type BodyInit, type Dispatcher, type Agent } from 'undici'; import type { RESTOptions, RestEvents, RequestOptions } from './REST'; import type { IHandler } from './handlers/IHandler'; -import { SequentialHandler } from './handlers/SequentialHandler'; -import { DefaultRestOptions, DefaultUserAgent, RESTEvents } from './utils/constants'; -import { resolveBody } from './utils/utils'; +import { SequentialHandler } from './handlers/SequentialHandler.js'; +import { DefaultRestOptions, DefaultUserAgent, RESTEvents } from './utils/constants.js'; +import { resolveBody } from './utils/utils.js'; // Make this a lazy dynamic import as file-type is a pure ESM package -const getFileType = (): Promise => { +// eslint-disable-next-line @typescript-eslint/consistent-type-imports +const getFileType = async (): Promise => { + // eslint-disable-next-line @typescript-eslint/consistent-type-imports let cached: Promise; return (cached ??= import('file-type')); }; @@ -20,9 +24,13 @@ const getFileType = (): Promise => { */ export interface RawFile { /** - * The name of the file + * Content-Type of the file */ - name: string; + contentType?: string; + /** + * The actual data for the file + */ + data: Buffer | boolean | number | string; /** * An explicit key to use for key of the formdata field for this file. * When not provided, the index of the file in the files array is used in the form `files[${index}]`. @@ -30,13 +38,9 @@ export interface RawFile { */ key?: string; /** - * The actual data for the file - */ - data: string | number | boolean | Buffer; - /** - * Content-Type of the file + * The name of the file */ - contentType?: string; + name: string; } /** @@ -58,7 +62,7 @@ export interface RequestData { * * @defaultValue `'Bot'` */ - authPrefix?: 'Bot' | 'Bearer'; + authPrefix?: 'Bearer' | 'Bot'; /** * The body to send to this request. * If providing as BodyInit, set `passThroughBody: true` @@ -125,11 +129,11 @@ export type RouteLike = `/${string}`; * @internal */ export interface InternalRequest extends RequestData { - method: RequestMethod; fullRoute: RouteLike; + method: RequestMethod; } -export type HandlerRequestData = Pick; +export type HandlerRequestData = Pick; /** * Parsed route data for an endpoint @@ -137,8 +141,8 @@ export type HandlerRequestData = Pick(event: K, listener: (...args: RestEvents[K]) => void) => this) & - ((event: Exclude, listener: (...args: any[]) => void) => this); - - once: ((event: K, listener: (...args: RestEvents[K]) => void) => this) & - ((event: Exclude, listener: (...args: any[]) => void) => this); - emit: ((event: K, ...args: RestEvents[K]) => boolean) & ((event: Exclude, ...args: any[]) => boolean); off: ((event: K, listener: (...args: RestEvents[K]) => void) => this) & ((event: Exclude, listener: (...args: any[]) => void) => this); + on: ((event: K, listener: (...args: RestEvents[K]) => void) => this) & + ((event: Exclude, listener: (...args: any[]) => void) => this); + + once: ((event: K, listener: (...args: RestEvents[K]) => void) => this) & + ((event: Exclude, listener: (...args: any[]) => void) => this); + removeAllListeners: ((event?: K) => this) & ((event?: Exclude) => this); } @@ -178,6 +182,7 @@ export class RequestManager extends EventEmitter { * performed by this manager. */ public agent: Dispatcher | null = null; + /** * The number of requests remaining in the global bucket */ @@ -207,6 +212,7 @@ export class RequestManager extends EventEmitter { #token: string | null = null; private hashTimer!: NodeJS.Timer; + private handlerTimer!: NodeJS.Timer; public readonly options: RESTOptions; @@ -223,34 +229,35 @@ export class RequestManager extends EventEmitter { } private setupSweepers() { + // eslint-disable-next-line unicorn/consistent-function-scoping const validateMaxInterval = (interval: number) => { if (interval > 14_400_000) { throw new Error('Cannot set an interval greater than 4 hours'); } }; - if (this.options.hashSweepInterval !== 0 && this.options.hashSweepInterval !== Infinity) { + if (this.options.hashSweepInterval !== 0 && this.options.hashSweepInterval !== Number.POSITIVE_INFINITY) { validateMaxInterval(this.options.hashSweepInterval); this.hashTimer = setInterval(() => { const sweptHashes = new Collection(); const currentDate = Date.now(); // Begin sweeping hash based on lifetimes - this.hashes.sweep((v, k) => { + this.hashes.sweep((val, key) => { // `-1` indicates a global hash - if (v.lastAccess === -1) return false; + if (val.lastAccess === -1) return false; // Check if lifetime has been exceeded - const shouldSweep = Math.floor(currentDate - v.lastAccess) > this.options.hashLifetime; + const shouldSweep = Math.floor(currentDate - val.lastAccess) > this.options.hashLifetime; // Add hash to collection of swept hashes if (shouldSweep) { // Add to swept hashes - sweptHashes.set(k, v); + sweptHashes.set(key, val); } // Emit debug information - this.emit(RESTEvents.Debug, `Hash ${v.value} for ${k} swept due to lifetime being exceeded`); + this.emit(RESTEvents.Debug, `Hash ${val.value} for ${key} swept due to lifetime being exceeded`); return shouldSweep; }); @@ -260,21 +267,21 @@ export class RequestManager extends EventEmitter { }, this.options.hashSweepInterval).unref(); } - if (this.options.handlerSweepInterval !== 0 && this.options.handlerSweepInterval !== Infinity) { + if (this.options.handlerSweepInterval !== 0 && this.options.handlerSweepInterval !== Number.POSITIVE_INFINITY) { validateMaxInterval(this.options.handlerSweepInterval); this.handlerTimer = setInterval(() => { const sweptHandlers = new Collection(); // Begin sweeping handlers based on activity - this.handlers.sweep((v, k) => { - const { inactive } = v; + this.handlers.sweep((val, key) => { + const { inactive } = val; // Collect inactive handlers if (inactive) { - sweptHandlers.set(k, v); + sweptHandlers.set(key, val); } - this.emit(RESTEvents.Debug, `Handler ${v.id} for ${k} swept due to being inactive`); + this.emit(RESTEvents.Debug, `Handler ${val.id} for ${key} swept due to being inactive`); return inactive; }); @@ -308,7 +315,6 @@ export class RequestManager extends EventEmitter { * Queues a request to be sent * * @param request - All the information needed to make a request - * * @returns The response from the api request */ public async queueRequest(request: InternalRequest): Promise { @@ -341,7 +347,6 @@ export class RequestManager extends EventEmitter { * * @param hash - The hash for the route * @param majorParameter - The major parameter for this handler - * * @internal */ private createHandler(hash: string, majorParameter: string) { @@ -358,7 +363,7 @@ export class RequestManager extends EventEmitter { * * @param request - The request data */ - private async resolveRequest(request: InternalRequest): Promise<{ url: string; fetchOptions: RequestOptions }> { + private async resolveRequest(request: InternalRequest): Promise<{ fetchOptions: RequestOptions; url: string }> { const { options } = this; let query = ''; @@ -423,7 +428,7 @@ export class RequestManager extends EventEmitter { } // If a JSON body was added as well, attach it to the form data, using payload_json unless otherwise specified - // eslint-disable-next-line no-eq-null + // eslint-disable-next-line no-eq-null, eqeqeq if (request.body != null) { if (request.appendToFormData) { for (const [key, value] of Object.entries(request.body as Record)) { @@ -437,7 +442,7 @@ export class RequestManager extends EventEmitter { // Set the final body to the form data finalBody = formData; - // eslint-disable-next-line no-eq-null + // eslint-disable-next-line no-eq-null, eqeqeq } else if (request.body != null) { if (request.passThroughBody) { finalBody = request.body as BodyInit; @@ -453,7 +458,7 @@ export class RequestManager extends EventEmitter { const fetchOptions: RequestOptions = { // eslint-disable-next-line @typescript-eslint/consistent-type-assertions - headers: { ...(request.headers ?? {}), ...additionalHeaders, ...headers } as Record, + headers: { ...request.headers, ...additionalHeaders, ...headers } as Record, method: request.method.toUpperCase() as Dispatcher.HttpMethod, }; @@ -486,7 +491,6 @@ export class RequestManager extends EventEmitter { * * @param endpoint - The raw endpoint to generalize * @param method - The HTTP method this endpoint is called without - * * @internal */ private static generateRouteData(endpoint: RouteLike, method: RequestMethod): RouteData { @@ -508,7 +512,7 @@ export class RequestManager extends EventEmitter { if (method === RequestMethod.Delete && baseRoute === '/channels/:id/messages/:id') { const id = /\d{16,19}$/.exec(endpoint)![0]!; const timestamp = DiscordSnowflake.timestampFrom(id); - if (Date.now() - timestamp > 1000 * 60 * 60 * 24 * 14) { + if (Date.now() - timestamp > 1_000 * 60 * 60 * 24 * 14) { exceptions += '/Delete Old Message'; } } diff --git a/packages/rest/src/lib/errors/DiscordAPIError.ts b/packages/rest/src/lib/errors/DiscordAPIError.ts index 395516a845ca..54341f3add00 100644 --- a/packages/rest/src/lib/errors/DiscordAPIError.ts +++ b/packages/rest/src/lib/errors/DiscordAPIError.ts @@ -1,4 +1,4 @@ -import type { InternalRequest, RawFile } from '../RequestManager'; +import type { InternalRequest, RawFile } from '../RequestManager.js'; interface DiscordErrorFieldInformation { code: string; @@ -9,12 +9,12 @@ interface DiscordErrorGroupWrapper { _errors: DiscordError[]; } -type DiscordError = DiscordErrorGroupWrapper | DiscordErrorFieldInformation | { [k: string]: DiscordError } | string; +type DiscordError = DiscordErrorFieldInformation | DiscordErrorGroupWrapper | string | { [k: string]: DiscordError }; export interface DiscordErrorData { code: number; - message: string; errors?: DiscordError; + message: string; } export interface OAuthErrorData { @@ -37,7 +37,6 @@ function isErrorResponse(error: DiscordError): error is DiscordErrorFieldInforma /** * Represents an API error returned by Discord - * @extends Error */ export class DiscordAPIError extends Error { public requestBody: RequestBody; @@ -56,7 +55,7 @@ export class DiscordAPIError extends Error { public status: number, public method: string, public url: string, - bodyData: Pick, + bodyData: Pick, ) { super(DiscordAPIError.getMessage(rawError)); @@ -76,31 +75,40 @@ export class DiscordAPIError extends Error { if (error.errors) { flattened = [...this.flattenDiscordError(error.errors)].join('\n'); } + return error.message && flattened ? `${error.message}\n${flattened}` : error.message || flattened || 'Unknown Error'; } + return error.error_description ?? 'No Description'; } + // eslint-disable-next-line consistent-return private static *flattenDiscordError(obj: DiscordError, key = ''): IterableIterator { if (isErrorResponse(obj)) { return yield `${key.length ? `${key}[${obj.code}]` : `${obj.code}`}: ${obj.message}`.trim(); } - for (const [k, v] of Object.entries(obj)) { - const nextKey = k.startsWith('_') ? key : key ? (Number.isNaN(Number(k)) ? `${key}.${k}` : `${key}[${k}]`) : k; - - if (typeof v === 'string') { - yield v; + for (const [otherKey, val] of Object.entries(obj)) { + const nextKey = otherKey.startsWith('_') + ? key + : key + ? Number.isNaN(Number(otherKey)) + ? `${key}.${otherKey}` + : `${key}[${otherKey}]` + : otherKey; + + if (typeof val === 'string') { + yield val; // eslint-disable-next-line @typescript-eslint/no-unsafe-argument - } else if (isErrorGroupWrapper(v)) { - for (const error of v._errors) { + } else if (isErrorGroupWrapper(val)) { + for (const error of val._errors) { yield* this.flattenDiscordError(error, nextKey); } } else { // eslint-disable-next-line @typescript-eslint/no-unsafe-argument - yield* this.flattenDiscordError(v, nextKey); + yield* this.flattenDiscordError(val, nextKey); } } } diff --git a/packages/rest/src/lib/errors/HTTPError.ts b/packages/rest/src/lib/errors/HTTPError.ts index b356bd19111b..14912e77a716 100644 --- a/packages/rest/src/lib/errors/HTTPError.ts +++ b/packages/rest/src/lib/errors/HTTPError.ts @@ -1,5 +1,5 @@ -import type { RequestBody } from './DiscordAPIError'; -import type { InternalRequest } from '../RequestManager'; +import type { InternalRequest } from '../RequestManager.js'; +import type { RequestBody } from './DiscordAPIError.js'; /** * Represents a HTTP error @@ -19,7 +19,7 @@ export class HTTPError extends Error { public status: number, public method: string, public url: string, - bodyData: Pick, + bodyData: Pick, ) { super(); diff --git a/packages/rest/src/lib/errors/RateLimitError.ts b/packages/rest/src/lib/errors/RateLimitError.ts index b7b9dbe72645..7c47fc56c582 100644 --- a/packages/rest/src/lib/errors/RateLimitError.ts +++ b/packages/rest/src/lib/errors/RateLimitError.ts @@ -2,13 +2,21 @@ import type { RateLimitData } from '../REST'; export class RateLimitError extends Error implements RateLimitData { public timeToReset: number; + public limit: number; + public method: string; + public hash: string; + public url: string; + public route: string; + public majorParameter: string; + public global: boolean; + public constructor({ timeToReset, limit, method, hash, url, route, majorParameter, global }: RateLimitData) { super(); this.timeToReset = timeToReset; diff --git a/packages/rest/src/lib/handlers/IHandler.ts b/packages/rest/src/lib/handlers/IHandler.ts index c5370f931ada..8471829f5443 100644 --- a/packages/rest/src/lib/handlers/IHandler.ts +++ b/packages/rest/src/lib/handlers/IHandler.ts @@ -1,8 +1,17 @@ import type { Dispatcher } from 'undici'; import type { RequestOptions } from '../REST'; -import type { HandlerRequestData, RouteData } from '../RequestManager'; +import type { HandlerRequestData, RouteData } from '../RequestManager.js'; export interface IHandler { + /** + * The unique id of the handler + */ + readonly id: string; + /** + * If the bucket is currently inactive (no pending requests) + */ + // eslint-disable-next-line @typescript-eslint/method-signature-style -- This is meant to be a getter returning a bool + get inactive(): boolean; /** * Queues a request to be sent * @@ -11,19 +20,10 @@ export interface IHandler { * @param options - All the information needed to make a request * @param requestData - Extra data from the user's request needed for errors and additional processing */ - queueRequest: ( + queueRequest( routeId: RouteData, url: string, options: RequestOptions, requestData: HandlerRequestData, - ) => Promise; - /** - * If the bucket is currently inactive (no pending requests) - */ - // eslint-disable-next-line @typescript-eslint/method-signature-style -- This is meant to be a getter returning a bool - get inactive(): boolean; - /** - * The unique id of the handler - */ - readonly id: string; + ): Promise; } diff --git a/packages/rest/src/lib/handlers/SequentialHandler.ts b/packages/rest/src/lib/handlers/SequentialHandler.ts index b53b8ed8cd37..bb5447ea0e10 100644 --- a/packages/rest/src/lib/handlers/SequentialHandler.ts +++ b/packages/rest/src/lib/handlers/SequentialHandler.ts @@ -1,14 +1,15 @@ +import { setTimeout, clearTimeout } from 'node:timers'; import { setTimeout as sleep } from 'node:timers/promises'; import { AsyncQueue } from '@sapphire/async-queue'; import { request, type Dispatcher } from 'undici'; -import type { IHandler } from './IHandler'; import type { RateLimitData, RequestOptions } from '../REST'; import type { HandlerRequestData, RequestManager, RouteData } from '../RequestManager'; -import { DiscordAPIError, DiscordErrorData, OAuthErrorData } from '../errors/DiscordAPIError'; -import { HTTPError } from '../errors/HTTPError'; -import { RateLimitError } from '../errors/RateLimitError'; -import { RESTEvents } from '../utils/constants'; -import { hasSublimit, parseHeader, parseResponse } from '../utils/utils'; +import { DiscordAPIError, type DiscordErrorData, type OAuthErrorData } from '../errors/DiscordAPIError.js'; +import { HTTPError } from '../errors/HTTPError.js'; +import { RateLimitError } from '../errors/RateLimitError.js'; +import { RESTEvents } from '../utils/constants.js'; +import { hasSublimit, parseHeader, parseResponse } from '../utils/utils.js'; +import type { IHandler } from './IHandler.js'; /** * Invalid request limiting is done on a per-IP basis, not a per-token basis. @@ -47,7 +48,7 @@ export class SequentialHandler implements IHandler { /** * The total number of requests that can be made before we are rate limited */ - private limit = Infinity; + private limit = Number.POSITIVE_INFINITY; /** * The interface used to sequence async requests sequentially @@ -65,7 +66,7 @@ export class SequentialHandler implements IHandler { * A promise wrapper for when the sublimited queue is finished being processed or null when not being processed */ // eslint-disable-next-line @typescript-eslint/explicit-member-accessibility - #sublimitPromise: { promise: Promise; resolve: () => void } | null = null; + #sublimitPromise: { promise: Promise; resolve(): void } | null = null; /** * Whether the sublimit queue needs to be shifted in the finally block @@ -176,6 +177,7 @@ export class SequentialHandler implements IHandler { queue = this.#sublimitedQueue!; queueType = QueueType.Sublimit; } + // Wait for any previous requests to be completed before this one is run await queue.wait(); // This set handles retroactively sublimiting requests @@ -194,6 +196,7 @@ export class SequentialHandler implements IHandler { await this.#sublimitPromise.promise; } } + try { // Make the request, and return the results return await this.runRequest(routeId, url, options, requestData); @@ -204,6 +207,7 @@ export class SequentialHandler implements IHandler { this.#shiftSublimit = false; this.#sublimitedQueue?.shift(); } + // If this request is the last request in a sublimit if (this.#sublimitedQueue?.remaining === 0) { this.#sublimitPromise?.resolve(); @@ -247,6 +251,7 @@ export class SequentialHandler implements IHandler { // The global delay function clears the global delay state when it is resolved this.manager.globalDelay = this.globalDelayFor(timeout); } + delay = this.manager.globalDelay; } else { // Set RateLimitData based on the route-specific limit @@ -254,6 +259,7 @@ export class SequentialHandler implements IHandler { timeout = this.timeToReset; delay = sleep(timeout); } + const rateLimitData: RateLimitData = { timeToReset: timeout, limit, @@ -274,14 +280,17 @@ export class SequentialHandler implements IHandler { } else { this.debug(`Waiting ${timeout}ms for rate limit to pass`); } + // Wait the remaining time left before the rate limit resets await delay; } + // As the request goes out, update the global usage information if (!this.manager.globalReset || this.manager.globalReset < Date.now()) { - this.manager.globalReset = Date.now() + 1000; + this.manager.globalReset = Date.now() + 1_000; this.manager.globalRemaining = this.manager.options.globalRequestsPerSecond; } + this.manager.globalRemaining--; const method = options.method ?? 'get'; @@ -295,6 +304,7 @@ export class SequentialHandler implements IHandler { } catch (error: unknown) { // Retry the specified number of times for possible timed out requests if (error instanceof Error && error.name === 'AbortError' && retries !== this.manager.options.retries) { + // eslint-disable-next-line no-param-reassign return await this.runRequest(routeId, url, options, requestData, ++retries); } @@ -328,14 +338,14 @@ export class SequentialHandler implements IHandler { const retry = parseHeader(res.headers['retry-after']); // Update the total number of requests that can be made before the rate limit resets - this.limit = limit ? Number(limit) : Infinity; + this.limit = limit ? Number(limit) : Number.POSITIVE_INFINITY; // Update the number of remaining requests that can be made before the rate limit resets this.remaining = remaining ? Number(remaining) : 1; // Update the time when this rate limit resets (reset-after is in seconds) - this.reset = reset ? Number(reset) * 1000 + Date.now() + this.manager.options.offset : Date.now(); + this.reset = reset ? Number(reset) * 1_000 + Date.now() + this.manager.options.offset : Date.now(); // Amount of time in milliseconds until we should retry if rate limited (globally or otherwise) - if (retry) retryAfter = Number(retry) * 1000 + this.manager.options.offset; + if (retry) retryAfter = Number(retry) * 1_000 + this.manager.options.offset; // Handle buckets via the hash header retroactively if (hash && hash !== this.hash) { @@ -373,9 +383,10 @@ export class SequentialHandler implements IHandler { // Count the invalid requests if (status === 401 || status === 403 || status === 429) { if (!invalidCountResetTime || invalidCountResetTime < Date.now()) { - invalidCountResetTime = Date.now() + 1000 * 60 * 10; + invalidCountResetTime = Date.now() + 1_000 * 60 * 10; invalidCount = 0; } + invalidCount++; const emitInvalid = @@ -407,6 +418,7 @@ export class SequentialHandler implements IHandler { limit = this.limit; timeout = this.timeToReset; } + await this.onRateLimit({ timeToReset: timeout, limit, @@ -440,10 +452,12 @@ export class SequentialHandler implements IHandler { void this.#sublimitedQueue.wait(); this.#asyncQueue.shift(); } + this.#sublimitPromise?.resolve(); this.#sublimitPromise = null; await sleep(sublimitTimeout, undefined, { ref: false }); let resolve: () => void; + // eslint-disable-next-line promise/param-names, no-promise-executor-return const promise = new Promise((res) => (resolve = res)); this.#sublimitPromise = { promise, resolve: resolve! }; if (firstSublimit) { @@ -452,13 +466,16 @@ export class SequentialHandler implements IHandler { this.#shiftSublimit = true; } } + // Since this is not a server side issue, the next request should pass, so we don't bump the retries counter return this.runRequest(routeId, url, options, requestData, retries); } else if (status >= 500 && status < 600) { // Retry the specified number of times for possible server side issues if (retries !== this.manager.options.retries) { + // eslint-disable-next-line no-param-reassign return this.runRequest(routeId, url, options, requestData, ++retries); } + // We are out of retries, throw an error throw new HTTPError(res.constructor.name, status, method, url, requestData); } else { @@ -468,11 +485,13 @@ export class SequentialHandler implements IHandler { if (status === 401 && requestData.auth) { this.manager.setToken(null!); } + // The request will not succeed for some reason, parse the error returned from the api const data = (await parseResponse(res)) as DiscordErrorData | OAuthErrorData; // throw the API error throw new DiscordAPIError(data, 'code' in data ? data.code : data.error, status, method, url, requestData); } + return res; } } diff --git a/packages/rest/src/lib/utils/constants.ts b/packages/rest/src/lib/utils/constants.ts index ee6f4a74ceb1..2c5106572b2a 100644 --- a/packages/rest/src/lib/utils/constants.ts +++ b/packages/rest/src/lib/utils/constants.ts @@ -1,6 +1,7 @@ +import process from 'node:process'; import { APIVersion } from 'discord-api-types/v10'; import { getGlobalDispatcher } from 'undici'; -import type { RESTOptions } from '../REST'; +import type { RESTOptions } from '../REST.js'; // eslint-disable-next-line @typescript-eslint/no-var-requires, @typescript-eslint/no-require-imports, @typescript-eslint/no-unsafe-assignment const Package = require('../../../package.json'); @@ -33,16 +34,16 @@ export const DefaultRestOptions: Required = { */ export const enum RESTEvents { Debug = 'restDebug', + HandlerSweep = 'handlerSweep', + HashSweep = 'hashSweep', InvalidRequestWarning = 'invalidRequestWarning', RateLimited = 'rateLimited', Response = 'response', - HashSweep = 'hashSweep', - HandlerSweep = 'handlerSweep', } export const ALLOWED_EXTENSIONS = ['webp', 'png', 'jpg', 'jpeg', 'gif'] as const; export const ALLOWED_STICKER_EXTENSIONS = ['png', 'json'] as const; -export const ALLOWED_SIZES = [16, 32, 64, 128, 256, 512, 1024, 2048, 4096] as const; +export const ALLOWED_SIZES = [16, 32, 64, 128, 256, 512, 1_024, 2_048, 4_096] as const; export type ImageExtension = typeof ALLOWED_EXTENSIONS[number]; export type StickerExtension = typeof ALLOWED_STICKER_EXTENSIONS[number]; diff --git a/packages/rest/src/lib/utils/utils.ts b/packages/rest/src/lib/utils/utils.ts index 1b437ecd3fbe..3cc69a5c8efc 100644 --- a/packages/rest/src/lib/utils/utils.ts +++ b/packages/rest/src/lib/utils/utils.ts @@ -1,12 +1,12 @@ -import { Blob } from 'node:buffer'; +import { Blob, Buffer } from 'node:buffer'; import { URLSearchParams } from 'node:url'; import { types } from 'node:util'; import type { RESTPatchAPIChannelJSONBody } from 'discord-api-types/v10'; import { FormData, type Dispatcher, type RequestInit } from 'undici'; -import type { RequestOptions } from '../REST'; -import { RequestMethod } from '../RequestManager'; +import type { RequestOptions } from '../REST.js'; +import { RequestMethod } from '../RequestManager.js'; -export function parseHeader(header: string | string[] | undefined): string | undefined { +export function parseHeader(header: string[] | string | undefined): string | undefined { if (header === undefined) { return header; } else if (typeof header === 'string') { @@ -29,6 +29,7 @@ function serializeSearchParam(value: unknown): string | null { if (value instanceof Date) { return Number.isNaN(value.getTime()) ? null : value.toISOString(); } + // eslint-disable-next-line @typescript-eslint/no-base-to-string if (typeof value.toString === 'function' && value.toString !== Object.prototype.toString) return value.toString(); return null; @@ -42,7 +43,6 @@ function serializeSearchParam(value: unknown): string | null { * out null and undefined values, while also coercing non-strings to strings. * * @param options - The options to use - * * @returns A populated URLSearchParams instance */ export function makeURLSearchParams(options?: Record) { @@ -62,7 +62,7 @@ export function makeURLSearchParams(options?: Record) { * * @param res - The fetch response */ -export function parseResponse(res: Dispatcher.ResponseData): Promise { +export async function parseResponse(res: Dispatcher.ResponseData): Promise { const header = parseHeader(res.headers['content-type']); if (header?.startsWith('application/json')) { return res.body.json(); @@ -77,7 +77,6 @@ export function parseResponse(res: Dispatcher.ResponseData): Promise { * @param bucketRoute - The buckets route identifier * @param body - The options provided as JSON data * @param method - The HTTP method that will be used to make the request - * * @returns Whether the request falls under a sublimit */ export function hasSublimit(bucketRoute: string, body?: unknown, method?: string): boolean { @@ -97,7 +96,7 @@ export function hasSublimit(bucketRoute: string, body?: unknown, method?: string } export async function resolveBody(body: RequestInit['body']): Promise { - // eslint-disable-next-line no-eq-null + // eslint-disable-next-line no-eq-null, eqeqeq if (body == null) { return null; } else if (typeof body === 'string') { diff --git a/packages/scripts/package.json b/packages/scripts/package.json index 44522517dd69..3311fa02dd29 100644 --- a/packages/scripts/package.json +++ b/packages/scripts/package.json @@ -51,14 +51,9 @@ }, "devDependencies": { "@types/node": "^16.11.56", - "@typescript-eslint/eslint-plugin": "^5.36.1", - "@typescript-eslint/parser": "^5.36.1", "@vitest/coverage-c8": "^0.22.1", "eslint": "^8.23.0", - "eslint-config-marine": "^9.4.1", - "eslint-config-prettier": "^8.5.0", - "eslint-import-resolver-typescript": "^3.5.0", - "eslint-plugin-import": "^2.26.0", + "eslint-config-neon": "^0.1.23", "prettier": "^2.7.1", "rollup-plugin-typescript2": "^0.33.0", "typescript": "^4.8.2", diff --git a/packages/scripts/src/generateIndex.ts b/packages/scripts/src/generateIndex.ts index 3231fc3d14d0..95b6e197f743 100644 --- a/packages/scripts/src/generateIndex.ts +++ b/packages/scripts/src/generateIndex.ts @@ -1,18 +1,19 @@ import { stat, mkdir, writeFile } from 'node:fs/promises'; import { join } from 'node:path'; import { generatePath } from '@discordjs/api-extractor-utils'; -import { ApiDeclaredItem, ApiItem, ApiItemContainerMixin, ApiModel } from '@microsoft/api-extractor-model'; -import { DocCodeSpan, DocNode, DocNodeKind, DocParagraph, DocPlainText } from '@microsoft/tsdoc'; +import { ApiDeclaredItem, ApiItemContainerMixin, type ApiItem, type ApiModel } from '@microsoft/api-extractor-model'; +import { DocNodeKind, type DocCodeSpan, type DocNode, type DocParagraph, type DocPlainText } from '@microsoft/tsdoc'; export interface MemberJSON { - name: string; kind: string; - summary: string | null; + name: string; path: string; + summary: string | null; } /** * Attempts to resolve the summary text for the given item. + * * @param item - The API item to resolve the summary text for. */ function tryResolveSummaryText(item: ApiDeclaredItem): string | null { @@ -34,8 +35,14 @@ function tryResolveSummaryText(item: ApiDeclaredItem): string | null { retVal += (node as DocPlainText).text; break; case DocNodeKind.Section: - case DocNodeKind.Paragraph: - return (node as DocParagraph).nodes.forEach(visitTSDocNode); + case DocNodeKind.Paragraph: { + for (const child of (node as DocParagraph).nodes) { + visitTSDocNode(child); + } + + break; + } + default: // We'll ignore all other nodes. break; } diff --git a/packages/scripts/src/index.ts b/packages/scripts/src/index.ts index 1b4fba204387..353651a35f6b 100644 --- a/packages/scripts/src/index.ts +++ b/packages/scripts/src/index.ts @@ -1 +1 @@ -export * from './generateIndex'; +export * from './generateIndex.js'; diff --git a/packages/voice/.eslintrc.json b/packages/voice/.eslintrc.json index e63740acf414..f2acef1280ab 100644 --- a/packages/voice/.eslintrc.json +++ b/packages/voice/.eslintrc.json @@ -2,7 +2,8 @@ "extends": "../../.eslintrc.json", "plugins": ["eslint-plugin-tsdoc"], "rules": { - "tsdoc/syntax": "warn" + "import/extensions": 0, + "no-restricted-globals": 0 }, "parserOptions": { "project": "./tsconfig.eslint.json", diff --git a/packages/voice/__tests__/AudioPlayer.test.ts b/packages/voice/__tests__/AudioPlayer.test.ts index 83306c2f9ac9..544b2526278b 100644 --- a/packages/voice/__tests__/AudioPlayer.test.ts +++ b/packages/voice/__tests__/AudioPlayer.test.ts @@ -1,14 +1,17 @@ +/* eslint-disable @typescript-eslint/unbound-method */ /* eslint-disable @typescript-eslint/no-unsafe-member-access */ /* eslint-disable @typescript-eslint/no-unsafe-assignment */ /* eslint-disable @typescript-eslint/dot-notation */ +import { Buffer } from 'node:buffer'; import { once } from 'node:events'; +import process from 'node:process'; import { Readable } from 'node:stream'; -import { NoSubscriberBehavior } from '../src'; import { addAudioPlayer, deleteAudioPlayer } from '../src/DataStore'; import { VoiceConnection, VoiceConnectionStatus } from '../src/VoiceConnection'; -import { createAudioPlayer, AudioPlayerStatus, AudioPlayer, SILENCE_FRAME } from '../src/audio/AudioPlayer'; +import { createAudioPlayer, AudioPlayerStatus, SILENCE_FRAME, type AudioPlayerState } from '../src/audio/AudioPlayer'; import { AudioPlayerError } from '../src/audio/AudioPlayerError'; import { AudioResource } from '../src/audio/AudioResource'; +import { NoSubscriberBehavior } from '../src/index'; jest.mock('../src/DataStore'); jest.mock('../src/VoiceConnection'); @@ -39,7 +42,8 @@ function createVoiceConnectionMock() { return connection; } -function wait() { +async function wait() { + // eslint-disable-next-line no-promise-executor-return return new Promise((resolve) => process.nextTick(resolve)); } @@ -47,6 +51,7 @@ async function started(resource: AudioResource) { while (!resource.started) { await wait(); } + return resource; } @@ -197,6 +202,7 @@ describe('State transitions', () => { if (connection.state.status !== VoiceConnectionStatus.Signalling) { throw new Error('Voice connection should have been Signalling'); } + connection.state = { ...connection.state, status: VoiceConnectionStatus.Ready, @@ -216,18 +222,18 @@ describe('State transitions', () => { expect(player.checkPlayable()).toEqual(true); // Run through a few packet cycles - for (let i = 1; i <= 5; i++) { + for (let index = 1; index <= 5; index++) { player['_stepDispatch'](); - expect(connection.dispatchAudio).toHaveBeenCalledTimes(i); + expect(connection.dispatchAudio).toHaveBeenCalledTimes(index); await wait(); // Wait for the stream player['_stepPrepare'](); - expect(connection.prepareAudioPacket).toHaveBeenCalledTimes(i); + expect(connection.prepareAudioPacket).toHaveBeenCalledTimes(index); expect(connection.prepareAudioPacket).toHaveBeenLastCalledWith(buffer); expect(player.state.status).toEqual(AudioPlayerStatus.Playing); if (player.state.status === AudioPlayerStatus.Playing) { - expect(player.state.playbackDuration).toStrictEqual(i * 20); + expect(player.state.playbackDuration).toStrictEqual(index * 20); } } @@ -254,6 +260,7 @@ describe('State transitions', () => { if (connection.state.status !== VoiceConnectionStatus.Signalling) { throw new Error('Voice connection should have been Signalling'); } + connection.state = { ...connection.state, status: VoiceConnectionStatus.Ready, @@ -275,20 +282,21 @@ describe('State transitions', () => { player.stop(); // Run through a few packet cycles - for (let i = 1; i <= 5; i++) { + for (let index = 1; index <= 5; index++) { player['_stepDispatch'](); - expect(connection.dispatchAudio).toHaveBeenCalledTimes(i); + expect(connection.dispatchAudio).toHaveBeenCalledTimes(index); await wait(); // Wait for the stream player['_stepPrepare'](); - expect(connection.prepareAudioPacket).toHaveBeenCalledTimes(i); + expect(connection.prepareAudioPacket).toHaveBeenCalledTimes(index); expect(connection.prepareAudioPacket).toHaveBeenLastCalledWith(SILENCE_FRAME); expect(player.state.status).toEqual(AudioPlayerStatus.Playing); if (player.state.status === AudioPlayerStatus.Playing) { - expect(player.state.playbackDuration).toStrictEqual(i * 20); + expect(player.state.playbackDuration).toStrictEqual(index * 20); } } + await wait(); expect(player.checkPlayable()).toEqual(false); const prepareAudioPacket = connection.prepareAudioPacket as unknown as jest.Mock< @@ -307,6 +315,7 @@ describe('State transitions', () => { if (connection.state.status !== VoiceConnectionStatus.Signalling) { throw new Error('Voice connection should have been Signalling'); } + connection.state = { ...connection.state, status: VoiceConnectionStatus.Ready, @@ -328,16 +337,16 @@ describe('State transitions', () => { >; // Run through a few packet cycles - for (let i = 1; i <= 5; i++) { + for (let index = 1; index <= 5; index++) { expect(player.state.status).toEqual(AudioPlayerStatus.Playing); if (player.state.status !== AudioPlayerStatus.Playing) throw new Error('Error'); - expect(player.state.playbackDuration).toStrictEqual((i - 1) * 20); - expect(player.state.missedFrames).toEqual(i - 1); + expect(player.state.playbackDuration).toStrictEqual((index - 1) * 20); + expect(player.state.missedFrames).toEqual(index - 1); player['_stepDispatch'](); - expect(connection.dispatchAudio).toHaveBeenCalledTimes(i); + expect(connection.dispatchAudio).toHaveBeenCalledTimes(index); player['_stepPrepare'](); - expect(prepareAudioPacket).toHaveBeenCalledTimes(i); - expect(prepareAudioPacket.mock.calls[i - 1][0]).toEqual(silence().next().value); + expect(prepareAudioPacket).toHaveBeenCalledTimes(index); + expect(prepareAudioPacket.mock.calls[index - 1][0]).toEqual(silence().next().value); } expect(player.state.status).toEqual(AudioPlayerStatus.Idle); @@ -352,10 +361,11 @@ describe('State transitions', () => { player.play(resource); expect(player.checkPlayable()).toEqual(true); expect(player.state.status).toEqual(AudioPlayerStatus.Playing); - for (let i = 0; i < 3; i++) { + for (let index = 0; index < 3; index++) { resource.playStream.read(); await wait(); } + expect(resource.playStream.readableEnded).toEqual(true); expect(player.checkPlayable()).toEqual(false); expect(player.state.status).toEqual(AudioPlayerStatus.Idle); @@ -367,10 +377,11 @@ test('play() throws when playing a resource that has already ended', async () => player = createAudioPlayer(); player.play(resource); expect(player.state.status).toEqual(AudioPlayerStatus.Playing); - for (let i = 0; i < 3; i++) { + for (let index = 0; index < 3; index++) { resource.playStream.read(); await wait(); } + expect(resource.playStream.readableEnded).toEqual(true); player.stop(true); expect(player.state.status).toEqual(AudioPlayerStatus.Idle); diff --git a/packages/voice/__tests__/AudioReceiveStream.test.ts b/packages/voice/__tests__/AudioReceiveStream.test.ts index 75a70cf120a1..415ec1bf2b69 100644 --- a/packages/voice/__tests__/AudioReceiveStream.test.ts +++ b/packages/voice/__tests__/AudioReceiveStream.test.ts @@ -1,9 +1,11 @@ +/* eslint-disable no-promise-executor-return */ +import { Buffer } from 'node:buffer'; import { SILENCE_FRAME } from '../src/audio/AudioPlayer'; import { AudioReceiveStream, EndBehaviorType } from '../src/receive/AudioReceiveStream'; const DUMMY_BUFFER = Buffer.allocUnsafe(16); -function wait(ms: number) { +async function wait(ms: number) { return new Promise((resolve) => setTimeout(resolve, ms)); } @@ -52,13 +54,13 @@ describe('AudioReceiveStream', () => { const stream = new AudioReceiveStream({ end: { behavior: EndBehaviorType.AfterInactivity, duration: 100 } }); stream.resume(); - for (let i = increment; i < duration / 2; i += increment) { + for (let index = increment; index < duration / 2; index += increment) { await stepSilence(stream, increment); } stream.push(DUMMY_BUFFER); - for (let i = increment; i < duration; i += increment) { + for (let index = increment; index < duration; index += increment) { await stepSilence(stream, increment); } diff --git a/packages/voice/__tests__/AudioResource.test.ts b/packages/voice/__tests__/AudioResource.test.ts index 08f3bc1fced8..9a1bb2872ca4 100644 --- a/packages/voice/__tests__/AudioResource.test.ts +++ b/packages/voice/__tests__/AudioResource.test.ts @@ -1,14 +1,17 @@ /* eslint-disable @typescript-eslint/no-unsafe-return */ +import { Buffer } from 'node:buffer'; +import process from 'node:process'; import { PassThrough, Readable } from 'node:stream'; import { opus, VolumeTransformer } from 'prism-media'; import { SILENCE_FRAME } from '../src/audio/AudioPlayer'; import { AudioResource, createAudioResource, NO_CONSTRAINT, VOLUME_CONSTRAINT } from '../src/audio/AudioResource'; -import { Edge, findPipeline as _findPipeline, StreamType, TransformerType } from '../src/audio/TransformerGraph'; +import { findPipeline as _findPipeline, StreamType, TransformerType, type Edge } from '../src/audio/TransformerGraph'; jest.mock('prism-media'); jest.mock('../src/audio/TransformerGraph'); -function wait() { +async function wait() { + // eslint-disable-next-line no-promise-executor-return return new Promise((resolve) => process.nextTick(resolve)); } @@ -16,12 +19,14 @@ async function started(resource: AudioResource) { while (!resource.started) { await wait(); } + return resource; } const findPipeline = _findPipeline as unknown as jest.MockedFunction; beforeAll(() => { + // @ts-expect-error no type findPipeline.mockImplementation((from: StreamType, constraint: (path: Edge[]) => boolean) => { const base = [ { @@ -38,6 +43,7 @@ beforeAll(() => { type: TransformerType.InlineVolume, }); } + return base as any[]; }); }); @@ -113,11 +119,12 @@ describe('createAudioResource', () => { await started(resource); expect(resource.readable).toEqual(true); expect(resource.read()).toEqual(Buffer.from([1])); - for (let i = 0; i < 5; i++) { + for (let index = 0; index < 5; index++) { await wait(); expect(resource.readable).toEqual(true); expect(resource.read()).toEqual(SILENCE_FRAME); } + await wait(); expect(resource.readable).toEqual(false); expect(resource.read()).toEqual(null); diff --git a/packages/voice/__tests__/DataStore.test.ts b/packages/voice/__tests__/DataStore.test.ts index 60cb62659424..78930d46bf0e 100644 --- a/packages/voice/__tests__/DataStore.test.ts +++ b/packages/voice/__tests__/DataStore.test.ts @@ -2,8 +2,9 @@ /* eslint-disable @typescript-eslint/dot-notation */ import { GatewayOpcodes } from 'discord-api-types/v10'; import * as DataStore from '../src/DataStore'; -import { VoiceConnection } from '../src/VoiceConnection'; +import type { VoiceConnection } from '../src/VoiceConnection'; import * as _AudioPlayer from '../src/audio/AudioPlayer'; + jest.mock('../src/VoiceConnection'); jest.mock('../src/audio/AudioPlayer'); @@ -15,8 +16,9 @@ function createVoiceConnection(joinConfig: Pick setImmediate(res)); +async function waitForEventLoop() { + // eslint-disable-next-line no-promise-executor-return + return new Promise((resolve) => setImmediate(resolve)); } beforeEach(() => { @@ -24,6 +26,7 @@ beforeEach(() => { for (const groupKey of groups.keys()) { groups.delete(groupKey); } + groups.set('default', new Map()); }); @@ -41,6 +44,7 @@ describe('DataStore', () => { }; expect(DataStore.createJoinVoiceChannelPayload(joinConfig)).toStrictEqual({ op: GatewayOpcodes.VoiceStateUpdate, + // eslint-disable-next-line id-length d: { guild_id: joinConfig.guildId, channel_id: joinConfig.channelId, @@ -60,7 +64,7 @@ describe('DataStore', () => { expect([...DataStore.getVoiceConnections().values()]).toEqual([voiceConnectionDefault]); expect([...DataStore.getVoiceConnections('default').values()]).toEqual([voiceConnectionDefault]); - expect([...DataStore.getVoiceConnections('abc').values()]).toEqual([voiceConnectionAbc]); + expect([...DataStore.getVoiceConnections('abc')!.values()]).toEqual([voiceConnectionAbc]); DataStore.untrackVoiceConnection(voiceConnectionDefault); expect(DataStore.getVoiceConnection('123')).toBeUndefined(); @@ -73,6 +77,7 @@ describe('DataStore', () => { expect(DataStore.hasAudioPlayer(player)).toEqual(true); expect(DataStore.addAudioPlayer(player)).toEqual(player); DataStore.deleteAudioPlayer(player); + // eslint-disable-next-line @typescript-eslint/no-confusing-void-expression expect(DataStore.deleteAudioPlayer(player)).toBeUndefined(); expect(DataStore.hasAudioPlayer(player)).toEqual(false); // Tests audio cycle with nextTime === -1 diff --git a/packages/voice/__tests__/SSRCMap.test.ts b/packages/voice/__tests__/SSRCMap.test.ts index 06d9797c94f9..1da3f26e8b8e 100644 --- a/packages/voice/__tests__/SSRCMap.test.ts +++ b/packages/voice/__tests__/SSRCMap.test.ts @@ -1,8 +1,10 @@ /* eslint-disable @typescript-eslint/no-unsafe-assignment */ -import EventEmitter, { once } from 'node:events'; -import { SSRCMap, VoiceUserData } from '../src/receive/SSRCMap'; +import type EventEmitter from 'node:events'; +import { once } from 'node:events'; +import process from 'node:process'; +import { SSRCMap, type VoiceUserData } from '../src/receive/SSRCMap'; -function onceOrThrow(target: T, event: string, after: number) { +async function onceOrThrow(target: T, event: string, after: number) { return new Promise((resolve, reject) => { target.on(event, resolve); setTimeout(() => reject(new Error('Time up')), after); diff --git a/packages/voice/__tests__/Secretbox.test.ts b/packages/voice/__tests__/Secretbox.test.ts index 9e09b33ef6a6..a01dd2f3bf69 100644 --- a/packages/voice/__tests__/Secretbox.test.ts +++ b/packages/voice/__tests__/Secretbox.test.ts @@ -3,6 +3,6 @@ import { methods } from '../src/util/Secretbox'; jest.mock('tweetnacl'); test('Does not throw error with a package installed', () => { - // @ts-expect-error + // @ts-expect-error: Unknown type expect(() => methods.open()).not.toThrowError(); }); diff --git a/packages/voice/__tests__/SpeakingMap.test.ts b/packages/voice/__tests__/SpeakingMap.test.ts index 92087ebd32fa..1a7bb9cc90fc 100644 --- a/packages/voice/__tests__/SpeakingMap.test.ts +++ b/packages/voice/__tests__/SpeakingMap.test.ts @@ -14,7 +14,7 @@ describe('SpeakingMap', () => { speaking.on('start', (userId) => void starts.push(userId)); speaking.on('end', (userId) => void ends.push(userId)); - for (let i = 0; i < 10; i++) { + for (let index = 0; index < 10; index++) { speaking.onPacket(userId); setTimeout(noop, SpeakingMap.DELAY / 2); jest.advanceTimersToNextTimer(); @@ -22,6 +22,7 @@ describe('SpeakingMap', () => { expect(starts).toEqual([userId]); expect(ends).toEqual([]); } + jest.advanceTimersToNextTimer(); expect(ends).toEqual([userId]); diff --git a/packages/voice/__tests__/TransformerGraph.test.ts b/packages/voice/__tests__/TransformerGraph.test.ts index 9860d656e941..3a887381dd50 100644 --- a/packages/voice/__tests__/TransformerGraph.test.ts +++ b/packages/voice/__tests__/TransformerGraph.test.ts @@ -1,4 +1,4 @@ -import { Edge, findPipeline, StreamType, TransformerType } from '../src/audio/TransformerGraph'; +import { findPipeline, StreamType, TransformerType, type Edge } from '../src/audio/TransformerGraph'; const noConstraint = () => true; @@ -12,6 +12,7 @@ function reducePath(pipeline: Edge[]) { for (const edge of pipeline.slice(1)) { streams.push(edge.from.type); } + streams.push(pipeline[pipeline.length - 1].to.type); return streams; } diff --git a/packages/voice/__tests__/VoiceConnection.test.ts b/packages/voice/__tests__/VoiceConnection.test.ts index fbff02d3f2ed..c6f0a2e80c4b 100644 --- a/packages/voice/__tests__/VoiceConnection.test.ts +++ b/packages/voice/__tests__/VoiceConnection.test.ts @@ -1,3 +1,4 @@ +/* eslint-disable @typescript-eslint/unbound-method */ /* eslint-disable @typescript-eslint/no-unsafe-assignment */ /* eslint-disable @typescript-eslint/no-unsafe-return */ /* eslint-disable @typescript-eslint/no-unsafe-member-access */ @@ -8,13 +9,12 @@ import * as _DataStore from '../src/DataStore'; import { createVoiceConnection, VoiceConnection, - VoiceConnectionConnectingState, VoiceConnectionDisconnectReason, - VoiceConnectionReadyState, - VoiceConnectionSignallingState, VoiceConnectionStatus, + type VoiceConnectionConnectingState, + type VoiceConnectionReadyState, + type VoiceConnectionSignallingState, } from '../src/VoiceConnection'; - import * as _AudioPlayer from '../src/audio/AudioPlayer'; import { PlayerSubscription as _PlayerSubscription } from '../src/audio/PlayerSubscription'; import * as _Networking from '../src/networking/Networking'; @@ -129,6 +129,7 @@ describe('createVoiceConnection', () => { const stateSetter = jest.spyOn(existingVoiceConnection, 'state', 'set'); + // @ts-expect-error: We're testing DataStore.getVoiceConnection.mockImplementation((guildId, group = 'default') => guildId === existingJoinConfig.guildId && group === existingJoinConfig.group ? existingVoiceConnection : null, ); @@ -167,6 +168,7 @@ describe('createVoiceConnection', () => { const rejoinSpy = jest.spyOn(existingVoiceConnection, 'rejoin'); + // @ts-expect-error: We're testing DataStore.getVoiceConnection.mockImplementation((guildId, group = 'default') => guildId === existingJoinConfig.guildId && group === existingJoinConfig.group ? existingVoiceConnection : null, ); @@ -198,6 +200,7 @@ describe('createVoiceConnection', () => { adapterCreator: existingAdapter.creator, }); + // @ts-expect-error: We're testing DataStore.getVoiceConnection.mockImplementation((guildId, group = 'default') => guildId === existingJoinConfig.guildId && group === existingJoinConfig.group ? existingVoiceConnection : null, ); @@ -355,17 +358,17 @@ describe('VoiceConnection#onNetworkingClose', () => { voiceConnection.state = { status: VoiceConnectionStatus.Destroyed, }; - voiceConnection['onNetworkingClose'](1000); + voiceConnection['onNetworkingClose'](1_000); expect(voiceConnection.state.status).toEqual(VoiceConnectionStatus.Destroyed); expect(adapter.sendPayload).not.toHaveBeenCalled(); }); test('Disconnects for code 4014', () => { const { voiceConnection, adapter } = createFakeVoiceConnection(); - voiceConnection['onNetworkingClose'](4014); + voiceConnection['onNetworkingClose'](4_014); expect(voiceConnection.state).toMatchObject({ status: VoiceConnectionStatus.Disconnected, - closeCode: 4014, + closeCode: 4_014, }); expect(adapter.sendPayload).not.toHaveBeenCalled(); }); @@ -376,7 +379,7 @@ describe('VoiceConnection#onNetworkingClose', () => { DataStore.createJoinVoiceChannelPayload.mockImplementation((config) => config === joinConfig ? dummyPayload : undefined, ); - voiceConnection['onNetworkingClose'](1234); + voiceConnection['onNetworkingClose'](1_234); expect(voiceConnection.state.status).toEqual(VoiceConnectionStatus.Signalling); expect(adapter.sendPayload).toHaveBeenCalledWith(dummyPayload); expect(voiceConnection.rejoinAttempts).toEqual(1); @@ -389,7 +392,7 @@ describe('VoiceConnection#onNetworkingClose', () => { config === joinConfig ? dummyPayload : undefined, ); adapter.sendPayload.mockReturnValue(false); - voiceConnection['onNetworkingClose'](1234); + voiceConnection['onNetworkingClose'](1_234); expect(voiceConnection.state.status).toEqual(VoiceConnectionStatus.Disconnected); expect(adapter.sendPayload).toHaveBeenCalledWith(dummyPayload); expect(voiceConnection.rejoinAttempts).toEqual(1); @@ -552,7 +555,7 @@ describe('VoiceConnection#rejoin', () => { ...(voiceConnection.state as VoiceConnectionSignallingState), status: VoiceConnectionStatus.Disconnected, reason: VoiceConnectionDisconnectReason.WebSocketClose, - closeCode: 1000, + closeCode: 1_000, }; expect(voiceConnection.rejoin()).toEqual(true); expect(voiceConnection.rejoinAttempts).toEqual(1); @@ -584,7 +587,7 @@ describe('VoiceConnection#rejoin', () => { ...(voiceConnection.state as VoiceConnectionSignallingState), status: VoiceConnectionStatus.Disconnected, reason: VoiceConnectionDisconnectReason.WebSocketClose, - closeCode: 1000, + closeCode: 1_000, }; adapter.sendPayload.mockReturnValue(false); expect(voiceConnection.rejoin()).toEqual(false); @@ -751,7 +754,7 @@ describe('Adapter', () => { const { adapter, voiceConnection } = createFakeVoiceConnection(); voiceConnection['addServerPacket'] = jest.fn(); const dummy = Symbol('dummy') as any; - adapter.libMethods.onVoiceServerUpdate(dummy); + adapter.libMethods.onVoiceServerUpdate!(dummy); expect(voiceConnection['addServerPacket']).toHaveBeenCalledWith(dummy); }); @@ -759,13 +762,13 @@ describe('Adapter', () => { const { adapter, voiceConnection } = createFakeVoiceConnection(); voiceConnection['addStatePacket'] = jest.fn(); const dummy = Symbol('dummy') as any; - adapter.libMethods.onVoiceStateUpdate(dummy); + adapter.libMethods.onVoiceStateUpdate!(dummy); expect(voiceConnection['addStatePacket']).toHaveBeenCalledWith(dummy); }); test('destroy', () => { const { adapter, voiceConnection } = createFakeVoiceConnection(); - adapter.libMethods.destroy(); + adapter.libMethods.destroy!(); expect(voiceConnection.state.status).toEqual(VoiceConnectionStatus.Destroyed); expect(adapter.sendPayload).not.toHaveBeenCalled(); }); diff --git a/packages/voice/__tests__/VoiceReceiver.test.ts b/packages/voice/__tests__/VoiceReceiver.test.ts index fd7bcfb70c15..534911b68ad2 100644 --- a/packages/voice/__tests__/VoiceReceiver.test.ts +++ b/packages/voice/__tests__/VoiceReceiver.test.ts @@ -1,6 +1,9 @@ +/* eslint-disable id-length */ /* eslint-disable @typescript-eslint/no-unsafe-assignment */ /* eslint-disable @typescript-eslint/dot-notation */ +import { Buffer } from 'node:buffer'; import { once } from 'node:events'; +import process from 'node:process'; import { VoiceOpcodes } from 'discord-api-types/voice/v4'; import { RTP_PACKET_DESKTOP, RTP_PACKET_CHROME, RTP_PACKET_ANDROID } from '../__mocks__/rtp'; import { VoiceConnection as _VoiceConnection, VoiceConnectionStatus } from '../src/VoiceConnection'; @@ -16,7 +19,8 @@ openSpy.mockImplementation((buffer) => buffer); const VoiceConnection = _VoiceConnection as unknown as jest.Mocked; -function nextTick() { +async function nextTick() { + // eslint-disable-next-line no-promise-executor-return return new Promise((resolve) => process.nextTick(resolve)); } @@ -178,7 +182,7 @@ describe('VoiceReceiver', () => { // Assert expect(nonce.equals(range(29, 32))).toEqual(true); - expect(decrypted.equals(range(13, 28))).toEqual(true); + expect(decrypted!.equals(range(13, 28))).toEqual(true); }); test('decrypt: xsalsa20_poly1305_suffix', () => { @@ -191,7 +195,7 @@ describe('VoiceReceiver', () => { // Assert expect(nonce.equals(range(41, 64))).toEqual(true); - expect(decrypted.equals(range(13, 40))).toEqual(true); + expect(decrypted!.equals(range(13, 40))).toEqual(true); }); test('decrypt: xsalsa20_poly1305', () => { @@ -204,7 +208,7 @@ describe('VoiceReceiver', () => { // Assert expect(nonce.equals(range(1, 12))).toEqual(true); - expect(decrypted.equals(range(13, 64))).toEqual(true); + expect(decrypted!.equals(range(13, 64))).toEqual(true); }); }); }); diff --git a/packages/voice/__tests__/VoiceUDPSocket.test.ts b/packages/voice/__tests__/VoiceUDPSocket.test.ts index 6178e215b0c3..28c79dca369e 100644 --- a/packages/voice/__tests__/VoiceUDPSocket.test.ts +++ b/packages/voice/__tests__/VoiceUDPSocket.test.ts @@ -1,6 +1,7 @@ /* eslint-disable @typescript-eslint/no-unsafe-return */ /* eslint-disable @typescript-eslint/no-empty-function */ /* eslint-disable @typescript-eslint/no-unused-vars */ +import { Buffer } from 'node:buffer'; import { createSocket as _createSocket } from 'node:dgram'; import EventEmitter, { once } from 'node:events'; import { VoiceUDPSocket } from '../src/networking/VoiceUDPSocket'; @@ -16,6 +17,7 @@ beforeEach(() => { class FakeSocket extends EventEmitter { public send(buffer: Buffer, port: number, address: string) {} + public close() { this.emit('close'); } @@ -29,7 +31,7 @@ const VALID_RESPONSE = Buffer.from([ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0xd3, 0x84, ]); -function wait() { +async function wait() { return new Promise((resolve) => { setImmediate(resolve); jest.advanceTimersToNextTimer(); @@ -52,13 +54,13 @@ describe('VoiceUDPSocket#performIPDiscovery', () => { fake.emit('message', VALID_RESPONSE); }); createSocket.mockImplementation((type) => fake as any); - socket = new VoiceUDPSocket({ ip: '1.2.3.4', port: 25565 }); + socket = new VoiceUDPSocket({ ip: '1.2.3.4', port: 25_565 }); expect(createSocket).toHaveBeenCalledWith('udp4'); expect(fake.listenerCount('message')).toEqual(1); - await expect(socket.performIPDiscovery(1234)).resolves.toEqual({ + await expect(socket.performIPDiscovery(1_234)).resolves.toEqual({ ip: '91.90.123.93', - port: 54148, + port: 54_148, }); // Ensure clean up occurs expect(fake.listenerCount('message')).toEqual(1); @@ -77,13 +79,13 @@ describe('VoiceUDPSocket#performIPDiscovery', () => { fake.emit('message', VALID_RESPONSE); }); createSocket.mockImplementation(() => fake as any); - socket = new VoiceUDPSocket({ ip: '1.2.3.4', port: 25565 }); + socket = new VoiceUDPSocket({ ip: '1.2.3.4', port: 25_565 }); expect(createSocket).toHaveBeenCalledWith('udp4'); expect(fake.listenerCount('message')).toEqual(1); - await expect(socket.performIPDiscovery(1234)).resolves.toEqual({ + await expect(socket.performIPDiscovery(1_234)).resolves.toEqual({ ip: '91.90.123.93', - port: 54148, + port: 54_148, }); // Ensure clean up occurs expect(fake.listenerCount('message')).toEqual(1); @@ -96,10 +98,10 @@ describe('VoiceUDPSocket#performIPDiscovery', () => { fake.close(); }); createSocket.mockImplementation(() => fake as any); - socket = new VoiceUDPSocket({ ip: '1.2.3.4', port: 25565 }); + socket = new VoiceUDPSocket({ ip: '1.2.3.4', port: 25_565 }); expect(createSocket).toHaveBeenCalledWith('udp4'); - await expect(socket.performIPDiscovery(1234)).rejects.toThrowError(); + await expect(socket.performIPDiscovery(1_234)).rejects.toThrowError(); }); test('Stays alive when messages are echoed back', async () => { @@ -109,13 +111,12 @@ describe('VoiceUDPSocket#performIPDiscovery', () => { fake.emit('message', buffer); }); createSocket.mockImplementation(() => fake as any); - socket = new VoiceUDPSocket({ ip: '1.2.3.4', port: 25565 }); + socket = new VoiceUDPSocket({ ip: '1.2.3.4', port: 25_565 }); let closed = false; - // @ts-expect-error socket.on('close', () => (closed = true)); - for (let i = 0; i < 30; i++) { + for (let index = 0; index < 30; index++) { jest.advanceTimersToNextTimer(); await wait(); } @@ -127,13 +128,12 @@ describe('VoiceUDPSocket#performIPDiscovery', () => { const fake = new FakeSocket(); fake.send = jest.fn(); createSocket.mockImplementation(() => fake as any); - socket = new VoiceUDPSocket({ ip: '1.2.3.4', port: 25565 }); + socket = new VoiceUDPSocket({ ip: '1.2.3.4', port: 25_565 }); let closed = false; - // @ts-expect-error socket.on('close', () => (closed = true)); - for (let i = 0; i < 15; i++) { + for (let index = 0; index < 15; index++) { jest.advanceTimersToNextTimer(); await wait(); } @@ -146,25 +146,27 @@ describe('VoiceUDPSocket#performIPDiscovery', () => { const fakeSend = jest.fn(); fake.send = fakeSend; createSocket.mockImplementation(() => fake as any); - socket = new VoiceUDPSocket({ ip: '1.2.3.4', port: 25565 }); + socket = new VoiceUDPSocket({ ip: '1.2.3.4', port: 25_565 }); let closed = false; - // @ts-expect-error + socket.on('close', () => (closed = true)); - for (let i = 0; i < 10; i++) { + for (let index = 0; index < 10; index++) { jest.advanceTimersToNextTimer(); await wait(); } + fakeSend.mockImplementation(async (buffer: Buffer) => { await wait(); fake.emit('message', buffer); }); expect(closed).toEqual(false); - for (let i = 0; i < 30; i++) { + for (let index = 0; index < 30; index++) { jest.advanceTimersToNextTimer(); await wait(); } + expect(closed).toEqual(false); }); }); diff --git a/packages/voice/__tests__/VoiceWebSocket.test.ts b/packages/voice/__tests__/VoiceWebSocket.test.ts index 8ff4287dd90b..027ebe9c7711 100644 --- a/packages/voice/__tests__/VoiceWebSocket.test.ts +++ b/packages/voice/__tests__/VoiceWebSocket.test.ts @@ -1,6 +1,6 @@ /* eslint-disable @typescript-eslint/no-unsafe-member-access */ /* eslint-disable @typescript-eslint/no-unsafe-assignment */ -import EventEmitter, { once } from 'node:events'; +import { type EventEmitter, once } from 'node:events'; import { VoiceOpcodes } from 'discord-api-types/voice/v4'; import WS from 'jest-websocket-mock'; import { VoiceWebSocket } from '../src/networking/VoiceWebSocket'; @@ -9,13 +9,13 @@ beforeEach(() => { WS.clean(); }); -function onceIgnoreError(target: T, event: string) { +async function onceIgnoreError(target: T, event: string) { return new Promise((resolve) => { target.on(event, resolve); }); } -function onceOrThrow(target: T, event: string, after: number) { +async function onceOrThrow(target: T, event: string, after: number) { return new Promise((resolve, reject) => { target.on(event, resolve); setTimeout(() => reject(new Error('Time up')), after); @@ -46,7 +46,7 @@ describe.skip('VoiceWebSocket: packet parsing', () => { server.send('asdf'); await expect(rcv).rejects.toThrowError(); - const dummy = { op: 1234 }; + const dummy = { op: 1_234 }; rcv = once(ws, 'packet'); server.send(JSON.stringify(dummy)); await expect(rcv).resolves.toEqual([dummy]); @@ -94,17 +94,19 @@ describe.skip('VoiceWebSocket: heartbeating', () => { await server.connected; const rcv = onceOrThrow(ws, 'close', 750); ws.setHeartbeatInterval(50); - for (let i = 0; i < 10; i++) { + for (let index = 0; index < 10; index++) { const packet: any = await server.nextMessage; expect(packet).toMatchObject({ op: VoiceOpcodes.Heartbeat, }); server.send({ op: VoiceOpcodes.HeartbeatAck, + // eslint-disable-next-line id-length d: packet.d, }); expect(ws.ping).toBeGreaterThanOrEqual(0); } + ws.setHeartbeatInterval(-1); await expect(rcv).rejects.toThrowError(); }); diff --git a/packages/voice/__tests__/demuxProbe.test.ts b/packages/voice/__tests__/demuxProbe.test.ts index 3d2c8e7b41cc..a6fd78865761 100644 --- a/packages/voice/__tests__/demuxProbe.test.ts +++ b/packages/voice/__tests__/demuxProbe.test.ts @@ -1,10 +1,12 @@ /* eslint-disable @typescript-eslint/no-unsafe-call */ /* eslint-disable @typescript-eslint/no-unsafe-member-access */ /* eslint-disable @typescript-eslint/no-unsafe-assignment */ +import { Buffer } from 'node:buffer'; import EventEmitter, { once } from 'node:events'; +import process from 'node:process'; import { Readable } from 'node:stream'; import { opus as _opus } from 'prism-media'; -import { StreamType } from '../src/audio'; +import { StreamType } from '../src/audio/index'; import { demuxProbe } from '../src/util/demuxProbe'; jest.mock('prism-media'); @@ -12,19 +14,21 @@ jest.mock('prism-media'); const WebmDemuxer = _opus.WebmDemuxer as unknown as jest.Mock<_opus.WebmDemuxer>; const OggDemuxer = _opus.OggDemuxer as unknown as jest.Mock<_opus.OggDemuxer>; -function nextTick() { +async function nextTick() { + // eslint-disable-next-line no-promise-executor-return return new Promise((resolve) => process.nextTick(resolve)); } -async function* gen(n: number) { - for (let i = 0; i < n; i++) { - yield Buffer.from([i]); +async function* gen(num: number) { + for (let index = 0; index < num; index++) { + yield Buffer.from([index]); await nextTick(); } } -function range(n: number) { - return Buffer.from(Array.from(Array(n).keys())); +function range(num: number) { + // eslint-disable-next-line unicorn/no-new-array + return Buffer.from(Array.from(new Array(num).keys())); } const validHead = Buffer.from([ @@ -41,6 +45,7 @@ async function collectStream(stream: Readable): Promise { for await (const data of stream) { output = Buffer.concat([output, data]); } + return output; } @@ -107,10 +112,10 @@ describe('demuxProbe', () => { }); test('Gives up on larger streams', async () => { - const stream = Readable.from(gen(8192), { objectMode: false }); + const stream = Readable.from(gen(8_192), { objectMode: false }); const probe = await demuxProbe(stream); expect(probe.type).toEqual(StreamType.Arbitrary); - await expect(collectStream(probe.stream)).resolves.toEqual(range(8192)); + await expect(collectStream(probe.stream)).resolves.toEqual(range(8_192)); }); test('Propagates errors', async () => { diff --git a/packages/voice/__tests__/entersState.test.ts b/packages/voice/__tests__/entersState.test.ts index 3d4ab8f4b21f..e2f10d888a98 100644 --- a/packages/voice/__tests__/entersState.test.ts +++ b/packages/voice/__tests__/entersState.test.ts @@ -1,7 +1,8 @@ /* eslint-disable @typescript-eslint/no-unsafe-member-access */ /* eslint-disable @typescript-eslint/no-unsafe-assignment */ import EventEmitter from 'node:events'; -import { VoiceConnection, VoiceConnectionStatus } from '../src/VoiceConnection'; +import process from 'node:process'; +import { VoiceConnectionStatus, type VoiceConnection } from '../src/VoiceConnection'; import { entersState } from '../src/util/entersState'; function createFakeVoiceConnection(status = VoiceConnectionStatus.Signalling) { @@ -20,13 +21,13 @@ describe('entersState', () => { const vc = createFakeVoiceConnection(); // eslint-disable-next-line @typescript-eslint/no-unsafe-argument process.nextTick(() => vc.emit(VoiceConnectionStatus.Ready, null as any, null as any)); - const result = await entersState(vc, VoiceConnectionStatus.Ready, 1000); + const result = await entersState(vc, VoiceConnectionStatus.Ready, 1_000); expect(result).toEqual(vc); }); test('Rejects once the timeout is exceeded', async () => { const vc = createFakeVoiceConnection(); - const promise = entersState(vc, VoiceConnectionStatus.Ready, 1000); + const promise = entersState(vc, VoiceConnectionStatus.Ready, 1_000); jest.runAllTimers(); await expect(promise).rejects.toThrowError(); }); @@ -51,6 +52,6 @@ describe('entersState', () => { test('Resolves immediately when target already in desired state', async () => { const vc = createFakeVoiceConnection(); - await expect(entersState(vc, VoiceConnectionStatus.Signalling, 1000)).resolves.toEqual(vc); + await expect(entersState(vc, VoiceConnectionStatus.Signalling, 1_000)).resolves.toEqual(vc); }); }); diff --git a/packages/voice/package.json b/packages/voice/package.json index 2d2d29afd045..03eb654713de 100644 --- a/packages/voice/package.json +++ b/packages/voice/package.json @@ -67,15 +67,9 @@ "@microsoft/api-extractor": "^7.29.5", "@types/jest": "^28.1.8", "@types/node": "^16.11.56", - "@typescript-eslint/eslint-plugin": "^5.36.1", - "@typescript-eslint/parser": "^5.36.1", "downlevel-dts": "^0.10.1", "eslint": "^8.23.0", - "eslint-config-marine": "^9.4.1", - "eslint-config-prettier": "^8.5.0", - "eslint-import-resolver-typescript": "^3.5.0", - "eslint-plugin-import": "^2.26.0", - "eslint-plugin-tsdoc": "^0.2.16", + "eslint-config-neon": "^0.1.23", "jest": "^29.0.1", "jest-websocket-mock": "^2.4.0", "mock-socket": "^9.1.5", diff --git a/packages/voice/src/DataStore.ts b/packages/voice/src/DataStore.ts index 0c86c55d61b1..6e987aef5c3e 100644 --- a/packages/voice/src/DataStore.ts +++ b/packages/voice/src/DataStore.ts @@ -3,11 +3,11 @@ import type { VoiceConnection } from './VoiceConnection'; import type { AudioPlayer } from './audio'; export interface JoinConfig { - guildId: string; channelId: string | null; + group: string; + guildId: string; selfDeaf: boolean; selfMute: boolean; - group: string; } /** @@ -19,6 +19,7 @@ export interface JoinConfig { export function createJoinVoiceChannelPayload(config: JoinConfig) { return { op: GatewayOpcodes.VoiceStateUpdate, + // eslint-disable-next-line id-length d: { guild_id: config.guildId, channel_id: config.channelId, @@ -54,7 +55,6 @@ export function getGroups() { * Retrieves all the voice connections under the 'default' group. * * @param group - The group to look up - * * @returns The map of voice connections */ export function getVoiceConnections(group?: 'default'): Map; @@ -63,7 +63,6 @@ export function getVoiceConnections(group?: 'default'): Map | undefined; @@ -72,7 +71,6 @@ export function getVoiceConnections(group: string): Map * Retrieves all the voice connections under the given group name. Defaults to the 'default' group. * * @param group - The group to look up - * * @returns The map of voice connections */ export function getVoiceConnections(group = 'default') { @@ -84,7 +82,6 @@ export function getVoiceConnections(group = 'default') { * * @param guildId - The guild id of the voice connection * @param group - the group that the voice connection was registered with - * * @returns The voice connection, if it exists */ export function getVoiceConnection(guildId: string, group = 'default') { @@ -122,8 +119,10 @@ function audioCycleStep() { nextTime += FRAME_LENGTH; const available = audioPlayers.filter((player) => player.checkPlayable()); - // eslint-disable-next-line @typescript-eslint/dot-notation - available.forEach((player) => player['_stepDispatch']()); + for (const player of available) { + // eslint-disable-next-line @typescript-eslint/dot-notation + player['_stepDispatch'](); + } // eslint-disable-next-line @typescript-eslint/no-use-before-define prepareNextAudioFrame(available); @@ -140,6 +139,7 @@ function prepareNextAudioFrame(players: AudioPlayer[]) { if (nextTime !== -1) { audioCycleInterval = setTimeout(() => audioCycleStep(), nextTime - Date.now()); } + return; } @@ -154,7 +154,6 @@ function prepareNextAudioFrame(players: AudioPlayer[]) { * Checks whether or not the given audio player is being driven by the data store clock. * * @param target - The target to test for - * * @returns `true` if it is being tracked, `false` otherwise */ export function hasAudioPlayer(target: AudioPlayer) { @@ -173,6 +172,7 @@ export function addAudioPlayer(player: AudioPlayer) { nextTime = Date.now(); setImmediate(() => audioCycleStep()); } + return player; } diff --git a/packages/voice/src/VoiceConnection.ts b/packages/voice/src/VoiceConnection.ts index eb76482c98fa..d77fe2af8f65 100644 --- a/packages/voice/src/VoiceConnection.ts +++ b/packages/voice/src/VoiceConnection.ts @@ -1,40 +1,39 @@ +/* eslint-disable consistent-return */ +/* eslint-disable @typescript-eslint/unbound-method */ +/* eslint-disable jsdoc/check-param-names */ /* eslint-disable @typescript-eslint/method-signature-style */ +import type { Buffer } from 'node:buffer'; import { EventEmitter } from 'node:events'; import type { GatewayVoiceServerUpdateDispatchData, GatewayVoiceStateUpdateDispatchData } from 'discord-api-types/v10'; -import type { CreateVoiceConnectionOptions } from '.'; +import type { JoinConfig } from './DataStore'; import { getVoiceConnection, createJoinVoiceChannelPayload, trackVoiceConnection, - JoinConfig, untrackVoiceConnection, } from './DataStore'; import type { AudioPlayer } from './audio/AudioPlayer'; import type { PlayerSubscription } from './audio/PlayerSubscription'; import type { VoiceWebSocket, VoiceUDPSocket } from './networking'; -import { Networking, NetworkingState, NetworkingStatusCode } from './networking/Networking'; -import { VoiceReceiver } from './receive'; +import { Networking, NetworkingStatusCode, type NetworkingState } from './networking/Networking'; +import { VoiceReceiver } from './receive/index'; import type { DiscordGatewayAdapterImplementerMethods } from './util/adapter'; import { noop } from './util/util'; +import type { CreateVoiceConnectionOptions } from './index'; /** * The various status codes a voice connection can hold at any one time. */ export enum VoiceConnectionStatus { - /** - * Sending a packet to the main Discord gateway to indicate we want to change our voice state. - */ - Signalling = 'signalling', - /** * The `VOICE_SERVER_UPDATE` and `VOICE_STATE_UPDATE` packets have been received, now attempting to establish a voice connection. */ Connecting = 'connecting', /** - * A voice connection has been established, and is ready to be used. + * The voice connection has been destroyed and untracked, it cannot be reused. */ - Ready = 'ready', + Destroyed = 'destroyed', /** * The voice connection has either been severed or not established. @@ -42,9 +41,14 @@ export enum VoiceConnectionStatus { Disconnected = 'disconnected', /** - * The voice connection has been destroyed and untracked, it cannot be reused. + * A voice connection has been established, and is ready to be used. */ - Destroyed = 'destroyed', + Ready = 'ready', + + /** + * Sending a packet to the main Discord gateway to indicate we want to change our voice state. + */ + Signalling = 'signalling', } /** @@ -52,9 +56,9 @@ export enum VoiceConnectionStatus { * VOICE_STATE_UPDATE packet from Discord, provided by the adapter. */ export interface VoiceConnectionSignallingState { + adapter: DiscordGatewayAdapterImplementerMethods; status: VoiceConnectionStatus.Signalling; subscription?: PlayerSubscription | undefined; - adapter: DiscordGatewayAdapterImplementerMethods; } /** @@ -87,9 +91,9 @@ export enum VoiceConnectionDisconnectReason { * it attempting to connect. You can manually attempt to reconnect using VoiceConnection#reconnect. */ export interface VoiceConnectionDisconnectedBaseState { + adapter: DiscordGatewayAdapterImplementerMethods; status: VoiceConnectionStatus.Disconnected; subscription?: PlayerSubscription | undefined; - adapter: DiscordGatewayAdapterImplementerMethods; } /** @@ -105,12 +109,12 @@ export interface VoiceConnectionDisconnectedOtherState extends VoiceConnectionDi * You can manually attempt to reconnect using VoiceConnection#reconnect. */ export interface VoiceConnectionDisconnectedWebSocketState extends VoiceConnectionDisconnectedBaseState { - reason: VoiceConnectionDisconnectReason.WebSocketClose; - /** * The close code of the WebSocket connection to the Discord voice server. */ closeCode: number; + + reason: VoiceConnectionDisconnectReason.WebSocketClose; } /** @@ -126,10 +130,10 @@ export type VoiceConnectionDisconnectedState = * voice server. */ export interface VoiceConnectionConnectingState { - status: VoiceConnectionStatus.Connecting; + adapter: DiscordGatewayAdapterImplementerMethods; networking: Networking; + status: VoiceConnectionStatus.Connecting; subscription?: PlayerSubscription | undefined; - adapter: DiscordGatewayAdapterImplementerMethods; } /** @@ -137,10 +141,10 @@ export interface VoiceConnectionConnectingState { * voice server. */ export interface VoiceConnectionReadyState { - status: VoiceConnectionStatus.Ready; + adapter: DiscordGatewayAdapterImplementerMethods; networking: Networking; + status: VoiceConnectionStatus.Ready; subscription?: PlayerSubscription | undefined; - adapter: DiscordGatewayAdapterImplementerMethods; } /** @@ -156,30 +160,34 @@ export interface VoiceConnectionDestroyedState { * The various states that a voice connection can be in. */ export type VoiceConnectionState = - | VoiceConnectionSignallingState - | VoiceConnectionDisconnectedState | VoiceConnectionConnectingState + | VoiceConnectionDestroyedState + | VoiceConnectionDisconnectedState | VoiceConnectionReadyState - | VoiceConnectionDestroyedState; + | VoiceConnectionSignallingState; export interface VoiceConnection extends EventEmitter { /** * Emitted when there is an error emitted from the voice connection + * * @eventProperty */ on(event: 'error', listener: (error: Error) => void): this; /** * Emitted debugging information about the voice connection + * * @eventProperty */ on(event: 'debug', listener: (message: string) => void): this; /** * Emitted when the state of the voice connection changes + * * @eventProperty */ on(event: 'stateChange', listener: (oldState: VoiceConnectionState, newState: VoiceConnectionState) => void): this; /** * Emitted when the state of the voice connection changes to a specific status + * * @eventProperty */ on( @@ -228,7 +236,7 @@ export class VoiceConnection extends EventEmitter { /** * The debug logger function, if debugging is enabled. */ - private readonly debug: null | ((message: string) => void); + private readonly debug: ((message: string) => void) | null; /** * Creates a new voice connection. @@ -292,6 +300,7 @@ export class VoiceConnection extends EventEmitter { oldNetworking.off('stateChange', this.onNetworkingStateChange); oldNetworking.destroy(); } + if (newNetworking) this.updateReceiveBindings(newNetworking.state, oldNetworking?.state); } @@ -362,6 +371,7 @@ export class VoiceConnection extends EventEmitter { /** * Called when the networking state changes, and the new ws/udp packet/message handlers need to be rebound * to the new instances. + * * @param newState - The new networking state * @param oldState - The old networking state, if there is one */ @@ -432,13 +442,12 @@ export class VoiceConnection extends EventEmitter { * If the close code was anything other than 4014, it is likely that the closing was not intended, and so the * VoiceConnection will signal to Discord that it would like to rejoin the channel. This automatically attempts * to re-establish the connection. This would be seen as a transition from the Ready state to the Signalling state. - * * @param code - The close code */ private onNetworkingClose(code: number) { if (this.state.status === VoiceConnectionStatus.Destroyed) return; // If networking closes, try to connect to the voice channel again. - if (code === 4014) { + if (code === 4_014) { // Disconnected - networking is already destroyed here this.state = { ...this.state, @@ -548,12 +557,15 @@ export class VoiceConnection extends EventEmitter { if (this.state.status === VoiceConnectionStatus.Destroyed) { throw new Error('Cannot destroy VoiceConnection - it has already been destroyed'); } + if (getVoiceConnection(this.joinConfig.guildId, this.joinConfig.group) === this) { untrackVoiceConnection(this); } + if (adapterAvailable) { this.state.adapter.sendPayload(createJoinVoiceChannelPayload({ ...this.joinConfig, channelId: null })); } + this.state = { status: VoiceConnectionStatus.Destroyed, }; @@ -571,6 +583,7 @@ export class VoiceConnection extends EventEmitter { ) { return false; } + this.joinConfig.channelId = null; if (!this.state.adapter.sendPayload(createJoinVoiceChannelPayload(this.joinConfig))) { this.state = { @@ -581,6 +594,7 @@ export class VoiceConnection extends EventEmitter { }; return false; } + this.state = { adapter: this.state.adapter, reason: VoiceConnectionDisconnectReason.Manual, @@ -599,7 +613,7 @@ export class VoiceConnection extends EventEmitter { * * A state transition from Disconnected to Signalling will be observed when this is called. */ - public rejoin(joinConfig?: Omit) { + public rejoin(joinConfig?: Omit) { if (this.state.status === VoiceConnectionStatus.Destroyed) { return false; } @@ -615,6 +629,7 @@ export class VoiceConnection extends EventEmitter { status: VoiceConnectionStatus.Signalling, }; } + return true; } @@ -635,6 +650,7 @@ export class VoiceConnection extends EventEmitter { */ public setSpeaking(enabled: boolean) { if (this.state.status !== VoiceConnectionStatus.Ready) return false; + // eslint-disable-next-line @typescript-eslint/no-confusing-void-expression return this.state.networking.setSpeaking(enabled); } @@ -642,7 +658,6 @@ export class VoiceConnection extends EventEmitter { * Subscribes to an audio player, allowing the player to play audio on this voice connection. * * @param player - The audio player to subscribe to - * * @returns The created subscription */ public subscribe(player: AudioPlayer) { @@ -677,6 +692,7 @@ export class VoiceConnection extends EventEmitter { udp: this.state.networking.state.udp.ping, }; } + return { ws: undefined, udp: undefined, @@ -721,19 +737,22 @@ export function createVoiceConnection(joinConfig: JoinConfig, options: CreateVoi reason: VoiceConnectionDisconnectReason.AdapterUnavailable, }; } + return existing; } const voiceConnection = new VoiceConnection(joinConfig, options); trackVoiceConnection(voiceConnection); - if (voiceConnection.state.status !== VoiceConnectionStatus.Destroyed) { - if (!voiceConnection.state.adapter.sendPayload(payload)) { - voiceConnection.state = { - ...voiceConnection.state, - status: VoiceConnectionStatus.Disconnected, - reason: VoiceConnectionDisconnectReason.AdapterUnavailable, - }; - } + if ( + voiceConnection.state.status !== VoiceConnectionStatus.Destroyed && + !voiceConnection.state.adapter.sendPayload(payload) + ) { + voiceConnection.state = { + ...voiceConnection.state, + status: VoiceConnectionStatus.Disconnected, + reason: VoiceConnectionDisconnectReason.AdapterUnavailable, + }; } + return voiceConnection; } diff --git a/packages/voice/src/audio/AudioPlayer.ts b/packages/voice/src/audio/AudioPlayer.ts index 25d73361cd85..a5a25acd8325 100644 --- a/packages/voice/src/audio/AudioPlayer.ts +++ b/packages/voice/src/audio/AudioPlayer.ts @@ -1,11 +1,12 @@ /* eslint-disable @typescript-eslint/prefer-ts-expect-error, @typescript-eslint/method-signature-style */ +import { Buffer } from 'node:buffer'; import EventEmitter from 'node:events'; +import { addAudioPlayer, deleteAudioPlayer } from '../DataStore'; +import { VoiceConnectionStatus, type VoiceConnection } from '../VoiceConnection'; +import { noop } from '../util/util'; import { AudioPlayerError } from './AudioPlayerError'; import type { AudioResource } from './AudioResource'; import { PlayerSubscription } from './PlayerSubscription'; -import { addAudioPlayer, deleteAudioPlayer } from '../DataStore'; -import { VoiceConnection, VoiceConnectionStatus } from '../VoiceConnection'; -import { noop } from '../util/util'; // The Opus "silent" frame export const SILENCE_FRAME = Buffer.from([0xf8, 0xff, 0xfe]); @@ -33,15 +34,20 @@ export enum NoSubscriberBehavior { export enum AudioPlayerStatus { /** - * When there is currently no resource for the player to be playing. + * When the player has paused itself. Only possible with the "pause" no subscriber behavior. */ - Idle = 'idle', + AutoPaused = 'autopaused', /** * When the player is waiting for an audio resource to become readable before transitioning to Playing. */ Buffering = 'buffering', + /** + * When there is currently no resource for the player to be playing. + */ + Idle = 'idle', + /** * When the player has been manually paused. */ @@ -51,22 +57,17 @@ export enum AudioPlayerStatus { * When the player is actively playing an audio resource. */ Playing = 'playing', - - /** - * When the player has paused itself. Only possible with the "pause" no subscriber behavior. - */ - AutoPaused = 'autopaused', } /** * Options that can be passed when creating an audio player, used to specify its behavior. */ export interface CreateAudioPlayerOptions { - debug?: boolean; behaviors?: { - noSubscriber?: NoSubscriberBehavior; maxMissedFrames?: number; + noSubscriber?: NoSubscriberBehavior; }; + debug?: boolean; } /** @@ -82,14 +83,14 @@ export interface AudioPlayerIdleState { * it will re-enter the Idle state. */ export interface AudioPlayerBufferingState { - status: AudioPlayerStatus.Buffering; + onFailureCallback: () => void; + onReadableCallback: () => void; + onStreamError: (error: Error) => void; /** * The resource that the AudioPlayer is waiting for */ resource: AudioResource; - onReadableCallback: () => void; - onFailureCallback: () => void; - onStreamError: (error: Error) => void; + status: AudioPlayerStatus.Buffering; } /** @@ -97,11 +98,11 @@ export interface AudioPlayerBufferingState { * it will enter the Idle state. */ export interface AudioPlayerPlayingState { - status: AudioPlayerStatus.Playing; /** * The number of consecutive times that the audio resource has been unable to provide an Opus frame. */ missedFrames: number; + onStreamError: (error: Error) => void; /** * The playback duration in milliseconds of the current audio resource. This includes filler silence packets @@ -114,7 +115,7 @@ export interface AudioPlayerPlayingState { */ resource: AudioResource; - onStreamError: (error: Error) => void; + status: AudioPlayerStatus.Playing; } /** @@ -122,12 +123,7 @@ export interface AudioPlayerPlayingState { * automatically by the AudioPlayer itself if there are no available subscribers. */ export interface AudioPlayerPausedState { - status: AudioPlayerStatus.Paused | AudioPlayerStatus.AutoPaused; - /** - * How many silence packets still need to be played to avoid audio interpolation due to the stream suddenly pausing. - */ - silencePacketsRemaining: number; - + onStreamError: (error: Error) => void; /** * The playback duration in milliseconds of the current audio resource. This includes filler silence packets * that have been played when the resource was buffering. @@ -139,41 +135,51 @@ export interface AudioPlayerPausedState { */ resource: AudioResource; - onStreamError: (error: Error) => void; + /** + * How many silence packets still need to be played to avoid audio interpolation due to the stream suddenly pausing. + */ + silencePacketsRemaining: number; + + status: AudioPlayerStatus.AutoPaused | AudioPlayerStatus.Paused; } /** * The various states that the player can be in. */ export type AudioPlayerState = - | AudioPlayerIdleState | AudioPlayerBufferingState - | AudioPlayerPlayingState - | AudioPlayerPausedState; + | AudioPlayerIdleState + | AudioPlayerPausedState + | AudioPlayerPlayingState; export interface AudioPlayer extends EventEmitter { /** * Emitted when there is an error emitted from the audio resource played by the audio player + * * @eventProperty */ on(event: 'error', listener: (error: AudioPlayerError) => void): this; /** * Emitted debugging information about the audio player + * * @eventProperty */ on(event: 'debug', listener: (message: string) => void): this; /** * Emitted when the state of the audio player changes + * * @eventProperty */ on(event: 'stateChange', listener: (oldState: AudioPlayerState, newState: AudioPlayerState) => void): this; /** * Emitted when the audio player is subscribed to a voice connection + * * @eventProperty */ on(event: 'subscribe' | 'unsubscribe', listener: (subscription: PlayerSubscription) => void): this; /** * Emitted when the status of state changes to a specific status + * * @eventProperty */ on( @@ -221,14 +227,14 @@ export class AudioPlayer extends EventEmitter { * The behavior that the player should follow when it enters certain situations. */ private readonly behaviors: { - noSubscriber: NoSubscriberBehavior; maxMissedFrames: number; + noSubscriber: NoSubscriberBehavior; }; /** * The debug logger function, if debugging is enabled. */ - private readonly debug: null | ((message: string) => void); + private readonly debug: ((message: string) => void) | null; /** * Creates a new AudioPlayer. @@ -259,9 +265,7 @@ export class AudioPlayer extends EventEmitter { * * @remarks * This method should not be directly called. Instead, use VoiceConnection#subscribe. - * * @param connection - The connection to subscribe - * * @returns The new subscription if the voice connection is not yet subscribed, otherwise the existing subscription */ // @ts-ignore @@ -273,6 +277,7 @@ export class AudioPlayer extends EventEmitter { setImmediate(() => this.emit('subscribe', subscription)); return subscription; } + return existingSubscription; } @@ -281,9 +286,7 @@ export class AudioPlayer extends EventEmitter { * * @remarks * This method should not be directly called. Instead, use PlayerSubscription#unsubscribe. - * * @param subscription - The subscription to remove - * * @returns Whether or not the subscription existed on the player and was removed */ // @ts-ignore @@ -295,6 +298,7 @@ export class AudioPlayer extends EventEmitter { subscription.connection.setSpeaking(false); this.emit('unsubscribe', subscription); } + return exists; } @@ -355,6 +359,7 @@ export class AudioPlayer extends EventEmitter { // eslint-disable-next-line @typescript-eslint/no-unsafe-argument this.emit(newState.status, oldState, this._state as any); } + this.debug?.(`state change:\nfrom ${stringifyState(oldState)}\nto ${stringifyState(newState)}`); } @@ -368,9 +373,7 @@ export class AudioPlayer extends EventEmitter { * * If the player was previously playing a resource and this method is called, the player will not transition to the * Idle state during the swap over. - * * @param resource - The resource to play - * * @throws Will throw if attempting to play an audio resource that has already ended, or is being played by another player */ public play(resource: AudioResource) { @@ -382,8 +385,10 @@ export class AudioPlayer extends EventEmitter { if (resource.audioPlayer === this) { return; } + throw new Error('Resource is already being played by another audio player.'); } + resource.audioPlayer = this; // Attach error listeners to the stream that will propagate the error and then return to the Idle @@ -451,7 +456,6 @@ export class AudioPlayer extends EventEmitter { * Pauses playback of the current resource, if any. * * @param interpolateSilence - If true, the player will play 5 packets of silence after pausing to prevent audio glitches - * * @returns `true` if the player was successfully paused, otherwise `false` */ public pause(interpolateSilence = true) { @@ -484,7 +488,6 @@ export class AudioPlayer extends EventEmitter { * or remain in its current state until the silence padding frames of the resource have been played. * * @param force - If true, will force the player to enter the Idle state even if the resource has silence padding frames - * * @returns `true` if the player will come to a stop, otherwise `false` */ public stop(force = false) { @@ -496,6 +499,7 @@ export class AudioPlayer extends EventEmitter { } else if (this.state.resource.silenceRemaining === -1) { this.state.resource.silenceRemaining = this.state.resource.silencePaddingFrames; } + return true; } @@ -515,6 +519,7 @@ export class AudioPlayer extends EventEmitter { }; return false; } + return true; } @@ -530,7 +535,9 @@ export class AudioPlayer extends EventEmitter { if (state.status === AudioPlayerStatus.Idle || state.status === AudioPlayerStatus.Buffering) return; // Dispatch any audio packets that were prepared in the previous cycle - this.playable.forEach((connection) => connection.dispatchAudio()); + for (const connection of this.playable) { + connection.dispatchAudio(); + } } /** @@ -568,6 +575,7 @@ export class AudioPlayer extends EventEmitter { this._signalStopSpeaking(); } } + return; } @@ -612,7 +620,9 @@ export class AudioPlayer extends EventEmitter { * they are no longer speaking. Called once playback of a resource ends. */ private _signalStopSpeaking() { - return this.subscribers.forEach(({ connection }) => connection.setSpeaking(false)); + for (const { connection } of this.subscribers) { + connection.setSpeaking(false); + } } /** @@ -625,10 +635,12 @@ export class AudioPlayer extends EventEmitter { private _preparePacket( packet: Buffer, receivers: VoiceConnection[], - state: AudioPlayerPlayingState | AudioPlayerPausedState, + state: AudioPlayerPausedState | AudioPlayerPlayingState, ) { state.playbackDuration += 20; - receivers.forEach((connection) => connection.prepareAudioPacket(packet)); + for (const connection of receivers) { + connection.prepareAudioPacket(packet); + } } } diff --git a/packages/voice/src/audio/AudioPlayerError.ts b/packages/voice/src/audio/AudioPlayerError.ts index 4b16e802c3cf..eb7344580d59 100644 --- a/packages/voice/src/audio/AudioPlayerError.ts +++ b/packages/voice/src/audio/AudioPlayerError.ts @@ -9,6 +9,7 @@ export class AudioPlayerError extends Error { * The resource associated with the audio player at the time the error was thrown. */ public readonly resource: AudioResource; + public constructor(error: Error, resource: AudioResource) { super(error.message); this.resource = resource; diff --git a/packages/voice/src/audio/AudioResource.ts b/packages/voice/src/audio/AudioResource.ts index 61b1d9cc8a15..0deaccf32bc1 100644 --- a/packages/voice/src/audio/AudioResource.ts +++ b/packages/voice/src/audio/AudioResource.ts @@ -1,8 +1,9 @@ -import { pipeline, Readable } from 'node:stream'; +import type { Buffer } from 'node:buffer'; +import { pipeline, type Readable } from 'node:stream'; import prism from 'prism-media'; -import { AudioPlayer, SILENCE_FRAME } from './AudioPlayer'; -import { Edge, findPipeline, StreamType, TransformerType } from './TransformerGraph'; import { noop } from '../util/util'; +import { SILENCE_FRAME, type AudioPlayer } from './AudioPlayer'; +import { findPipeline, StreamType, TransformerType, type Edge } from './TransformerGraph'; /** * Options that are set when creating a new audio resource. @@ -10,6 +11,12 @@ import { noop } from '../util/util'; * @typeParam T - the type for the metadata (if any) of the audio resource */ export interface CreateAudioResourceOptions { + /** + * Whether or not inline volume should be enabled. If enabled, you will be able to change the volume + * of the stream on-the-fly. However, this also increases the performance cost of playback. Defaults to `false`. + */ + inlineVolume?: boolean; + /** * The type of the input stream. Defaults to `StreamType.Arbitrary`. */ @@ -22,12 +29,6 @@ export interface CreateAudioResourceOptions { */ metadata?: T; - /** - * Whether or not inline volume should be enabled. If enabled, you will be able to change the volume - * of the stream on-the-fly. However, this also increases the performance cost of playback. Defaults to `false`. - */ - inlineVolume?: boolean; - /** * The number of silence frames to append to the end of the resource's audio stream, to prevent interpolation glitches. * Defaults to 5. @@ -123,6 +124,7 @@ export class AudioResource { if (this.silenceRemaining === -1) this.silenceRemaining = this.silencePaddingFrames; return this.silenceRemaining !== 0; } + return real; } @@ -141,7 +143,6 @@ export class AudioResource { * It is advisable to check that the playStream is readable before calling this method. While no runtime * errors will be thrown, you should check that the resource is still available before attempting to * read from it. - * * @internal */ public read(): Buffer | null { @@ -151,10 +152,12 @@ export class AudioResource { this.silenceRemaining--; return SILENCE_FRAME; } + const packet = this.playStream.read() as Buffer | null; if (packet) { this.playbackDuration += 20; } + return packet; } } @@ -174,8 +177,8 @@ export const NO_CONSTRAINT = () => true; * @param stream - The stream to infer the type of */ export function inferStreamType(stream: Readable): { - streamType: StreamType; hasVolume: boolean; + streamType: StreamType; } { if (stream instanceof prism.opus.Encoder) { return { streamType: StreamType.Opus, hasVolume: false }; @@ -188,6 +191,7 @@ export function inferStreamType(stream: Readable): { } else if (stream instanceof prism.opus.WebmDemuxer) { return { streamType: StreamType.Opus, hasVolume: false }; } + return { streamType: StreamType.Arbitrary, hasVolume: false }; } @@ -200,14 +204,12 @@ export function inferStreamType(stream: Readable): { * If the input is not in the correct format, then a pipeline of transcoders and transformers will be created * to ensure that the resultant stream is in the correct format for playback. This could involve using FFmpeg, * Opus transcoders, and Ogg/WebM demuxers. - * * @param input - The resource to play * @param options - Configurable options for creating the resource - * * @typeParam T - the type for the metadata (if any) of the audio resource */ export function createAudioResource( - input: string | Readable, + input: Readable | string, options: CreateAudioResourceOptions & Pick< T extends null | undefined ? CreateAudioResourceOptions : Required>, @@ -224,14 +226,12 @@ export function createAudioResource( * If the input is not in the correct format, then a pipeline of transcoders and transformers will be created * to ensure that the resultant stream is in the correct format for playback. This could involve using FFmpeg, * Opus transcoders, and Ogg/WebM demuxers. - * * @param input - The resource to play * @param options - Configurable options for creating the resource - * * @typeParam T - the type for the metadata (if any) of the audio resource */ export function createAudioResource( - input: string | Readable, + input: Readable | string, options?: Omit, 'metadata'>, ): AudioResource; @@ -244,14 +244,12 @@ export function createAudioResource( * If the input is not in the correct format, then a pipeline of transcoders and transformers will be created * to ensure that the resultant stream is in the correct format for playback. This could involve using FFmpeg, * Opus transcoders, and Ogg/WebM demuxers. - * * @param input - The resource to play * @param options - Configurable options for creating the resource - * * @typeParam T - the type for the metadata (if any) of the audio resource */ export function createAudioResource( - input: string | Readable, + input: Readable | string, options: CreateAudioResourceOptions = {}, ): AudioResource { let inputType = options.inputType; @@ -273,6 +271,7 @@ export function createAudioResource( // No adjustments required return new AudioResource([], [input], (options.metadata ?? null) as T, options.silencePaddingFrames ?? 5); } + const streams = transformerPipeline.map((edge) => edge.transformer(input)); if (typeof input !== 'string') streams.unshift(input); diff --git a/packages/voice/src/audio/PlayerSubscription.ts b/packages/voice/src/audio/PlayerSubscription.ts index 9e56a0480e5b..e3d6fddba102 100644 --- a/packages/voice/src/audio/PlayerSubscription.ts +++ b/packages/voice/src/audio/PlayerSubscription.ts @@ -1,6 +1,6 @@ /* eslint-disable @typescript-eslint/dot-notation */ -import type { AudioPlayer } from './AudioPlayer'; import type { VoiceConnection } from '../VoiceConnection'; +import type { AudioPlayer } from './AudioPlayer'; /** * Represents a subscription of a voice connection to an audio player, allowing diff --git a/packages/voice/src/audio/TransformerGraph.ts b/packages/voice/src/audio/TransformerGraph.ts index ada56387a293..fbb8d3252dcb 100644 --- a/packages/voice/src/audio/TransformerGraph.ts +++ b/packages/voice/src/audio/TransformerGraph.ts @@ -34,33 +34,33 @@ const FFMPEG_OPUS_ARGUMENTS = [ */ export enum StreamType { Arbitrary = 'arbitrary', - Raw = 'raw', OggOpus = 'ogg/opus', - WebmOpus = 'webm/opus', Opus = 'opus', + Raw = 'raw', + WebmOpus = 'webm/opus', } /** * The different types of transformers that can exist within the pipeline. */ export enum TransformerType { - FFmpegPCM = 'ffmpeg pcm', FFmpegOgg = 'ffmpeg ogg', - OpusEncoder = 'opus encoder', - OpusDecoder = 'opus decoder', + FFmpegPCM = 'ffmpeg pcm', + InlineVolume = 'volume transformer', OggOpusDemuxer = 'ogg/opus demuxer', + OpusDecoder = 'opus decoder', + OpusEncoder = 'opus encoder', WebmOpusDemuxer = 'webm/opus demuxer', - InlineVolume = 'volume transformer', } /** * Represents a pathway from one stream type to another using a transformer. */ export interface Edge { + cost: number; from: Node; to: Node; - cost: number; - transformer: (input: string | Readable) => Readable; + transformer(input: Readable | string): Readable; type: TransformerType; } @@ -113,14 +113,14 @@ getNode(StreamType.Raw).addEdge({ type: TransformerType.OpusEncoder, to: getNode(StreamType.Opus), cost: 1.5, - transformer: () => new prism.opus.Encoder({ rate: 48000, channels: 2, frameSize: 960 }), + transformer: () => new prism.opus.Encoder({ rate: 48_000, channels: 2, frameSize: 960 }), }); getNode(StreamType.Opus).addEdge({ type: TransformerType.OpusDecoder, to: getNode(StreamType.Raw), cost: 1.5, - transformer: () => new prism.opus.Decoder({ rate: 48000, channels: 2, frameSize: 960 }), + transformer: () => new prism.opus.Decoder({ rate: 48_000, channels: 2, frameSize: 960 }), }); getNode(StreamType.OggOpus).addEdge({ @@ -163,6 +163,7 @@ function canEnableFFmpegOptimizations(): boolean { try { return prism.FFmpeg.getInfo().output.includes('--enable-libopus'); } catch {} + return false; } @@ -188,11 +189,6 @@ if (canEnableFFmpegOptimizations()) { * Represents a step in the path from node A to node B. */ interface Step { - /** - * The next step. - */ - next?: Step; - /** * The cost of the steps after this step. */ @@ -202,6 +198,11 @@ interface Step { * The edge associated with this step. */ edge?: Edge; + + /** + * The next step. + */ + next?: Step; } /** @@ -223,10 +224,10 @@ function findPath( if (from === goal && constraints(path)) { return { cost: 0 }; } else if (depth === 0) { - return { cost: Infinity }; + return { cost: Number.POSITIVE_INFINITY }; } - let currentBest: Step | undefined = undefined; + let currentBest: Step | undefined; for (const edge of from.edges) { if (currentBest && edge.cost > currentBest.cost) continue; const next = findPath(edge.to, constraints, goal, [...path, edge], depth - 1); @@ -235,7 +236,8 @@ function findPath( currentBest = { cost, edge, next }; } } - return currentBest ?? { cost: Infinity }; + + return currentBest ?? { cost: Number.POSITIVE_INFINITY }; } /** @@ -250,6 +252,7 @@ function constructPipeline(step: Step) { edges.push(current.edge); current = current.next; } + return edges; } diff --git a/packages/voice/src/index.ts b/packages/voice/src/index.ts index 13698c0f18c5..2ed09b69ed3b 100644 --- a/packages/voice/src/index.ts +++ b/packages/voice/src/index.ts @@ -1,7 +1,7 @@ export * from './joinVoiceChannel'; -export * from './audio'; -export * from './util'; -export * from './receive'; +export * from './audio/index'; +export * from './util/index'; +export * from './receive/index'; export { VoiceConnection, diff --git a/packages/voice/src/joinVoiceChannel.ts b/packages/voice/src/joinVoiceChannel.ts index 8ff5e8c65206..15c083c75e1d 100644 --- a/packages/voice/src/joinVoiceChannel.ts +++ b/packages/voice/src/joinVoiceChannel.ts @@ -6,13 +6,13 @@ import type { DiscordGatewayAdapterCreator } from './util/adapter'; * The options that can be given when creating a voice connection. */ export interface CreateVoiceConnectionOptions { + adapterCreator: DiscordGatewayAdapterCreator; + /** * If true, debug messages will be enabled for the voice connection and its * related components. Defaults to false. */ debug?: boolean | undefined; - - adapterCreator: DiscordGatewayAdapterCreator; } /** @@ -24,6 +24,11 @@ export interface JoinVoiceChannelOptions { */ channelId: string; + /** + * An optional group identifier for the voice connection. + */ + group?: string; + /** * The id of the guild that the voice channel belongs to. */ @@ -38,20 +43,14 @@ export interface JoinVoiceChannelOptions { * Whether to join the channel muted (defaults to true) */ selfMute?: boolean; - - /** - * An optional group identifier for the voice connection. - */ - group?: string; } /** * Creates a VoiceConnection to a Discord voice channel. * - * @param voiceChannel - the voice channel to connect to * @param options - the options for joining the voice channel */ -export function joinVoiceChannel(options: JoinVoiceChannelOptions & CreateVoiceConnectionOptions) { +export function joinVoiceChannel(options: CreateVoiceConnectionOptions & JoinVoiceChannelOptions) { const joinConfig: JoinConfig = { selfDeaf: true, selfMute: false, diff --git a/packages/voice/src/networking/Networking.ts b/packages/voice/src/networking/Networking.ts index 7af99ba2dd38..af53da86986f 100644 --- a/packages/voice/src/networking/Networking.ts +++ b/packages/voice/src/networking/Networking.ts @@ -1,15 +1,19 @@ +/* eslint-disable jsdoc/check-param-names */ +/* eslint-disable id-length */ +/* eslint-disable @typescript-eslint/unbound-method */ /* eslint-disable @typescript-eslint/method-signature-style */ +import { Buffer } from 'node:buffer'; import { EventEmitter } from 'node:events'; import { VoiceOpcodes } from 'discord-api-types/voice/v4'; import type { CloseEvent } from 'ws'; -import { VoiceUDPSocket } from './VoiceUDPSocket'; -import { VoiceWebSocket } from './VoiceWebSocket'; import * as secretbox from '../util/Secretbox'; import { noop } from '../util/util'; +import { VoiceUDPSocket } from './VoiceUDPSocket'; +import { VoiceWebSocket } from './VoiceWebSocket'; // The number of audio channels required by Discord const CHANNELS = 2; -const TIMESTAMP_INC = (48000 / 100) * CHANNELS; +const TIMESTAMP_INC = (48_000 / 100) * CHANNELS; const MAX_NONCE_SIZE = 2 ** 32 - 1; export const SUPPORTED_ENCRYPTION_MODES = ['xsalsa20_poly1305_lite', 'xsalsa20_poly1305_suffix', 'xsalsa20_poly1305']; @@ -35,8 +39,8 @@ export enum NetworkingStatusCode { */ export interface NetworkingOpeningWsState { code: NetworkingStatusCode.OpeningWs; - ws: VoiceWebSocket; connectionOptions: ConnectionOptions; + ws: VoiceWebSocket; } /** @@ -44,8 +48,8 @@ export interface NetworkingOpeningWsState { */ export interface NetworkingIdentifyingState { code: NetworkingStatusCode.Identifying; - ws: VoiceWebSocket; connectionOptions: ConnectionOptions; + ws: VoiceWebSocket; } /** @@ -54,10 +58,10 @@ export interface NetworkingIdentifyingState { */ export interface NetworkingUdpHandshakingState { code: NetworkingStatusCode.UdpHandshaking; - ws: VoiceWebSocket; - udp: VoiceUDPSocket; - connectionOptions: ConnectionOptions; connectionData: Pick; + connectionOptions: ConnectionOptions; + udp: VoiceUDPSocket; + ws: VoiceWebSocket; } /** @@ -65,10 +69,10 @@ export interface NetworkingUdpHandshakingState { */ export interface NetworkingSelectingProtocolState { code: NetworkingStatusCode.SelectingProtocol; - ws: VoiceWebSocket; - udp: VoiceUDPSocket; - connectionOptions: ConnectionOptions; connectionData: Pick; + connectionOptions: ConnectionOptions; + udp: VoiceUDPSocket; + ws: VoiceWebSocket; } /** @@ -77,11 +81,11 @@ export interface NetworkingSelectingProtocolState { */ export interface NetworkingReadyState { code: NetworkingStatusCode.Ready; - ws: VoiceWebSocket; - udp: VoiceUDPSocket; - connectionOptions: ConnectionOptions; connectionData: ConnectionData; + connectionOptions: ConnectionOptions; preparedPacket?: Buffer | undefined; + udp: VoiceUDPSocket; + ws: VoiceWebSocket; } /** @@ -90,11 +94,11 @@ export interface NetworkingReadyState { */ export interface NetworkingResumingState { code: NetworkingStatusCode.Resuming; - ws: VoiceWebSocket; - udp: VoiceUDPSocket; - connectionOptions: ConnectionOptions; connectionData: ConnectionData; + connectionOptions: ConnectionOptions; preparedPacket?: Buffer | undefined; + udp: VoiceUDPSocket; + ws: VoiceWebSocket; } /** @@ -109,13 +113,13 @@ export interface NetworkingClosedState { * The various states that a networking instance can be in. */ export type NetworkingState = - | NetworkingOpeningWsState + | NetworkingClosedState | NetworkingIdentifyingState - | NetworkingUdpHandshakingState - | NetworkingSelectingProtocolState + | NetworkingOpeningWsState | NetworkingReadyState | NetworkingResumingState - | NetworkingClosedState; + | NetworkingSelectingProtocolState + | NetworkingUdpHandshakingState; /** * Details required to connect to the Discord voice gateway. These details @@ -123,11 +127,11 @@ export type NetworkingState = * and VOICE_STATE_UPDATE packets. */ interface ConnectionOptions { + endpoint: string; serverId: string; - userId: string; sessionId: string; token: string; - endpoint: string; + userId: string; } /** @@ -135,15 +139,15 @@ interface ConnectionOptions { * the connection, timing information for playback of streams. */ export interface ConnectionData { - ssrc: number; encryptionMode: string; - secretKey: Uint8Array; - sequence: number; - timestamp: number; - packetsPlayed: number; nonce: number; nonceBuffer: Buffer; + packetsPlayed: number; + secretKey: Uint8Array; + sequence: number; speaking: boolean; + ssrc: number; + timestamp: number; } /** @@ -186,16 +190,17 @@ function chooseEncryptionMode(options: string[]): string { if (!option) { throw new Error(`No compatible encryption modes. Available include: ${options.join(', ')}`); } + return option; } /** * Returns a random number that is in the range of n bits. * - * @param n - The number of bits + * @param numberOfBits - The number of bits */ -function randomNBit(n: number) { - return Math.floor(Math.random() * 2 ** n); +function randomNBit(numberOfBits: number) { + return Math.floor(Math.random() * 2 ** numberOfBits); } /** @@ -207,7 +212,7 @@ export class Networking extends EventEmitter { /** * The debug logger function, if debugging is enabled. */ - private readonly debug: null | ((message: string) => void); + private readonly debug: ((message: string) => void) | null; /** * Creates a new Networking instance. @@ -287,7 +292,6 @@ export class Networking extends EventEmitter { * Creates a new WebSocket to a Discord Voice gateway. * * @param endpoint - The endpoint to connect to - * @param debug - Whether to enable debug logging */ private createWebSocket(endpoint: string) { const ws = new VoiceWebSocket(`wss://${endpoint}?v=4`, Boolean(this.debug)); @@ -351,7 +355,7 @@ export class Networking extends EventEmitter { * @param code - The close code */ private onWsClose({ code }: CloseEvent) { - const canResume = code === 4015 || code < 4000; + const canResume = code === 4_015 || code < 4_000; if (canResume && this.state.code === NetworkingStatusCode.Ready) { this.state = { ...this.state, @@ -400,6 +404,7 @@ export class Networking extends EventEmitter { udp // eslint-disable-next-line @typescript-eslint/no-unsafe-argument .performIPDiscovery(ssrc) + // eslint-disable-next-line promise/prefer-await-to-then .then((localConfig) => { if (this.state.code !== NetworkingStatusCode.UdpHandshaking) return; this.state.ws.sendPacket({ @@ -419,6 +424,7 @@ export class Networking extends EventEmitter { code: NetworkingStatusCode.SelectingProtocol, }; }) + // eslint-disable-next-line promise/prefer-await-to-then, promise/prefer-await-to-callbacks .catch((error: Error) => this.emit('error', error)); this.state = { @@ -489,15 +495,14 @@ export class Networking extends EventEmitter { * @remarks * Calling this method while there is already a prepared audio packet that has not yet been dispatched * will overwrite the existing audio packet. This should be avoided. - * * @param opusPacket - The Opus packet to encrypt - * * @returns The audio packet that was prepared */ public prepareAudioPacket(opusPacket: Buffer) { const state = this.state; if (state.code !== NetworkingStatusCode.Ready) return; state.preparedPacket = this.createAudioPacket(opusPacket, state.connectionData); + // eslint-disable-next-line consistent-return return state.preparedPacket; } @@ -513,6 +518,7 @@ export class Networking extends EventEmitter { state.preparedPacket = undefined; return true; } + return false; } @@ -598,6 +604,7 @@ export class Networking extends EventEmitter { const random = secretbox.methods.random(24, connectionData.nonceBuffer); return [secretbox.methods.close(opusPacket, random, secretKey), random]; } + return [secretbox.methods.close(opusPacket, nonce, secretKey)]; } } diff --git a/packages/voice/src/networking/VoiceUDPSocket.ts b/packages/voice/src/networking/VoiceUDPSocket.ts index 070422b9151b..7a0c77363090 100644 --- a/packages/voice/src/networking/VoiceUDPSocket.ts +++ b/packages/voice/src/networking/VoiceUDPSocket.ts @@ -1,5 +1,6 @@ /* eslint-disable @typescript-eslint/method-signature-style */ -import { createSocket, Socket } from 'node:dgram'; +import { Buffer } from 'node:buffer'; +import { createSocket, type Socket } from 'node:dgram'; import { EventEmitter } from 'node:events'; import { isIPv4 } from 'node:net'; @@ -13,8 +14,8 @@ export interface SocketConfig { } interface KeepAlive { - value: number; timestamp: number; + value: number; } /** @@ -25,7 +26,7 @@ interface KeepAlive { export function parseLocalPacket(message: Buffer): SocketConfig { const packet = Buffer.from(message); - const ip = packet.slice(8, packet.indexOf(0, 8)).toString('utf-8'); + const ip = packet.slice(8, packet.indexOf(0, 8)).toString('utf8'); if (!isIPv4(ip)) { throw new Error('Malformed IP address'); @@ -100,7 +101,7 @@ export class VoiceUDPSocket extends EventEmitter { /** * The debug logger function, if debugging is enabled. */ - private readonly debug: null | ((message: string) => void); + private readonly debug: ((message: string) => void) | null; /** * Creates a new VoiceUDPSocket. @@ -137,6 +138,7 @@ export class VoiceUDPSocket extends EventEmitter { // Delete all keep alives up to and including the received one this.keepAlives.splice(0, index); } + // Propagate the message this.emit('message', buffer); } @@ -169,7 +171,7 @@ export class VoiceUDPSocket extends EventEmitter { * @param buffer - The buffer to send */ public send(buffer: Buffer) { - return this.socket.send(buffer, this.remote.port, this.remote.ip); + this.socket.send(buffer, this.remote.port, this.remote.ip); } /** @@ -179,6 +181,7 @@ export class VoiceUDPSocket extends EventEmitter { try { this.socket.close(); } catch {} + clearInterval(this.keepAliveInterval); } @@ -187,7 +190,7 @@ export class VoiceUDPSocket extends EventEmitter { * * @param ssrc - The SSRC received from Discord */ - public performIPDiscovery(ssrc: number): Promise { + public async performIPDiscovery(ssrc: number): Promise { return new Promise((resolve, reject) => { const listener = (message: Buffer) => { try { diff --git a/packages/voice/src/networking/VoiceWebSocket.ts b/packages/voice/src/networking/VoiceWebSocket.ts index 1b9ad77aecd0..4c8cd1dd0eab 100644 --- a/packages/voice/src/networking/VoiceWebSocket.ts +++ b/packages/voice/src/networking/VoiceWebSocket.ts @@ -1,7 +1,7 @@ /* eslint-disable @typescript-eslint/method-signature-style */ import { EventEmitter } from 'node:events'; import { VoiceOpcodes } from 'discord-api-types/voice/v4'; -import WebSocket, { MessageEvent } from 'ws'; +import WebSocket, { type MessageEvent } from 'ws'; export interface VoiceWebSocket extends EventEmitter { on(event: 'error', listener: (error: Error) => void): this; @@ -56,7 +56,7 @@ export class VoiceWebSocket extends EventEmitter { /** * The debug logger function, if debugging is enabled. */ - private readonly debug: null | ((message: string) => void); + private readonly debug: ((message: string) => void) | null; /** * The underlying WebSocket of this wrapper. @@ -71,11 +71,11 @@ export class VoiceWebSocket extends EventEmitter { public constructor(address: string, debug: boolean) { super(); this.ws = new WebSocket(address); - this.ws.onmessage = (e) => this.onMessage(e); - this.ws.onopen = (e) => this.emit('open', e); + this.ws.onmessage = (err) => this.onMessage(err); + this.ws.onopen = (err) => this.emit('open', err); // eslint-disable-next-line @typescript-eslint/no-unsafe-argument - this.ws.onerror = (e: Error | WebSocket.ErrorEvent) => this.emit('error', e instanceof Error ? e : e.error); - this.ws.onclose = (e) => this.emit('close', e); + this.ws.onerror = (err: Error | WebSocket.ErrorEvent) => this.emit('error', err instanceof Error ? err : err.error); + this.ws.onclose = (err) => this.emit('close', err); this.lastHeartbeatAck = 0; this.lastHeartbeatSend = 0; @@ -90,10 +90,10 @@ export class VoiceWebSocket extends EventEmitter { try { this.debug?.('destroyed'); this.setHeartbeatInterval(-1); - this.ws.close(1000); + this.ws.close(1_000); } catch (error) { - const e = error as Error; - this.emit('error', e); + const err = error as Error; + this.emit('error', err); } } @@ -113,8 +113,8 @@ export class VoiceWebSocket extends EventEmitter { // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment packet = JSON.parse(event.data); } catch (error) { - const e = error as Error; - this.emit('error', e); + const err = error as Error; + this.emit('error', err); return; } @@ -137,10 +137,11 @@ export class VoiceWebSocket extends EventEmitter { try { const stringified = JSON.stringify(packet); this.debug?.(`>> ${stringified}`); - return this.ws.send(stringified); + this.ws.send(stringified); + return; } catch (error) { - const e = error as Error; - this.emit('error', e); + const err = error as Error; + this.emit('error', err); } } @@ -151,8 +152,9 @@ export class VoiceWebSocket extends EventEmitter { this.lastHeartbeatSend = Date.now(); this.missedHeartbeats++; const nonce = this.lastHeartbeatSend; - return this.sendPacket({ + this.sendPacket({ op: VoiceOpcodes.Heartbeat, + // eslint-disable-next-line id-length d: nonce, }); } @@ -171,6 +173,7 @@ export class VoiceWebSocket extends EventEmitter { this.ws.close(); this.setHeartbeatInterval(-1); } + this.sendHeartbeat(); }, ms); } diff --git a/packages/voice/src/receive/AudioReceiveStream.ts b/packages/voice/src/receive/AudioReceiveStream.ts index 281ffdcfe6ea..ac25a026d75c 100644 --- a/packages/voice/src/receive/AudioReceiveStream.ts +++ b/packages/voice/src/receive/AudioReceiveStream.ts @@ -1,4 +1,5 @@ -import { Readable, ReadableOptions } from 'node:stream'; +import type { Buffer } from 'node:buffer'; +import { Readable, type ReadableOptions } from 'node:stream'; import { SILENCE_FRAME } from '../audio/AudioPlayer'; /** @@ -23,11 +24,11 @@ export enum EndBehaviorType { export type EndBehavior = | { - behavior: EndBehaviorType.Manual; + behavior: EndBehaviorType.AfterInactivity | EndBehaviorType.AfterSilence; + duration: number; } | { - behavior: EndBehaviorType.AfterSilence | EndBehaviorType.AfterInactivity; - duration: number; + behavior: EndBehaviorType.Manual; }; export interface AudioReceiveStreamOptions extends ReadableOptions { @@ -64,14 +65,13 @@ export class AudioReceiveStream extends Readable { } public override push(buffer: Buffer | null) { - if (buffer) { - if ( - this.end.behavior === EndBehaviorType.AfterInactivity || + if ( + buffer && + (this.end.behavior === EndBehaviorType.AfterInactivity || (this.end.behavior === EndBehaviorType.AfterSilence && - (buffer.compare(SILENCE_FRAME) !== 0 || typeof this.endTimeout === 'undefined')) - ) { - this.renewEndTimeout(this.end); - } + (buffer.compare(SILENCE_FRAME) !== 0 || typeof this.endTimeout === 'undefined'))) + ) { + this.renewEndTimeout(this.end); } return super.push(buffer); @@ -81,6 +81,7 @@ export class AudioReceiveStream extends Readable { if (this.endTimeout) { clearTimeout(this.endTimeout); } + this.endTimeout = setTimeout(() => this.push(null), end.duration); } diff --git a/packages/voice/src/receive/SSRCMap.ts b/packages/voice/src/receive/SSRCMap.ts index 1bf8e3630cb5..b6fc11c2cae5 100644 --- a/packages/voice/src/receive/SSRCMap.ts +++ b/packages/voice/src/receive/SSRCMap.ts @@ -11,15 +11,15 @@ export interface VoiceUserData { audioSSRC: number; /** - * The SSRC of the user's video stream (if one exists) - * Cannot be 0. If undefined, the user has no video stream. + * The Discord user id of the user. */ - videoSSRC?: number; + userId: string; /** - * The Discord user id of the user. + * The SSRC of the user's video stream (if one exists) + * Cannot be 0. If undefined, the user has no video stream. */ - userId: string; + videoSSRC?: number; } export interface SSRCMap extends EventEmitter { @@ -83,7 +83,6 @@ export class SSRCMap extends EventEmitter { * Deletes the stored voice data about a user. * * @param target - The target of the delete operation, either their audio SSRC or user id - * * @returns The data that was deleted, if any */ public delete(target: number | string) { @@ -93,6 +92,7 @@ export class SSRCMap extends EventEmitter { this.map.delete(target); this.emit('delete', existing); } + return existing; } diff --git a/packages/voice/src/receive/SpeakingMap.ts b/packages/voice/src/receive/SpeakingMap.ts index b1049d76435c..983355f0adc8 100644 --- a/packages/voice/src/receive/SpeakingMap.ts +++ b/packages/voice/src/receive/SpeakingMap.ts @@ -4,12 +4,14 @@ import { EventEmitter } from 'node:events'; export interface SpeakingMap extends EventEmitter { /** * Emitted when a user starts speaking. + * * @eventProperty */ on(event: 'start', listener: (userId: string) => void): this; /** * Emitted when a user ends speaking. + * * @eventProperty */ on(event: 'end', listener: (userId: string) => void): this; @@ -45,6 +47,7 @@ export class SpeakingMap extends EventEmitter { this.users.set(userId, Date.now()); this.emit('start', userId); } + this.startTimeout(userId); } diff --git a/packages/voice/src/receive/VoiceReceiver.ts b/packages/voice/src/receive/VoiceReceiver.ts index af83426cf57e..f4d21229c601 100644 --- a/packages/voice/src/receive/VoiceReceiver.ts +++ b/packages/voice/src/receive/VoiceReceiver.ts @@ -1,14 +1,16 @@ +/* eslint-disable jsdoc/check-param-names */ +import { Buffer } from 'node:buffer'; import { VoiceOpcodes } from 'discord-api-types/voice/v4'; +import type { VoiceConnection } from '../VoiceConnection'; +import type { ConnectionData } from '../networking/Networking'; +import { methods } from '../util/Secretbox'; import { AudioReceiveStream, - AudioReceiveStreamOptions, createDefaultAudioReceiveStreamOptions, + type AudioReceiveStreamOptions, } from './AudioReceiveStream'; import { SSRCMap } from './SSRCMap'; import { SpeakingMap } from './SpeakingMap'; -import type { VoiceConnection } from '../VoiceConnection'; -import type { ConnectionData } from '../networking/Networking'; -import { methods } from '../util/Secretbox'; /** * Attaches to a VoiceConnection, allowing you to receive audio packets from other @@ -59,7 +61,6 @@ export class VoiceReceiver { * Called when a packet is received on the attached connection's WebSocket. * * @param packet - The received packet - * * @internal */ public onWsPacket(packet: any) { @@ -112,6 +113,7 @@ export class VoiceReceiver { // Open packet const decrypted = methods.open(buffer.slice(12, end), nonce, secretKey); if (!decrypted) return; + // eslint-disable-next-line consistent-return return Buffer.from(decrypted); } @@ -122,7 +124,6 @@ export class VoiceReceiver { * @param mode - The encryption mode * @param nonce - The nonce buffer used by the connection for encryption * @param secretKey - The secret key used by the connection for encryption - * * @returns The parsed Opus packet */ private parsePacket(buffer: Buffer, mode: string, nonce: Buffer, secretKey: Uint8Array) { @@ -135,6 +136,7 @@ export class VoiceReceiver { packet = packet.subarray(4 + 4 * headerExtensionLength); } + // eslint-disable-next-line consistent-return return packet; } @@ -142,7 +144,6 @@ export class VoiceReceiver { * Called when the UDP socket of the attached connection receives a message. * * @param msg - The received message - * * @internal */ public onUdpMessage(msg: Buffer) { @@ -176,7 +177,6 @@ export class VoiceReceiver { * Creates a subscription for the given user id. * * @param target - The id of the user to subscribe to - * * @returns A readable stream of Opus packets received from the target */ public subscribe(userId: string, options?: Partial) { diff --git a/packages/voice/src/util/Secretbox.ts b/packages/voice/src/util/Secretbox.ts index 435606957461..644cdcf764bc 100644 --- a/packages/voice/src/util/Secretbox.ts +++ b/packages/voice/src/util/Secretbox.ts @@ -1,7 +1,9 @@ +import { Buffer } from 'node:buffer'; + interface Methods { - open: (buffer: Buffer, nonce: Buffer, secretKey: Uint8Array) => Buffer | null; - close: (opusPacket: Buffer, nonce: Buffer, secretKey: Uint8Array) => Buffer; - random: (bytes: number, nonce: Buffer) => Buffer; + close(opusPacket: Buffer, nonce: Buffer, secretKey: Uint8Array): Buffer; + open(buffer: Buffer, nonce: Buffer, secretKey: Uint8Array): Buffer | null; + random(bytes: number, nonce: Buffer): Buffer; } const libs = { @@ -14,6 +16,7 @@ const libs = { // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call if (sodium.crypto_secretbox_open_easy(output, buffer, nonce, secretKey)) return output; } + return null; }, close: (opusPacket: Buffer, nonce: Buffer, secretKey: Uint8Array) => { @@ -24,7 +27,7 @@ const libs = { return output; }, // eslint-disable-next-line @typescript-eslint/no-unsafe-argument - random: (n: number, buffer: Buffer = Buffer.allocUnsafe(n)) => { + random: (num: number, buffer: Buffer = Buffer.allocUnsafe(num)) => { // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call sodium.randombytes_buf(buffer); return buffer; @@ -36,7 +39,7 @@ const libs = { // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access close: sodium.api.crypto_secretbox_easy, // eslint-disable-next-line @typescript-eslint/no-unsafe-argument - random: (n: number, buffer: Buffer = Buffer.allocUnsafe(n)) => { + random: (num: number, buffer: Buffer = Buffer.allocUnsafe(num)) => { // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call sodium.api.randombytes_buf(buffer); return buffer; @@ -77,7 +80,7 @@ const methods: Methods = { void (async () => { for (const libName of Object.keys(libs) as (keyof typeof libs)[]) { try { - // eslint-disable-next-line + // eslint-disable-next-line unicorn/no-abusive-eslint-disable, @typescript-eslint/no-require-imports, @typescript-eslint/no-var-requires const lib = require(libName); // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access if (libName === 'libsodium-wrappers' && lib.ready) await lib.ready; diff --git a/packages/voice/src/util/abortAfter.ts b/packages/voice/src/util/abortAfter.ts index 4dc2fbf3d698..33b1eee62ebe 100644 --- a/packages/voice/src/util/abortAfter.ts +++ b/packages/voice/src/util/abortAfter.ts @@ -6,7 +6,7 @@ export function abortAfter(delay: number): [AbortController, AbortSignal] { const ac = new AbortController(); const timeout = setTimeout(() => ac.abort(), delay); - // @ts-expect-error + // @ts-expect-error: No type for timeout // eslint-disable-next-line @typescript-eslint/no-unsafe-call ac.signal.addEventListener('abort', () => clearTimeout(timeout)); return [ac, ac.signal]; diff --git a/packages/voice/src/util/adapter.ts b/packages/voice/src/util/adapter.ts index 6597f15fbfb3..5cf90bb11217 100644 --- a/packages/voice/src/util/adapter.ts +++ b/packages/voice/src/util/adapter.ts @@ -5,41 +5,40 @@ import type { GatewayVoiceServerUpdateDispatchData, GatewayVoiceStateUpdateDispa * Discord gateway DiscordGatewayAdapters. */ export interface DiscordGatewayAdapterLibraryMethods { + /** + * Call this when the adapter can no longer be used (e.g. due to a disconnect from the main gateway) + */ + destroy(): void; /** * Call this when you receive a VOICE_SERVER_UPDATE payload that is relevant to the adapter. * * @param data - The inner data of the VOICE_SERVER_UPDATE payload */ - onVoiceServerUpdate: (data: GatewayVoiceServerUpdateDispatchData) => void; + onVoiceServerUpdate(data: GatewayVoiceServerUpdateDispatchData): void; /** * Call this when you receive a VOICE_STATE_UPDATE payload that is relevant to the adapter. * * @param data - The inner data of the VOICE_STATE_UPDATE payload */ - onVoiceStateUpdate: (data: GatewayVoiceStateUpdateDispatchData) => void; - /** - * Call this when the adapter can no longer be used (e.g. due to a disconnect from the main gateway) - */ - destroy: () => void; + onVoiceStateUpdate(data: GatewayVoiceStateUpdateDispatchData): void; } /** * Methods that are provided by the implementer of a Discord gateway DiscordGatewayAdapter. */ export interface DiscordGatewayAdapterImplementerMethods { + /** + * This will be called by \@discordjs/voice when the adapter can safely be destroyed as it will no + * longer be used. + */ + destroy(): void; /** * Implement this method such that the given payload is sent to the main Discord gateway connection. * * @param payload - The payload to send to the main Discord gateway connection - * * @returns `false` if the payload definitely failed to send - in this case, the voice connection disconnects */ - sendPayload: (payload: any) => boolean; - /** - * This will be called by \@discordjs/voice when the adapter can safely be destroyed as it will no - * longer be used. - */ - destroy: () => void; + sendPayload(payload: any): boolean; } /** diff --git a/packages/voice/src/util/demuxProbe.ts b/packages/voice/src/util/demuxProbe.ts index 3607e51aafe3..55d026d82f4b 100644 --- a/packages/voice/src/util/demuxProbe.ts +++ b/packages/voice/src/util/demuxProbe.ts @@ -1,19 +1,20 @@ +import { Buffer } from 'node:buffer'; +import process from 'node:process'; import { Readable } from 'node:stream'; import prism from 'prism-media'; -import { noop } from './util'; import { StreamType } from '..'; +import { noop } from './util'; /** * Takes an Opus Head, and verifies whether the associated Opus audio is suitable to play in a Discord voice channel. * * @param opusHead - The Opus Head to validate - * * @returns `true` if suitable to play in a Discord voice channel, otherwise `false` */ export function validateDiscordOpusHead(opusHead: Buffer): boolean { const channels = opusHead.readUInt8(9); const sampleRate = opusHead.readUInt32LE(12); - return channels === 2 && sampleRate === 48000; + return channels === 2 && sampleRate === 48_000; } /** @@ -38,22 +39,28 @@ export interface ProbeInfo { * @param stream - The readable stream to probe * @param probeSize - The number of bytes to attempt to read before giving up on the probe * @param validator - The Opus Head validator function - * * @experimental */ -export function demuxProbe( +export async function demuxProbe( stream: Readable, - probeSize = 1024, + probeSize = 1_024, validator = validateDiscordOpusHead, ): Promise { return new Promise((resolve, reject) => { // Preconditions - if (stream.readableObjectMode) return reject(new Error('Cannot probe a readable stream in object mode')); - if (stream.readableEnded) return reject(new Error('Cannot probe a stream that has ended')); + if (stream.readableObjectMode) { + reject(new Error('Cannot probe a readable stream in object mode')); + return; + } + + if (stream.readableEnded) { + reject(new Error('Cannot probe a stream that has ended')); + return; + } let readBuffer = Buffer.alloc(0); - let resolved: StreamType | undefined = undefined; + let resolved: StreamType | undefined; const finish = (type: StreamType) => { // eslint-disable-next-line @typescript-eslint/no-use-before-define @@ -73,6 +80,7 @@ export function demuxProbe( if (readBuffer.length > 0) { stream.push(readBuffer); } + resolve({ stream, type, diff --git a/packages/voice/src/util/entersState.ts b/packages/voice/src/util/entersState.ts index cbc336888ac0..05a7e66ffdde 100644 --- a/packages/voice/src/util/entersState.ts +++ b/packages/voice/src/util/entersState.ts @@ -1,7 +1,7 @@ -import EventEmitter, { once } from 'node:events'; -import { abortAfter } from './abortAfter'; +import { type EventEmitter, once } from 'node:events'; import type { VoiceConnection, VoiceConnectionStatus } from '../VoiceConnection'; import type { AudioPlayer, AudioPlayerStatus } from '../audio/AudioPlayer'; +import { abortAfter } from './abortAfter'; /** * Allows a voice connection a specified amount of time to enter a given state, otherwise rejects with an error. @@ -13,7 +13,7 @@ import type { AudioPlayer, AudioPlayerStatus } from '../audio/AudioPlayer'; export function entersState( target: VoiceConnection, status: VoiceConnectionStatus, - timeoutOrSignal: number | AbortSignal, + timeoutOrSignal: AbortSignal | number, ): Promise; /** @@ -26,7 +26,7 @@ export function entersState( export function entersState( target: AudioPlayer, status: AudioPlayerStatus, - timeoutOrSignal: number | AbortSignal, + timeoutOrSignal: AbortSignal | number, ): Promise; /** @@ -36,10 +36,10 @@ export function entersState( * @param status - The status that the target should be in * @param timeoutOrSignal - The maximum time we are allowing for this to occur, or a signal that will abort the operation */ -export async function entersState( +export async function entersState( target: T, - status: VoiceConnectionStatus | AudioPlayerStatus, - timeoutOrSignal: number | AbortSignal, + status: AudioPlayerStatus | VoiceConnectionStatus, + timeoutOrSignal: AbortSignal | number, ) { if (target.state.status !== status) { const [ac, signal] = @@ -50,5 +50,6 @@ export async function entersState( ac?.abort(); } } + return target; } diff --git a/packages/voice/src/util/generateDependencyReport.ts b/packages/voice/src/util/generateDependencyReport.ts index edb31c6116a8..08d712daf1ff 100644 --- a/packages/voice/src/util/generateDependencyReport.ts +++ b/packages/voice/src/util/generateDependencyReport.ts @@ -24,7 +24,7 @@ function findPackageJSON( if (pkg.name !== packageName) throw new Error('package.json does not match'); // eslint-disable-next-line @typescript-eslint/no-unsafe-return return pkg; - } catch (err) { + } catch { return findPackageJSON(resolve(dir, '..'), packageName, depth - 1); } } @@ -43,7 +43,7 @@ function version(name: string): string { : findPackageJSON(dirname(require.resolve(name)), name, 3); // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-member-access return pkg?.version ?? 'not found'; - } catch (err) { + } catch { return 'not found'; } } @@ -81,7 +81,7 @@ export function generateDependencyReport() { const info = prism.FFmpeg.getInfo(); report.push(`- version: ${info.version}`); report.push(`- libopus: ${info.output.includes('--enable-libopus') ? 'yes' : 'no'}`); - } catch (err) { + } catch { report.push('- not found'); } diff --git a/packages/website/.eslintrc.json b/packages/website/.eslintrc.json index 8f5441ba0c85..44d5dfd52cb8 100644 --- a/packages/website/.eslintrc.json +++ b/packages/website/.eslintrc.json @@ -1,5 +1,5 @@ { - "extends": ["marine/prettier/react", "../../.eslintrc.json"], + "extends": ["../../.eslintrc.json", "neon/react", "neon/next", "neon/edge"], "settings": { "react": { "version": "detect" diff --git a/packages/website/package.json b/packages/website/package.json index 62b0ce867e7e..07836bea735a 100644 --- a/packages/website/package.json +++ b/packages/website/package.json @@ -72,8 +72,6 @@ "@types/node": "^16.11.56", "@types/react-dom": "^18.0.6", "@types/react-syntax-highlighter": "^15.5.5", - "@typescript-eslint/eslint-plugin": "^5.36.1", - "@typescript-eslint/parser": "^5.36.1", "@unocss/cli": "^0.45.13", "@unocss/preset-web-fonts": "^0.45.13", "@unocss/reset": "^0.45.13", @@ -81,12 +79,7 @@ "@vitest/coverage-c8": "^0.22.1", "concurrently": "^7.3.0", "eslint": "^8.23.0", - "eslint-config-marine": "^9.4.1", - "eslint-config-prettier": "^8.5.0", - "eslint-import-resolver-typescript": "^3.5.0", - "eslint-plugin-import": "^2.26.0", - "eslint-plugin-react": "^7.31.1", - "eslint-plugin-react-hooks": "^4.6.0", + "eslint-config-neon": "^0.1.23", "happy-dom": "^6.0.4", "prettier": "^2.7.1", "typescript": "^4.8.2", diff --git a/packages/website/src/components/CodeListing.tsx b/packages/website/src/components/CodeListing.tsx index 15c27407da9c..521907ae4459 100644 --- a/packages/website/src/components/CodeListing.tsx +++ b/packages/website/src/components/CodeListing.tsx @@ -37,15 +37,15 @@ export function CodeListing({ deprecation, inheritanceData, }: PropsWithChildren<{ - name: string; - separator?: CodeListingSeparatorType; - typeTokens: TokenDocumentation[]; - readonly?: boolean; - optional?: boolean; - summary?: ApiItemJSON['summary']; comment?: AnyDocNodeJSON | null; deprecation?: AnyDocNodeJSON | null; inheritanceData?: InheritanceData | null; + name: string; + optional?: boolean; + readonly?: boolean; + separator?: CodeListingSeparatorType; + summary?: ApiItemJSON['summary']; + typeTokens: TokenDocumentation[]; }>) { const { classes } = useStyles(); const matches = useMediaQuery('(max-width: 768px)'); diff --git a/packages/website/src/components/DocContainer.tsx b/packages/website/src/components/DocContainer.tsx index 42af51317ec4..934f7880fb19 100644 --- a/packages/website/src/components/DocContainer.tsx +++ b/packages/website/src/components/DocContainer.tsx @@ -2,7 +2,6 @@ import type { ApiItemJSON, TokenDocumentation, TypeParameterData, - AnyDocNodeJSON, ApiClassJSON, ApiInterfaceJSON, } from '@discordjs/api-extractor-utils'; @@ -40,16 +39,15 @@ import { TypeParamTable } from './TypeParamTable'; import { TSDoc } from './tsdoc/TSDoc'; type DocContainerProps = PropsWithChildren<{ - name: string; - kind: string; excerpt: string; - summary?: ApiItemJSON['summary']; extendsTokens?: TokenDocumentation[] | null; implementsTokens?: TokenDocumentation[][]; - typeParams?: TypeParameterData[]; - comment?: AnyDocNodeJSON | null; + kind: string; methods?: ApiClassJSON['methods'] | ApiInterfaceJSON['methods'] | null; + name: string; properties?: ApiClassJSON['properties'] | ApiInterfaceJSON['properties'] | null; + summary?: ApiItemJSON['summary']; + typeParams?: TypeParameterData[]; }>; function generateIcon(kind: string) { @@ -161,7 +159,7 @@ export function DocContainer({ diff --git a/packages/website/src/components/HyperlinkedText.tsx b/packages/website/src/components/HyperlinkedText.tsx index d6953701ed24..bad5e93ed100 100644 --- a/packages/website/src/components/HyperlinkedText.tsx +++ b/packages/website/src/components/HyperlinkedText.tsx @@ -2,13 +2,6 @@ import type { TokenDocumentation } from '@discordjs/api-extractor-utils'; import { Anchor, Text } from '@mantine/core'; import Link from 'next/link'; -/** - * Constructs a hyperlinked html node based on token type references - * - * @param tokens An array of documentation tokens to construct the HTML - * - * @returns An array of JSX elements and string comprising the hyperlinked text - */ export function HyperlinkedText({ tokens }: { tokens: TokenDocumentation[] }) { return ( <> diff --git a/packages/website/src/components/Section.tsx b/packages/website/src/components/Section.tsx index ae17459fe785..68dd8c09f08b 100644 --- a/packages/website/src/components/Section.tsx +++ b/packages/website/src/components/Section.tsx @@ -40,11 +40,11 @@ export function Section({ defaultClosed = false, children, }: PropsWithChildren<{ - title: string; + defaultClosed?: boolean; + dense?: boolean; icon?: JSX.Element; padded?: boolean; - dense?: boolean; - defaultClosed?: boolean; + title: string; }>) { const [opened, setOpened] = useState(!defaultClosed); const { colorScheme } = useMantineColorScheme(); @@ -57,7 +57,7 @@ export function Section({ return ( - setOpened((o) => !o)}> + setOpened((isOpen) => !isOpen)}> {icon ? ( diff --git a/packages/website/src/components/SidebarItems.tsx b/packages/website/src/components/SidebarItems.tsx index a0bd16bb4eeb..6d15a63788cb 100644 --- a/packages/website/src/components/SidebarItems.tsx +++ b/packages/website/src/components/SidebarItems.tsx @@ -61,7 +61,7 @@ function resolveIcon(item: keyof GroupedMembers) { return ; case 'Variables': return ; - case 'Functions': + default: return ; } } @@ -115,12 +115,12 @@ export function SidebarItems({ .filter((group) => groupItems[group].length) .map((group, idx) => (
- {groupItems[group].map((member, i) => ( - + {groupItems[group].map((member, index) => ( + setOpened((o) => !o)} + onClick={() => setOpened((isOpened) => !isOpened)} label={ @@ -135,7 +135,7 @@ export function SidebarItems({ } active={asPathWithoutQueryAndAnchor === member.path} variant="filled" - > + /> ))}
diff --git a/packages/website/src/components/SidebarLayout.tsx b/packages/website/src/components/SidebarLayout.tsx index 0bd9053ee819..96d7550003e5 100644 --- a/packages/website/src/components/SidebarLayout.tsx +++ b/packages/website/src/components/SidebarLayout.tsx @@ -25,10 +25,10 @@ import { Title, } from '@mantine/core'; import { NextLink } from '@mantine/next'; -import type { MDXRemoteSerializeResult } from 'next-mdx-remote'; import Image from 'next/future/image'; import Link from 'next/link'; import { useRouter } from 'next/router'; +import type { MDXRemoteSerializeResult } from 'next-mdx-remote'; import { type PropsWithChildren, useState, useEffect, useMemo } from 'react'; import { VscChevronDown, VscGithubInverted, VscPackage, VscVersions } from 'react-icons/vsc'; import { WiDaySunny, WiNightClear } from 'react-icons/wi'; @@ -37,16 +37,19 @@ import { SidebarItems } from './SidebarItems'; import type { findMember } from '~/util/model.server'; import { PACKAGES } from '~/util/packages'; -const fetcher = (url: string) => fetch(url).then((res) => res.json()); +const fetcher = async (url: string) => { + const res = await fetch(url); + return res.json(); +}; export interface SidebarLayoutProps { - packageName: string; branchName: string; data: { - members: ReturnType; member: ReturnType; + members: ReturnType; source: MDXRemoteSerializeResult; }; + packageName: string; selectedMember?: ApiItemJSON | undefined; } @@ -55,8 +58,8 @@ export type Members = SidebarLayoutProps['data']['members']; export interface GroupedMembers { Classes: Members; - Functions: Members; Enums: Members; + Functions: Members; Interfaces: Members; Types: Members; Variables: Members; @@ -158,6 +161,7 @@ export function SidebarLayout({ fetcher, ); const theme = useMantineTheme(); + // eslint-disable-next-line @typescript-eslint/unbound-method const { colorScheme, toggleColorScheme } = useMantineColorScheme(); const [opened, setOpened] = useState(false); @@ -188,7 +192,7 @@ export function SidebarLayout({ {item} )) ?? [], - [versions], + [versions, packageName], ); const breadcrumbs = useMemo( @@ -302,7 +306,7 @@ export function SidebarLayout({ (router.isFallback ? null : setOpened((o) => !o))} + onClick={() => (router.isFallback ? null : setOpened((isOpened) => !isOpened))} size="sm" color={theme.colors.gray![6]} mr="xl" @@ -346,7 +350,7 @@ export function SidebarLayout({ {children} - ({ height: 200, [theme.fn.smallerThan('sm')]: { height: 300 } })}> + ({ height: 200, [theme.fn.smallerThan('sm')]: { height: 300 } })} /> ; + columns: string[]; rows: Record[]; }) { return ( diff --git a/packages/website/src/components/TableOfContentItems.tsx b/packages/website/src/components/TableOfContentItems.tsx index ba3d7dd11aca..5651c9185b12 100644 --- a/packages/website/src/components/TableOfContentItems.tsx +++ b/packages/website/src/components/TableOfContentItems.tsx @@ -48,6 +48,7 @@ export function TableOfContentItems({
)), + // eslint-disable-next-line react-hooks/exhaustive-deps [properties, colorScheme], ); @@ -73,7 +74,7 @@ export function TableOfContentItems({ ); }), - [methods, colorScheme], + [methods, classes.link], ); return ( diff --git a/packages/website/src/components/model/Class.tsx b/packages/website/src/components/model/Class.tsx index ffc001b78d7f..24d080930a19 100644 --- a/packages/website/src/components/model/Class.tsx +++ b/packages/website/src/components/model/Class.tsx @@ -16,7 +16,6 @@ export function Class({ data }: { data: ApiClassJSON }) { typeParams={data.typeParameters} extendsTokens={data.extendsTokens} implementsTokens={data.implementsTokens} - comment={data.comment} methods={data.methods} properties={data.properties} > diff --git a/packages/website/src/components/tsdoc/BlockComment.tsx b/packages/website/src/components/tsdoc/BlockComment.tsx index 31575ef72fff..729d2c4b1b2b 100644 --- a/packages/website/src/components/tsdoc/BlockComment.tsx +++ b/packages/website/src/components/tsdoc/BlockComment.tsx @@ -40,8 +40,8 @@ export function BlockComment({ tagName, index, }: PropsWithChildren<{ - tagName: string; index?: number | undefined; + tagName: string; }>): JSX.Element { switch (tagName.toUpperCase()) { case StandardTags.example.tagNameWithUpperCase: diff --git a/packages/website/src/components/tsdoc/TSDoc.tsx b/packages/website/src/components/tsdoc/TSDoc.tsx index cae45400a58f..3d81b4a35f93 100644 --- a/packages/website/src/components/tsdoc/TSDoc.tsx +++ b/packages/website/src/components/tsdoc/TSDoc.tsx @@ -63,6 +63,7 @@ export function TSDoc({ node }: { node: AnyDocNodeJSON }): JSX.Element { return null; } + case DocNodeKind.CodeSpan: { const { code } = node as DocFencedCodeJSON; return ( @@ -71,6 +72,7 @@ export function TSDoc({ node }: { node: AnyDocNodeJSON }): JSX.Element { ); } + case DocNodeKind.FencedCode: { const { language, code } = node as DocFencedCodeJSON; return ( @@ -86,6 +88,7 @@ export function TSDoc({ node }: { node: AnyDocNodeJSON }): JSX.Element { ); } + case DocNodeKind.ParamBlock: case DocNodeKind.Block: { const { tag } = node as DocBlockJSON; @@ -102,6 +105,7 @@ export function TSDoc({ node }: { node: AnyDocNodeJSON }): JSX.Element { ); } + case DocNodeKind.Comment: { const comment = node as DocCommentJSON; // Cheat a bit by finding out how many comments we have beforehand... @@ -111,6 +115,7 @@ export function TSDoc({ node }: { node: AnyDocNodeJSON }): JSX.Element { return {comment.customBlocks.map((node, idx) => createNode(node, idx))}; } + default: console.log(`Captured unknown node kind: ${node.kind}`); break; diff --git a/packages/website/src/contexts/member.tsx b/packages/website/src/contexts/member.tsx index 5c15056d2d42..5dd8990262d8 100644 --- a/packages/website/src/contexts/member.tsx +++ b/packages/website/src/contexts/member.tsx @@ -3,7 +3,7 @@ import { createContext, useContext, type ReactNode } from 'react'; export const MemberContext = createContext(undefined); -export const MemberProvider = ({ member, children }: { member: ApiItemJSON | undefined; children: ReactNode }) => ( +export const MemberProvider = ({ member, children }: { children: ReactNode; member: ApiItemJSON | undefined }) => ( {children} ); diff --git a/packages/website/src/middleware.ts b/packages/website/src/middleware.ts index 77035fe0e718..e11cc3f806cc 100644 --- a/packages/website/src/middleware.ts +++ b/packages/website/src/middleware.ts @@ -1,5 +1,4 @@ -import { NextResponse } from 'next/server'; -import type { NextRequest } from 'next/server'; +import { NextResponse, type NextRequest } from 'next/server'; export default function middleware(request: NextRequest) { return NextResponse.redirect(new URL('/docs/packages', request.url)); diff --git a/packages/website/src/pages/_app.tsx b/packages/website/src/pages/_app.tsx index b66b00d57096..cfee630283c8 100644 --- a/packages/website/src/pages/_app.tsx +++ b/packages/website/src/pages/_app.tsx @@ -5,7 +5,7 @@ import type { AppProps } from 'next/app'; import Head from 'next/head'; import { type NextRouter, useRouter } from 'next/router'; import { VscPackage } from 'react-icons/vsc'; -import { RouterTransition } from '~/components/RouterTransition'; +import { RouterTransition } from '../components/RouterTransition'; import '../styles/unocss.css'; import '../styles/main.css'; diff --git a/packages/website/src/pages/docs/[...slug].tsx b/packages/website/src/pages/docs/[...slug].tsx index 3b8337f86afb..a1bf8d0e9fb2 100644 --- a/packages/website/src/pages/docs/[...slug].tsx +++ b/packages/website/src/pages/docs/[...slug].tsx @@ -1,6 +1,6 @@ import { readFile } from 'node:fs/promises'; import { join } from 'node:path'; -import { cwd } from 'node:process'; +import process, { cwd } from 'node:process'; import { findPackage, getMembers, @@ -15,11 +15,11 @@ import { import { ActionIcon, Affix, Box, LoadingOverlay, Transition } from '@mantine/core'; import { useMediaQuery, useWindowScroll } from '@mantine/hooks'; import { ApiFunction, ApiItemKind, type ApiPackage } from '@microsoft/api-extractor-model'; -import { MDXRemote } from 'next-mdx-remote'; -import { serialize } from 'next-mdx-remote/serialize'; import Head from 'next/head'; import { useRouter } from 'next/router'; import type { GetStaticPaths, GetStaticProps } from 'next/types'; +import { MDXRemote } from 'next-mdx-remote'; +import { serialize } from 'next-mdx-remote/serialize'; import { VscChevronUp } from 'react-icons/vsc'; import rehypeIgnore from 'rehype-ignore'; import rehypePrettyCode from 'rehype-pretty-code'; @@ -46,7 +46,7 @@ export const getStaticPaths: GetStaticPaths = async () => { let data: any[] = []; let versions: string[] = []; if (process.env.NEXT_PUBLIC_LOCAL_DEV) { - const res = await readFile(join(cwd(), '..', packageName, 'docs', 'docs.api.json'), 'utf-8'); + const res = await readFile(join(cwd(), '..', packageName, 'docs', 'docs.api.json'), 'utf8'); // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment data = JSON.parse(res); } else { @@ -62,35 +62,33 @@ export const getStaticPaths: GetStaticPaths = async () => { } if (Array.isArray(data)) { - const models = data.map((d) => createApiModel(d)); + const models = data.map((innerData) => createApiModel(innerData)); const pkgs = models.map((model) => findPackage(model, packageName)) as ApiPackage[]; return [ ...versions.map((version) => ({ params: { slug: ['packages', packageName, version] } })), - ...pkgs - .map((pkg, idx) => - getMembers(pkg, versions[idx]!).map((member) => { - if (member.kind === ApiItemKind.Function && member.overloadIndex && member.overloadIndex > 1) { - return { - params: { - slug: [ - 'packages', - packageName, - versions[idx]!, - `${member.name}:${member.overloadIndex}:${member.kind}`, - ], - }, - }; - } - + ...pkgs.flatMap((pkg, idx) => + getMembers(pkg, versions[idx]!).map((member) => { + if (member.kind === ApiItemKind.Function && member.overloadIndex && member.overloadIndex > 1) { return { params: { - slug: ['packages', packageName, versions[idx]!, `${member.name}:${member.kind}`], + slug: [ + 'packages', + packageName, + versions[idx]!, + `${member.name}:${member.overloadIndex}:${member.kind}`, + ], }, }; - }), - ) - .flat(), + } + + return { + params: { + slug: ['packages', packageName, versions[idx]!, `${member.name}:${member.kind}`], + }, + }; + }), + ), ]; } @@ -130,7 +128,7 @@ export const getStaticProps: GetStaticProps = async ({ params }) => { const [memberName, overloadIndex] = member?.split(':') ?? []; try { - const readme = await readFile(join(cwd(), '..', packageName, 'README.md'), 'utf-8'); + const readme = await readFile(join(cwd(), '..', packageName, 'README.md'), 'utf8'); const mdxSource = await serialize(readme, { mdxOptions: { @@ -143,7 +141,7 @@ export const getStaticProps: GetStaticProps = async ({ params }) => { let data; if (process.env.NEXT_PUBLIC_LOCAL_DEV) { - const res = await readFile(join(cwd(), '..', packageName, 'docs', 'docs.api.json'), 'utf-8'); + const res = await readFile(join(cwd(), '..', packageName, 'docs', 'docs.api.json'), 'utf8'); // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment data = JSON.parse(res); } else { @@ -155,9 +153,10 @@ export const getStaticProps: GetStaticProps = async ({ params }) => { const model = createApiModel(data); const pkg = findPackage(model, packageName); + // eslint-disable-next-line prefer-const let { containerKey, name } = findMember(model, packageName, memberName, branchName) ?? {}; - if (name && overloadIndex && !Number.isNaN(parseInt(overloadIndex, 10))) { - containerKey = ApiFunction.getContainerKey(name, parseInt(overloadIndex, 10)); + if (name && overloadIndex && !Number.isNaN(Number.parseInt(overloadIndex, 10))) { + containerKey = ApiFunction.getContainerKey(name, Number.parseInt(overloadIndex, 10)); } return { @@ -171,17 +170,17 @@ export const getStaticProps: GetStaticProps = async ({ params }) => { source: mdxSource, }, }, - revalidate: 3600, + revalidate: 3_600, }; - } catch (e) { - const error = e as Error; + } catch (error_) { + const error = error_ as Error; console.error(error); return { props: { - error: e, + error: error_, }, - revalidate: 3600, + revalidate: 3_600, }; } }; diff --git a/packages/website/src/pages/docs/packages/[package]/index.tsx b/packages/website/src/pages/docs/packages/[package]/index.tsx index 668a6f86ba88..6f6bbaf8945d 100644 --- a/packages/website/src/pages/docs/packages/[package]/index.tsx +++ b/packages/website/src/pages/docs/packages/[package]/index.tsx @@ -18,10 +18,10 @@ import { VscArrowLeft, VscArrowRight, VscVersions } from 'react-icons/vsc'; import { PACKAGES } from '~/util/packages'; interface VersionProps { - packageName: string; data: { versions: string[]; }; + packageName: string; } export const getStaticPaths: GetStaticPaths = () => { @@ -48,7 +48,7 @@ export const getStaticProps: GetStaticProps = async ({ params }) => { props: { error: 'No tags', }, - revalidate: 3600, + revalidate: 3_600, }; } @@ -59,17 +59,17 @@ export const getStaticProps: GetStaticProps = async ({ params }) => { versions: data, }, }, - revalidate: 3600, + revalidate: 3_600, }; - } catch (e) { - const error = e as Error; + } catch (error_) { + const error = error_ as Error; console.error(error); return { props: { - error: e, + error: error_, }, - revalidate: 3600, + revalidate: 3_600, }; } }; diff --git a/packages/ws/__tests__/strategy/WorkerContextFetchingStrategy.test.ts b/packages/ws/__tests__/strategy/WorkerContextFetchingStrategy.test.ts index b0294c3eeb04..7ce3de334ebc 100644 --- a/packages/ws/__tests__/strategy/WorkerContextFetchingStrategy.test.ts +++ b/packages/ws/__tests__/strategy/WorkerContextFetchingStrategy.test.ts @@ -1,15 +1,16 @@ +/* eslint-disable @typescript-eslint/consistent-type-imports */ import { REST } from '@discordjs/rest'; -import { MockAgent, Interceptable } from 'undici'; +import { MockAgent, type Interceptable } from 'undici'; import { beforeEach, test, vi, expect } from 'vitest'; import { managerToFetchingStrategyOptions, WorkerContextFetchingStrategy, - WorkerRecievePayload, - WorkerSendPayload, WebSocketManager, WorkerSendPayloadOp, WorkerRecievePayloadOp, -} from '../../src'; + type WorkerRecievePayload, + type WorkerSendPayload, +} from '../../src/index.js'; let mockAgent: MockAgent; let mockPool: Interceptable; diff --git a/packages/ws/__tests__/strategy/WorkerShardingStrategy.test.ts b/packages/ws/__tests__/strategy/WorkerShardingStrategy.test.ts index b0c18fc286f1..69ace627b76e 100644 --- a/packages/ws/__tests__/strategy/WorkerShardingStrategy.test.ts +++ b/packages/ws/__tests__/strategy/WorkerShardingStrategy.test.ts @@ -1,22 +1,24 @@ +/* eslint-disable id-length */ +import { setImmediate } from 'node:timers'; import { REST } from '@discordjs/rest'; import { GatewayDispatchEvents, - GatewayDispatchPayload, GatewayOpcodes, - GatewaySendPayload, + type GatewayDispatchPayload, + type GatewaySendPayload, } from 'discord-api-types/v10'; -import { MockAgent, Interceptable } from 'undici'; +import { MockAgent, type Interceptable } from 'undici'; import { beforeEach, test, vi, expect, afterEach } from 'vitest'; import { - WorkerRecievePayload, - WorkerSendPayload, WebSocketManager, WorkerSendPayloadOp, WorkerRecievePayloadOp, WorkerShardingStrategy, WebSocketShardEvents, - SessionInfo, -} from '../../src'; + type WorkerRecievePayload, + type WorkerSendPayload, + type SessionInfo, +} from '../../src/index.js'; let mockAgent: MockAgent; let mockPool: Interceptable; @@ -43,6 +45,7 @@ const sessionInfo: SessionInfo = { }; vi.mock('node:worker_threads', async () => { + // eslint-disable-next-line @typescript-eslint/consistent-type-imports const { EventEmitter }: typeof import('node:events') = await vi.importActual('node:events'); class MockWorker extends EventEmitter { public constructor(...args: any[]) { @@ -54,6 +57,7 @@ vi.mock('node:worker_threads', async () => { } public postMessage(message: WorkerSendPayload) { + // eslint-disable-next-line default-case switch (message.op) { case WorkerSendPayloadOp.Connect: { const response: WorkerRecievePayload = { diff --git a/packages/ws/__tests__/util/IdentifyThrottler.test.ts b/packages/ws/__tests__/util/IdentifyThrottler.test.ts index 591263f5ad5e..74417d5881eb 100644 --- a/packages/ws/__tests__/util/IdentifyThrottler.test.ts +++ b/packages/ws/__tests__/util/IdentifyThrottler.test.ts @@ -1,6 +1,6 @@ import { setTimeout as sleep } from 'node:timers/promises'; -import { expect, Mock, test, vi } from 'vitest'; -import { IdentifyThrottler, WebSocketManager } from '../../src'; +import { expect, test, vi, type Mock } from 'vitest'; +import { IdentifyThrottler, type WebSocketManager } from '../../src/index.js'; vi.mock('node:timers/promises', () => ({ setTimeout: vi.fn(), diff --git a/packages/ws/__tests__/ws/WebSocketManager.test.ts b/packages/ws/__tests__/ws/WebSocketManager.test.ts index ba3a75a08e24..fad53ae1c39b 100644 --- a/packages/ws/__tests__/ws/WebSocketManager.test.ts +++ b/packages/ws/__tests__/ws/WebSocketManager.test.ts @@ -1,8 +1,8 @@ import { REST } from '@discordjs/rest'; -import { APIGatewayBotInfo, GatewayOpcodes, GatewaySendPayload } from 'discord-api-types/v10'; -import { MockAgent, Interceptable } from 'undici'; +import { GatewayOpcodes, type APIGatewayBotInfo, type GatewaySendPayload } from 'discord-api-types/v10'; +import { MockAgent, type Interceptable } from 'undici'; import { beforeEach, describe, expect, test, vi } from 'vitest'; -import { IShardingStrategy, WebSocketManager } from '../../src'; +import { WebSocketManager, type IShardingStrategy } from '../../src/index.js'; vi.useFakeTimers(); @@ -80,7 +80,7 @@ test('fetch gateway information', async () => { }) .reply(fetch); - NOW.mockReturnValue(Infinity); + NOW.mockReturnValue(Number.POSITIVE_INFINITY); const cacheExpired = await manager.fetchGatewayInformation(); expect(cacheExpired).toEqual(data); expect(fetch).toHaveBeenCalledOnce(); @@ -171,8 +171,11 @@ test('it handles passing in both shardIds and shardCount', async () => { test('strategies', async () => { class MockStrategy implements IShardingStrategy { public spawn = vi.fn(); + public connect = vi.fn(); + public destroy = vi.fn(); + public send = vi.fn(); } @@ -219,6 +222,7 @@ test('strategies', async () => { await manager.destroy(destroyOptions); expect(strategy.destroy).toHaveBeenCalledWith(destroyOptions); + // eslint-disable-next-line id-length const send: GatewaySendPayload = { op: GatewayOpcodes.RequestGuildMembers, d: { guild_id: '1234', limit: 0 } }; await manager.send(0, send); expect(strategy.send).toHaveBeenCalledWith(0, send); diff --git a/packages/ws/package.json b/packages/ws/package.json index 0cd93832a92c..7be8d2199fcf 100644 --- a/packages/ws/package.json +++ b/packages/ws/package.json @@ -66,16 +66,10 @@ "@favware/cliff-jumper": "^1.8.7", "@microsoft/api-extractor": "^7.29.5", "@types/node": "^16.11.56", - "@typescript-eslint/eslint-plugin": "^5.36.1", - "@typescript-eslint/parser": "^5.36.1", "@vitest/coverage-c8": "^0.22.1", "downlevel-dts": "^0.10.1", "eslint": "^8.23.0", - "eslint-config-marine": "^9.4.1", - "eslint-config-prettier": "^8.5.0", - "eslint-import-resolver-typescript": "^3.5.0", - "eslint-plugin-import": "^2.26.0", - "eslint-plugin-tsdoc": "^0.2.16", + "eslint-config-neon": "^0.1.23", "mock-socket": "^9.1.5", "prettier": "^2.7.1", "rollup-plugin-typescript2": "^0.33.0", diff --git a/packages/ws/src/index.ts b/packages/ws/src/index.ts index 947236e558b0..2627bd9da31f 100644 --- a/packages/ws/src/index.ts +++ b/packages/ws/src/index.ts @@ -1,14 +1,14 @@ -export * from './strategies/context/IContextFetchingStrategy'; -export * from './strategies/context/SimpleContextFetchingStrategy'; -export * from './strategies/context/WorkerContextFetchingStrategy'; +export * from './strategies/context/IContextFetchingStrategy.js'; +export * from './strategies/context/SimpleContextFetchingStrategy.js'; +export * from './strategies/context/WorkerContextFetchingStrategy.js'; -export * from './strategies/sharding/IShardingStrategy'; -export * from './strategies/sharding/SimpleShardingStrategy'; -export * from './strategies/sharding/WorkerShardingStrategy'; +export * from './strategies/sharding/IShardingStrategy.js'; +export * from './strategies/sharding/SimpleShardingStrategy.js'; +export * from './strategies/sharding/WorkerShardingStrategy.js'; -export * from './utils/constants'; -export * from './utils/IdentifyThrottler'; -export * from './utils/utils'; +export * from './utils/constants.js'; +export * from './utils/IdentifyThrottler.js'; +export * from './utils/utils.js'; -export * from './ws/WebSocketManager'; -export * from './ws/WebSocketShard'; +export * from './ws/WebSocketManager.js'; +export * from './ws/WebSocketShard.js'; diff --git a/packages/ws/src/strategies/context/IContextFetchingStrategy.ts b/packages/ws/src/strategies/context/IContextFetchingStrategy.ts index 8fc201921b43..d63c36a2b06b 100644 --- a/packages/ws/src/strategies/context/IContextFetchingStrategy.ts +++ b/packages/ws/src/strategies/context/IContextFetchingStrategy.ts @@ -5,7 +5,7 @@ import type { SessionInfo, WebSocketManager, WebSocketManagerOptions } from '../ export interface FetchingStrategyOptions extends Omit< WebSocketManagerOptions, - 'retrieveSessionInfo' | 'updateSessionInfo' | 'shardCount' | 'shardIds' | 'rest' + 'rest' | 'retrieveSessionInfo' | 'shardCount' | 'shardIds' | 'updateSessionInfo' > { readonly gatewayInformation: APIGatewayBotInfo; readonly shardCount: number; @@ -16,11 +16,12 @@ export interface FetchingStrategyOptions */ export interface IContextFetchingStrategy { readonly options: FetchingStrategyOptions; - retrieveSessionInfo: (shardId: number) => Awaitable; - updateSessionInfo: (shardId: number, sessionInfo: SessionInfo | null) => Awaitable; + retrieveSessionInfo(shardId: number): Awaitable; + updateSessionInfo(shardId: number, sessionInfo: SessionInfo | null): Awaitable; } export async function managerToFetchingStrategyOptions(manager: WebSocketManager): Promise { + // eslint-disable-next-line @typescript-eslint/unbound-method const { retrieveSessionInfo, updateSessionInfo, shardCount, shardIds, rest, ...managerOptions } = manager.options; return { diff --git a/packages/ws/src/strategies/context/SimpleContextFetchingStrategy.ts b/packages/ws/src/strategies/context/SimpleContextFetchingStrategy.ts index 642ef6ce1b02..9a942dd4b1d7 100644 --- a/packages/ws/src/strategies/context/SimpleContextFetchingStrategy.ts +++ b/packages/ws/src/strategies/context/SimpleContextFetchingStrategy.ts @@ -1,5 +1,5 @@ -import type { FetchingStrategyOptions, IContextFetchingStrategy } from './IContextFetchingStrategy'; -import type { SessionInfo, WebSocketManager } from '../../ws/WebSocketManager'; +import type { SessionInfo, WebSocketManager } from '../../ws/WebSocketManager.js'; +import type { FetchingStrategyOptions, IContextFetchingStrategy } from './IContextFetchingStrategy.js'; export class SimpleContextFetchingStrategy implements IContextFetchingStrategy { public constructor(private readonly manager: WebSocketManager, public readonly options: FetchingStrategyOptions) {} diff --git a/packages/ws/src/strategies/context/WorkerContextFetchingStrategy.ts b/packages/ws/src/strategies/context/WorkerContextFetchingStrategy.ts index ed358a151242..5ada996f1dda 100644 --- a/packages/ws/src/strategies/context/WorkerContextFetchingStrategy.ts +++ b/packages/ws/src/strategies/context/WorkerContextFetchingStrategy.ts @@ -1,13 +1,13 @@ import { isMainThread, parentPort } from 'node:worker_threads'; import { Collection } from '@discordjs/collection'; -import type { FetchingStrategyOptions, IContextFetchingStrategy } from './IContextFetchingStrategy'; -import type { SessionInfo } from '../../ws/WebSocketManager'; +import type { SessionInfo } from '../../ws/WebSocketManager.js'; import { - WorkerRecievePayload, WorkerRecievePayloadOp, - WorkerSendPayload, WorkerSendPayloadOp, -} from '../sharding/WorkerShardingStrategy'; + type WorkerRecievePayload, + type WorkerSendPayload, +} from '../sharding/WorkerShardingStrategy.js'; +import type { FetchingStrategyOptions, IContextFetchingStrategy } from './IContextFetchingStrategy.js'; export class WorkerContextFetchingStrategy implements IContextFetchingStrategy { private readonly sessionPromises = new Collection void>(); @@ -33,7 +33,9 @@ export class WorkerContextFetchingStrategy implements IContextFetchingStrategy { shardId, nonce, }; + // eslint-disable-next-line no-promise-executor-return const promise = new Promise((resolve) => this.sessionPromises.set(nonce, resolve)); + // eslint-disable-next-line unicorn/require-post-message-target-origin parentPort!.postMessage(payload); return promise; } @@ -44,6 +46,7 @@ export class WorkerContextFetchingStrategy implements IContextFetchingStrategy { shardId, session: sessionInfo, }; + // eslint-disable-next-line unicorn/require-post-message-target-origin parentPort!.postMessage(payload); } } diff --git a/packages/ws/src/strategies/sharding/IShardingStrategy.ts b/packages/ws/src/strategies/sharding/IShardingStrategy.ts index 7fcf2667295c..911cc9a8c089 100644 --- a/packages/ws/src/strategies/sharding/IShardingStrategy.ts +++ b/packages/ws/src/strategies/sharding/IShardingStrategy.ts @@ -6,20 +6,20 @@ import type { WebSocketShardDestroyOptions } from '../../ws/WebSocketShard'; * Strategies responsible for spawning, initializing connections, destroying shards, and relaying events */ export interface IShardingStrategy { - /** - * Spawns all the shards - */ - spawn: (shardIds: number[]) => Awaitable; /** * Initializes all the shards */ - connect: () => Awaitable; + connect(): Awaitable; /** * Destroys all the shards */ - destroy: (options?: Omit) => Awaitable; + destroy(options?: Omit): Awaitable; /** * Sends a payload to a shard */ - send: (shardId: number, payload: GatewaySendPayload) => Awaitable; + send(shardId: number, payload: GatewaySendPayload): Awaitable; + /** + * Spawns all the shards + */ + spawn(shardIds: number[]): Awaitable; } diff --git a/packages/ws/src/strategies/sharding/SimpleShardingStrategy.ts b/packages/ws/src/strategies/sharding/SimpleShardingStrategy.ts index c6c6b6bbed5a..01276c17575b 100644 --- a/packages/ws/src/strategies/sharding/SimpleShardingStrategy.ts +++ b/packages/ws/src/strategies/sharding/SimpleShardingStrategy.ts @@ -1,17 +1,18 @@ import { Collection } from '@discordjs/collection'; import type { GatewaySendPayload } from 'discord-api-types/v10'; -import type { IShardingStrategy } from './IShardingStrategy'; -import { IdentifyThrottler } from '../../utils/IdentifyThrottler'; +import { IdentifyThrottler } from '../../utils/IdentifyThrottler.js'; import type { WebSocketManager } from '../../ws/WebSocketManager'; -import { WebSocketShard, WebSocketShardDestroyOptions, WebSocketShardEvents } from '../../ws/WebSocketShard'; -import { managerToFetchingStrategyOptions } from '../context/IContextFetchingStrategy'; -import { SimpleContextFetchingStrategy } from '../context/SimpleContextFetchingStrategy'; +import { WebSocketShard, WebSocketShardEvents, type WebSocketShardDestroyOptions } from '../../ws/WebSocketShard.js'; +import { managerToFetchingStrategyOptions } from '../context/IContextFetchingStrategy.js'; +import { SimpleContextFetchingStrategy } from '../context/SimpleContextFetchingStrategy.js'; +import type { IShardingStrategy } from './IShardingStrategy.js'; /** * Simple strategy that just spawns shards in the current process */ export class SimpleShardingStrategy implements IShardingStrategy { private readonly manager: WebSocketManager; + private readonly shards = new Collection(); private readonly throttler: IdentifyThrottler; @@ -30,9 +31,10 @@ export class SimpleShardingStrategy implements IShardingStrategy { const strategy = new SimpleContextFetchingStrategy(this.manager, strategyOptions); const shard = new WebSocketShard(strategy, shardId); for (const event of Object.values(WebSocketShardEvents)) { - // @ts-expect-error + // @ts-expect-error: Intentional shard.on(event, (payload) => this.manager.emit(event, { ...payload, shardId })); } + this.shards.set(shardId, shard); } } @@ -68,7 +70,7 @@ export class SimpleShardingStrategy implements IShardingStrategy { /** * {@inheritDoc IShardingStrategy.send} */ - public send(shardId: number, payload: GatewaySendPayload) { + public async send(shardId: number, payload: GatewaySendPayload) { const shard = this.shards.get(shardId); if (!shard) throw new Error(`Shard ${shardId} not found`); return shard.send(payload); diff --git a/packages/ws/src/strategies/sharding/WorkerShardingStrategy.ts b/packages/ws/src/strategies/sharding/WorkerShardingStrategy.ts index e15c4a5dd8b7..bfc8f2436921 100644 --- a/packages/ws/src/strategies/sharding/WorkerShardingStrategy.ts +++ b/packages/ws/src/strategies/sharding/WorkerShardingStrategy.ts @@ -3,11 +3,11 @@ import { join } from 'node:path'; import { Worker } from 'node:worker_threads'; import { Collection } from '@discordjs/collection'; import type { GatewaySendPayload } from 'discord-api-types/v10'; -import type { IShardingStrategy } from './IShardingStrategy'; -import { IdentifyThrottler } from '../../utils/IdentifyThrottler'; +import { IdentifyThrottler } from '../../utils/IdentifyThrottler.js'; import type { SessionInfo, WebSocketManager } from '../../ws/WebSocketManager'; import type { WebSocketShardDestroyOptions, WebSocketShardEvents } from '../../ws/WebSocketShard'; -import { FetchingStrategyOptions, managerToFetchingStrategyOptions } from '../context/IContextFetchingStrategy'; +import { managerToFetchingStrategyOptions, type FetchingStrategyOptions } from '../context/IContextFetchingStrategy.js'; +import type { IShardingStrategy } from './IShardingStrategy.js'; export interface WorkerData extends FetchingStrategyOptions { shardIds: number[]; @@ -21,10 +21,10 @@ export enum WorkerSendPayloadOp { } export type WorkerSendPayload = + | { nonce: number; op: WorkerSendPayloadOp.SessionInfoResponse; session: SessionInfo | null } | { op: WorkerSendPayloadOp.Connect; shardId: number } - | { op: WorkerSendPayloadOp.Destroy; shardId: number; options?: WebSocketShardDestroyOptions } - | { op: WorkerSendPayloadOp.Send; shardId: number; payload: GatewaySendPayload } - | { op: WorkerSendPayloadOp.SessionInfoResponse; nonce: number; session: SessionInfo | null }; + | { op: WorkerSendPayloadOp.Destroy; options?: WebSocketShardDestroyOptions; shardId: number } + | { op: WorkerSendPayloadOp.Send; payload: GatewaySendPayload; shardId: number }; export enum WorkerRecievePayloadOp { Connected, @@ -35,12 +35,12 @@ export enum WorkerRecievePayloadOp { } export type WorkerRecievePayload = + // Can't seem to get a type-safe union based off of the event, so I'm sadly leaving data as any for now + | { data: any; event: WebSocketShardEvents; op: WorkerRecievePayloadOp.Event; shardId: number } + | { nonce: number; op: WorkerRecievePayloadOp.RetrieveSessionInfo; shardId: number } | { op: WorkerRecievePayloadOp.Connected; shardId: number } | { op: WorkerRecievePayloadOp.Destroyed; shardId: number } - // Can't seem to get a type-safe union based off of the event, so I'm sadly leaving data as any for now - | { op: WorkerRecievePayloadOp.Event; shardId: number; event: WebSocketShardEvents; data: any } - | { op: WorkerRecievePayloadOp.RetrieveSessionInfo; shardId: number; nonce: number } - | { op: WorkerRecievePayloadOp.UpdateSessionInfo; shardId: number; session: SessionInfo | null }; + | { op: WorkerRecievePayloadOp.UpdateSessionInfo; session: SessionInfo | null; shardId: number }; /** * Options for a {@link WorkerShardingStrategy} @@ -57,12 +57,15 @@ export interface WorkerShardingStrategyOptions { */ export class WorkerShardingStrategy implements IShardingStrategy { private readonly manager: WebSocketManager; + private readonly options: WorkerShardingStrategyOptions; #workers: Worker[] = []; + readonly #workerByShardId = new Collection(); private readonly connectPromises = new Collection void>(); + private readonly destroyPromises = new Collection void>(); private readonly throttler: IdentifyThrottler; @@ -98,7 +101,7 @@ export class WorkerShardingStrategy implements IShardingStrategy { throw err; }) // eslint-disable-next-line @typescript-eslint/no-misused-promises - .on('message', (payload: WorkerRecievePayload) => this.onMessage(worker, payload)); + .on('message', async (payload: WorkerRecievePayload) => this.onMessage(worker, payload)); this.#workers.push(worker); for (const shardId of slice) { @@ -123,7 +126,9 @@ export class WorkerShardingStrategy implements IShardingStrategy { shardId, }; + // eslint-disable-next-line no-promise-executor-return const promise = new Promise((resolve) => this.connectPromises.set(shardId, resolve)); + // eslint-disable-next-line unicorn/require-post-message-target-origin worker.postMessage(payload); promises.push(promise); } @@ -145,8 +150,10 @@ export class WorkerShardingStrategy implements IShardingStrategy { }; promises.push( - new Promise((resolve) => this.destroyPromises.set(shardId, resolve)).then(() => worker.terminate()), + // eslint-disable-next-line no-promise-executor-return, promise/prefer-await-to-then + new Promise((resolve) => this.destroyPromises.set(shardId, resolve)).then(async () => worker.terminate()), ); + // eslint-disable-next-line unicorn/require-post-message-target-origin worker.postMessage(payload); } @@ -170,10 +177,12 @@ export class WorkerShardingStrategy implements IShardingStrategy { shardId, payload: data, }; + // eslint-disable-next-line unicorn/require-post-message-target-origin worker.postMessage(payload); } private async onMessage(worker: Worker, payload: WorkerRecievePayload) { + // eslint-disable-next-line default-case switch (payload.op) { case WorkerRecievePayloadOp.Connected: { const resolve = this.connectPromises.get(payload.shardId)!; @@ -202,6 +211,7 @@ export class WorkerShardingStrategy implements IShardingStrategy { nonce: payload.nonce, session, }; + // eslint-disable-next-line unicorn/require-post-message-target-origin worker.postMessage(response); break; } diff --git a/packages/ws/src/strategies/sharding/worker.ts b/packages/ws/src/strategies/sharding/worker.ts index 8a4c0bce3cd0..be803e1aa227 100644 --- a/packages/ws/src/strategies/sharding/worker.ts +++ b/packages/ws/src/strategies/sharding/worker.ts @@ -1,14 +1,15 @@ +/* eslint-disable unicorn/require-post-message-target-origin */ import { isMainThread, workerData, parentPort } from 'node:worker_threads'; import { Collection } from '@discordjs/collection'; +import { WebSocketShard, WebSocketShardEvents, type WebSocketShardDestroyOptions } from '../../ws/WebSocketShard.js'; +import { WorkerContextFetchingStrategy } from '../context/WorkerContextFetchingStrategy.js'; import { - WorkerData, - WorkerRecievePayload, WorkerRecievePayloadOp, - WorkerSendPayload, WorkerSendPayloadOp, -} from './WorkerShardingStrategy'; -import { WebSocketShard, WebSocketShardDestroyOptions, WebSocketShardEvents } from '../../ws/WebSocketShard'; -import { WorkerContextFetchingStrategy } from '../context/WorkerContextFetchingStrategy'; + type WorkerData, + type WorkerRecievePayload, + type WorkerSendPayload, +} from './WorkerShardingStrategy.js'; if (isMainThread) { throw new Error('Expected worker script to not be ran within the main thread'); @@ -22,6 +23,7 @@ async function connect(shardId: number) { if (!shard) { throw new Error(`Shard ${shardId} does not exist`); } + await shard.connect(); } @@ -30,13 +32,14 @@ async function destroy(shardId: number, options?: WebSocketShardDestroyOptions) if (!shard) { throw new Error(`Shard ${shardId} does not exist`); } + await shard.destroy(options); } for (const shardId of data.shardIds) { const shard = new WebSocketShard(new WorkerContextFetchingStrategy(data), shardId); for (const event of Object.values(WebSocketShardEvents)) { - // @ts-expect-error + // @ts-expect-error: Event types incompatible shard.on(event, (data) => { const payload: WorkerRecievePayload = { op: WorkerRecievePayloadOp.Event, @@ -47,6 +50,7 @@ for (const shardId of data.shardIds) { parentPort!.postMessage(payload); }); } + shards.set(shardId, shard); } @@ -56,6 +60,7 @@ parentPort! }) // eslint-disable-next-line @typescript-eslint/no-misused-promises .on('message', async (payload: WorkerSendPayload) => { + // eslint-disable-next-line default-case switch (payload.op) { case WorkerSendPayloadOp.Connect: { await connect(payload.shardId); @@ -73,6 +78,7 @@ parentPort! op: WorkerRecievePayloadOp.Destroyed, shardId: payload.shardId, }; + parentPort!.postMessage(response); break; } @@ -82,6 +88,7 @@ parentPort! if (!shard) { throw new Error(`Shard ${payload.shardId} does not exist`); } + await shard.send(payload.payload); break; } diff --git a/packages/ws/src/utils/IdentifyThrottler.ts b/packages/ws/src/utils/IdentifyThrottler.ts index 22a51e9368b1..90faa3fac3aa 100644 --- a/packages/ws/src/utils/IdentifyThrottler.ts +++ b/packages/ws/src/utils/IdentifyThrottler.ts @@ -4,7 +4,7 @@ import type { WebSocketManager } from '../ws/WebSocketManager'; export class IdentifyThrottler { private identifyState = { remaining: 0, - resetsAt: Infinity, + resetsAt: Number.POSITIVE_INFINITY, }; public constructor(private readonly manager: WebSocketManager) {} diff --git a/packages/ws/src/utils/constants.ts b/packages/ws/src/utils/constants.ts index 1b9919a11fc6..8ccc9c6ed34e 100644 --- a/packages/ws/src/utils/constants.ts +++ b/packages/ws/src/utils/constants.ts @@ -1,9 +1,10 @@ import { readFileSync } from 'node:fs'; import { join } from 'node:path'; +import process from 'node:process'; import { Collection } from '@discordjs/collection'; import { APIVersion, GatewayOpcodes } from 'discord-api-types/v10'; -import { lazy } from './utils'; -import type { OptionalWebSocketManagerOptions, SessionInfo } from '../ws/WebSocketManager'; +import type { OptionalWebSocketManagerOptions, SessionInfo } from '../ws/WebSocketManager.js'; +import { lazy } from './utils.js'; /** * Valid encoding types diff --git a/packages/ws/src/utils/utils.ts b/packages/ws/src/utils/utils.ts index 5bb7196f96b5..858450decad3 100644 --- a/packages/ws/src/utils/utils.ts +++ b/packages/ws/src/utils/utils.ts @@ -1,6 +1,6 @@ import type { ShardRange } from '../ws/WebSocketManager'; -export type Awaitable = T | Promise; +export type Awaitable = Promise | T; /** * Yields the numbers in the given range as an array @@ -11,7 +11,7 @@ export type Awaitable = T | Promise; * ``` */ export function range({ start, end }: ShardRange): number[] { - return Array.from({ length: end - start + 1 }, (_, i) => i + start); + return Array.from({ length: end - start + 1 }, (_, index) => index + start); } /** diff --git a/packages/ws/src/ws/WebSocketManager.ts b/packages/ws/src/ws/WebSocketManager.ts index 9a7877a09d6f..fd6434dbb095 100644 --- a/packages/ws/src/ws/WebSocketManager.ts +++ b/packages/ws/src/ws/WebSocketManager.ts @@ -1,26 +1,26 @@ import type { REST } from '@discordjs/rest'; import { AsyncEventEmitter } from '@vladfrangu/async_event_emitter'; import { - APIGatewayBotInfo, - GatewayIdentifyProperties, - GatewayPresenceUpdateData, - RESTGetAPIGatewayBotResult, - GatewayIntentBits, Routes, - GatewaySendPayload, + type APIGatewayBotInfo, + type GatewayIdentifyProperties, + type GatewayPresenceUpdateData, + type RESTGetAPIGatewayBotResult, + type GatewayIntentBits, + type GatewaySendPayload, } from 'discord-api-types/v10'; -import type { WebSocketShardDestroyOptions, WebSocketShardEventsMap } from './WebSocketShard'; import type { IShardingStrategy } from '../strategies/sharding/IShardingStrategy'; -import { SimpleShardingStrategy } from '../strategies/sharding/SimpleShardingStrategy'; -import { CompressionMethod, DefaultWebSocketManagerOptions, Encoding } from '../utils/constants'; -import { Awaitable, range } from '../utils/utils'; +import { SimpleShardingStrategy } from '../strategies/sharding/SimpleShardingStrategy.js'; +import { DefaultWebSocketManagerOptions, type CompressionMethod, type Encoding } from '../utils/constants.js'; +import { range, type Awaitable } from '../utils/utils.js'; +import type { WebSocketShardDestroyOptions, WebSocketShardEventsMap } from './WebSocketShard.js'; /** * Represents a range of shard ids */ export interface ShardRange { - start: number; end: number; + start: number; } /** @@ -28,35 +28,31 @@ export interface ShardRange { */ export interface SessionInfo { /** - * Session id for this shard + * URL to use when resuming */ - sessionId: string; + resumeURL: string; /** * The sequence number of the last message sent by the shard */ sequence: number; /** - * The id of the shard + * Session id for this shard */ - shardId: number; + sessionId: string; /** * The total number of shards at the time of this shard identifying */ shardCount: number; /** - * URL to use when resuming + * The id of the shard */ - resumeURL: string; + shardId: number; } /** * Required options for the WebSocketManager */ export interface RequiredWebSocketManagerOptions { - /** - * The token to use for identifying with the gateway - */ - token: string; /** * The intents to request */ @@ -65,6 +61,10 @@ export interface RequiredWebSocketManagerOptions { * The REST instance to use for fetching gateway information */ rest: REST; + /** + * The token to use for identifying with the gateway + */ + token: string; } /** @@ -72,59 +72,41 @@ export interface RequiredWebSocketManagerOptions { */ export interface OptionalWebSocketManagerOptions { /** - * The total number of shards across all WebsocketManagers you intend to instantiate. - * Use `null` to use Discord's recommended shard count + * The compression method to use + * + * @defaultValue `null` (no compression) */ - shardCount: number | null; + compression: CompressionMethod | null; /** - * The ids of the shards this WebSocketManager should manage. - * Use `null` to simply spawn 0 through `shardCount - 1` - * - * @example - * ```ts - * const manager = new WebSocketManager({ - * shardIds: [1, 3, 7], // spawns shard 1, 3, and 7, nothing else - * }); - * ``` + * The encoding to use * - * @example - * ```ts - * const manager = new WebSocketManager({ - * shardIds: { - * start: 3, - * end: 6, - * }, // spawns shards 3, 4, 5, and 6 - * }); - * ``` + * @defaultValue `'json'` */ - shardIds: number[] | ShardRange | null; + encoding: Encoding; /** - * Value between 50 and 250, total number of members where the gateway will stop sending offline members in the guild member list + * How long to wait for a shard to connect before giving up */ - largeThreshold: number | null; + handshakeTimeout: number | null; /** - * Initial presence data to send to the gateway when identifying + * How long to wait for a shard's HELLO packet before giving up */ - initialPresence: GatewayPresenceUpdateData | null; + helloTimeout: number | null; /** * Properties to send to the gateway when identifying */ identifyProperties: GatewayIdentifyProperties; /** - * The gateway version to use - * @defaultValue `'10'` + * Initial presence data to send to the gateway when identifying */ - version: string; + initialPresence: GatewayPresenceUpdateData | null; /** - * The encoding to use - * @defaultValue `'json'` + * Value between 50 and 250, total number of members where the gateway will stop sending offline members in the guild member list */ - encoding: Encoding; + largeThreshold: number | null; /** - * The compression method to use - * @defaultValue `null` (no compression) + * How long to wait for a shard's READY packet before giving up */ - compression: CompressionMethod | null; + readyTimeout: number | null; /** * Function used to retrieve session information (and attempt to resume) for a given shard * @@ -139,26 +121,46 @@ export interface OptionalWebSocketManagerOptions { * }); * ``` */ - retrieveSessionInfo: (shardId: number) => Awaitable; + retrieveSessionInfo(shardId: number): Awaitable; /** - * Function used to store session information for a given shard + * The total number of shards across all WebsocketManagers you intend to instantiate. + * Use `null` to use Discord's recommended shard count */ - updateSessionInfo: (shardId: number, sessionInfo: SessionInfo | null) => Awaitable; + shardCount: number | null; /** - * How long to wait for a shard to connect before giving up + * The ids of the shards this WebSocketManager should manage. + * Use `null` to simply spawn 0 through `shardCount - 1` + * + * @example + * ```ts + * const manager = new WebSocketManager({ + * shardIds: [1, 3, 7], // spawns shard 1, 3, and 7, nothing else + * }); + * ``` + * @example + * ```ts + * const manager = new WebSocketManager({ + * shardIds: { + * start: 3, + * end: 6, + * }, // spawns shards 3, 4, 5, and 6 + * }); + * ``` */ - handshakeTimeout: number | null; + shardIds: number[] | ShardRange | null; /** - * How long to wait for a shard's HELLO packet before giving up + * Function used to store session information for a given shard */ - helloTimeout: number | null; + updateSessionInfo(shardId: number, sessionInfo: SessionInfo | null): Awaitable; /** - * How long to wait for a shard's READY packet before giving up + * The gateway version to use + * + * @defaultValue `'10'` */ - readyTimeout: number | null; + version: string; } -export type WebSocketManagerOptions = RequiredWebSocketManagerOptions & OptionalWebSocketManagerOptions; +export type WebSocketManagerOptions = OptionalWebSocketManagerOptions & RequiredWebSocketManagerOptions; export type ManagerShardEventsMap = { [K in keyof WebSocketShardEventsMap]: [ @@ -187,11 +189,12 @@ export class WebSocketManager extends AsyncEventEmitter { /** * Strategy used to manage shards + * * @defaultValue `SimpleManagerToShardStrategy` */ private strategy: IShardingStrategy = new SimpleShardingStrategy(this); - public constructor(options: RequiredWebSocketManagerOptions & Partial) { + public constructor(options: Partial & RequiredWebSocketManagerOptions) { super(); this.options = { ...DefaultWebSocketManagerOptions, ...options }; } @@ -203,6 +206,7 @@ export class WebSocketManager extends AsyncEventEmitter { /** * Fetches the gateway information from Discord - or returns it from cache if available + * * @param force - Whether to ignore the cache and force a fresh fetch */ public async fetchGatewayInformation(force = false) { @@ -222,6 +226,7 @@ export class WebSocketManager extends AsyncEventEmitter { /** * Updates your total shard count on-the-fly, spawning shards as needed + * * @param shardCount - The new shard count to use */ public async updateShardCount(shardCount: number | null) { diff --git a/packages/ws/src/ws/WebSocketShard.ts b/packages/ws/src/ws/WebSocketShard.ts index 88b6c8b2582d..e042f6b6a57b 100644 --- a/packages/ws/src/ws/WebSocketShard.ts +++ b/packages/ws/src/ws/WebSocketShard.ts @@ -1,6 +1,9 @@ +/* eslint-disable id-length */ +import { Buffer } from 'node:buffer'; import { once } from 'node:events'; -import { setTimeout } from 'node:timers'; +import { setTimeout, clearInterval, clearTimeout, setInterval } from 'node:timers'; import { setTimeout as sleep } from 'node:timers/promises'; +import { URLSearchParams } from 'node:url'; import { TextDecoder } from 'node:util'; import { inflate } from 'node:zlib'; import { Collection } from '@discordjs/collection'; @@ -9,27 +12,28 @@ import { AsyncEventEmitter } from '@vladfrangu/async_event_emitter'; import { GatewayCloseCodes, GatewayDispatchEvents, - GatewayDispatchPayload, - GatewayIdentifyData, GatewayOpcodes, - GatewayReceivePayload, - GatewaySendPayload, + type GatewayDispatchPayload, + type GatewayIdentifyData, + type GatewayReceivePayload, + type GatewaySendPayload, } from 'discord-api-types/v10'; -import { RawData, WebSocket } from 'ws'; +import { WebSocket, type RawData } from 'ws'; import type { Inflate } from 'zlib-sync'; -import type { SessionInfo } from './WebSocketManager'; import type { IContextFetchingStrategy } from '../strategies/context/IContextFetchingStrategy'; -import { ImportantGatewayOpcodes } from '../utils/constants'; -import { lazy } from '../utils/utils'; +import { ImportantGatewayOpcodes } from '../utils/constants.js'; +import { lazy } from '../utils/utils.js'; +import type { SessionInfo } from './WebSocketManager.js'; -const getZlibSync = lazy(() => import('zlib-sync').then((mod) => mod.default).catch(() => null)); +// eslint-disable-next-line promise/prefer-await-to-then +const getZlibSync = lazy(async () => import('zlib-sync').then((mod) => mod.default).catch(() => null)); export enum WebSocketShardEvents { Debug = 'debug', + Dispatch = 'dispatch', Hello = 'hello', Ready = 'ready', Resumed = 'resumed', - Dispatch = 'dispatch', } export enum WebSocketShardStatus { @@ -54,14 +58,14 @@ export type WebSocketShardEventsMap = { }; export interface WebSocketShardDestroyOptions { - reason?: string; code?: number; + reason?: string; recover?: WebSocketShardDestroyRecovery; } export enum CloseCodes { - Normal = 1000, - Resuming = 4200, + Normal = 1_000, + Resuming = 4_200, } export class WebSocketShard extends AsyncEventEmitter { @@ -72,6 +76,7 @@ export class WebSocketShard extends AsyncEventEmitter { private useIdentifyCompress = false; private inflate: Inflate | null = null; + private readonly textDecoder = new TextDecoder(); private status: WebSocketShardStatus = WebSocketShardStatus.Idle; @@ -86,6 +91,7 @@ export class WebSocketShard extends AsyncEventEmitter { }; private heartbeatInterval: NodeJS.Timer | null = null; + private lastHeartbeatAt = -1; private session: SessionInfo | null = null; @@ -114,7 +120,7 @@ export class WebSocketShard extends AsyncEventEmitter { if (zlib) { params.append('compress', compression); this.inflate = new zlib.Inflate({ - chunkSize: 65535, + chunkSize: 65_535, to: 'string', }); } else if (!this.useIdentifyCompress) { @@ -173,6 +179,7 @@ export class WebSocketShard extends AsyncEventEmitter { if (this.heartbeatInterval) { clearInterval(this.heartbeatInterval); } + this.lastHeartbeatAt = -1; // Clear session state if applicable @@ -202,6 +209,7 @@ export class WebSocketShard extends AsyncEventEmitter { this.status = WebSocketShardStatus.Idle; if (options.recover !== undefined) { + // eslint-disable-next-line consistent-return return this.connect(); } } @@ -213,6 +221,7 @@ export class WebSocketShard extends AsyncEventEmitter { if (timeout) { this.timeouts.set(event, timeout); } + await once(this, event, { signal: controller.signal }); if (timeout) { clearTimeout(timeout); @@ -279,7 +288,7 @@ export class WebSocketShard extends AsyncEventEmitter { this.status = WebSocketShardStatus.Ready; } - private resume(session: SessionInfo) { + private async resume(session: SessionInfo) { this.debug(['Resuming session']); this.status = WebSocketShardStatus.Resuming; this.replayedEvents = 0; @@ -293,6 +302,7 @@ export class WebSocketShard extends AsyncEventEmitter { }); } + // eslint-disable-next-line consistent-return private async heartbeat(requested = false) { if (!this.isAck && !requested) { return this.destroy({ reason: 'Zombie connection', recover: WebSocketShardDestroyRecovery.Resume }); @@ -307,7 +317,7 @@ export class WebSocketShard extends AsyncEventEmitter { this.isAck = false; } - private async unpackMessage(data: Buffer | ArrayBuffer, isBinary: boolean): Promise { + private async unpackMessage(data: ArrayBuffer | Buffer, isBinary: boolean): Promise { const decompressable = new Uint8Array(data); // Deal with no compression @@ -318,9 +328,10 @@ export class WebSocketShard extends AsyncEventEmitter { // Deal with identify compress if (this.useIdentifyCompress) { return new Promise((resolve, reject) => { - inflate(decompressable, { chunkSize: 65535 }, (err, result) => { + inflate(decompressable, { chunkSize: 65_535 }, (err, result) => { if (err) { - return reject(err); + reject(err); + return; } resolve(JSON.parse(this.textDecoder.decode(result)) as GatewayReceivePayload); @@ -368,11 +379,12 @@ export class WebSocketShard extends AsyncEventEmitter { } private async onMessage(data: RawData, isBinary: boolean) { - const payload = await this.unpackMessage(data as Buffer | ArrayBuffer, isBinary); + const payload = await this.unpackMessage(data as ArrayBuffer | Buffer, isBinary); if (!payload) { return; } + // eslint-disable-next-line default-case switch (payload.op) { case GatewayOpcodes.Dispatch: { if (this.status === WebSocketShardStatus.Ready || this.status === WebSocketShardStatus.Resuming) { @@ -411,11 +423,9 @@ export class WebSocketShard extends AsyncEventEmitter { } } - if (this.session) { - if (payload.s > this.session.sequence) { - this.session.sequence = payload.s; - await this.strategy.updateSessionInfo(this.id, this.session); - } + if (this.session && payload.s > this.session.sequence) { + this.session.sequence = payload.s; + await this.strategy.updateSessionInfo(this.id, this.session); } break; @@ -447,6 +457,7 @@ export class WebSocketShard extends AsyncEventEmitter { recover: WebSocketShardDestroyRecovery.Reconnect, }); } + break; } @@ -469,6 +480,7 @@ export class WebSocketShard extends AsyncEventEmitter { this.emit('error', err); } + // eslint-disable-next-line consistent-return private async onClose(code: number) { switch (code) { case CloseCodes.Normal: { diff --git a/yarn.lock b/yarn.lock index 749707f67125..d82d20ebb2e3 100644 --- a/yarn.lock +++ b/yarn.lock @@ -34,6 +34,67 @@ __metadata: languageName: node linkType: hard +"@angular-eslint/bundled-angular-compiler@npm:14.0.3": + version: 14.0.3 + resolution: "@angular-eslint/bundled-angular-compiler@npm:14.0.3" + checksum: 7f686f52d34d20767d9ab5fcc70c0a228b23c4a17b79b774c8568293cdbcfdad6492c432b1462ecb974bd948f4f52cf59db9ba5ae5bd703442864a33adbf89a3 + languageName: node + linkType: hard + +"@angular-eslint/eslint-plugin-template@npm:^14.0.3": + version: 14.0.3 + resolution: "@angular-eslint/eslint-plugin-template@npm:14.0.3" + dependencies: + "@angular-eslint/bundled-angular-compiler": 14.0.3 + "@typescript-eslint/utils": 5.29.0 + aria-query: 5.0.0 + axobject-query: 3.0.1 + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + typescript: "*" + checksum: 16b20170f2c69fb59f67cc18b26f451a92c18aaaac1cf64e544f6cb9bdf2083815674c2086c30e78e1c97b00fc5b52f11f9d715ac3d151cc982fc74c54809e98 + languageName: node + linkType: hard + +"@angular-eslint/eslint-plugin@npm:^14.0.3": + version: 14.0.3 + resolution: "@angular-eslint/eslint-plugin@npm:14.0.3" + dependencies: + "@angular-eslint/utils": 14.0.3 + "@typescript-eslint/utils": 5.29.0 + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + typescript: "*" + checksum: 9c4296c61b1e2cc27ff72facfc87f68fdbc64e25125a684b7d6d804267526d6ab127baf00044238f0cbedb466ecda46d60fdfd1bb9740dbf7140d514353f7095 + languageName: node + linkType: hard + +"@angular-eslint/template-parser@npm:^14.0.3": + version: 14.0.3 + resolution: "@angular-eslint/template-parser@npm:14.0.3" + dependencies: + "@angular-eslint/bundled-angular-compiler": 14.0.3 + eslint-scope: ^5.1.0 + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + typescript: "*" + checksum: 921bdd9336bb95773b5c7eb63c5759a6ab55e1f3f59458b0e37609d4e73b54eaa6a8679e8c149f7e4ec1bccfbb00f29605cb85e6f2c4ba83c54a4e3245cfb0fd + languageName: node + linkType: hard + +"@angular-eslint/utils@npm:14.0.3": + version: 14.0.3 + resolution: "@angular-eslint/utils@npm:14.0.3" + dependencies: + "@angular-eslint/bundled-angular-compiler": 14.0.3 + "@typescript-eslint/utils": 5.29.0 + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + typescript: "*" + checksum: 937a66534858ad10609781e9e4eaf194947d0f212f128223a896a17a624a0f26684e74a7e873d5f692d4a5bb77ea3d45272d99715d6c292407ceb017ac9cc4cf + languageName: node + linkType: hard + "@antfu/install-pkg@npm:^0.1.0": version: 0.1.0 resolution: "@antfu/install-pkg@npm:0.1.0" @@ -1358,7 +1419,17 @@ __metadata: languageName: node linkType: hard -"@babel/runtime@npm:^7.10.2, @babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.13.10, @babel/runtime@npm:^7.18.3, @babel/runtime@npm:^7.3.1, @babel/runtime@npm:^7.8.4": +"@babel/runtime-corejs3@npm:^7.10.2": + version: 7.18.9 + resolution: "@babel/runtime-corejs3@npm:7.18.9" + dependencies: + core-js-pure: ^3.20.2 + regenerator-runtime: ^0.13.4 + checksum: 249158b660ac996fa4f4b0d1ab5810db060af40fac4d0bb5da23f55539a151313ae254aa64afc2ab7000d95167824e21a689f74bc24b36fd0f5ca030d522133d + languageName: node + linkType: hard + +"@babel/runtime@npm:^7.10.2, @babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.13.10, @babel/runtime@npm:^7.18.3, @babel/runtime@npm:^7.18.9, @babel/runtime@npm:^7.3.1, @babel/runtime@npm:^7.8.4": version: 7.18.9 resolution: "@babel/runtime@npm:7.18.9" dependencies: @@ -1668,14 +1739,9 @@ __metadata: dependencies: "@actions/core": ^1.9.1 "@types/node": ^16.11.56 - "@typescript-eslint/eslint-plugin": ^5.36.1 - "@typescript-eslint/parser": ^5.36.1 "@vitest/coverage-c8": ^0.22.1 eslint: ^8.23.0 - eslint-config-marine: ^9.4.1 - eslint-config-prettier: ^8.5.0 - eslint-import-resolver-typescript: ^3.5.0 - eslint-plugin-import: ^2.26.0 + eslint-config-neon: ^0.1.23 prettier: ^2.7.1 rollup-plugin-typescript2: ^0.33.0 tslib: ^2.4.0 @@ -1692,14 +1758,8 @@ __metadata: "@microsoft/api-extractor-model": ^7.23.3 "@microsoft/tsdoc": ^0.14.1 "@types/node": ^16.11.56 - "@typescript-eslint/eslint-plugin": ^5.36.1 - "@typescript-eslint/parser": ^5.36.1 eslint: ^8.23.0 - eslint-config-marine: ^9.4.1 - eslint-config-prettier: ^8.5.0 - eslint-import-resolver-typescript: ^3.5.0 - eslint-plugin-import: ^2.26.0 - eslint-plugin-tsdoc: ^0.2.16 + eslint-config-neon: ^0.1.23 prettier: ^2.7.1 rollup-plugin-typescript2: ^0.33.0 typescript: ^4.8.2 @@ -1716,17 +1776,11 @@ __metadata: "@microsoft/api-extractor": ^7.29.5 "@sapphire/shapeshift": ^3.6.0 "@types/node": ^16.11.56 - "@typescript-eslint/eslint-plugin": ^5.36.1 - "@typescript-eslint/parser": ^5.36.1 "@vitest/coverage-c8": ^0.22.1 discord-api-types: ^0.37.5 downlevel-dts: ^0.10.1 eslint: ^8.23.0 - eslint-config-marine: ^9.4.1 - eslint-config-prettier: ^8.5.0 - eslint-import-resolver-typescript: ^3.5.0 - eslint-plugin-import: ^2.26.0 - eslint-plugin-tsdoc: ^0.2.16 + eslint-config-neon: ^0.1.23 fast-deep-equal: ^3.1.3 prettier: ^2.7.1 rollup-plugin-typescript2: ^0.33.0 @@ -1746,16 +1800,10 @@ __metadata: "@favware/cliff-jumper": ^1.8.7 "@microsoft/api-extractor": ^7.29.5 "@types/node": ^16.11.56 - "@typescript-eslint/eslint-plugin": ^5.36.1 - "@typescript-eslint/parser": ^5.36.1 "@vitest/coverage-c8": ^0.22.1 downlevel-dts: ^0.10.1 eslint: ^8.23.0 - eslint-config-marine: ^9.4.1 - eslint-config-prettier: ^8.5.0 - eslint-import-resolver-typescript: ^3.5.0 - eslint-plugin-import: ^2.26.0 - eslint-plugin-tsdoc: ^0.2.16 + eslint-config-neon: ^0.1.23 prettier: ^2.7.1 rollup-plugin-typescript2: ^0.33.0 typescript: ^4.8.2 @@ -1790,14 +1838,9 @@ __metadata: "@favware/cliff-jumper": ^1.8.7 "@types/jsdoc-to-markdown": ^7.0.3 "@types/node": ^16.11.56 - "@typescript-eslint/eslint-plugin": ^5.36.1 - "@typescript-eslint/parser": ^5.36.1 commander: ^9.4.0 eslint: ^8.23.0 - eslint-config-marine: ^9.4.1 - eslint-config-prettier: ^8.5.0 - eslint-import-resolver-typescript: ^3.5.0 - eslint-plugin-import: ^2.26.0 + eslint-config-neon: ^0.1.23 jsdoc-to-markdown: ^7.1.1 prettier: ^2.7.1 rollup-plugin-typescript2: ^0.33.0 @@ -1817,13 +1860,8 @@ __metadata: "@discordjs/proxy": ^1.1.0 "@discordjs/rest": ^1.1.0 "@types/node": ^16.11.56 - "@typescript-eslint/eslint-plugin": ^5.36.1 - "@typescript-eslint/parser": ^5.36.1 eslint: ^8.23.0 - eslint-config-marine: ^9.4.1 - eslint-config-prettier: ^8.5.0 - eslint-import-resolver-typescript: ^3.5.0 - eslint-plugin-import: ^2.26.0 + eslint-config-neon: ^0.1.23 prettier: ^2.7.1 rollup-plugin-typescript2: ^0.33.0 tslib: ^2.4.0 @@ -1842,15 +1880,10 @@ __metadata: "@microsoft/api-extractor": ^7.29.5 "@types/node": ^16.11.56 "@types/supertest": ^2.0.12 - "@typescript-eslint/eslint-plugin": ^5.36.1 - "@typescript-eslint/parser": ^5.36.1 "@vitest/coverage-c8": ^0.22.1 downlevel-dts: ^0.10.1 eslint: ^8.23.0 - eslint-config-marine: ^9.4.1 - eslint-config-prettier: ^8.5.0 - eslint-import-resolver-typescript: ^3.5.0 - eslint-plugin-import: ^2.26.0 + eslint-config-neon: ^0.1.23 prettier: ^2.7.1 rollup-plugin-typescript2: ^0.33.0 supertest: ^6.2.4 @@ -1873,17 +1906,11 @@ __metadata: "@sapphire/async-queue": ^1.5.0 "@sapphire/snowflake": ^3.2.2 "@types/node": ^16.11.56 - "@typescript-eslint/eslint-plugin": ^5.36.1 - "@typescript-eslint/parser": ^5.36.1 "@vitest/coverage-c8": ^0.22.1 discord-api-types: ^0.37.5 downlevel-dts: ^0.10.1 eslint: ^8.23.0 - eslint-config-marine: ^9.4.1 - eslint-config-prettier: ^8.5.0 - eslint-import-resolver-typescript: ^3.5.0 - eslint-plugin-import: ^2.26.0 - eslint-plugin-tsdoc: ^0.2.16 + eslint-config-neon: ^0.1.23 file-type: ^18.0.0 prettier: ^2.7.1 rollup-plugin-typescript2: ^0.33.0 @@ -1903,15 +1930,10 @@ __metadata: "@microsoft/api-extractor-model": ^7.23.3 "@microsoft/tsdoc": ^0.14.1 "@types/node": ^16.11.56 - "@typescript-eslint/eslint-plugin": ^5.36.1 - "@typescript-eslint/parser": ^5.36.1 "@vitest/coverage-c8": ^0.22.1 commander: ^9.4.0 eslint: ^8.23.0 - eslint-config-marine: ^9.4.1 - eslint-config-prettier: ^8.5.0 - eslint-import-resolver-typescript: ^3.5.0 - eslint-plugin-import: ^2.26.0 + eslint-config-neon: ^0.1.23 prettier: ^2.7.1 rollup-plugin-typescript2: ^0.33.0 tslib: ^2.4.0 @@ -1934,16 +1956,10 @@ __metadata: "@types/jest": ^28.1.8 "@types/node": ^16.11.56 "@types/ws": ^8.5.3 - "@typescript-eslint/eslint-plugin": ^5.36.1 - "@typescript-eslint/parser": ^5.36.1 discord-api-types: ^0.37.5 downlevel-dts: ^0.10.1 eslint: ^8.23.0 - eslint-config-marine: ^9.4.1 - eslint-config-prettier: ^8.5.0 - eslint-import-resolver-typescript: ^3.5.0 - eslint-plugin-import: ^2.26.0 - eslint-plugin-tsdoc: ^0.2.16 + eslint-config-neon: ^0.1.23 jest: ^29.0.1 jest-websocket-mock: ^2.4.0 mock-socket: ^9.1.5 @@ -1978,8 +1994,6 @@ __metadata: "@types/node": ^16.11.56 "@types/react-dom": ^18.0.6 "@types/react-syntax-highlighter": ^15.5.5 - "@typescript-eslint/eslint-plugin": ^5.36.1 - "@typescript-eslint/parser": ^5.36.1 "@unocss/cli": ^0.45.13 "@unocss/preset-web-fonts": ^0.45.13 "@unocss/reset": ^0.45.13 @@ -1988,12 +2002,7 @@ __metadata: "@vscode/codicons": ^0.0.32 concurrently: ^7.3.0 eslint: ^8.23.0 - eslint-config-marine: ^9.4.1 - eslint-config-prettier: ^8.5.0 - eslint-import-resolver-typescript: ^3.5.0 - eslint-plugin-import: ^2.26.0 - eslint-plugin-react: ^7.31.1 - eslint-plugin-react-hooks: ^4.6.0 + eslint-config-neon: ^0.1.23 happy-dom: ^6.0.4 next: ^12.2.5 next-mdx-remote: ^4.1.0 @@ -2029,18 +2038,12 @@ __metadata: "@sapphire/async-queue": ^1.5.0 "@types/node": ^16.11.56 "@types/ws": ^8.5.3 - "@typescript-eslint/eslint-plugin": ^5.36.1 - "@typescript-eslint/parser": ^5.36.1 "@vitest/coverage-c8": ^0.22.1 "@vladfrangu/async_event_emitter": ^2.0.1 discord-api-types: ^0.37.5 downlevel-dts: ^0.10.1 eslint: ^8.23.0 - eslint-config-marine: ^9.4.1 - eslint-config-prettier: ^8.5.0 - eslint-import-resolver-typescript: ^3.5.0 - eslint-plugin-import: ^2.26.0 - eslint-plugin-tsdoc: ^0.2.16 + eslint-config-neon: ^0.1.23 mock-socket: ^9.1.5 prettier: ^2.7.1 rollup-plugin-typescript2: ^0.33.0 @@ -2216,6 +2219,17 @@ __metadata: languageName: node linkType: hard +"@es-joy/jsdoccomment@npm:~0.31.0": + version: 0.31.0 + resolution: "@es-joy/jsdoccomment@npm:0.31.0" + dependencies: + comment-parser: 1.3.1 + esquery: ^1.4.0 + jsdoc-type-pratt-parser: ~3.1.0 + checksum: 1691ff501559f45593e5f080d2c08dea4fadba5f48e526b9ff2943c050fbb40408f5e83968542e5b6bf47219c7573796d00bfe80dacfd1ba8187904cc475cefb + languageName: node + linkType: hard + "@esbuild/linux-loong64@npm:0.14.54": version: 0.14.54 resolution: "@esbuild/linux-loong64@npm:0.14.54" @@ -2974,6 +2988,15 @@ __metadata: languageName: node linkType: hard +"@next/eslint-plugin-next@npm:^12.2.5": + version: 12.2.5 + resolution: "@next/eslint-plugin-next@npm:12.2.5" + dependencies: + glob: 7.1.7 + checksum: 0d6faf895d4952fc2a5da3f2e86a9e1903f37b44201e7fabfcc994f6989dfceb974f354a7abb1779b318f14ada57925d82eb6c22628265c7f6b36f232edc93ee + languageName: node + linkType: hard + "@next/swc-android-arm-eabi@npm:12.2.5": version: 12.2.5 resolution: "@next/swc-android-arm-eabi@npm:12.2.5" @@ -3112,20 +3135,6 @@ __metadata: languageName: node linkType: hard -"@pkgr/utils@npm:^2.3.0": - version: 2.3.0 - resolution: "@pkgr/utils@npm:2.3.0" - dependencies: - cross-spawn: ^7.0.3 - is-glob: ^4.0.3 - open: ^8.4.0 - picocolors: ^1.0.0 - tiny-glob: ^0.2.9 - tslib: ^2.4.0 - checksum: d2fe95c51d548497425182b284dea8155d9e80bb36fa744c670174d7deae53743b13aa9f63a8bfaa8b31dcf7c53dc279a99372f2c2c35ff9fcebf91c5c5c8190 - languageName: node - linkType: hard - "@polka/url@npm:^1.0.0-next.20": version: 1.0.0-next.21 resolution: "@polka/url@npm:1.0.0-next.21" @@ -3379,6 +3388,13 @@ __metadata: languageName: node linkType: hard +"@rushstack/eslint-patch@npm:^1.1.4": + version: 1.1.4 + resolution: "@rushstack/eslint-patch@npm:1.1.4" + checksum: 597bc84e2f76c7f5f2bcedd4c4b1dd5d02524167a0f67ac588e8fbbd94666297aaf0e6a53ec46afb95554164fc1169ff782841003280e4bc98e80ab6559412c6 + languageName: node + linkType: hard + "@rushstack/node-core-library@npm:3.51.1": version: 3.51.1 resolution: "@rushstack/node-core-library@npm:3.51.1" @@ -3844,13 +3860,6 @@ __metadata: languageName: node linkType: hard -"@types/json5@npm:^0.0.29": - version: 0.0.29 - resolution: "@types/json5@npm:0.0.29" - checksum: e60b153664572116dfea673c5bda7778dbff150498f44f998e34b5886d8afc47f16799280e4b6e241c0472aef1bc36add771c569c68fc5125fc2ae519a3eb9ac - languageName: node - linkType: hard - "@types/keyv@npm:^3.1.1": version: 3.1.4 resolution: "@types/keyv@npm:3.1.4" @@ -4140,6 +4149,17 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/experimental-utils@npm:^5.0.0": + version: 5.36.1 + resolution: "@typescript-eslint/experimental-utils@npm:5.36.1" + dependencies: + "@typescript-eslint/utils": 5.36.1 + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + checksum: 58bd9df609e0323c1c0bfd8e65956defe3e775629d58d39d459d9ee860ebded5ecf55a26ddfe90a7420a3f11537ef95a93bbcc49110d36511a177a7ad179bdaf + languageName: node + linkType: hard + "@typescript-eslint/parser@npm:^5.36.1": version: 5.36.1 resolution: "@typescript-eslint/parser@npm:5.36.1" @@ -4157,6 +4177,16 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/scope-manager@npm:5.29.0": + version: 5.29.0 + resolution: "@typescript-eslint/scope-manager@npm:5.29.0" + dependencies: + "@typescript-eslint/types": 5.29.0 + "@typescript-eslint/visitor-keys": 5.29.0 + checksum: 540642bef9c55fd7692af98dfb42ab99eeb82553f42ab2a3c4e132e02b5ba492da1c6bf1ca6b02b900a678fc74399ad6c564c0ca20d91032090b6cbcb01a5bde + languageName: node + linkType: hard + "@typescript-eslint/scope-manager@npm:5.36.1": version: 5.36.1 resolution: "@typescript-eslint/scope-manager@npm:5.36.1" @@ -4184,6 +4214,13 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/types@npm:5.29.0": + version: 5.29.0 + resolution: "@typescript-eslint/types@npm:5.29.0" + checksum: 982ecdd69103105cabff8deac7f82f6002cf909238702ce902133e9af655cd962f977d5adf650c5ddae80d8c0e46abe1612a9141b25c7ed20ba8d662eb7ab871 + languageName: node + linkType: hard + "@typescript-eslint/types@npm:5.36.1": version: 5.36.1 resolution: "@typescript-eslint/types@npm:5.36.1" @@ -4191,6 +4228,24 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/typescript-estree@npm:5.29.0": + version: 5.29.0 + resolution: "@typescript-eslint/typescript-estree@npm:5.29.0" + dependencies: + "@typescript-eslint/types": 5.29.0 + "@typescript-eslint/visitor-keys": 5.29.0 + debug: ^4.3.4 + globby: ^11.1.0 + is-glob: ^4.0.3 + semver: ^7.3.7 + tsutils: ^3.21.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: b91107a9fc31bf511aaa70f1e6d1d832d3acf08cfe999c870169447a7c223abff54c1d604bbb08d7c069dd98b43fb279bc314d1726097704fe8ad4c6e0969b12 + languageName: node + linkType: hard + "@typescript-eslint/typescript-estree@npm:5.36.1": version: 5.36.1 resolution: "@typescript-eslint/typescript-estree@npm:5.36.1" @@ -4209,7 +4264,23 @@ __metadata: languageName: node linkType: hard -"@typescript-eslint/utils@npm:5.36.1": +"@typescript-eslint/utils@npm:5.29.0": + version: 5.29.0 + resolution: "@typescript-eslint/utils@npm:5.29.0" + dependencies: + "@types/json-schema": ^7.0.9 + "@typescript-eslint/scope-manager": 5.29.0 + "@typescript-eslint/types": 5.29.0 + "@typescript-eslint/typescript-estree": 5.29.0 + eslint-scope: ^5.1.1 + eslint-utils: ^3.0.0 + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + checksum: 216f51fb9c176437919af55db9ed14db8af7b020611e954c06e69956b9e3248cbfe6a218013d6c17b716116dca6566a4c03710f9b48ce4e94f89312d61c16d07 + languageName: node + linkType: hard + +"@typescript-eslint/utils@npm:5.36.1, @typescript-eslint/utils@npm:^5.10.0": version: 5.36.1 resolution: "@typescript-eslint/utils@npm:5.36.1" dependencies: @@ -4225,6 +4296,16 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/visitor-keys@npm:5.29.0": + version: 5.29.0 + resolution: "@typescript-eslint/visitor-keys@npm:5.29.0" + dependencies: + "@typescript-eslint/types": 5.29.0 + eslint-visitor-keys: ^3.3.0 + checksum: 15f228ad9ffaf0e42cc6b2ee4e5095c1e89c4c2dc46a65d19ca0e2296d88c08a1192039d942bd9600b1496176749f6322d636dd307602dbab90404a9501b4d6e + languageName: node + linkType: hard + "@typescript-eslint/visitor-keys@npm:5.36.1": version: 5.36.1 resolution: "@typescript-eslint/visitor-keys@npm:5.36.1" @@ -4911,13 +4992,23 @@ __metadata: languageName: node linkType: hard -"aria-query@npm:^5.0.0": +"aria-query@npm:5.0.0, aria-query@npm:^5.0.0": version: 5.0.0 resolution: "aria-query@npm:5.0.0" checksum: c41f98866c5a304561ee8cae55856711cddad6f3f85d8cb43cc5f79667078d9b8979ce32d244c1ff364e6463a4d0b6865804a33ccc717fed701b281cf7dc6296 languageName: node linkType: hard +"aria-query@npm:^4.2.2": + version: 4.2.2 + resolution: "aria-query@npm:4.2.2" + dependencies: + "@babel/runtime": ^7.10.2 + "@babel/runtime-corejs3": ^7.10.2 + checksum: 38401a9a400f26f3dcc24b84997461a16b32869a9893d323602bed8da40a8bcc0243b8d2880e942249a1496cea7a7de769e93d21c0baa439f01e1ee936fed665 + languageName: node + linkType: hard + "array-back@npm:^1.0.2, array-back@npm:^1.0.3": version: 1.0.4 resolution: "array-back@npm:1.0.4" @@ -4971,7 +5062,7 @@ __metadata: languageName: node linkType: hard -"array-includes@npm:^3.1.4, array-includes@npm:^3.1.5": +"array-includes@npm:^3.1.5": version: 3.1.5 resolution: "array-includes@npm:3.1.5" dependencies: @@ -4991,7 +5082,7 @@ __metadata: languageName: node linkType: hard -"array.prototype.flat@npm:^1.2.5": +"array.prototype.flat@npm:^1.3.0": version: 1.3.0 resolution: "array.prototype.flat@npm:1.3.0" dependencies: @@ -5015,6 +5106,19 @@ __metadata: languageName: node linkType: hard +"array.prototype.reduce@npm:^1.0.4": + version: 1.0.4 + resolution: "array.prototype.reduce@npm:1.0.4" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.1.3 + es-abstract: ^1.19.2 + es-array-method-boxes-properly: ^1.0.0 + is-string: ^1.0.7 + checksum: 6a57a1a2d3b77a9543db139cd52211f43a5af8e8271cb3c173be802076e3a6f71204ba8f090f5937ebc0842d5876db282f0f63dffd0e86b153e6e5a45681e4a5 + languageName: node + linkType: hard + "arrify@npm:^1.0.1": version: 1.0.1 resolution: "arrify@npm:1.0.1" @@ -5052,6 +5156,13 @@ __metadata: languageName: node linkType: hard +"ast-types-flow@npm:^0.0.7": + version: 0.0.7 + resolution: "ast-types-flow@npm:0.0.7" + checksum: a26dcc2182ffee111cad7c471759b0bda22d3b7ebacf27c348b22c55f16896b18ab0a4d03b85b4020dce7f3e634b8f00b593888f622915096ea1927fa51866c4 + languageName: node + linkType: hard + "astral-regex@npm:^2.0.0": version: 2.0.0 resolution: "astral-regex@npm:2.0.0" @@ -5096,6 +5207,27 @@ __metadata: languageName: node linkType: hard +"axe-core@npm:^4.4.3": + version: 4.4.3 + resolution: "axe-core@npm:4.4.3" + checksum: c3ea000d9ace3ba0bc747c8feafc24b0de62a0f7d93021d0f77b19c73fca15341843510f6170da563d51535d6cfb7a46c5fc0ea36170549dbb44b170208450a2 + languageName: node + linkType: hard + +"axobject-query@npm:3.0.1": + version: 3.0.1 + resolution: "axobject-query@npm:3.0.1" + checksum: c4eede240d332936c85b15725695f55797304366063ee025db5a0c5df98bb35ec826129191c3e91a0355a56854029c7bd6f63b505022737b6e3ab83cef6bf7df + languageName: node + linkType: hard + +"axobject-query@npm:^2.2.0": + version: 2.2.0 + resolution: "axobject-query@npm:2.2.0" + checksum: 96b8c7d807ca525f41ad9b286186e2089b561ba63a6d36c3e7d73dc08150714660995c7ad19cda05784458446a0793b45246db45894631e13853f48c1aa3117f + languageName: node + linkType: hard + "babel-code-frame@npm:^6.22.0": version: 6.26.0 resolution: "babel-code-frame@npm:6.26.0" @@ -5429,7 +5561,7 @@ __metadata: languageName: node linkType: hard -"builtins@npm:^5.0.0": +"builtins@npm:^5.0.0, builtins@npm:^5.0.1": version: 5.0.1 resolution: "builtins@npm:5.0.1" dependencies: @@ -5759,7 +5891,7 @@ __metadata: languageName: node linkType: hard -"ci-info@npm:^3.1.0, ci-info@npm:^3.2.0": +"ci-info@npm:^3.1.0, ci-info@npm:^3.2.0, ci-info@npm:^3.3.2": version: 3.3.2 resolution: "ci-info@npm:3.3.2" checksum: fd81f1edd2d3b0f6cb077b2e84365136d87b9db8c055928c1ad69da8a76c2c2f19cba8ea51b90238302157ca927f91f92b653e933f2398dde4867500f08d6e62 @@ -5773,6 +5905,15 @@ __metadata: languageName: node linkType: hard +"clean-regexp@npm:^1.0.0": + version: 1.0.0 + resolution: "clean-regexp@npm:1.0.0" + dependencies: + escape-string-regexp: ^1.0.5 + checksum: 0b1ce281b07da2463c6882ea2e8409119b6cabbd9f687cdbdcee942c45b2b9049a2084f7b5f228c63ef9f21e722963ae0bfe56a735dbdbdd92512867625a7e40 + languageName: node + linkType: hard + "clean-stack@npm:^2.0.0": version: 2.2.0 resolution: "clean-stack@npm:2.2.0" @@ -6048,6 +6189,13 @@ __metadata: languageName: node linkType: hard +"comment-parser@npm:1.3.1": + version: 1.3.1 + resolution: "comment-parser@npm:1.3.1" + checksum: 421e6a113a3afd548500e7174ab46a2049dccf92e82bbaa3b209031b1bdf97552aabfa1ae2a120c0b62df17e1ba70e0d8b05d68504fee78e1ef974c59bcfe718 + languageName: node + linkType: hard + "common-sequence@npm:^2.0.2": version: 2.0.2 resolution: "common-sequence@npm:2.0.2" @@ -6410,6 +6558,13 @@ __metadata: languageName: node linkType: hard +"core-js-pure@npm:^3.20.2": + version: 3.25.0 + resolution: "core-js-pure@npm:3.25.0" + checksum: 041cef3c4fa03b30eea6aa8539db00a02ea264e8542b9b787428f43e727e67050c742f46dbd75bc9ab544524a54e1ee55d8b23602dc8a2da485a3741a5f95df7 + languageName: node + linkType: hard + "core-util-is@npm:1.0.2": version: 1.0.2 resolution: "core-util-is@npm:1.0.2" @@ -6521,6 +6676,13 @@ __metadata: languageName: node linkType: hard +"damerau-levenshtein@npm:^1.0.8": + version: 1.0.8 + resolution: "damerau-levenshtein@npm:1.0.8" + checksum: d240b7757544460ae0586a341a53110ab0a61126570ef2d8c731e3eab3f0cb6e488e2609e6a69b46727635de49be20b071688698744417ff1b6c1d7ccd03e0de + languageName: node + linkType: hard + "dargs@npm:^7.0.0": version: 7.0.0 resolution: "dargs@npm:7.0.0" @@ -6669,13 +6831,6 @@ __metadata: languageName: node linkType: hard -"define-lazy-prop@npm:^2.0.0": - version: 2.0.0 - resolution: "define-lazy-prop@npm:2.0.0" - checksum: 0115fdb065e0490918ba271d7339c42453d209d4cb619dfe635870d906731eff3e1ade8028bb461ea27ce8264ec5e22c6980612d332895977e89c1bbc80fcee2 - languageName: node - linkType: hard - "define-properties@npm:^1.1.3, define-properties@npm:^1.1.4": version: 1.1.4 resolution: "define-properties@npm:1.1.4" @@ -7088,16 +7243,6 @@ __metadata: languageName: node linkType: hard -"enhanced-resolve@npm:^5.10.0": - version: 5.10.0 - resolution: "enhanced-resolve@npm:5.10.0" - dependencies: - graceful-fs: ^4.2.4 - tapable: ^2.2.0 - checksum: 0bb9830704db271610f900e8d79d70a740ea16f251263362b0c91af545576d09fe50103496606c1300a05e588372d6f9780a9bc2e30ce8ef9b827ec8f44687ff - languageName: node - linkType: hard - "entities@npm:^2.0.0": version: 2.2.0 resolution: "entities@npm:2.2.0" @@ -7142,7 +7287,7 @@ __metadata: languageName: node linkType: hard -"es-abstract@npm:^1.19.0, es-abstract@npm:^1.19.1, es-abstract@npm:^1.19.2, es-abstract@npm:^1.19.5": +"es-abstract@npm:^1.19.0, es-abstract@npm:^1.19.1, es-abstract@npm:^1.19.2, es-abstract@npm:^1.19.5, es-abstract@npm:^1.20.1": version: 1.20.1 resolution: "es-abstract@npm:1.20.1" dependencies: @@ -7173,6 +7318,13 @@ __metadata: languageName: node linkType: hard +"es-array-method-boxes-properly@npm:^1.0.0": + version: 1.0.0 + resolution: "es-array-method-boxes-properly@npm:1.0.0" + checksum: 2537fcd1cecf187083890bc6f5236d3a26bf39237433587e5bf63392e88faae929dbba78ff0120681a3f6f81c23fe3816122982c160d63b38c95c830b633b826 + languageName: node + linkType: hard + "es-module-lexer@npm:^0.9.3": version: 0.9.3 resolution: "es-module-lexer@npm:0.9.3" @@ -7881,19 +8033,32 @@ __metadata: languageName: node linkType: hard -"eslint-config-aqua@npm:^9.2.0": - version: 9.2.1 - resolution: "eslint-config-aqua@npm:9.2.1" - checksum: f91424cdcc227d29dd299c69bb030dcaa8fb7c03feced29297de24cf04b382d5cf81f0822ac2050321ca6ddbb0345f8f34534315821ecf315e76935ce888238a - languageName: node - linkType: hard - -"eslint-config-marine@npm:^9.4.1": - version: 9.4.1 - resolution: "eslint-config-marine@npm:9.4.1" +"eslint-config-neon@npm:^0.1.23": + version: 0.1.23 + resolution: "eslint-config-neon@npm:0.1.23" dependencies: - eslint-config-aqua: ^9.2.0 - checksum: 380969b39b9a5c43fcb8cfc283cee83ef046084e854c59e53dfc6eb08578e92914be12b992eb3cd6231610c008657ac4c03ecd96f8983efaa146c41f0f07cc09 + "@angular-eslint/eslint-plugin": ^14.0.3 + "@angular-eslint/eslint-plugin-template": ^14.0.3 + "@angular-eslint/template-parser": ^14.0.3 + "@next/eslint-plugin-next": ^12.2.5 + "@rushstack/eslint-patch": ^1.1.4 + "@typescript-eslint/eslint-plugin": ^5.36.1 + "@typescript-eslint/parser": ^5.36.1 + eslint-config-prettier: ^8.5.0 + eslint-plugin-cypress: ^2.12.1 + eslint-plugin-import: "npm:eslint-plugin-i@latest" + eslint-plugin-jest: ^27.0.1 + eslint-plugin-jsdoc: ^39.3.6 + eslint-plugin-jsx-a11y: ^6.6.1 + eslint-plugin-lodash: ^7.4.0 + eslint-plugin-n: ^15.2.5 + eslint-plugin-promise: ^6.0.1 + eslint-plugin-react: ^7.31.1 + eslint-plugin-react-hooks: ^4.6.0 + eslint-plugin-tsdoc: ^0.2.16 + eslint-plugin-typescript-sort-keys: ^2.1.0 + eslint-plugin-unicorn: ^43.0.2 + checksum: 68197bdec01e2fd44e14c62af5ee631c4453a491ff0f6f85ec591b0bc08a5eacb32016ee8e1188d10d4468bc0b92e8f103be74be9128a2ba4a7249578739b3cc languageName: node linkType: hard @@ -7934,24 +8099,6 @@ __metadata: languageName: node linkType: hard -"eslint-import-resolver-typescript@npm:^3.5.0": - version: 3.5.0 - resolution: "eslint-import-resolver-typescript@npm:3.5.0" - dependencies: - debug: ^4.3.4 - enhanced-resolve: ^5.10.0 - get-tsconfig: ^4.2.0 - globby: ^13.1.2 - is-core-module: ^2.10.0 - is-glob: ^4.0.3 - synckit: ^0.8.3 - peerDependencies: - eslint: "*" - eslint-plugin-import: "*" - checksum: 9719d1f68b7bb0eaf8939cff2d3b02b526949f73db744877de781640650dd4d0a17d934222b9ac69e27d9f363ee4569c1aa1a2a2aab6500257517f9bf7d25976 - languageName: node - linkType: hard - "eslint-module-utils@npm:^2.7.3": version: 2.7.4 resolution: "eslint-module-utils@npm:2.7.4" @@ -7964,26 +8111,146 @@ __metadata: languageName: node linkType: hard -"eslint-plugin-import@npm:^2.26.0": - version: 2.26.0 - resolution: "eslint-plugin-import@npm:2.26.0" +"eslint-plugin-cypress@npm:^2.12.1": + version: 2.12.1 + resolution: "eslint-plugin-cypress@npm:2.12.1" + dependencies: + globals: ^11.12.0 + peerDependencies: + eslint: ">= 3.2.1" + checksum: 1f1c36e149304e9a6f58e2292a761abad58274da33b3a48b24ad55ad20cbce3ac7467321f2b6fcb052f9563c89f67004de4766eba2e2bdbcb010a6a0666989cf + languageName: node + linkType: hard + +"eslint-plugin-es@npm:^4.1.0": + version: 4.1.0 + resolution: "eslint-plugin-es@npm:4.1.0" + dependencies: + eslint-utils: ^2.0.0 + regexpp: ^3.0.0 + peerDependencies: + eslint: ">=4.19.1" + checksum: 26b87a216d3625612b1d3ca8653ac8a1d261046d2a973bb0eb2759070267d2bfb0509051facdeb5ae03dc8dfb51a434be23aff7309a752ca901d637da535677f + languageName: node + linkType: hard + +"eslint-plugin-import@npm:eslint-plugin-i@latest": + version: 2.26.0-2 + resolution: "eslint-plugin-i@npm:2.26.0-2" dependencies: - array-includes: ^3.1.4 - array.prototype.flat: ^1.2.5 + array-includes: ^3.1.5 + array.prototype.flat: ^1.3.0 debug: ^2.6.9 doctrine: ^2.1.0 eslint-import-resolver-node: ^0.3.6 eslint-module-utils: ^2.7.3 + get-own-property-symbols: ^0.9.5 + get-tsconfig: ^4.2.0 has: ^1.0.3 - is-core-module: ^2.8.1 + is-core-module: ^2.9.0 is-glob: ^4.0.3 minimatch: ^3.1.2 + object.getownpropertydescriptors: ^2.1.4 object.values: ^1.1.5 - resolve: ^1.22.0 - tsconfig-paths: ^3.14.1 + resolve: ^1.22.1 peerDependencies: eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 - checksum: 0bf77ad80339554481eafa2b1967449e1f816b94c7a6f9614ce33fb4083c4e6c050f10d241dd50b4975d47922880a34de1e42ea9d8e6fd663ebb768baa67e655 + checksum: ec3f4694d6fe7138592ccbe3007ea35473a0162f0f2f1012606653dd173f0aca7061aad96560a261b825b49e55cae927ed30a2c8d47a56211d02901406e8c46d + languageName: node + linkType: hard + +"eslint-plugin-jest@npm:^27.0.1": + version: 27.0.1 + resolution: "eslint-plugin-jest@npm:27.0.1" + dependencies: + "@typescript-eslint/utils": ^5.10.0 + peerDependencies: + "@typescript-eslint/eslint-plugin": ^5.0.0 + eslint: ^7.0.0 || ^8.0.0 + peerDependenciesMeta: + "@typescript-eslint/eslint-plugin": + optional: true + jest: + optional: true + checksum: 269d4dc46bb925eb4c19106fd9e03775a863f53e05716628cc47777abc15887775ee47d73c4f8bdd98bb26b7462d8d8f654610bb2a367f8c97881204a2c3f42e + languageName: node + linkType: hard + +"eslint-plugin-jsdoc@npm:^39.3.6": + version: 39.3.6 + resolution: "eslint-plugin-jsdoc@npm:39.3.6" + dependencies: + "@es-joy/jsdoccomment": ~0.31.0 + comment-parser: 1.3.1 + debug: ^4.3.4 + escape-string-regexp: ^4.0.0 + esquery: ^1.4.0 + semver: ^7.3.7 + spdx-expression-parse: ^3.0.1 + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + checksum: 0825a5eba6cdcb250e45cd5ad488bd234da346f324a11160ad4b8c9fb3c76d8e1457d462fa91c24f11bdff5ef0013375d65c366b648202254c4bcc79eed89060 + languageName: node + linkType: hard + +"eslint-plugin-jsx-a11y@npm:^6.6.1": + version: 6.6.1 + resolution: "eslint-plugin-jsx-a11y@npm:6.6.1" + dependencies: + "@babel/runtime": ^7.18.9 + aria-query: ^4.2.2 + array-includes: ^3.1.5 + ast-types-flow: ^0.0.7 + axe-core: ^4.4.3 + axobject-query: ^2.2.0 + damerau-levenshtein: ^1.0.8 + emoji-regex: ^9.2.2 + has: ^1.0.3 + jsx-ast-utils: ^3.3.2 + language-tags: ^1.0.5 + minimatch: ^3.1.2 + semver: ^6.3.0 + peerDependencies: + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 + checksum: baae7377f0e25a0cc9b34dc333a3dc6ead9ee8365e445451eff554c3ca267a0a6cb88127fe90395c578ab1b92cfed246aef7dc8d2b48b603389e10181799e144 + languageName: node + linkType: hard + +"eslint-plugin-lodash@npm:^7.4.0": + version: 7.4.0 + resolution: "eslint-plugin-lodash@npm:7.4.0" + dependencies: + lodash: ^4.17.21 + peerDependencies: + eslint: ">=2" + checksum: 7557cded64dd0e1042b420214e65ba9d6c5cb6c83c40e471db1f7d33e63584d1260c9ca9a4fded4ca7a2fe2ac2a9cdc303e072105096fa99b583101c6e7ada13 + languageName: node + linkType: hard + +"eslint-plugin-n@npm:^15.2.5": + version: 15.2.5 + resolution: "eslint-plugin-n@npm:15.2.5" + dependencies: + builtins: ^5.0.1 + eslint-plugin-es: ^4.1.0 + eslint-utils: ^3.0.0 + ignore: ^5.1.1 + is-core-module: ^2.10.0 + minimatch: ^3.1.2 + resolve: ^1.22.1 + semver: ^7.3.7 + peerDependencies: + eslint: ">=7.0.0" + checksum: 3be265957b3dda6a049841803335c17689cf98a4b3859eeed3e57b44850b241e7d20640890b2dea7e83816c938fc16274bf78d370f571e211d00d9a3c513f281 + languageName: node + linkType: hard + +"eslint-plugin-promise@npm:^6.0.1": + version: 6.0.1 + resolution: "eslint-plugin-promise@npm:6.0.1" + peerDependencies: + eslint: ^7.0.0 || ^8.0.0 + checksum: c1bb3c2e591787e97133dcaf764f908420a3a1959a3132e199db8f14d70dfa79fc9caf991ca60a4b60ae5f1f9823bc96c2e52304828a4278ef2f3964fe121de9 languageName: node linkType: hard @@ -8030,6 +8297,45 @@ __metadata: languageName: node linkType: hard +"eslint-plugin-typescript-sort-keys@npm:^2.1.0": + version: 2.1.0 + resolution: "eslint-plugin-typescript-sort-keys@npm:2.1.0" + dependencies: + "@typescript-eslint/experimental-utils": ^5.0.0 + json-schema: ^0.4.0 + natural-compare-lite: ^1.4.0 + peerDependencies: + "@typescript-eslint/parser": ^1 || ^2 || ^3 || ^4 || ^5 + eslint: ^5 || ^6 || ^7 || ^8 + typescript: ^3 || ^4 + checksum: 98ea442519ca9cdd36aa4d7d4e4f3d96d16a9287e32ea69209865ff3cd10ce33d9c4acb86ddc2cc0406a072aea319841496e66b512f79c58aaf3924d85f73683 + languageName: node + linkType: hard + +"eslint-plugin-unicorn@npm:^43.0.2": + version: 43.0.2 + resolution: "eslint-plugin-unicorn@npm:43.0.2" + dependencies: + "@babel/helper-validator-identifier": ^7.18.6 + ci-info: ^3.3.2 + clean-regexp: ^1.0.0 + eslint-utils: ^3.0.0 + esquery: ^1.4.0 + indent-string: ^4.0.0 + is-builtin-module: ^3.1.0 + lodash: ^4.17.21 + pluralize: ^8.0.0 + read-pkg-up: ^7.0.1 + regexp-tree: ^0.1.24 + safe-regex: ^2.1.1 + semver: ^7.3.7 + strip-indent: ^3.0.0 + peerDependencies: + eslint: ">=8.18.0" + checksum: 1b63eb013cbc0b3c9ef131a1e049b4b53d8e208393675d5f97d3fa83c050ebcb695a7fd210f4de1460f42f89c2ecca261280488834591d5c21e146d297a9ee2e + languageName: node + linkType: hard + "eslint-rule-docs@npm:^1.1.5": version: 1.1.235 resolution: "eslint-rule-docs@npm:1.1.235" @@ -8037,7 +8343,7 @@ __metadata: languageName: node linkType: hard -"eslint-scope@npm:^5.1.1": +"eslint-scope@npm:^5.1.0, eslint-scope@npm:^5.1.1": version: 5.1.1 resolution: "eslint-scope@npm:5.1.1" dependencies: @@ -8057,6 +8363,15 @@ __metadata: languageName: node linkType: hard +"eslint-utils@npm:^2.0.0": + version: 2.1.0 + resolution: "eslint-utils@npm:2.1.0" + dependencies: + eslint-visitor-keys: ^1.1.0 + checksum: 27500938f348da42100d9e6ad03ae29b3de19ba757ae1a7f4a087bdcf83ac60949bbb54286492ca61fac1f5f3ac8692dd21537ce6214240bf95ad0122f24d71d + languageName: node + linkType: hard + "eslint-utils@npm:^3.0.0": version: 3.0.0 resolution: "eslint-utils@npm:3.0.0" @@ -8068,6 +8383,13 @@ __metadata: languageName: node linkType: hard +"eslint-visitor-keys@npm:^1.1.0": + version: 1.3.0 + resolution: "eslint-visitor-keys@npm:1.3.0" + checksum: 37a19b712f42f4c9027e8ba98c2b06031c17e0c0a4c696cd429bd9ee04eb43889c446f2cd545e1ff51bef9593fcec94ecd2c2ef89129fcbbf3adadbef520376a + languageName: node + linkType: hard + "eslint-visitor-keys@npm:^2.0.0": version: 2.1.0 resolution: "eslint-visitor-keys@npm:2.1.0" @@ -8550,9 +8872,9 @@ __metadata: linkType: hard "flatted@npm:^3.1.0": - version: 3.2.6 - resolution: "flatted@npm:3.2.6" - checksum: 33b87aa88dfa40ca6ee31d7df61712bbbad3d3c05c132c23e59b9b61d34631b337a18ff2b8dc5553acdc871ec72b741e485f78969cf006124a3f57174de29a0e + version: 3.2.7 + resolution: "flatted@npm:3.2.7" + checksum: 427633049d55bdb80201c68f7eb1cbd533e03eac541f97d3aecab8c5526f12a20ccecaeede08b57503e772c769e7f8680b37e8d482d1e5f8d7e2194687f9ea35 languageName: node linkType: hard @@ -8844,6 +9166,13 @@ __metadata: languageName: node linkType: hard +"get-own-property-symbols@npm:^0.9.5": + version: 0.9.5 + resolution: "get-own-property-symbols@npm:0.9.5" + checksum: 51763b9b5e28d2ee6ee3d760f790b5081b1fcdac0b41acb6844c4d00c5a69bb82eecf2d2145334c931892b0f342c02a3b0c56d6e7bed6d74cd2d667eb087dc14 + languageName: node + linkType: hard + "get-package-type@npm:^0.1.0": version: 0.1.0 resolution: "get-package-type@npm:0.1.0" @@ -9001,6 +9330,20 @@ __metadata: languageName: node linkType: hard +"glob@npm:7.1.7": + version: 7.1.7 + resolution: "glob@npm:7.1.7" + dependencies: + fs.realpath: ^1.0.0 + inflight: ^1.0.4 + inherits: 2 + minimatch: ^3.0.4 + once: ^1.3.0 + path-is-absolute: ^1.0.0 + checksum: b61f48973bbdcf5159997b0874a2165db572b368b931135832599875919c237fc05c12984e38fe828e69aa8a921eb0e8a4997266211c517c9cfaae8a93988bb8 + languageName: node + linkType: hard + "glob@npm:^7.0.0, glob@npm:^7.1.1, glob@npm:^7.1.3, glob@npm:^7.1.4, glob@npm:^7.1.6": version: 7.2.3 resolution: "glob@npm:7.2.3" @@ -9046,7 +9389,7 @@ __metadata: languageName: node linkType: hard -"globals@npm:^11.1.0": +"globals@npm:^11.1.0, globals@npm:^11.12.0": version: 11.12.0 resolution: "globals@npm:11.12.0" checksum: 67051a45eca3db904aee189dfc7cd53c20c7d881679c93f6146ddd4c9f4ab2268e68a919df740d39c71f4445d2b38ee360fc234428baea1dbdfe68bbcb46979e @@ -9062,13 +9405,6 @@ __metadata: languageName: node linkType: hard -"globalyzer@npm:0.1.0": - version: 0.1.0 - resolution: "globalyzer@npm:0.1.0" - checksum: 419a0f95ba542534fac0842964d31b3dc2936a479b2b1a8a62bad7e8b61054faa9b0a06ad9f2e12593396b9b2621cac93358d9b3071d33723fb1778608d358a1 - languageName: node - linkType: hard - "globby@npm:^11.0.1, globby@npm:^11.0.3, globby@npm:^11.1.0": version: 11.1.0 resolution: "globby@npm:11.1.0" @@ -9096,13 +9432,6 @@ __metadata: languageName: node linkType: hard -"globrex@npm:^0.1.2": - version: 0.1.2 - resolution: "globrex@npm:0.1.2" - checksum: adca162494a176ce9ecf4dd232f7b802956bb1966b37f60c15e49d2e7d961b66c60826366dc2649093cad5a0d69970cfa8875bd1695b5a1a2f33dcd2aa88da3c - languageName: node - linkType: hard - "got@npm:^9.6.0": version: 9.6.0 resolution: "got@npm:9.6.0" @@ -9719,7 +10048,7 @@ __metadata: languageName: node linkType: hard -"ignore@npm:^5.2.0": +"ignore@npm:^5.1.1, ignore@npm:^5.2.0": version: 5.2.0 resolution: "ignore@npm:5.2.0" checksum: 6b1f926792d614f64c6c83da3a1f9c83f6196c2839aa41e1e32dd7b8d174cef2e329d75caabb62cb61ce9dc432f75e67d07d122a037312db7caa73166a1bdb77 @@ -9974,7 +10303,7 @@ __metadata: languageName: node linkType: hard -"is-core-module@npm:^2.1.0, is-core-module@npm:^2.10.0, is-core-module@npm:^2.5.0, is-core-module@npm:^2.8.1, is-core-module@npm:^2.9.0": +"is-core-module@npm:^2.1.0, is-core-module@npm:^2.10.0, is-core-module@npm:^2.5.0, is-core-module@npm:^2.9.0": version: 2.10.0 resolution: "is-core-module@npm:2.10.0" dependencies: @@ -10006,15 +10335,6 @@ __metadata: languageName: node linkType: hard -"is-docker@npm:^2.0.0, is-docker@npm:^2.1.1": - version: 2.2.1 - resolution: "is-docker@npm:2.2.1" - bin: - is-docker: cli.js - checksum: 3fef7ddbf0be25958e8991ad941901bf5922ab2753c46980b60b05c1bf9c9c2402d35e6dc32e4380b980ef5e1970a5d9d5e5aa2e02d77727c3b6b5e918474c56 - languageName: node - linkType: hard - "is-extglob@npm:^2.1.1": version: 2.1.1 resolution: "is-extglob@npm:2.1.1" @@ -10258,15 +10578,6 @@ __metadata: languageName: node linkType: hard -"is-wsl@npm:^2.2.0": - version: 2.2.0 - resolution: "is-wsl@npm:2.2.0" - dependencies: - is-docker: ^2.0.0 - checksum: 20849846ae414997d290b75e16868e5261e86ff5047f104027026fd61d8b5a9b0b3ade16239f35e1a067b3c7cc02f70183cb661010ed16f4b6c7c93dad1b19d8 - languageName: node - linkType: hard - "is-yarn-global@npm:^0.3.0": version: 0.3.0 resolution: "is-yarn-global@npm:0.3.0" @@ -10990,6 +11301,13 @@ __metadata: languageName: node linkType: hard +"jsdoc-type-pratt-parser@npm:~3.1.0": + version: 3.1.0 + resolution: "jsdoc-type-pratt-parser@npm:3.1.0" + checksum: 2f437b57621f1e481918165f6cf0e48256628a9e510d8b3f88a2ab667bf2128bf8b94c628b57c43e78f555ca61983e9c282814703840dc091d2623992214a061 + languageName: node + linkType: hard + "jsdoc@npm:^3.6.10": version: 3.6.11 resolution: "jsdoc@npm:3.6.11" @@ -11078,7 +11396,7 @@ __metadata: languageName: node linkType: hard -"json-schema@npm:0.4.0": +"json-schema@npm:0.4.0, json-schema@npm:^0.4.0": version: 0.4.0 resolution: "json-schema@npm:0.4.0" checksum: 66389434c3469e698da0df2e7ac5a3281bcff75e797a5c127db7c5b56270e01ae13d9afa3c03344f76e32e81678337a8c912bdbb75101c62e487dc3778461d72 @@ -11108,17 +11426,6 @@ __metadata: languageName: node linkType: hard -"json5@npm:^1.0.1": - version: 1.0.1 - resolution: "json5@npm:1.0.1" - dependencies: - minimist: ^1.2.0 - bin: - json5: lib/cli.js - checksum: e76ea23dbb8fc1348c143da628134a98adf4c5a4e8ea2adaa74a80c455fc2cdf0e2e13e6398ef819bfe92306b610ebb2002668ed9fc1af386d593691ef346fc3 - languageName: node - linkType: hard - "json5@npm:^2.2.1": version: 2.2.1 resolution: "json5@npm:2.2.1" @@ -11186,7 +11493,7 @@ __metadata: languageName: node linkType: hard -"jsx-ast-utils@npm:^2.4.1 || ^3.0.0": +"jsx-ast-utils@npm:^2.4.1 || ^3.0.0, jsx-ast-utils@npm:^3.3.2": version: 3.3.3 resolution: "jsx-ast-utils@npm:3.3.3" dependencies: @@ -11242,6 +11549,22 @@ __metadata: languageName: node linkType: hard +"language-subtag-registry@npm:~0.3.2": + version: 0.3.22 + resolution: "language-subtag-registry@npm:0.3.22" + checksum: 8ab70a7e0e055fe977ac16ea4c261faec7205ac43db5e806f72e5b59606939a3b972c4bd1e10e323b35d6ffa97c3e1c4c99f6553069dad2dfdd22020fa3eb56a + languageName: node + linkType: hard + +"language-tags@npm:^1.0.5": + version: 1.0.5 + resolution: "language-tags@npm:1.0.5" + dependencies: + language-subtag-registry: ~0.3.2 + checksum: c81b5d8b9f5f9cfd06ee71ada6ddfe1cf83044dd5eeefcd1e420ad491944da8957688db4a0a9bc562df4afdc2783425cbbdfd152c01d93179cf86888903123cf + languageName: node + linkType: hard + "latest-version@npm:^5.1.0": version: 5.1.0 resolution: "latest-version@npm:5.1.0" @@ -12754,6 +13077,13 @@ __metadata: languageName: node linkType: hard +"natural-compare-lite@npm:^1.4.0": + version: 1.4.0 + resolution: "natural-compare-lite@npm:1.4.0" + checksum: 5222ac3986a2b78dd6069ac62cbb52a7bf8ffc90d972ab76dfe7b01892485d229530ed20d0c62e79a6b363a663b273db3bde195a1358ce9e5f779d4453887225 + languageName: node + linkType: hard + "natural-compare@npm:^1.4.0": version: 1.4.0 resolution: "natural-compare@npm:1.4.0" @@ -13190,6 +13520,18 @@ __metadata: languageName: node linkType: hard +"object.getownpropertydescriptors@npm:^2.1.4": + version: 2.1.4 + resolution: "object.getownpropertydescriptors@npm:2.1.4" + dependencies: + array.prototype.reduce: ^1.0.4 + call-bind: ^1.0.2 + define-properties: ^1.1.4 + es-abstract: ^1.20.1 + checksum: 988c466fe49fc4f19a28d2d1d894c95c6abfe33c94674ec0b14d96eed71f453c7ad16873d430dc2acbb1760de6d3d2affac4b81237a306012cc4dc49f7539e7f + languageName: node + linkType: hard + "object.hasown@npm:^1.1.1": version: 1.1.1 resolution: "object.hasown@npm:1.1.1" @@ -13250,17 +13592,6 @@ __metadata: languageName: node linkType: hard -"open@npm:^8.4.0": - version: 8.4.0 - resolution: "open@npm:8.4.0" - dependencies: - define-lazy-prop: ^2.0.0 - is-docker: ^2.1.1 - is-wsl: ^2.2.0 - checksum: e9545bec64cdbf30a0c35c1bdc310344adf8428a117f7d8df3c0af0a0a24c513b304916a6d9b11db0190ff7225c2d578885080b761ed46a3d5f6f1eebb98b63c - languageName: node - linkType: hard - "optionator@npm:^0.9.1": version: 0.9.1 resolution: "optionator@npm:0.9.1" @@ -13664,6 +13995,13 @@ __metadata: languageName: node linkType: hard +"pluralize@npm:^8.0.0": + version: 8.0.0 + resolution: "pluralize@npm:8.0.0" + checksum: 08931d4a6a4a5561a7f94f67a31c17e6632cb21e459ab3ff4f6f629d9a822984cf8afef2311d2005fbea5d7ef26016ebb090db008e2d8bce39d0a9a9d218736e + languageName: node + linkType: hard + "postcss@npm:8.4.14": version: 8.4.14 resolution: "postcss@npm:8.4.14" @@ -14285,6 +14623,15 @@ __metadata: languageName: node linkType: hard +"regexp-tree@npm:^0.1.24, regexp-tree@npm:~0.1.1": + version: 0.1.24 + resolution: "regexp-tree@npm:0.1.24" + bin: + regexp-tree: bin/regexp-tree + checksum: 5807013289d9205288d665e0f8d8cff94843dfd55fdedd1833eb9d9bbd07188a37dfa02942ec5cdc671180037f715148fac1ba6f18fd6be4268e5a8feb49d340 + languageName: node + linkType: hard + "regexp.prototype.flags@npm:^1.4.1, regexp.prototype.flags@npm:^1.4.3": version: 1.4.3 resolution: "regexp.prototype.flags@npm:1.4.3" @@ -14296,7 +14643,7 @@ __metadata: languageName: node linkType: hard -"regexpp@npm:^3.2.0": +"regexpp@npm:^3.0.0, regexpp@npm:^3.2.0": version: 3.2.0 resolution: "regexpp@npm:3.2.0" checksum: a78dc5c7158ad9ddcfe01aa9144f46e192ddbfa7b263895a70a5c6c73edd9ce85faf7c0430e59ac38839e1734e275b9c3de5c57ee3ab6edc0e0b1bdebefccef8 @@ -14543,7 +14890,7 @@ __metadata: languageName: node linkType: hard -"resolve@npm:^1.1.6, resolve@npm:^1.10.0, resolve@npm:^1.14.2, resolve@npm:^1.17.0, resolve@npm:^1.19.0, resolve@npm:^1.20.0, resolve@npm:^1.22.0, resolve@npm:^1.22.1, resolve@npm:^1.3.2": +"resolve@npm:^1.1.6, resolve@npm:^1.10.0, resolve@npm:^1.14.2, resolve@npm:^1.17.0, resolve@npm:^1.19.0, resolve@npm:^1.20.0, resolve@npm:^1.22.1, resolve@npm:^1.3.2": version: 1.22.1 resolution: "resolve@npm:1.22.1" dependencies: @@ -14588,7 +14935,7 @@ __metadata: languageName: node linkType: hard -"resolve@patch:resolve@^1.1.6#~builtin, resolve@patch:resolve@^1.10.0#~builtin, resolve@patch:resolve@^1.14.2#~builtin, resolve@patch:resolve@^1.17.0#~builtin, resolve@patch:resolve@^1.19.0#~builtin, resolve@patch:resolve@^1.20.0#~builtin, resolve@patch:resolve@^1.22.0#~builtin, resolve@patch:resolve@^1.22.1#~builtin, resolve@patch:resolve@^1.3.2#~builtin": +"resolve@patch:resolve@^1.1.6#~builtin, resolve@patch:resolve@^1.10.0#~builtin, resolve@patch:resolve@^1.14.2#~builtin, resolve@patch:resolve@^1.17.0#~builtin, resolve@patch:resolve@^1.19.0#~builtin, resolve@patch:resolve@^1.20.0#~builtin, resolve@patch:resolve@^1.22.1#~builtin, resolve@patch:resolve@^1.3.2#~builtin": version: 1.22.1 resolution: "resolve@patch:resolve@npm%3A1.22.1#~builtin::version=1.22.1&hash=07638b" dependencies: @@ -14820,6 +15167,15 @@ __metadata: languageName: node linkType: hard +"safe-regex@npm:^2.1.1": + version: 2.1.1 + resolution: "safe-regex@npm:2.1.1" + dependencies: + regexp-tree: ~0.1.1 + checksum: 5d734e2193c63ef0cb00f60c0244e0f8a30ecb31923633cd34636808d6a7c4c206d650017953ae1db8bc33967c2f06af33488dea6f038f4e38212beb7bed77b4 + languageName: node + linkType: hard + "safer-buffer@npm:>= 2.1.2 < 3.0.0, safer-buffer@npm:^2.0.2, safer-buffer@npm:^2.1.0, safer-buffer@npm:~2.1.0": version: 2.1.2 resolution: "safer-buffer@npm:2.1.2" @@ -15217,7 +15573,7 @@ __metadata: languageName: node linkType: hard -"spdx-expression-parse@npm:^3.0.0": +"spdx-expression-parse@npm:^3.0.0, spdx-expression-parse@npm:^3.0.1": version: 3.0.1 resolution: "spdx-expression-parse@npm:3.0.1" dependencies: @@ -15682,16 +16038,6 @@ __metadata: languageName: node linkType: hard -"synckit@npm:^0.8.3": - version: 0.8.3 - resolution: "synckit@npm:0.8.3" - dependencies: - "@pkgr/utils": ^2.3.0 - tslib: ^2.4.0 - checksum: ba6baa7c32e69b38eebb322a8eb1712a117f7f1eaa42e75623c7d6da43f0e61d3ac33fa962c2c58a8b37742f1e0ae9d21f04c9da0dbf34d618a8780055e9e1fa - languageName: node - linkType: hard - "table-layout@npm:^0.4.2": version: 0.4.5 resolution: "table-layout@npm:0.4.5" @@ -15712,13 +16058,6 @@ __metadata: languageName: node linkType: hard -"tapable@npm:^2.2.0": - version: 2.2.1 - resolution: "tapable@npm:2.2.1" - checksum: 3b7a1b4d86fa940aad46d9e73d1e8739335efd4c48322cb37d073eb6f80f5281889bf0320c6d8ffcfa1a0dd5bfdbd0f9d037e252ef972aca595330538aac4d51 - languageName: node - linkType: hard - "tar-fs@npm:^2.0.0, tar-fs@npm:^2.1.1": version: 2.1.1 resolution: "tar-fs@npm:2.1.1" @@ -15911,16 +16250,6 @@ __metadata: languageName: node linkType: hard -"tiny-glob@npm:^0.2.9": - version: 0.2.9 - resolution: "tiny-glob@npm:0.2.9" - dependencies: - globalyzer: 0.1.0 - globrex: ^0.1.2 - checksum: aea5801eb6663ddf77ebb74900b8f8bd9dfcfc9b6a1cc8018cb7421590c00bf446109ff45e4b64a98e6c95ddb1255a337a5d488fb6311930e2a95334151ec9c6 - languageName: node - linkType: hard - "tinypool@npm:^0.2.4": version: 0.2.4 resolution: "tinypool@npm:0.2.4" @@ -16120,18 +16449,6 @@ __metadata: languageName: node linkType: hard -"tsconfig-paths@npm:^3.14.1": - version: 3.14.1 - resolution: "tsconfig-paths@npm:3.14.1" - dependencies: - "@types/json5": ^0.0.29 - json5: ^1.0.1 - minimist: ^1.2.6 - strip-bom: ^3.0.0 - checksum: 8afa01c673ebb4782ba53d3a12df97fa837ce524f8ad38ee4e2b2fd57f5ac79abc21c574e9e9eb014d93efe7fe8214001b96233b5c6ea75bd1ea82afe17a4c6d - languageName: node - linkType: hard - "tsd@npm:^0.23.0": version: 0.23.0 resolution: "tsd@npm:0.23.0" From 3b7ba4062e7fbdc31242f20e2756b49e0af0b56e Mon Sep 17 00:00:00 2001 From: iCrawl Date: Thu, 1 Sep 2022 21:26:09 +0200 Subject: [PATCH 113/155] chore: fix leftover eslint exceptions --- build.config.ts | 17 +++--- .../src/ApiNodeJSONEncoder.ts | 5 +- .../src/tsdoc/CommentNode.ts | 14 ++--- .../__tests__/components/button.test.ts | 6 +-- .../__tests__/components/selectMenu.test.ts | 22 ++++---- .../__tests__/components/textInput.test.ts | 2 +- .../interactions/ContextMenuCommands.test.ts | 4 +- .../SlashCommands/Options.test.ts | 9 ++-- .../SlashCommands/SlashCommands.test.ts | 45 ++++++++-------- .../__tests__/interactions/modal.test.ts | 4 +- .../builders/__tests__/messages/embed.test.ts | 4 +- packages/builders/src/components/ActionRow.ts | 7 ++- .../builders/src/components/Components.ts | 1 - .../builders/src/components/button/Button.ts | 2 +- .../src/components/selectMenu/SelectMenu.ts | 2 +- .../components/selectMenu/SelectMenuOption.ts | 2 +- .../src/components/textInput/TextInput.ts | 2 +- .../contextMenuCommands/Assertions.ts | 2 +- .../builders/src/interactions/modals/Modal.ts | 2 +- .../interactions/slashCommands/Assertions.ts | 6 +-- .../slashCommands/SlashCommandSubcommands.ts | 2 +- packages/builders/src/messages/formatters.ts | 2 - .../collection/__tests__/collection.test.ts | 53 +++++++++---------- packages/collection/src/collection.ts | 7 --- packages/docgen/src/documentation.ts | 4 -- packages/docgen/src/index.ts | 4 +- packages/docgen/src/types/class.ts | 7 +-- packages/docgen/src/types/constructor.ts | 4 +- packages/docgen/src/types/event.ts | 9 +--- packages/docgen/src/types/member.ts | 16 ++---- packages/docgen/src/types/method.ts | 11 +--- packages/docgen/src/types/param.ts | 3 +- packages/docgen/src/types/typedef.ts | 23 +++----- packages/docgen/src/util/parseType.ts | 1 - packages/docgen/src/util/types.ts | 1 - packages/proxy-container/src/index.ts | 1 - .../proxy/__tests__/proxyRequests.test.ts | 1 - .../rest/__tests__/RequestHandler.test.ts | 2 - packages/rest/__tests__/Util.test.ts | 4 +- packages/rest/src/lib/REST.ts | 2 +- packages/rest/src/lib/RequestManager.ts | 7 +-- .../rest/src/lib/errors/DiscordAPIError.ts | 2 - packages/rest/src/lib/handlers/IHandler.ts | 1 - .../src/lib/handlers/SequentialHandler.ts | 4 -- packages/rest/src/lib/utils/constants.ts | 3 +- packages/rest/src/lib/utils/utils.ts | 2 - packages/voice/__tests__/AudioPlayer.test.ts | 5 +- .../voice/__tests__/AudioResource.test.ts | 5 +- packages/voice/__tests__/DataStore.test.ts | 1 - packages/voice/__tests__/SSRCMap.test.ts | 4 +- .../voice/__tests__/VoiceConnection.test.ts | 6 +-- .../voice/__tests__/VoiceReceiver.test.ts | 2 - .../voice/__tests__/VoiceUDPSocket.test.ts | 5 +- .../voice/__tests__/VoiceWebSocket.test.ts | 3 -- packages/voice/__tests__/demuxProbe.test.ts | 9 +--- packages/voice/__tests__/entersState.test.ts | 6 +-- .../voice/__tests__/joinVoiceChannel.test.ts | 1 - packages/voice/examples/recorder/src/bot.ts | 1 - packages/voice/src/DataStore.ts | 2 +- packages/voice/src/VoiceConnection.ts | 2 - packages/voice/src/audio/AudioPlayer.ts | 4 +- packages/voice/src/networking/Networking.ts | 13 ----- .../voice/src/networking/VoiceWebSocket.ts | 3 -- .../voice/src/receive/AudioReceiveStream.ts | 1 - packages/voice/src/receive/VoiceReceiver.ts | 12 ----- packages/voice/src/util/Secretbox.ts | 19 +------ packages/voice/src/util/abortAfter.ts | 1 - .../src/util/generateDependencyReport.ts | 5 -- packages/voice/src/util/util.ts | 1 - .../website/src/components/SidebarItems.tsx | 1 - .../src/components/TableOfContentItems.tsx | 1 - packages/website/src/pages/docs/[...slug].tsx | 5 -- .../pages/docs/packages/[package]/index.tsx | 1 - packages/website/src/util/api-model.server.ts | 4 -- .../strategy/WorkerShardingStrategy.test.ts | 3 -- .../context/WorkerContextFetchingStrategy.ts | 3 +- .../sharding/WorkerShardingStrategy.ts | 8 +-- packages/ws/src/strategies/sharding/worker.ts | 2 - packages/ws/src/utils/constants.ts | 2 - packages/ws/src/ws/WebSocketShard.ts | 1 - 80 files changed, 140 insertions(+), 336 deletions(-) diff --git a/build.config.ts b/build.config.ts index c598305f93fa..5c1d24f864d5 100644 --- a/build.config.ts +++ b/build.config.ts @@ -2,18 +2,18 @@ import { relative, resolve } from 'node:path'; import glob from 'fast-glob'; import isCi from 'is-ci'; import typescript from 'rollup-plugin-typescript2'; -import { defineBuildConfig, BuildEntry } from 'unbuild'; +import { defineBuildConfig, type BuildEntry } from 'unbuild'; interface ConfigOptions { - entries: (BuildEntry | string)[]; - minify: boolean; + cjsBridge: boolean; + declaration: boolean; emitCJS: boolean; + entries: (BuildEntry | string)[]; externals: string[]; - cjsBridge: boolean; - sourcemap: boolean; + minify: boolean; preserveModules: boolean; preserveModulesRoot: string; - declaration: boolean; + sourcemap: boolean; typeCheck: boolean; } @@ -31,8 +31,7 @@ export function createUnbuildConfig({ }: Partial = {}) { const files = glob .sync('**', { cwd: 'src' }) - .map((file) => [`${file.slice(0, -2)}cjs`, `${file.slice(0, -2)}mjs`]) - .flat(); + .flatMap((file) => [`${file.slice(0, -2)}cjs`, `${file.slice(0, -2)}mjs`]); return defineBuildConfig({ entries, @@ -55,7 +54,6 @@ export function createUnbuildConfig({ hooks: { 'rollup:options': (_, options) => { // @ts-expect-error: This will always be an array - // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment options.output![0] = { // @ts-expect-error: This will always be an array ...options.output![0], @@ -66,7 +64,6 @@ export function createUnbuildConfig({ if (emitCJS) { // @ts-expect-error: This will always be an array - // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment options.output![1] = { // @ts-expect-error: This will always be an array ...options.output![1], diff --git a/packages/api-extractor-utils/src/ApiNodeJSONEncoder.ts b/packages/api-extractor-utils/src/ApiNodeJSONEncoder.ts index 8952b41162e8..4cc773cbc017 100644 --- a/packages/api-extractor-utils/src/ApiNodeJSONEncoder.ts +++ b/packages/api-extractor-utils/src/ApiNodeJSONEncoder.ts @@ -20,8 +20,8 @@ import { } from '@microsoft/api-extractor-model'; import { generateTypeParamData } from './TypeParameterJSONEncoder.js'; import { type TokenDocumentation, resolveName, genReference, genToken, genParameter, generatePath } from './parse.js'; -import type { DocBlockJSON } from './tsdoc/CommentBlock'; -import type { AnyDocNodeJSON } from './tsdoc/CommentNode'; +import type { DocBlockJSON } from './tsdoc/CommentBlock.js'; +import type { AnyDocNodeJSON } from './tsdoc/CommentNode.js'; import { type DocNodeContainerJSON, nodeContainer } from './tsdoc/CommentNodeContainer.js'; import { createCommentNode } from './tsdoc/index.js'; @@ -140,7 +140,6 @@ export interface ApiConstructorJSON extends ApiItemJSON, ApiParameterListJSON { protected: boolean; } -// eslint-disable-next-line @typescript-eslint/no-extraneous-class export class ApiNodeJSONEncoder { public static encode(model: ApiModel, node: ApiItem, version: string) { if (!(node instanceof ApiDeclaredItem)) { diff --git a/packages/api-extractor-utils/src/tsdoc/CommentNode.ts b/packages/api-extractor-utils/src/tsdoc/CommentNode.ts index 5542a6bafa70..078b1c652eba 100644 --- a/packages/api-extractor-utils/src/tsdoc/CommentNode.ts +++ b/packages/api-extractor-utils/src/tsdoc/CommentNode.ts @@ -1,11 +1,11 @@ import type { DocNode, DocNodeKind } from '@microsoft/tsdoc'; -import type { DocBlockJSON } from './CommentBlock'; -import type { DocCodeSpanJSON } from './CommentCodeSpan'; -import type { DocNodeContainerJSON } from './CommentNodeContainer'; -import type { DocFencedCodeJSON } from './FencedCodeCommentNode'; -import type { DocLinkTagJSON } from './LinkTagCommentNode'; -import type { DocPlainTextJSON } from './PlainTextCommentNode'; -import type { DocCommentJSON } from './RootComment'; +import type { DocBlockJSON } from './CommentBlock.js'; +import type { DocCodeSpanJSON } from './CommentCodeSpan.js'; +import type { DocNodeContainerJSON } from './CommentNodeContainer.js'; +import type { DocFencedCodeJSON } from './FencedCodeCommentNode.js'; +import type { DocLinkTagJSON } from './LinkTagCommentNode.js'; +import type { DocPlainTextJSON } from './PlainTextCommentNode.js'; +import type { DocCommentJSON } from './RootComment.js'; export interface DocNodeJSON { kind: DocNodeKind; diff --git a/packages/builders/__tests__/components/button.test.ts b/packages/builders/__tests__/components/button.test.ts index 11f34a3cb56f..ca7156fd1809 100644 --- a/packages/builders/__tests__/components/button.test.ts +++ b/packages/builders/__tests__/components/button.test.ts @@ -71,7 +71,7 @@ describe('Button Components', () => { }).toThrowError(); expect(() => { - // @ts-expect-error: invalid emoji + // @ts-expect-error: Invalid emoji const button = buttonComponent().setEmoji('test'); button.toJSON(); }).toThrowError(); @@ -103,9 +103,9 @@ describe('Button Components', () => { expect(() => buttonComponent().setStyle(24)).toThrowError(); expect(() => buttonComponent().setLabel(longStr)).toThrowError(); - // @ts-expect-error: invalid parameter for disabled + // @ts-expect-error: Invalid parameter for disabled expect(() => buttonComponent().setDisabled(0)).toThrowError(); - // @ts-expect-error: invalid emoji + // @ts-expect-error: Invalid emoji expect(() => buttonComponent().setEmoji('foo')).toThrowError(); expect(() => buttonComponent().setURL('foobar')).toThrowError(); diff --git a/packages/builders/__tests__/components/selectMenu.test.ts b/packages/builders/__tests__/components/selectMenu.test.ts index 39a6c0e111ab..c5e10c53ccde 100644 --- a/packages/builders/__tests__/components/selectMenu.test.ts +++ b/packages/builders/__tests__/components/selectMenu.test.ts @@ -98,30 +98,30 @@ describe('Select Menu Components', () => { expect(() => selectMenu().setCustomId(longStr)).toThrowError(); expect(() => selectMenu().setMaxValues(30)).toThrowError(); expect(() => selectMenu().setMinValues(-20)).toThrowError(); - // @ts-expect-error: invalid disabled value + // @ts-expect-error: Invalid disabled value expect(() => selectMenu().setDisabled(0)).toThrowError(); expect(() => selectMenu().setPlaceholder(longStr)).toThrowError(); - // @ts-expect-error: invalid option + // @ts-expect-error: Invalid option expect(() => selectMenu().addOptions({ label: 'test' })).toThrowError(); expect(() => selectMenu().addOptions({ label: longStr, value: 'test' })).toThrowError(); expect(() => selectMenu().addOptions({ value: longStr, label: 'test' })).toThrowError(); expect(() => selectMenu().addOptions({ label: 'test', value: 'test', description: longStr })).toThrowError(); - // @ts-expect-error: invalid option + // @ts-expect-error: Invalid option expect(() => selectMenu().addOptions({ label: 'test', value: 'test', default: 100 })).toThrowError(); - // @ts-expect-error: invalid option + // @ts-expect-error: Invalid option expect(() => selectMenu().addOptions({ value: 'test' })).toThrowError(); - // @ts-expect-error: invalid option + // @ts-expect-error: Invalid option expect(() => selectMenu().addOptions({ default: true })).toThrowError(); - // @ts-expect-error: invalid option + // @ts-expect-error: Invalid option expect(() => selectMenu().addOptions([{ label: 'test' }])).toThrowError(); expect(() => selectMenu().addOptions([{ label: longStr, value: 'test' }])).toThrowError(); expect(() => selectMenu().addOptions([{ value: longStr, label: 'test' }])).toThrowError(); expect(() => selectMenu().addOptions([{ label: 'test', value: 'test', description: longStr }])).toThrowError(); - // @ts-expect-error: invalid option + // @ts-expect-error: Invalid option expect(() => selectMenu().addOptions([{ label: 'test', value: 'test', default: 100 }])).toThrowError(); - // @ts-expect-error: invalid option + // @ts-expect-error: Invalid option expect(() => selectMenu().addOptions([{ value: 'test' }])).toThrowError(); - // @ts-expect-error: invalid option + // @ts-expect-error: Invalid option expect(() => selectMenu().addOptions([{ default: true }])).toThrowError(); const tooManyOptions = Array.from({ length: 26 }).fill({ label: 'test', value: 'test' }); @@ -144,9 +144,9 @@ describe('Select Menu Components', () => { selectMenuOption() .setLabel(longStr) .setValue(longStr) - // @ts-expect-error: invalid default value + // @ts-expect-error: Invalid default value .setDefault(-1) - // @ts-expect-error: invalid emoji + // @ts-expect-error: Invalid emoji .setEmoji({ name: 1 }) .setDescription(longStr); }).toThrowError(); diff --git a/packages/builders/__tests__/components/textInput.test.ts b/packages/builders/__tests__/components/textInput.test.ts index 62b0085f6505..ab09ffe009b4 100644 --- a/packages/builders/__tests__/components/textInput.test.ts +++ b/packages/builders/__tests__/components/textInput.test.ts @@ -85,7 +85,7 @@ describe('Text Input Components', () => { expect(() => { // Issue #8107 - // @ts-expect-error: shapeshift maps the enum key to the value when parsing + // @ts-expect-error: Shapeshift maps the enum key to the value when parsing textInputComponent().setCustomId('Custom').setLabel('Guess').setStyle('Short').toJSON(); }).not.toThrowError(); }); diff --git a/packages/builders/__tests__/interactions/ContextMenuCommands.test.ts b/packages/builders/__tests__/interactions/ContextMenuCommands.test.ts index d2cbe3802788..99716c8863d9 100644 --- a/packages/builders/__tests__/interactions/ContextMenuCommands.test.ts +++ b/packages/builders/__tests__/interactions/ContextMenuCommands.test.ts @@ -105,9 +105,9 @@ describe('Context Menu Commands', () => { }); test('GIVEN invalid name localizations THEN does throw error', () => { - // @ts-expect-error: invalid localization + // @ts-expect-error: Invalid localization expect(() => getBuilder().setNameLocalization('en-U', 'foobar')).toThrowError(); - // @ts-expect-error: invalid localization + // @ts-expect-error: Invalid localization expect(() => getBuilder().setNameLocalizations({ 'en-U': 'foobar' })).toThrowError(); }); diff --git a/packages/builders/__tests__/interactions/SlashCommands/Options.test.ts b/packages/builders/__tests__/interactions/SlashCommands/Options.test.ts index 25875bb6716b..257aba3f6652 100644 --- a/packages/builders/__tests__/interactions/SlashCommands/Options.test.ts +++ b/packages/builders/__tests__/interactions/SlashCommands/Options.test.ts @@ -101,7 +101,8 @@ describe('Application Command toJSON() results', () => { max_value: 10, min_value: -1, autocomplete: true, - // @ts-expect-error TODO: you *can* send an empty array with autocomplete: true, should correct that in types + // TODO + // @ts-expect-error You *can* send an empty array with autocomplete: true, should correct that in types choices: [], }); @@ -145,7 +146,8 @@ describe('Application Command toJSON() results', () => { max_value: 10, min_value: -1.23, autocomplete: true, - // @ts-expect-error TODO: you *can* send an empty array with autocomplete: true, should correct that in types + // TODO + // @ts-expect-error You *can* send an empty array with autocomplete: true, should correct that in types choices: [], }); @@ -187,7 +189,8 @@ describe('Application Command toJSON() results', () => { type: ApplicationCommandOptionType.String, required: true, autocomplete: true, - // @ts-expect-error TODO: you *can* send an empty array with autocomplete: true, should correct that in types + // TODO + // @ts-expect-error you *can* send an empty array with autocomplete: true, should correct that in types choices: [], }); diff --git a/packages/builders/__tests__/interactions/SlashCommands/SlashCommands.test.ts b/packages/builders/__tests__/interactions/SlashCommands/SlashCommands.test.ts index ef03954d5f34..863dc61b1015 100644 --- a/packages/builders/__tests__/interactions/SlashCommands/SlashCommands.test.ts +++ b/packages/builders/__tests__/interactions/SlashCommands/SlashCommands.test.ts @@ -176,7 +176,7 @@ describe('Slash Commands', () => { }); test('GIVEN a builder with invalid autocomplete THEN does throw an error', () => { - // @ts-expect-error Checking if not providing anything, or an invalid return type causes an error + // @ts-expect-error: Checking if not providing anything, or an invalid return type causes an error expect(() => getBuilder().addStringOption(getStringOption().setAutocomplete('not a boolean'))).toThrowError(); }); @@ -246,16 +246,16 @@ describe('Slash Commands', () => { }); test('GIVEN a builder with invalid number min/max options THEN does throw an error', () => { - // @ts-expect-error: invalid max value + // @ts-expect-error: Invalid max value expect(() => getBuilder().addNumberOption(getNumberOption().setMaxValue('test'))).toThrowError(); - // @ts-expect-error: invalid max value + // @ts-expect-error: Invalid max value expect(() => getBuilder().addIntegerOption(getIntegerOption().setMaxValue('test'))).toThrowError(); - // @ts-expect-error: invalid min value + // @ts-expect-error: Invalid min value expect(() => getBuilder().addNumberOption(getNumberOption().setMinValue('test'))).toThrowError(); - // @ts-expect-error: invalid min value + // @ts-expect-error: Invalid min value expect(() => getBuilder().addIntegerOption(getIntegerOption().setMinValue('test'))).toThrowError(); expect(() => getBuilder().addIntegerOption(getIntegerOption().setMinValue(1.5))).toThrowError(); @@ -292,10 +292,10 @@ describe('Slash Commands', () => { }); test('GIVEN no valid return for an addOption method THEN throw error', () => { - // @ts-expect-error Checking if not providing anything, or an invalid return type causes an error + // @ts-expect-error: Checking if not providing anything, or an invalid return type causes an error expect(() => getBuilder().addBooleanOption()).toThrowError(); - // @ts-expect-error Checking if not providing anything, or an invalid return type causes an error + // @ts-expect-error: Checking if not providing anything, or an invalid return type causes an error expect(() => getBuilder().addBooleanOption(getRoleOption())).toThrowError(); }); @@ -316,18 +316,18 @@ describe('Slash Commands', () => { }); test('GIVEN invalid returns for builder THEN throw error', () => { - // @ts-expect-error Checking if not providing anything, or an invalid return type causes an error + // @ts-expect-error: Checking if not providing anything, or an invalid return type causes an error expect(() => getBuilder().addBooleanOption(true)).toThrowError(); - // @ts-expect-error Checking if not providing anything, or an invalid return type causes an error + // @ts-expect-error: Checking if not providing anything, or an invalid return type causes an error expect(() => getBuilder().addBooleanOption(null)).toThrowError(); - // @ts-expect-error Checking if not providing anything, or an invalid return type causes an error + // @ts-expect-error: Checking if not providing anything, or an invalid return type causes an error expect(() => getBuilder().addBooleanOption(undefined)).toThrowError(); - // @ts-expect-error Checking if not providing anything, or an invalid return type causes an error + // @ts-expect-error: Checking if not providing anything, or an invalid return type causes an error expect(() => getBuilder().addBooleanOption(() => SlashCommandStringOption)).toThrowError(); - // @ts-expect-error Checking if not providing anything, or an invalid return type causes an error + // @ts-expect-error: Checking if not providing anything, or an invalid return type causes an error expect(() => getBuilder().addBooleanOption(() => new Collection())).toThrowError(); }); @@ -387,30 +387,29 @@ describe('Slash Commands', () => { test('GIVEN builder with a subcommand that tries to add an invalid result THEN throw error', () => { expect(() => - // @ts-expect-error Checking if check works JS-side too - // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-call + // @ts-expect-error: Checking if check works JS-side too getNamedBuilder().addSubcommand(getSubcommand()).addInteger(getInteger()), ).toThrowError(); }); test('GIVEN no valid return for an addSubcommand(Group) method THEN throw error', () => { - // @ts-expect-error Checking if not providing anything, or an invalid return type causes an error + // @ts-expect-error: Checking if not providing anything, or an invalid return type causes an error expect(() => getBuilder().addSubcommandGroup()).toThrowError(); - // @ts-expect-error Checking if not providing anything, or an invalid return type causes an error + // @ts-expect-error: Checking if not providing anything, or an invalid return type causes an error expect(() => getBuilder().addSubcommand()).toThrowError(); - // @ts-expect-error Checking if not providing anything, or an invalid return type causes an error + // @ts-expect-error: Checking if not providing anything, or an invalid return type causes an error expect(() => getBuilder().addSubcommand(getSubcommandGroup())).toThrowError(); }); }); describe('Subcommand group builder', () => { test('GIVEN no valid subcommand THEN throw error', () => { - // @ts-expect-error Checking if not providing anything, or an invalid return type causes an error + // @ts-expect-error: Checking if not providing anything, or an invalid return type causes an error expect(() => getSubcommandGroup().addSubcommand()).toThrowError(); - // @ts-expect-error Checking if not providing anything, or an invalid return type causes an error + // @ts-expect-error: Checking if not providing anything, or an invalid return type causes an error expect(() => getSubcommandGroup().addSubcommand(getSubcommandGroup())).toThrowError(); }); @@ -442,9 +441,9 @@ describe('Slash Commands', () => { }); test('GIVEN invalid name localizations THEN does throw error', () => { - // @ts-expect-error: invalid localization + // @ts-expect-error: Invalid localization expect(() => getBuilder().setNameLocalization('en-U', 'foobar')).toThrowError(); - // @ts-expect-error: invalid localization + // @ts-expect-error: Invalid localization expect(() => getBuilder().setNameLocalizations({ 'en-U': 'foobar' })).toThrowError(); }); @@ -465,9 +464,9 @@ describe('Slash Commands', () => { }); test('GIVEN invalid description localizations THEN does throw error', () => { - // @ts-expect-error: invalid localization description + // @ts-expect-error: Invalid localization description expect(() => getBuilder().setDescriptionLocalization('en-U', 'foobar')).toThrowError(); - // @ts-expect-error: invalid localization description + // @ts-expect-error: Invalid localization description expect(() => getBuilder().setDescriptionLocalizations({ 'en-U': 'foobar' })).toThrowError(); }); diff --git a/packages/builders/__tests__/interactions/modal.test.ts b/packages/builders/__tests__/interactions/modal.test.ts index 3eaa934ad074..17bdfefb4bf5 100644 --- a/packages/builders/__tests__/interactions/modal.test.ts +++ b/packages/builders/__tests__/interactions/modal.test.ts @@ -46,7 +46,7 @@ describe('Modals', () => { test('GIVEN invalid required parameters THEN validator does throw', () => { expect(() => - // @ts-expect-error: missing required parameter + // @ts-expect-error: Missing required parameter validateRequiredParameters('123', undefined, [new ActionRowBuilder(), new ButtonBuilder()]), ).toThrowError(); }); @@ -66,7 +66,7 @@ describe('Modals', () => { test('GIVEN invalid fields THEN builder does throw', () => { expect(() => modal().setTitle('test').setCustomId('foobar').toJSON()).toThrowError(); - // @ts-expect-error: customId is invalid + // @ts-expect-error: CustomId is invalid expect(() => modal().setTitle('test').setCustomId(42).toJSON()).toThrowError(); }); diff --git a/packages/builders/__tests__/messages/embed.test.ts b/packages/builders/__tests__/messages/embed.test.ts index 0c33255bf0c9..3a0ef27024a9 100644 --- a/packages/builders/__tests__/messages/embed.test.ts +++ b/packages/builders/__tests__/messages/embed.test.ts @@ -130,9 +130,9 @@ describe('Embed', () => { test('GIVEN an embed with an invalid color THEN throws error', () => { const embed = new EmbedBuilder(); - // @ts-expect-error: invalid color + // @ts-expect-error: Invalid color expect(() => embed.setColor('RED')).toThrowError(); - // @ts-expect-error: invalid color + // @ts-expect-error: Invalid color expect(() => embed.setColor([42, 36])).toThrowError(); expect(() => embed.setColor([42, 36, 1_000])).toThrowError(); }); diff --git a/packages/builders/src/components/ActionRow.ts b/packages/builders/src/components/ActionRow.ts index 3a74a21c72be..e328e4664812 100644 --- a/packages/builders/src/components/ActionRow.ts +++ b/packages/builders/src/components/ActionRow.ts @@ -8,9 +8,9 @@ import { import { normalizeArray, type RestOrArray } from '../util/normalizeArray.js'; import { ComponentBuilder } from './Component.js'; import { createComponentBuilder } from './Components.js'; -import type { ButtonBuilder } from './button/Button'; -import type { SelectMenuBuilder } from './selectMenu/SelectMenu'; -import type { TextInputBuilder } from './textInput/TextInput'; +import type { ButtonBuilder } from './button/Button.js'; +import type { SelectMenuBuilder } from './selectMenu/SelectMenu.js'; +import type { TextInputBuilder } from './textInput/TextInput.js'; export type MessageComponentBuilder = | ActionRowBuilder @@ -62,7 +62,6 @@ export class ActionRowBuilder extends ComponentBu * {@inheritDoc ComponentBuilder.toJSON} */ public toJSON(): APIActionRowComponent> { - // eslint-disable-next-line @typescript-eslint/consistent-type-assertions return { ...this.data, components: this.components.map((component) => component.toJSON()), diff --git a/packages/builders/src/components/Components.ts b/packages/builders/src/components/Components.ts index 4c73932f70b7..ea13e013de12 100644 --- a/packages/builders/src/components/Components.ts +++ b/packages/builders/src/components/Components.ts @@ -45,7 +45,6 @@ export function createComponentBuilder( return new TextInputBuilder(data); default: // @ts-expect-error: This case can still occur if we get a newer unsupported component type - // eslint-disable-next-line @typescript-eslint/restrict-template-expressions throw new Error(`Cannot properly serialize component type: ${data.type}`); } } diff --git a/packages/builders/src/components/button/Button.ts b/packages/builders/src/components/button/Button.ts index 4b63002fbc87..7f05c636a529 100644 --- a/packages/builders/src/components/button/Button.ts +++ b/packages/builders/src/components/button/Button.ts @@ -129,7 +129,7 @@ export class ButtonBuilder extends ComponentBuilder { (this.data as APIButtonComponentWithCustomId).custom_id, (this.data as APIButtonComponentWithURL).url, ); - // eslint-disable-next-line @typescript-eslint/consistent-type-assertions + return { ...this.data, } as APIButtonComponent; diff --git a/packages/builders/src/components/selectMenu/SelectMenu.ts b/packages/builders/src/components/selectMenu/SelectMenu.ts index 39fdfb6d688b..a3806ad3aef3 100644 --- a/packages/builders/src/components/selectMenu/SelectMenu.ts +++ b/packages/builders/src/components/selectMenu/SelectMenu.ts @@ -123,7 +123,7 @@ export class SelectMenuBuilder extends ComponentBuilder */ public toJSON(): APISelectMenuComponent { validateRequiredSelectMenuParameters(this.options, this.data.custom_id); - // eslint-disable-next-line @typescript-eslint/consistent-type-assertions + return { ...this.data, options: this.options.map((option) => option.toJSON()), diff --git a/packages/builders/src/components/selectMenu/SelectMenuOption.ts b/packages/builders/src/components/selectMenu/SelectMenuOption.ts index 26edf23dc6a0..2529eeff2143 100644 --- a/packages/builders/src/components/selectMenu/SelectMenuOption.ts +++ b/packages/builders/src/components/selectMenu/SelectMenuOption.ts @@ -68,7 +68,7 @@ export class SelectMenuOptionBuilder implements JSONEncodable component.toJSON()), diff --git a/packages/builders/src/interactions/slashCommands/Assertions.ts b/packages/builders/src/interactions/slashCommands/Assertions.ts index 7a251a616583..586f968a1f70 100644 --- a/packages/builders/src/interactions/slashCommands/Assertions.ts +++ b/packages/builders/src/interactions/slashCommands/Assertions.ts @@ -1,9 +1,9 @@ import { s } from '@sapphire/shapeshift'; import { Locale, type APIApplicationCommandOptionChoice, type LocalizationMap } from 'discord-api-types/v10'; import { isValidationEnabled } from '../../util/validation.js'; -import type { ToAPIApplicationCommandOptions } from './SlashCommandBuilder'; -import type { SlashCommandSubcommandBuilder, SlashCommandSubcommandGroupBuilder } from './SlashCommandSubcommands'; -import type { ApplicationCommandOptionBase } from './mixins/ApplicationCommandOptionBase'; +import type { ToAPIApplicationCommandOptions } from './SlashCommandBuilder.js'; +import type { SlashCommandSubcommandBuilder, SlashCommandSubcommandGroupBuilder } from './SlashCommandSubcommands.js'; +import type { ApplicationCommandOptionBase } from './mixins/ApplicationCommandOptionBase.js'; const namePredicate = s.string .lengthGreaterThanOrEqual(1) diff --git a/packages/builders/src/interactions/slashCommands/SlashCommandSubcommands.ts b/packages/builders/src/interactions/slashCommands/SlashCommandSubcommands.ts index 22550b26347e..e9b540448d65 100644 --- a/packages/builders/src/interactions/slashCommands/SlashCommandSubcommands.ts +++ b/packages/builders/src/interactions/slashCommands/SlashCommandSubcommands.ts @@ -6,7 +6,7 @@ import { import { mix } from 'ts-mixer'; import { assertReturnOfBuilder, validateMaxOptionsLength, validateRequiredParameters } from './Assertions.js'; import type { ToAPIApplicationCommandOptions } from './SlashCommandBuilder.js'; -import type { ApplicationCommandOptionBase } from './mixins/ApplicationCommandOptionBase'; +import type { ApplicationCommandOptionBase } from './mixins/ApplicationCommandOptionBase.js'; import { SharedNameAndDescription } from './mixins/NameAndDescription.js'; import { SharedSlashCommandOptions } from './mixins/SharedSlashCommandOptions.js'; diff --git a/packages/builders/src/messages/formatters.ts b/packages/builders/src/messages/formatters.ts index 9396d36cfbba..2bbd50dd7e86 100644 --- a/packages/builders/src/messages/formatters.ts +++ b/packages/builders/src/messages/formatters.ts @@ -96,7 +96,6 @@ export function hideLinkEmbed(url: C): `<${C}>`; */ export function hideLinkEmbed(url: URL): `<${string}>`; export function hideLinkEmbed(url: URL | string) { - // eslint-disable-next-line @typescript-eslint/restrict-template-expressions return `<${url}>`; } @@ -142,7 +141,6 @@ export function hyperlink( title: T, ): `[${C}](${U} "${T}")`; export function hyperlink(content: string, url: URL | string, title?: string) { - // eslint-disable-next-line @typescript-eslint/restrict-template-expressions return title ? `[${content}](${url} "${title}")` : `[${content}](${url})`; } diff --git a/packages/collection/__tests__/collection.test.ts b/packages/collection/__tests__/collection.test.ts index 1ea89164f8b4..b2d01213f096 100644 --- a/packages/collection/__tests__/collection.test.ts +++ b/packages/collection/__tests__/collection.test.ts @@ -20,7 +20,6 @@ function createTestCollection(): TestCollection { function expectInvalidFunctionError(cb: () => unknown, val?: unknown): void { expect(() => { cb(); - // eslint-disable-next-line @typescript-eslint/restrict-template-expressions }).toThrowError(new TypeError(`${val} is not a function`)); } @@ -133,9 +132,9 @@ describe('each() tests', () => { const coll = createTestCollection(); test('throws if fn is not a function', () => { - // @ts-expect-error: invalid function + // @ts-expect-error: Invalid function expectInvalidFunctionError(() => coll.each()); - // @ts-expect-error: invalid function + // @ts-expect-error: Invalid function expectInvalidFunctionError(() => coll.each(123), 123); }); @@ -154,7 +153,7 @@ describe('each() tests', () => { describe('ensure() tests', () => { test('throws if defaultValueGenerator is not a function', () => { const coll = createTestCollection(); - // @ts-expect-error: invalid function + // @ts-expect-error: Invalid function expectInvalidFunctionError(() => coll.ensure('d', 'abc'), 'abc'); }); @@ -178,7 +177,7 @@ describe('equals() tests', () => { const coll2 = createTestCollection(); test('returns false if no collection is passed', () => { - // @ts-expect-error: invalid function + // @ts-expect-error: Invalid function expect(coll1.equals()).toBeFalsy(); }); @@ -200,9 +199,9 @@ describe('every() tests', () => { const coll = createTestCollection(); test('throws if fn is not a function', () => { - // @ts-expect-error: invalid function + // @ts-expect-error: Invalid function expectInvalidFunctionError(() => coll.every()); - // @ts-expect-error: invalid function + // @ts-expect-error: Invalid function expectInvalidFunctionError(() => coll.every(123), 123); }); @@ -226,9 +225,9 @@ describe('filter() tests', () => { const coll = createTestCollection(); test('throws if fn is not a function', () => { - // @ts-expect-error: invalid function + // @ts-expect-error: Invalid function expectInvalidFunctionError(() => coll.filter()); - // @ts-expect-error: invalid function + // @ts-expect-error: Invalid function expectInvalidFunctionError(() => coll.filter(123), 123); }); @@ -253,9 +252,9 @@ describe('find() tests', () => { const coll = createTestCollection(); test('throws if fn is not a function', () => { - // @ts-expect-error: invalid function + // @ts-expect-error: Invalid function expectInvalidFunctionError(() => createCollection().find()); - // @ts-expect-error: invalid function + // @ts-expect-error: Invalid function expectInvalidFunctionError(() => createCollection().find(123), 123); }); @@ -277,9 +276,9 @@ describe('findKey() tests', () => { const coll = createTestCollection(); test('throws if fn is not a function', () => { - // @ts-expect-error: invalid function + // @ts-expect-error: Invalid function expectInvalidFunctionError(() => coll.findKey()); - // @ts-expect-error: invalid function + // @ts-expect-error: Invalid function expectInvalidFunctionError(() => coll.findKey(123), 123); }); @@ -508,9 +507,9 @@ describe('map() tests', () => { const coll = createTestCollection(); test('throws if fn is not a function', () => { - // @ts-expect-error: invalid function + // @ts-expect-error: Invalid function expectInvalidFunctionError(() => coll.map()); - // @ts-expect-error: invalid function + // @ts-expect-error: Invalid function expectInvalidFunctionError(() => coll.map(123), 123); }); @@ -531,9 +530,9 @@ describe('mapValues() tests', () => { const coll = createTestCollection(); test('throws if fn is not a function', () => { - // @ts-expect-error: invalid function + // @ts-expect-error: Invalid function expectInvalidFunctionError(() => coll.mapValues()); - // @ts-expect-error: invalid function + // @ts-expect-error: Invalid function expectInvalidFunctionError(() => coll.mapValues(123), 123); }); @@ -608,9 +607,9 @@ describe('partition() tests', () => { const coll = createTestCollection(); test('throws if fn is not a function', () => { - // @ts-expect-error: invalid function + // @ts-expect-error: Invalid function expectInvalidFunctionError(() => coll.partition()); - // @ts-expect-error: invalid function + // @ts-expect-error: Invalid function expectInvalidFunctionError(() => coll.partition(123), 123); }); @@ -692,9 +691,9 @@ describe('reduce() tests', () => { const coll = createTestCollection(); test('throws if fn is not a function', () => { - // @ts-expect-error: invalid function + // @ts-expect-error: Invalid function expectInvalidFunctionError(() => coll.reduce()); - // @ts-expect-error: invalid function + // @ts-expect-error: Invalid function expectInvalidFunctionError(() => coll.reduce(123), 123); }); @@ -731,9 +730,9 @@ describe('some() tests', () => { const coll = createTestCollection(); test('throws if fn is not a function', () => { - // @ts-expect-error: invalid function + // @ts-expect-error: Invalid function expectInvalidFunctionError(() => coll.some()); - // @ts-expect-error: invalid function + // @ts-expect-error: Invalid function expectInvalidFunctionError(() => coll.some(123), 123); }); @@ -775,9 +774,9 @@ describe('sweep() test', () => { const coll = createTestCollection(); test('throws if fn is not a function', () => { - // @ts-expect-error: invalid function + // @ts-expect-error: Invalid function expectInvalidFunctionError(() => coll.sweep()); - // @ts-expect-error: invalid function + // @ts-expect-error: Invalid function expectInvalidFunctionError(() => coll.sweep(123), 123); }); @@ -802,9 +801,9 @@ describe('tap() tests', () => { const coll = createTestCollection(); test('throws if fn is not a function', () => { - // @ts-expect-error: invalid function + // @ts-expect-error: Invalid function expectInvalidFunctionError(() => coll.tap()); - // @ts-expect-error: invalid function + // @ts-expect-error: Invalid function expectInvalidFunctionError(() => coll.tap(123), 123); }); diff --git a/packages/collection/src/collection.ts b/packages/collection/src/collection.ts index edd837bebe2d..4f67ddde2cd3 100644 --- a/packages/collection/src/collection.ts +++ b/packages/collection/src/collection.ts @@ -85,12 +85,10 @@ export class Collection extends Map { public first(): V | undefined; public first(amount: number): V[]; public first(amount?: number): V | V[] | undefined { - // eslint-disable-next-line @typescript-eslint/no-unsafe-return if (typeof amount === 'undefined') return this.values().next().value; if (amount < 0) return this.last(amount * -1); amount = Math.min(this.size, amount); const iter = this.values(); - // eslint-disable-next-line @typescript-eslint/no-unsafe-return return Array.from({ length: amount }, (): V => iter.next().value); } @@ -104,12 +102,10 @@ export class Collection extends Map { public firstKey(): K | undefined; public firstKey(amount: number): K[]; public firstKey(amount?: number): K | K[] | undefined { - // eslint-disable-next-line @typescript-eslint/no-unsafe-return if (typeof amount === 'undefined') return this.keys().next().value; if (amount < 0) return this.lastKey(amount * -1); amount = Math.min(this.size, amount); const iter = this.keys(); - // eslint-disable-next-line @typescript-eslint/no-unsafe-return return Array.from({ length: amount }, (): K => iter.next().value); } @@ -426,9 +422,7 @@ export class Collection extends Map { if (typeof thisArg !== 'undefined') fn = fn.bind(thisArg); const iter = this.entries(); return Array.from({ length: this.size }, (): T => { - // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment const [key, value] = iter.next().value; - // eslint-disable-next-line @typescript-eslint/no-unsafe-argument return fn(value, key, this); }); } @@ -636,7 +630,6 @@ export class Collection extends Map { * @returns Whether the collections have identical contents */ public equals(collection: ReadonlyCollection) { - // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition if (!collection) return false; // runtime check if (this === collection) return true; if (this.size !== collection.size) return false; diff --git a/packages/docgen/src/documentation.ts b/packages/docgen/src/documentation.ts index 7b4830064062..2c27601fdb1b 100644 --- a/packages/docgen/src/documentation.ts +++ b/packages/docgen/src/documentation.ts @@ -123,7 +123,6 @@ export class Documentation { case 'Method': { const event = prop?.groups?.find((group) => group.title === 'Events'); - // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition if ((event?.children as unknown as number[])?.includes(member.id)) { item = new DocumentedEvent(member, this.config); break; @@ -139,7 +138,6 @@ export class Documentation { } default: { - // eslint-disable-next-line @typescript-eslint/restrict-template-expressions console.warn(`- Unknown documentation kind "${member.kindString}" - \n${JSON.stringify(member)}\n`); } } @@ -212,7 +210,6 @@ export class Documentation { default: { // @ts-expect-error: This is a valid case - // eslint-disable-next-line @typescript-eslint/restrict-template-expressions console.warn(`- Unknown documentation kind "${member.kind}" - \n${JSON.stringify(member)}\n`); } } @@ -233,7 +230,6 @@ export class Documentation { const info = []; const name = (member.name || item?.data.name) ?? 'UNKNOWN'; // @ts-expect-error: Typescript can't infer this - // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unnecessary-condition const memberof = member.memberof ?? item?.data?.memberof; const meta = member.kind === 'constructor' diff --git a/packages/docgen/src/index.ts b/packages/docgen/src/index.ts index de35a5009f7f..a301a9961f67 100644 --- a/packages/docgen/src/index.ts +++ b/packages/docgen/src/index.ts @@ -2,9 +2,9 @@ import { readFileSync, writeFileSync } from 'node:fs'; import { dirname, join, extname, basename, relative } from 'node:path'; import jsdoc2md from 'jsdoc-to-markdown'; import { type DeclarationReflection, Application, TSConfigReader } from 'typedoc'; -import type { CLIOptions } from './cli'; +import type { CLIOptions } from './cli.js'; import { Documentation } from './documentation.js'; -import type { RootTypes, ChildTypes, CustomDocs } from './interfaces'; +import type { RootTypes, ChildTypes, CustomDocs } from './interfaces/index.js'; interface CustomFiles { files: { diff --git a/packages/docgen/src/types/class.ts b/packages/docgen/src/types/class.ts index 0a2aa0eb8e58..ca2dbcb14d89 100644 --- a/packages/docgen/src/types/class.ts +++ b/packages/docgen/src/types/class.ts @@ -58,7 +58,6 @@ export class DocumentedClass extends DocumentedItem block.tag === '@see').length ? signature.comment.blockTags .filter((block) => block.tag === '@see') @@ -100,7 +98,6 @@ export class DocumentedClass extends DocumentedItem (prev += curr.text), '').trim() || undefined, @@ -109,13 +106,11 @@ export class DocumentedClass extends DocumentedItem block.tag === '@private' || block.tag === '@internal') ? 'private' : undefined, - // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing, @typescript-eslint/no-unnecessary-condition + // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing abstract: signature.comment?.blockTags?.some((block) => block.tag === '@abstract') || undefined, - // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition deprecated: signature.comment?.blockTags?.some((block) => block.tag === '@deprecated') ? signature.comment.blockTags .find((block) => block.tag === '@deprecated') diff --git a/packages/docgen/src/types/constructor.ts b/packages/docgen/src/types/constructor.ts index c88ab68b1717..e046cf6c5d3a 100644 --- a/packages/docgen/src/types/constructor.ts +++ b/packages/docgen/src/types/constructor.ts @@ -9,7 +9,6 @@ export class DocumentedConstructor extends DocumentedItem block.tag === '@see').length ? signature.comment.blockTags .filter((block) => block.tag === '@see') @@ -18,12 +17,11 @@ export class DocumentedConstructor extends DocumentedItem (prev += curr.text), '').trim() || undefined, see, access: data.flags.isPrivate || - // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition signature.comment?.blockTags?.some((block) => block.tag === '@private' || block.tag === '@internal') ? 'private' : undefined, diff --git a/packages/docgen/src/types/event.ts b/packages/docgen/src/types/event.ts index 6af0b050ee02..a72db11b93fb 100644 --- a/packages/docgen/src/types/event.ts +++ b/packages/docgen/src/types/event.ts @@ -18,14 +18,12 @@ export class DocumentedEvent extends DocumentedItem block.tag === '@see').length ? signature.comment.blockTags .filter((block) => block.tag === '@see') .map((block) => block.content.find((contentText) => contentText.kind === 'text')?.text.trim()) : undefined; - // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition const examples = signature.comment?.blockTags?.filter((block) => block.tag === '@example').length ? signature.comment.blockTags .filter((block) => block.tag === '@example') @@ -35,19 +33,16 @@ export class DocumentedEvent extends DocumentedItem (prev += curr.text), '').trim() || undefined, see, access: data.flags.isPrivate || - // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition signature.comment?.blockTags?.some((block) => block.tag === '@private' || block.tag === '@internal') ? 'private' : undefined, examples, - // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition deprecated: signature.comment?.blockTags?.some((block) => block.tag === '@deprecated') ? signature.comment.blockTags .find((block) => block.tag === '@deprecated') @@ -68,7 +63,6 @@ export class DocumentedEvent extends DocumentedItem block.tag === '@returns') // eslint-disable-next-line no-param-reassign ?.content.reduce((prev, curr) => (prev += curr.text), '') @@ -81,7 +75,6 @@ export class DocumentedEvent extends DocumentedItem block.tag === '@returns') // eslint-disable-next-line no-param-reassign ?.content.reduce((prev, curr) => (prev += curr.text), '') diff --git a/packages/docgen/src/types/member.ts b/packages/docgen/src/types/member.ts index d25dbf3a301e..581ce6bb89d0 100644 --- a/packages/docgen/src/types/member.ts +++ b/packages/docgen/src/types/member.ts @@ -18,7 +18,6 @@ export class DocumentedMember extends DocumentedItem block.tag === '@see').length ? signature.comment.blockTags .filter((block) => block.tag === '@see') @@ -27,20 +26,18 @@ export class DocumentedMember extends DocumentedItem (prev += curr.text), '').trim() || undefined, see, scope: data.flags.isStatic ? 'static' : undefined, access: data.flags.isPrivate || - // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition signature.comment?.blockTags?.some((block) => block.tag === '@private' || block.tag === '@internal') ? 'private' : undefined, readonly: data.flags.isReadonly, - // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition, @typescript-eslint/prefer-nullish-coalescing + // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing abstract: signature.comment?.blockTags?.some((block) => block.tag === '@abstract') || undefined, - // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition deprecated: signature.comment?.blockTags?.some((block) => block.tag === '@deprecated') ? signature.comment.blockTags .find((block) => block.tag === '@deprecated') @@ -51,7 +48,6 @@ export class DocumentedMember extends DocumentedItem block.tag === '@default') // eslint-disable-next-line no-param-reassign ?.content.reduce((prev, curr) => (prev += curr.text), '') @@ -76,7 +72,6 @@ export class DocumentedMember extends DocumentedItem block.tag === '@see').length ? getter.comment.blockTags .filter((block) => block.tag === '@see') @@ -85,19 +80,17 @@ export class DocumentedMember extends DocumentedItem (prev += curr.text), '').trim() || undefined, see, access: data.flags.isPrivate || - // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition getter.comment?.blockTags?.some((block) => block.tag === '@private' || block.tag === '@internal') ? 'private' : undefined, readonly: base.readonly || !hasSetter, - // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition, @typescript-eslint/prefer-nullish-coalescing + // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing abstract: getter.comment?.blockTags?.some((block) => block.tag === '@abstract') || undefined, - // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition deprecated: getter.comment?.blockTags?.some((block) => block.tag === '@deprecated') ? getter.comment.blockTags .find((block) => block.tag === '@deprecated') @@ -108,7 +101,6 @@ export class DocumentedMember extends DocumentedItem block.tag === '@default') // eslint-disable-next-line no-param-reassign ?.content.reduce((prev, curr) => (prev += curr.text), '') diff --git a/packages/docgen/src/types/method.ts b/packages/docgen/src/types/method.ts index cd20ab90c24a..013e22fdee6f 100644 --- a/packages/docgen/src/types/method.ts +++ b/packages/docgen/src/types/method.ts @@ -18,14 +18,12 @@ export class DocumentedMethod extends DocumentedItem block.tag === '@see').length ? signature.comment.blockTags .filter((block) => block.tag === '@see') .map((block) => block.content.find((innerContent) => innerContent.kind === 'text')?.text.trim()) : undefined; - // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition const examples = signature.comment?.blockTags?.filter((block) => block.tag === '@example').length ? signature.comment.blockTags .filter((block) => block.tag === '@example') @@ -35,20 +33,18 @@ export class DocumentedMethod extends DocumentedItem (prev += curr.text), '').trim() || undefined, see, scope: data.flags.isStatic ? 'static' : undefined, access: data.flags.isPrivate || - // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition signature.comment?.blockTags?.some((block) => block.tag === '@private' || block.tag === '@internal') ? 'private' : undefined, examples, - // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition, @typescript-eslint/prefer-nullish-coalescing + // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing abstract: signature.comment?.blockTags?.some((block) => block.tag === '@abstract') || undefined, - // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition deprecated: signature.comment?.blockTags?.some((block) => block.tag === '@deprecated') ? signature.comment.blockTags .find((block) => block.tag === '@deprecated') @@ -56,7 +52,6 @@ export class DocumentedMethod extends DocumentedItem (prev += curr.text), '') .trim() ?? true : undefined, - // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition // emits: signature.comment?.blockTags?.filter((t) => t.tag === '@emits').map((t) => t.content), // @ts-expect-error: Typescript doesn't know that this is a SignatureReflection params: signature.parameters @@ -71,7 +66,6 @@ export class DocumentedMethod extends DocumentedItem block.tag === '@returns') // eslint-disable-next-line no-param-reassign ?.content.reduce((prev, curr) => (prev += curr.text), '') @@ -84,7 +78,6 @@ export class DocumentedMethod extends DocumentedItem block.tag === '@returns') // eslint-disable-next-line no-param-reassign ?.content.reduce((prev, curr) => (prev += curr.text), '') diff --git a/packages/docgen/src/types/param.ts b/packages/docgen/src/types/param.ts index 9d4bfa36d3c3..8c64148cc777 100644 --- a/packages/docgen/src/types/param.ts +++ b/packages/docgen/src/types/param.ts @@ -11,13 +11,12 @@ export class DocumentedParam extends DocumentedItem return { name: data.name, - // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition, @typescript-eslint/prefer-nullish-coalescing, no-param-reassign + // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing, no-param-reassign description: data.comment?.summary?.reduce((prev, curr) => (prev += curr.text), '').trim() || undefined, optional: data.flags.isOptional || typeof data.defaultValue !== 'undefined', default: (data.defaultValue === '...' ? undefined : data.defaultValue) ?? (data.comment?.blockTags - // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition ?.find((block) => block.tag === '@default') // eslint-disable-next-line no-param-reassign ?.content.reduce((prev, curr) => (prev += curr.text), '') diff --git a/packages/docgen/src/types/typedef.ts b/packages/docgen/src/types/typedef.ts index 17df02874473..e41f9871e318 100644 --- a/packages/docgen/src/types/typedef.ts +++ b/packages/docgen/src/types/typedef.ts @@ -19,7 +19,6 @@ export class DocumentedTypeDef extends DocumentedItem block.tag === '@see').length ? signature.comment.blockTags .filter((block) => block.tag === '@see') @@ -28,16 +27,14 @@ export class DocumentedTypeDef extends DocumentedItem (prev += curr.text), '').trim() || undefined, see, access: data.flags.isPrivate || - // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition signature.comment?.blockTags?.some((block) => block.tag === '@private' || block.tag === '@internal') ? 'private' : undefined, - // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition deprecated: signature.comment?.blockTags?.some((block) => block.tag === '@deprecated') ? signature.comment.blockTags .find((block) => block.tag === '@deprecated') @@ -64,7 +61,7 @@ export class DocumentedTypeDef extends DocumentedItem (prev += curr.text), '') // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing .trim() || undefined, @@ -82,18 +79,17 @@ export class DocumentedTypeDef extends DocumentedItem (prev += curr.text), '') // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing .trim() || - // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition, @typescript-eslint/prefer-nullish-coalescing, no-param-reassign + // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing, no-param-reassign child.signatures?.[0]?.comment?.summary?.reduce((prev, curr) => (prev += curr.text), '').trim() || undefined, optional: child.flags.isOptional || typeof child.defaultValue !== 'undefined', default: (child.defaultValue === '...' ? undefined : child.defaultValue) ?? (child.comment?.blockTags - // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition ?.find((block) => block.tag === '@default') // eslint-disable-next-line no-param-reassign ?.content.reduce((prev, curr) => (prev += curr.text), '') @@ -112,7 +108,6 @@ export class DocumentedTypeDef extends DocumentedItem block.tag === '@returns') // eslint-disable-next-line no-param-reassign ?.content.reduce((prev, curr) => (prev += curr.text), '') @@ -134,13 +129,12 @@ export class DocumentedTypeDef extends DocumentedItem ({ name: param.name, - // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition, @typescript-eslint/prefer-nullish-coalescing, no-param-reassign + // eslint-disable-next-line @typescript-eslint/prefer-nullish-coalescing, no-param-reassign description: param.comment?.summary?.reduce((prev, curr) => (prev += curr.text), '').trim() || undefined, optional: param.flags.isOptional || typeof param.defaultValue !== 'undefined', default: (param.defaultValue === '...' ? undefined : param.defaultValue) ?? (param.comment?.blockTags - // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition ?.find((block) => block.tag === '@default') // eslint-disable-next-line no-param-reassign ?.content.reduce((prev, curr) => (prev += curr.text), '') @@ -152,7 +146,6 @@ export class DocumentedTypeDef extends DocumentedItem block.tag === '@see').length ? sig.comment.blockTags .filter((block) => block.tag === '@see') @@ -161,16 +154,14 @@ export class DocumentedTypeDef extends DocumentedItem (prev += curr.text), '').trim() || undefined, see, access: sig?.flags.isPrivate || - // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition sig?.comment?.blockTags?.some((block) => block.tag === '@private' || block.tag === '@internal') ? 'private' : undefined, - // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition deprecated: sig?.comment?.blockTags?.some((block) => block.tag === '@deprecated') ? sig.comment.blockTags .find((block) => block.tag === '@deprecated') @@ -186,7 +177,6 @@ export class DocumentedTypeDef extends DocumentedItem block.tag === '@returns') // eslint-disable-next-line no-param-reassign ?.content.reduce((prev, curr) => (prev += curr.text), '') @@ -199,7 +189,6 @@ export class DocumentedTypeDef extends DocumentedItem block.tag === '@returns') // eslint-disable-next-line no-param-reassign ?.content.reduce((prev, curr) => (prev += curr.text), '') diff --git a/packages/docgen/src/util/parseType.ts b/packages/docgen/src/util/parseType.ts index 06f7c17b5e74..d48b07831e35 100644 --- a/packages/docgen/src/util/parseType.ts +++ b/packages/docgen/src/util/parseType.ts @@ -91,7 +91,6 @@ export function parseType(someType: JSONOutput.SomeType | JSONOutput.Type | stri return `'${someType.value}'`; } - // eslint-disable-next-line @typescript-eslint/restrict-template-expressions return `${someType.value}`; } diff --git a/packages/docgen/src/util/types.ts b/packages/docgen/src/util/types.ts index b2270fcb4031..89154111bfca 100644 --- a/packages/docgen/src/util/types.ts +++ b/packages/docgen/src/util/types.ts @@ -1,4 +1,3 @@ -/* eslint-disable @typescript-eslint/no-unsafe-member-access */ import type { JSONOutput } from 'typedoc'; interface QueryType { diff --git a/packages/proxy-container/src/index.ts b/packages/proxy-container/src/index.ts index 48284a8c1c44..dff6f964e1a4 100644 --- a/packages/proxy-container/src/index.ts +++ b/packages/proxy-container/src/index.ts @@ -9,7 +9,6 @@ if (!process.env.DISCORD_TOKEN) { // We want to let upstream handle retrying const api = new REST({ rejectOnRateLimit: () => true, retries: 0 }).setToken(process.env.DISCORD_TOKEN); -// eslint-disable-next-line @typescript-eslint/no-misused-promises const server = createServer(proxyRequests(api)); const port = Number.parseInt(process.env.PORT ?? '8080', 10); diff --git a/packages/proxy/__tests__/proxyRequests.test.ts b/packages/proxy/__tests__/proxyRequests.test.ts index f956958be8b5..6069fda2bdb5 100644 --- a/packages/proxy/__tests__/proxyRequests.test.ts +++ b/packages/proxy/__tests__/proxyRequests.test.ts @@ -16,7 +16,6 @@ const responseOptions: MockInterceptor.MockResponseOptions = { }; const api = new REST().setToken('A-Very-Fake-Token'); -// eslint-disable-next-line @typescript-eslint/no-misused-promises const server = createServer(proxyRequests(api)); beforeEach(() => { diff --git a/packages/rest/__tests__/RequestHandler.test.ts b/packages/rest/__tests__/RequestHandler.test.ts index 2bd7330a587a..6c846d6f1758 100644 --- a/packages/rest/__tests__/RequestHandler.test.ts +++ b/packages/rest/__tests__/RequestHandler.test.ts @@ -58,7 +58,6 @@ const sublimit = { body: { name: 'newname' } }; const noSublimit = { body: { bitrate: 40_000 } }; function startSublimitIntervals() { - // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition if (!sublimitIntervals.reset) { sublimitResetAfter = Date.now() + 250; sublimitIntervals.reset = setInterval(() => { @@ -67,7 +66,6 @@ function startSublimitIntervals() { }, 250); } - // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition if (!sublimitIntervals.retry) { retryAfter = Date.now() + 1_000; sublimitIntervals.retry = setInterval(() => { diff --git a/packages/rest/__tests__/Util.test.ts b/packages/rest/__tests__/Util.test.ts index 76504b974962..ad4cbb5c74b2 100644 --- a/packages/rest/__tests__/Util.test.ts +++ b/packages/rest/__tests__/Util.test.ts @@ -62,7 +62,7 @@ test('resolveBody', async () => { }; await expect(resolveBody(asyncIterable)).resolves.toStrictEqual(Buffer.from([1, 2, 3, 1, 2, 3, 1, 2, 3])); - // unknown type - // @ts-expect-error This test is ensuring that this throws + // Unknown type + // @ts-expect-error: This test is ensuring that this throws await expect(resolveBody(true)).rejects.toThrow(TypeError); }); diff --git a/packages/rest/src/lib/REST.ts b/packages/rest/src/lib/REST.ts index 7b2a1afd4060..d4bd5f5b75fc 100644 --- a/packages/rest/src/lib/REST.ts +++ b/packages/rest/src/lib/REST.ts @@ -11,7 +11,7 @@ import { type RequestData, type RouteLike, } from './RequestManager.js'; -import type { IHandler } from './handlers/IHandler'; +import type { IHandler } from './handlers/IHandler.js'; import { DefaultRestOptions, RESTEvents } from './utils/constants.js'; import { parseResponse } from './utils/utils.js'; diff --git a/packages/rest/src/lib/RequestManager.ts b/packages/rest/src/lib/RequestManager.ts index 594ad128df40..10a30bb5aa7c 100644 --- a/packages/rest/src/lib/RequestManager.ts +++ b/packages/rest/src/lib/RequestManager.ts @@ -5,8 +5,8 @@ import type { URLSearchParams } from 'node:url'; import { Collection } from '@discordjs/collection'; import { DiscordSnowflake } from '@sapphire/snowflake'; import { FormData, type RequestInit, type BodyInit, type Dispatcher, type Agent } from 'undici'; -import type { RESTOptions, RestEvents, RequestOptions } from './REST'; -import type { IHandler } from './handlers/IHandler'; +import type { RESTOptions, RestEvents, RequestOptions } from './REST.js'; +import type { IHandler } from './handlers/IHandler.js'; import { SequentialHandler } from './handlers/SequentialHandler.js'; import { DefaultRestOptions, DefaultUserAgent, RESTEvents } from './utils/constants.js'; import { resolveBody } from './utils/utils.js'; @@ -208,7 +208,6 @@ export class RequestManager extends EventEmitter { */ public readonly handlers = new Collection(); - // eslint-disable-next-line @typescript-eslint/explicit-member-accessibility #token: string | null = null; private hashTimer!: NodeJS.Timer; @@ -422,7 +421,6 @@ export class RequestManager extends EventEmitter { const contentType = file.contentType ?? (await fileTypeFromBuffer(file.data))?.mime; formData.append(fileKey, new Blob([file.data], { type: contentType }), file.name); } else { - // eslint-disable-next-line @typescript-eslint/restrict-template-expressions formData.append(fileKey, new Blob([`${file.data}`], { type: file.contentType }), file.name); } } @@ -457,7 +455,6 @@ export class RequestManager extends EventEmitter { finalBody = await resolveBody(finalBody); const fetchOptions: RequestOptions = { - // eslint-disable-next-line @typescript-eslint/consistent-type-assertions headers: { ...request.headers, ...additionalHeaders, ...headers } as Record, method: request.method.toUpperCase() as Dispatcher.HttpMethod, }; diff --git a/packages/rest/src/lib/errors/DiscordAPIError.ts b/packages/rest/src/lib/errors/DiscordAPIError.ts index 54341f3add00..9f03cbf3c6e6 100644 --- a/packages/rest/src/lib/errors/DiscordAPIError.ts +++ b/packages/rest/src/lib/errors/DiscordAPIError.ts @@ -101,13 +101,11 @@ export class DiscordAPIError extends Error { if (typeof val === 'string') { yield val; - // eslint-disable-next-line @typescript-eslint/no-unsafe-argument } else if (isErrorGroupWrapper(val)) { for (const error of val._errors) { yield* this.flattenDiscordError(error, nextKey); } } else { - // eslint-disable-next-line @typescript-eslint/no-unsafe-argument yield* this.flattenDiscordError(val, nextKey); } } diff --git a/packages/rest/src/lib/handlers/IHandler.ts b/packages/rest/src/lib/handlers/IHandler.ts index 8471829f5443..d1c0b6c110e9 100644 --- a/packages/rest/src/lib/handlers/IHandler.ts +++ b/packages/rest/src/lib/handlers/IHandler.ts @@ -10,7 +10,6 @@ export interface IHandler { /** * If the bucket is currently inactive (no pending requests) */ - // eslint-disable-next-line @typescript-eslint/method-signature-style -- This is meant to be a getter returning a bool get inactive(): boolean; /** * Queues a request to be sent diff --git a/packages/rest/src/lib/handlers/SequentialHandler.ts b/packages/rest/src/lib/handlers/SequentialHandler.ts index bb5447ea0e10..fa432f672038 100644 --- a/packages/rest/src/lib/handlers/SequentialHandler.ts +++ b/packages/rest/src/lib/handlers/SequentialHandler.ts @@ -53,25 +53,21 @@ export class SequentialHandler implements IHandler { /** * The interface used to sequence async requests sequentially */ - // eslint-disable-next-line @typescript-eslint/explicit-member-accessibility #asyncQueue = new AsyncQueue(); /** * The interface used to sequence sublimited async requests sequentially */ - // eslint-disable-next-line @typescript-eslint/explicit-member-accessibility #sublimitedQueue: AsyncQueue | null = null; /** * A promise wrapper for when the sublimited queue is finished being processed or null when not being processed */ - // eslint-disable-next-line @typescript-eslint/explicit-member-accessibility #sublimitPromise: { promise: Promise; resolve(): void } | null = null; /** * Whether the sublimit queue needs to be shifted in the finally block */ - // eslint-disable-next-line @typescript-eslint/explicit-member-accessibility #shiftSublimit = false; /** diff --git a/packages/rest/src/lib/utils/constants.ts b/packages/rest/src/lib/utils/constants.ts index 2c5106572b2a..296016370e2c 100644 --- a/packages/rest/src/lib/utils/constants.ts +++ b/packages/rest/src/lib/utils/constants.ts @@ -2,10 +2,9 @@ import process from 'node:process'; import { APIVersion } from 'discord-api-types/v10'; import { getGlobalDispatcher } from 'undici'; import type { RESTOptions } from '../REST.js'; -// eslint-disable-next-line @typescript-eslint/no-var-requires, @typescript-eslint/no-require-imports, @typescript-eslint/no-unsafe-assignment +// eslint-disable-next-line @typescript-eslint/no-var-requires, @typescript-eslint/no-require-imports const Package = require('../../../package.json'); -// eslint-disable-next-line @typescript-eslint/restrict-template-expressions, @typescript-eslint/no-unsafe-member-access export const DefaultUserAgent = `DiscordBot (${Package.homepage}, ${Package.version})`; export const DefaultRestOptions: Required = { diff --git a/packages/rest/src/lib/utils/utils.ts b/packages/rest/src/lib/utils/utils.ts index 3cc69a5c8efc..97158e99743a 100644 --- a/packages/rest/src/lib/utils/utils.ts +++ b/packages/rest/src/lib/utils/utils.ts @@ -113,7 +113,6 @@ export async function resolveBody(body: RequestInit['body']): Promise)[Symbol.iterator]) { const chunks = [...(body as Iterable)]; const length = chunks.reduce((a, b) => a + b.length, 0); @@ -126,7 +125,6 @@ export async function resolveBody(body: RequestInit['body']): Promise)[Symbol.asyncIterator]) { const chunks: Uint8Array[] = []; diff --git a/packages/voice/__tests__/AudioPlayer.test.ts b/packages/voice/__tests__/AudioPlayer.test.ts index 544b2526278b..a7189d6c4d07 100644 --- a/packages/voice/__tests__/AudioPlayer.test.ts +++ b/packages/voice/__tests__/AudioPlayer.test.ts @@ -1,6 +1,4 @@ /* eslint-disable @typescript-eslint/unbound-method */ -/* eslint-disable @typescript-eslint/no-unsafe-member-access */ -/* eslint-disable @typescript-eslint/no-unsafe-assignment */ /* eslint-disable @typescript-eslint/dot-notation */ import { Buffer } from 'node:buffer'; import { once } from 'node:events'; @@ -8,7 +6,7 @@ import process from 'node:process'; import { Readable } from 'node:stream'; import { addAudioPlayer, deleteAudioPlayer } from '../src/DataStore'; import { VoiceConnection, VoiceConnectionStatus } from '../src/VoiceConnection'; -import { createAudioPlayer, AudioPlayerStatus, SILENCE_FRAME, type AudioPlayerState } from '../src/audio/AudioPlayer'; +import { createAudioPlayer, AudioPlayerStatus, SILENCE_FRAME } from '../src/audio/AudioPlayer'; import { AudioPlayerError } from '../src/audio/AudioPlayerError'; import { AudioResource } from '../src/audio/AudioResource'; import { NoSubscriberBehavior } from '../src/index'; @@ -23,7 +21,6 @@ const AudioPlayerErrorMock = AudioPlayerError as unknown as jest.Mock; function* silence() { - // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition while (true) { yield Buffer.from([0xf8, 0xff, 0xfe]); } diff --git a/packages/voice/__tests__/AudioResource.test.ts b/packages/voice/__tests__/AudioResource.test.ts index 9a1bb2872ca4..383195eac3b6 100644 --- a/packages/voice/__tests__/AudioResource.test.ts +++ b/packages/voice/__tests__/AudioResource.test.ts @@ -1,4 +1,3 @@ -/* eslint-disable @typescript-eslint/no-unsafe-return */ import { Buffer } from 'node:buffer'; import process from 'node:process'; import { PassThrough, Readable } from 'node:stream'; @@ -26,7 +25,7 @@ async function started(resource: AudioResource) { const findPipeline = _findPipeline as unknown as jest.MockedFunction; beforeAll(() => { - // @ts-expect-error no type + // @ts-expect-error: No type findPipeline.mockImplementation((from: StreamType, constraint: (path: Edge[]) => boolean) => { const base = [ { @@ -38,7 +37,6 @@ beforeAll(() => { if (constraint === VOLUME_CONSTRAINT) { base.push({ cost: 1, - // eslint-disable-next-line @typescript-eslint/no-unsafe-argument transformer: () => new VolumeTransformer({} as any), type: TransformerType.InlineVolume, }); @@ -98,7 +96,6 @@ describe('createAudioResource', () => { }); test('Infers from VolumeTransformer', () => { - // eslint-disable-next-line @typescript-eslint/no-unsafe-argument const stream = new VolumeTransformer({} as any); const resource = createAudioResource(stream, { inlineVolume: true }); expect(findPipeline).toHaveBeenCalledWith(StreamType.Raw, NO_CONSTRAINT); diff --git a/packages/voice/__tests__/DataStore.test.ts b/packages/voice/__tests__/DataStore.test.ts index 78930d46bf0e..5ed445ab89cb 100644 --- a/packages/voice/__tests__/DataStore.test.ts +++ b/packages/voice/__tests__/DataStore.test.ts @@ -1,4 +1,3 @@ -/* eslint-disable @typescript-eslint/no-unsafe-return */ /* eslint-disable @typescript-eslint/dot-notation */ import { GatewayOpcodes } from 'discord-api-types/v10'; import * as DataStore from '../src/DataStore'; diff --git a/packages/voice/__tests__/SSRCMap.test.ts b/packages/voice/__tests__/SSRCMap.test.ts index 1da3f26e8b8e..4c27acdd734a 100644 --- a/packages/voice/__tests__/SSRCMap.test.ts +++ b/packages/voice/__tests__/SSRCMap.test.ts @@ -1,6 +1,4 @@ -/* eslint-disable @typescript-eslint/no-unsafe-assignment */ -import type EventEmitter from 'node:events'; -import { once } from 'node:events'; +import { type EventEmitter, once } from 'node:events'; import process from 'node:process'; import { SSRCMap, type VoiceUserData } from '../src/receive/SSRCMap'; diff --git a/packages/voice/__tests__/VoiceConnection.test.ts b/packages/voice/__tests__/VoiceConnection.test.ts index c6f0a2e80c4b..e8d17dbbfab3 100644 --- a/packages/voice/__tests__/VoiceConnection.test.ts +++ b/packages/voice/__tests__/VoiceConnection.test.ts @@ -1,10 +1,6 @@ /* eslint-disable @typescript-eslint/unbound-method */ -/* eslint-disable @typescript-eslint/no-unsafe-assignment */ -/* eslint-disable @typescript-eslint/no-unsafe-return */ -/* eslint-disable @typescript-eslint/no-unsafe-member-access */ -/* eslint-disable @typescript-eslint/no-unsafe-argument */ /* eslint-disable @typescript-eslint/dot-notation */ -import EventEmitter from 'node:events'; +import { EventEmitter } from 'node:events'; import * as _DataStore from '../src/DataStore'; import { createVoiceConnection, diff --git a/packages/voice/__tests__/VoiceReceiver.test.ts b/packages/voice/__tests__/VoiceReceiver.test.ts index 534911b68ad2..36cb9ce4a918 100644 --- a/packages/voice/__tests__/VoiceReceiver.test.ts +++ b/packages/voice/__tests__/VoiceReceiver.test.ts @@ -1,5 +1,4 @@ /* eslint-disable id-length */ -/* eslint-disable @typescript-eslint/no-unsafe-assignment */ /* eslint-disable @typescript-eslint/dot-notation */ import { Buffer } from 'node:buffer'; import { once } from 'node:events'; @@ -39,7 +38,6 @@ describe('VoiceReceiver', () => { let receiver: VoiceReceiver; beforeEach(() => { - // eslint-disable-next-line @typescript-eslint/no-unsafe-argument voiceConnection = new VoiceConnection({} as any, {} as any); voiceConnection.state = { status: VoiceConnectionStatus.Signalling, diff --git a/packages/voice/__tests__/VoiceUDPSocket.test.ts b/packages/voice/__tests__/VoiceUDPSocket.test.ts index 28c79dca369e..b78969d5b4b4 100644 --- a/packages/voice/__tests__/VoiceUDPSocket.test.ts +++ b/packages/voice/__tests__/VoiceUDPSocket.test.ts @@ -1,9 +1,6 @@ -/* eslint-disable @typescript-eslint/no-unsafe-return */ -/* eslint-disable @typescript-eslint/no-empty-function */ -/* eslint-disable @typescript-eslint/no-unused-vars */ import { Buffer } from 'node:buffer'; import { createSocket as _createSocket } from 'node:dgram'; -import EventEmitter, { once } from 'node:events'; +import { EventEmitter } from 'node:events'; import { VoiceUDPSocket } from '../src/networking/VoiceUDPSocket'; jest.mock('node:dgram'); diff --git a/packages/voice/__tests__/VoiceWebSocket.test.ts b/packages/voice/__tests__/VoiceWebSocket.test.ts index 027ebe9c7711..cf636c545361 100644 --- a/packages/voice/__tests__/VoiceWebSocket.test.ts +++ b/packages/voice/__tests__/VoiceWebSocket.test.ts @@ -1,5 +1,3 @@ -/* eslint-disable @typescript-eslint/no-unsafe-member-access */ -/* eslint-disable @typescript-eslint/no-unsafe-assignment */ import { type EventEmitter, once } from 'node:events'; import { VoiceOpcodes } from 'discord-api-types/voice/v4'; import WS from 'jest-websocket-mock'; @@ -115,7 +113,6 @@ describe.skip('VoiceWebSocket: heartbeating', () => { const endpoint = 'ws://localhost:1234'; const server = new WS(endpoint, { jsonProtocol: true }); const ws = new VoiceWebSocket(endpoint, false); - // eslint-disable-next-line @typescript-eslint/no-empty-function ws.on('error', () => {}); await server.connected; const rcv = onceIgnoreError(ws, 'close'); diff --git a/packages/voice/__tests__/demuxProbe.test.ts b/packages/voice/__tests__/demuxProbe.test.ts index a6fd78865761..981517e462f2 100644 --- a/packages/voice/__tests__/demuxProbe.test.ts +++ b/packages/voice/__tests__/demuxProbe.test.ts @@ -1,6 +1,3 @@ -/* eslint-disable @typescript-eslint/no-unsafe-call */ -/* eslint-disable @typescript-eslint/no-unsafe-member-access */ -/* eslint-disable @typescript-eslint/no-unsafe-assignment */ import { Buffer } from 'node:buffer'; import EventEmitter, { once } from 'node:events'; import process from 'node:process'; @@ -27,8 +24,7 @@ async function* gen(num: number) { } function range(num: number) { - // eslint-disable-next-line unicorn/no-new-array - return Buffer.from(Array.from(new Array(num).keys())); + return Buffer.from(Array.from(Array.from({ length: num }).keys())); } const validHead = Buffer.from([ @@ -80,7 +76,6 @@ describe('demuxProbe', () => { test('Detects WebM', async () => { const stream = Readable.from(gen(10), { objectMode: false }); - // eslint-disable-next-line @typescript-eslint/no-unsafe-argument webmWrite.mockImplementation(function mock(data: Buffer) { if (data[0] === 5) this.emit('head', validHead); } as any); @@ -91,7 +86,6 @@ describe('demuxProbe', () => { test('Detects Ogg', async () => { const stream = Readable.from(gen(10), { objectMode: false }); - // eslint-disable-next-line @typescript-eslint/no-unsafe-argument oggWrite.mockImplementation(function mock(data: Buffer) { if (data[0] === 5) this.emit('head', validHead); } as any); @@ -102,7 +96,6 @@ describe('demuxProbe', () => { test('Rejects invalid OpusHead', async () => { const stream = Readable.from(gen(10), { objectMode: false }); - // eslint-disable-next-line @typescript-eslint/no-unsafe-argument oggWrite.mockImplementation(function mock(data: Buffer) { if (data[0] === 5) this.emit('head', invalidHead); } as any); diff --git a/packages/voice/__tests__/entersState.test.ts b/packages/voice/__tests__/entersState.test.ts index e2f10d888a98..3b8cb626fd13 100644 --- a/packages/voice/__tests__/entersState.test.ts +++ b/packages/voice/__tests__/entersState.test.ts @@ -1,6 +1,4 @@ -/* eslint-disable @typescript-eslint/no-unsafe-member-access */ -/* eslint-disable @typescript-eslint/no-unsafe-assignment */ -import EventEmitter from 'node:events'; +import { EventEmitter } from 'node:events'; import process from 'node:process'; import { VoiceConnectionStatus, type VoiceConnection } from '../src/VoiceConnection'; import { entersState } from '../src/util/entersState'; @@ -19,7 +17,6 @@ describe('entersState', () => { test('Returns the target once the state has been entered before timeout', async () => { jest.useRealTimers(); const vc = createFakeVoiceConnection(); - // eslint-disable-next-line @typescript-eslint/no-unsafe-argument process.nextTick(() => vc.emit(VoiceConnectionStatus.Ready, null as any, null as any)); const result = await entersState(vc, VoiceConnectionStatus.Ready, 1_000); expect(result).toEqual(vc); @@ -36,7 +33,6 @@ describe('entersState', () => { jest.useRealTimers(); const vc = createFakeVoiceConnection(); const ac = new AbortController(); - // eslint-disable-next-line @typescript-eslint/no-unsafe-argument process.nextTick(() => vc.emit(VoiceConnectionStatus.Ready, null as any, null as any)); const result = await entersState(vc, VoiceConnectionStatus.Ready, ac.signal); expect(result).toEqual(vc); diff --git a/packages/voice/__tests__/joinVoiceChannel.test.ts b/packages/voice/__tests__/joinVoiceChannel.test.ts index ec9613877ee8..9926167f9615 100644 --- a/packages/voice/__tests__/joinVoiceChannel.test.ts +++ b/packages/voice/__tests__/joinVoiceChannel.test.ts @@ -1,4 +1,3 @@ -/* eslint-disable @typescript-eslint/no-unsafe-return */ import * as VoiceConnection from '../src/VoiceConnection'; import { joinVoiceChannel } from '../src/joinVoiceChannel'; diff --git a/packages/voice/examples/recorder/src/bot.ts b/packages/voice/examples/recorder/src/bot.ts index d66a53b7881a..8e7555008cbe 100644 --- a/packages/voice/examples/recorder/src/bot.ts +++ b/packages/voice/examples/recorder/src/bot.ts @@ -4,7 +4,6 @@ import Discord, { Interaction, Constants } from 'discord.js'; import { deploy } from './deploy'; import { interactionHandlers } from './interactions'; -// eslint-disable-next-line @typescript-eslint/no-var-requires, @typescript-eslint/no-require-imports const { token } = require('../auth.json') as { token: string }; const client = new Discord.Client({ diff --git a/packages/voice/src/DataStore.ts b/packages/voice/src/DataStore.ts index 6e987aef5c3e..cc726a3abf1f 100644 --- a/packages/voice/src/DataStore.ts +++ b/packages/voice/src/DataStore.ts @@ -1,6 +1,6 @@ import { GatewayOpcodes } from 'discord-api-types/v10'; import type { VoiceConnection } from './VoiceConnection'; -import type { AudioPlayer } from './audio'; +import type { AudioPlayer } from './audio/index'; export interface JoinConfig { channelId: string | null; diff --git a/packages/voice/src/VoiceConnection.ts b/packages/voice/src/VoiceConnection.ts index d77fe2af8f65..2dee81eefebc 100644 --- a/packages/voice/src/VoiceConnection.ts +++ b/packages/voice/src/VoiceConnection.ts @@ -325,7 +325,6 @@ export class VoiceConnection extends EventEmitter { this.emit('stateChange', oldState, newState); if (oldState.status !== newState.status) { - // eslint-disable-next-line @typescript-eslint/no-unsafe-argument this.emit(newState.status, oldState, newState as any); } } @@ -391,7 +390,6 @@ export class VoiceConnection extends EventEmitter { newUdp?.on('message', this.receiver.onUdpMessage); } - // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment this.receiver.connectionData = Reflect.get(newState, 'connectionData') ?? {}; } diff --git a/packages/voice/src/audio/AudioPlayer.ts b/packages/voice/src/audio/AudioPlayer.ts index a5a25acd8325..2b945e085720 100644 --- a/packages/voice/src/audio/AudioPlayer.ts +++ b/packages/voice/src/audio/AudioPlayer.ts @@ -1,6 +1,6 @@ /* eslint-disable @typescript-eslint/prefer-ts-expect-error, @typescript-eslint/method-signature-style */ import { Buffer } from 'node:buffer'; -import EventEmitter from 'node:events'; +import { EventEmitter } from 'node:events'; import { addAudioPlayer, deleteAudioPlayer } from '../DataStore'; import { VoiceConnectionStatus, type VoiceConnection } from '../VoiceConnection'; import { noop } from '../util/util'; @@ -356,7 +356,6 @@ export class AudioPlayer extends EventEmitter { this.emit('stateChange', oldState, this._state); if (oldState.status !== newState.status || didChangeResources) { - // eslint-disable-next-line @typescript-eslint/no-unsafe-argument this.emit(newState.status, oldState, this._state as any); } @@ -600,7 +599,6 @@ export class AudioPlayer extends EventEmitter { */ const packet: Buffer | null = state.resource.read(); - // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition if (state.status === AudioPlayerStatus.Playing) { if (packet) { this._preparePacket(packet, playable, state); diff --git a/packages/voice/src/networking/Networking.ts b/packages/voice/src/networking/Networking.ts index af53da86986f..7390b6bd8e01 100644 --- a/packages/voice/src/networking/Networking.ts +++ b/packages/voice/src/networking/Networking.ts @@ -387,22 +387,16 @@ export class Networking extends EventEmitter { * @param packet - The received packet */ private onWsPacket(packet: any) { - // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access if (packet.op === VoiceOpcodes.Hello && this.state.code !== NetworkingStatusCode.Closed) { - // eslint-disable-next-line @typescript-eslint/no-unsafe-argument, @typescript-eslint/no-unsafe-member-access this.state.ws.setHeartbeatInterval(packet.d.heartbeat_interval); - // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access } else if (packet.op === VoiceOpcodes.Ready && this.state.code === NetworkingStatusCode.Identifying) { - // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access const { ip, port, ssrc, modes } = packet.d; - // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment const udp = new VoiceUDPSocket({ ip, port }); udp.on('error', this.onChildError); udp.on('debug', this.onUdpDebug); udp.once('close', this.onUdpClose); udp - // eslint-disable-next-line @typescript-eslint/no-unsafe-argument .performIPDiscovery(ssrc) // eslint-disable-next-line promise/prefer-await-to-then .then((localConfig) => { @@ -414,7 +408,6 @@ export class Networking extends EventEmitter { data: { address: localConfig.ip, port: localConfig.port, - // eslint-disable-next-line @typescript-eslint/no-unsafe-argument mode: chooseEncryptionMode(modes), }, }, @@ -432,25 +425,20 @@ export class Networking extends EventEmitter { code: NetworkingStatusCode.UdpHandshaking, udp, connectionData: { - // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment ssrc, }, }; } else if ( - // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access packet.op === VoiceOpcodes.SessionDescription && this.state.code === NetworkingStatusCode.SelectingProtocol ) { - // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access const { mode: encryptionMode, secret_key: secretKey } = packet.d; this.state = { ...this.state, code: NetworkingStatusCode.Ready, connectionData: { ...this.state.connectionData, - // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment encryptionMode, - // eslint-disable-next-line @typescript-eslint/no-unsafe-argument secretKey: new Uint8Array(secretKey), sequence: randomNBit(16), timestamp: randomNBit(32), @@ -460,7 +448,6 @@ export class Networking extends EventEmitter { packetsPlayed: 0, }, }; - // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access } else if (packet.op === VoiceOpcodes.Resumed && this.state.code === NetworkingStatusCode.Resuming) { this.state = { ...this.state, diff --git a/packages/voice/src/networking/VoiceWebSocket.ts b/packages/voice/src/networking/VoiceWebSocket.ts index 4c8cd1dd0eab..eb22787359c8 100644 --- a/packages/voice/src/networking/VoiceWebSocket.ts +++ b/packages/voice/src/networking/VoiceWebSocket.ts @@ -73,7 +73,6 @@ export class VoiceWebSocket extends EventEmitter { this.ws = new WebSocket(address); this.ws.onmessage = (err) => this.onMessage(err); this.ws.onopen = (err) => this.emit('open', err); - // eslint-disable-next-line @typescript-eslint/no-unsafe-argument this.ws.onerror = (err: Error | WebSocket.ErrorEvent) => this.emit('error', err instanceof Error ? err : err.error); this.ws.onclose = (err) => this.emit('close', err); @@ -110,7 +109,6 @@ export class VoiceWebSocket extends EventEmitter { let packet: any; try { - // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment packet = JSON.parse(event.data); } catch (error) { const err = error as Error; @@ -118,7 +116,6 @@ export class VoiceWebSocket extends EventEmitter { return; } - // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access if (packet.op === VoiceOpcodes.HeartbeatAck) { this.lastHeartbeatAck = Date.now(); this.missedHeartbeats = 0; diff --git a/packages/voice/src/receive/AudioReceiveStream.ts b/packages/voice/src/receive/AudioReceiveStream.ts index ac25a026d75c..105eaa8dbcb3 100644 --- a/packages/voice/src/receive/AudioReceiveStream.ts +++ b/packages/voice/src/receive/AudioReceiveStream.ts @@ -85,6 +85,5 @@ export class AudioReceiveStream extends Readable { this.endTimeout = setTimeout(() => this.push(null), end.duration); } - // eslint-disable-next-line @typescript-eslint/no-empty-function public override _read() {} } diff --git a/packages/voice/src/receive/VoiceReceiver.ts b/packages/voice/src/receive/VoiceReceiver.ts index f4d21229c601..4657d7e07dcf 100644 --- a/packages/voice/src/receive/VoiceReceiver.ts +++ b/packages/voice/src/receive/VoiceReceiver.ts @@ -64,34 +64,22 @@ export class VoiceReceiver { * @internal */ public onWsPacket(packet: any) { - // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access if (packet.op === VoiceOpcodes.ClientDisconnect && typeof packet.d?.user_id === 'string') { - // eslint-disable-next-line @typescript-eslint/no-unsafe-argument, @typescript-eslint/no-unsafe-member-access this.ssrcMap.delete(packet.d.user_id); } else if ( - // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access packet.op === VoiceOpcodes.Speaking && - // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access typeof packet.d?.user_id === 'string' && - // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access typeof packet.d?.ssrc === 'number' ) { - // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access this.ssrcMap.update({ userId: packet.d.user_id, audioSSRC: packet.d.ssrc }); } else if ( - // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access packet.op === VoiceOpcodes.ClientConnect && - // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access typeof packet.d?.user_id === 'string' && - // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access typeof packet.d?.audio_ssrc === 'number' ) { this.ssrcMap.update({ - // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access userId: packet.d.user_id, - // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access audioSSRC: packet.d.audio_ssrc, - // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access videoSSRC: packet.d.video_ssrc === 0 ? undefined : packet.d.video_ssrc, }); } diff --git a/packages/voice/src/util/Secretbox.ts b/packages/voice/src/util/Secretbox.ts index 644cdcf764bc..9a43833adcd5 100644 --- a/packages/voice/src/util/Secretbox.ts +++ b/packages/voice/src/util/Secretbox.ts @@ -9,56 +9,40 @@ interface Methods { const libs = { 'sodium-native': (sodium: any): Methods => ({ open: (buffer: Buffer, nonce: Buffer, secretKey: Uint8Array) => { - // eslint-disable-next-line @typescript-eslint/no-unnecessary-condition if (buffer) { - // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access const output = Buffer.allocUnsafe(buffer.length - sodium.crypto_box_MACBYTES); - // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call if (sodium.crypto_secretbox_open_easy(output, buffer, nonce, secretKey)) return output; } return null; }, close: (opusPacket: Buffer, nonce: Buffer, secretKey: Uint8Array) => { - // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-argument, @typescript-eslint/restrict-plus-operands + // eslint-disable-next-line @typescript-eslint/restrict-plus-operands const output = Buffer.allocUnsafe(opusPacket.length + sodium.crypto_box_MACBYTES); - // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call sodium.crypto_secretbox_easy(output, opusPacket, nonce, secretKey); return output; }, - // eslint-disable-next-line @typescript-eslint/no-unsafe-argument random: (num: number, buffer: Buffer = Buffer.allocUnsafe(num)) => { - // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call sodium.randombytes_buf(buffer); return buffer; }, }), sodium: (sodium: any): Methods => ({ - // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access open: sodium.api.crypto_secretbox_open_easy, - // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access close: sodium.api.crypto_secretbox_easy, - // eslint-disable-next-line @typescript-eslint/no-unsafe-argument random: (num: number, buffer: Buffer = Buffer.allocUnsafe(num)) => { - // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access, @typescript-eslint/no-unsafe-call sodium.api.randombytes_buf(buffer); return buffer; }, }), 'libsodium-wrappers': (sodium: any): Methods => ({ - // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access open: sodium.crypto_secretbox_open_easy, - // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access close: sodium.crypto_secretbox_easy, - // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access random: sodium.randombytes_buf, }), tweetnacl: (tweetnacl: any): Methods => ({ - // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access open: tweetnacl.secretbox.open, - // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access close: tweetnacl.secretbox, - // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access random: tweetnacl.randomBytes, }), } as const; @@ -82,7 +66,6 @@ void (async () => { try { // eslint-disable-next-line unicorn/no-abusive-eslint-disable, @typescript-eslint/no-require-imports, @typescript-eslint/no-var-requires const lib = require(libName); - // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access if (libName === 'libsodium-wrappers' && lib.ready) await lib.ready; Object.assign(methods, libs[libName](lib)); break; diff --git a/packages/voice/src/util/abortAfter.ts b/packages/voice/src/util/abortAfter.ts index 33b1eee62ebe..8abc133af5ff 100644 --- a/packages/voice/src/util/abortAfter.ts +++ b/packages/voice/src/util/abortAfter.ts @@ -7,7 +7,6 @@ export function abortAfter(delay: number): [AbortController, AbortSignal] { const ac = new AbortController(); const timeout = setTimeout(() => ac.abort(), delay); // @ts-expect-error: No type for timeout - // eslint-disable-next-line @typescript-eslint/no-unsafe-call ac.signal.addEventListener('abort', () => clearTimeout(timeout)); return [ac, ac.signal]; } diff --git a/packages/voice/src/util/generateDependencyReport.ts b/packages/voice/src/util/generateDependencyReport.ts index 08d712daf1ff..d8808bca10b5 100644 --- a/packages/voice/src/util/generateDependencyReport.ts +++ b/packages/voice/src/util/generateDependencyReport.ts @@ -18,11 +18,8 @@ function findPackageJSON( if (depth === 0) return undefined; const attemptedPath = resolve(dir, './package.json'); try { - // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment const pkg = require(attemptedPath); - // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access if (pkg.name !== packageName) throw new Error('package.json does not match'); - // eslint-disable-next-line @typescript-eslint/no-unsafe-return return pkg; } catch { return findPackageJSON(resolve(dir, '..'), packageName, depth - 1); @@ -36,12 +33,10 @@ function findPackageJSON( */ function version(name: string): string { try { - // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment const pkg = name === '@discordjs/voice' ? require('../../package.json') : findPackageJSON(dirname(require.resolve(name)), name, 3); - // eslint-disable-next-line @typescript-eslint/no-unsafe-return, @typescript-eslint/no-unsafe-member-access return pkg?.version ?? 'not found'; } catch { return 'not found'; diff --git a/packages/voice/src/util/util.ts b/packages/voice/src/util/util.ts index 4b1407a802b8..f2d5e31d0366 100644 --- a/packages/voice/src/util/util.ts +++ b/packages/voice/src/util/util.ts @@ -1,2 +1 @@ -// eslint-disable-next-line @typescript-eslint/no-empty-function export const noop = () => {}; diff --git a/packages/website/src/components/SidebarItems.tsx b/packages/website/src/components/SidebarItems.tsx index 6d15a63788cb..a190e5751f4c 100644 --- a/packages/website/src/components/SidebarItems.tsx +++ b/packages/website/src/components/SidebarItems.tsx @@ -67,7 +67,6 @@ function resolveIcon(item: keyof GroupedMembers) { } const useStyles = createStyles((theme) => ({ - // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment link: { ...theme.fn.focusStyles(), fontWeight: 500, diff --git a/packages/website/src/components/TableOfContentItems.tsx b/packages/website/src/components/TableOfContentItems.tsx index 5651c9185b12..89e1452fec08 100644 --- a/packages/website/src/components/TableOfContentItems.tsx +++ b/packages/website/src/components/TableOfContentItems.tsx @@ -4,7 +4,6 @@ import { useMemo } from 'react'; import { VscListSelection, VscSymbolMethod, VscSymbolProperty } from 'react-icons/vsc'; const useStyles = createStyles((theme) => ({ - // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment link: { ...theme.fn.focusStyles(), fontWeight: 500, diff --git a/packages/website/src/pages/docs/[...slug].tsx b/packages/website/src/pages/docs/[...slug].tsx index a1bf8d0e9fb2..61be1908664c 100644 --- a/packages/website/src/pages/docs/[...slug].tsx +++ b/packages/website/src/pages/docs/[...slug].tsx @@ -47,16 +47,13 @@ export const getStaticPaths: GetStaticPaths = async () => { let versions: string[] = []; if (process.env.NEXT_PUBLIC_LOCAL_DEV) { const res = await readFile(join(cwd(), '..', packageName, 'docs', 'docs.api.json'), 'utf8'); - // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment data = JSON.parse(res); } else { const response = await fetch(`https://docs.discordjs.dev/api/info?package=${packageName}`); - // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment versions = await response.json(); for (const version of versions) { const res = await fetch(`https://docs.discordjs.dev/docs/${packageName}/${version}.api.json`); - // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment data = [...data, await res.json()]; } } @@ -142,11 +139,9 @@ export const getStaticProps: GetStaticProps = async ({ params }) => { let data; if (process.env.NEXT_PUBLIC_LOCAL_DEV) { const res = await readFile(join(cwd(), '..', packageName, 'docs', 'docs.api.json'), 'utf8'); - // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment data = JSON.parse(res); } else { const res = await fetch(`https://docs.discordjs.dev/docs/${packageName}/${branchName}.api.json`); - // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment data = await res.json(); } diff --git a/packages/website/src/pages/docs/packages/[package]/index.tsx b/packages/website/src/pages/docs/packages/[package]/index.tsx index 6f6bbaf8945d..7567479017eb 100644 --- a/packages/website/src/pages/docs/packages/[package]/index.tsx +++ b/packages/website/src/pages/docs/packages/[package]/index.tsx @@ -38,7 +38,6 @@ export const getStaticProps: GetStaticProps = async ({ params }) => { try { const res = await fetch(`https://docs.discordjs.dev/api/info?package=${packageName ?? 'builders'}`); - // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment const data: string[] = await res.json(); if (!data.length) { diff --git a/packages/website/src/util/api-model.server.ts b/packages/website/src/util/api-model.server.ts index db961a41ebc8..3753a0f6aad6 100644 --- a/packages/website/src/util/api-model.server.ts +++ b/packages/website/src/util/api-model.server.ts @@ -1,6 +1,3 @@ -/* eslint-disable @typescript-eslint/no-unsafe-member-access */ -/* eslint-disable @typescript-eslint/no-unsafe-assignment */ - import { ApiModel, ApiItem, type ApiPackage } from '@microsoft/api-extractor-model'; import { TSDocConfiguration } from '@microsoft/tsdoc'; import { TSDocConfigFile } from '@microsoft/tsdoc-config'; @@ -11,7 +8,6 @@ export function createApiModel(data: any) { const tsdocConfigFile = TSDocConfigFile.loadFromObject(data.metadata.tsdocConfig); tsdocConfigFile.configureParser(tsdocConfiguration); - // eslint-disable-next-line @typescript-eslint/no-unsafe-argument const apiPackage = ApiItem.deserialize(data, { apiJsonFilename: '', toolPackage: data.metadata.toolPackage, diff --git a/packages/ws/__tests__/strategy/WorkerShardingStrategy.test.ts b/packages/ws/__tests__/strategy/WorkerShardingStrategy.test.ts index 69ace627b76e..4ba57fa837a2 100644 --- a/packages/ws/__tests__/strategy/WorkerShardingStrategy.test.ts +++ b/packages/ws/__tests__/strategy/WorkerShardingStrategy.test.ts @@ -50,14 +50,12 @@ vi.mock('node:worker_threads', async () => { class MockWorker extends EventEmitter { public constructor(...args: any[]) { super(); - // eslint-disable-next-line @typescript-eslint/no-unsafe-argument mockConstructor(...args); // need to delay this by an event loop cycle to allow the strategy to attach a listener setImmediate(() => this.emit('online')); } public postMessage(message: WorkerSendPayload) { - // eslint-disable-next-line default-case switch (message.op) { case WorkerSendPayloadOp.Connect: { const response: WorkerRecievePayload = { @@ -180,7 +178,6 @@ test('spawn, connect, send a message, session info, and destroy', async () => { await manager.connect(); expect(mockConstructor).toHaveBeenCalledWith( expect.stringContaining('worker.cjs'), - // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment expect.objectContaining({ workerData: expect.objectContaining({ shardIds: [0, 1] }) }), ); diff --git a/packages/ws/src/strategies/context/WorkerContextFetchingStrategy.ts b/packages/ws/src/strategies/context/WorkerContextFetchingStrategy.ts index 5ada996f1dda..d7c24a40205c 100644 --- a/packages/ws/src/strategies/context/WorkerContextFetchingStrategy.ts +++ b/packages/ws/src/strategies/context/WorkerContextFetchingStrategy.ts @@ -1,3 +1,4 @@ +/* eslint-disable unicorn/require-post-message-target-origin */ import { isMainThread, parentPort } from 'node:worker_threads'; import { Collection } from '@discordjs/collection'; import type { SessionInfo } from '../../ws/WebSocketManager.js'; @@ -35,7 +36,6 @@ export class WorkerContextFetchingStrategy implements IContextFetchingStrategy { }; // eslint-disable-next-line no-promise-executor-return const promise = new Promise((resolve) => this.sessionPromises.set(nonce, resolve)); - // eslint-disable-next-line unicorn/require-post-message-target-origin parentPort!.postMessage(payload); return promise; } @@ -46,7 +46,6 @@ export class WorkerContextFetchingStrategy implements IContextFetchingStrategy { shardId, session: sessionInfo, }; - // eslint-disable-next-line unicorn/require-post-message-target-origin parentPort!.postMessage(payload); } } diff --git a/packages/ws/src/strategies/sharding/WorkerShardingStrategy.ts b/packages/ws/src/strategies/sharding/WorkerShardingStrategy.ts index bfc8f2436921..47d767e8af24 100644 --- a/packages/ws/src/strategies/sharding/WorkerShardingStrategy.ts +++ b/packages/ws/src/strategies/sharding/WorkerShardingStrategy.ts @@ -1,3 +1,4 @@ +/* eslint-disable unicorn/require-post-message-target-origin */ import { once } from 'node:events'; import { join } from 'node:path'; import { Worker } from 'node:worker_threads'; @@ -100,7 +101,6 @@ export class WorkerShardingStrategy implements IShardingStrategy { .on('messageerror', (err) => { throw err; }) - // eslint-disable-next-line @typescript-eslint/no-misused-promises .on('message', async (payload: WorkerRecievePayload) => this.onMessage(worker, payload)); this.#workers.push(worker); @@ -128,7 +128,6 @@ export class WorkerShardingStrategy implements IShardingStrategy { // eslint-disable-next-line no-promise-executor-return const promise = new Promise((resolve) => this.connectPromises.set(shardId, resolve)); - // eslint-disable-next-line unicorn/require-post-message-target-origin worker.postMessage(payload); promises.push(promise); } @@ -153,7 +152,6 @@ export class WorkerShardingStrategy implements IShardingStrategy { // eslint-disable-next-line no-promise-executor-return, promise/prefer-await-to-then new Promise((resolve) => this.destroyPromises.set(shardId, resolve)).then(async () => worker.terminate()), ); - // eslint-disable-next-line unicorn/require-post-message-target-origin worker.postMessage(payload); } @@ -177,12 +175,10 @@ export class WorkerShardingStrategy implements IShardingStrategy { shardId, payload: data, }; - // eslint-disable-next-line unicorn/require-post-message-target-origin worker.postMessage(payload); } private async onMessage(worker: Worker, payload: WorkerRecievePayload) { - // eslint-disable-next-line default-case switch (payload.op) { case WorkerRecievePayloadOp.Connected: { const resolve = this.connectPromises.get(payload.shardId)!; @@ -199,7 +195,6 @@ export class WorkerShardingStrategy implements IShardingStrategy { } case WorkerRecievePayloadOp.Event: { - // eslint-disable-next-line @typescript-eslint/no-unsafe-argument this.manager.emit(payload.event, { ...payload.data, shardId: payload.shardId }); break; } @@ -211,7 +206,6 @@ export class WorkerShardingStrategy implements IShardingStrategy { nonce: payload.nonce, session, }; - // eslint-disable-next-line unicorn/require-post-message-target-origin worker.postMessage(response); break; } diff --git a/packages/ws/src/strategies/sharding/worker.ts b/packages/ws/src/strategies/sharding/worker.ts index be803e1aa227..c769150241bf 100644 --- a/packages/ws/src/strategies/sharding/worker.ts +++ b/packages/ws/src/strategies/sharding/worker.ts @@ -58,9 +58,7 @@ parentPort! .on('messageerror', (err) => { throw err; }) - // eslint-disable-next-line @typescript-eslint/no-misused-promises .on('message', async (payload: WorkerSendPayload) => { - // eslint-disable-next-line default-case switch (payload.op) { case WorkerSendPayloadOp.Connect: { await connect(payload.shardId); diff --git a/packages/ws/src/utils/constants.ts b/packages/ws/src/utils/constants.ts index 8ccc9c6ed34e..715529932035 100644 --- a/packages/ws/src/utils/constants.ts +++ b/packages/ws/src/utils/constants.ts @@ -21,10 +21,8 @@ export enum CompressionMethod { } const packageJson = readFileSync(join(__dirname, '..', '..', 'package.json'), 'utf8'); -// eslint-disable-next-line @typescript-eslint/no-unsafe-assignment const Package = JSON.parse(packageJson); -// eslint-disable-next-line @typescript-eslint/restrict-template-expressions, @typescript-eslint/no-unsafe-member-access export const DefaultDeviceProperty = `@discordjs/ws ${Package.version}`; const getDefaultSessionStore = lazy(() => new Collection()); diff --git a/packages/ws/src/ws/WebSocketShard.ts b/packages/ws/src/ws/WebSocketShard.ts index e042f6b6a57b..27cbb2a24dc2 100644 --- a/packages/ws/src/ws/WebSocketShard.ts +++ b/packages/ws/src/ws/WebSocketShard.ts @@ -384,7 +384,6 @@ export class WebSocketShard extends AsyncEventEmitter { return; } - // eslint-disable-next-line default-case switch (payload.op) { case GatewayOpcodes.Dispatch: { if (this.status === WebSocketShardStatus.Ready || this.status === WebSocketShardStatus.Resuming) { From 8a91d7c2562b408c0754b6bae9bcfa0e07a8b11b Mon Sep 17 00:00:00 2001 From: Almeida Date: Thu, 1 Sep 2022 21:04:58 +0100 Subject: [PATCH 114/155] fix: docgen (#8582) --- packages/docgen/src/types/item.ts | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/packages/docgen/src/types/item.ts b/packages/docgen/src/types/item.ts index d8db85f239c3..a77d79733b70 100644 --- a/packages/docgen/src/types/item.ts +++ b/packages/docgen/src/types/item.ts @@ -6,8 +6,7 @@ export class DocumentedItem { public serialize(): unknown { try { - this.serializer(); - return; + return this.serializer(); } catch (error_) { const error = error_ as Error; error.message = `Error while serializing ${this.detailedName()}: ${error.message}`; @@ -15,7 +14,7 @@ export class DocumentedItem { } } - protected serializer() { + protected serializer(): unknown { throw new Error("Method 'serializer()' must be implemented."); } From 9b4116b65912bf96fbe6916273ff2bb26cbcfe76 Mon Sep 17 00:00:00 2001 From: Suneet Tipirneni <77477100+suneettipirneni@users.noreply.github.com> Date: Fri, 2 Sep 2022 11:20:57 -0400 Subject: [PATCH 115/155] chore(website): put seperators between properties (#8576) --- .../website/src/components/PropertyList.tsx | 27 ++++++++++--------- 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/packages/website/src/components/PropertyList.tsx b/packages/website/src/components/PropertyList.tsx index 4c47b8908d80..02305f571d30 100644 --- a/packages/website/src/components/PropertyList.tsx +++ b/packages/website/src/components/PropertyList.tsx @@ -1,22 +1,25 @@ import type { ApiPropertyItemJSON } from '@discordjs/api-extractor-utils'; -import { Stack } from '@mantine/core'; +import { Divider, Stack } from '@mantine/core'; +import { Fragment } from 'react'; import { CodeListing } from './CodeListing'; export function PropertyList({ data }: { data: ApiPropertyItemJSON[] }) { return ( {data.map((prop) => ( - + + + + ))} ); From f77612a55e9c593a21bc27e58c9fbd03d85787e3 Mon Sep 17 00:00:00 2001 From: D Trombett Date: Fri, 2 Sep 2022 17:30:06 +0200 Subject: [PATCH 116/155] types(webhook): avatar can be null (#8541) --- packages/discord.js/typings/index.d.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/discord.js/typings/index.d.ts b/packages/discord.js/typings/index.d.ts index 351a33220bcd..719e9e1015f7 100644 --- a/packages/discord.js/typings/index.d.ts +++ b/packages/discord.js/typings/index.d.ts @@ -2811,7 +2811,7 @@ export class VoiceState extends Base { export class Webhook extends WebhookMixin() { private constructor(client: Client, data?: RawWebhookData); - public avatar: string; + public avatar: string | null; public avatarURL(options?: ImageURLOptions): string | null; public channelId: Snowflake; public readonly client: Client; From b7eb96d45670616521fbcca28a657793d91605c7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?A=2E=20Rom=C3=A1n?= Date: Fri, 2 Sep 2022 17:31:25 +0200 Subject: [PATCH 117/155] types(interactions): fix `{Slash,ContextMenu}CommandBuilder#toJSON` (#8568) --- .../contextMenuCommands/ContextMenuCommandBuilder.ts | 4 ++-- .../src/interactions/slashCommands/SlashCommandBuilder.ts | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/packages/builders/src/interactions/contextMenuCommands/ContextMenuCommandBuilder.ts b/packages/builders/src/interactions/contextMenuCommands/ContextMenuCommandBuilder.ts index 4deb42a26036..51003b2512f6 100644 --- a/packages/builders/src/interactions/contextMenuCommands/ContextMenuCommandBuilder.ts +++ b/packages/builders/src/interactions/contextMenuCommands/ContextMenuCommandBuilder.ts @@ -3,7 +3,7 @@ import type { LocaleString, LocalizationMap, Permissions, - RESTPostAPIApplicationCommandsJSONBody, + RESTPostAPIContextMenuApplicationCommandsJSONBody, } from 'discord-api-types/v10'; import { validateLocale, validateLocalizationMap } from '../slashCommands/Assertions.js'; import { @@ -176,7 +176,7 @@ export class ContextMenuCommandBuilder { * * **Note:** Calling this function will validate required properties based on their conditions. */ - public toJSON(): RESTPostAPIApplicationCommandsJSONBody { + public toJSON(): RESTPostAPIContextMenuApplicationCommandsJSONBody { validateRequiredParameters(this.name, this.type); validateLocalizationMap(this.name_localizations); diff --git a/packages/builders/src/interactions/slashCommands/SlashCommandBuilder.ts b/packages/builders/src/interactions/slashCommands/SlashCommandBuilder.ts index fdfa4d3c1fa8..c7b88d094cc5 100644 --- a/packages/builders/src/interactions/slashCommands/SlashCommandBuilder.ts +++ b/packages/builders/src/interactions/slashCommands/SlashCommandBuilder.ts @@ -2,7 +2,7 @@ import type { APIApplicationCommandOption, LocalizationMap, Permissions, - RESTPostAPIApplicationCommandsJSONBody, + RESTPostAPIChatInputApplicationCommandsJSONBody, } from 'discord-api-types/v10'; import { mix } from 'ts-mixer'; import { @@ -69,7 +69,7 @@ export class SlashCommandBuilder { * * **Note:** Calling this function will validate required properties based on their conditions. */ - public toJSON(): RESTPostAPIApplicationCommandsJSONBody { + public toJSON(): RESTPostAPIChatInputApplicationCommandsJSONBody { validateRequiredParameters(this.name, this.description, this.options); validateLocalizationMap(this.name_localizations); From df46ab8061d3b92afbf48417bc78029d9d43c094 Mon Sep 17 00:00:00 2001 From: iCrawl Date: Fri, 2 Sep 2022 18:08:16 +0200 Subject: [PATCH 118/155] build: tsup for better cjs / esm support --- build.config.ts | 92 - package.json | 5 +- packages/actions/build.config.ts | 11 - packages/actions/package.json | 5 +- packages/actions/tsup.config.js | 7 + packages/api-extractor-utils/package.json | 10 +- packages/api-extractor-utils/tsup.config.js | 5 + packages/builders/build.config.ts | 3 - packages/builders/package.json | 9 +- packages/builders/tsup.config.js | 3 + packages/collection/build.config.ts | 3 - packages/collection/package.json | 9 +- packages/collection/tsup.config.js | 3 + packages/docgen/build.config.ts | 9 - packages/docgen/package.json | 11 +- packages/docgen/tsup.config.js | 7 + packages/proxy-container/Dockerfile | 2 +- packages/proxy-container/build.config.ts | 3 - packages/proxy-container/package.json | 9 +- packages/proxy-container/tsup.config.js | 6 + packages/proxy/build.config.ts | 3 - packages/proxy/package.json | 9 +- packages/proxy/tsup.config.js | 3 + packages/rest/build.config.ts | 3 - packages/rest/package.json | 9 +- packages/rest/tsup.config.js | 3 + packages/scripts/build.config.ts | 3 - packages/scripts/package.json | 9 +- packages/scripts/tsup.config.js | 5 + packages/voice/build.config.ts | 3 - packages/voice/package.json | 13 +- packages/voice/tsup.config.js | 3 + packages/website/package.json | 12 +- .../strategy/WorkerShardingStrategy.test.ts | 2 +- packages/ws/build.config.ts | 9 - packages/ws/package.json | 9 +- .../sharding/WorkerShardingStrategy.ts | 2 +- packages/ws/tsup.config.js | 9 + tsup.config.js | 35 + yarn.lock | 1476 +++++++---------- 40 files changed, 762 insertions(+), 1070 deletions(-) delete mode 100644 build.config.ts delete mode 100644 packages/actions/build.config.ts create mode 100644 packages/actions/tsup.config.js create mode 100644 packages/api-extractor-utils/tsup.config.js delete mode 100644 packages/builders/build.config.ts create mode 100644 packages/builders/tsup.config.js delete mode 100644 packages/collection/build.config.ts create mode 100644 packages/collection/tsup.config.js delete mode 100644 packages/docgen/build.config.ts create mode 100644 packages/docgen/tsup.config.js delete mode 100644 packages/proxy-container/build.config.ts create mode 100644 packages/proxy-container/tsup.config.js delete mode 100644 packages/proxy/build.config.ts create mode 100644 packages/proxy/tsup.config.js delete mode 100644 packages/rest/build.config.ts create mode 100644 packages/rest/tsup.config.js delete mode 100644 packages/scripts/build.config.ts create mode 100644 packages/scripts/tsup.config.js delete mode 100644 packages/voice/build.config.ts create mode 100644 packages/voice/tsup.config.js delete mode 100644 packages/ws/build.config.ts create mode 100644 packages/ws/tsup.config.js create mode 100644 tsup.config.js diff --git a/build.config.ts b/build.config.ts deleted file mode 100644 index 5c1d24f864d5..000000000000 --- a/build.config.ts +++ /dev/null @@ -1,92 +0,0 @@ -import { relative, resolve } from 'node:path'; -import glob from 'fast-glob'; -import isCi from 'is-ci'; -import typescript from 'rollup-plugin-typescript2'; -import { defineBuildConfig, type BuildEntry } from 'unbuild'; - -interface ConfigOptions { - cjsBridge: boolean; - declaration: boolean; - emitCJS: boolean; - entries: (BuildEntry | string)[]; - externals: string[]; - minify: boolean; - preserveModules: boolean; - preserveModulesRoot: string; - sourcemap: boolean; - typeCheck: boolean; -} - -export function createUnbuildConfig({ - entries = [{ builder: 'rollup', input: 'src/index' }], - minify = false, - emitCJS = true, - cjsBridge = true, - externals = [], - sourcemap = true, - preserveModules = true, - preserveModulesRoot = 'src', - declaration = true, - typeCheck = isCi, -}: Partial = {}) { - const files = glob - .sync('**', { cwd: 'src' }) - .flatMap((file) => [`${file.slice(0, -2)}cjs`, `${file.slice(0, -2)}mjs`]); - - return defineBuildConfig({ - entries, - clean: true, - rollup: { - esbuild: { - minify, - minifyIdentifiers: false, - }, - emitCJS, - cjsBridge, - json: { - namedExports: false, - preferConst: true, - }, - }, - - externals: [...files, ...externals], - - hooks: { - 'rollup:options': (_, options) => { - // @ts-expect-error: This will always be an array - options.output![0] = { - // @ts-expect-error: This will always be an array - ...options.output![0], - sourcemap, - preserveModules, - preserveModulesRoot, - }; - - if (emitCJS) { - // @ts-expect-error: This will always be an array - options.output![1] = { - // @ts-expect-error: This will always be an array - ...options.output![1], - sourcemap, - preserveModules, - preserveModulesRoot, - }; - } - - if (declaration) { - options.plugins?.unshift( - typescript({ - check: typeCheck, - tsconfig: relative(__dirname, resolve(process.cwd(), 'tsconfig.json')), - tsconfigOverride: { - compilerOptions: { - emitDeclarationOnly: true, - }, - }, - }), - ); - } - }, - }, - }); -} diff --git a/package.json b/package.json index 4f8aa8a5b320..822b187a19e4 100644 --- a/package.json +++ b/package.json @@ -41,13 +41,12 @@ "@commitlint/config-angular": "^17.1.0", "@favware/cliff-jumper": "^1.8.7", "@favware/npm-deprecate": "^1.0.5", - "@types/is-ci": "^3.0.0", "conventional-changelog-cli": "^2.2.2", - "fast-glob": "^3.2.11", "husky": "^8.0.1", "is-ci": "^3.0.1", "lint-staged": "^13.0.3", - "turbo": "^1.4.3", + "tsup": "^6.2.3", + "turbo": "^1.4.4", "typescript": "^4.8.2" }, "resolutions": { diff --git a/packages/actions/build.config.ts b/packages/actions/build.config.ts deleted file mode 100644 index c80d9de43859..000000000000 --- a/packages/actions/build.config.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { createUnbuildConfig } from '../../build.config'; - -export default createUnbuildConfig({ - entries: [ - { builder: 'rollup', input: 'src/index' }, - { builder: 'rollup', input: 'src/formatTag/index' }, - ], - preserveModules: false, - minify: true, - emitCJS: false, -}); diff --git a/packages/actions/package.json b/packages/actions/package.json index bd507d9829b1..02db079ed041 100644 --- a/packages/actions/package.json +++ b/packages/actions/package.json @@ -5,7 +5,7 @@ "private": true, "scripts": { "test": "vitest run", - "build": "unbuild", + "build": "tsup", "lint": "prettier --check . && TIMING=1 eslint src __tests__ --ext mjs,js,ts", "format": "prettier --write . && TIMING=1 eslint src __tests__ --ext mjs,js,ts --fix", "fmt": "yarn format" @@ -48,9 +48,8 @@ "eslint": "^8.23.0", "eslint-config-neon": "^0.1.23", "prettier": "^2.7.1", - "rollup-plugin-typescript2": "^0.33.0", + "tsup": "^6.2.3", "typescript": "^4.8.2", - "unbuild": "^0.8.9", "vitest": "^0.22.1" }, "engines": { diff --git a/packages/actions/tsup.config.js b/packages/actions/tsup.config.js new file mode 100644 index 000000000000..5612dfe342f6 --- /dev/null +++ b/packages/actions/tsup.config.js @@ -0,0 +1,7 @@ +import { createTsupConfig } from '../../tsup.config.js'; + +export default createTsupConfig({ + entry: ['src/index.ts', 'src/formatTag/index.ts'], + format: ['esm'], + minify: true, +}); diff --git a/packages/api-extractor-utils/package.json b/packages/api-extractor-utils/package.json index a13bb8924fb0..661efb37de79 100644 --- a/packages/api-extractor-utils/package.json +++ b/packages/api-extractor-utils/package.json @@ -4,12 +4,13 @@ "description": "Utilities for api-extractor", "private": true, "scripts": { - "build": "unbuild", + "build": "tsup", "lint": "prettier --check . && TIMING=1 eslint src --ext mjs,js,ts", "format": "prettier --write . && TIMING=1 eslint src --ext mjs,js,ts --fix", "fmt": "yarn format" }, - "main": "./dist/index.mjs", + "main": "./dist/index.js", + "module": "./dist/index.mjs", "types": "./dist/index.d.ts", "directories": { "lib": "src" @@ -38,9 +39,8 @@ "eslint": "^8.23.0", "eslint-config-neon": "^0.1.23", "prettier": "^2.7.1", - "rollup-plugin-typescript2": "^0.33.0", - "typescript": "^4.8.2", - "unbuild": "^0.8.9" + "tsup": "^6.2.3", + "typescript": "^4.8.2" }, "engines": { "node": ">=16.9.0" diff --git a/packages/api-extractor-utils/tsup.config.js b/packages/api-extractor-utils/tsup.config.js new file mode 100644 index 000000000000..b1adcf0cfe62 --- /dev/null +++ b/packages/api-extractor-utils/tsup.config.js @@ -0,0 +1,5 @@ +import { createTsupConfig } from '../../tsup.config.js'; + +export default createTsupConfig({ + minify: true, +}); diff --git a/packages/builders/build.config.ts b/packages/builders/build.config.ts deleted file mode 100644 index 7a3607acb5fe..000000000000 --- a/packages/builders/build.config.ts +++ /dev/null @@ -1,3 +0,0 @@ -import { createUnbuildConfig } from '../../build.config'; - -export default createUnbuildConfig(); diff --git a/packages/builders/package.json b/packages/builders/package.json index ac914e8e53cd..cd78d52de0d8 100644 --- a/packages/builders/package.json +++ b/packages/builders/package.json @@ -4,7 +4,7 @@ "description": "A set of builders that you can use when creating your bot", "scripts": { "test": "vitest run", - "build": "unbuild", + "build": "tsup", "lint": "prettier --check . && TIMING=1 eslint src __tests__ --ext mjs,js,ts", "format": "prettier --write . && TIMING=1 eslint src __tests__ --ext mjs,js,ts --fix", "fmt": "yarn format", @@ -13,12 +13,12 @@ "changelog": "git cliff --prepend ./CHANGELOG.md -u -c ./cliff.toml -r ../../ --include-path 'packages/builders/*'", "release": "cliff-jumper" }, - "main": "./dist/index.cjs", + "main": "./dist/index.js", "module": "./dist/index.mjs", "types": "./dist/index.d.ts", "exports": { "import": "./dist/index.mjs", - "require": "./dist/index.cjs", + "require": "./dist/index.js", "types": "./dist/index.d.ts" }, "directories": { @@ -70,9 +70,8 @@ "eslint": "^8.23.0", "eslint-config-neon": "^0.1.23", "prettier": "^2.7.1", - "rollup-plugin-typescript2": "^0.33.0", + "tsup": "^6.2.3", "typescript": "^4.8.2", - "unbuild": "^0.8.9", "vitest": "^0.22.1" }, "engines": { diff --git a/packages/builders/tsup.config.js b/packages/builders/tsup.config.js new file mode 100644 index 000000000000..2e679fd0ad1b --- /dev/null +++ b/packages/builders/tsup.config.js @@ -0,0 +1,3 @@ +import { createTsupConfig } from '../../tsup.config.js'; + +export default createTsupConfig(); diff --git a/packages/collection/build.config.ts b/packages/collection/build.config.ts deleted file mode 100644 index 7a3607acb5fe..000000000000 --- a/packages/collection/build.config.ts +++ /dev/null @@ -1,3 +0,0 @@ -import { createUnbuildConfig } from '../../build.config'; - -export default createUnbuildConfig(); diff --git a/packages/collection/package.json b/packages/collection/package.json index 7a7e2ff925f1..22aafd5d45d1 100644 --- a/packages/collection/package.json +++ b/packages/collection/package.json @@ -4,7 +4,7 @@ "description": "Utility data structure used in discord.js", "scripts": { "test": "vitest run", - "build": "unbuild", + "build": "tsup", "lint": "prettier --check . && TIMING=1 eslint src __tests__ --ext mjs,js,ts", "format": "prettier --write . && TIMING=1 eslint src __tests__ --ext mjs,js,ts --fix", "fmt": "yarn format", @@ -13,12 +13,12 @@ "changelog": "git cliff --prepend ./CHANGELOG.md -u -c ./cliff.toml -r ../../ --include-path 'packages/collection/*'", "release": "cliff-jumper" }, - "main": "./dist/index.cjs", + "main": "./dist/index.js", "module": "./dist/index.mjs", "types": "./dist/index.d.ts", "exports": { "import": "./dist/index.mjs", - "require": "./dist/index.cjs", + "require": "./dist/index.js", "types": "./dist/index.d.ts" }, "directories": { @@ -59,9 +59,8 @@ "eslint": "^8.23.0", "eslint-config-neon": "^0.1.23", "prettier": "^2.7.1", - "rollup-plugin-typescript2": "^0.33.0", + "tsup": "^6.2.3", "typescript": "^4.8.2", - "unbuild": "^0.8.9", "vitest": "^0.22.1" }, "engines": { diff --git a/packages/collection/tsup.config.js b/packages/collection/tsup.config.js new file mode 100644 index 000000000000..2e679fd0ad1b --- /dev/null +++ b/packages/collection/tsup.config.js @@ -0,0 +1,3 @@ +import { createTsupConfig } from '../../tsup.config.js'; + +export default createTsupConfig(); diff --git a/packages/docgen/build.config.ts b/packages/docgen/build.config.ts deleted file mode 100644 index 21025202a085..000000000000 --- a/packages/docgen/build.config.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { createUnbuildConfig } from '../../build.config'; - -export default createUnbuildConfig({ - entries: [ - { builder: 'rollup', input: 'src/index' }, - { builder: 'rollup', input: 'src/cli' }, - ], - minify: true, -}); diff --git a/packages/docgen/package.json b/packages/docgen/package.json index f61813daa84b..1674b3754b01 100644 --- a/packages/docgen/package.json +++ b/packages/docgen/package.json @@ -3,7 +3,7 @@ "version": "0.12.1", "description": "The docs.json generator for discord.js and its related projects", "scripts": { - "build": "unbuild", + "build": "tsup", "lint": "prettier --check . && TIMING=1 eslint src --ext mjs,js,ts", "format": "prettier --write . && TIMING=1 eslint src --ext mjs,js,ts --fix", "fmt": "yarn format", @@ -11,7 +11,7 @@ "changelog": "git cliff --prepend ./CHANGELOG.md -u -c ./cliff.toml -r ../../ --include-path 'packages/docgen/*'", "release": "cliff-jumper" }, - "bin": "./dist/cli.cjs", + "bin": "./dist/cli.js", "directories": { "lib": "src" }, @@ -45,7 +45,7 @@ "commander": "^9.4.0", "jsdoc-to-markdown": "^7.1.1", "tslib": "^2.4.0", - "typedoc": "^0.23.11" + "typedoc": "^0.23.13" }, "devDependencies": { "@favware/cliff-jumper": "^1.8.7", @@ -54,9 +54,8 @@ "eslint": "^8.23.0", "eslint-config-neon": "^0.1.23", "prettier": "^2.7.1", - "rollup-plugin-typescript2": "^0.33.0", - "typescript": "^4.8.2", - "unbuild": "^0.8.9" + "tsup": "^6.2.3", + "typescript": "^4.8.2" }, "engines": { "node": ">=16.9.0" diff --git a/packages/docgen/tsup.config.js b/packages/docgen/tsup.config.js new file mode 100644 index 000000000000..7ed493c1b471 --- /dev/null +++ b/packages/docgen/tsup.config.js @@ -0,0 +1,7 @@ +import { createTsupConfig } from '../../tsup.config.js'; + +export default createTsupConfig({ + entry: ['src/index.ts', 'src/cli.ts'], + minify: true, + dts: false, +}); diff --git a/packages/proxy-container/Dockerfile b/packages/proxy-container/Dockerfile index 902c9e637fb6..48ddc342e467 100644 --- a/packages/proxy-container/Dockerfile +++ b/packages/proxy-container/Dockerfile @@ -15,4 +15,4 @@ RUN yarn workspaces focus COPY ./packages/proxy-container ./ RUN yarn build && yarn workspaces focus --production -CMD ["node", "--enable-source-maps", "./dist/index.mjs"] +CMD ["node", "--enable-source-maps", "./dist/index.js"] diff --git a/packages/proxy-container/build.config.ts b/packages/proxy-container/build.config.ts deleted file mode 100644 index af8f6e026907..000000000000 --- a/packages/proxy-container/build.config.ts +++ /dev/null @@ -1,3 +0,0 @@ -import { createUnbuildConfig } from '../../build.config'; - -export default createUnbuildConfig({ emitCJS: false, cjsBridge: false }); diff --git a/packages/proxy-container/package.json b/packages/proxy-container/package.json index d92c99a2d673..21a321b25b47 100644 --- a/packages/proxy-container/package.json +++ b/packages/proxy-container/package.json @@ -3,15 +3,15 @@ "version": "1.0.0", "description": "Lightweight HTTP proxy for Discord's API, brought to you as a container 📦", "scripts": { - "build": "unbuild", + "build": "tsup", "lint": "prettier --check . && TIMING=1 eslint src --ext mjs,js,ts", "format": "prettier --write . && TIMING=1 eslint src --ext mjs,js,ts --fix", "fmt": "yarn format", "prepack": "yarn lint && yarn test && yarn build", "changelog": "git cliff --prepend ./CHANGELOG.md -u -c ./cliff.toml -r ../../ --include-path 'packages/proxy-container/*'" }, - "main": "./dist/index.mjs", "type": "module", + "module": "./dist/index.js", "directories": { "lib": "src" }, @@ -53,9 +53,8 @@ "eslint": "^8.23.0", "eslint-config-neon": "^0.1.23", "prettier": "^2.7.1", - "rollup-plugin-typescript2": "^0.33.0", - "typescript": "^4.8.2", - "unbuild": "^0.8.9" + "tsup": "^6.2.3", + "typescript": "^4.8.2" }, "engines": { "node": ">=16.9.0" diff --git a/packages/proxy-container/tsup.config.js b/packages/proxy-container/tsup.config.js new file mode 100644 index 000000000000..93b776cac16b --- /dev/null +++ b/packages/proxy-container/tsup.config.js @@ -0,0 +1,6 @@ +import { createTsupConfig } from '../../tsup.config.js'; + +export default createTsupConfig({ + format: ['esm'], + minify: true, +}); diff --git a/packages/proxy/build.config.ts b/packages/proxy/build.config.ts deleted file mode 100644 index 7a3607acb5fe..000000000000 --- a/packages/proxy/build.config.ts +++ /dev/null @@ -1,3 +0,0 @@ -import { createUnbuildConfig } from '../../build.config'; - -export default createUnbuildConfig(); diff --git a/packages/proxy/package.json b/packages/proxy/package.json index 8d2d3649540b..6ea9a933f160 100644 --- a/packages/proxy/package.json +++ b/packages/proxy/package.json @@ -4,7 +4,7 @@ "description": "Tools for running an HTTP proxy for Discord's API", "scripts": { "test": "vitest run", - "build": "unbuild", + "build": "tsup", "lint": "prettier --check . && TIMING=1 eslint src __tests__ --ext mjs,js,ts", "format": "prettier --write . && TIMING=1 eslint src __tests__ --ext mjs,js,ts --fix", "fmt": "yarn format", @@ -13,12 +13,12 @@ "changelog": "git cliff --prepend ./CHANGELOG.md -u -c ./cliff.toml -r ../../ --include-path 'packages/proxy/*'", "release": "cliff-jumper" }, - "main": "./dist/index.cjs", + "main": "./dist/index.js", "module": "./dist/index.mjs", "typings": "./dist/index.d.ts", "exports": { "import": "./dist/index.mjs", - "require": "./dist/index.cjs", + "require": "./dist/index.js", "types": "./dist/index.d.ts" }, "directories": { @@ -69,10 +69,9 @@ "eslint": "^8.23.0", "eslint-config-neon": "^0.1.23", "prettier": "^2.7.1", - "rollup-plugin-typescript2": "^0.33.0", "supertest": "^6.2.4", + "tsup": "^6.2.3", "typescript": "^4.8.2", - "unbuild": "^0.8.9", "vitest": "^0.22.1" }, "engines": { diff --git a/packages/proxy/tsup.config.js b/packages/proxy/tsup.config.js new file mode 100644 index 000000000000..2e679fd0ad1b --- /dev/null +++ b/packages/proxy/tsup.config.js @@ -0,0 +1,3 @@ +import { createTsupConfig } from '../../tsup.config.js'; + +export default createTsupConfig(); diff --git a/packages/rest/build.config.ts b/packages/rest/build.config.ts deleted file mode 100644 index 7a3607acb5fe..000000000000 --- a/packages/rest/build.config.ts +++ /dev/null @@ -1,3 +0,0 @@ -import { createUnbuildConfig } from '../../build.config'; - -export default createUnbuildConfig(); diff --git a/packages/rest/package.json b/packages/rest/package.json index 6d117b113b98..51d2b8120561 100644 --- a/packages/rest/package.json +++ b/packages/rest/package.json @@ -4,7 +4,7 @@ "description": "The REST API for discord.js", "scripts": { "test": "vitest run", - "build": "unbuild", + "build": "tsup", "lint": "prettier --check . && TIMING=1 eslint src __tests__ --ext mjs,js,ts", "format": "prettier --write . && TIMING=1 eslint src __tests__ --ext mjs,js,ts --fix", "fmt": "yarn format", @@ -13,12 +13,12 @@ "changelog": "git cliff --prepend ./CHANGELOG.md -u -c ./cliff.toml -r ../../ --include-path 'packages/rest/*'", "release": "cliff-jumper" }, - "main": "./dist/index.cjs", + "main": "./dist/index.js", "module": "./dist/index.mjs", "typings": "./dist/index.d.ts", "exports": { "import": "./dist/index.mjs", - "require": "./dist/index.cjs", + "require": "./dist/index.js", "types": "./dist/index.d.ts" }, "directories": { @@ -70,9 +70,8 @@ "eslint": "^8.23.0", "eslint-config-neon": "^0.1.23", "prettier": "^2.7.1", - "rollup-plugin-typescript2": "^0.33.0", + "tsup": "^6.2.3", "typescript": "^4.8.2", - "unbuild": "^0.8.9", "vitest": "^0.22.1" }, "engines": { diff --git a/packages/rest/tsup.config.js b/packages/rest/tsup.config.js new file mode 100644 index 000000000000..2e679fd0ad1b --- /dev/null +++ b/packages/rest/tsup.config.js @@ -0,0 +1,3 @@ +import { createTsupConfig } from '../../tsup.config.js'; + +export default createTsupConfig(); diff --git a/packages/scripts/build.config.ts b/packages/scripts/build.config.ts deleted file mode 100644 index b023ea788ed4..000000000000 --- a/packages/scripts/build.config.ts +++ /dev/null @@ -1,3 +0,0 @@ -import { createUnbuildConfig } from '../../build.config'; - -export default createUnbuildConfig({ minify: true }); diff --git a/packages/scripts/package.json b/packages/scripts/package.json index 3311fa02dd29..507c4c4b0d25 100644 --- a/packages/scripts/package.json +++ b/packages/scripts/package.json @@ -4,17 +4,17 @@ "description": "A set of scripts that we use for our workflows", "private": true, "scripts": { - "build": "unbuild", + "build": "tsup", "lint": "prettier --check . && TIMING=1 eslint src --ext mjs,js,ts", "format": "prettier --write . && TIMING=1 eslint src --ext mjs,js,ts --fix", "fmt": "yarn format" }, - "main": "./dist/index.cjs", + "main": "./dist/index.js", "module": "./dist/index.mjs", "types": "./dist/index.d.ts", "exports": { "import": "./dist/index.mjs", - "require": "./dist/index.cjs", + "require": "./dist/index.js", "types": "./dist/index.d.ts" }, "directories": { @@ -55,9 +55,8 @@ "eslint": "^8.23.0", "eslint-config-neon": "^0.1.23", "prettier": "^2.7.1", - "rollup-plugin-typescript2": "^0.33.0", + "tsup": "^6.2.3", "typescript": "^4.8.2", - "unbuild": "^0.8.9", "vitest": "^0.22.1" }, "engines": { diff --git a/packages/scripts/tsup.config.js b/packages/scripts/tsup.config.js new file mode 100644 index 000000000000..b1adcf0cfe62 --- /dev/null +++ b/packages/scripts/tsup.config.js @@ -0,0 +1,5 @@ +import { createTsupConfig } from '../../tsup.config.js'; + +export default createTsupConfig({ + minify: true, +}); diff --git a/packages/voice/build.config.ts b/packages/voice/build.config.ts deleted file mode 100644 index 7a3607acb5fe..000000000000 --- a/packages/voice/build.config.ts +++ /dev/null @@ -1,3 +0,0 @@ -import { createUnbuildConfig } from '../../build.config'; - -export default createUnbuildConfig(); diff --git a/packages/voice/package.json b/packages/voice/package.json index 03eb654713de..413db450d93a 100644 --- a/packages/voice/package.json +++ b/packages/voice/package.json @@ -3,7 +3,7 @@ "version": "0.12.0", "description": "Implementation of the Discord Voice API for node.js", "scripts": { - "build": "unbuild", + "build": "tsup", "test": "jest --coverage", "lint": "prettier --check . && TIMING=1 eslint src __tests__ --ext mjs,js,ts", "format": "prettier --write . && TIMING=1 eslint src __tests__ --ext mjs,js,ts --fix", @@ -13,12 +13,12 @@ "changelog": "git cliff --prepend ./CHANGELOG.md -u -c ./cliff.toml -r ../../ --include-path 'packages/voice/*'", "release": "cliff-jumper" }, - "main": "./dist/index.cjs", + "main": "./dist/index.js", "module": "./dist/index.mjs", "typings": "./dist/index.d.ts", "exports": { "import": "./dist/index.mjs", - "require": "./dist/index.cjs", + "require": "./dist/index.js", "types": "./dist/index.d.ts" }, "directories": { @@ -65,7 +65,7 @@ "@discordjs/docgen": "workspace:^", "@favware/cliff-jumper": "^1.8.7", "@microsoft/api-extractor": "^7.29.5", - "@types/jest": "^28.1.8", + "@types/jest": "^29.0.0", "@types/node": "^16.11.56", "downlevel-dts": "^0.10.1", "eslint": "^8.23.0", @@ -74,10 +74,9 @@ "jest-websocket-mock": "^2.4.0", "mock-socket": "^9.1.5", "prettier": "^2.7.1", - "rollup-plugin-typescript2": "^0.33.0", + "tsup": "^6.2.3", "tweetnacl": "^1.0.3", - "typescript": "^4.8.2", - "unbuild": "^0.8.9" + "typescript": "^4.8.2" }, "engines": { "node": ">=16.9.0" diff --git a/packages/voice/tsup.config.js b/packages/voice/tsup.config.js new file mode 100644 index 000000000000..2e679fd0ad1b --- /dev/null +++ b/packages/voice/tsup.config.js @@ -0,0 +1,3 @@ +import { createTsupConfig } from '../../tsup.config.js'; + +export default createTsupConfig(); diff --git a/packages/website/package.json b/packages/website/package.json index 07836bea735a..22b1d6884057 100644 --- a/packages/website/package.json +++ b/packages/website/package.json @@ -40,7 +40,7 @@ "homepage": "https://discord.js.org", "dependencies": { "@discordjs/api-extractor-utils": "workspace:^", - "@emotion/react": "^11.10.0", + "@emotion/react": "^11.10.4", "@emotion/server": "^11.10.0", "@mantine/core": "^5.2.4", "@mantine/hooks": "^5.2.4", @@ -72,9 +72,9 @@ "@types/node": "^16.11.56", "@types/react-dom": "^18.0.6", "@types/react-syntax-highlighter": "^15.5.5", - "@unocss/cli": "^0.45.13", - "@unocss/preset-web-fonts": "^0.45.13", - "@unocss/reset": "^0.45.13", + "@unocss/cli": "^0.45.14", + "@unocss/preset-web-fonts": "^0.45.14", + "@unocss/reset": "^0.45.14", "@vitejs/plugin-react": "^2.0.1", "@vitest/coverage-c8": "^0.22.1", "concurrently": "^7.3.0", @@ -83,8 +83,8 @@ "happy-dom": "^6.0.4", "prettier": "^2.7.1", "typescript": "^4.8.2", - "unocss": "^0.45.13", - "vercel": "^28.2.0", + "unocss": "^0.45.14", + "vercel": "^28.2.2", "vitest": "^0.22.1" }, "engines": { diff --git a/packages/ws/__tests__/strategy/WorkerShardingStrategy.test.ts b/packages/ws/__tests__/strategy/WorkerShardingStrategy.test.ts index 4ba57fa837a2..79e402675437 100644 --- a/packages/ws/__tests__/strategy/WorkerShardingStrategy.test.ts +++ b/packages/ws/__tests__/strategy/WorkerShardingStrategy.test.ts @@ -177,7 +177,7 @@ test('spawn, connect, send a message, session info, and destroy', async () => { await manager.connect(); expect(mockConstructor).toHaveBeenCalledWith( - expect.stringContaining('worker.cjs'), + expect.stringContaining('worker.js'), expect.objectContaining({ workerData: expect.objectContaining({ shardIds: [0, 1] }) }), ); diff --git a/packages/ws/build.config.ts b/packages/ws/build.config.ts deleted file mode 100644 index e3de92140fb4..000000000000 --- a/packages/ws/build.config.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { createUnbuildConfig } from '../../build.config'; - -export default createUnbuildConfig({ - entries: [ - { builder: 'rollup', input: 'src/index' }, - { builder: 'rollup', input: 'src/strategies/sharding/worker' }, - ], - externals: ['zlib-sync'], -}); diff --git a/packages/ws/package.json b/packages/ws/package.json index 7be8d2199fcf..c4a7a4eb509d 100644 --- a/packages/ws/package.json +++ b/packages/ws/package.json @@ -4,7 +4,7 @@ "description": "Wrapper around Discord's gateway", "scripts": { "test": "vitest run", - "build": "unbuild", + "build": "tsup", "lint": "prettier --check . && TIMING=1 eslint src __tests__ --ext mjs,js,ts", "format": "prettier --write . && TIMING=1 eslint src __tests__ --ext mjs,js,ts --fix", "docs": "downlevel-dts dist docs/dist --to=3.7 && docgen -i src/index.ts -c docs/index.json -o docs/docs.json --typescript && api-extractor run --local", @@ -12,12 +12,12 @@ "changelog": "git cliff --prepend ./CHANGELOG.md -u -c ./cliff.toml -r ../../ --include-path 'packages/ws/*'", "release": "cliff-jumper" }, - "main": "./dist/index.cjs", + "main": "./dist/index.js", "module": "./dist/index.mjs", "typings": "./dist/index.d.ts", "exports": { "import": "./dist/index.mjs", - "require": "./dist/index.cjs", + "require": "./dist/index.js", "types": "./dist/index.d.ts" }, "directories": { @@ -72,9 +72,8 @@ "eslint-config-neon": "^0.1.23", "mock-socket": "^9.1.5", "prettier": "^2.7.1", - "rollup-plugin-typescript2": "^0.33.0", + "tsup": "^6.2.3", "typescript": "^4.8.2", - "unbuild": "^0.8.9", "undici": "^5.10.0", "vitest": "^0.22.1", "zlib-sync": "^0.1.7" diff --git a/packages/ws/src/strategies/sharding/WorkerShardingStrategy.ts b/packages/ws/src/strategies/sharding/WorkerShardingStrategy.ts index 47d767e8af24..b74e66628eb9 100644 --- a/packages/ws/src/strategies/sharding/WorkerShardingStrategy.ts +++ b/packages/ws/src/strategies/sharding/WorkerShardingStrategy.ts @@ -92,7 +92,7 @@ export class WorkerShardingStrategy implements IShardingStrategy { shardIds: slice, }; - const worker = new Worker(join(__dirname, 'worker.cjs'), { workerData }); + const worker = new Worker(join(__dirname, 'worker.js'), { workerData }); await once(worker, 'online'); worker .on('error', (err) => { diff --git a/packages/ws/tsup.config.js b/packages/ws/tsup.config.js new file mode 100644 index 000000000000..5ef6ebd928e8 --- /dev/null +++ b/packages/ws/tsup.config.js @@ -0,0 +1,9 @@ +import { createTsupConfig } from '../../tsup.config.js'; + +export default createTsupConfig({ + entry: { + index: 'src/index.ts', + worker: 'src/strategies/sharding/worker.ts', + }, + external: ['zlib-sync'], +}); diff --git a/tsup.config.js b/tsup.config.js new file mode 100644 index 000000000000..dc60e3984e80 --- /dev/null +++ b/tsup.config.js @@ -0,0 +1,35 @@ +import { defineConfig } from 'tsup'; + +export function createTsupConfig({ + entry = ['src/index.ts'], + external = [], + noExternal = [], + platform = 'node', + format = ['esm', 'cjs'], + target = 'es2022', + skipNodeModulesBundle = true, + clean = true, + shims = true, + minify = false, + splitting = false, + keepNames = true, + dts = true, + sourcemap = true, +} = {}) { + return defineConfig({ + entry, + external, + noExternal, + platform, + format, + skipNodeModulesBundle, + target, + clean, + shims, + minify, + splitting, + keepNames, + dts, + sourcemap, + }); +} diff --git a/yarn.lock b/yarn.lock index d82d20ebb2e3..81251d0d9fe7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -112,7 +112,7 @@ __metadata: languageName: node linkType: hard -"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.10.4, @babel/code-frame@npm:^7.12.13, @babel/code-frame@npm:^7.16.7, @babel/code-frame@npm:^7.18.6": +"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.10.4, @babel/code-frame@npm:^7.12.13, @babel/code-frame@npm:^7.18.6": version: 7.18.6 resolution: "@babel/code-frame@npm:7.18.6" dependencies: @@ -1438,13 +1438,6 @@ __metadata: languageName: node linkType: hard -"@babel/standalone@npm:^7.18.11": - version: 7.18.12 - resolution: "@babel/standalone@npm:7.18.12" - checksum: 802d28e619073963393a7cc75a0b251198ec99d2632236b5809c1c990e7722bf6ac1e05d5792e793e24fa81dfca0cbe54c0b6ae883f95a8bd398120fe06ce144 - languageName: node - linkType: hard - "@babel/template@npm:^7.18.10, @babel/template@npm:^7.18.6, @babel/template@npm:^7.3.3": version: 7.18.10 resolution: "@babel/template@npm:7.18.10" @@ -1743,10 +1736,9 @@ __metadata: eslint: ^8.23.0 eslint-config-neon: ^0.1.23 prettier: ^2.7.1 - rollup-plugin-typescript2: ^0.33.0 tslib: ^2.4.0 + tsup: ^6.2.3 typescript: ^4.8.2 - unbuild: ^0.8.9 vitest: ^0.22.1 languageName: unknown linkType: soft @@ -1761,9 +1753,8 @@ __metadata: eslint: ^8.23.0 eslint-config-neon: ^0.1.23 prettier: ^2.7.1 - rollup-plugin-typescript2: ^0.33.0 + tsup: ^6.2.3 typescript: ^4.8.2 - unbuild: ^0.8.9 languageName: unknown linkType: soft @@ -1783,11 +1774,10 @@ __metadata: eslint-config-neon: ^0.1.23 fast-deep-equal: ^3.1.3 prettier: ^2.7.1 - rollup-plugin-typescript2: ^0.33.0 ts-mixer: ^6.0.1 tslib: ^2.4.0 + tsup: ^6.2.3 typescript: ^4.8.2 - unbuild: ^0.8.9 vitest: ^0.22.1 languageName: unknown linkType: soft @@ -1805,9 +1795,8 @@ __metadata: eslint: ^8.23.0 eslint-config-neon: ^0.1.23 prettier: ^2.7.1 - rollup-plugin-typescript2: ^0.33.0 + tsup: ^6.2.3 typescript: ^4.8.2 - unbuild: ^0.8.9 vitest: ^0.22.1 languageName: unknown linkType: soft @@ -1820,13 +1809,12 @@ __metadata: "@commitlint/config-angular": ^17.1.0 "@favware/cliff-jumper": ^1.8.7 "@favware/npm-deprecate": ^1.0.5 - "@types/is-ci": ^3.0.0 conventional-changelog-cli: ^2.2.2 - fast-glob: ^3.2.11 husky: ^8.0.1 is-ci: ^3.0.1 lint-staged: ^13.0.3 - turbo: ^1.4.3 + tsup: ^6.2.3 + turbo: ^1.4.4 typescript: ^4.8.2 languageName: unknown linkType: soft @@ -1843,13 +1831,12 @@ __metadata: eslint-config-neon: ^0.1.23 jsdoc-to-markdown: ^7.1.1 prettier: ^2.7.1 - rollup-plugin-typescript2: ^0.33.0 tslib: ^2.4.0 - typedoc: ^0.23.11 + tsup: ^6.2.3 + typedoc: ^0.23.13 typescript: ^4.8.2 - unbuild: ^0.8.9 bin: - docgen: ./dist/cli.cjs + docgen: ./dist/cli.js languageName: unknown linkType: soft @@ -1863,10 +1850,9 @@ __metadata: eslint: ^8.23.0 eslint-config-neon: ^0.1.23 prettier: ^2.7.1 - rollup-plugin-typescript2: ^0.33.0 tslib: ^2.4.0 + tsup: ^6.2.3 typescript: ^4.8.2 - unbuild: ^0.8.9 languageName: unknown linkType: soft @@ -1885,11 +1871,10 @@ __metadata: eslint: ^8.23.0 eslint-config-neon: ^0.1.23 prettier: ^2.7.1 - rollup-plugin-typescript2: ^0.33.0 supertest: ^6.2.4 tslib: ^2.4.0 + tsup: ^6.2.3 typescript: ^4.8.2 - unbuild: ^0.8.9 undici: ^5.10.0 vitest: ^0.22.1 languageName: unknown @@ -1913,10 +1898,9 @@ __metadata: eslint-config-neon: ^0.1.23 file-type: ^18.0.0 prettier: ^2.7.1 - rollup-plugin-typescript2: ^0.33.0 tslib: ^2.4.0 + tsup: ^6.2.3 typescript: ^4.8.2 - unbuild: ^0.8.9 undici: ^5.10.0 vitest: ^0.22.1 languageName: unknown @@ -1935,10 +1919,9 @@ __metadata: eslint: ^8.23.0 eslint-config-neon: ^0.1.23 prettier: ^2.7.1 - rollup-plugin-typescript2: ^0.33.0 tslib: ^2.4.0 + tsup: ^6.2.3 typescript: ^4.8.2 - unbuild: ^0.8.9 vitest: ^0.22.1 languageName: unknown linkType: soft @@ -1953,7 +1936,7 @@ __metadata: "@discordjs/docgen": "workspace:^" "@favware/cliff-jumper": ^1.8.7 "@microsoft/api-extractor": ^7.29.5 - "@types/jest": ^28.1.8 + "@types/jest": ^29.0.0 "@types/node": ^16.11.56 "@types/ws": ^8.5.3 discord-api-types: ^0.37.5 @@ -1965,11 +1948,10 @@ __metadata: mock-socket: ^9.1.5 prettier: ^2.7.1 prism-media: ^1.3.4 - rollup-plugin-typescript2: ^0.33.0 tslib: ^2.4.0 + tsup: ^6.2.3 tweetnacl: ^1.0.3 typescript: ^4.8.2 - unbuild: ^0.8.9 ws: ^8.8.1 languageName: unknown linkType: soft @@ -1979,7 +1961,7 @@ __metadata: resolution: "@discordjs/website@workspace:packages/website" dependencies: "@discordjs/api-extractor-utils": "workspace:^" - "@emotion/react": ^11.10.0 + "@emotion/react": ^11.10.4 "@emotion/server": ^11.10.0 "@mantine/core": ^5.2.4 "@mantine/hooks": ^5.2.4 @@ -1994,9 +1976,9 @@ __metadata: "@types/node": ^16.11.56 "@types/react-dom": ^18.0.6 "@types/react-syntax-highlighter": ^15.5.5 - "@unocss/cli": ^0.45.13 - "@unocss/preset-web-fonts": ^0.45.13 - "@unocss/reset": ^0.45.13 + "@unocss/cli": ^0.45.14 + "@unocss/preset-web-fonts": ^0.45.14 + "@unocss/reset": ^0.45.14 "@vitejs/plugin-react": ^2.0.1 "@vitest/coverage-c8": ^0.22.1 "@vscode/codicons": ^0.0.32 @@ -2020,8 +2002,8 @@ __metadata: shiki: ^0.11.1 swr: ^1.3.0 typescript: ^4.8.2 - unocss: ^0.45.13 - vercel: ^28.2.0 + unocss: ^0.45.14 + vercel: ^28.2.2 vitest: ^0.22.1 languageName: unknown linkType: soft @@ -2046,10 +2028,9 @@ __metadata: eslint-config-neon: ^0.1.23 mock-socket: ^9.1.5 prettier: ^2.7.1 - rollup-plugin-typescript2: ^0.33.0 tslib: ^2.4.0 + tsup: ^6.2.3 typescript: ^4.8.2 - unbuild: ^0.8.9 undici: ^5.10.0 vitest: ^0.22.1 ws: ^8.8.1 @@ -2138,14 +2119,15 @@ __metadata: languageName: node linkType: hard -"@emotion/react@npm:^11.10.0": - version: 11.10.0 - resolution: "@emotion/react@npm:11.10.0" +"@emotion/react@npm:^11.10.4": + version: 11.10.4 + resolution: "@emotion/react@npm:11.10.4" dependencies: "@babel/runtime": ^7.18.3 "@emotion/babel-plugin": ^11.10.0 "@emotion/cache": ^11.10.0 "@emotion/serialize": ^1.1.0 + "@emotion/use-insertion-effect-with-fallbacks": ^1.0.0 "@emotion/utils": ^1.2.0 "@emotion/weak-memoize": ^0.3.0 hoist-non-react-statics: ^3.3.1 @@ -2157,7 +2139,7 @@ __metadata: optional: true "@types/react": optional: true - checksum: 6d692e43ff53fd3b87d4a000a9aec2ef080d66a0ebb7d0b9529c46d1e6bc1ac8a27c7dd74c27a8274ec1df1e3c960b78c035fca5d8a901a48eda445c6163b33b + checksum: 7555f6a1840c71d841386be2ec98ebfd6399923bd6a61247c7b07283f9a056f57e83c4fdd9ea7a7fcc3d88e5e04bb03168b4f0557934bcd501c88af4db16e1e0 languageName: node linkType: hard @@ -2205,6 +2187,15 @@ __metadata: languageName: node linkType: hard +"@emotion/use-insertion-effect-with-fallbacks@npm:^1.0.0": + version: 1.0.0 + resolution: "@emotion/use-insertion-effect-with-fallbacks@npm:1.0.0" + peerDependencies: + react: ">=16.8.0" + checksum: 4f06a3b48258c832aa8022a262572061a31ff078d377e9164cccc99951309d70f4466e774fe704461b2f8715007a82ed625a54a5c7a127c89017d3ce3187d4f1 + languageName: node + linkType: hard + "@emotion/utils@npm:^1.2.0": version: 1.2.0 resolution: "@emotion/utils@npm:1.2.0" @@ -2237,9 +2228,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-loong64@npm:0.15.5": - version: 0.15.5 - resolution: "@esbuild/linux-loong64@npm:0.15.5" +"@esbuild/linux-loong64@npm:0.15.6": + version: 0.15.6 + resolution: "@esbuild/linux-loong64@npm:0.15.6" conditions: os=linux & cpu=loong64 languageName: node linkType: hard @@ -2497,15 +2488,6 @@ __metadata: languageName: node linkType: hard -"@jest/expect-utils@npm:^28.1.3": - version: 28.1.3 - resolution: "@jest/expect-utils@npm:28.1.3" - dependencies: - jest-get-type: ^28.0.2 - checksum: 808ea3a68292a7e0b95490fdd55605c430b4cf209ea76b5b61bfb2a1badcb41bc046810fe4e364bd5fe04663978aa2bd73d8f8465a761dd7c655aeb44cf22987 - languageName: node - linkType: hard - "@jest/expect-utils@npm:^29.0.1": version: 29.0.1 resolution: "@jest/expect-utils@npm:29.0.1" @@ -2665,20 +2647,6 @@ __metadata: languageName: node linkType: hard -"@jest/types@npm:^28.1.3": - version: 28.1.3 - resolution: "@jest/types@npm:28.1.3" - dependencies: - "@jest/schemas": ^28.1.3 - "@types/istanbul-lib-coverage": ^2.0.0 - "@types/istanbul-reports": ^3.0.0 - "@types/node": "*" - "@types/yargs": ^17.0.8 - chalk: ^4.0.0 - checksum: 1e258d9c063fcf59ebc91e46d5ea5984674ac7ae6cae3e50aa780d22b4405bf2c925f40350bf30013839eb5d4b5e521d956ddf8f3b7c78debef0e75a07f57350 - languageName: node - linkType: hard - "@jest/types@npm:^29.0.1": version: 29.0.1 resolution: "@jest/types@npm:29.0.1" @@ -3298,87 +3266,7 @@ __metadata: languageName: node linkType: hard -"@rollup/plugin-alias@npm:^3.1.9": - version: 3.1.9 - resolution: "@rollup/plugin-alias@npm:3.1.9" - dependencies: - slash: ^3.0.0 - peerDependencies: - rollup: ^1.20.0||^2.0.0 - checksum: cefae9dfb7c30f0dc78d24f4ad9ccb8a0878397b313c0fa9d0f519667394941c58a930d968d841e25aee43b0fb892d1e3f7edbb55e8197f191cce7da6a50b882 - languageName: node - linkType: hard - -"@rollup/plugin-commonjs@npm:^22.0.2": - version: 22.0.2 - resolution: "@rollup/plugin-commonjs@npm:22.0.2" - dependencies: - "@rollup/pluginutils": ^3.1.0 - commondir: ^1.0.1 - estree-walker: ^2.0.1 - glob: ^7.1.6 - is-reference: ^1.2.1 - magic-string: ^0.25.7 - resolve: ^1.17.0 - peerDependencies: - rollup: ^2.68.0 - checksum: 70098a4b91afe3f164f5d27cba65edf148c5ed146ee0e07a964b66940681553ac77391083114cdcf9427e7f2706bf0d61eab310b3a2caeab83b7452c0292fcae - languageName: node - linkType: hard - -"@rollup/plugin-json@npm:^4.1.0": - version: 4.1.0 - resolution: "@rollup/plugin-json@npm:4.1.0" - dependencies: - "@rollup/pluginutils": ^3.0.8 - peerDependencies: - rollup: ^1.20.0 || ^2.0.0 - checksum: 867bc9339b4ccf0b9ff3b2617a95b3b8920115163f86c8e3b1f068a14ca25949472d3c05b09a5ac38ca0fe2185756e34617eaeb219d4a2b6e2307c501c7d4552 - languageName: node - linkType: hard - -"@rollup/plugin-node-resolve@npm:^13.3.0": - version: 13.3.0 - resolution: "@rollup/plugin-node-resolve@npm:13.3.0" - dependencies: - "@rollup/pluginutils": ^3.1.0 - "@types/resolve": 1.17.1 - deepmerge: ^4.2.2 - is-builtin-module: ^3.1.0 - is-module: ^1.0.0 - resolve: ^1.19.0 - peerDependencies: - rollup: ^2.42.0 - checksum: ec5418e6b3c23a9e30683056b3010e9d325316dcfae93fbc673ae64dad8e56a2ce761c15c48f5e2dcfe0c822fdc4a4905ee6346e3dcf90603ba2260afef5a5e6 - languageName: node - linkType: hard - -"@rollup/plugin-replace@npm:^4.0.0": - version: 4.0.0 - resolution: "@rollup/plugin-replace@npm:4.0.0" - dependencies: - "@rollup/pluginutils": ^3.1.0 - magic-string: ^0.25.7 - peerDependencies: - rollup: ^1.20.0 || ^2.0.0 - checksum: b61701e612661a46da06ca88f390c3839b586708abc0329a476411b90aa8ac59fe94437ede4c3fe53fea268b3054ea9d7d4ee851d7bd0cb7a5f06906002067cb - languageName: node - linkType: hard - -"@rollup/pluginutils@npm:^3.0.8, @rollup/pluginutils@npm:^3.1.0": - version: 3.1.0 - resolution: "@rollup/pluginutils@npm:3.1.0" - dependencies: - "@types/estree": 0.0.39 - estree-walker: ^1.0.1 - picomatch: ^2.2.2 - peerDependencies: - rollup: ^1.20.0||^2.0.0 - checksum: 8be16e27863c219edbb25a4e6ec2fe0e1e451d9e917b6a43cf2ae5bc025a6b8faaa40f82a6e53b66d0de37b58ff472c6c3d57a83037ae635041f8df959d6d9aa - languageName: node - linkType: hard - -"@rollup/pluginutils@npm:^4.1.1, @rollup/pluginutils@npm:^4.1.2, @rollup/pluginutils@npm:^4.2.1": +"@rollup/pluginutils@npm:^4.2.1": version: 4.2.1 resolution: "@rollup/pluginutils@npm:4.2.1" dependencies: @@ -3761,13 +3649,6 @@ __metadata: languageName: node linkType: hard -"@types/estree@npm:0.0.39": - version: 0.0.39 - resolution: "@types/estree@npm:0.0.39" - checksum: 412fb5b9868f2c418126451821833414189b75cc6bf84361156feed733e3d92ec220b9d74a89e52722e03d5e241b2932732711b7497374a404fad49087adc248 - languageName: node - linkType: hard - "@types/form-data@npm:0.0.33": version: 0.0.33 resolution: "@types/form-data@npm:0.0.33" @@ -3795,15 +3676,6 @@ __metadata: languageName: node linkType: hard -"@types/is-ci@npm:^3.0.0": - version: 3.0.0 - resolution: "@types/is-ci@npm:3.0.0" - dependencies: - ci-info: ^3.1.0 - checksum: 7c1f1f16c1fa2134de7400d82766c83fa76057261ba890628af77a09382ebb92d945bb077b98cfcf3d40ab1469c9ffbd2278112867edbe57aa655f53547eb139 - languageName: node - linkType: hard - "@types/istanbul-lib-coverage@npm:*, @types/istanbul-lib-coverage@npm:^2.0.0, @types/istanbul-lib-coverage@npm:^2.0.1": version: 2.0.4 resolution: "@types/istanbul-lib-coverage@npm:2.0.4" @@ -3829,13 +3701,13 @@ __metadata: languageName: node linkType: hard -"@types/jest@npm:^28.1.8": - version: 28.1.8 - resolution: "@types/jest@npm:28.1.8" +"@types/jest@npm:^29.0.0": + version: 29.0.0 + resolution: "@types/jest@npm:29.0.0" dependencies: - expect: ^28.0.0 - pretty-format: ^28.0.0 - checksum: d4cd36158a3ae1d4b42cc48a77c95de74bc56b84cf81e09af3ee0399c34f4a7da8ab9e787570f10004bd642f9e781b0033c37327fbbf4a8e4b6e37e8ee3693a7 + expect: ^29.0.0 + pretty-format: ^29.0.0 + checksum: b20c4b38c7c963862d82c21c0a1ae2b96015afb1511c835da43e8fd53659ca884f8103a2159be2ce74d2888472a1ac93d20d08ec1ac0970385cbb74c46d47585 languageName: node linkType: hard @@ -4043,15 +3915,6 @@ __metadata: languageName: node linkType: hard -"@types/resolve@npm:1.17.1": - version: 1.17.1 - resolution: "@types/resolve@npm:1.17.1" - dependencies: - "@types/node": "*" - checksum: dc6a6df507656004e242dcb02c784479deca516d5f4b58a1707e708022b269ae147e1da0521f3e8ad0d63638869d87e0adc023f0bd5454aa6f72ac66c7525cf5 - languageName: node - linkType: hard - "@types/responselike@npm:^1.0.0": version: 1.0.0 resolution: "@types/responselike@npm:1.0.0" @@ -4316,24 +4179,24 @@ __metadata: languageName: node linkType: hard -"@unocss/astro@npm:0.45.13": - version: 0.45.13 - resolution: "@unocss/astro@npm:0.45.13" +"@unocss/astro@npm:0.45.14": + version: 0.45.14 + resolution: "@unocss/astro@npm:0.45.14" dependencies: - "@unocss/core": 0.45.13 - "@unocss/reset": 0.45.13 - "@unocss/vite": 0.45.13 - checksum: e73f844038e21cd4dbf40bd0f163b188da8a3a839f4258f5be22a7da6187277c49066949480826ea69173b0bb95c0d24423f6f6b289e6e27d2b766d771c9d821 + "@unocss/core": 0.45.14 + "@unocss/reset": 0.45.14 + "@unocss/vite": 0.45.14 + checksum: d11bbfdd20dae490b229200e9e6bbb85b73b9f4817548545fc932fe6795a99a3dd351ea577567a999e69c3be395d31b18e9a55671594c0395f8b15f5b2c5e5ea languageName: node linkType: hard -"@unocss/cli@npm:0.45.13, @unocss/cli@npm:^0.45.13": - version: 0.45.13 - resolution: "@unocss/cli@npm:0.45.13" +"@unocss/cli@npm:0.45.14, @unocss/cli@npm:^0.45.14": + version: 0.45.14 + resolution: "@unocss/cli@npm:0.45.14" dependencies: - "@unocss/config": 0.45.13 - "@unocss/core": 0.45.13 - "@unocss/preset-uno": 0.45.13 + "@unocss/config": 0.45.14 + "@unocss/core": 0.45.14 + "@unocss/preset-uno": 0.45.14 cac: ^6.7.12 chokidar: ^3.5.3 colorette: ^2.0.19 @@ -4343,215 +4206,215 @@ __metadata: perfect-debounce: ^0.1.3 bin: unocss: bin/unocss.mjs - checksum: b618b36634079b34efaa8cd826a41c097448d73beeae22f604f8869142e0b3355e5e905b552ea2e65b42028fcb855049d712d858a9305f6271a85c391b5e34b1 + checksum: be25873a1d06465dd2154d0fc7b04e61a63ac6d1d468ffbad70d1030fa5b138ce45773f612d095bf67edd025f42617548cc64cc729f6bdd6d45dc37ad788e817 languageName: node linkType: hard -"@unocss/config@npm:0.45.13": - version: 0.45.13 - resolution: "@unocss/config@npm:0.45.13" +"@unocss/config@npm:0.45.14": + version: 0.45.14 + resolution: "@unocss/config@npm:0.45.14" dependencies: - "@unocss/core": 0.45.13 + "@unocss/core": 0.45.14 unconfig: ^0.3.5 - checksum: 907741d67d89221feda749397a95c7546795d0e3ff6e8ceb8ce6baed33b0ad4dcd262edbe8c101b66cbf24222d8d91f1244597e028d18a7f9dc5ce63efa6f744 + checksum: 1fb374e82d20668f67ad71825007624375832a3e982d6eee9c55a11eea4e2c5e1528b57a74935a03decc9d2054fc5b868eda742ce11466f32a5e64d67ef1e243 languageName: node linkType: hard -"@unocss/core@npm:0.45.13": - version: 0.45.13 - resolution: "@unocss/core@npm:0.45.13" - checksum: d4cc6d934c4f28220ec1994cf7abc63a395948deb59dcd1b8d005b3b4f35c167ee9147bf31bd93620512a8e652da303abb0b02e5e4c964ff87699dcbd84b8d65 +"@unocss/core@npm:0.45.14": + version: 0.45.14 + resolution: "@unocss/core@npm:0.45.14" + checksum: d4fcffeebead539f3131ab202c5064087523e65ec08f24a77a7926ba29c77677742d7a5518bfe33a92a9f3c220c68dd3be351b640b09a740cdb4671571dfe63e languageName: node linkType: hard -"@unocss/inspector@npm:0.45.13": - version: 0.45.13 - resolution: "@unocss/inspector@npm:0.45.13" +"@unocss/inspector@npm:0.45.14": + version: 0.45.14 + resolution: "@unocss/inspector@npm:0.45.14" dependencies: gzip-size: ^6.0.0 sirv: ^2.0.2 - checksum: 8d6898752170747a2221401786047e1481152959756e1d9f8c35b870777e00dab045910fc2796c3136b44d16c03d5223fa4e636f060a88e84616f6c5549f1207 + checksum: 5baf9b138acf441e65f8b331431995568fb2fe18ea9086a3390bf99b9b49ae7420d39003a867b130532aab85bd8274e9131ffd0144014db88d1ba43441fc12d6 languageName: node linkType: hard -"@unocss/preset-attributify@npm:0.45.13": - version: 0.45.13 - resolution: "@unocss/preset-attributify@npm:0.45.13" +"@unocss/preset-attributify@npm:0.45.14": + version: 0.45.14 + resolution: "@unocss/preset-attributify@npm:0.45.14" dependencies: - "@unocss/core": 0.45.13 - checksum: 3f2b9713c0d74bb15addf4fd0bcd7fa9ccb47c46f2092b206e018a5ca4a84f147890423b6ec07ff0e5b5ae97dbed68808e051d5acf1e81092fdda049630359b1 + "@unocss/core": 0.45.14 + checksum: a3300e5c0ac69a71d583163c135022eebf316a8ad0b9019380f70051e27361f779ef1934a2508495300c132a5b2fb8c6b45fc5ef4e55aff273e3e62a909e61cd languageName: node linkType: hard -"@unocss/preset-icons@npm:0.45.13": - version: 0.45.13 - resolution: "@unocss/preset-icons@npm:0.45.13" +"@unocss/preset-icons@npm:0.45.14": + version: 0.45.14 + resolution: "@unocss/preset-icons@npm:0.45.14" dependencies: "@iconify/utils": ^1.0.33 - "@unocss/core": 0.45.13 + "@unocss/core": 0.45.14 ohmyfetch: ^0.4.18 - checksum: 529a21a1c3f115990d1053d0bc6435a5ed33f334dc50a9b90098dd608d7be180fa176e0d1f99552cfe70ac5669e89a3e64cc28397006f2f590ee553f7bba1446 + checksum: 8af8f24e659d47fedc00b7c3cc74625ed388c9f61630468fffa9b5ead7b14fba0df078ebb347d2855fbaa061e3c2b14a328e5680c6e2a9af65049b6c64358f78 languageName: node linkType: hard -"@unocss/preset-mini@npm:0.45.13": - version: 0.45.13 - resolution: "@unocss/preset-mini@npm:0.45.13" +"@unocss/preset-mini@npm:0.45.14": + version: 0.45.14 + resolution: "@unocss/preset-mini@npm:0.45.14" dependencies: - "@unocss/core": 0.45.13 - checksum: 8f602d1e75214a9353749d12dbee5cab9428310515dc2325e4775ecaea01ba4d02f249be33ba5fbb0e63536ddf7f9d75c46fc84f21174f5e69b862f49580c269 + "@unocss/core": 0.45.14 + checksum: 159a3df87c377fbdfe2cb5e3c8acc5515ad320ce232a7f13fd85e2bf36e45d119c62659574ff920645379d4df29a9f58018356ca7194b8e0e593c98fbab7421f languageName: node linkType: hard -"@unocss/preset-tagify@npm:0.45.13": - version: 0.45.13 - resolution: "@unocss/preset-tagify@npm:0.45.13" +"@unocss/preset-tagify@npm:0.45.14": + version: 0.45.14 + resolution: "@unocss/preset-tagify@npm:0.45.14" dependencies: - "@unocss/core": 0.45.13 - checksum: d707a2d9c9fe10c3b65da2d2562ddf825c3bfc13a6984e7cad108ff5d13594c2b5322ee242b30c617cb8c25c6efb1c3827963af2fca9c62cefbd3d651452c670 + "@unocss/core": 0.45.14 + checksum: 958c0afc5b7b7187617abbf5895fdf2fd573c18d9c1d38db7b68f8b29adc95c4dc1edd86efce8ee4cef19af2c627bbbf6b731a33e83eb5e75fa6909ae4b058ea languageName: node linkType: hard -"@unocss/preset-typography@npm:0.45.13": - version: 0.45.13 - resolution: "@unocss/preset-typography@npm:0.45.13" +"@unocss/preset-typography@npm:0.45.14": + version: 0.45.14 + resolution: "@unocss/preset-typography@npm:0.45.14" dependencies: - "@unocss/core": 0.45.13 - checksum: 3dbd910f570d425ea8dff5b7d26b7f62d8d8a5d38807846ccafa722a172871b2b7a4046a49f24ffcce97cd532afe95982349410c04f1f0b672c98be24e5f50fc + "@unocss/core": 0.45.14 + checksum: b43293cd89ddfa2f69bf8bbc23b8cb0b9a86b3433528210a002fdbf84dbe281ecf44e72ea0f856b3a09f1e58ef9767cfd84c833d1260c8eb9f5774b63507e9ae languageName: node linkType: hard -"@unocss/preset-uno@npm:0.45.13": - version: 0.45.13 - resolution: "@unocss/preset-uno@npm:0.45.13" +"@unocss/preset-uno@npm:0.45.14": + version: 0.45.14 + resolution: "@unocss/preset-uno@npm:0.45.14" dependencies: - "@unocss/core": 0.45.13 - "@unocss/preset-mini": 0.45.13 - "@unocss/preset-wind": 0.45.13 - checksum: a708bdd95b8474e615cdae3a0983266cd1be0e4f9eef1260a3c49cccaa668bd9559e845d4dd9204d1576b36a6c1c1a6af9f96ab6ea25537bac62d0241077a06b + "@unocss/core": 0.45.14 + "@unocss/preset-mini": 0.45.14 + "@unocss/preset-wind": 0.45.14 + checksum: 8692581daf4d39265505010108b7a96e8a477f68521fcb88ff45bb2091330647d9ab180f5e16b35265738ad0907d266b073880a2b5c8e36e19ea9a5aab3fff07 languageName: node linkType: hard -"@unocss/preset-web-fonts@npm:0.45.13, @unocss/preset-web-fonts@npm:^0.45.13": - version: 0.45.13 - resolution: "@unocss/preset-web-fonts@npm:0.45.13" +"@unocss/preset-web-fonts@npm:0.45.14, @unocss/preset-web-fonts@npm:^0.45.14": + version: 0.45.14 + resolution: "@unocss/preset-web-fonts@npm:0.45.14" dependencies: - "@unocss/core": 0.45.13 + "@unocss/core": 0.45.14 ohmyfetch: ^0.4.18 - checksum: e519f2b750e3531a100bdd822953b44c8526fcfbd5040a305537e21d6cc2a9a979f41c7473aefa7b9305202349b9081d723bd0e127cbd78b431a3767c38eab49 + checksum: fe0faa7ff148b726ca95bcaaca2f6ab8eb9cbafac90231906a1bfdaffb2b10ac359ca3e8966d0a0e892beee2cbf6fa9db0d82b69eac476e07b06fa04955414b4 languageName: node linkType: hard -"@unocss/preset-wind@npm:0.45.13": - version: 0.45.13 - resolution: "@unocss/preset-wind@npm:0.45.13" +"@unocss/preset-wind@npm:0.45.14": + version: 0.45.14 + resolution: "@unocss/preset-wind@npm:0.45.14" dependencies: - "@unocss/core": 0.45.13 - "@unocss/preset-mini": 0.45.13 - checksum: b7b18b79b5619fc9adf517adfa51a9a456996e494462c9dca6d18e49c90fde775565c0596ecde59e94b055982a08768e915a0e7cb9d5784bca7acf41d84598bc + "@unocss/core": 0.45.14 + "@unocss/preset-mini": 0.45.14 + checksum: 67bc7e5abca9e459e4f4b9cb4ae3e0bd040f5ef7a4e5c902f8192fb694328de04798af083cc87385934ef2d34754c230f452c36c5e7f5b0f1f339cb967f6efaa languageName: node linkType: hard -"@unocss/reset@npm:0.45.13, @unocss/reset@npm:^0.45.13": - version: 0.45.13 - resolution: "@unocss/reset@npm:0.45.13" - checksum: 8323f4f1305dc944e36ea4723a2491ff7a3ecd55c649cea65ac9b2d4c7d085b7ec131d351f0eae06748bf239a87b6d5ba6964232b80935921cdc1e17e6c2344b +"@unocss/reset@npm:0.45.14, @unocss/reset@npm:^0.45.14": + version: 0.45.14 + resolution: "@unocss/reset@npm:0.45.14" + checksum: 72c5e6335258afbeb4f78266829ae5546ecc8a4e8077103aaf4d5502fa8342472a1595cd3d757ace305a4beaea4d9f73ba9eea88c4850c9ba5220eea5c7d4364 languageName: node linkType: hard -"@unocss/scope@npm:0.45.13": - version: 0.45.13 - resolution: "@unocss/scope@npm:0.45.13" - checksum: 231379070977e718d2a280c276c8105c4bb4c78e42c4fdf51e858f054195bec7609ae8a74968e81ed77b21c9eddf3136be47a92276a0e9e2bc8f16dd951963aa +"@unocss/scope@npm:0.45.14": + version: 0.45.14 + resolution: "@unocss/scope@npm:0.45.14" + checksum: 829062dfe112b9cf6940db39b722f1e81597ac8bc1f94f63adfc761a456a2c525557e4270acd70b69bb13daba0020481436d65bd364374434cfcc9f360bcdac5 languageName: node linkType: hard -"@unocss/transformer-attributify-jsx@npm:0.45.13": - version: 0.45.13 - resolution: "@unocss/transformer-attributify-jsx@npm:0.45.13" +"@unocss/transformer-attributify-jsx@npm:0.45.14": + version: 0.45.14 + resolution: "@unocss/transformer-attributify-jsx@npm:0.45.14" dependencies: - "@unocss/core": 0.45.13 - checksum: d1199713377ff22f5ac35195792092c5149f530e6964016a77665c55f0ea13383c51bc4d073c5ea4f610ea00691c92efcd388cb699d06814bc0cb4ead6c9ff7a + "@unocss/core": 0.45.14 + checksum: 24a5258606d1430c014f6e0ab4227de9590414cf913c52c7964b845cedc6a06865d17ee21f0b884f98f4e9bbe8dd64de6493b0cf42692b02e1f25f3817d1df30 languageName: node linkType: hard -"@unocss/transformer-compile-class@npm:0.45.13": - version: 0.45.13 - resolution: "@unocss/transformer-compile-class@npm:0.45.13" +"@unocss/transformer-compile-class@npm:0.45.14": + version: 0.45.14 + resolution: "@unocss/transformer-compile-class@npm:0.45.14" dependencies: - "@unocss/core": 0.45.13 - checksum: b8c1f8ff7a2404e17d3055707c811bfcfbae657c079d13640cb3aafd3b7d0eec5047440710820f392de577831ec40f8be3b5fd7489b168ac28ef99fcaf747fd2 + "@unocss/core": 0.45.14 + checksum: 4f035e7691d2ab60de784edeb36de12e79fbd2db87f46803b54f524d032eb55b910be0a1265e78f371fe12c3cae9df05108696e782ff7ae268e29f03a0399b6e languageName: node linkType: hard -"@unocss/transformer-directives@npm:0.45.13": - version: 0.45.13 - resolution: "@unocss/transformer-directives@npm:0.45.13" +"@unocss/transformer-directives@npm:0.45.14": + version: 0.45.14 + resolution: "@unocss/transformer-directives@npm:0.45.14" dependencies: - "@unocss/core": 0.45.13 + "@unocss/core": 0.45.14 css-tree: ^2.2.1 - checksum: 064b356ec6dfe1a06b981ea83370f8790100e17f56fb7a311522a4316bd4a382456036d8b5f6b0832648ba69fe1fc81ebe1e1d701db50840ca2c0674e426f447 + checksum: ae4f2f7c614ba173a088fc738d785f8fa9eeed24874dcc0ff929e0a31e30ab4e556dc77af85325b55eb5a78d5ae10b3c68e45eb9212558dae1f57a26d862f6d0 languageName: node linkType: hard -"@unocss/transformer-variant-group@npm:0.45.13": - version: 0.45.13 - resolution: "@unocss/transformer-variant-group@npm:0.45.13" +"@unocss/transformer-variant-group@npm:0.45.14": + version: 0.45.14 + resolution: "@unocss/transformer-variant-group@npm:0.45.14" dependencies: - "@unocss/core": 0.45.13 - checksum: efe5a1d951180a0b772de554de64c7a749e3a09d47d5810f9b467f11052d17661fe3b06a1754fb3e395738227b83d1b76ab4343502d6c3309745dfe1a4b5eab9 + "@unocss/core": 0.45.14 + checksum: 2ba168e2b4365eba49659b3919021dc3689452196dbab75d7e4c6cefc4130ff292c1d2829205f536b9c55f588509ceec88951ab326fa5dc47866beb014dd9995 languageName: node linkType: hard -"@unocss/vite@npm:0.45.13": - version: 0.45.13 - resolution: "@unocss/vite@npm:0.45.13" +"@unocss/vite@npm:0.45.14": + version: 0.45.14 + resolution: "@unocss/vite@npm:0.45.14" dependencies: "@ampproject/remapping": ^2.2.0 "@rollup/pluginutils": ^4.2.1 - "@unocss/config": 0.45.13 - "@unocss/core": 0.45.13 - "@unocss/inspector": 0.45.13 - "@unocss/scope": 0.45.13 - "@unocss/transformer-directives": 0.45.13 + "@unocss/config": 0.45.14 + "@unocss/core": 0.45.14 + "@unocss/inspector": 0.45.14 + "@unocss/scope": 0.45.14 + "@unocss/transformer-directives": 0.45.14 magic-string: ^0.26.2 peerDependencies: vite: ^2.9.0 || ^3.0.0-0 - checksum: 4e1818759bc2170118d8e5058ac0a10338d409f4c23f6703306afb939bafb8f8fcf16f830cc2d70266c749802f54564095f103d9381ae905f92ae6d49287d85e + checksum: b1eb25d372a1893d828b0e2421743ae56b4419e2ca7e8208f9fbd408a2da42b0a06656d546d51dd1d729a0d40bb22d41e8b29450f9dd058608ebf2828a51490f languageName: node linkType: hard -"@vercel/build-utils@npm:5.4.0": - version: 5.4.0 - resolution: "@vercel/build-utils@npm:5.4.0" - checksum: 815942c08a1e446591557b6b19fd4f1c86b9bc51860816a8c03f186515d1a18432c2d6e21b1845bc077881a1101eb3fc532b48b643ddf22fbc9007690682768f +"@vercel/build-utils@npm:5.4.1": + version: 5.4.1 + resolution: "@vercel/build-utils@npm:5.4.1" + checksum: 8204c501daf95de8911c14efcc15587dad460eb859bc27e733fd1bba542b51039e3e8d8e452853a7030301352d376712932f99a5c7d12a42b2b847d80a434979 languageName: node linkType: hard -"@vercel/go@npm:2.2.3": - version: 2.2.3 - resolution: "@vercel/go@npm:2.2.3" - checksum: e499848a3b07fd63400b20c5496883d1f20daedea2a587eba11b233833fa65c78a33bf1e33cbcad855dda709c8b718b2933b24d4afa91d4adea20c03d406667e +"@vercel/go@npm:2.2.4": + version: 2.2.4 + resolution: "@vercel/go@npm:2.2.4" + checksum: 72781d59ffc034583532415513aa7885a40d9b288321095cbe4632fbc82b39c1917e8633b8d6deb86fc970fe68d854cc528390d46c7f4434a0c7d2c7e79e0c8d languageName: node linkType: hard -"@vercel/hydrogen@npm:0.0.16": - version: 0.0.16 - resolution: "@vercel/hydrogen@npm:0.0.16" - checksum: 2b3043dabef88624cf481f884fcb97d12f695a742b643dcb72b30ebf546c3a2cc0427c538ac44ebf490e4397ec4601d12590a02096e7eb2095be9ba232051d90 +"@vercel/hydrogen@npm:0.0.17": + version: 0.0.17 + resolution: "@vercel/hydrogen@npm:0.0.17" + checksum: 4a833a74e0ae1169ebf1bb97b4f71b670a85d7222856d9710dbf6a734babfa0af84951d85daddd533a5e16798ab76ec2c5efb707c5f7aefe23f5c23144f17294 languageName: node linkType: hard -"@vercel/next@npm:3.1.22": - version: 3.1.22 - resolution: "@vercel/next@npm:3.1.22" - checksum: a3ceca8bc467dd831d7ea34597f21dc0a1b9affc0d59546f4f367cba2b20b60eaa043c2ff528a98c7438b35b088dccbf61a3e07d515b62a47d422d6ba9a48263 +"@vercel/next@npm:3.1.24": + version: 3.1.24 + resolution: "@vercel/next@npm:3.1.24" + checksum: 10fc200141685d9b2d5d5b3a26253fc21a44f37117b47896eed7f030c08367e4eebe246017843a99327b8904f13179388ff63d1c069f6edb876e168c69a3a8f0 languageName: node linkType: hard -"@vercel/nft@npm:0.22.0": - version: 0.22.0 - resolution: "@vercel/nft@npm:0.22.0" +"@vercel/nft@npm:0.22.1": + version: 0.22.1 + resolution: "@vercel/nft@npm:0.22.1" dependencies: "@mapbox/node-pre-gyp": ^1.0.5 acorn: ^8.6.0 @@ -4566,7 +4429,7 @@ __metadata: rollup-pluginutils: ^2.8.2 bin: nft: out/cli.js - checksum: 06f649f76a0ffae0c02964cfe66acb9b722de054e0317829f0a992dfb9b941328cfa7cb722af847b8d641b87497c994cb315ecf2c7d1fbe8c15176af57676887 + checksum: 05850e25a8e3a4fd7b76d911e8d14f97403f58cf8f92fbae630adaeee99589a167f288b87b3edc5901bf87bf2adad689059f43755c448930d1d087cdb66cec93 languageName: node linkType: hard @@ -4577,13 +4440,13 @@ __metadata: languageName: node linkType: hard -"@vercel/node@npm:2.5.11": - version: 2.5.11 - resolution: "@vercel/node@npm:2.5.11" +"@vercel/node@npm:2.5.13": + version: 2.5.13 + resolution: "@vercel/node@npm:2.5.13" dependencies: "@edge-runtime/vm": 1.1.0-beta.23 "@types/node": "*" - "@vercel/build-utils": 5.4.0 + "@vercel/build-utils": 5.4.1 "@vercel/node-bridge": 3.0.0 "@vercel/static-config": 2.0.3 edge-runtime: 1.1.0-beta.23 @@ -4592,34 +4455,34 @@ __metadata: node-fetch: 2.6.7 ts-node: 8.9.1 typescript: 4.3.4 - checksum: 14f970251089b60ab056edd1771990cb83dacfad990180994372d625e5a10a141070163c1f5061e017f60c559d227d2355ac218eb92cd3b2e1cb1e80974e0368 + checksum: 35a4e6bb984284d29603bbceb32b4087c01016b41aff6a957f6e305957a549c03b9c2008f323faed6b83c8ba572afef77fb1394e9b79c3f6139c465e611be007 languageName: node linkType: hard -"@vercel/python@npm:3.1.12": - version: 3.1.12 - resolution: "@vercel/python@npm:3.1.12" - checksum: cd2d3a3da806250aea6879ddc8dfe74c0a1b96fae1040abd084e55bea8a399895e4397f16ca4291561608c2190c996cfc06c11ee7fc5df1489be13f740c27c04 +"@vercel/python@npm:3.1.13": + version: 3.1.13 + resolution: "@vercel/python@npm:3.1.13" + checksum: f73db32e47f78c5f176a68a3a09e69c70832be40ffdf524289a6b67f14e6eb83108b196893fd8ced21354fd11cd64916de1cf56959b5010b9ee46f108db347ec languageName: node linkType: hard -"@vercel/redwood@npm:1.0.20": - version: 1.0.20 - resolution: "@vercel/redwood@npm:1.0.20" +"@vercel/redwood@npm:1.0.22": + version: 1.0.22 + resolution: "@vercel/redwood@npm:1.0.22" dependencies: - "@vercel/nft": 0.22.0 + "@vercel/nft": 0.22.1 "@vercel/routing-utils": 2.0.2 semver: 6.1.1 - checksum: 96f148361274e06ab39123a945d020caa8649115606e123f67352cb9303ee7c5c9ad1bdbfca8d90a03d8754de3678745fe20bd56c521ca8c37a10b2d7f0bec0c + checksum: 564abb22bf58cfa9c53e561cf637759c507e574bea0a6abd39ea809198d022ba19f6801dabc28601045360399af8b45d2b9bc522211d6e281f54bb922fadc7f7 languageName: node linkType: hard -"@vercel/remix@npm:1.0.21": - version: 1.0.21 - resolution: "@vercel/remix@npm:1.0.21" +"@vercel/remix@npm:1.0.23": + version: 1.0.23 + resolution: "@vercel/remix@npm:1.0.23" dependencies: - "@vercel/nft": 0.22.0 - checksum: 79d96113195abe47cf477063a83c3517e3f31c3c447bb5f7ee9c31e3a49089b438d087e49e7b33bed4708d409d648675a1042a0e6770b94919ddb9a45dffadeb + "@vercel/nft": 0.22.1 + checksum: b8860519bb1b51e77b814460e8c69e378ca2800c8ec3e47277f933a89b7f6e87b0b74844d78d61c410063e4d8b845030ef0cba52325a34d656b573b93e5365f2 languageName: node linkType: hard @@ -4636,17 +4499,17 @@ __metadata: languageName: node linkType: hard -"@vercel/ruby@npm:1.3.29": - version: 1.3.29 - resolution: "@vercel/ruby@npm:1.3.29" - checksum: ecf3752075f6f4fb8ae2277a1bad2ae65081c597ac0b2ca8b3e2fd9c2d7e9da2350c86276dc10a2863fce23c71fe5a7389b3a800b6eb83ce7c9f98eb56ab2527 +"@vercel/ruby@npm:1.3.30": + version: 1.3.30 + resolution: "@vercel/ruby@npm:1.3.30" + checksum: ec2c0a36f6a260a2881e3f6f219a92fbcb57b53a86976f521f11760f79a7991cf891786364e7a1514e673a76ab4bae8113bf7e106f8fd2238d93f39b369b1c9a languageName: node linkType: hard -"@vercel/static-build@npm:1.0.20": - version: 1.0.20 - resolution: "@vercel/static-build@npm:1.0.20" - checksum: d51a0b662134ed129c69bcbd0a78ea91048cd7a44d228d5d53ad7fb834a157b6767c0eea5dcfdb9a0fbaf71d03a3c840b043d6271ebc2f759b39e6f3d03d9dc9 +"@vercel/static-build@npm:1.0.21": + version: 1.0.21 + resolution: "@vercel/static-build@npm:1.0.21" + checksum: b493d712048e706eece154266ed920d0bb73450837a5c3b647da78d6c441cb93f3575c4f5678192133c0fce373d2fe63226c740cfdc1c0cd240e1faa47e4f74e languageName: node linkType: hard @@ -4906,6 +4769,13 @@ __metadata: languageName: node linkType: hard +"any-promise@npm:^1.0.0": + version: 1.3.0 + resolution: "any-promise@npm:1.3.0" + checksum: 0ee8a9bdbe882c90464d75d1f55cf027f5458650c4bd1f0467e65aec38ccccda07ca5844969ee77ed46d04e7dded3eaceb027e8d32f385688523fe305fa7e1de + languageName: node + linkType: hard + "anymatch@npm:^3.0.3, anymatch@npm:~3.1.2": version: 3.1.2 resolution: "anymatch@npm:3.1.2" @@ -5570,6 +5440,17 @@ __metadata: languageName: node linkType: hard +"bundle-require@npm:^3.1.0": + version: 3.1.0 + resolution: "bundle-require@npm:3.1.0" + dependencies: + load-tsconfig: ^0.2.0 + peerDependencies: + esbuild: ">=0.13" + checksum: e433dd18ad2ccaf9d210040c5ce300a8c60f4caf0472856fd5162ec407f7b5b3e0559e540aa92b7381a18a6ff2b45bbe9270dc2fd7ace17e445e72a9cbc7fa95 + languageName: node + linkType: hard + "c8@npm:^7.12.0": version: 7.12.0 resolution: "c8@npm:7.12.0" @@ -5772,13 +5653,6 @@ __metadata: languageName: node linkType: hard -"chalk@npm:^5.0.1": - version: 5.0.1 - resolution: "chalk@npm:5.0.1" - checksum: 7b45300372b908f0471fbf7389ce2f5de8d85bb949026fd51a1b95b10d0ed32c7ed5aab36dd5e9d2bf3191867909b4404cef75c5f4d2d1daeeacd301dd280b76 - languageName: node - linkType: hard - "char-regex@npm:^1.0.2": version: 1.0.2 resolution: "char-regex@npm:1.0.2" @@ -5851,7 +5725,7 @@ __metadata: languageName: node linkType: hard -"chokidar@npm:^3.5.3": +"chokidar@npm:^3.5.1, chokidar@npm:^3.5.3": version: 3.5.3 resolution: "chokidar@npm:3.5.3" dependencies: @@ -5891,7 +5765,7 @@ __metadata: languageName: node linkType: hard -"ci-info@npm:^3.1.0, ci-info@npm:^3.2.0, ci-info@npm:^3.3.2": +"ci-info@npm:^3.2.0, ci-info@npm:^3.3.2": version: 3.3.2 resolution: "ci-info@npm:3.3.2" checksum: fd81f1edd2d3b0f6cb077b2e84365136d87b9db8c055928c1ad69da8a76c2c2f19cba8ea51b90238302157ca927f91f92b653e933f2398dde4867500f08d6e62 @@ -6182,6 +6056,13 @@ __metadata: languageName: node linkType: hard +"commander@npm:^4.0.0": + version: 4.1.1 + resolution: "commander@npm:4.1.1" + checksum: d7b9913ff92cae20cb577a4ac6fcc121bd6223319e54a40f51a14740a681ad5c574fd29a57da478a5f234a6fa6c52cbf0b7c641353e03c648b1ae85ba670b977 + languageName: node + linkType: hard + "commander@npm:^9.3.0, commander@npm:^9.4.0": version: 9.4.0 resolution: "commander@npm:9.4.0" @@ -6203,13 +6084,6 @@ __metadata: languageName: node linkType: hard -"commondir@npm:^1.0.1": - version: 1.0.1 - resolution: "commondir@npm:1.0.1" - checksum: 59715f2fc456a73f68826285718503340b9f0dd89bfffc42749906c5cf3d4277ef11ef1cca0350d0e79204f00f1f6d83851ececc9095dc88512a697ac0b9bdcb - languageName: node - linkType: hard - "compare-func@npm:^2.0.0": version: 2.0.0 resolution: "compare-func@npm:2.0.0" @@ -6713,7 +6587,7 @@ __metadata: languageName: node linkType: hard -"debug@npm:4, debug@npm:^4.0.0, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.2, debug@npm:^4.3.3, debug@npm:^4.3.4": +"debug@npm:4, debug@npm:^4.0.0, debug@npm:^4.1.0, debug@npm:^4.1.1, 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" dependencies: @@ -6841,7 +6715,7 @@ __metadata: languageName: node linkType: hard -"defu@npm:^6.0.0, defu@npm:^6.1.0": +"defu@npm:^6.0.0": version: 6.1.0 resolution: "defu@npm:6.1.0" checksum: 403a9ba8ab08dca87576eb062fa488c5cc58a5c8601955f2325dcc077c23da8a68169591505654a8c70ca3567006516ef92a4c44129643f928c58c4e7281195a @@ -7325,13 +7199,6 @@ __metadata: languageName: node linkType: hard -"es-module-lexer@npm:^0.9.3": - version: 0.9.3 - resolution: "es-module-lexer@npm:0.9.3" - checksum: 84bbab23c396281db2c906c766af58b1ae2a1a2599844a504df10b9e8dc77ec800b3211fdaa133ff700f5703d791198807bba25d9667392d27a5e9feda344da8 - languageName: node - linkType: hard - "es-shim-unscopables@npm:^1.0.0": version: 1.0.0 resolution: "es-shim-unscopables@npm:1.0.0" @@ -7366,9 +7233,9 @@ __metadata: languageName: node linkType: hard -"esbuild-android-64@npm:0.15.5": - version: 0.15.5 - resolution: "esbuild-android-64@npm:0.15.5" +"esbuild-android-64@npm:0.15.6": + version: 0.15.6 + resolution: "esbuild-android-64@npm:0.15.6" conditions: os=android & cpu=x64 languageName: node linkType: hard @@ -7387,9 +7254,9 @@ __metadata: languageName: node linkType: hard -"esbuild-android-arm64@npm:0.15.5": - version: 0.15.5 - resolution: "esbuild-android-arm64@npm:0.15.5" +"esbuild-android-arm64@npm:0.15.6": + version: 0.15.6 + resolution: "esbuild-android-arm64@npm:0.15.6" conditions: os=android & cpu=arm64 languageName: node linkType: hard @@ -7408,9 +7275,9 @@ __metadata: languageName: node linkType: hard -"esbuild-darwin-64@npm:0.15.5": - version: 0.15.5 - resolution: "esbuild-darwin-64@npm:0.15.5" +"esbuild-darwin-64@npm:0.15.6": + version: 0.15.6 + resolution: "esbuild-darwin-64@npm:0.15.6" conditions: os=darwin & cpu=x64 languageName: node linkType: hard @@ -7429,9 +7296,9 @@ __metadata: languageName: node linkType: hard -"esbuild-darwin-arm64@npm:0.15.5": - version: 0.15.5 - resolution: "esbuild-darwin-arm64@npm:0.15.5" +"esbuild-darwin-arm64@npm:0.15.6": + version: 0.15.6 + resolution: "esbuild-darwin-arm64@npm:0.15.6" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard @@ -7450,9 +7317,9 @@ __metadata: languageName: node linkType: hard -"esbuild-freebsd-64@npm:0.15.5": - version: 0.15.5 - resolution: "esbuild-freebsd-64@npm:0.15.5" +"esbuild-freebsd-64@npm:0.15.6": + version: 0.15.6 + resolution: "esbuild-freebsd-64@npm:0.15.6" conditions: os=freebsd & cpu=x64 languageName: node linkType: hard @@ -7471,9 +7338,9 @@ __metadata: languageName: node linkType: hard -"esbuild-freebsd-arm64@npm:0.15.5": - version: 0.15.5 - resolution: "esbuild-freebsd-arm64@npm:0.15.5" +"esbuild-freebsd-arm64@npm:0.15.6": + version: 0.15.6 + resolution: "esbuild-freebsd-arm64@npm:0.15.6" conditions: os=freebsd & cpu=arm64 languageName: node linkType: hard @@ -7492,9 +7359,9 @@ __metadata: languageName: node linkType: hard -"esbuild-linux-32@npm:0.15.5": - version: 0.15.5 - resolution: "esbuild-linux-32@npm:0.15.5" +"esbuild-linux-32@npm:0.15.6": + version: 0.15.6 + resolution: "esbuild-linux-32@npm:0.15.6" conditions: os=linux & cpu=ia32 languageName: node linkType: hard @@ -7513,9 +7380,9 @@ __metadata: languageName: node linkType: hard -"esbuild-linux-64@npm:0.15.5": - version: 0.15.5 - resolution: "esbuild-linux-64@npm:0.15.5" +"esbuild-linux-64@npm:0.15.6": + version: 0.15.6 + resolution: "esbuild-linux-64@npm:0.15.6" conditions: os=linux & cpu=x64 languageName: node linkType: hard @@ -7534,9 +7401,9 @@ __metadata: languageName: node linkType: hard -"esbuild-linux-arm64@npm:0.15.5": - version: 0.15.5 - resolution: "esbuild-linux-arm64@npm:0.15.5" +"esbuild-linux-arm64@npm:0.15.6": + version: 0.15.6 + resolution: "esbuild-linux-arm64@npm:0.15.6" conditions: os=linux & cpu=arm64 languageName: node linkType: hard @@ -7555,9 +7422,9 @@ __metadata: languageName: node linkType: hard -"esbuild-linux-arm@npm:0.15.5": - version: 0.15.5 - resolution: "esbuild-linux-arm@npm:0.15.5" +"esbuild-linux-arm@npm:0.15.6": + version: 0.15.6 + resolution: "esbuild-linux-arm@npm:0.15.6" conditions: os=linux & cpu=arm languageName: node linkType: hard @@ -7576,9 +7443,9 @@ __metadata: languageName: node linkType: hard -"esbuild-linux-mips64le@npm:0.15.5": - version: 0.15.5 - resolution: "esbuild-linux-mips64le@npm:0.15.5" +"esbuild-linux-mips64le@npm:0.15.6": + version: 0.15.6 + resolution: "esbuild-linux-mips64le@npm:0.15.6" conditions: os=linux & cpu=mips64el languageName: node linkType: hard @@ -7597,9 +7464,9 @@ __metadata: languageName: node linkType: hard -"esbuild-linux-ppc64le@npm:0.15.5": - version: 0.15.5 - resolution: "esbuild-linux-ppc64le@npm:0.15.5" +"esbuild-linux-ppc64le@npm:0.15.6": + version: 0.15.6 + resolution: "esbuild-linux-ppc64le@npm:0.15.6" conditions: os=linux & cpu=ppc64 languageName: node linkType: hard @@ -7618,9 +7485,9 @@ __metadata: languageName: node linkType: hard -"esbuild-linux-riscv64@npm:0.15.5": - version: 0.15.5 - resolution: "esbuild-linux-riscv64@npm:0.15.5" +"esbuild-linux-riscv64@npm:0.15.6": + version: 0.15.6 + resolution: "esbuild-linux-riscv64@npm:0.15.6" conditions: os=linux & cpu=riscv64 languageName: node linkType: hard @@ -7639,9 +7506,9 @@ __metadata: languageName: node linkType: hard -"esbuild-linux-s390x@npm:0.15.5": - version: 0.15.5 - resolution: "esbuild-linux-s390x@npm:0.15.5" +"esbuild-linux-s390x@npm:0.15.6": + version: 0.15.6 + resolution: "esbuild-linux-s390x@npm:0.15.6" conditions: os=linux & cpu=s390x languageName: node linkType: hard @@ -7660,9 +7527,9 @@ __metadata: languageName: node linkType: hard -"esbuild-netbsd-64@npm:0.15.5": - version: 0.15.5 - resolution: "esbuild-netbsd-64@npm:0.15.5" +"esbuild-netbsd-64@npm:0.15.6": + version: 0.15.6 + resolution: "esbuild-netbsd-64@npm:0.15.6" conditions: os=netbsd & cpu=x64 languageName: node linkType: hard @@ -7681,9 +7548,9 @@ __metadata: languageName: node linkType: hard -"esbuild-openbsd-64@npm:0.15.5": - version: 0.15.5 - resolution: "esbuild-openbsd-64@npm:0.15.5" +"esbuild-openbsd-64@npm:0.15.6": + version: 0.15.6 + resolution: "esbuild-openbsd-64@npm:0.15.6" conditions: os=openbsd & cpu=x64 languageName: node linkType: hard @@ -7702,9 +7569,9 @@ __metadata: languageName: node linkType: hard -"esbuild-sunos-64@npm:0.15.5": - version: 0.15.5 - resolution: "esbuild-sunos-64@npm:0.15.5" +"esbuild-sunos-64@npm:0.15.6": + version: 0.15.6 + resolution: "esbuild-sunos-64@npm:0.15.6" conditions: os=sunos & cpu=x64 languageName: node linkType: hard @@ -7723,9 +7590,9 @@ __metadata: languageName: node linkType: hard -"esbuild-windows-32@npm:0.15.5": - version: 0.15.5 - resolution: "esbuild-windows-32@npm:0.15.5" +"esbuild-windows-32@npm:0.15.6": + version: 0.15.6 + resolution: "esbuild-windows-32@npm:0.15.6" conditions: os=win32 & cpu=ia32 languageName: node linkType: hard @@ -7744,9 +7611,9 @@ __metadata: languageName: node linkType: hard -"esbuild-windows-64@npm:0.15.5": - version: 0.15.5 - resolution: "esbuild-windows-64@npm:0.15.5" +"esbuild-windows-64@npm:0.15.6": + version: 0.15.6 + resolution: "esbuild-windows-64@npm:0.15.6" conditions: os=win32 & cpu=x64 languageName: node linkType: hard @@ -7765,9 +7632,9 @@ __metadata: languageName: node linkType: hard -"esbuild-windows-arm64@npm:0.15.5": - version: 0.15.5 - resolution: "esbuild-windows-arm64@npm:0.15.5" +"esbuild-windows-arm64@npm:0.15.6": + version: 0.15.6 + resolution: "esbuild-windows-arm64@npm:0.15.6" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard @@ -7917,31 +7784,31 @@ __metadata: languageName: node linkType: hard -"esbuild@npm:^0.15.5": - version: 0.15.5 - resolution: "esbuild@npm:0.15.5" - dependencies: - "@esbuild/linux-loong64": 0.15.5 - esbuild-android-64: 0.15.5 - esbuild-android-arm64: 0.15.5 - esbuild-darwin-64: 0.15.5 - esbuild-darwin-arm64: 0.15.5 - esbuild-freebsd-64: 0.15.5 - esbuild-freebsd-arm64: 0.15.5 - esbuild-linux-32: 0.15.5 - esbuild-linux-64: 0.15.5 - esbuild-linux-arm: 0.15.5 - esbuild-linux-arm64: 0.15.5 - esbuild-linux-mips64le: 0.15.5 - esbuild-linux-ppc64le: 0.15.5 - esbuild-linux-riscv64: 0.15.5 - esbuild-linux-s390x: 0.15.5 - esbuild-netbsd-64: 0.15.5 - esbuild-openbsd-64: 0.15.5 - esbuild-sunos-64: 0.15.5 - esbuild-windows-32: 0.15.5 - esbuild-windows-64: 0.15.5 - esbuild-windows-arm64: 0.15.5 +"esbuild@npm:^0.15.1": + version: 0.15.6 + resolution: "esbuild@npm:0.15.6" + dependencies: + "@esbuild/linux-loong64": 0.15.6 + esbuild-android-64: 0.15.6 + esbuild-android-arm64: 0.15.6 + esbuild-darwin-64: 0.15.6 + esbuild-darwin-arm64: 0.15.6 + esbuild-freebsd-64: 0.15.6 + esbuild-freebsd-arm64: 0.15.6 + esbuild-linux-32: 0.15.6 + esbuild-linux-64: 0.15.6 + esbuild-linux-arm: 0.15.6 + esbuild-linux-arm64: 0.15.6 + esbuild-linux-mips64le: 0.15.6 + esbuild-linux-ppc64le: 0.15.6 + esbuild-linux-riscv64: 0.15.6 + esbuild-linux-s390x: 0.15.6 + esbuild-netbsd-64: 0.15.6 + esbuild-openbsd-64: 0.15.6 + esbuild-sunos-64: 0.15.6 + esbuild-windows-32: 0.15.6 + esbuild-windows-64: 0.15.6 + esbuild-windows-arm64: 0.15.6 dependenciesMeta: "@esbuild/linux-loong64": optional: true @@ -7987,7 +7854,7 @@ __metadata: optional: true bin: esbuild: bin/esbuild - checksum: fc7f5df6542bd18dee1e61c58049ddf3d6b508d8d67eabcba455f7dbb560552e012f169a8afa2f209de554a206935fedf30d576aacdc2b46cb4da229181968fb + checksum: e351cd5647311aa857fa30fb3fa7055b39d7c82ebd96a7abd2657e42e62b5960aeb1dd9466ba97699ab1a1fbc0f0217b26b266fe5e9301590855c53b3133282f languageName: node linkType: hard @@ -8568,13 +8435,6 @@ __metadata: languageName: node linkType: hard -"estree-walker@npm:^1.0.1": - version: 1.0.1 - resolution: "estree-walker@npm:1.0.1" - checksum: 7e70da539691f6db03a08e7ce94f394ce2eef4180e136d251af299d41f92fb2d28ebcd9a6e393e3728d7970aeb5358705ddf7209d52fbcb2dd4693f95dcf925f - languageName: node - linkType: hard - "estree-walker@npm:^3.0.0": version: 3.0.1 resolution: "estree-walker@npm:3.0.1" @@ -8644,20 +8504,7 @@ __metadata: languageName: node linkType: hard -"expect@npm:^28.0.0": - version: 28.1.3 - resolution: "expect@npm:28.1.3" - dependencies: - "@jest/expect-utils": ^28.1.3 - jest-get-type: ^28.0.2 - jest-matcher-utils: ^28.1.3 - jest-message-util: ^28.1.3 - jest-util: ^28.1.3 - checksum: 101e0090de300bcafedb7dbfd19223368a2251ce5fe0105bbb6de5720100b89fb6b64290ebfb42febc048324c76d6a4979cdc4b61eb77747857daf7a5de9b03d - languageName: node - linkType: hard - -"expect@npm:^29.0.1": +"expect@npm:^29.0.0, expect@npm:^29.0.1": version: 29.0.1 resolution: "expect@npm:29.0.1" dependencies: @@ -8805,17 +8652,6 @@ __metadata: languageName: node linkType: hard -"find-cache-dir@npm:^3.3.2": - version: 3.3.2 - resolution: "find-cache-dir@npm:3.3.2" - dependencies: - commondir: ^1.0.1 - make-dir: ^3.0.2 - pkg-dir: ^4.1.0 - checksum: 1e61c2e64f5c0b1c535bd85939ae73b0e5773142713273818cc0b393ee3555fb0fd44e1a5b161b8b6c3e03e98c2fcc9c227d784850a13a90a8ab576869576817 - languageName: node - linkType: hard - "find-replace@npm:^3.0.0": version: 3.0.0 resolution: "find-replace@npm:3.0.0" @@ -9330,6 +9166,20 @@ __metadata: languageName: node linkType: hard +"glob@npm:7.1.6": + version: 7.1.6 + resolution: "glob@npm:7.1.6" + dependencies: + fs.realpath: ^1.0.0 + inflight: ^1.0.4 + inherits: 2 + minimatch: ^3.0.4 + once: ^1.3.0 + path-is-absolute: ^1.0.0 + checksum: 351d549dd90553b87c2d3f90ce11aed9e1093c74130440e7ae0592e11bbcd2ce7f0ebb8ba6bfe63aaf9b62166a7f4c80cb84490ae5d78408bb2572bf7d4ee0a6 + languageName: node + linkType: hard + "glob@npm:7.1.7": version: 7.1.7 resolution: "glob@npm:7.1.7" @@ -9419,19 +9269,6 @@ __metadata: languageName: node linkType: hard -"globby@npm:^13.1.2": - version: 13.1.2 - resolution: "globby@npm:13.1.2" - dependencies: - dir-glob: ^3.0.1 - fast-glob: ^3.2.11 - ignore: ^5.2.0 - merge2: ^1.4.1 - slash: ^4.0.0 - checksum: c148fcda0c981f00fb434bb94ca258f0a9d23cedbde6fb3f37098e1abde5b065019e2c63fe2aa2fad4daf2b54bf360b4d0423d85fb3a63d09ed75a2837d4de0f - languageName: node - linkType: hard - "got@npm:^9.6.0": version: 9.6.0 resolution: "got@npm:9.6.0" @@ -9836,13 +9673,6 @@ __metadata: languageName: node linkType: hard -"hookable@npm:^5.1.1": - version: 5.1.1 - resolution: "hookable@npm:5.1.1" - checksum: 802bab132be395680c6eca928e8b2f84b9efbdf3f86278312bc05e28aff937a34037b350d0c413939bba144f332266f07006a2ba80b3f0b43991d9e57657e91e - languageName: node - linkType: hard - "hosted-git-info@npm:^2.1.4": version: 2.8.9 resolution: "hosted-git-info@npm:2.8.9" @@ -10412,13 +10242,6 @@ __metadata: languageName: node linkType: hard -"is-module@npm:^1.0.0": - version: 1.0.0 - resolution: "is-module@npm:1.0.0" - checksum: 8cd5390730c7976fb4e8546dd0b38865ee6f7bacfa08dfbb2cc07219606755f0b01709d9361e01f13009bbbd8099fa2927a8ed665118a6105d66e40f1b838c3f - languageName: node - linkType: hard - "is-negative-zero@npm:^2.0.2": version: 2.0.2 resolution: "is-negative-zero@npm:2.0.2" @@ -10477,15 +10300,6 @@ __metadata: languageName: node linkType: hard -"is-reference@npm:^1.2.1": - version: 1.2.1 - resolution: "is-reference@npm:1.2.1" - dependencies: - "@types/estree": "*" - checksum: e7b48149f8abda2c10849ea51965904d6a714193d68942ad74e30522231045acf06cbfae5a4be2702fede5d232e61bf50b3183acdc056e6e3afe07fcf4f4b2bc - languageName: node - linkType: hard - "is-reference@npm:^3.0.0": version: 3.0.0 resolution: "is-reference@npm:3.0.0" @@ -10767,7 +10581,7 @@ __metadata: languageName: node linkType: hard -"jest-diff@npm:^28.0.2, jest-diff@npm:^28.1.3": +"jest-diff@npm:^28.0.2": version: 28.1.3 resolution: "jest-diff@npm:28.1.3" dependencies: @@ -10874,18 +10688,6 @@ __metadata: languageName: node linkType: hard -"jest-matcher-utils@npm:^28.1.3": - version: 28.1.3 - resolution: "jest-matcher-utils@npm:28.1.3" - dependencies: - chalk: ^4.0.0 - jest-diff: ^28.1.3 - jest-get-type: ^28.0.2 - pretty-format: ^28.1.3 - checksum: 6b34f0cf66f6781e92e3bec97bf27796bd2ba31121e5c5997218d9adba6deea38a30df5203937d6785b68023ed95cbad73663cc9aad6fb0cb59aeb5813a58daf - languageName: node - linkType: hard - "jest-matcher-utils@npm:^29.0.1": version: 29.0.1 resolution: "jest-matcher-utils@npm:29.0.1" @@ -10898,23 +10700,6 @@ __metadata: languageName: node linkType: hard -"jest-message-util@npm:^28.1.3": - version: 28.1.3 - resolution: "jest-message-util@npm:28.1.3" - dependencies: - "@babel/code-frame": ^7.12.13 - "@jest/types": ^28.1.3 - "@types/stack-utils": ^2.0.0 - chalk: ^4.0.0 - graceful-fs: ^4.2.9 - micromatch: ^4.0.4 - pretty-format: ^28.1.3 - slash: ^3.0.0 - stack-utils: ^2.0.3 - checksum: 1f266854166dcc6900d75a88b54a25225a2f3710d463063ff1c99021569045c35c7d58557b25447a17eb3a65ce763b2f9b25550248b468a9d4657db365f39e96 - languageName: node - linkType: hard - "jest-message-util@npm:^29.0.1": version: 29.0.1 resolution: "jest-message-util@npm:29.0.1" @@ -11079,20 +10864,6 @@ __metadata: languageName: node linkType: hard -"jest-util@npm:^28.1.3": - version: 28.1.3 - resolution: "jest-util@npm:28.1.3" - dependencies: - "@jest/types": ^28.1.3 - "@types/node": "*" - chalk: ^4.0.0 - ci-info: ^3.2.0 - graceful-fs: ^4.2.9 - picomatch: ^2.2.3 - checksum: fd6459742c941f070223f25e38a2ac0719aad92561591e9fb2a50d602a5d19d754750b79b4074327a42b00055662b95da3b006542ceb8b54309da44d4a62e721 - languageName: node - linkType: hard - "jest-util@npm:^29.0.1": version: 29.0.1 resolution: "jest-util@npm:29.0.1" @@ -11177,7 +10948,7 @@ __metadata: languageName: node linkType: hard -"jiti@npm:^1.12.9, jiti@npm:^1.14.0": +"jiti@npm:^1.14.0": version: 1.14.0 resolution: "jiti@npm:1.14.0" bin: @@ -11598,6 +11369,13 @@ __metadata: languageName: node linkType: hard +"lilconfig@npm:^2.0.5": + version: 2.0.6 + resolution: "lilconfig@npm:2.0.6" + checksum: 40a3cd72f103b1be5975f2ac1850810b61d4053e20ab09be8d3aeddfe042187e1ba70b4651a7e70f95efa1642e7dc8b2ae395b317b7d7753b241b43cef7c0f7d + languageName: node + linkType: hard + "lines-and-columns@npm:^1.1.6": version: 1.2.4 resolution: "lines-and-columns@npm:1.2.4" @@ -11670,6 +11448,13 @@ __metadata: languageName: node linkType: hard +"load-tsconfig@npm:^0.2.0": + version: 0.2.3 + resolution: "load-tsconfig@npm:0.2.3" + checksum: e28d1b2725fda76ee69fa4ee21b1257fd5b77b12e1be09cdc0b67f953e62ffbc3e7ac1a6267ec21309f95310cd10635e28a3cb38d04be3f7d683c4fe7914d7a9 + languageName: node + linkType: hard + "local-pkg@npm:^0.4.1, local-pkg@npm:^0.4.2": version: 0.4.2 resolution: "local-pkg@npm:0.4.2" @@ -11775,6 +11560,13 @@ __metadata: languageName: node linkType: hard +"lodash.sortby@npm:^4.7.0": + version: 4.7.0 + resolution: "lodash.sortby@npm:4.7.0" + checksum: db170c9396d29d11fe9a9f25668c4993e0c1331bcb941ddbd48fb76f492e732add7f2a47cfdf8e9d740fa59ac41bbfaf931d268bc72aab3ab49e9f89354d718c + languageName: node + linkType: hard + "lodash.uniqwith@npm:^4.5.0": version: 4.5.0 resolution: "lodash.uniqwith@npm:4.5.0" @@ -11894,16 +11686,7 @@ __metadata: languageName: node linkType: hard -"magic-string@npm:^0.25.7": - version: 0.25.9 - resolution: "magic-string@npm:0.25.9" - dependencies: - sourcemap-codec: ^1.4.8 - checksum: 9a0e55a15c7303fc360f9572a71cffba1f61451bc92c5602b1206c9d17f492403bf96f946dfce7483e66822d6b74607262e24392e87b0ac27b786e69a40e9b1a - languageName: node - linkType: hard - -"magic-string@npm:^0.26.1, magic-string@npm:^0.26.2": +"magic-string@npm:^0.26.2": version: 0.26.2 resolution: "magic-string@npm:0.26.2" dependencies: @@ -11912,7 +11695,7 @@ __metadata: languageName: node linkType: hard -"make-dir@npm:^3.0.0, make-dir@npm:^3.0.2, make-dir@npm:^3.1.0": +"make-dir@npm:^3.0.0, make-dir@npm:^3.1.0": version: 3.1.0 resolution: "make-dir@npm:3.1.0" dependencies: @@ -12959,40 +12742,6 @@ __metadata: languageName: node linkType: hard -"mkdist@npm:^0.3.13": - version: 0.3.13 - resolution: "mkdist@npm:0.3.13" - dependencies: - defu: ^6.0.0 - esbuild: ^0.14.47 - fs-extra: ^10.0.0 - globby: ^11.0.3 - jiti: ^1.12.9 - mri: ^1.2.0 - pathe: ^0.2.0 - peerDependencies: - typescript: ">=4.7.4" - peerDependenciesMeta: - typescript: - optional: true - bin: - mkdist: dist/cli.cjs - checksum: 47500c3459d78f24742ed507bbdf13e94314f65a590f7679e009cc5d92723ff7dff1393a314d2d9a8beed763b142d8ced2c0f77ee8cd70c0e79aafee059614d0 - languageName: node - linkType: hard - -"mlly@npm:^0.5.13, mlly@npm:^0.5.3": - version: 0.5.13 - resolution: "mlly@npm:0.5.13" - dependencies: - acorn: ^8.8.0 - pathe: ^0.3.4 - pkg-types: ^0.3.3 - ufo: ^0.8.5 - checksum: b3b256f334b83d70715b19fb97b9cf9a1010fbe06e1cb1e74c7855cecf08ce8c251f51345f41ee55a8ccad14426b48758458c798714de5a6487aa77a546417cf - languageName: node - linkType: hard - "mock-socket@npm:^9.1.0, mock-socket@npm:^9.1.5": version: 9.1.5 resolution: "mock-socket@npm:9.1.5" @@ -13007,7 +12756,7 @@ __metadata: languageName: node linkType: hard -"mri@npm:1.2.0, mri@npm:^1.1.0, mri@npm:^1.2.0": +"mri@npm:1.2.0, mri@npm:^1.1.0": version: 1.2.0 resolution: "mri@npm:1.2.0" checksum: 83f515abbcff60150873e424894a2f65d68037e5a7fcde8a9e2b285ee9c13ac581b63cfc1e6826c4732de3aeb84902f7c1e16b7aff46cd3f897a0f757a894e85 @@ -13052,6 +12801,17 @@ __metadata: languageName: node linkType: hard +"mz@npm:^2.7.0": + version: 2.7.0 + resolution: "mz@npm:2.7.0" + dependencies: + any-promise: ^1.0.0 + object-assign: ^4.0.1 + thenify-all: ^1.0.0 + checksum: 8427de0ece99a07e9faed3c0c6778820d7543e3776f9a84d22cf0ec0a8eb65f6e9aee9c9d353ff9a105ff62d33a9463c6ca638974cc652ee8140cd1e35951c87 + languageName: node + linkType: hard + "nan@npm:^2.14.0": version: 2.16.0 resolution: "nan@npm:2.16.0" @@ -13444,7 +13204,7 @@ __metadata: languageName: node linkType: hard -"object-assign@npm:^4.1.0, object-assign@npm:^4.1.1": +"object-assign@npm:^4.0.1, object-assign@npm:^4.1.0, object-assign@npm:^4.1.1": version: 4.1.1 resolution: "object-assign@npm:4.1.1" checksum: fcc6e4ea8c7fe48abfbb552578b1c53e0d194086e2e6bbbf59e0a536381a292f39943c6e9628af05b5528aa5e3318bb30d6b2e53cadaf5b8fe9e12c4b69af23f @@ -13870,14 +13630,7 @@ __metadata: languageName: node linkType: hard -"pathe@npm:^0.2.0": - version: 0.2.0 - resolution: "pathe@npm:0.2.0" - checksum: 9a8149ce152088f30d15b0b03a7c128ba21f16b4dc1f3f90fe38eee9f6d0f1d6da8e4e47bd2a4f9e14aaac7c30ed01cfc86216479011de2bdc598b65e6f19f41 - languageName: node - linkType: hard - -"pathe@npm:^0.3.0, pathe@npm:^0.3.4, pathe@npm:^0.3.5": +"pathe@npm:^0.3.5": version: 0.3.5 resolution: "pathe@npm:0.3.5" checksum: 734f54de80dae59a1cc6e62eb09bbd8f88062d118a01b8a428423c168160cee44d6a09c415ff1d7c410ee4a767a76206c13da6af289e11f6eb1a040382a28edd @@ -13959,14 +13712,14 @@ __metadata: languageName: node linkType: hard -"pirates@npm:^4.0.4": +"pirates@npm:^4.0.1, pirates@npm:^4.0.4": version: 4.0.5 resolution: "pirates@npm:4.0.5" checksum: c9994e61b85260bec6c4fc0307016340d9b0c4f4b6550a957afaaff0c9b1ad58fbbea5cfcf083860a25cb27a375442e2b0edf52e2e1e40e69934e08dcc52d227 languageName: node linkType: hard -"pkg-dir@npm:^4.1.0, pkg-dir@npm:^4.2.0": +"pkg-dir@npm:^4.2.0": version: 4.2.0 resolution: "pkg-dir@npm:4.2.0" dependencies: @@ -13975,17 +13728,6 @@ __metadata: languageName: node linkType: hard -"pkg-types@npm:^0.3.3": - version: 0.3.3 - resolution: "pkg-types@npm:0.3.3" - dependencies: - jsonc-parser: ^3.0.0 - mlly: ^0.5.3 - pathe: ^0.3.0 - checksum: 1c74b65e12274c157bbbadfad50e68a17e4091f1e352d30c600de5da18200dbea35f349516e02a1fec6992a9b5531074bf0b3bcee9da160fe0754135127ede24 - languageName: node - linkType: hard - "plur@npm:^4.0.0": version: 4.0.0 resolution: "plur@npm:4.0.0" @@ -14002,6 +13744,24 @@ __metadata: languageName: node linkType: hard +"postcss-load-config@npm:^3.0.1": + version: 3.1.4 + resolution: "postcss-load-config@npm:3.1.4" + dependencies: + lilconfig: ^2.0.5 + yaml: ^1.10.2 + peerDependencies: + postcss: ">=8.0.9" + ts-node: ">=9.0.0" + peerDependenciesMeta: + postcss: + optional: true + ts-node: + optional: true + checksum: 1c589504c2d90b1568aecae8238ab993c17dba2c44f848a8f13619ba556d26a1c09644d5e6361b5784e721e94af37b604992f9f3dc0483e687a0cc1cc5029a34 + languageName: node + linkType: hard + "postcss@npm:8.4.14": version: 8.4.14 resolution: "postcss@npm:8.4.14" @@ -14076,13 +13836,6 @@ __metadata: languageName: node linkType: hard -"pretty-bytes@npm:^6.0.0": - version: 6.0.0 - resolution: "pretty-bytes@npm:6.0.0" - checksum: 0bb9f95e617236404b29a8392c6efd82d65805f622f5e809ecd70068102be857d4e3276c86d2a32fa2ef851cc29472e380945dab7bec83ec79bd57a19a10faf7 - languageName: node - linkType: hard - "pretty-format@npm:^27.0.2": version: 27.5.1 resolution: "pretty-format@npm:27.5.1" @@ -14094,7 +13847,7 @@ __metadata: languageName: node linkType: hard -"pretty-format@npm:^28.0.0, pretty-format@npm:^28.1.3": +"pretty-format@npm:^28.1.3": version: 28.1.3 resolution: "pretty-format@npm:28.1.3" dependencies: @@ -14106,7 +13859,7 @@ __metadata: languageName: node linkType: hard -"pretty-format@npm:^29.0.1": +"pretty-format@npm:^29.0.0, pretty-format@npm:^29.0.1": version: 29.0.1 resolution: "pretty-format@npm:29.0.1" dependencies: @@ -14890,7 +14643,7 @@ __metadata: languageName: node linkType: hard -"resolve@npm:^1.1.6, resolve@npm:^1.10.0, resolve@npm:^1.14.2, resolve@npm:^1.17.0, resolve@npm:^1.19.0, resolve@npm:^1.20.0, resolve@npm:^1.22.1, resolve@npm:^1.3.2": +"resolve@npm:^1.1.6, resolve@npm:^1.10.0, resolve@npm:^1.14.2, resolve@npm:^1.19.0, resolve@npm:^1.20.0, resolve@npm:^1.22.1, resolve@npm:^1.3.2": version: 1.22.1 resolution: "resolve@npm:1.22.1" dependencies: @@ -14935,7 +14688,7 @@ __metadata: languageName: node linkType: hard -"resolve@patch:resolve@^1.1.6#~builtin, resolve@patch:resolve@^1.10.0#~builtin, resolve@patch:resolve@^1.14.2#~builtin, resolve@patch:resolve@^1.17.0#~builtin, resolve@patch:resolve@^1.19.0#~builtin, resolve@patch:resolve@^1.20.0#~builtin, resolve@patch:resolve@^1.22.1#~builtin, resolve@patch:resolve@^1.3.2#~builtin": +"resolve@patch:resolve@^1.1.6#~builtin, resolve@patch:resolve@^1.10.0#~builtin, resolve@patch:resolve@^1.14.2#~builtin, resolve@patch:resolve@^1.19.0#~builtin, resolve@patch:resolve@^1.20.0#~builtin, resolve@patch:resolve@^1.22.1#~builtin, resolve@patch:resolve@^1.3.2#~builtin": version: 1.22.1 resolution: "resolve@patch:resolve@npm%3A1.22.1#~builtin::version=1.22.1&hash=07638b" dependencies: @@ -15042,53 +14795,6 @@ __metadata: languageName: node linkType: hard -"rollup-plugin-dts@npm:^4.2.2": - version: 4.2.2 - resolution: "rollup-plugin-dts@npm:4.2.2" - dependencies: - "@babel/code-frame": ^7.16.7 - magic-string: ^0.26.1 - peerDependencies: - rollup: ^2.55 - typescript: ^4.1 - dependenciesMeta: - "@babel/code-frame": - optional: true - checksum: cf4b45f6cca442a5f44af0f0fb567c8fc540ecb792c763571d1bcda9bf495803bcc8d4eaef451a2dd32f7f391eb822e2b96cc6b86b096db54a4d3935236fd8da - languageName: node - linkType: hard - -"rollup-plugin-esbuild@npm:^4.9.3": - version: 4.9.3 - resolution: "rollup-plugin-esbuild@npm:4.9.3" - dependencies: - "@rollup/pluginutils": ^4.1.1 - debug: ^4.3.3 - es-module-lexer: ^0.9.3 - joycon: ^3.0.1 - jsonc-parser: ^3.0.0 - peerDependencies: - esbuild: ">=0.10.1" - rollup: ^1.20.0 || ^2.0.0 - checksum: 7555541bf0fb94dd57ae957e73856f28d4542ae679a0125891be7f0638757f84470c2c2ddf7360d29f5aa3eea55351958a293f6fcf0601ec5382a5986cbfb9b8 - languageName: node - linkType: hard - -"rollup-plugin-typescript2@npm:^0.33.0": - version: 0.33.0 - resolution: "rollup-plugin-typescript2@npm:0.33.0" - dependencies: - "@rollup/pluginutils": ^4.1.2 - find-cache-dir: ^3.3.2 - fs-extra: ^10.0.0 - tslib: ^2.4.0 - peerDependencies: - rollup: ">=1.26.3" - typescript: ">=2.4.0" - checksum: 03e3077c5197f512222f11ebb8b7682c97ddbd6332189ea06884aa3e778a04107483d340f3be94dbc471595e8908687dd841b81976855485486097b6bb095f65 - languageName: node - linkType: hard - "rollup-pluginutils@npm:^2.8.2": version: 2.8.2 resolution: "rollup-pluginutils@npm:2.8.2" @@ -15112,9 +14818,9 @@ __metadata: languageName: node linkType: hard -"rollup@npm:^2.78.0": - version: 2.78.1 - resolution: "rollup@npm:2.78.1" +"rollup@npm:^2.74.1": + version: 2.79.0 + resolution: "rollup@npm:2.79.0" dependencies: fsevents: ~2.3.2 dependenciesMeta: @@ -15122,7 +14828,7 @@ __metadata: optional: true bin: rollup: dist/bin/rollup - checksum: 9034814383ca5bdb4bea6d499270aeb31cdb0bb884f81b0c6a1d19c63cc973f040e6ee09b7af8a7169dd231c090f4b44ef8b99c4bfdf884aceeb3dcefb8cfa14 + checksum: 166f1ffea1898e157003920065b3a328e7012ea6808860ee8fe5d1ce94804fcce9985c95a3c0f7fe9c611aff0d09a70f073f1d6f715c8faba28e4e40f71ee3bb languageName: node linkType: hard @@ -15192,13 +14898,6 @@ __metadata: languageName: node linkType: hard -"scule@npm:^0.3.2": - version: 0.3.2 - resolution: "scule@npm:0.3.2" - checksum: cac6c0e66e474fcac8b0a581cd206055a4984b9da04f4cfef8883689c045a2ac0b70bda6851fe714e5f22998fab365fa0f4ad218bdddd41c15a55c0b43f3be47 - languageName: node - linkType: hard - "semver-diff@npm:^3.1.1": version: 3.1.1 resolution: "semver-diff@npm:3.1.1" @@ -15396,13 +15095,6 @@ __metadata: languageName: node linkType: hard -"slash@npm:^4.0.0": - version: 4.0.0 - resolution: "slash@npm:4.0.0" - checksum: da8e4af73712253acd21b7853b7e0dbba776b786e82b010a5bfc8b5051a1db38ed8aba8e1e8f400dd2c9f373be91eb1c42b66e91abb407ff42b10feece5e1d2d - languageName: node - linkType: hard - "slice-ansi@npm:^3.0.0": version: 3.0.0 resolution: "slice-ansi@npm:3.0.0" @@ -15507,6 +15199,15 @@ __metadata: languageName: node linkType: hard +"source-map@npm:0.8.0-beta.0": + version: 0.8.0-beta.0 + resolution: "source-map@npm:0.8.0-beta.0" + dependencies: + whatwg-url: ^7.0.0 + checksum: e94169be6461ab0ac0913313ad1719a14c60d402bd22b0ad96f4a6cffd79130d91ab5df0a5336a326b04d2df131c1409f563c9dc0d21a6ca6239a44b6c8dbd92 + languageName: node + linkType: hard + "source-map@npm:^0.5.7": version: 0.5.7 resolution: "source-map@npm:0.5.7" @@ -15929,6 +15630,23 @@ __metadata: languageName: node linkType: hard +"sucrase@npm:^3.20.3": + version: 3.25.0 + resolution: "sucrase@npm:3.25.0" + dependencies: + commander: ^4.0.0 + glob: 7.1.6 + lines-and-columns: ^1.1.6 + mz: ^2.7.0 + pirates: ^4.0.1 + ts-interface-checker: ^0.1.9 + bin: + sucrase: bin/sucrase + sucrase-node: bin/sucrase-node + checksum: 4a20a4a821f46e1010da22417e6edafe637bac9a5414e71fc626a569fd3d266a1fcf010073c7627c296223e41fc871fb30678b6238fb95873e49be7973b8743b + languageName: node + linkType: hard + "superagent@npm:^8.0.0": version: 8.0.0 resolution: "superagent@npm:8.0.0" @@ -16205,6 +15923,24 @@ __metadata: languageName: node linkType: hard +"thenify-all@npm:^1.0.0": + version: 1.6.0 + resolution: "thenify-all@npm:1.6.0" + dependencies: + thenify: ">= 3.1.0 < 4" + checksum: dba7cc8a23a154cdcb6acb7f51d61511c37a6b077ec5ab5da6e8b874272015937788402fd271fdfc5f187f8cb0948e38d0a42dcc89d554d731652ab458f5343e + languageName: node + linkType: hard + +"thenify@npm:>= 3.1.0 < 4": + version: 3.3.1 + resolution: "thenify@npm:3.3.1" + dependencies: + any-promise: ^1.0.0 + checksum: 84e1b804bfec49f3531215f17b4a6e50fd4397b5f7c1bccc427b9c656e1ecfb13ea79d899930184f78bc2f57285c54d9a50a590c8868f4f0cef5c1d9f898b05e + languageName: node + linkType: hard + "through2@npm:^2.0.0": version: 2.0.5 resolution: "through2@npm:2.0.5" @@ -16330,6 +16066,15 @@ __metadata: languageName: node linkType: hard +"tr46@npm:^1.0.1": + version: 1.0.1 + resolution: "tr46@npm:1.0.1" + dependencies: + punycode: ^2.1.0 + checksum: 96d4ed46bc161db75dbf9247a236ea0bfcaf5758baae6749e92afab0bc5a09cb59af21788ede7e55080f2bf02dce3e4a8f2a484cc45164e29f4b5e68f7cbcc1a + languageName: node + linkType: hard + "tr46@npm:~0.0.3": version: 0.0.3 resolution: "tr46@npm:0.0.3" @@ -16367,6 +16112,13 @@ __metadata: languageName: node linkType: hard +"ts-interface-checker@npm:^0.1.9": + version: 0.1.13 + resolution: "ts-interface-checker@npm:0.1.13" + checksum: 20c29189c2dd6067a8775e07823ddf8d59a33e2ffc47a1bd59a5cb28bb0121a2969a816d5e77eda2ed85b18171aa5d1c4005a6b88ae8499ec7cc49f78571cb5e + languageName: node + linkType: hard + "ts-mixer@npm:^6.0.1": version: 6.0.1 resolution: "ts-mixer@npm:6.0.1" @@ -16529,6 +16281,42 @@ __metadata: languageName: node linkType: hard +"tsup@npm:^6.2.3": + version: 6.2.3 + resolution: "tsup@npm:6.2.3" + dependencies: + bundle-require: ^3.1.0 + cac: ^6.7.12 + chokidar: ^3.5.1 + debug: ^4.3.1 + esbuild: ^0.15.1 + execa: ^5.0.0 + globby: ^11.0.3 + joycon: ^3.0.1 + postcss-load-config: ^3.0.1 + resolve-from: ^5.0.0 + rollup: ^2.74.1 + source-map: 0.8.0-beta.0 + sucrase: ^3.20.3 + tree-kill: ^1.2.2 + peerDependencies: + "@swc/core": ^1 + postcss: ^8.4.12 + typescript: ^4.1.0 + peerDependenciesMeta: + "@swc/core": + optional: true + postcss: + optional: true + typescript: + optional: true + bin: + tsup: dist/cli-default.js + tsup-node: dist/cli-node.js + checksum: f1cb8f4f83a4a304f61d57dc62fb7176d1fa8842485a7dec4c3fd7cb98e169dbdc4bf52c45ff8cede6843b791fe4a0f70579b34684f568af3c2c3cb2f8469af4 + languageName: node + linkType: hard + "tsutils@npm:^2.29.0": version: 2.29.0 resolution: "tsutils@npm:2.29.0" @@ -16567,122 +16355,122 @@ __metadata: languageName: node linkType: hard -"turbo-android-arm64@npm:1.4.3": - version: 1.4.3 - resolution: "turbo-android-arm64@npm:1.4.3" +"turbo-android-arm64@npm:1.4.4": + version: 1.4.4 + resolution: "turbo-android-arm64@npm:1.4.4" conditions: os=android & cpu=arm64 languageName: node linkType: hard -"turbo-darwin-64@npm:1.4.3": - version: 1.4.3 - resolution: "turbo-darwin-64@npm:1.4.3" +"turbo-darwin-64@npm:1.4.4": + version: 1.4.4 + resolution: "turbo-darwin-64@npm:1.4.4" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"turbo-darwin-arm64@npm:1.4.3": - version: 1.4.3 - resolution: "turbo-darwin-arm64@npm:1.4.3" +"turbo-darwin-arm64@npm:1.4.4": + version: 1.4.4 + resolution: "turbo-darwin-arm64@npm:1.4.4" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"turbo-freebsd-64@npm:1.4.3": - version: 1.4.3 - resolution: "turbo-freebsd-64@npm:1.4.3" +"turbo-freebsd-64@npm:1.4.4": + version: 1.4.4 + resolution: "turbo-freebsd-64@npm:1.4.4" conditions: os=freebsd & cpu=x64 languageName: node linkType: hard -"turbo-freebsd-arm64@npm:1.4.3": - version: 1.4.3 - resolution: "turbo-freebsd-arm64@npm:1.4.3" +"turbo-freebsd-arm64@npm:1.4.4": + version: 1.4.4 + resolution: "turbo-freebsd-arm64@npm:1.4.4" conditions: os=freebsd & cpu=arm64 languageName: node linkType: hard -"turbo-linux-32@npm:1.4.3": - version: 1.4.3 - resolution: "turbo-linux-32@npm:1.4.3" +"turbo-linux-32@npm:1.4.4": + version: 1.4.4 + resolution: "turbo-linux-32@npm:1.4.4" conditions: os=linux & cpu=ia32 languageName: node linkType: hard -"turbo-linux-64@npm:1.4.3": - version: 1.4.3 - resolution: "turbo-linux-64@npm:1.4.3" +"turbo-linux-64@npm:1.4.4": + version: 1.4.4 + resolution: "turbo-linux-64@npm:1.4.4" conditions: os=linux & cpu=x64 languageName: node linkType: hard -"turbo-linux-arm64@npm:1.4.3": - version: 1.4.3 - resolution: "turbo-linux-arm64@npm:1.4.3" +"turbo-linux-arm64@npm:1.4.4": + version: 1.4.4 + resolution: "turbo-linux-arm64@npm:1.4.4" conditions: os=linux & cpu=arm64 languageName: node linkType: hard -"turbo-linux-arm@npm:1.4.3": - version: 1.4.3 - resolution: "turbo-linux-arm@npm:1.4.3" +"turbo-linux-arm@npm:1.4.4": + version: 1.4.4 + resolution: "turbo-linux-arm@npm:1.4.4" conditions: os=linux & cpu=arm languageName: node linkType: hard -"turbo-linux-mips64le@npm:1.4.3": - version: 1.4.3 - resolution: "turbo-linux-mips64le@npm:1.4.3" +"turbo-linux-mips64le@npm:1.4.4": + version: 1.4.4 + resolution: "turbo-linux-mips64le@npm:1.4.4" conditions: os=linux & cpu=mipsel languageName: node linkType: hard -"turbo-linux-ppc64le@npm:1.4.3": - version: 1.4.3 - resolution: "turbo-linux-ppc64le@npm:1.4.3" +"turbo-linux-ppc64le@npm:1.4.4": + version: 1.4.4 + resolution: "turbo-linux-ppc64le@npm:1.4.4" conditions: os=linux & cpu=ppc64 languageName: node linkType: hard -"turbo-windows-32@npm:1.4.3": - version: 1.4.3 - resolution: "turbo-windows-32@npm:1.4.3" +"turbo-windows-32@npm:1.4.4": + version: 1.4.4 + resolution: "turbo-windows-32@npm:1.4.4" conditions: os=win32 & cpu=ia32 languageName: node linkType: hard -"turbo-windows-64@npm:1.4.3": - version: 1.4.3 - resolution: "turbo-windows-64@npm:1.4.3" +"turbo-windows-64@npm:1.4.4": + version: 1.4.4 + resolution: "turbo-windows-64@npm:1.4.4" conditions: os=win32 & cpu=x64 languageName: node linkType: hard -"turbo-windows-arm64@npm:1.4.3": - version: 1.4.3 - resolution: "turbo-windows-arm64@npm:1.4.3" +"turbo-windows-arm64@npm:1.4.4": + version: 1.4.4 + resolution: "turbo-windows-arm64@npm:1.4.4" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard -"turbo@npm:^1.4.3": - version: 1.4.3 - resolution: "turbo@npm:1.4.3" - dependencies: - turbo-android-arm64: 1.4.3 - turbo-darwin-64: 1.4.3 - turbo-darwin-arm64: 1.4.3 - turbo-freebsd-64: 1.4.3 - turbo-freebsd-arm64: 1.4.3 - turbo-linux-32: 1.4.3 - turbo-linux-64: 1.4.3 - turbo-linux-arm: 1.4.3 - turbo-linux-arm64: 1.4.3 - turbo-linux-mips64le: 1.4.3 - turbo-linux-ppc64le: 1.4.3 - turbo-windows-32: 1.4.3 - turbo-windows-64: 1.4.3 - turbo-windows-arm64: 1.4.3 +"turbo@npm:^1.4.4": + version: 1.4.4 + resolution: "turbo@npm:1.4.4" + dependencies: + turbo-android-arm64: 1.4.4 + turbo-darwin-64: 1.4.4 + turbo-darwin-arm64: 1.4.4 + turbo-freebsd-64: 1.4.4 + turbo-freebsd-arm64: 1.4.4 + turbo-linux-32: 1.4.4 + turbo-linux-64: 1.4.4 + turbo-linux-arm: 1.4.4 + turbo-linux-arm64: 1.4.4 + turbo-linux-mips64le: 1.4.4 + turbo-linux-ppc64le: 1.4.4 + turbo-windows-32: 1.4.4 + turbo-windows-64: 1.4.4 + turbo-windows-arm64: 1.4.4 dependenciesMeta: turbo-android-arm64: optional: true @@ -16714,7 +16502,7 @@ __metadata: optional: true bin: turbo: bin/turbo - checksum: ed4f327bf4bdd152a0842c707c4b7f614c360d610fb079dcf351b2d83490883e62e148f30f46c20b963a2c58286461ce12d7fb284f8526801cc25a97a160177f + checksum: 630bc2c8b69f37b7c606ecc99721b33a197cd94c17b559fe0e487898ed56381a6d2f02bec77a009438886b4d2fd7c99e87483f74311acabffadd49c72695dc3b languageName: node linkType: hard @@ -16799,9 +16587,9 @@ __metadata: languageName: node linkType: hard -"typedoc@npm:^0.23.11": - version: 0.23.11 - resolution: "typedoc@npm:0.23.11" +"typedoc@npm:^0.23.13": + version: 0.23.13 + resolution: "typedoc@npm:0.23.13" dependencies: lunr: ^2.3.9 marked: ^4.0.19 @@ -16811,7 +16599,7 @@ __metadata: typescript: 4.6.x || 4.7.x || 4.8.x bin: typedoc: bin/typedoc - checksum: 02bc1e4c15ea064c0a35e049500b40f99ce8dec1d2778edd9dbc12c0ca348c630253ad17e1c2b901961fcd56e3eea31fd62f82eed4ff95864e9e1d2e5e7564d7 + checksum: 720b5fa9846fcb2d0e3a763bc01b8f856d7e1c80ac50d2efd85dd850f61b98c4f52b7519a86ff2c59cebc7ab1e19e92cab31a25082d4574ab9a6f93e660e5369 languageName: node linkType: hard @@ -16923,7 +16711,7 @@ __metadata: languageName: node linkType: hard -"ufo@npm:^0.8.4, ufo@npm:^0.8.5": +"ufo@npm:^0.8.4": version: 0.8.5 resolution: "ufo@npm:0.8.5" checksum: 4dcf657a906550112ab1eb045110ebb768a914fb653373a2c363776a1f6ba25ea9d20bd5ed7f4bb44fb72bd4421b37d62991cd5ce4e3a2aef7e3eae450bb9508 @@ -16951,44 +16739,6 @@ __metadata: languageName: node linkType: hard -"unbuild@npm:^0.8.9": - version: 0.8.9 - resolution: "unbuild@npm:0.8.9" - dependencies: - "@rollup/plugin-alias": ^3.1.9 - "@rollup/plugin-commonjs": ^22.0.2 - "@rollup/plugin-json": ^4.1.0 - "@rollup/plugin-node-resolve": ^13.3.0 - "@rollup/plugin-replace": ^4.0.0 - "@rollup/pluginutils": ^4.2.1 - chalk: ^5.0.1 - consola: ^2.15.3 - defu: ^6.1.0 - esbuild: ^0.15.5 - globby: ^13.1.2 - hookable: ^5.1.1 - jiti: ^1.14.0 - magic-string: ^0.26.2 - mkdirp: ^1.0.4 - mkdist: ^0.3.13 - mlly: ^0.5.13 - mri: ^1.2.0 - pathe: ^0.3.5 - pkg-types: ^0.3.3 - pretty-bytes: ^6.0.0 - rimraf: ^3.0.2 - rollup: ^2.78.0 - rollup-plugin-dts: ^4.2.2 - rollup-plugin-esbuild: ^4.9.3 - scule: ^0.3.2 - typescript: ^4.7.4 - untyped: ^0.4.5 - bin: - unbuild: dist/cli.mjs - checksum: e92327003457bf44724cffd585b2c10edf79557f9b51d87eb321c54b30a63e529cbe1bd17dcc841a3f01905c0d46f8048d76fffa401bb27fdf62f512c213db8a - languageName: node - linkType: hard - "unconfig@npm:^0.3.5": version: 0.3.5 resolution: "unconfig@npm:0.3.5" @@ -17182,45 +16932,33 @@ __metadata: languageName: node linkType: hard -"unocss@npm:^0.45.13": - version: 0.45.13 - resolution: "unocss@npm:0.45.13" - dependencies: - "@unocss/astro": 0.45.13 - "@unocss/cli": 0.45.13 - "@unocss/core": 0.45.13 - "@unocss/preset-attributify": 0.45.13 - "@unocss/preset-icons": 0.45.13 - "@unocss/preset-mini": 0.45.13 - "@unocss/preset-tagify": 0.45.13 - "@unocss/preset-typography": 0.45.13 - "@unocss/preset-uno": 0.45.13 - "@unocss/preset-web-fonts": 0.45.13 - "@unocss/preset-wind": 0.45.13 - "@unocss/reset": 0.45.13 - "@unocss/transformer-attributify-jsx": 0.45.13 - "@unocss/transformer-compile-class": 0.45.13 - "@unocss/transformer-directives": 0.45.13 - "@unocss/transformer-variant-group": 0.45.13 - "@unocss/vite": 0.45.13 +"unocss@npm:^0.45.14": + version: 0.45.14 + resolution: "unocss@npm:0.45.14" + dependencies: + "@unocss/astro": 0.45.14 + "@unocss/cli": 0.45.14 + "@unocss/core": 0.45.14 + "@unocss/preset-attributify": 0.45.14 + "@unocss/preset-icons": 0.45.14 + "@unocss/preset-mini": 0.45.14 + "@unocss/preset-tagify": 0.45.14 + "@unocss/preset-typography": 0.45.14 + "@unocss/preset-uno": 0.45.14 + "@unocss/preset-web-fonts": 0.45.14 + "@unocss/preset-wind": 0.45.14 + "@unocss/reset": 0.45.14 + "@unocss/transformer-attributify-jsx": 0.45.14 + "@unocss/transformer-compile-class": 0.45.14 + "@unocss/transformer-directives": 0.45.14 + "@unocss/transformer-variant-group": 0.45.14 + "@unocss/vite": 0.45.14 peerDependencies: - "@unocss/webpack": 0.45.13 + "@unocss/webpack": 0.45.14 peerDependenciesMeta: "@unocss/webpack": optional: true - checksum: a4b5ef53a48937625f323f45157a820b37e9f9e234077f6a32a669d2c402c26ec2c96d2fab7f3a696be1ad964b5a80d719b5c37d7401e5970427273a7c552c73 - languageName: node - linkType: hard - -"untyped@npm:^0.4.5": - version: 0.4.5 - resolution: "untyped@npm:0.4.5" - dependencies: - "@babel/core": ^7.18.10 - "@babel/standalone": ^7.18.11 - "@babel/types": ^7.18.10 - scule: ^0.3.2 - checksum: fd09347048145a3f87dbbd03174a3053e5a01b0e174c49bca23e6acddb2dd234a024795033d2c0d72fe8dbded3f8c56fb54580fcee893703f380e15095ddd3e2 + checksum: 96a0af6b47761eb18014a61c78637cb27b19d38b4a010b28fabc2b63f33366c0bec68afdc245a3d18491ea7260b79d78d447caa10699735eb76664e1103a7d7e languageName: node linkType: hard @@ -17414,25 +17152,25 @@ __metadata: languageName: node linkType: hard -"vercel@npm:^28.2.0": - version: 28.2.0 - resolution: "vercel@npm:28.2.0" +"vercel@npm:^28.2.2": + version: 28.2.2 + resolution: "vercel@npm:28.2.2" dependencies: - "@vercel/build-utils": 5.4.0 - "@vercel/go": 2.2.3 - "@vercel/hydrogen": 0.0.16 - "@vercel/next": 3.1.22 - "@vercel/node": 2.5.11 - "@vercel/python": 3.1.12 - "@vercel/redwood": 1.0.20 - "@vercel/remix": 1.0.21 - "@vercel/ruby": 1.3.29 - "@vercel/static-build": 1.0.20 + "@vercel/build-utils": 5.4.1 + "@vercel/go": 2.2.4 + "@vercel/hydrogen": 0.0.17 + "@vercel/next": 3.1.24 + "@vercel/node": 2.5.13 + "@vercel/python": 3.1.13 + "@vercel/redwood": 1.0.22 + "@vercel/remix": 1.0.23 + "@vercel/ruby": 1.3.30 + "@vercel/static-build": 1.0.21 update-notifier: 5.1.0 bin: vc: dist/index.js vercel: dist/index.js - checksum: 23d326bdd052af021ecfc2aba73954559041b96b46667759b8648fbef3fa3c02b5e85545a1e554dad74d8b1c8b5a3e793b0173c9b26e100e27a3c47efffed909 + checksum: 961671630f04a05c8fb6762a9788fcac64dbdc244cba0a85e3c48ef54ab695c2e403626411dd40385894187188da515d336bf5912cbba034fd63b5c43efda983 languageName: node linkType: hard @@ -17609,6 +17347,13 @@ __metadata: languageName: node linkType: hard +"webidl-conversions@npm:^4.0.2": + version: 4.0.2 + resolution: "webidl-conversions@npm:4.0.2" + checksum: c93d8dfe908a0140a4ae9c0ebc87a33805b416a33ee638a605b551523eec94a9632165e54632f6d57a39c5f948c4bab10e0e066525e9a4b87a79f0d04fbca374 + languageName: node + linkType: hard + "webidl-conversions@npm:^7.0.0": version: 7.0.0 resolution: "webidl-conversions@npm:7.0.0" @@ -17642,6 +17387,17 @@ __metadata: languageName: node linkType: hard +"whatwg-url@npm:^7.0.0": + version: 7.1.0 + resolution: "whatwg-url@npm:7.1.0" + dependencies: + lodash.sortby: ^4.7.0 + tr46: ^1.0.1 + webidl-conversions: ^4.0.2 + checksum: fecb07c87290b47d2ec2fb6d6ca26daad3c9e211e0e531dd7566e7ff95b5b3525a57d4f32640ad4adf057717e0c215731db842ad761e61d947e81010e05cf5fd + languageName: node + linkType: hard + "which-boxed-primitive@npm:^1.0.2": version: 1.0.2 resolution: "which-boxed-primitive@npm:1.0.2" @@ -17832,7 +17588,7 @@ __metadata: languageName: node linkType: hard -"yaml@npm:^1.10.0": +"yaml@npm:^1.10.0, yaml@npm:^1.10.2": version: 1.10.2 resolution: "yaml@npm:1.10.2" checksum: ce4ada136e8a78a0b08dc10b4b900936912d15de59905b2bf415b4d33c63df1d555d23acb2a41b23cf9fb5da41c256441afca3d6509de7247daa062fd2c5ea5f From b9c62ac0f0f534c33f9913135095f8b3d98ec05e Mon Sep 17 00:00:00 2001 From: RedGuy12 <61329810+RedGuy12@users.noreply.github.com> Date: Fri, 2 Sep 2022 13:44:39 -0500 Subject: [PATCH 119/155] types(ThreadChannel): `fetchStarterMessage` must return a `Message` (#8560) Signed-off-by: RedGuy12 <61329810+RedGuy12@users.noreply.github.com> Signed-off-by: RedGuy12 <61329810+RedGuy12@users.noreply.github.com> Co-authored-by: kodiakhq[bot] <49736102+kodiakhq[bot]@users.noreply.github.com> --- packages/discord.js/src/structures/ThreadChannel.js | 2 +- packages/discord.js/typings/index.d.ts | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/discord.js/src/structures/ThreadChannel.js b/packages/discord.js/src/structures/ThreadChannel.js index 14cbe6b84dd9..00ef1ad3e6e6 100644 --- a/packages/discord.js/src/structures/ThreadChannel.js +++ b/packages/discord.js/src/structures/ThreadChannel.js @@ -283,7 +283,7 @@ class ThreadChannel extends BaseChannel { * This only works when the thread started from a message in the parent channel, otherwise the promise will * reject. If you just need the id of that message, use {@link ThreadChannel#id} instead. * @param {BaseFetchOptions} [options] Additional options for this fetch - * @returns {Promise} + * @returns {Promise|null>} */ // eslint-disable-next-line require-await async fetchStarterMessage(options) { diff --git a/packages/discord.js/typings/index.d.ts b/packages/discord.js/typings/index.d.ts index 719e9e1015f7..91a071d56748 100644 --- a/packages/discord.js/typings/index.d.ts +++ b/packages/discord.js/typings/index.d.ts @@ -2551,7 +2551,7 @@ export class ThreadChannel extends TextBasedChannelMixin(BaseChannel, true, [ checkAdmin?: boolean, ): Readonly | null; public fetchOwner(options?: BaseFetchOptions): Promise; - public fetchStarterMessage(options?: BaseFetchOptions): Promise; + public fetchStarterMessage(options?: BaseFetchOptions): Promise | null>; public setArchived(archived?: boolean, reason?: string): Promise; public setAutoArchiveDuration( autoArchiveDuration: ThreadAutoArchiveDuration, From 1d460e04344d72fe0d8ed8a9a41ad637896d1cae Mon Sep 17 00:00:00 2001 From: iCrawl Date: Fri, 2 Sep 2022 21:48:05 +0200 Subject: [PATCH 120/155] chore: deps --- packages/actions/package.json | 2 +- packages/api-extractor-utils/package.json | 4 +- packages/builders/package.json | 4 +- packages/collection/package.json | 4 +- packages/docgen/package.json | 2 +- packages/proxy-container/package.json | 2 +- packages/proxy/package.json | 4 +- packages/rest/package.json | 4 +- packages/rest/src/lib/utils/utils.ts | 4 +- packages/scripts/package.json | 4 +- packages/voice/package.json | 4 +- packages/website/package.json | 2 +- packages/ws/package.json | 4 +- packages/ws/src/ws/WebSocketShard.ts | 1 + yarn.lock | 662 +++++++++++++++------- 15 files changed, 476 insertions(+), 231 deletions(-) diff --git a/packages/actions/package.json b/packages/actions/package.json index 02db079ed041..f6aa9a4a592a 100644 --- a/packages/actions/package.json +++ b/packages/actions/package.json @@ -46,7 +46,7 @@ "@types/node": "^16.11.56", "@vitest/coverage-c8": "^0.22.1", "eslint": "^8.23.0", - "eslint-config-neon": "^0.1.23", + "eslint-config-neon": "^0.1.31", "prettier": "^2.7.1", "tsup": "^6.2.3", "typescript": "^4.8.2", diff --git a/packages/api-extractor-utils/package.json b/packages/api-extractor-utils/package.json index 661efb37de79..87d16fc359ab 100644 --- a/packages/api-extractor-utils/package.json +++ b/packages/api-extractor-utils/package.json @@ -31,13 +31,13 @@ }, "homepage": "https://discord.js.org", "dependencies": { - "@microsoft/api-extractor-model": "^7.23.3", + "@microsoft/api-extractor-model": "7.23.3", "@microsoft/tsdoc": "^0.14.1" }, "devDependencies": { "@types/node": "^16.11.56", "eslint": "^8.23.0", - "eslint-config-neon": "^0.1.23", + "eslint-config-neon": "^0.1.31", "prettier": "^2.7.1", "tsup": "^6.2.3", "typescript": "^4.8.2" diff --git a/packages/builders/package.json b/packages/builders/package.json index cd78d52de0d8..4a0f276b606d 100644 --- a/packages/builders/package.json +++ b/packages/builders/package.json @@ -63,12 +63,12 @@ "devDependencies": { "@discordjs/docgen": "workspace:^", "@favware/cliff-jumper": "^1.8.7", - "@microsoft/api-extractor": "^7.29.5", + "@microsoft/api-extractor": "^7.30.0", "@types/node": "^16.11.56", "@vitest/coverage-c8": "^0.22.1", "downlevel-dts": "^0.10.1", "eslint": "^8.23.0", - "eslint-config-neon": "^0.1.23", + "eslint-config-neon": "^0.1.31", "prettier": "^2.7.1", "tsup": "^6.2.3", "typescript": "^4.8.2", diff --git a/packages/collection/package.json b/packages/collection/package.json index 22aafd5d45d1..8117d2a80758 100644 --- a/packages/collection/package.json +++ b/packages/collection/package.json @@ -52,12 +52,12 @@ "devDependencies": { "@discordjs/docgen": "workspace:^", "@favware/cliff-jumper": "^1.8.7", - "@microsoft/api-extractor": "^7.29.5", + "@microsoft/api-extractor": "^7.30.0", "@types/node": "^16.11.56", "@vitest/coverage-c8": "^0.22.1", "downlevel-dts": "^0.10.1", "eslint": "^8.23.0", - "eslint-config-neon": "^0.1.23", + "eslint-config-neon": "^0.1.31", "prettier": "^2.7.1", "tsup": "^6.2.3", "typescript": "^4.8.2", diff --git a/packages/docgen/package.json b/packages/docgen/package.json index 1674b3754b01..fd63b21bd5f2 100644 --- a/packages/docgen/package.json +++ b/packages/docgen/package.json @@ -52,7 +52,7 @@ "@types/jsdoc-to-markdown": "^7.0.3", "@types/node": "^16.11.56", "eslint": "^8.23.0", - "eslint-config-neon": "^0.1.23", + "eslint-config-neon": "^0.1.31", "prettier": "^2.7.1", "tsup": "^6.2.3", "typescript": "^4.8.2" diff --git a/packages/proxy-container/package.json b/packages/proxy-container/package.json index 21a321b25b47..a3af5423ff8d 100644 --- a/packages/proxy-container/package.json +++ b/packages/proxy-container/package.json @@ -51,7 +51,7 @@ "devDependencies": { "@types/node": "^16.11.56", "eslint": "^8.23.0", - "eslint-config-neon": "^0.1.23", + "eslint-config-neon": "^0.1.31", "prettier": "^2.7.1", "tsup": "^6.2.3", "typescript": "^4.8.2" diff --git a/packages/proxy/package.json b/packages/proxy/package.json index 6ea9a933f160..0edce8833dd8 100644 --- a/packages/proxy/package.json +++ b/packages/proxy/package.json @@ -61,13 +61,13 @@ "devDependencies": { "@discordjs/docgen": "workspace:^", "@favware/cliff-jumper": "^1.8.7", - "@microsoft/api-extractor": "^7.29.5", + "@microsoft/api-extractor": "^7.30.0", "@types/node": "^16.11.56", "@types/supertest": "^2.0.12", "@vitest/coverage-c8": "^0.22.1", "downlevel-dts": "^0.10.1", "eslint": "^8.23.0", - "eslint-config-neon": "^0.1.23", + "eslint-config-neon": "^0.1.31", "prettier": "^2.7.1", "supertest": "^6.2.4", "tsup": "^6.2.3", diff --git a/packages/rest/package.json b/packages/rest/package.json index 51d2b8120561..6c6435b5d027 100644 --- a/packages/rest/package.json +++ b/packages/rest/package.json @@ -63,12 +63,12 @@ "devDependencies": { "@discordjs/docgen": "workspace:^", "@favware/cliff-jumper": "^1.8.7", - "@microsoft/api-extractor": "^7.29.5", + "@microsoft/api-extractor": "^7.30.0", "@types/node": "^16.11.56", "@vitest/coverage-c8": "^0.22.1", "downlevel-dts": "^0.10.1", "eslint": "^8.23.0", - "eslint-config-neon": "^0.1.23", + "eslint-config-neon": "^0.1.31", "prettier": "^2.7.1", "tsup": "^6.2.3", "typescript": "^4.8.2", diff --git a/packages/rest/src/lib/utils/utils.ts b/packages/rest/src/lib/utils/utils.ts index 97158e99743a..770cc59c5168 100644 --- a/packages/rest/src/lib/utils/utils.ts +++ b/packages/rest/src/lib/utils/utils.ts @@ -7,9 +7,7 @@ import type { RequestOptions } from '../REST.js'; import { RequestMethod } from '../RequestManager.js'; export function parseHeader(header: string[] | string | undefined): string | undefined { - if (header === undefined) { - return header; - } else if (typeof header === 'string') { + if (header === undefined || typeof header === 'string') { return header; } diff --git a/packages/scripts/package.json b/packages/scripts/package.json index 507c4c4b0d25..f744da2f6080 100644 --- a/packages/scripts/package.json +++ b/packages/scripts/package.json @@ -44,7 +44,7 @@ "homepage": "https://discord.js.org", "dependencies": { "@discordjs/api-extractor-utils": "workspace:^", - "@microsoft/api-extractor-model": "^7.23.3", + "@microsoft/api-extractor-model": "7.23.3", "@microsoft/tsdoc": "^0.14.1", "commander": "^9.4.0", "tslib": "^2.4.0" @@ -53,7 +53,7 @@ "@types/node": "^16.11.56", "@vitest/coverage-c8": "^0.22.1", "eslint": "^8.23.0", - "eslint-config-neon": "^0.1.23", + "eslint-config-neon": "^0.1.31", "prettier": "^2.7.1", "tsup": "^6.2.3", "typescript": "^4.8.2", diff --git a/packages/voice/package.json b/packages/voice/package.json index 413db450d93a..f42e85f4fbe2 100644 --- a/packages/voice/package.json +++ b/packages/voice/package.json @@ -64,12 +64,12 @@ "@babel/preset-typescript": "^7.18.6", "@discordjs/docgen": "workspace:^", "@favware/cliff-jumper": "^1.8.7", - "@microsoft/api-extractor": "^7.29.5", + "@microsoft/api-extractor": "^7.30.0", "@types/jest": "^29.0.0", "@types/node": "^16.11.56", "downlevel-dts": "^0.10.1", "eslint": "^8.23.0", - "eslint-config-neon": "^0.1.23", + "eslint-config-neon": "^0.1.31", "jest": "^29.0.1", "jest-websocket-mock": "^2.4.0", "mock-socket": "^9.1.5", diff --git a/packages/website/package.json b/packages/website/package.json index 22b1d6884057..71bb96c5ad00 100644 --- a/packages/website/package.json +++ b/packages/website/package.json @@ -79,7 +79,7 @@ "@vitest/coverage-c8": "^0.22.1", "concurrently": "^7.3.0", "eslint": "^8.23.0", - "eslint-config-neon": "^0.1.23", + "eslint-config-neon": "^0.1.31", "happy-dom": "^6.0.4", "prettier": "^2.7.1", "typescript": "^4.8.2", diff --git a/packages/ws/package.json b/packages/ws/package.json index c4a7a4eb509d..7ac1cd4cf6fa 100644 --- a/packages/ws/package.json +++ b/packages/ws/package.json @@ -64,12 +64,12 @@ "devDependencies": { "@discordjs/docgen": "workspace:^", "@favware/cliff-jumper": "^1.8.7", - "@microsoft/api-extractor": "^7.29.5", + "@microsoft/api-extractor": "^7.30.0", "@types/node": "^16.11.56", "@vitest/coverage-c8": "^0.22.1", "downlevel-dts": "^0.10.1", "eslint": "^8.23.0", - "eslint-config-neon": "^0.1.23", + "eslint-config-neon": "^0.1.31", "mock-socket": "^9.1.5", "prettier": "^2.7.1", "tsup": "^6.2.3", diff --git a/packages/ws/src/ws/WebSocketShard.ts b/packages/ws/src/ws/WebSocketShard.ts index 27cbb2a24dc2..406da1da517e 100644 --- a/packages/ws/src/ws/WebSocketShard.ts +++ b/packages/ws/src/ws/WebSocketShard.ts @@ -394,6 +394,7 @@ export class WebSocketShard extends AsyncEventEmitter { this.replayedEvents++; } + // eslint-disable-next-line sonarjs/no-nested-switch switch (payload.t) { case GatewayDispatchEvents.Ready: { this.emit(WebSocketShardEvents.Ready); diff --git a/yarn.lock b/yarn.lock index 81251d0d9fe7..ab1c5e21234f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -122,9 +122,9 @@ __metadata: linkType: hard "@babel/compat-data@npm:^7.17.7, @babel/compat-data@npm:^7.18.8": - version: 7.18.8 - resolution: "@babel/compat-data@npm:7.18.8" - checksum: 3096aafad74936477ebdd039bcf342fba84eb3100e608f3360850fb63e1efa1c66037c4824f814d62f439ab47d25164439343a6e92e9b4357024fdf571505eb9 + version: 7.18.13 + resolution: "@babel/compat-data@npm:7.18.13" + checksum: 869a730dc3ec40d4d5141b832d50b16702a2ea7bf5b87dc2761e7dfaa8deeafa03b8809fc42ff713ac1d450748dcdb07e1eb21f4633e10b87fd47be0065573e6 languageName: node linkType: hard @@ -196,8 +196,8 @@ __metadata: linkType: hard "@babel/helper-create-class-features-plugin@npm:^7.18.6, @babel/helper-create-class-features-plugin@npm:^7.18.9": - version: 7.18.9 - resolution: "@babel/helper-create-class-features-plugin@npm:7.18.9" + version: 7.18.13 + resolution: "@babel/helper-create-class-features-plugin@npm:7.18.13" dependencies: "@babel/helper-annotate-as-pure": ^7.18.6 "@babel/helper-environment-visitor": ^7.18.9 @@ -208,7 +208,7 @@ __metadata: "@babel/helper-split-export-declaration": ^7.18.6 peerDependencies: "@babel/core": ^7.0.0 - checksum: 020dba79b92ee9a98520dad81dddb47d75b34b7b4392672cbefc59db6f5e89a96c5eb95bb1cc46b2fddf913ef63dfe6d17168f56b059af5c6965bb37b6ce1d82 + checksum: 3d2da92a54b885b211a747a8c553bb0190895d140cd1daab5d9945b2b271817d9d288a512364085e9fad19bd503921cd85fcc12f98df67b39b27f5655eb9d058 languageName: node linkType: hard @@ -434,7 +434,7 @@ __metadata: languageName: node linkType: hard -"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.14.7, @babel/parser@npm:^7.18.10, @babel/parser@npm:^7.18.13, @babel/parser@npm:^7.9.4": +"@babel/parser@npm:^7.1.0, @babel/parser@npm:^7.10.3, @babel/parser@npm:^7.14.7, @babel/parser@npm:^7.18.10, @babel/parser@npm:^7.18.13, @babel/parser@npm:^7.9.4": version: 7.18.13 resolution: "@babel/parser@npm:7.18.13" bin: @@ -941,13 +941,13 @@ __metadata: linkType: hard "@babel/plugin-transform-destructuring@npm:^7.18.9": - version: 7.18.9 - resolution: "@babel/plugin-transform-destructuring@npm:7.18.9" + version: 7.18.13 + resolution: "@babel/plugin-transform-destructuring@npm:7.18.13" dependencies: "@babel/helper-plugin-utils": ^7.18.9 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 1a9b85dff67fd248fa8a2488ef59df3eb4dd4ca6007ff7db9f780c7873630a13bc16cfb2ad8f4c4ca966e42978410d1e4b306545941fe62769f2683f34973acd + checksum: 83e44ec93a4cfbf69376db8836d00ec803820081bf0f8b6cea73a9b3cd320b8285768d5b385744af4a27edda4b6502245c52d3ed026ea61356faf57bfe78effb languageName: node linkType: hard @@ -1449,7 +1449,7 @@ __metadata: languageName: node linkType: hard -"@babel/traverse@npm:^7.18.11, @babel/traverse@npm:^7.18.13, @babel/traverse@npm:^7.18.9, @babel/traverse@npm:^7.7.2": +"@babel/traverse@npm:^7.10.3, @babel/traverse@npm:^7.18.11, @babel/traverse@npm:^7.18.13, @babel/traverse@npm:^7.18.9, @babel/traverse@npm:^7.7.2": version: 7.18.13 resolution: "@babel/traverse@npm:7.18.13" dependencies: @@ -1467,7 +1467,7 @@ __metadata: languageName: node linkType: hard -"@babel/types@npm:^7.0.0, @babel/types@npm:^7.18.10, @babel/types@npm:^7.18.13, @babel/types@npm:^7.18.6, @babel/types@npm:^7.18.9, @babel/types@npm:^7.3.0, @babel/types@npm:^7.3.3, @babel/types@npm:^7.4.4, @babel/types@npm:^7.8.3": +"@babel/types@npm:^7.0.0, @babel/types@npm:^7.10.3, @babel/types@npm:^7.18.10, @babel/types@npm:^7.18.13, @babel/types@npm:^7.18.6, @babel/types@npm:^7.18.9, @babel/types@npm:^7.3.0, @babel/types@npm:^7.3.3, @babel/types@npm:^7.4.4, @babel/types@npm:^7.8.3": version: 7.18.13 resolution: "@babel/types@npm:7.18.13" dependencies: @@ -1693,28 +1693,28 @@ __metadata: linkType: hard "@definitelytyped/header-parser@npm:latest": - version: 0.0.122 - resolution: "@definitelytyped/header-parser@npm:0.0.122" + version: 0.0.127 + resolution: "@definitelytyped/header-parser@npm:0.0.127" dependencies: - "@definitelytyped/typescript-versions": ^0.0.122 + "@definitelytyped/typescript-versions": ^0.0.127 "@types/parsimmon": ^1.10.1 parsimmon: ^1.13.0 - checksum: 6f541deb9fc01ee7de2291a11c9be4166340f5f9d7e763ecc79a675971706e37cdd7e49784cb3be952e7b58dfe5088e796faf1c6fcc5305fe5a43c66937fe04e + checksum: e859cc43977df0a604f27cdc1471c7adcc292b5717cfc65eecbf669bc3a59f0453b25133f76a0964017cde1d482098044ffba54e563ed70ff015a96b000486ce languageName: node linkType: hard -"@definitelytyped/typescript-versions@npm:^0.0.122, @definitelytyped/typescript-versions@npm:latest": - version: 0.0.122 - resolution: "@definitelytyped/typescript-versions@npm:0.0.122" - checksum: acea2837a2323986a9c99f585768ea352d7f7e1d379fe73a0e82587d7e74b0be6c22a9dde00a031dedcfd7d61338d7ec14b50cba360657d4f440424fd1e3b3a0 +"@definitelytyped/typescript-versions@npm:^0.0.127, @definitelytyped/typescript-versions@npm:latest": + version: 0.0.127 + resolution: "@definitelytyped/typescript-versions@npm:0.0.127" + checksum: 6891438b900973c27de944a5c0579a59381e18a29bcd16fa79419ef2c96c454f02449f7786d4b6728d5bb74890fd478b416282ef7d7c2be7ad2373d653a8203a languageName: node linkType: hard "@definitelytyped/utils@npm:latest": - version: 0.0.122 - resolution: "@definitelytyped/utils@npm:0.0.122" + version: 0.0.127 + resolution: "@definitelytyped/utils@npm:0.0.127" dependencies: - "@definitelytyped/typescript-versions": ^0.0.122 + "@definitelytyped/typescript-versions": ^0.0.127 "@qiwi/npm-registry-client": ^8.9.1 "@types/node": ^14.14.35 charm: ^1.0.2 @@ -1722,7 +1722,7 @@ __metadata: fstream: ^1.0.12 tar: ^6.1.11 tar-stream: ^2.1.4 - checksum: 33e7f9ffbd410145edc1738e8a14aba1bb24cbf9c8429d07d2490767ba61a57bc1d8f769bb8ff7d032a1d88fc3ddb30c8d564b259480ce04b8d59ae4b5754a1a + checksum: 9c674659e0f074dc0aaebfd5565785b831b69d790b773d37d8ea08a86e473720fa31ad804273a1b90d563c5ddfac8b2e3ef7fe1aeb1ba3e51b04a8ad7778a690 languageName: node linkType: hard @@ -1734,7 +1734,7 @@ __metadata: "@types/node": ^16.11.56 "@vitest/coverage-c8": ^0.22.1 eslint: ^8.23.0 - eslint-config-neon: ^0.1.23 + eslint-config-neon: ^0.1.31 prettier: ^2.7.1 tslib: ^2.4.0 tsup: ^6.2.3 @@ -1747,11 +1747,11 @@ __metadata: version: 0.0.0-use.local resolution: "@discordjs/api-extractor-utils@workspace:packages/api-extractor-utils" dependencies: - "@microsoft/api-extractor-model": ^7.23.3 + "@microsoft/api-extractor-model": 7.23.3 "@microsoft/tsdoc": ^0.14.1 "@types/node": ^16.11.56 eslint: ^8.23.0 - eslint-config-neon: ^0.1.23 + eslint-config-neon: ^0.1.31 prettier: ^2.7.1 tsup: ^6.2.3 typescript: ^4.8.2 @@ -1764,14 +1764,14 @@ __metadata: dependencies: "@discordjs/docgen": "workspace:^" "@favware/cliff-jumper": ^1.8.7 - "@microsoft/api-extractor": ^7.29.5 + "@microsoft/api-extractor": ^7.30.0 "@sapphire/shapeshift": ^3.6.0 "@types/node": ^16.11.56 "@vitest/coverage-c8": ^0.22.1 discord-api-types: ^0.37.5 downlevel-dts: ^0.10.1 eslint: ^8.23.0 - eslint-config-neon: ^0.1.23 + eslint-config-neon: ^0.1.31 fast-deep-equal: ^3.1.3 prettier: ^2.7.1 ts-mixer: ^6.0.1 @@ -1788,12 +1788,12 @@ __metadata: dependencies: "@discordjs/docgen": "workspace:^" "@favware/cliff-jumper": ^1.8.7 - "@microsoft/api-extractor": ^7.29.5 + "@microsoft/api-extractor": ^7.30.0 "@types/node": ^16.11.56 "@vitest/coverage-c8": ^0.22.1 downlevel-dts: ^0.10.1 eslint: ^8.23.0 - eslint-config-neon: ^0.1.23 + eslint-config-neon: ^0.1.31 prettier: ^2.7.1 tsup: ^6.2.3 typescript: ^4.8.2 @@ -1828,7 +1828,7 @@ __metadata: "@types/node": ^16.11.56 commander: ^9.4.0 eslint: ^8.23.0 - eslint-config-neon: ^0.1.23 + eslint-config-neon: ^0.1.31 jsdoc-to-markdown: ^7.1.1 prettier: ^2.7.1 tslib: ^2.4.0 @@ -1848,7 +1848,7 @@ __metadata: "@discordjs/rest": ^1.1.0 "@types/node": ^16.11.56 eslint: ^8.23.0 - eslint-config-neon: ^0.1.23 + eslint-config-neon: ^0.1.31 prettier: ^2.7.1 tslib: ^2.4.0 tsup: ^6.2.3 @@ -1863,13 +1863,13 @@ __metadata: "@discordjs/docgen": "workspace:^" "@discordjs/rest": ^1.0.0 "@favware/cliff-jumper": ^1.8.7 - "@microsoft/api-extractor": ^7.29.5 + "@microsoft/api-extractor": ^7.30.0 "@types/node": ^16.11.56 "@types/supertest": ^2.0.12 "@vitest/coverage-c8": ^0.22.1 downlevel-dts: ^0.10.1 eslint: ^8.23.0 - eslint-config-neon: ^0.1.23 + eslint-config-neon: ^0.1.31 prettier: ^2.7.1 supertest: ^6.2.4 tslib: ^2.4.0 @@ -1887,7 +1887,7 @@ __metadata: "@discordjs/collection": "workspace:^" "@discordjs/docgen": "workspace:^" "@favware/cliff-jumper": ^1.8.7 - "@microsoft/api-extractor": ^7.29.5 + "@microsoft/api-extractor": ^7.30.0 "@sapphire/async-queue": ^1.5.0 "@sapphire/snowflake": ^3.2.2 "@types/node": ^16.11.56 @@ -1895,7 +1895,7 @@ __metadata: discord-api-types: ^0.37.5 downlevel-dts: ^0.10.1 eslint: ^8.23.0 - eslint-config-neon: ^0.1.23 + eslint-config-neon: ^0.1.31 file-type: ^18.0.0 prettier: ^2.7.1 tslib: ^2.4.0 @@ -1911,13 +1911,13 @@ __metadata: resolution: "@discordjs/scripts@workspace:packages/scripts" dependencies: "@discordjs/api-extractor-utils": "workspace:^" - "@microsoft/api-extractor-model": ^7.23.3 + "@microsoft/api-extractor-model": 7.23.3 "@microsoft/tsdoc": ^0.14.1 "@types/node": ^16.11.56 "@vitest/coverage-c8": ^0.22.1 commander: ^9.4.0 eslint: ^8.23.0 - eslint-config-neon: ^0.1.23 + eslint-config-neon: ^0.1.31 prettier: ^2.7.1 tslib: ^2.4.0 tsup: ^6.2.3 @@ -1935,14 +1935,14 @@ __metadata: "@babel/preset-typescript": ^7.18.6 "@discordjs/docgen": "workspace:^" "@favware/cliff-jumper": ^1.8.7 - "@microsoft/api-extractor": ^7.29.5 + "@microsoft/api-extractor": ^7.30.0 "@types/jest": ^29.0.0 "@types/node": ^16.11.56 "@types/ws": ^8.5.3 discord-api-types: ^0.37.5 downlevel-dts: ^0.10.1 eslint: ^8.23.0 - eslint-config-neon: ^0.1.23 + eslint-config-neon: ^0.1.31 jest: ^29.0.1 jest-websocket-mock: ^2.4.0 mock-socket: ^9.1.5 @@ -1984,7 +1984,7 @@ __metadata: "@vscode/codicons": ^0.0.32 concurrently: ^7.3.0 eslint: ^8.23.0 - eslint-config-neon: ^0.1.23 + eslint-config-neon: ^0.1.31 happy-dom: ^6.0.4 next: ^12.2.5 next-mdx-remote: ^4.1.0 @@ -2016,7 +2016,7 @@ __metadata: "@discordjs/docgen": "workspace:^" "@discordjs/rest": "workspace:^" "@favware/cliff-jumper": ^1.8.7 - "@microsoft/api-extractor": ^7.29.5 + "@microsoft/api-extractor": ^7.30.0 "@sapphire/async-queue": ^1.5.0 "@types/node": ^16.11.56 "@types/ws": ^8.5.3 @@ -2025,7 +2025,7 @@ __metadata: discord-api-types: ^0.37.5 downlevel-dts: ^0.10.1 eslint: ^8.23.0 - eslint-config-neon: ^0.1.23 + eslint-config-neon: ^0.1.31 mock-socket: ^9.1.5 prettier: ^2.7.1 tslib: ^2.4.0 @@ -2039,16 +2039,16 @@ __metadata: linkType: soft "@edge-runtime/format@npm:^1.1.0-beta.23": - version: 1.1.0-beta.26 - resolution: "@edge-runtime/format@npm:1.1.0-beta.26" - checksum: 538b8653f3e2fd8051af6bb11b775f77d6ee91baa92d86458873488de322386821baa562e228fbcd9b7e2bdd2a4c59d91c4971a27f596fd927a8df34d83e4f5b + version: 1.1.0-beta.32 + resolution: "@edge-runtime/format@npm:1.1.0-beta.32" + checksum: 28a1eb9800a0e37029beed7dc142750327f3946db7a777007c352b72cca0b7cf43825f0e54f97b449cd982b4003ca62b7e4a35e1c10261cb991f71e8367012b7 languageName: node linkType: hard -"@edge-runtime/primitives@npm:^1.1.0-beta.23, @edge-runtime/primitives@npm:^1.1.0-beta.26": - version: 1.1.0-beta.26 - resolution: "@edge-runtime/primitives@npm:1.1.0-beta.26" - checksum: 9ec3e6bf25f95a3dc96a06ad2339e040abb1536ed7eff78bc6a1e284c1d6dc4d0f7bfb7e6216d895b4703a078082b7a639deae6ebccf780d437975251c352149 +"@edge-runtime/primitives@npm:^1.1.0-beta.23, @edge-runtime/primitives@npm:^1.1.0-beta.32": + version: 1.1.0-beta.33 + resolution: "@edge-runtime/primitives@npm:1.1.0-beta.33" + checksum: d25577303edd818fbfacc8a4fe95ae3f702cb5fd6e4b30e2a0cf16930b17cb93b3cc5e6af6f73d6fc95a0857c1503a13489c5917c6dbb90cf8300c0462106c6c languageName: node linkType: hard @@ -2062,17 +2062,17 @@ __metadata: linkType: hard "@edge-runtime/vm@npm:^1.1.0-beta.23": - version: 1.1.0-beta.26 - resolution: "@edge-runtime/vm@npm:1.1.0-beta.26" + version: 1.1.0-beta.32 + resolution: "@edge-runtime/vm@npm:1.1.0-beta.32" dependencies: - "@edge-runtime/primitives": ^1.1.0-beta.26 - checksum: 1b272fc2c2bbea413edd11d96be82364e855371498a9c5a6def182b87a97f3c9f88d4ce772dd2dc7856da00cd02d8c3fed243810453c2d15ae55a3aa65835870 + "@edge-runtime/primitives": ^1.1.0-beta.32 + checksum: eb80e56319e69095b15576878c6d9788b4a73d7dd3282c8ce2a405623635018f7d182e786f2a4f5dcca8edf6bbf9566f450588854652bea8a8eff5127586ec23 languageName: node linkType: hard "@emotion/babel-plugin@npm:^11.10.0": - version: 11.10.0 - resolution: "@emotion/babel-plugin@npm:11.10.0" + version: 11.10.2 + resolution: "@emotion/babel-plugin@npm:11.10.2" dependencies: "@babel/helper-module-imports": ^7.16.7 "@babel/plugin-syntax-jsx": ^7.17.12 @@ -2088,20 +2088,20 @@ __metadata: stylis: 4.0.13 peerDependencies: "@babel/core": ^7.0.0 - checksum: 7f1c615e5e559fd037eab8d08b842cd6c089543f9c8829d22d097f69c5436298ff4fa9e1a2117892ce26a60abc1f57641dd9ccb011096b2e34c5588bf994addc + checksum: 7f9e84b3c00b4db5a829c6880549c6a816b3defcaf828cb37808737f3c17b22a45a06e48334f38f5729b218812252857ced27d3a12dd8ca1e260e4b1d0045dfd languageName: node linkType: hard "@emotion/cache@npm:^11.10.0": - version: 11.10.1 - resolution: "@emotion/cache@npm:11.10.1" + version: 11.10.3 + resolution: "@emotion/cache@npm:11.10.3" dependencies: "@emotion/memoize": ^0.8.0 "@emotion/sheet": ^1.2.0 "@emotion/utils": ^1.2.0 "@emotion/weak-memoize": ^0.3.0 stylis: 4.0.13 - checksum: 950203c5a447c107a189042178fdf43b2e699f579e2d7cd9f39cb99ee2b1f20d84bb1ed653d2737a1adb79756c1f747783875ee76ccb547357f5aa9cd5ce63ee + checksum: d31291eff1b270d8db6f471b2b9b3bc5d786c296838631f101837747ff5afa8e8890655279457c68ce2cee23256ab02a25c177f5487b5061da82c7354c1bdce5 languageName: node linkType: hard @@ -2885,7 +2885,7 @@ __metadata: languageName: node linkType: hard -"@microsoft/api-extractor-model@npm:7.23.3, @microsoft/api-extractor-model@npm:^7.23.3": +"@microsoft/api-extractor-model@npm:7.23.3": version: 7.23.3 resolution: "@microsoft/api-extractor-model@npm:7.23.3" dependencies: @@ -2896,11 +2896,22 @@ __metadata: languageName: node linkType: hard -"@microsoft/api-extractor@npm:^7.29.5": - version: 7.29.5 - resolution: "@microsoft/api-extractor@npm:7.29.5" +"@microsoft/api-extractor-model@npm:7.24.0, @microsoft/api-extractor-model@npm:^7.23.3": + version: 7.24.0 + resolution: "@microsoft/api-extractor-model@npm:7.24.0" dependencies: - "@microsoft/api-extractor-model": 7.23.3 + "@microsoft/tsdoc": 0.14.1 + "@microsoft/tsdoc-config": ~0.16.1 + "@rushstack/node-core-library": 3.51.1 + checksum: d683ca227ed79f0bd8725caba190bb281b1f2088602268cbecd5d8dd690c601034c447a35e22f63866f79544f9648bc46631e0d724c3e54bc7438591e1f4312f + languageName: node + linkType: hard + +"@microsoft/api-extractor@npm:^7.30.0": + version: 7.30.0 + resolution: "@microsoft/api-extractor@npm:7.30.0" + dependencies: + "@microsoft/api-extractor-model": 7.24.0 "@microsoft/tsdoc": 0.14.1 "@microsoft/tsdoc-config": ~0.16.1 "@rushstack/node-core-library": 3.51.1 @@ -2914,7 +2925,7 @@ __metadata: typescript: ~4.7.4 bin: api-extractor: bin/api-extractor - checksum: f80f5963591384029f71c8db2f3cd32eb098ce4f622e420b695ac947c104612a5a483126428aade638d5d751e840f79e4f36cb0c8e59c363663cf72971937b73 + checksum: e53ec885d0c645a7202d2e5849bb4a62dbdbb894c66cc21b118e74a043bb0a121fa7f846d08ab4924cb7a5c8eb5cef244d9ba55758718f6670f27604a1894a16 languageName: node linkType: hard @@ -3084,22 +3095,22 @@ __metadata: linkType: hard "@npmcli/fs@npm:^2.1.0": - version: 2.1.1 - resolution: "@npmcli/fs@npm:2.1.1" + version: 2.1.2 + resolution: "@npmcli/fs@npm:2.1.2" dependencies: "@gar/promisify": ^1.1.3 semver: ^7.3.5 - checksum: 4944a0545d38d3e6e29780eeb3cd4be6059c1e9627509d2c9ced635c53b852d28b37cdc615a2adf815b51ab8673adb6507e370401a20a7e90c8a6dc4fac02389 + checksum: 405074965e72d4c9d728931b64d2d38e6ea12066d4fad651ac253d175e413c06fe4350970c783db0d749181da8fe49c42d3880bd1cbc12cd68e3a7964d820225 languageName: node linkType: hard "@npmcli/move-file@npm:^2.0.0": - version: 2.0.0 - resolution: "@npmcli/move-file@npm:2.0.0" + version: 2.0.1 + resolution: "@npmcli/move-file@npm:2.0.1" dependencies: mkdirp: ^1.0.4 rimraf: ^3.0.2 - checksum: 1388777b507b0c592d53f41b9d182e1a8de7763bc625fc07999b8edbc22325f074e5b3ec90af79c89d6987fdb2325bc66d59f483258543c14a43661621f841b0 + checksum: 52dc02259d98da517fae4cb3a0a3850227bdae4939dda1980b788a7670636ca2b4a01b58df03dd5f65c1e3cb70c50fa8ce5762b582b3f499ec30ee5ce1fd9380 languageName: node linkType: hard @@ -3338,9 +3349,9 @@ __metadata: linkType: hard "@sapphire/result@npm:^2.4.0": - version: 2.4.0 - resolution: "@sapphire/result@npm:2.4.0" - checksum: ac4fb15e1375b7d39a60f10acc8afdb710831b8677ec2fed8bb9dc625d8716fbda607ea63c678a4f3b1c7c3c47db25655903401cb5073c3037ebbae56ca9cabc + version: 2.4.1 + resolution: "@sapphire/result@npm:2.4.1" + checksum: 622e96f5907d861d4ecdbb8276e3a7a53160e65349601db00974298825b9ed0021bd1472431b833dd4f251e6532e045036364a7fddeec9eac8a267fa7492b62c languageName: node linkType: hard @@ -3362,16 +3373,16 @@ __metadata: linkType: hard "@sapphire/utilities@npm:^3.8.0, @sapphire/utilities@npm:^3.9.2": - version: 3.9.2 - resolution: "@sapphire/utilities@npm:3.9.2" - checksum: eeef33b03b802e931ada752b8c335cc8bde4017f8029b577b0247e3f3d2b57bf5f1936b2c8c29aef5e2c6975d9b162363e4c5c434c4fead0bba74253d067b4d9 + version: 3.9.3 + resolution: "@sapphire/utilities@npm:3.9.3" + checksum: 9f3f977fd5c0677d5f79136e9cb68ade3317cfba3e87bb58689f4af68233a807af34eb6092ad262c946d5eaf5c4a76cd534b0b395ebbaf0f0912dd80e174f912 languageName: node linkType: hard "@sinclair/typebox@npm:^0.24.1": - version: 0.24.28 - resolution: "@sinclair/typebox@npm:0.24.28" - checksum: adc1f06c548f0c495dad5a7124394242553e059c5ea3faa19f404b43958125366513240f17fa2b5272a3aec18618cab4137d5c85259e99ce9eaca67538af2732 + version: 0.24.34 + resolution: "@sinclair/typebox@npm:0.24.34" + checksum: 35adcc7698fe751951e75fefe748a1d6e928afa3e52c153d1984a9d47c2a4f39e89f6adf727daef5cc12a58c71c2a0f63e3d88d105e4435252cfb68231518687 languageName: node linkType: hard @@ -3574,11 +3585,11 @@ __metadata: linkType: hard "@types/babel__traverse@npm:*, @types/babel__traverse@npm:^7.0.6": - version: 7.18.0 - resolution: "@types/babel__traverse@npm:7.18.0" + version: 7.18.1 + resolution: "@types/babel__traverse@npm:7.18.1" dependencies: "@babel/types": ^7.3.0 - checksum: 5fd7f4ea0963f9669b1bd6bd928b2d81452b98e4acfcfeb26ca4476162b87f9c1d8f66ff13567fd9f760a31ad04c36d767fa874f569aded6fb46890e379327c1 + checksum: a7158b13e5e4b844565217d04a0a09c1cf04e67de90972318960028effbd5e7400f2567b72c5f790acffdab9b4adce8d68f435a2f0c2b16e2c9c45994ace98f2 languageName: node linkType: hard @@ -3796,9 +3807,9 @@ __metadata: linkType: hard "@types/node@npm:*": - version: 18.7.4 - resolution: "@types/node@npm:18.7.4" - checksum: 051d2147e4d8129fceb63ee9384259b2f224dbc4e4b0c46d96a6b61cbaad4e3fe4060950e7f4fc3d5692b1e6ea47e68ad03b61155754bfa169593747cfe3f8f4 + version: 18.7.14 + resolution: "@types/node@npm:18.7.14" + checksum: 99cf28ff854100158de875cca23c7acc3cc01dfee526a52b90b7f36767c821bcbaf2be0a98a70f06f3b78f3c60639168ff949d725b61e2e124f9f71f1fb8043d languageName: node linkType: hard @@ -3905,13 +3916,13 @@ __metadata: linkType: hard "@types/react@npm:*, @types/react@npm:>=16": - version: 18.0.17 - resolution: "@types/react@npm:18.0.17" + version: 18.0.18 + resolution: "@types/react@npm:18.0.18" dependencies: "@types/prop-types": "*" "@types/scheduler": "*" csstype: ^3.0.2 - checksum: 18cae64f5bfd6bb58fbd8ee2ba52ec82de844f114254e26de7b513e4b86621f643f9b71d7066958cd571b0d78cb86cbceda449c5289f9349ca573df29ab69252 + checksum: 6d72d35ab3eecf382a5e0f225923f5a2c753045fce02e4e29713f36c99a24f0f770666a49dde96167f37c86271f93339d1b7e2b8969d011b137a9ebd24ee6806 languageName: node linkType: hard @@ -3980,12 +3991,12 @@ __metadata: languageName: node linkType: hard -"@types/yargs@npm:^17.0.8": - version: 17.0.11 - resolution: "@types/yargs@npm:17.0.11" +"@types/yargs@npm:^17.0.0, @types/yargs@npm:^17.0.8": + version: 17.0.12 + resolution: "@types/yargs@npm:17.0.12" dependencies: "@types/yargs-parser": "*" - checksum: 30a45f9e59a5cc3c967f76036bea6a456b1416175aa4c002b70e1f295772e2247ed8117f392b20eef4557ad761678df8c1fcb141852f2c7c44977130d802c855 + checksum: 5b41d21d8624199f89db82209b2adab2e47867b3677e852fde65698be2ca48364b14c2e70cb0adc9bca4a2102c93dad2409cae0ad666ea36ae031ae1cb08a7b5 languageName: node linkType: hard @@ -4854,15 +4865,21 @@ __metadata: linkType: hard "aria-hidden@npm:^1.1.3": - version: 1.1.3 - resolution: "aria-hidden@npm:1.1.3" + version: 1.2.1 + resolution: "aria-hidden@npm:1.2.1" dependencies: - tslib: ^1.0.0 - checksum: 2d40a328246baac7ae0b243ebe0cbef53c836c5f78c9212e9c1ff93f3aee185bd9aa51773e161e0025722d691c9d5f125070f6175a7074c4a57778ddc30d9e74 + tslib: ^2.0.0 + peerDependencies: + "@types/react": ^16.9.0 || ^17.0.0 || ^18.0.0 + react: ^16.9.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + "@types/react": + optional: true + checksum: cd8047a0113d5ecc11bce1616ae2772abcb0a6e1da5a70cbfc3555e8da063b0416d62cced3e704b6d424cbf408c1fc21225d69723cd62c3f1f0cf3b41d674c2b languageName: node linkType: hard -"aria-query@npm:5.0.0, aria-query@npm:^5.0.0": +"aria-query@npm:5.0.0": version: 5.0.0 resolution: "aria-query@npm:5.0.0" checksum: c41f98866c5a304561ee8cae55856711cddad6f3f85d8cb43cc5f79667078d9b8979ce32d244c1ff364e6463a4d0b6865804a33ccc717fed701b281cf7dc6296 @@ -4879,6 +4896,13 @@ __metadata: languageName: node linkType: hard +"aria-query@npm:^5.0.0": + version: 5.0.2 + resolution: "aria-query@npm:5.0.2" + checksum: 2ecb77a64b9bbb030f5267b8672042b9559bdc507348d7c5efc14a6c180b06704c63481b162913f0466391837569b6d84f93ab18d73629e7bfa34c4f927c1fbc + languageName: node + linkType: hard + "array-back@npm:^1.0.2, array-back@npm:^1.0.3": version: 1.0.4 resolution: "array-back@npm:1.0.4" @@ -5278,6 +5302,17 @@ __metadata: languageName: node linkType: hard +"bent@npm:~7.3.6": + version: 7.3.12 + resolution: "bent@npm:7.3.12" + dependencies: + bytesish: ^0.4.1 + caseless: ~0.12.0 + is-stream: ^2.0.0 + checksum: b0c08f6fa204baec0841021f5cff49aba929bbff28089bbac0d446122aa5f8e10b1b6837310b0800717cbf431c984bead2ed130bec35045d4ea688d896458d54 + languageName: node + linkType: hard + "binary-extensions@npm:^2.0.0": version: 2.2.0 resolution: "binary-extensions@npm:2.2.0" @@ -5451,6 +5486,13 @@ __metadata: languageName: node linkType: hard +"bytesish@npm:^0.4.1": + version: 0.4.4 + resolution: "bytesish@npm:0.4.4" + checksum: 50a6c9423f66fff984676ee1d3c5f12d2a23830cb5de81abc597415aa2f51cc617b251d660eede10b8e45bf3a3a5c31d4be467ec69888f31ccc66e90cb586ad5 + languageName: node + linkType: hard + "c8@npm:^7.12.0": version: 7.12.0 resolution: "c8@npm:7.12.0" @@ -5474,15 +5516,15 @@ __metadata: linkType: hard "cac@npm:^6.7.12": - version: 6.7.12 - resolution: "cac@npm:6.7.12" - checksum: c0d4129eb30fc43449e9078ac37bb3b837aab6261236a6642a6fb9d839bb6a41e191e1f2776f87569535db07dcbf4937680419126215b4c17c9dba4351d1bd5e + version: 6.7.14 + resolution: "cac@npm:6.7.14" + checksum: 45a2496a9443abbe7f52a49b22fbe51b1905eff46e03fd5e6c98e3f85077be3f8949685a1849b1a9cd2bc3e5567dfebcf64f01ce01847baf918f1b37c839791a languageName: node linkType: hard "cacache@npm:^16.1.0": - version: 16.1.1 - resolution: "cacache@npm:16.1.1" + version: 16.1.3 + resolution: "cacache@npm:16.1.3" dependencies: "@npmcli/fs": ^2.1.0 "@npmcli/move-file": ^2.0.0 @@ -5501,8 +5543,8 @@ __metadata: rimraf: ^3.0.2 ssri: ^9.0.0 tar: ^6.1.11 - unique-filename: ^1.1.1 - checksum: 488524617008b793f0249b0c4ea2c330c710ca997921376e15650cc2415a8054491ae2dee9f01382c2015602c0641f3f977faf2fa7361aa33d2637dcfb03907a + unique-filename: ^2.0.0 + checksum: d91409e6e57d7d9a3a25e5dcc589c84e75b178ae8ea7de05cbf6b783f77a5fae938f6e8fda6f5257ed70000be27a681e1e44829251bfffe4c10216002f8f14e6 languageName: node linkType: hard @@ -5575,9 +5617,9 @@ __metadata: linkType: hard "caniuse-lite@npm:^1.0.30001332, caniuse-lite@npm:^1.0.30001370": - version: 1.0.30001376 - resolution: "caniuse-lite@npm:1.0.30001376" - checksum: bbb9e8f6d7430b3af8e03e03728637eb765feb6d591612b178f8e416db9098690fdefda00d741f21dc5297bc9aead51f4059769f3d19b15c2447eb818f993ce5 + version: 1.0.30001388 + resolution: "caniuse-lite@npm:1.0.30001388" + checksum: 4934f99bf99521484d4048023f57046812fbc9218924dbe30bb8379cd7b0315d9489b7de4d226a9921b0a9fd5d05b12023930ad6b4104854fb03dcbf999784db languageName: node linkType: hard @@ -5643,7 +5685,7 @@ __metadata: languageName: node linkType: hard -"chalk@npm:^4.0.0, chalk@npm:^4.1.0": +"chalk@npm:^4.0.0, chalk@npm:^4.1.0, chalk@npm:~4.1.0": version: 4.1.2 resolution: "chalk@npm:4.1.2" dependencies: @@ -6084,6 +6126,13 @@ __metadata: languageName: node linkType: hard +"common-tags@npm:^1.8.0": + version: 1.8.2 + resolution: "common-tags@npm:1.8.2" + checksum: 767a6255a84bbc47df49a60ab583053bb29a7d9687066a18500a516188a062c4e4cd52de341f22de0b07062e699b1b8fe3cfa1cb55b241cb9301aeb4f45b4dff + languageName: node + linkType: hard + "compare-func@npm:^2.0.0": version: 2.0.0 resolution: "compare-func@npm:2.0.0" @@ -6423,12 +6472,12 @@ __metadata: linkType: hard "core-js-compat@npm:^3.21.0, core-js-compat@npm:^3.22.1": - version: 3.24.1 - resolution: "core-js-compat@npm:3.24.1" + version: 3.25.0 + resolution: "core-js-compat@npm:3.25.0" dependencies: browserslist: ^4.21.3 semver: 7.0.0 - checksum: b14516add9d59a9fae3b96d0de6e1d8864df80b714232814fce56ce946af3696cb50a4f83c717f8f36e43e1a37adf99a4cde6fc921e6ee56021eee2ea3bdc4dc + checksum: a40e072a67e65f34cb4b3a85bfdbbfcb0f3e1e2e171718763b13da4da897b5b6228603468027a0920096f0ee7e2c3906de95e26c9b6fe8f9595552bf2bc8f852 languageName: node linkType: hard @@ -6536,6 +6585,15 @@ __metadata: languageName: node linkType: hard +"cssesc@npm:^3.0.0": + version: 3.0.0 + resolution: "cssesc@npm:3.0.0" + bin: + cssesc: bin/cssesc + checksum: f8c4ababffbc5e2ddf2fa9957dda1ee4af6048e22aeda1869d0d00843223c1b13ad3f5d88b51caa46c994225eacb636b764eb807a8883e2fb6f99b4f4e8c48b2 + languageName: node + linkType: hard + "csstype@npm:3.0.9": version: 3.0.9 resolution: "csstype@npm:3.0.9" @@ -6574,9 +6632,9 @@ __metadata: linkType: hard "date-fns@npm:^2.16.1": - version: 2.29.1 - resolution: "date-fns@npm:2.29.1" - checksum: 9d07f77dffc1eb8c213391bde39f2963ffe7c0019d9edde14487882d627224f3a39b963e6e99d0cc58afff220a6a1a7e8864d2789958f4eaa77714de94d4d076 + version: 2.29.2 + resolution: "date-fns@npm:2.29.2" + checksum: 08bebcceb0a5dbadae4c55e6592b9d5c07dbd7833433c7e9a1d4a424300db32589b8b48e5979b32863c9b00a48d9bab6663e580c2a4f9f203d46cbf9113b5664 languageName: node linkType: hard @@ -6634,6 +6692,13 @@ __metadata: languageName: node linkType: hard +"decamelize@npm:^5.0.0": + version: 5.0.1 + resolution: "decamelize@npm:5.0.1" + checksum: 7c3b1ed4b3e60e7fbc00a35fb248298527c1cdfe603e41dfcf05e6c4a8cb9efbee60630deb677ed428908fb4e74e322966c687a094d1478ddc9c3a74e9dc7140 + languageName: node + linkType: hard + "decode-named-character-reference@npm:^1.0.0": version: 1.0.2 resolution: "decode-named-character-reference@npm:1.0.2" @@ -7072,9 +7137,9 @@ __metadata: linkType: hard "electron-to-chromium@npm:^1.4.202": - version: 1.4.219 - resolution: "electron-to-chromium@npm:1.4.219" - checksum: c743284c73a1c01fb845909d59fdbe86c8c3c0053a8c37a3c7e98521220434d28c2c5a3f540a154033f62477e2df3d85657ecec11a44c2c648879008af84378c + version: 1.4.240 + resolution: "electron-to-chromium@npm:1.4.240" + checksum: 6590e2cddd2e6a564cc491fb1ece5719c35dcbbeed34fc66e878b1659753653d0e344908b36b11741968dfc47a0141759e3780546384bb5308d38bc5232e0cb5 languageName: node linkType: hard @@ -7162,14 +7227,14 @@ __metadata: linkType: hard "es-abstract@npm:^1.19.0, es-abstract@npm:^1.19.1, es-abstract@npm:^1.19.2, es-abstract@npm:^1.19.5, es-abstract@npm:^1.20.1": - version: 1.20.1 - resolution: "es-abstract@npm:1.20.1" + version: 1.20.2 + resolution: "es-abstract@npm:1.20.2" dependencies: call-bind: ^1.0.2 es-to-primitive: ^1.2.1 function-bind: ^1.1.1 function.prototype.name: ^1.1.5 - get-intrinsic: ^1.1.1 + get-intrinsic: ^1.1.2 get-symbol-description: ^1.0.0 has: ^1.0.3 has-property-descriptors: ^1.0.0 @@ -7181,14 +7246,14 @@ __metadata: is-shared-array-buffer: ^1.0.2 is-string: ^1.0.7 is-weakref: ^1.0.2 - object-inspect: ^1.12.0 + object-inspect: ^1.12.2 object-keys: ^1.1.1 - object.assign: ^4.1.2 + object.assign: ^4.1.4 regexp.prototype.flags: ^1.4.3 string.prototype.trimend: ^1.0.5 string.prototype.trimstart: ^1.0.5 unbox-primitive: ^1.0.2 - checksum: 28da27ae0ed9c76df7ee8ef5c278df79dcfdb554415faf7068bb7c58f8ba8e2a16bfb59e586844be6429ab4c302ca7748979d48442224cb1140b051866d74b7f + checksum: ab893dd1f849250f5a2da82656b4e21b511f76429b25a4aea5c8b2a3007ff01cb8e112987d0dd7693b9ad9e6399f8f7be133285d6196a5ebd1b13a4ee2258f70 languageName: node linkType: hard @@ -7900,9 +7965,9 @@ __metadata: languageName: node linkType: hard -"eslint-config-neon@npm:^0.1.23": - version: 0.1.23 - resolution: "eslint-config-neon@npm:0.1.23" +"eslint-config-neon@npm:^0.1.31": + version: 0.1.31 + resolution: "eslint-config-neon@npm:0.1.31" dependencies: "@angular-eslint/eslint-plugin": ^14.0.3 "@angular-eslint/eslint-plugin-template": ^14.0.3 @@ -7913,6 +7978,7 @@ __metadata: "@typescript-eslint/parser": ^5.36.1 eslint-config-prettier: ^8.5.0 eslint-plugin-cypress: ^2.12.1 + eslint-plugin-deprecation: ^1.3.2 eslint-plugin-import: "npm:eslint-plugin-i@latest" eslint-plugin-jest: ^27.0.1 eslint-plugin-jsdoc: ^39.3.6 @@ -7922,10 +7988,16 @@ __metadata: eslint-plugin-promise: ^6.0.1 eslint-plugin-react: ^7.31.1 eslint-plugin-react-hooks: ^4.6.0 + eslint-plugin-rxjs: ^5.0.2 + eslint-plugin-rxjs-angular: ^2.0.0 + eslint-plugin-sonarjs: ^0.15.0 + eslint-plugin-svelte3: ^4.0.0 eslint-plugin-tsdoc: ^0.2.16 eslint-plugin-typescript-sort-keys: ^2.1.0 eslint-plugin-unicorn: ^43.0.2 - checksum: 68197bdec01e2fd44e14c62af5ee631c4453a491ff0f6f85ec591b0bc08a5eacb32016ee8e1188d10d4468bc0b92e8f103be74be9128a2ba4a7249578739b3cc + eslint-plugin-vue: ^9.4.0 + vue-eslint-parser: ^9.0.3 + checksum: 03a566536896d8dca404755107407c7c19f7263c18a3906812fd465acebbbf449ac43d90af8f3c17961c69688ede901da9409a76c93caa6d0ec9dd2ba0ca4698 languageName: node linkType: hard @@ -7940,6 +8012,20 @@ __metadata: languageName: node linkType: hard +"eslint-etc@npm:^5.0.0, eslint-etc@npm:^5.1.0": + version: 5.2.0 + resolution: "eslint-etc@npm:5.2.0" + dependencies: + "@typescript-eslint/experimental-utils": ^5.0.0 + tsutils: ^3.17.1 + tsutils-etc: ^1.4.1 + peerDependencies: + eslint: ^8.0.0 + typescript: ^4.0.0 + checksum: ad89126fb643bf3772d34a8c47909f4ec05777d7c3a5d33c948cb36e4ca27eebded3a37dee8b4e4a87075b80163ae5f9a694827a2435a57a59fcaf02acfdb056 + languageName: node + linkType: hard + "eslint-formatter-pretty@npm:^4.1.0": version: 4.1.0 resolution: "eslint-formatter-pretty@npm:4.1.0" @@ -7989,6 +8075,20 @@ __metadata: languageName: node linkType: hard +"eslint-plugin-deprecation@npm:^1.3.2": + version: 1.3.2 + resolution: "eslint-plugin-deprecation@npm:1.3.2" + dependencies: + "@typescript-eslint/experimental-utils": ^5.0.0 + tslib: ^2.3.1 + tsutils: ^3.21.0 + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + typescript: ^3.7.5 || ^4.0.0 + checksum: 763776eec6af02ad442bf9ed7e73da198da6969b51418b43f79b3f0a27395e85e9988a3b182e61fab7812a35e17539ba72464d1123a87cc25b195288cbd0c31d + languageName: node + linkType: hard + "eslint-plugin-es@npm:^4.1.0": version: 4.1.0 resolution: "eslint-plugin-es@npm:4.1.0" @@ -8154,6 +8254,61 @@ __metadata: languageName: node linkType: hard +"eslint-plugin-rxjs-angular@npm:^2.0.0": + version: 2.0.0 + resolution: "eslint-plugin-rxjs-angular@npm:2.0.0" + dependencies: + "@typescript-eslint/experimental-utils": ^5.0.0 + common-tags: ^1.8.0 + eslint-etc: ^5.0.0 + requireindex: ~1.2.0 + tslib: ^2.0.0 + peerDependencies: + eslint: ^8.0.0 + typescript: ^4.0.0 + checksum: 25031491405578d20df5877c227a9d8d35b6c5f0be183588b6982c521d9c7b471101d73ba6f0c02a551c8c108778ae997e60725a41e0feb14f8efc08c6338e96 + languageName: node + linkType: hard + +"eslint-plugin-rxjs@npm:^5.0.2": + version: 5.0.2 + resolution: "eslint-plugin-rxjs@npm:5.0.2" + dependencies: + "@typescript-eslint/experimental-utils": ^5.0.0 + common-tags: ^1.8.0 + decamelize: ^5.0.0 + eslint-etc: ^5.1.0 + requireindex: ~1.2.0 + rxjs-report-usage: ^1.0.4 + tslib: ^2.0.0 + tsutils: ^3.0.0 + tsutils-etc: ^1.4.1 + peerDependencies: + eslint: ^8.0.0 + typescript: ^4.0.0 + checksum: c1f2a3b26f3a154351fb24e209d9850c1b7454249695fdafe911932da2ff307728c6ba8116bbe8a1a036e804ea0daddae1167dd7c2ea13d491f3745447d1e506 + languageName: node + linkType: hard + +"eslint-plugin-sonarjs@npm:^0.15.0": + version: 0.15.0 + resolution: "eslint-plugin-sonarjs@npm:0.15.0" + peerDependencies: + eslint: ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 + checksum: 0718232626057e9a30c58350ef79af3bbc5ea7c3a880d1609965b0c1cbe347e4834ddf831962f755464f7a6350cb715c1c76e2670dc7bdf1a48c37bf0fe269c8 + languageName: node + linkType: hard + +"eslint-plugin-svelte3@npm:^4.0.0": + version: 4.0.0 + resolution: "eslint-plugin-svelte3@npm:4.0.0" + peerDependencies: + eslint: ">=8.0.0" + svelte: ^3.2.0 + checksum: 5e9ddddedee44ac099290cda6e86f412c6f4f2cbdeee860eb2b617c66d3cca7699638c6191ed55c4a7651b57b8387202f62b5b0e0417219c59cdd084dcab4e07 + languageName: node + linkType: hard + "eslint-plugin-tsdoc@npm:^0.2.16": version: 0.2.16 resolution: "eslint-plugin-tsdoc@npm:0.2.16" @@ -8203,6 +8358,23 @@ __metadata: languageName: node linkType: hard +"eslint-plugin-vue@npm:^9.4.0": + version: 9.4.0 + resolution: "eslint-plugin-vue@npm:9.4.0" + dependencies: + eslint-utils: ^3.0.0 + natural-compare: ^1.4.0 + nth-check: ^2.0.1 + postcss-selector-parser: ^6.0.9 + semver: ^7.3.5 + vue-eslint-parser: ^9.0.1 + xml-name-validator: ^4.0.0 + peerDependencies: + eslint: ^6.2.0 || ^7.0.0 || ^8.0.0 + checksum: 1eb085e7d52285eff05e4a3f0f4d65619e943eb7e976b0ef59c3adc75bf4a089df8e8cdba223cf27e2623c0fc6b306e3b1ca460d0ce27cc421ca91b7880eb0d8 + languageName: node + linkType: hard + "eslint-rule-docs@npm:^1.1.5": version: 1.1.235 resolution: "eslint-rule-docs@npm:1.1.235" @@ -8320,7 +8492,7 @@ __metadata: languageName: node linkType: hard -"espree@npm:^9.4.0": +"espree@npm:^9.3.1, espree@npm:^9.4.0": version: 9.4.0 resolution: "espree@npm:9.4.0" dependencies: @@ -8991,7 +9163,7 @@ __metadata: languageName: node linkType: hard -"get-intrinsic@npm:^1.0.2, get-intrinsic@npm:^1.1.0, get-intrinsic@npm:^1.1.1": +"get-intrinsic@npm:^1.0.2, get-intrinsic@npm:^1.1.0, get-intrinsic@npm:^1.1.1, get-intrinsic@npm:^1.1.2": version: 1.1.2 resolution: "get-intrinsic@npm:1.1.2" dependencies: @@ -9194,7 +9366,7 @@ __metadata: languageName: node linkType: hard -"glob@npm:^7.0.0, glob@npm:^7.1.1, glob@npm:^7.1.3, glob@npm:^7.1.4, glob@npm:^7.1.6": +"glob@npm:^7.0.0, glob@npm:^7.1.1, glob@npm:^7.1.3, glob@npm:^7.1.4, glob@npm:^7.1.6, glob@npm:~7.2.0": version: 7.2.3 resolution: "glob@npm:7.2.3" dependencies: @@ -11207,9 +11379,9 @@ __metadata: linkType: hard "jsonc-parser@npm:^3.0.0": - version: 3.1.0 - resolution: "jsonc-parser@npm:3.1.0" - checksum: 81b00c565c60cb1b400523a918d42ad9c7bb3d9cf34c708bf78d37c8c496ecd670c3ff8828f2f60aa6e6627ef4287982794ddf92261ea71e320973c54b29fb22 + version: 3.2.0 + resolution: "jsonc-parser@npm:3.2.0" + checksum: 946dd9a5f326b745aa326d48a7257e3f4a4b62c5e98ec8e49fa2bdd8d96cef7e6febf1399f5c7016114fd1f68a1c62c6138826d5d90bc650448e3cf0951c53c7 languageName: node linkType: hard @@ -11664,9 +11836,9 @@ __metadata: linkType: hard "lru-cache@npm:^7.5.1, lru-cache@npm:^7.7.1": - version: 7.13.2 - resolution: "lru-cache@npm:7.13.2" - checksum: dfed24e52bae95edf490d0f28f4f14552319ac7e7dc37ae0b84a72e084949233821b33227271abe81d8361ac079810f9d171a706f316cfdeda135012e4311015 + version: 7.14.0 + resolution: "lru-cache@npm:7.14.0" + checksum: efdd329f2c1bb790b71d497c6c59272e6bc2d7dd060ba55fc136becd3dd31fc8346edb446275504d94cb60d3c8385dbf5267b79b23789e409b2bdf302d13f0d7 languageName: node linkType: hard @@ -11687,11 +11859,11 @@ __metadata: linkType: hard "magic-string@npm:^0.26.2": - version: 0.26.2 - resolution: "magic-string@npm:0.26.2" + version: 0.26.3 + resolution: "magic-string@npm:0.26.3" dependencies: sourcemap-codec: ^1.4.8 - checksum: b4db4e2b370ac8d9ffc6443a2b591b75364bf1fc9121b5a4068d5b89804abff6709d1fa4a0e0c2d54f2e61e0e44db83efdfe219a5ab0ba6d25ee1f2b51fbed55 + checksum: e72c9b3d90ccbde088acc5937109f73fa4be8b6a2c2ea9bf9c3c01974f1ebf09842259a74ff2ba4081008a7d49941d883cfef8c460e6c33a6eb564b58482b750 languageName: node linkType: hard @@ -11712,8 +11884,8 @@ __metadata: linkType: hard "make-fetch-happen@npm:^10.0.3, make-fetch-happen@npm:^10.0.6": - version: 10.2.0 - resolution: "make-fetch-happen@npm:10.2.0" + version: 10.2.1 + resolution: "make-fetch-happen@npm:10.2.1" dependencies: agentkeepalive: ^4.2.1 cacache: ^16.1.0 @@ -11731,7 +11903,7 @@ __metadata: promise-retry: ^2.0.1 socks-proxy-agent: ^7.0.0 ssri: ^9.0.0 - checksum: 2f6c294179972f56fab40fd8618f07841e06550692bb78f6da16e7afaa9dca78c345b08cf44a77a8907ef3948e4dc77e93eb7492b8381f1217d7ac057a7522f8 + checksum: 2332eb9a8ec96f1ffeeea56ccefabcb4193693597b132cd110734d50f2928842e22b84cfa1508e921b8385cdfd06dda9ad68645fed62b50fff629a580f5fb72c languageName: node linkType: hard @@ -11798,11 +11970,11 @@ __metadata: linkType: hard "marked@npm:^4.0.10, marked@npm:^4.0.12, marked@npm:^4.0.19": - version: 4.0.19 - resolution: "marked@npm:4.0.19" + version: 4.1.0 + resolution: "marked@npm:4.1.0" bin: marked: bin/marked.js - checksum: 0521f3c6a06a078b91ec5b6754f939e7be1a621e1a7c1e85d4e6a4eb7848e798275566b38dea05ea8a57e85d557fbc9edad4f3fa3e8b494a371133b9ba2fb720 + checksum: f0b3732a9d6208c933541342e60eb78029bd046c143a6ade0e76ed80b6174f92b186205a9dfe805e435070806ec475b0e87e62d04348eafd2f761c24281b192a languageName: node linkType: hard @@ -11973,8 +12145,8 @@ __metadata: linkType: hard "mdast-util-to-hast@npm:^12.1.0": - version: 12.2.0 - resolution: "mdast-util-to-hast@npm:12.2.0" + version: 12.2.1 + resolution: "mdast-util-to-hast@npm:12.2.1" dependencies: "@types/hast": ^2.0.0 "@types/mdast": ^3.0.0 @@ -11987,7 +12159,7 @@ __metadata: unist-util-generated: ^2.0.0 unist-util-position: ^4.0.0 unist-util-visit: ^4.0.0 - checksum: 58ea6e97e20adc7ce2ce540afefe59e2aa31a874238ed41f6ee609e87a8d362e3c1277f02b1b99e6a262fa245bbc353c230d7bb85d4e6dc94e364f0bf015c2ec + checksum: 84d4ca224d15d6aa5a4033d2902971cd810590db6741789d7438f93726c28812f6e17f38a8b59a749bed6e0249edc7e7aa97712f83bdb031bfc05b441169054c languageName: node linkType: hard @@ -12638,8 +12810,8 @@ __metadata: linkType: hard "minipass-fetch@npm:^2.0.3": - version: 2.1.0 - resolution: "minipass-fetch@npm:2.1.0" + version: 2.1.2 + resolution: "minipass-fetch@npm:2.1.2" dependencies: encoding: ^0.1.13 minipass: ^3.1.6 @@ -12648,7 +12820,7 @@ __metadata: dependenciesMeta: encoding: optional: true - checksum: 1334732859a3f7959ed22589bafd9c40384b885aebb5932328071c33f86b3eb181d54c86919675d1825ab5f1c8e4f328878c863873258d113c29d79a4b0c9c9f + checksum: 3f216be79164e915fc91210cea1850e488793c740534985da017a4cbc7a5ff50506956d0f73bb0cb60e4fe91be08b6b61ef35101706d3ef5da2c8709b5f08f91 languageName: node linkType: hard @@ -13113,8 +13285,8 @@ __metadata: linkType: hard "npm-registry-fetch@npm:^13.3.0": - version: 13.3.0 - resolution: "npm-registry-fetch@npm:13.3.0" + version: 13.3.1 + resolution: "npm-registry-fetch@npm:13.3.1" dependencies: make-fetch-happen: ^10.0.6 minipass: ^3.1.6 @@ -13123,7 +13295,7 @@ __metadata: minizlib: ^2.1.2 npm-package-arg: ^9.0.1 proc-log: ^2.0.0 - checksum: f153e471b7204eef260d4b774087291981a0d2909db7568540d77759409300d10f8e2a464af0da15ab1c4da4d6285c5d746ba09707dd55a4bd66f5f0ceafcf64 + checksum: 5a941c2c799568e0dbccfc15f280444da398dadf2eede1b1921f08ddd5cb5f32c7cb4d16be96401f95a33073aeec13a3fd928c753790d3c412c2e64e7f7c6ee4 languageName: node linkType: hard @@ -13181,7 +13353,7 @@ __metadata: languageName: node linkType: hard -"nth-check@npm:^2.0.0": +"nth-check@npm:^2.0.0, nth-check@npm:^2.0.1": version: 2.1.1 resolution: "nth-check@npm:2.1.1" dependencies: @@ -13218,7 +13390,7 @@ __metadata: languageName: node linkType: hard -"object-inspect@npm:^1.12.0, object-inspect@npm:^1.12.2, object-inspect@npm:^1.9.0": +"object-inspect@npm:^1.12.2, object-inspect@npm:^1.9.0": version: 1.12.2 resolution: "object-inspect@npm:1.12.2" checksum: a534fc1b8534284ed71f25ce3a496013b7ea030f3d1b77118f6b7b1713829262be9e6243acbcb3ef8c626e2b64186112cb7f6db74e37b2789b9c789ca23048b2 @@ -13246,15 +13418,15 @@ __metadata: languageName: node linkType: hard -"object.assign@npm:^4.1.0, object.assign@npm:^4.1.2, object.assign@npm:^4.1.3": - version: 4.1.3 - resolution: "object.assign@npm:4.1.3" +"object.assign@npm:^4.1.0, object.assign@npm:^4.1.3, object.assign@npm:^4.1.4": + version: 4.1.4 + resolution: "object.assign@npm:4.1.4" dependencies: call-bind: ^1.0.2 define-properties: ^1.1.4 has-symbols: ^1.0.3 object-keys: ^1.1.1 - checksum: fe87c8acd60e0d7140e1eae8886804e7497bf6a019bae715084083c2abd1760bd5aa9c3f0e5b02c82ca5cc33b641dc908c42c86c6f7d6dfd9f083a7baa95d318 + checksum: 76cab513a5999acbfe0ff355f15a6a125e71805fcf53de4e9d4e082e1989bdb81d1e329291e1e4e0ae7719f0e4ef80e88fb2d367ae60500d79d25a6224ac8864 languageName: node linkType: hard @@ -13762,6 +13934,16 @@ __metadata: languageName: node linkType: hard +"postcss-selector-parser@npm:^6.0.9": + version: 6.0.10 + resolution: "postcss-selector-parser@npm:6.0.10" + dependencies: + cssesc: ^3.0.0 + util-deprecate: ^1.0.2 + checksum: 46afaa60e3d1998bd7adf6caa374baf857cc58d3ff944e29459c9a9e4680a7fe41597bd5b755fc81d7c388357e9bf67c0251d047c640a09f148e13606b8a8608 + languageName: node + linkType: hard + "postcss@npm:8.4.14": version: 8.4.14 resolution: "postcss@npm:8.4.14" @@ -13901,9 +14083,9 @@ __metadata: linkType: hard "prismjs@npm:^1.27.0": - version: 1.28.0 - resolution: "prismjs@npm:1.28.0" - checksum: bde93fb2beb45b7243219fc53855f59ee54b3fa179f315e8f9d66244d756ef984462e10561bbdc6713d3d7e051852472d7c284f5794a8791eeaefea2fb910b16 + version: 1.29.0 + resolution: "prismjs@npm:1.29.0" + checksum: 007a8869d4456ff8049dc59404e32d5666a07d99c3b0e30a18bd3b7676dfa07d1daae9d0f407f20983865fd8da56de91d09cb08e6aa61f5bc420a27c0beeaf93 languageName: node linkType: hard @@ -13946,15 +14128,15 @@ __metadata: linkType: hard "promise@npm:^8.0.0": - version: 8.1.0 - resolution: "promise@npm:8.1.0" + version: 8.2.0 + resolution: "promise@npm:8.2.0" dependencies: asap: ~2.0.6 - checksum: 89b71a56154ed7d66a73236d8e8351a9c59adddba3929ecc845f75421ff37fc08ea0c67ad76cd5c0b0d81812c7d07a32bed27e7df5fcc960c6d68b0c1cd771f7 + checksum: 45d65ffe4fbd9172ef848f790ac1366822e63f063a5ef42a14e75b577ffa3c37870a9d8472729d9d429d7c8a770428f9d13650b52aafaa361dcc69cf84873b20 languageName: node linkType: hard -"prompts@npm:^2.0.1": +"prompts@npm:^2.0.1, prompts@npm:~2.4.2": version: 2.4.2 resolution: "prompts@npm:2.4.2" dependencies: @@ -14595,6 +14777,13 @@ __metadata: languageName: node linkType: hard +"requireindex@npm:~1.2.0": + version: 1.2.0 + resolution: "requireindex@npm:1.2.0" + checksum: 50d8b10a1ff1fdf6aea7a1870bc7bd238b0fb1917d8d7ca17fd03afc38a65dcd7a8a4eddd031f89128b5f0065833d5c92c4fef67f2c04e8624057fe626c9cf94 + languageName: node + linkType: hard + "requizzle@npm:^0.2.3": version: 0.2.3 resolution: "requizzle@npm:0.2.3" @@ -14841,6 +15030,23 @@ __metadata: languageName: node linkType: hard +"rxjs-report-usage@npm:^1.0.4": + version: 1.0.6 + resolution: "rxjs-report-usage@npm:1.0.6" + dependencies: + "@babel/parser": ^7.10.3 + "@babel/traverse": ^7.10.3 + "@babel/types": ^7.10.3 + bent: ~7.3.6 + chalk: ~4.1.0 + glob: ~7.2.0 + prompts: ~2.4.2 + bin: + rxjs-report-usage: bin/rxjs-report-usage + checksum: 7982c94659cd0527ffda6c3147300672fc2ee21cfbbe754575812cca0439240367dcfe630cbcb816287355f977acd0f80b1e5323fa81903bd486b91cf6c19787 + languageName: node + linkType: hard + "rxjs@npm:^7.0.0, rxjs@npm:^7.5.5": version: 7.5.6 resolution: "rxjs@npm:7.5.6" @@ -14907,7 +15113,7 @@ __metadata: languageName: node linkType: hard -"semver@npm:2 >=2.2.1 || 3.x || 4 || 5 || 7, semver@npm:7.3.7, semver@npm:^7.0.0, semver@npm:^7.3.2, semver@npm:^7.3.4, semver@npm:^7.3.5, semver@npm:^7.3.7, semver@npm:~7.3.0": +"semver@npm:2 >=2.2.1 || 3.x || 4 || 5 || 7, semver@npm:7.3.7, semver@npm:^7.0.0, semver@npm:^7.3.2, semver@npm:^7.3.4, semver@npm:^7.3.5, semver@npm:^7.3.6, semver@npm:^7.3.7, semver@npm:~7.3.0": version: 7.3.7 resolution: "semver@npm:7.3.7" dependencies: @@ -15285,9 +15491,9 @@ __metadata: linkType: hard "spdx-license-ids@npm:^3.0.0": - version: 3.0.11 - resolution: "spdx-license-ids@npm:3.0.11" - checksum: 1da1acb090257773e60b022094050e810ae9fec874dc1461f65dc0400cd42dd830ab2df6e64fb49c2db3dce386dd0362110780e1b154db7c0bb413488836aaeb + version: 3.0.12 + resolution: "spdx-license-ids@npm:3.0.12" + checksum: 92a4dddce62ce1db6fe54a7a839cf85e06abc308fc83b776a55b44e4f1906f02e7ebd506120847039e976bbbad359ea8bdfafb7925eae5cd7e73255f02e0b7d6 languageName: node linkType: hard @@ -16217,14 +16423,14 @@ __metadata: languageName: node linkType: hard -"tslib@npm:^1.0.0, tslib@npm:^1.13.0, tslib@npm:^1.8.0, tslib@npm:^1.8.1": +"tslib@npm:^1.13.0, tslib@npm:^1.8.0, tslib@npm:^1.8.1": version: 1.14.1 resolution: "tslib@npm:1.14.1" checksum: dbe628ef87f66691d5d2959b3e41b9ca0045c3ee3c7c7b906cc1e328b39f199bb1ad9e671c39025bd56122ac57dfbf7385a94843b1cc07c60a4db74795829acd languageName: node linkType: hard -"tslib@npm:^2.1.0, tslib@npm:^2.4.0": +"tslib@npm:^2.0.0, tslib@npm:^2.1.0, tslib@npm:^2.3.1, tslib@npm:^2.4.0": version: 2.4.0 resolution: "tslib@npm:2.4.0" checksum: 8c4aa6a3c5a754bf76aefc38026134180c053b7bd2f81338cb5e5ebf96fefa0f417bff221592bf801077f5bf990562f6264fecbc42cd3309b33872cb6fc3b113 @@ -16317,6 +16523,22 @@ __metadata: languageName: node linkType: hard +"tsutils-etc@npm:^1.4.1": + version: 1.4.1 + resolution: "tsutils-etc@npm:1.4.1" + dependencies: + "@types/yargs": ^17.0.0 + yargs: ^17.0.0 + peerDependencies: + tsutils: ^3.0.0 + typescript: ^4.0.0 + bin: + ts-flags: bin/ts-flags + ts-kind: bin/ts-kind + checksum: e44f0fd4229f9e4f00190e6f10cd03f06fa7c11c9f9339c328ebc80a19925582b6a9b32da442359bf63751b7737152e0d8e732c681f7646c2253dffa49f97b32 + languageName: node + linkType: hard + "tsutils@npm:^2.29.0": version: 2.29.0 resolution: "tsutils@npm:2.29.0" @@ -16328,7 +16550,7 @@ __metadata: languageName: node linkType: hard -"tsutils@npm:^3.21.0": +"tsutils@npm:^3.0.0, tsutils@npm:^3.17.1, tsutils@npm:^3.21.0": version: 3.21.0 resolution: "tsutils@npm:3.21.0" dependencies: @@ -16624,12 +16846,12 @@ __metadata: linkType: hard "typescript@npm:next": - version: 4.9.0-dev.20220815 - resolution: "typescript@npm:4.9.0-dev.20220815" + version: 4.9.0-dev.20220902 + resolution: "typescript@npm:4.9.0-dev.20220902" bin: tsc: bin/tsc tsserver: bin/tsserver - checksum: 516c53fbde4610a2148a67930dd7a242c31016c0dd3aa7eb2a9184ea9fe7fe50c22434eb8598026e0e2e0523c9ae7bf3b1fbd2392826d03bd227f51f2b52cbe7 + checksum: 7a70c76cb5ac454eae4d15bd673f94f589dbe2e4ebd63c2d00d2bffee059c8f6b9dbdb45c567e175562ba0a3fcf9d3b433f72869fe12578f9949367001c873d8 languageName: node linkType: hard @@ -16664,12 +16886,12 @@ __metadata: linkType: hard "typescript@patch:typescript@next#~builtin": - version: 4.9.0-dev.20220815 - resolution: "typescript@patch:typescript@npm%3A4.9.0-dev.20220815#~builtin::version=4.9.0-dev.20220815&hash=7ad353" + version: 4.9.0-dev.20220902 + resolution: "typescript@patch:typescript@npm%3A4.9.0-dev.20220902#~builtin::version=4.9.0-dev.20220902&hash=7ad353" bin: tsc: bin/tsc tsserver: bin/tsserver - checksum: a4ae7e5cce790c28cad9909d5822030a1f8a94cbda01d88a43065a8a0d5f25da1b59870097403b4363ebc8a6eae2fcbe15c864a9f288d4ed804c58bf7ed37890 + checksum: fded29ff273c5b76d97ad0ab4dd6a38e746add0a102a6a8fa8bec755f35237e505d73d13a1a966513e6fd38934ba9f7db8cd0a628148d9dfe6c7cc64584c21ca languageName: node linkType: hard @@ -16719,11 +16941,11 @@ __metadata: linkType: hard "uglify-js@npm:^3.1.4": - version: 3.16.3 - resolution: "uglify-js@npm:3.16.3" + version: 3.17.0 + resolution: "uglify-js@npm:3.17.0" bin: uglifyjs: bin/uglifyjs - checksum: 908a6bc877c49ca756bbf50d2ab365ee0315a66af52e14042a5c56077311f3d7c9e028524703c54c8d4b608e3d57346ee0400105acab3c3cded3238513657916 + checksum: 20d1fcac05e74db949a9579a36f9a1af88430e590bc9c22410b76686035c55cef65247ca1935d2f6440c78928227684219c8b1ddfcd858213049cb2890821392 languageName: node linkType: hard @@ -16810,21 +17032,21 @@ __metadata: languageName: node linkType: hard -"unique-filename@npm:^1.1.1": - version: 1.1.1 - resolution: "unique-filename@npm:1.1.1" +"unique-filename@npm:^2.0.0": + version: 2.0.1 + resolution: "unique-filename@npm:2.0.1" dependencies: - unique-slug: ^2.0.0 - checksum: cf4998c9228cc7647ba7814e255dec51be43673903897b1786eff2ac2d670f54d4d733357eb08dea969aa5e6875d0e1bd391d668fbdb5a179744e7c7551a6f80 + unique-slug: ^3.0.0 + checksum: 807acf3381aff319086b64dc7125a9a37c09c44af7620bd4f7f3247fcd5565660ac12d8b80534dcbfd067e6fe88a67e621386dd796a8af828d1337a8420a255f languageName: node linkType: hard -"unique-slug@npm:^2.0.0": - version: 2.0.2 - resolution: "unique-slug@npm:2.0.2" +"unique-slug@npm:^3.0.0": + version: 3.0.0 + resolution: "unique-slug@npm:3.0.0" dependencies: imurmurhash: ^0.1.4 - checksum: 5b6876a645da08d505dedb970d1571f6cebdf87044cb6b740c8dbb24f0d6e1dc8bdbf46825fd09f994d7cf50760e6f6e063cfa197d51c5902c00a861702eb75a + checksum: 49f8d915ba7f0101801b922062ee46b7953256c93ceca74303bd8e6413ae10aa7e8216556b54dc5382895e8221d04f1efaf75f945c2e4a515b4139f77aa6640c languageName: node linkType: hard @@ -16963,8 +17185,8 @@ __metadata: linkType: hard "update-browserslist-db@npm:^1.0.5": - version: 1.0.5 - resolution: "update-browserslist-db@npm:1.0.5" + version: 1.0.7 + resolution: "update-browserslist-db@npm:1.0.7" dependencies: escalade: ^3.1.1 picocolors: ^1.0.0 @@ -16972,7 +17194,7 @@ __metadata: browserslist: ">= 4.21.0" bin: browserslist-lint: cli.js - checksum: 7e425fe5dbbebdccf72a84ce70ec47fc74dce561d28f47bc2b84a1c2b84179a862c2261b18ab66a5e73e261c7e2ef9e11c6129112989d4d52e8f75a56bb923f8 + checksum: 443ed6e77d4607b8bdf12710fe1c0b570fcbb992ebcafaa0c647811e5646fa51e0b5a17641637e10044e4b770bfc3a9ce2a9350a646477545aed882a1fcff8ce languageName: node linkType: hard @@ -17060,7 +17282,7 @@ __metadata: languageName: node linkType: hard -"util-deprecate@npm:^1.0.1, util-deprecate@npm:~1.0.1": +"util-deprecate@npm:^1.0.1, util-deprecate@npm:^1.0.2, util-deprecate@npm:~1.0.1": version: 1.0.2 resolution: "util-deprecate@npm:1.0.2" checksum: 474acf1146cb2701fe3b074892217553dfcf9a031280919ba1b8d651a068c9b15d863b7303cb15bd00a862b498e6cf4ad7b4a08fb134edd5a6f7641681cb54a2 @@ -17229,8 +17451,8 @@ __metadata: linkType: hard "vite@npm:^2.9.12 || ^3.0.0-0": - version: 3.0.7 - resolution: "vite@npm:3.0.7" + version: 3.0.9 + resolution: "vite@npm:3.0.9" dependencies: esbuild: ^0.14.47 fsevents: ~2.3.2 @@ -17256,7 +17478,7 @@ __metadata: optional: true bin: vite: bin/vite.js - checksum: 3cdcb68e16433b9addee61c117c379692e4d12d44ee7011da99ed9516b8c37ce76f1bb1728eab0e3a28957c9d2dc839024e1607c2ad03f38089e3be55d7dd456 + checksum: 6341aa43579ae45f8a383bdc0c5041dea3dff98f14e0a546d6d884a864134b00082246a28d1de8adff0ce0dd92b468c7ade8f972ffe1ed97258671d63e0f16f7 languageName: node linkType: hard @@ -17310,6 +17532,23 @@ __metadata: languageName: node linkType: hard +"vue-eslint-parser@npm:^9.0.1, vue-eslint-parser@npm:^9.0.3": + version: 9.0.3 + resolution: "vue-eslint-parser@npm:9.0.3" + dependencies: + debug: ^4.3.4 + eslint-scope: ^7.1.1 + eslint-visitor-keys: ^3.3.0 + espree: ^9.3.1 + esquery: ^1.4.0 + lodash: ^4.17.21 + semver: ^7.3.6 + peerDependencies: + eslint: ">=6.0.0" + checksum: 61248eb504b8d0cbc95ed3f7ec6b11b72782cd76e4049798626f9c09031d620691a967231985c79d8ece8b04864797e465b7f47bcf91828e18344ae3691d9066 + languageName: node + linkType: hard + "walk-back@npm:^2.0.1": version: 2.0.1 resolution: "walk-back@npm:2.0.1" @@ -17513,12 +17752,12 @@ __metadata: linkType: hard "write-file-atomic@npm:^4.0.1": - version: 4.0.1 - resolution: "write-file-atomic@npm:4.0.1" + version: 4.0.2 + resolution: "write-file-atomic@npm:4.0.2" dependencies: imurmurhash: ^0.1.4 signal-exit: ^3.0.7 - checksum: 8f780232533ca6223c63c9b9c01c4386ca8c625ebe5017a9ed17d037aec19462ae17109e0aa155bff5966ee4ae7a27b67a99f55caf3f32ffd84155e9da3929fc + checksum: 5da60bd4eeeb935eec97ead3df6e28e5917a6bd317478e4a85a5285e8480b8ed96032bbcc6ecd07b236142a24f3ca871c924ec4a6575e623ec1b11bf8c1c253c languageName: node linkType: hard @@ -17544,6 +17783,13 @@ __metadata: languageName: node linkType: hard +"xml-name-validator@npm:^4.0.0": + version: 4.0.0 + resolution: "xml-name-validator@npm:4.0.0" + checksum: af100b79c29804f05fa35aa3683e29a321db9b9685d5e5febda3fa1e40f13f85abc40f45a6b2bf7bee33f68a1dc5e8eaef4cec100a304a9db565e6061d4cb5ad + languageName: node + linkType: hard + "xmlcreate@npm:^2.0.4": version: 2.0.4 resolution: "xmlcreate@npm:2.0.4" @@ -17690,8 +17936,8 @@ __metadata: linkType: hard "z-schema@npm:~5.0.2": - version: 5.0.3 - resolution: "z-schema@npm:5.0.3" + version: 5.0.4 + resolution: "z-schema@npm:5.0.4" dependencies: commander: ^2.20.3 lodash.get: ^4.4.2 @@ -17702,7 +17948,7 @@ __metadata: optional: true bin: z-schema: bin/z-schema - checksum: eb6c2c3c2878c4c333fd3755703616c8f846158da0154f60f81f188c3c4ce7ad5b8ff5ce570d6372d4803fb5c8c9d97b4e54becdd5a832b1a31240d149b87191 + checksum: afa4e0039a104a53eeb6977bf754ef44e32042aecbf3b5eb18b82649763abd5c2608e47d6d6902291359b41e76130594d7f2b6132316d819c3529f17d4d3464d languageName: node linkType: hard From 0238588067fa6e2e46b37e976fa3bbb465de7448 Mon Sep 17 00:00:00 2001 From: iCrawl Date: Fri, 2 Sep 2022 22:03:32 +0200 Subject: [PATCH 121/155] build: fix website build --- .husky/pre-commit | 2 +- packages/api-extractor-utils/.eslintrc.json | 6 +----- packages/builders/.eslintrc.json | 6 +----- packages/collection/.eslintrc.json | 6 +----- packages/proxy/.eslintrc.json | 6 +----- packages/rest/.eslintrc.json | 6 +----- packages/website/package.json | 4 ++-- packages/ws/.eslintrc.json | 6 +----- yarn.lock | 4 ++-- 9 files changed, 11 insertions(+), 35 deletions(-) diff --git a/.husky/pre-commit b/.husky/pre-commit index 3509da9933eb..026aed957699 100755 --- a/.husky/pre-commit +++ b/.husky/pre-commit @@ -1,4 +1,4 @@ #!/bin/sh . "$(dirname "$0")/_/husky.sh" -yarn build && yarn lint-staged +yarn build && yarn workspace @discordjs/website run build:local && yarn lint-staged diff --git a/packages/api-extractor-utils/.eslintrc.json b/packages/api-extractor-utils/.eslintrc.json index 6115ee5c022e..99ef7cec8051 100644 --- a/packages/api-extractor-utils/.eslintrc.json +++ b/packages/api-extractor-utils/.eslintrc.json @@ -1,7 +1,3 @@ { - "extends": "../../.eslintrc.json", - "plugins": ["eslint-plugin-tsdoc"], - "rules": { - "tsdoc/syntax": "warn" - } + "extends": "../../.eslintrc.json" } diff --git a/packages/builders/.eslintrc.json b/packages/builders/.eslintrc.json index 6115ee5c022e..99ef7cec8051 100644 --- a/packages/builders/.eslintrc.json +++ b/packages/builders/.eslintrc.json @@ -1,7 +1,3 @@ { - "extends": "../../.eslintrc.json", - "plugins": ["eslint-plugin-tsdoc"], - "rules": { - "tsdoc/syntax": "warn" - } + "extends": "../../.eslintrc.json" } diff --git a/packages/collection/.eslintrc.json b/packages/collection/.eslintrc.json index 6115ee5c022e..99ef7cec8051 100644 --- a/packages/collection/.eslintrc.json +++ b/packages/collection/.eslintrc.json @@ -1,7 +1,3 @@ { - "extends": "../../.eslintrc.json", - "plugins": ["eslint-plugin-tsdoc"], - "rules": { - "tsdoc/syntax": "warn" - } + "extends": "../../.eslintrc.json" } diff --git a/packages/proxy/.eslintrc.json b/packages/proxy/.eslintrc.json index 6115ee5c022e..99ef7cec8051 100644 --- a/packages/proxy/.eslintrc.json +++ b/packages/proxy/.eslintrc.json @@ -1,7 +1,3 @@ { - "extends": "../../.eslintrc.json", - "plugins": ["eslint-plugin-tsdoc"], - "rules": { - "tsdoc/syntax": "warn" - } + "extends": "../../.eslintrc.json" } diff --git a/packages/rest/.eslintrc.json b/packages/rest/.eslintrc.json index 6115ee5c022e..99ef7cec8051 100644 --- a/packages/rest/.eslintrc.json +++ b/packages/rest/.eslintrc.json @@ -1,7 +1,3 @@ { - "extends": "../../.eslintrc.json", - "plugins": ["eslint-plugin-tsdoc"], - "rules": { - "tsdoc/syntax": "warn" - } + "extends": "../../.eslintrc.json" } diff --git a/packages/website/package.json b/packages/website/package.json index 71bb96c5ad00..649c01a6af27 100644 --- a/packages/website/package.json +++ b/packages/website/package.json @@ -5,7 +5,7 @@ "private": true, "scripts": { "test": "vitest run", - "build:local": "yarn run --top-level docs --force && yarn build:prod", + "build:local": "NEXT_PUBLIC_LOCAL_DEV=true yarn run --top-level docs --force && yarn build:prod", "build:prod": "yarn build:css && yarn build:next", "build:next": "next build", "build:css": "yarn generate:css", @@ -47,7 +47,7 @@ "@mantine/next": "^5.2.4", "@mantine/nprogress": "^5.2.4", "@mantine/spotlight": "^5.2.4", - "@microsoft/api-extractor-model": "^7.23.3", + "@microsoft/api-extractor-model": "7.23.3", "@microsoft/tsdoc": "0.14.1", "@microsoft/tsdoc-config": "0.16.1", "@vscode/codicons": "^0.0.32", diff --git a/packages/ws/.eslintrc.json b/packages/ws/.eslintrc.json index 6115ee5c022e..99ef7cec8051 100644 --- a/packages/ws/.eslintrc.json +++ b/packages/ws/.eslintrc.json @@ -1,7 +1,3 @@ { - "extends": "../../.eslintrc.json", - "plugins": ["eslint-plugin-tsdoc"], - "rules": { - "tsdoc/syntax": "warn" - } + "extends": "../../.eslintrc.json" } diff --git a/yarn.lock b/yarn.lock index ab1c5e21234f..05a4c01c62a0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1968,7 +1968,7 @@ __metadata: "@mantine/next": ^5.2.4 "@mantine/nprogress": ^5.2.4 "@mantine/spotlight": ^5.2.4 - "@microsoft/api-extractor-model": ^7.23.3 + "@microsoft/api-extractor-model": 7.23.3 "@microsoft/tsdoc": 0.14.1 "@microsoft/tsdoc-config": 0.16.1 "@testing-library/react": ^13.3.0 @@ -2896,7 +2896,7 @@ __metadata: languageName: node linkType: hard -"@microsoft/api-extractor-model@npm:7.24.0, @microsoft/api-extractor-model@npm:^7.23.3": +"@microsoft/api-extractor-model@npm:7.24.0": version: 7.24.0 resolution: "@microsoft/api-extractor-model@npm:7.24.0" dependencies: From f072d3d91696ec4eca950e78fd3a71a1c4c70858 Mon Sep 17 00:00:00 2001 From: iCrawl Date: Fri, 2 Sep 2022 22:42:12 +0200 Subject: [PATCH 122/155] feat: redirect to latest version, otherwise click select version button --- .../website/src/pages/docs/packages/index.tsx | 42 ++++++++++++++++--- 1 file changed, 36 insertions(+), 6 deletions(-) diff --git a/packages/website/src/pages/docs/packages/index.tsx b/packages/website/src/pages/docs/packages/index.tsx index 1412800b07a7..928af3e36c95 100644 --- a/packages/website/src/pages/docs/packages/index.tsx +++ b/packages/website/src/pages/docs/packages/index.tsx @@ -8,8 +8,11 @@ import { Stack, Title, useMantineColorScheme, + Button, } from '@mantine/core'; import Link from 'next/link'; +import { useRouter } from 'next/router'; +import type { MouseEvent } from 'react'; import { VscArrowRight, VscPackage } from 'react-icons/vsc'; import { PACKAGES } from '~/util/packages'; @@ -35,6 +38,17 @@ const useStyles = createStyles((theme) => ({ export default function PackagesRoute() { const { classes } = useStyles(); const { colorScheme } = useMantineColorScheme(); + const router = useRouter(); + + const handleClick = async (ev: MouseEvent, packageName: string) => { + ev.stopPropagation(); + + const res = await fetch(`https://docs.discordjs.dev/api/info?package=${packageName ?? 'builders'}`); + const data: string[] = await res.json(); + + const latestVersion = data.at(-2); + void router.push(`/docs/packages/${packageName}/${latestVersion}`); + }; return ( @@ -43,9 +57,15 @@ export default function PackagesRoute() { Select a package: {PACKAGES.map((pkg) => ( - - - + ) => void handleClick(ev, pkg)} + > + + @@ -54,10 +74,20 @@ export default function PackagesRoute() { {pkg} - + + + - - + + + ))} From a4777aa9b0aafc50b3da3faad7db6b339584da5c Mon Sep 17 00:00:00 2001 From: iCrawl Date: Sat, 3 Sep 2022 00:42:34 +0200 Subject: [PATCH 123/155] feat: add naive client-based search --- packages/scripts/.gitignore | 2 +- packages/scripts/package.json | 4 +- packages/scripts/src/generateIndex.ts | 75 +++++++++++++++++-- packages/website/package.json | 1 + .../website/src/components/SidebarLayout.tsx | 1 + packages/website/src/pages/_app.tsx | 15 +++- packages/website/src/pages/docs/[...slug].tsx | 27 +++++++ packages/website/src/util/search.ts | 6 ++ yarn.lock | 10 +++ 9 files changed, 130 insertions(+), 11 deletions(-) create mode 100644 packages/website/src/util/search.ts diff --git a/packages/scripts/.gitignore b/packages/scripts/.gitignore index 47873baa971d..77327af27f7a 100644 --- a/packages/scripts/.gitignore +++ b/packages/scripts/.gitignore @@ -24,4 +24,4 @@ docs/**/* .tmp/ coverage/ -searchIndex/ \ No newline at end of file +searchIndex/ diff --git a/packages/scripts/package.json b/packages/scripts/package.json index f744da2f6080..ab9b0a238109 100644 --- a/packages/scripts/package.json +++ b/packages/scripts/package.json @@ -46,8 +46,10 @@ "@discordjs/api-extractor-utils": "workspace:^", "@microsoft/api-extractor-model": "7.23.3", "@microsoft/tsdoc": "^0.14.1", + "@microsoft/tsdoc-config": "0.16.1", "commander": "^9.4.0", - "tslib": "^2.4.0" + "tslib": "^2.4.0", + "undici": "^5.10.0" }, "devDependencies": { "@types/node": "^16.11.56", diff --git a/packages/scripts/src/generateIndex.ts b/packages/scripts/src/generateIndex.ts index 95b6e197f743..37fd33fb5958 100644 --- a/packages/scripts/src/generateIndex.ts +++ b/packages/scripts/src/generateIndex.ts @@ -1,8 +1,24 @@ -import { stat, mkdir, writeFile } from 'node:fs/promises'; +import { stat, mkdir, writeFile, readFile } from 'node:fs/promises'; import { join } from 'node:path'; +import { cwd } from 'node:process'; import { generatePath } from '@discordjs/api-extractor-utils'; -import { ApiDeclaredItem, ApiItemContainerMixin, type ApiItem, type ApiModel } from '@microsoft/api-extractor-model'; -import { DocNodeKind, type DocCodeSpan, type DocNode, type DocParagraph, type DocPlainText } from '@microsoft/tsdoc'; +import { + ApiDeclaredItem, + ApiItemContainerMixin, + ApiItem, + ApiModel, + type ApiPackage, +} from '@microsoft/api-extractor-model'; +import { + DocNodeKind, + type DocCodeSpan, + type DocNode, + type DocParagraph, + type DocPlainText, + TSDocConfiguration, +} from '@microsoft/tsdoc'; +import { TSDocConfigFile } from '@microsoft/tsdoc-config'; +// import { request } from 'undici'; export interface MemberJSON { kind: string; @@ -11,6 +27,25 @@ export interface MemberJSON { summary: string | null; } +export const PACKAGES = ['builders', 'collection', 'proxy', 'rest', 'voice', 'ws']; + +export function createApiModel(data: any) { + const model = new ApiModel(); + const tsdocConfiguration = new TSDocConfiguration(); + const tsdocConfigFile = TSDocConfigFile.loadFromObject(data.metadata.tsdocConfig); + tsdocConfigFile.configureParser(tsdocConfiguration); + + const apiPackage = ApiItem.deserialize(data, { + apiJsonFilename: '', + toolPackage: data.metadata.toolPackage, + toolVersion: data.metadata.toolVersion, + versionToDeserialize: data.metadata.schemaVersion, + tsdocConfiguration, + }) as ApiPackage; + model.addMember(apiPackage); + return model; +} + /** * Attempts to resolve the summary text for the given item. * @@ -82,14 +117,38 @@ export function visitNodes(item: ApiItem, tag: string) { return members; } -export async function generateIndex(model: ApiModel, packageName: string, tag: string) { - const members = visitNodes(model, tag); +export async function generateIndex(model: ApiModel, packageName: string, tag = 'main') { + const members = visitNodes(model.tryGetPackageByName(packageName)!.entryPoints[0]!, tag); const dir = 'searchIndex'; - if (!(await stat(dir)).isDirectory()) { - await mkdir(dir); + try { + (await stat(join(cwd(), dir))).isDirectory(); + } catch { + await mkdir(join(cwd(), dir)); } - await writeFile(join('searchIndex', `${packageName}-${tag}-doc-index.json`), JSON.stringify(members, undefined, 2)); + await writeFile( + join(cwd(), 'searchIndex', `${packageName}-${tag}-index.json`), + JSON.stringify(members, undefined, 2), + ); +} + +export async function generateAllIndicies() { + for (const pkg of PACKAGES) { + const res = await readFile(join(cwd(), '..', pkg, 'docs', 'docs.api.json'), 'utf8'); + const data = JSON.parse(res); + + // TODO: finish picking versions to generate + // const response = await request(`https://docs.discordjs.dev/api/info?package=${pkg}`); + // const versions = await response.body.json(); + + // for (const version of versions) { + // const model = createApiModel(data); + // await generateIndex(model, pkg, version); + // } + + const model = createApiModel(data); + await generateIndex(model, pkg); + } } diff --git a/packages/website/package.json b/packages/website/package.json index 649c01a6af27..d1b2b9dc641e 100644 --- a/packages/website/package.json +++ b/packages/website/package.json @@ -51,6 +51,7 @@ "@microsoft/tsdoc": "0.14.1", "@microsoft/tsdoc-config": "0.16.1", "@vscode/codicons": "^0.0.32", + "minisearch": "^5.0.0", "next": "^12.2.5", "next-mdx-remote": "^4.1.0", "react": "^18.2.0", diff --git a/packages/website/src/components/SidebarLayout.tsx b/packages/website/src/components/SidebarLayout.tsx index 96d7550003e5..4449665b4681 100644 --- a/packages/website/src/components/SidebarLayout.tsx +++ b/packages/website/src/components/SidebarLayout.tsx @@ -47,6 +47,7 @@ export interface SidebarLayoutProps { data: { member: ReturnType; members: ReturnType; + searchIndex: any[]; source: MDXRemoteSerializeResult; }; packageName: string; diff --git a/packages/website/src/pages/_app.tsx b/packages/website/src/pages/_app.tsx index cfee630283c8..0451c156d0fc 100644 --- a/packages/website/src/pages/_app.tsx +++ b/packages/website/src/pages/_app.tsx @@ -8,6 +8,7 @@ import { VscPackage } from 'react-icons/vsc'; import { RouterTransition } from '../components/RouterTransition'; import '../styles/unocss.css'; import '../styles/main.css'; +import { miniSearch } from '~/util/search'; const actions: (router: NextRouter) => SpotlightAction[] = (router: NextRouter) => [ { @@ -111,7 +112,19 @@ export default function MyApp({ Component, pageProps }: AppProps) { withNormalizeCSS withGlobalStyles > - + { + if (!query) { + return actions; + } + + const search = miniSearch.search(query); + return actions.filter((action) => search.some((res) => res.name === action.title)); + }} + > diff --git a/packages/website/src/pages/docs/[...slug].tsx b/packages/website/src/pages/docs/[...slug].tsx index 61be1908664c..0622da9ae43d 100644 --- a/packages/website/src/pages/docs/[...slug].tsx +++ b/packages/website/src/pages/docs/[...slug].tsx @@ -14,12 +14,14 @@ import { } from '@discordjs/api-extractor-utils'; import { ActionIcon, Affix, Box, LoadingOverlay, Transition } from '@mantine/core'; import { useMediaQuery, useWindowScroll } from '@mantine/hooks'; +import { registerSpotlightActions } from '@mantine/spotlight'; import { ApiFunction, ApiItemKind, type ApiPackage } from '@microsoft/api-extractor-model'; import Head from 'next/head'; import { useRouter } from 'next/router'; import type { GetStaticPaths, GetStaticProps } from 'next/types'; import { MDXRemote } from 'next-mdx-remote'; import { serialize } from 'next-mdx-remote/serialize'; +import { useEffect } from 'react'; import { VscChevronUp } from 'react-icons/vsc'; import rehypeIgnore from 'rehype-ignore'; import rehypePrettyCode from 'rehype-pretty-code'; @@ -37,6 +39,7 @@ import { MemberProvider } from '~/contexts/member'; import { createApiModel } from '~/util/api-model.server'; import { findMember, findMemberByKey } from '~/util/model.server'; import { PACKAGES } from '~/util/packages'; +import { miniSearch } from '~/util/search'; export const getStaticPaths: GetStaticPaths = async () => { const pkgs = ( @@ -137,9 +140,16 @@ export const getStaticProps: GetStaticProps = async ({ params }) => { }); let data; + let searchIndex = []; if (process.env.NEXT_PUBLIC_LOCAL_DEV) { const res = await readFile(join(cwd(), '..', packageName, 'docs', 'docs.api.json'), 'utf8'); data = JSON.parse(res); + + const response = await readFile( + join(cwd(), '..', 'scripts', 'searchIndex', `${packageName}-main-index.json`), + 'utf8', + ); + searchIndex = JSON.parse(response); } else { const res = await fetch(`https://docs.discordjs.dev/docs/${packageName}/${branchName}.api.json`); data = await res.json(); @@ -163,6 +173,7 @@ export const getStaticProps: GetStaticProps = async ({ params }) => { member: memberName && containerKey ? findMemberByKey(model, packageName, containerKey, branchName) ?? null : null, source: mdxSource, + searchIndex, }, }, revalidate: 3_600, @@ -204,6 +215,22 @@ export default function SlugPage(props: Partial { + if (props.data?.searchIndex) { + const searchIndex = props.data?.searchIndex.map((idx, index) => ({ id: index, ...idx })) ?? []; + miniSearch.addAll(searchIndex); + + registerSpotlightActions( + searchIndex.map((idx) => ({ + title: idx.name, + description: idx.summary ?? '', + onTrigger: () => void router.push(idx.path), + })), + ); + } + // eslint-disable-next-line react-hooks/exhaustive-deps + }, []); + const name = `discord.js${props.data?.member?.name ? ` | ${props.data.member.name}` : ''}`; if (router.isFallback) { diff --git a/packages/website/src/util/search.ts b/packages/website/src/util/search.ts new file mode 100644 index 000000000000..c48895b9d973 --- /dev/null +++ b/packages/website/src/util/search.ts @@ -0,0 +1,6 @@ +import MiniSearch from 'minisearch'; + +export const miniSearch = new MiniSearch({ + fields: ['name', 'summary'], + storeFields: ['name', 'summary', 'path'], +}); diff --git a/yarn.lock b/yarn.lock index 05a4c01c62a0..1fd3a170bc2b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1913,6 +1913,7 @@ __metadata: "@discordjs/api-extractor-utils": "workspace:^" "@microsoft/api-extractor-model": 7.23.3 "@microsoft/tsdoc": ^0.14.1 + "@microsoft/tsdoc-config": 0.16.1 "@types/node": ^16.11.56 "@vitest/coverage-c8": ^0.22.1 commander: ^9.4.0 @@ -1922,6 +1923,7 @@ __metadata: tslib: ^2.4.0 tsup: ^6.2.3 typescript: ^4.8.2 + undici: ^5.10.0 vitest: ^0.22.1 languageName: unknown linkType: soft @@ -1986,6 +1988,7 @@ __metadata: eslint: ^8.23.0 eslint-config-neon: ^0.1.31 happy-dom: ^6.0.4 + minisearch: ^5.0.0 next: ^12.2.5 next-mdx-remote: ^4.1.0 prettier: ^2.7.1 @@ -12870,6 +12873,13 @@ __metadata: languageName: node linkType: hard +"minisearch@npm:^5.0.0": + version: 5.0.0 + resolution: "minisearch@npm:5.0.0" + checksum: e716c877706be6b4977b1e4fe70baa006c392857bdd7cf13f483483fcc7c8cbb34f852616449da9de41bed4b0b2e034dde80305ee3ed7c10f8c4845a813a91ec + languageName: node + linkType: hard + "minizlib@npm:^2.1.1, minizlib@npm:^2.1.2": version: 2.1.2 resolution: "minizlib@npm:2.1.2" From 6f2b223c8bf7f3c35e874a66b4dca6f34d11a536 Mon Sep 17 00:00:00 2001 From: iCrawl Date: Sat, 3 Sep 2022 01:01:40 +0200 Subject: [PATCH 124/155] refactor: extract create model function --- packages/website/package.json | 2 +- packages/website/src/pages/docs/[...slug].tsx | 2 +- packages/website/src/util/api-model.server.ts | 20 ------------------- yarn.lock | 4 ++-- 4 files changed, 4 insertions(+), 24 deletions(-) delete mode 100644 packages/website/src/util/api-model.server.ts diff --git a/packages/website/package.json b/packages/website/package.json index d1b2b9dc641e..5f5f35472ae6 100644 --- a/packages/website/package.json +++ b/packages/website/package.json @@ -40,6 +40,7 @@ "homepage": "https://discord.js.org", "dependencies": { "@discordjs/api-extractor-utils": "workspace:^", + "@discordjs/scripts": "workspace:^", "@emotion/react": "^11.10.4", "@emotion/server": "^11.10.0", "@mantine/core": "^5.2.4", @@ -49,7 +50,6 @@ "@mantine/spotlight": "^5.2.4", "@microsoft/api-extractor-model": "7.23.3", "@microsoft/tsdoc": "0.14.1", - "@microsoft/tsdoc-config": "0.16.1", "@vscode/codicons": "^0.0.32", "minisearch": "^5.0.0", "next": "^12.2.5", diff --git a/packages/website/src/pages/docs/[...slug].tsx b/packages/website/src/pages/docs/[...slug].tsx index 0622da9ae43d..85ad5b0120cd 100644 --- a/packages/website/src/pages/docs/[...slug].tsx +++ b/packages/website/src/pages/docs/[...slug].tsx @@ -12,6 +12,7 @@ import { type ApiVariableJSON, type ApiEnumJSON, } from '@discordjs/api-extractor-utils'; +import { createApiModel } from '@discordjs/scripts'; import { ActionIcon, Affix, Box, LoadingOverlay, Transition } from '@mantine/core'; import { useMediaQuery, useWindowScroll } from '@mantine/hooks'; import { registerSpotlightActions } from '@mantine/spotlight'; @@ -36,7 +37,6 @@ import { Interface } from '~/components/model/Interface'; import { TypeAlias } from '~/components/model/TypeAlias'; import { Variable } from '~/components/model/Variable'; import { MemberProvider } from '~/contexts/member'; -import { createApiModel } from '~/util/api-model.server'; import { findMember, findMemberByKey } from '~/util/model.server'; import { PACKAGES } from '~/util/packages'; import { miniSearch } from '~/util/search'; diff --git a/packages/website/src/util/api-model.server.ts b/packages/website/src/util/api-model.server.ts deleted file mode 100644 index 3753a0f6aad6..000000000000 --- a/packages/website/src/util/api-model.server.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { ApiModel, ApiItem, type ApiPackage } from '@microsoft/api-extractor-model'; -import { TSDocConfiguration } from '@microsoft/tsdoc'; -import { TSDocConfigFile } from '@microsoft/tsdoc-config'; - -export function createApiModel(data: any) { - const model = new ApiModel(); - const tsdocConfiguration = new TSDocConfiguration(); - const tsdocConfigFile = TSDocConfigFile.loadFromObject(data.metadata.tsdocConfig); - tsdocConfigFile.configureParser(tsdocConfiguration); - - const apiPackage = ApiItem.deserialize(data, { - apiJsonFilename: '', - toolPackage: data.metadata.toolPackage, - toolVersion: data.metadata.toolVersion, - versionToDeserialize: data.metadata.schemaVersion, - tsdocConfiguration, - }) as ApiPackage; - model.addMember(apiPackage); - return model; -} diff --git a/yarn.lock b/yarn.lock index 1fd3a170bc2b..0afaa3434020 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1906,7 +1906,7 @@ __metadata: languageName: unknown linkType: soft -"@discordjs/scripts@workspace:packages/scripts": +"@discordjs/scripts@workspace:^, @discordjs/scripts@workspace:packages/scripts": version: 0.0.0-use.local resolution: "@discordjs/scripts@workspace:packages/scripts" dependencies: @@ -1963,6 +1963,7 @@ __metadata: resolution: "@discordjs/website@workspace:packages/website" dependencies: "@discordjs/api-extractor-utils": "workspace:^" + "@discordjs/scripts": "workspace:^" "@emotion/react": ^11.10.4 "@emotion/server": ^11.10.0 "@mantine/core": ^5.2.4 @@ -1972,7 +1973,6 @@ __metadata: "@mantine/spotlight": ^5.2.4 "@microsoft/api-extractor-model": 7.23.3 "@microsoft/tsdoc": 0.14.1 - "@microsoft/tsdoc-config": 0.16.1 "@testing-library/react": ^13.3.0 "@testing-library/user-event": ^14.4.3 "@types/node": ^16.11.56 From f79ccb497179b6f8de7c0d6cc37f516f5c2e3e1c Mon Sep 17 00:00:00 2001 From: Suneet Tipirneni <77477100+suneettipirneni@users.noreply.github.com> Date: Fri, 2 Sep 2022 19:14:00 -0400 Subject: [PATCH 125/155] chore(website): bump api-extractor-model (#8584) --- packages/api-extractor-utils/package.json | 2 +- .../src/ApiNodeJSONEncoder.ts | 5 ++++- packages/scripts/package.json | 2 +- packages/website/package.json | 2 +- yarn.lock | 17 +++-------------- 5 files changed, 10 insertions(+), 18 deletions(-) diff --git a/packages/api-extractor-utils/package.json b/packages/api-extractor-utils/package.json index 87d16fc359ab..9a3b3cb82f3c 100644 --- a/packages/api-extractor-utils/package.json +++ b/packages/api-extractor-utils/package.json @@ -31,7 +31,7 @@ }, "homepage": "https://discord.js.org", "dependencies": { - "@microsoft/api-extractor-model": "7.23.3", + "@microsoft/api-extractor-model": "7.24.0", "@microsoft/tsdoc": "^0.14.1" }, "devDependencies": { diff --git a/packages/api-extractor-utils/src/ApiNodeJSONEncoder.ts b/packages/api-extractor-utils/src/ApiNodeJSONEncoder.ts index 4cc773cbc017..81d18056915e 100644 --- a/packages/api-extractor-utils/src/ApiNodeJSONEncoder.ts +++ b/packages/api-extractor-utils/src/ApiNodeJSONEncoder.ts @@ -1,3 +1,4 @@ +import type { ApiReturnTypeMixin } from '@microsoft/api-extractor-model'; import { type ApiModel, ApiDeclaredItem, @@ -140,6 +141,8 @@ export interface ApiConstructorJSON extends ApiItemJSON, ApiParameterListJSON { protected: boolean; } +export type FunctionLike = ApiDeclaredItem & ApiParameterListMixin & ApiReturnTypeMixin & ApiTypeParameterListMixin; + export class ApiNodeJSONEncoder { public static encode(model: ApiModel, node: ApiItem, version: string) { if (!(node instanceof ApiDeclaredItem)) { @@ -252,7 +255,7 @@ export class ApiNodeJSONEncoder { }; } - public static encodeFunction(model: ApiModel, item: ApiFunction, version: string): ApiFunctionJSON { + public static encodeFunction(model: ApiModel, item: FunctionLike, version: string): ApiFunctionJSON { return { ...this.encodeItem(model, item, version), ...this.encodeParameterList(model, item, version), diff --git a/packages/scripts/package.json b/packages/scripts/package.json index ab9b0a238109..4aa98dda68cc 100644 --- a/packages/scripts/package.json +++ b/packages/scripts/package.json @@ -44,7 +44,7 @@ "homepage": "https://discord.js.org", "dependencies": { "@discordjs/api-extractor-utils": "workspace:^", - "@microsoft/api-extractor-model": "7.23.3", + "@microsoft/api-extractor-model": "7.24.0", "@microsoft/tsdoc": "^0.14.1", "@microsoft/tsdoc-config": "0.16.1", "commander": "^9.4.0", diff --git a/packages/website/package.json b/packages/website/package.json index 5f5f35472ae6..79f6b4b036d2 100644 --- a/packages/website/package.json +++ b/packages/website/package.json @@ -48,7 +48,7 @@ "@mantine/next": "^5.2.4", "@mantine/nprogress": "^5.2.4", "@mantine/spotlight": "^5.2.4", - "@microsoft/api-extractor-model": "7.23.3", + "@microsoft/api-extractor-model": "7.24.0", "@microsoft/tsdoc": "0.14.1", "@vscode/codicons": "^0.0.32", "minisearch": "^5.0.0", diff --git a/yarn.lock b/yarn.lock index 0afaa3434020..baea70a863c4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1747,7 +1747,7 @@ __metadata: version: 0.0.0-use.local resolution: "@discordjs/api-extractor-utils@workspace:packages/api-extractor-utils" dependencies: - "@microsoft/api-extractor-model": 7.23.3 + "@microsoft/api-extractor-model": 7.24.0 "@microsoft/tsdoc": ^0.14.1 "@types/node": ^16.11.56 eslint: ^8.23.0 @@ -1911,7 +1911,7 @@ __metadata: resolution: "@discordjs/scripts@workspace:packages/scripts" dependencies: "@discordjs/api-extractor-utils": "workspace:^" - "@microsoft/api-extractor-model": 7.23.3 + "@microsoft/api-extractor-model": 7.24.0 "@microsoft/tsdoc": ^0.14.1 "@microsoft/tsdoc-config": 0.16.1 "@types/node": ^16.11.56 @@ -1971,7 +1971,7 @@ __metadata: "@mantine/next": ^5.2.4 "@mantine/nprogress": ^5.2.4 "@mantine/spotlight": ^5.2.4 - "@microsoft/api-extractor-model": 7.23.3 + "@microsoft/api-extractor-model": 7.24.0 "@microsoft/tsdoc": 0.14.1 "@testing-library/react": ^13.3.0 "@testing-library/user-event": ^14.4.3 @@ -2888,17 +2888,6 @@ __metadata: languageName: node linkType: hard -"@microsoft/api-extractor-model@npm:7.23.3": - version: 7.23.3 - resolution: "@microsoft/api-extractor-model@npm:7.23.3" - dependencies: - "@microsoft/tsdoc": 0.14.1 - "@microsoft/tsdoc-config": ~0.16.1 - "@rushstack/node-core-library": 3.51.1 - checksum: 00ec7a31d1f6d1583c3fcd97b16130bf8570e27cd3be2ecd07cf601b0c91ef63885a55bf068932c5d9278f8a9ab2046dc8305c0047158e6df5e86f5e56e35b77 - languageName: node - linkType: hard - "@microsoft/api-extractor-model@npm:7.24.0": version: 7.24.0 resolution: "@microsoft/api-extractor-model@npm:7.24.0" From a7ad7e75ce2f09bdbabd86aa47da44c56ecec6de Mon Sep 17 00:00:00 2001 From: iCrawl Date: Sat, 3 Sep 2022 04:48:33 +0200 Subject: [PATCH 126/155] feat: open graph --- packages/website/public/open-graph.png | Bin 0 -> 69312 bytes packages/website/src/pages/_document.tsx | 7 +++++++ 2 files changed, 7 insertions(+) create mode 100644 packages/website/public/open-graph.png diff --git a/packages/website/public/open-graph.png b/packages/website/public/open-graph.png new file mode 100644 index 0000000000000000000000000000000000000000..8a66cb89007b49e291cf91d8985e1b5f2ca5cac0 GIT binary patch literal 69312 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

PcI2o&M&)t3F0_MM!y3DdV=Ug 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 Ba~l8v literal 0 HcmV?d00001 diff --git a/packages/website/src/pages/_document.tsx b/packages/website/src/pages/_document.tsx index 123d1b786c81..92e91958873b 100644 --- a/packages/website/src/pages/_document.tsx +++ b/packages/website/src/pages/_document.tsx @@ -15,10 +15,17 @@ export default class _Document extends Document { + + + +

From 0dc68445a1799b657d8d51719802f793d74ce276 Mon Sep 17 00:00:00 2001 From: iCrawl Date: Sat, 3 Sep 2022 05:02:16 +0200 Subject: [PATCH 127/155] refactor: open graph fixes --- packages/website/src/pages/_document.tsx | 8 +++++++- packages/website/src/pages/index.tsx | 2 +- 2 files changed, 8 insertions(+), 2 deletions(-) diff --git a/packages/website/src/pages/_document.tsx b/packages/website/src/pages/_document.tsx index 92e91958873b..bc5736543aa7 100644 --- a/packages/website/src/pages/_document.tsx +++ b/packages/website/src/pages/_document.tsx @@ -22,10 +22,16 @@ export default class _Document extends Document { + + +
diff --git a/packages/website/src/pages/index.tsx b/packages/website/src/pages/index.tsx index cd4ffa41c016..6c5db55b6498 100644 --- a/packages/website/src/pages/index.tsx +++ b/packages/website/src/pages/index.tsx @@ -70,7 +70,7 @@ export default function IndexRoute() { The most popular way to build Discord
bots. - discord.js is a powerful Node.js module that allows you to interact with the Discord API very easily. It + discord.js is a powerful node.js module that allows you to interact with the Discord API very easily. It takes a much more object-oriented approach than most other JS Discord libraries, making your bot's code significantly tidier and easier to comprehend. From d08a57cadd9d69a734077cc1902d931ab10336db Mon Sep 17 00:00:00 2001 From: Almeida Date: Sat, 3 Sep 2022 08:17:06 +0100 Subject: [PATCH 128/155] feat: add `chatInputApplicationCommandMention` formatter (#8546) feat: add `chatInputApplicationCommandMention()` formatter Co-authored-by: kodiakhq[bot] <49736102+kodiakhq[bot]@users.noreply.github.com> --- .../__tests__/messages/formatters.test.ts | 21 ++++++ packages/builders/src/messages/formatters.ts | 69 +++++++++++++++++++ packages/discord.js/src/util/Formatters.js | 11 +++ 3 files changed, 101 insertions(+) diff --git a/packages/builders/__tests__/messages/formatters.test.ts b/packages/builders/__tests__/messages/formatters.test.ts index 467cf547de53..6624ff11f8ce 100644 --- a/packages/builders/__tests__/messages/formatters.test.ts +++ b/packages/builders/__tests__/messages/formatters.test.ts @@ -2,6 +2,7 @@ import { URL } from 'node:url'; import { describe, test, expect, vitest } from 'vitest'; import { + chatInputApplicationCommandMention, blockQuote, bold, channelLink, @@ -137,6 +138,26 @@ describe('Message formatters', () => { expect(roleMention('815434166602170409')).toEqual('<@&815434166602170409>'); }); }); + + describe('chatInputApplicationCommandMention', () => { + test('GIVEN commandName and commandId THEN returns ""', () => { + expect(chatInputApplicationCommandMention('airhorn', '815434166602170409')).toEqual( + '', + ); + }); + + test('GIVEN commandName, subcommandName, and commandId THEN returns ""', () => { + expect(chatInputApplicationCommandMention('airhorn', 'sub', '815434166602170409')).toEqual( + '', + ); + }); + + test('GIVEN commandName, subcommandGroupName, subcommandName, and commandId THEN returns ""', () => { + expect(chatInputApplicationCommandMention('airhorn', 'group', 'sub', '815434166602170409')).toEqual( + '', + ); + }); + }); }); describe('formatEmoji', () => { diff --git a/packages/builders/src/messages/formatters.ts b/packages/builders/src/messages/formatters.ts index 2bbd50dd7e86..2d89d2ccdb3f 100644 --- a/packages/builders/src/messages/formatters.ts +++ b/packages/builders/src/messages/formatters.ts @@ -180,6 +180,75 @@ export function roleMention(roleId: C): `<@&${C}>` { return `<@&${roleId}>`; } +/** + * Formats an application command name, subcommand group name, subcommand name, and ID into an application command mention + * + * @param commandName - The application command name to format + * @param subcommandGroupName - The subcommand group name to format + * @param subcommandName - The subcommand name to format + * @param commandId - The application command ID to format + */ +export function chatInputApplicationCommandMention< + N extends string, + G extends string, + S extends string, + I extends Snowflake, +>(commandName: N, subcommandGroupName: G, subcommandName: S, commandId: I): ``; + +/** + * Formats an application command name, subcommand name, and ID into an application command mention + * + * @param commandName - The application command name to format + * @param subcommandName - The subcommand name to format + * @param commandId - The application command ID to format + */ +export function chatInputApplicationCommandMention( + commandName: N, + subcommandName: S, + commandId: I, +): ``; + +/** + * Formats an application command name and ID into an application command mention + * + * @param commandName - The application command name to format + * @param commandId - The application command ID to format + */ +export function chatInputApplicationCommandMention( + commandName: N, + commandId: I, +): ``; + +/** + * Formats an application command name, subcommand group name, subcommand name, and ID into an application command mention + * + * @param commandName - The application command name to format + * @param subcommandGroupName - The subcommand group name to format + * @param subcommandName - The subcommand name to format + * @param commandId - The application command ID to format + */ +export function chatInputApplicationCommandMention< + N extends string, + G extends Snowflake | string, + S extends Snowflake | string, + I extends Snowflake, +>( + commandName: N, + subcommandGroupName: G, + subcommandName?: S, + commandId?: I, +): `` | `` | `` { + if (typeof commandId !== 'undefined') { + return ``; + } + + if (typeof subcommandName !== 'undefined') { + return ``; + } + + return ``; +} + /** * Formats an emoji ID into a fully qualified emoji identifier * diff --git a/packages/discord.js/src/util/Formatters.js b/packages/discord.js/src/util/Formatters.js index 9d4c28240c92..7f3026811610 100644 --- a/packages/discord.js/src/util/Formatters.js +++ b/packages/discord.js/src/util/Formatters.js @@ -21,6 +21,17 @@ const { userMention, } = require('@discordjs/builders'); +/** + * Formats an application command name and id into an application command mention. + * @method chatInputApplicationCommandMention + * @param {string} commandName The name of the application command + * @param {string|Snowflake} subcommandGroupOrSubOrId + * The subcommand group name, subcommand name, or application command id + * @param {?(string|Snowflake)} [subcommandNameOrId] The subcommand name or application command id + * @param {?string} [commandId] The id of the application command + * @returns {string} + */ + /** * Wraps the content inside a code block with an optional language. * @method codeBlock From 8b3d0061180cfd5d9ba8beae3e8d623b5ce43ea4 Mon Sep 17 00:00:00 2001 From: Almeida Date: Sun, 4 Sep 2022 09:11:27 +0100 Subject: [PATCH 129/155] feat(Integration): add `scopes` (#8483) --- packages/discord.js/src/structures/Integration.js | 10 ++++++++++ packages/discord.js/typings/index.d.ts | 1 + 2 files changed, 11 insertions(+) diff --git a/packages/discord.js/src/structures/Integration.js b/packages/discord.js/src/structures/Integration.js index 1afc8f14aa32..d51dfbda8b73 100644 --- a/packages/discord.js/src/structures/Integration.js +++ b/packages/discord.js/src/structures/Integration.js @@ -185,6 +185,16 @@ class Integration extends Base { } else { this.application ??= null; } + + if ('scopes' in data) { + /** + * The scopes this application has been authorized for + * @type {OAuth2Scopes[]} + */ + this.scopes = data.scopes; + } else { + this.scopes ??= []; + } } /** diff --git a/packages/discord.js/typings/index.d.ts b/packages/discord.js/typings/index.d.ts index 91a071d56748..c450df38fe44 100644 --- a/packages/discord.js/typings/index.d.ts +++ b/packages/discord.js/typings/index.d.ts @@ -1450,6 +1450,7 @@ export class Integration extends Base { public role: Role | null; public enableEmoticons: boolean | null; public get roles(): Collection; + public scopes: OAuth2Scopes[]; public get syncedAt(): Date | null; public syncedTimestamp: number | null; public syncing: boolean | null; From 4ffdada4f7a9f8d5bc242353e03c73d5604163a5 Mon Sep 17 00:00:00 2001 From: iCrawl Date: Sun, 4 Sep 2022 19:33:57 +0200 Subject: [PATCH 130/155] chore: deps --- package.json | 2 +- packages/actions/package.json | 6 +- packages/api-extractor-utils/package.json | 2 +- packages/builders/package.json | 6 +- packages/collection/package.json | 6 +- packages/discord.js/package.json | 2 +- packages/docgen/package.json | 4 +- packages/proxy-container/package.json | 2 +- packages/proxy/package.json | 6 +- packages/rest/package.json | 6 +- .../rest/src/lib/errors/DiscordAPIError.ts | 1 - packages/scripts/package.json | 6 +- packages/voice/package.json | 4 +- packages/voice/src/VoiceConnection.ts | 9 +- packages/voice/src/networking/Networking.ts | 1 - packages/voice/src/receive/VoiceReceiver.ts | 2 - packages/website/package.json | 26 +- packages/website/src/pages/index.tsx | 2 +- packages/ws/package.json | 6 +- packages/ws/src/ws/WebSocketShard.ts | 3 - yarn.lock | 1236 +++++++++-------- 21 files changed, 724 insertions(+), 614 deletions(-) diff --git a/package.json b/package.json index 822b187a19e4..97837659cb2a 100644 --- a/package.json +++ b/package.json @@ -46,7 +46,7 @@ "is-ci": "^3.0.1", "lint-staged": "^13.0.3", "tsup": "^6.2.3", - "turbo": "^1.4.4", + "turbo": "^1.4.5", "typescript": "^4.8.2" }, "resolutions": { diff --git a/packages/actions/package.json b/packages/actions/package.json index f6aa9a4a592a..40e2559fdf72 100644 --- a/packages/actions/package.json +++ b/packages/actions/package.json @@ -44,13 +44,13 @@ }, "devDependencies": { "@types/node": "^16.11.56", - "@vitest/coverage-c8": "^0.22.1", + "@vitest/coverage-c8": "^0.23.0", "eslint": "^8.23.0", - "eslint-config-neon": "^0.1.31", + "eslint-config-neon": "^0.1.33", "prettier": "^2.7.1", "tsup": "^6.2.3", "typescript": "^4.8.2", - "vitest": "^0.22.1" + "vitest": "^0.23.0" }, "engines": { "node": ">=16.9.0" diff --git a/packages/api-extractor-utils/package.json b/packages/api-extractor-utils/package.json index 9a3b3cb82f3c..e36a91002344 100644 --- a/packages/api-extractor-utils/package.json +++ b/packages/api-extractor-utils/package.json @@ -37,7 +37,7 @@ "devDependencies": { "@types/node": "^16.11.56", "eslint": "^8.23.0", - "eslint-config-neon": "^0.1.31", + "eslint-config-neon": "^0.1.33", "prettier": "^2.7.1", "tsup": "^6.2.3", "typescript": "^4.8.2" diff --git a/packages/builders/package.json b/packages/builders/package.json index 4a0f276b606d..711f284d26cb 100644 --- a/packages/builders/package.json +++ b/packages/builders/package.json @@ -65,14 +65,14 @@ "@favware/cliff-jumper": "^1.8.7", "@microsoft/api-extractor": "^7.30.0", "@types/node": "^16.11.56", - "@vitest/coverage-c8": "^0.22.1", + "@vitest/coverage-c8": "^0.23.0", "downlevel-dts": "^0.10.1", "eslint": "^8.23.0", - "eslint-config-neon": "^0.1.31", + "eslint-config-neon": "^0.1.33", "prettier": "^2.7.1", "tsup": "^6.2.3", "typescript": "^4.8.2", - "vitest": "^0.22.1" + "vitest": "^0.23.0" }, "engines": { "node": ">=16.9.0" diff --git a/packages/collection/package.json b/packages/collection/package.json index 8117d2a80758..196eb016da4c 100644 --- a/packages/collection/package.json +++ b/packages/collection/package.json @@ -54,14 +54,14 @@ "@favware/cliff-jumper": "^1.8.7", "@microsoft/api-extractor": "^7.30.0", "@types/node": "^16.11.56", - "@vitest/coverage-c8": "^0.22.1", + "@vitest/coverage-c8": "^0.23.0", "downlevel-dts": "^0.10.1", "eslint": "^8.23.0", - "eslint-config-neon": "^0.1.31", + "eslint-config-neon": "^0.1.33", "prettier": "^2.7.1", "tsup": "^6.2.3", "typescript": "^4.8.2", - "vitest": "^0.22.1" + "vitest": "^0.23.0" }, "engines": { "node": ">=16.9.0" diff --git a/packages/discord.js/package.json b/packages/discord.js/package.json index 7bdd1140aa01..ea3dc77b8365 100644 --- a/packages/discord.js/package.json +++ b/packages/discord.js/package.json @@ -67,7 +67,7 @@ "@types/node": "^16.11.56", "dtslint": "^4.2.1", "eslint": "^8.23.0", - "jest": "^29.0.1", + "jest": "^29.0.2", "prettier": "^2.7.1", "tsd": "^0.23.0", "tslint": "^6.1.3", diff --git a/packages/docgen/package.json b/packages/docgen/package.json index fd63b21bd5f2..c4d068a3987b 100644 --- a/packages/docgen/package.json +++ b/packages/docgen/package.json @@ -45,14 +45,14 @@ "commander": "^9.4.0", "jsdoc-to-markdown": "^7.1.1", "tslib": "^2.4.0", - "typedoc": "^0.23.13" + "typedoc": "^0.23.14" }, "devDependencies": { "@favware/cliff-jumper": "^1.8.7", "@types/jsdoc-to-markdown": "^7.0.3", "@types/node": "^16.11.56", "eslint": "^8.23.0", - "eslint-config-neon": "^0.1.31", + "eslint-config-neon": "^0.1.33", "prettier": "^2.7.1", "tsup": "^6.2.3", "typescript": "^4.8.2" diff --git a/packages/proxy-container/package.json b/packages/proxy-container/package.json index a3af5423ff8d..6886dcb1421e 100644 --- a/packages/proxy-container/package.json +++ b/packages/proxy-container/package.json @@ -51,7 +51,7 @@ "devDependencies": { "@types/node": "^16.11.56", "eslint": "^8.23.0", - "eslint-config-neon": "^0.1.31", + "eslint-config-neon": "^0.1.33", "prettier": "^2.7.1", "tsup": "^6.2.3", "typescript": "^4.8.2" diff --git a/packages/proxy/package.json b/packages/proxy/package.json index 0edce8833dd8..169e369a445e 100644 --- a/packages/proxy/package.json +++ b/packages/proxy/package.json @@ -64,15 +64,15 @@ "@microsoft/api-extractor": "^7.30.0", "@types/node": "^16.11.56", "@types/supertest": "^2.0.12", - "@vitest/coverage-c8": "^0.22.1", + "@vitest/coverage-c8": "^0.23.0", "downlevel-dts": "^0.10.1", "eslint": "^8.23.0", - "eslint-config-neon": "^0.1.31", + "eslint-config-neon": "^0.1.33", "prettier": "^2.7.1", "supertest": "^6.2.4", "tsup": "^6.2.3", "typescript": "^4.8.2", - "vitest": "^0.22.1" + "vitest": "^0.23.0" }, "engines": { "node": ">=16.9.0" diff --git a/packages/rest/package.json b/packages/rest/package.json index 6c6435b5d027..226fdd1e85d1 100644 --- a/packages/rest/package.json +++ b/packages/rest/package.json @@ -65,14 +65,14 @@ "@favware/cliff-jumper": "^1.8.7", "@microsoft/api-extractor": "^7.30.0", "@types/node": "^16.11.56", - "@vitest/coverage-c8": "^0.22.1", + "@vitest/coverage-c8": "^0.23.0", "downlevel-dts": "^0.10.1", "eslint": "^8.23.0", - "eslint-config-neon": "^0.1.31", + "eslint-config-neon": "^0.1.33", "prettier": "^2.7.1", "tsup": "^6.2.3", "typescript": "^4.8.2", - "vitest": "^0.22.1" + "vitest": "^0.23.0" }, "engines": { "node": ">=16.9.0" diff --git a/packages/rest/src/lib/errors/DiscordAPIError.ts b/packages/rest/src/lib/errors/DiscordAPIError.ts index 9f03cbf3c6e6..ab60dfab0b20 100644 --- a/packages/rest/src/lib/errors/DiscordAPIError.ts +++ b/packages/rest/src/lib/errors/DiscordAPIError.ts @@ -84,7 +84,6 @@ export class DiscordAPIError extends Error { return error.error_description ?? 'No Description'; } - // eslint-disable-next-line consistent-return private static *flattenDiscordError(obj: DiscordError, key = ''): IterableIterator { if (isErrorResponse(obj)) { return yield `${key.length ? `${key}[${obj.code}]` : `${obj.code}`}: ${obj.message}`.trim(); diff --git a/packages/scripts/package.json b/packages/scripts/package.json index 4aa98dda68cc..2b951a288c3d 100644 --- a/packages/scripts/package.json +++ b/packages/scripts/package.json @@ -53,13 +53,13 @@ }, "devDependencies": { "@types/node": "^16.11.56", - "@vitest/coverage-c8": "^0.22.1", + "@vitest/coverage-c8": "^0.23.0", "eslint": "^8.23.0", - "eslint-config-neon": "^0.1.31", + "eslint-config-neon": "^0.1.33", "prettier": "^2.7.1", "tsup": "^6.2.3", "typescript": "^4.8.2", - "vitest": "^0.22.1" + "vitest": "^0.23.0" }, "engines": { "node": ">=16.9.0" diff --git a/packages/voice/package.json b/packages/voice/package.json index f42e85f4fbe2..aba04ab0fe66 100644 --- a/packages/voice/package.json +++ b/packages/voice/package.json @@ -69,8 +69,8 @@ "@types/node": "^16.11.56", "downlevel-dts": "^0.10.1", "eslint": "^8.23.0", - "eslint-config-neon": "^0.1.31", - "jest": "^29.0.1", + "eslint-config-neon": "^0.1.33", + "jest": "^29.0.2", "jest-websocket-mock": "^2.4.0", "mock-socket": "^9.1.5", "prettier": "^2.7.1", diff --git a/packages/voice/src/VoiceConnection.ts b/packages/voice/src/VoiceConnection.ts index 2dee81eefebc..85548f76d028 100644 --- a/packages/voice/src/VoiceConnection.ts +++ b/packages/voice/src/VoiceConnection.ts @@ -1,7 +1,4 @@ -/* eslint-disable consistent-return */ /* eslint-disable @typescript-eslint/unbound-method */ -/* eslint-disable jsdoc/check-param-names */ -/* eslint-disable @typescript-eslint/method-signature-style */ import type { Buffer } from 'node:buffer'; import { EventEmitter } from 'node:events'; import type { GatewayVoiceServerUpdateDispatchData, GatewayVoiceStateUpdateDispatchData } from 'discord-api-types/v10'; @@ -244,10 +241,10 @@ export class VoiceConnection extends EventEmitter { * @param joinConfig - The data required to establish the voice connection * @param options - The options used to create this voice connection */ - public constructor(joinConfig: JoinConfig, { debug, adapterCreator }: CreateVoiceConnectionOptions) { + public constructor(joinConfig: JoinConfig, options: CreateVoiceConnectionOptions) { super(); - this.debug = debug ? (message: string) => this.emit('debug', message) : null; + this.debug = options.debug ? (message: string) => this.emit('debug', message) : null; this.rejoinAttempts = 0; this.receiver = new VoiceReceiver(this); @@ -257,7 +254,7 @@ export class VoiceConnection extends EventEmitter { this.onNetworkingError = this.onNetworkingError.bind(this); this.onNetworkingDebug = this.onNetworkingDebug.bind(this); - const adapter = adapterCreator({ + const adapter = options.adapterCreator({ onVoiceServerUpdate: (data) => this.addServerPacket(data), onVoiceStateUpdate: (data) => this.addStatePacket(data), destroy: () => this.destroy(false), diff --git a/packages/voice/src/networking/Networking.ts b/packages/voice/src/networking/Networking.ts index 7390b6bd8e01..ec6214b946c2 100644 --- a/packages/voice/src/networking/Networking.ts +++ b/packages/voice/src/networking/Networking.ts @@ -489,7 +489,6 @@ export class Networking extends EventEmitter { const state = this.state; if (state.code !== NetworkingStatusCode.Ready) return; state.preparedPacket = this.createAudioPacket(opusPacket, state.connectionData); - // eslint-disable-next-line consistent-return return state.preparedPacket; } diff --git a/packages/voice/src/receive/VoiceReceiver.ts b/packages/voice/src/receive/VoiceReceiver.ts index 4657d7e07dcf..fee3a1db955e 100644 --- a/packages/voice/src/receive/VoiceReceiver.ts +++ b/packages/voice/src/receive/VoiceReceiver.ts @@ -101,7 +101,6 @@ export class VoiceReceiver { // Open packet const decrypted = methods.open(buffer.slice(12, end), nonce, secretKey); if (!decrypted) return; - // eslint-disable-next-line consistent-return return Buffer.from(decrypted); } @@ -124,7 +123,6 @@ export class VoiceReceiver { packet = packet.subarray(4 + 4 * headerExtensionLength); } - // eslint-disable-next-line consistent-return return packet; } diff --git a/packages/website/package.json b/packages/website/package.json index 79f6b4b036d2..25a4e6ee9b35 100644 --- a/packages/website/package.json +++ b/packages/website/package.json @@ -43,11 +43,11 @@ "@discordjs/scripts": "workspace:^", "@emotion/react": "^11.10.4", "@emotion/server": "^11.10.0", - "@mantine/core": "^5.2.4", - "@mantine/hooks": "^5.2.4", - "@mantine/next": "^5.2.4", - "@mantine/nprogress": "^5.2.4", - "@mantine/spotlight": "^5.2.4", + "@mantine/core": "^5.2.5", + "@mantine/hooks": "^5.2.5", + "@mantine/next": "^5.2.5", + "@mantine/nprogress": "^5.2.5", + "@mantine/spotlight": "^5.2.5", "@microsoft/api-extractor-model": "7.24.0", "@microsoft/tsdoc": "0.14.1", "@vscode/codicons": "^0.0.32", @@ -68,25 +68,25 @@ "swr": "^1.3.0" }, "devDependencies": { - "@testing-library/react": "^13.3.0", + "@testing-library/react": "^13.4.0", "@testing-library/user-event": "^14.4.3", "@types/node": "^16.11.56", "@types/react-dom": "^18.0.6", "@types/react-syntax-highlighter": "^15.5.5", - "@unocss/cli": "^0.45.14", - "@unocss/preset-web-fonts": "^0.45.14", - "@unocss/reset": "^0.45.14", + "@unocss/cli": "^0.45.15", + "@unocss/preset-web-fonts": "^0.45.15", + "@unocss/reset": "^0.45.15", "@vitejs/plugin-react": "^2.0.1", - "@vitest/coverage-c8": "^0.22.1", + "@vitest/coverage-c8": "^0.23.0", "concurrently": "^7.3.0", "eslint": "^8.23.0", - "eslint-config-neon": "^0.1.31", + "eslint-config-neon": "^0.1.33", "happy-dom": "^6.0.4", "prettier": "^2.7.1", "typescript": "^4.8.2", - "unocss": "^0.45.14", + "unocss": "^0.45.15", "vercel": "^28.2.2", - "vitest": "^0.22.1" + "vitest": "^0.23.0" }, "engines": { "node": ">=16.9.0" diff --git a/packages/website/src/pages/index.tsx b/packages/website/src/pages/index.tsx index 6c5db55b6498..38a966fd4739 100644 --- a/packages/website/src/pages/index.tsx +++ b/packages/website/src/pages/index.tsx @@ -52,7 +52,7 @@ const useStyles = createStyles((theme) => ({ highlight: { position: 'relative', - backgroundColor: theme.fn.variant({ variant: 'light', color: theme.primaryColor }).background, + backgroundColor: theme.fn.variant({ variant: 'light', color: theme.primaryColor }).background!, borderRadius: theme.radius.sm, padding: '4px 12px', }, diff --git a/packages/ws/package.json b/packages/ws/package.json index 7ac1cd4cf6fa..ac2aab165bbb 100644 --- a/packages/ws/package.json +++ b/packages/ws/package.json @@ -66,16 +66,16 @@ "@favware/cliff-jumper": "^1.8.7", "@microsoft/api-extractor": "^7.30.0", "@types/node": "^16.11.56", - "@vitest/coverage-c8": "^0.22.1", + "@vitest/coverage-c8": "^0.23.0", "downlevel-dts": "^0.10.1", "eslint": "^8.23.0", - "eslint-config-neon": "^0.1.31", + "eslint-config-neon": "^0.1.33", "mock-socket": "^9.1.5", "prettier": "^2.7.1", "tsup": "^6.2.3", "typescript": "^4.8.2", "undici": "^5.10.0", - "vitest": "^0.22.1", + "vitest": "^0.23.0", "zlib-sync": "^0.1.7" }, "engines": { diff --git a/packages/ws/src/ws/WebSocketShard.ts b/packages/ws/src/ws/WebSocketShard.ts index 406da1da517e..7550c5540470 100644 --- a/packages/ws/src/ws/WebSocketShard.ts +++ b/packages/ws/src/ws/WebSocketShard.ts @@ -209,7 +209,6 @@ export class WebSocketShard extends AsyncEventEmitter { this.status = WebSocketShardStatus.Idle; if (options.recover !== undefined) { - // eslint-disable-next-line consistent-return return this.connect(); } } @@ -302,7 +301,6 @@ export class WebSocketShard extends AsyncEventEmitter { }); } - // eslint-disable-next-line consistent-return private async heartbeat(requested = false) { if (!this.isAck && !requested) { return this.destroy({ reason: 'Zombie connection', recover: WebSocketShardDestroyRecovery.Resume }); @@ -480,7 +478,6 @@ export class WebSocketShard extends AsyncEventEmitter { this.emit('error', err); } - // eslint-disable-next-line consistent-return private async onClose(code: number) { switch (code) { case CloseCodes.Normal: { diff --git a/yarn.lock b/yarn.lock index baea70a863c4..597ee31b5cc7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1732,14 +1732,14 @@ __metadata: dependencies: "@actions/core": ^1.9.1 "@types/node": ^16.11.56 - "@vitest/coverage-c8": ^0.22.1 + "@vitest/coverage-c8": ^0.23.0 eslint: ^8.23.0 - eslint-config-neon: ^0.1.31 + eslint-config-neon: ^0.1.33 prettier: ^2.7.1 tslib: ^2.4.0 tsup: ^6.2.3 typescript: ^4.8.2 - vitest: ^0.22.1 + vitest: ^0.23.0 languageName: unknown linkType: soft @@ -1751,7 +1751,7 @@ __metadata: "@microsoft/tsdoc": ^0.14.1 "@types/node": ^16.11.56 eslint: ^8.23.0 - eslint-config-neon: ^0.1.31 + eslint-config-neon: ^0.1.33 prettier: ^2.7.1 tsup: ^6.2.3 typescript: ^4.8.2 @@ -1767,18 +1767,18 @@ __metadata: "@microsoft/api-extractor": ^7.30.0 "@sapphire/shapeshift": ^3.6.0 "@types/node": ^16.11.56 - "@vitest/coverage-c8": ^0.22.1 + "@vitest/coverage-c8": ^0.23.0 discord-api-types: ^0.37.5 downlevel-dts: ^0.10.1 eslint: ^8.23.0 - eslint-config-neon: ^0.1.31 + eslint-config-neon: ^0.1.33 fast-deep-equal: ^3.1.3 prettier: ^2.7.1 ts-mixer: ^6.0.1 tslib: ^2.4.0 tsup: ^6.2.3 typescript: ^4.8.2 - vitest: ^0.22.1 + vitest: ^0.23.0 languageName: unknown linkType: soft @@ -1790,14 +1790,14 @@ __metadata: "@favware/cliff-jumper": ^1.8.7 "@microsoft/api-extractor": ^7.30.0 "@types/node": ^16.11.56 - "@vitest/coverage-c8": ^0.22.1 + "@vitest/coverage-c8": ^0.23.0 downlevel-dts: ^0.10.1 eslint: ^8.23.0 - eslint-config-neon: ^0.1.31 + eslint-config-neon: ^0.1.33 prettier: ^2.7.1 tsup: ^6.2.3 typescript: ^4.8.2 - vitest: ^0.22.1 + vitest: ^0.23.0 languageName: unknown linkType: soft @@ -1814,7 +1814,7 @@ __metadata: is-ci: ^3.0.1 lint-staged: ^13.0.3 tsup: ^6.2.3 - turbo: ^1.4.4 + turbo: ^1.4.5 typescript: ^4.8.2 languageName: unknown linkType: soft @@ -1828,12 +1828,12 @@ __metadata: "@types/node": ^16.11.56 commander: ^9.4.0 eslint: ^8.23.0 - eslint-config-neon: ^0.1.31 + eslint-config-neon: ^0.1.33 jsdoc-to-markdown: ^7.1.1 prettier: ^2.7.1 tslib: ^2.4.0 tsup: ^6.2.3 - typedoc: ^0.23.13 + typedoc: ^0.23.14 typescript: ^4.8.2 bin: docgen: ./dist/cli.js @@ -1848,7 +1848,7 @@ __metadata: "@discordjs/rest": ^1.1.0 "@types/node": ^16.11.56 eslint: ^8.23.0 - eslint-config-neon: ^0.1.31 + eslint-config-neon: ^0.1.33 prettier: ^2.7.1 tslib: ^2.4.0 tsup: ^6.2.3 @@ -1866,17 +1866,17 @@ __metadata: "@microsoft/api-extractor": ^7.30.0 "@types/node": ^16.11.56 "@types/supertest": ^2.0.12 - "@vitest/coverage-c8": ^0.22.1 + "@vitest/coverage-c8": ^0.23.0 downlevel-dts: ^0.10.1 eslint: ^8.23.0 - eslint-config-neon: ^0.1.31 + eslint-config-neon: ^0.1.33 prettier: ^2.7.1 supertest: ^6.2.4 tslib: ^2.4.0 tsup: ^6.2.3 typescript: ^4.8.2 undici: ^5.10.0 - vitest: ^0.22.1 + vitest: ^0.23.0 languageName: unknown linkType: soft @@ -1891,18 +1891,18 @@ __metadata: "@sapphire/async-queue": ^1.5.0 "@sapphire/snowflake": ^3.2.2 "@types/node": ^16.11.56 - "@vitest/coverage-c8": ^0.22.1 + "@vitest/coverage-c8": ^0.23.0 discord-api-types: ^0.37.5 downlevel-dts: ^0.10.1 eslint: ^8.23.0 - eslint-config-neon: ^0.1.31 + eslint-config-neon: ^0.1.33 file-type: ^18.0.0 prettier: ^2.7.1 tslib: ^2.4.0 tsup: ^6.2.3 typescript: ^4.8.2 undici: ^5.10.0 - vitest: ^0.22.1 + vitest: ^0.23.0 languageName: unknown linkType: soft @@ -1915,16 +1915,16 @@ __metadata: "@microsoft/tsdoc": ^0.14.1 "@microsoft/tsdoc-config": 0.16.1 "@types/node": ^16.11.56 - "@vitest/coverage-c8": ^0.22.1 + "@vitest/coverage-c8": ^0.23.0 commander: ^9.4.0 eslint: ^8.23.0 - eslint-config-neon: ^0.1.31 + eslint-config-neon: ^0.1.33 prettier: ^2.7.1 tslib: ^2.4.0 tsup: ^6.2.3 typescript: ^4.8.2 undici: ^5.10.0 - vitest: ^0.22.1 + vitest: ^0.23.0 languageName: unknown linkType: soft @@ -1944,8 +1944,8 @@ __metadata: discord-api-types: ^0.37.5 downlevel-dts: ^0.10.1 eslint: ^8.23.0 - eslint-config-neon: ^0.1.31 - jest: ^29.0.1 + eslint-config-neon: ^0.1.33 + jest: ^29.0.2 jest-websocket-mock: ^2.4.0 mock-socket: ^9.1.5 prettier: ^2.7.1 @@ -1966,27 +1966,27 @@ __metadata: "@discordjs/scripts": "workspace:^" "@emotion/react": ^11.10.4 "@emotion/server": ^11.10.0 - "@mantine/core": ^5.2.4 - "@mantine/hooks": ^5.2.4 - "@mantine/next": ^5.2.4 - "@mantine/nprogress": ^5.2.4 - "@mantine/spotlight": ^5.2.4 + "@mantine/core": ^5.2.5 + "@mantine/hooks": ^5.2.5 + "@mantine/next": ^5.2.5 + "@mantine/nprogress": ^5.2.5 + "@mantine/spotlight": ^5.2.5 "@microsoft/api-extractor-model": 7.24.0 "@microsoft/tsdoc": 0.14.1 - "@testing-library/react": ^13.3.0 + "@testing-library/react": ^13.4.0 "@testing-library/user-event": ^14.4.3 "@types/node": ^16.11.56 "@types/react-dom": ^18.0.6 "@types/react-syntax-highlighter": ^15.5.5 - "@unocss/cli": ^0.45.14 - "@unocss/preset-web-fonts": ^0.45.14 - "@unocss/reset": ^0.45.14 + "@unocss/cli": ^0.45.15 + "@unocss/preset-web-fonts": ^0.45.15 + "@unocss/reset": ^0.45.15 "@vitejs/plugin-react": ^2.0.1 - "@vitest/coverage-c8": ^0.22.1 + "@vitest/coverage-c8": ^0.23.0 "@vscode/codicons": ^0.0.32 concurrently: ^7.3.0 eslint: ^8.23.0 - eslint-config-neon: ^0.1.31 + eslint-config-neon: ^0.1.33 happy-dom: ^6.0.4 minisearch: ^5.0.0 next: ^12.2.5 @@ -2005,9 +2005,9 @@ __metadata: shiki: ^0.11.1 swr: ^1.3.0 typescript: ^4.8.2 - unocss: ^0.45.14 + unocss: ^0.45.15 vercel: ^28.2.2 - vitest: ^0.22.1 + vitest: ^0.23.0 languageName: unknown linkType: soft @@ -2023,19 +2023,19 @@ __metadata: "@sapphire/async-queue": ^1.5.0 "@types/node": ^16.11.56 "@types/ws": ^8.5.3 - "@vitest/coverage-c8": ^0.22.1 + "@vitest/coverage-c8": ^0.23.0 "@vladfrangu/async_event_emitter": ^2.0.1 discord-api-types: ^0.37.5 downlevel-dts: ^0.10.1 eslint: ^8.23.0 - eslint-config-neon: ^0.1.31 + eslint-config-neon: ^0.1.33 mock-socket: ^9.1.5 prettier: ^2.7.1 tslib: ^2.4.0 tsup: ^6.2.3 typescript: ^4.8.2 undici: ^5.10.0 - vitest: ^0.22.1 + vitest: ^0.23.0 ws: ^8.8.1 zlib-sync: ^0.1.7 languageName: unknown @@ -2424,29 +2424,29 @@ __metadata: languageName: node linkType: hard -"@jest/console@npm:^29.0.1": - version: 29.0.1 - resolution: "@jest/console@npm:29.0.1" +"@jest/console@npm:^29.0.2": + version: 29.0.2 + resolution: "@jest/console@npm:29.0.2" dependencies: - "@jest/types": ^29.0.1 + "@jest/types": ^29.0.2 "@types/node": "*" chalk: ^4.0.0 - jest-message-util: ^29.0.1 - jest-util: ^29.0.1 + jest-message-util: ^29.0.2 + jest-util: ^29.0.2 slash: ^3.0.0 - checksum: a6c9424f1e398d91c7746001fceb7ce93ae6cd359df7241ba25020f0fe0b0be348b28de89bc0fdb552cea583cafe8cefd408bb8d93d045dba7f47b625e7456ea + checksum: 83cf779973b4bf5a3ff66bf206b705f588e339627222bbd3c60c40a37d663f5ea36dce1a9642aebf703c3802e9669141c2c36e9477f2f3637f612b0cc5617498 languageName: node linkType: hard -"@jest/core@npm:^29.0.1": - version: 29.0.1 - resolution: "@jest/core@npm:29.0.1" +"@jest/core@npm:^29.0.2": + version: 29.0.2 + resolution: "@jest/core@npm:29.0.2" dependencies: - "@jest/console": ^29.0.1 - "@jest/reporters": ^29.0.1 - "@jest/test-result": ^29.0.1 - "@jest/transform": ^29.0.1 - "@jest/types": ^29.0.1 + "@jest/console": ^29.0.2 + "@jest/reporters": ^29.0.2 + "@jest/test-result": ^29.0.2 + "@jest/transform": ^29.0.2 + "@jest/types": ^29.0.2 "@types/node": "*" ansi-escapes: ^4.2.1 chalk: ^4.0.0 @@ -2454,20 +2454,20 @@ __metadata: exit: ^0.1.2 graceful-fs: ^4.2.9 jest-changed-files: ^29.0.0 - jest-config: ^29.0.1 - jest-haste-map: ^29.0.1 - jest-message-util: ^29.0.1 + jest-config: ^29.0.2 + jest-haste-map: ^29.0.2 + jest-message-util: ^29.0.2 jest-regex-util: ^29.0.0 - jest-resolve: ^29.0.1 - jest-resolve-dependencies: ^29.0.1 - jest-runner: ^29.0.1 - jest-runtime: ^29.0.1 - jest-snapshot: ^29.0.1 - jest-util: ^29.0.1 - jest-validate: ^29.0.1 - jest-watcher: ^29.0.1 + jest-resolve: ^29.0.2 + jest-resolve-dependencies: ^29.0.2 + jest-runner: ^29.0.2 + jest-runtime: ^29.0.2 + jest-snapshot: ^29.0.2 + jest-util: ^29.0.2 + jest-validate: ^29.0.2 + jest-watcher: ^29.0.2 micromatch: ^4.0.4 - pretty-format: ^29.0.1 + pretty-format: ^29.0.2 slash: ^3.0.0 strip-ansi: ^6.0.0 peerDependencies: @@ -2475,19 +2475,19 @@ __metadata: peerDependenciesMeta: node-notifier: optional: true - checksum: da8eb20fbe9ab53fe7b554df2443510f6c55e29823c820bbbc5f197b9a1bc899bf3b03fddcb8cc08b3b9ffd43cbf50d38c4e3724e3347a8ce82a7303947a8a50 + checksum: b6c9bd3d3a54ba7fe1fcedf6ff78ece7ce56fda9346d63f886341d503757ff632c95d19765ae777fd01a0cf57665d0108747be7d9e250366c6980d3bddbce10b languageName: node linkType: hard -"@jest/environment@npm:^29.0.1": - version: 29.0.1 - resolution: "@jest/environment@npm:29.0.1" +"@jest/environment@npm:^29.0.2": + version: 29.0.2 + resolution: "@jest/environment@npm:29.0.2" dependencies: - "@jest/fake-timers": ^29.0.1 - "@jest/types": ^29.0.1 + "@jest/fake-timers": ^29.0.2 + "@jest/types": ^29.0.2 "@types/node": "*" - jest-mock: ^29.0.1 - checksum: d0713707b08ab995360133a6746d27d2695c034a1a74a53c5c863490f88ab9dbd05f10038fec776a6540148e7cba8277c6cace776ae30435c456f82bda1f4c3a + jest-mock: ^29.0.2 + checksum: 2ab0cd404e34f649c6534035f93f2a6660cd7b6ab136c85035af7923e4b0511fcc0b18123e69c9c5fc4ee4e4645f8af5efde5eb53c704f011e264ff34bcacb6e languageName: node linkType: hard @@ -2500,51 +2500,60 @@ __metadata: languageName: node linkType: hard -"@jest/expect@npm:^29.0.1": - version: 29.0.1 - resolution: "@jest/expect@npm:29.0.1" +"@jest/expect-utils@npm:^29.0.2": + version: 29.0.2 + resolution: "@jest/expect-utils@npm:29.0.2" dependencies: - expect: ^29.0.1 - jest-snapshot: ^29.0.1 - checksum: 408a0037620ca75c6f91390fcfbb820076b39ad4bd3db911403895ba28195621f3a6169c99e27adc4394577ea9ec88245af71384b796ca6736d931e78410a95c + jest-get-type: ^29.0.0 + checksum: 12bb317b1dc0afe7cd0a0c4e1281dee6a7f1a5d74f85154e54bef79ad983da0c2adba9998b65d95bc8655bc0a535f566b0a83ea068bbdca33c33c1dd6fdae195 languageName: node linkType: hard -"@jest/fake-timers@npm:^29.0.1": - version: 29.0.1 - resolution: "@jest/fake-timers@npm:29.0.1" +"@jest/expect@npm:^29.0.2": + version: 29.0.2 + resolution: "@jest/expect@npm:29.0.2" dependencies: - "@jest/types": ^29.0.1 + expect: ^29.0.2 + jest-snapshot: ^29.0.2 + checksum: 03a4d3b5995d2c92c6a7b25ac914147e5cf325b5e054f7364ea8d879da2b40d7c7e1e941dcf65c7f0f38805e4dc83eb861d309bbf4e727f99f41f89b9dcb9185 + languageName: node + linkType: hard + +"@jest/fake-timers@npm:^29.0.2": + version: 29.0.2 + resolution: "@jest/fake-timers@npm:29.0.2" + dependencies: + "@jest/types": ^29.0.2 "@sinonjs/fake-timers": ^9.1.2 "@types/node": "*" - jest-message-util: ^29.0.1 - jest-mock: ^29.0.1 - jest-util: ^29.0.1 - checksum: 6f4e40837b9330643bbf80a1b69a1872c53bb7c02294fb3d29baf75120aa34fc4b736ab98c64f45d81a0df0eca56d2099b2b0f6bcc32135646043ed06373e76f + jest-message-util: ^29.0.2 + jest-mock: ^29.0.2 + jest-util: ^29.0.2 + checksum: 995b76a099707e91b0851c7c52d91beed3b8bbedca28faf88ff257af7f17d5e752e0fd901676fe2db0d917491b9557d6ca1a1a07ad992b02346275af7cafdd18 languageName: node linkType: hard -"@jest/globals@npm:^29.0.1": - version: 29.0.1 - resolution: "@jest/globals@npm:29.0.1" +"@jest/globals@npm:^29.0.2": + version: 29.0.2 + resolution: "@jest/globals@npm:29.0.2" dependencies: - "@jest/environment": ^29.0.1 - "@jest/expect": ^29.0.1 - "@jest/types": ^29.0.1 - jest-mock: ^29.0.1 - checksum: 5a0f50e3bacb1b9f298be4f49f36df8fc9d656fe5f01e38fe524955a6893b1aeffad219e5001dd0ef05975e497d27660d9c335bb0c994c8c688a777344a50bda + "@jest/environment": ^29.0.2 + "@jest/expect": ^29.0.2 + "@jest/types": ^29.0.2 + jest-mock: ^29.0.2 + checksum: becea3f7fef9a6bf45d1f9cb280ab590c03bdd07e6276fc9aa99ff0800fae2fd9030f13dd1f18192c084b48871e33accfaf5e88ec9903bd727df9b0965356bcd languageName: node linkType: hard -"@jest/reporters@npm:^29.0.1": - version: 29.0.1 - resolution: "@jest/reporters@npm:29.0.1" +"@jest/reporters@npm:^29.0.2": + version: 29.0.2 + resolution: "@jest/reporters@npm:29.0.2" dependencies: "@bcoe/v8-coverage": ^0.2.3 - "@jest/console": ^29.0.1 - "@jest/test-result": ^29.0.1 - "@jest/transform": ^29.0.1 - "@jest/types": ^29.0.1 + "@jest/console": ^29.0.2 + "@jest/test-result": ^29.0.2 + "@jest/transform": ^29.0.2 + "@jest/types": ^29.0.2 "@jridgewell/trace-mapping": ^0.3.15 "@types/node": "*" chalk: ^4.0.0 @@ -2557,9 +2566,9 @@ __metadata: istanbul-lib-report: ^3.0.0 istanbul-lib-source-maps: ^4.0.0 istanbul-reports: ^3.1.3 - jest-message-util: ^29.0.1 - jest-util: ^29.0.1 - jest-worker: ^29.0.1 + jest-message-util: ^29.0.2 + jest-util: ^29.0.2 + jest-worker: ^29.0.2 slash: ^3.0.0 string-length: ^4.0.1 strip-ansi: ^6.0.0 @@ -2570,7 +2579,7 @@ __metadata: peerDependenciesMeta: node-notifier: optional: true - checksum: 33032410e926e229702b3ba8f581d510fef38b53f368bedcf30c761a0fe887d4faff56497e04664760a84f2dcf49f1fb206e392872e96a3b37f9f27af31ad54a + checksum: e5378e0d6ea30d9a1d5fa3126638eae7316ecfdf67fa95e3449b6698c73c1437a7565dbffaf93becc4d6647f3042db6497d77c10431e1f492b33f1fb7c3b3dc0 languageName: node linkType: hard @@ -2603,50 +2612,50 @@ __metadata: languageName: node linkType: hard -"@jest/test-result@npm:^29.0.1": - version: 29.0.1 - resolution: "@jest/test-result@npm:29.0.1" +"@jest/test-result@npm:^29.0.2": + version: 29.0.2 + resolution: "@jest/test-result@npm:29.0.2" dependencies: - "@jest/console": ^29.0.1 - "@jest/types": ^29.0.1 + "@jest/console": ^29.0.2 + "@jest/types": ^29.0.2 "@types/istanbul-lib-coverage": ^2.0.0 collect-v8-coverage: ^1.0.0 - checksum: cb012a42f9fe82ad08e4b9f7d9626d0a04c21f43c932ea9d2373c36ceb974c87f0a1d2fa825a814fa64175073bf9c8493f250ac8f7c9bba470e43f92040ccfb7 + checksum: be375eb8c2daf6dba46434a8a0339ee1a0d08c6c8c2ad2062b6c60a310bb6dc8242a7cfdec1536e883a0016889d159b0ddb909772f13b10e8bd45b7322aeabde languageName: node linkType: hard -"@jest/test-sequencer@npm:^29.0.1": - version: 29.0.1 - resolution: "@jest/test-sequencer@npm:29.0.1" +"@jest/test-sequencer@npm:^29.0.2": + version: 29.0.2 + resolution: "@jest/test-sequencer@npm:29.0.2" dependencies: - "@jest/test-result": ^29.0.1 + "@jest/test-result": ^29.0.2 graceful-fs: ^4.2.9 - jest-haste-map: ^29.0.1 + jest-haste-map: ^29.0.2 slash: ^3.0.0 - checksum: 151c35636b1fa5e1676e7deef234e556a09fd08cc91363dae18fe608aeb547f9889c48f0602d4635a2ee872170633e2330c08c0a018959897e49ea747a3d431a + checksum: 718b839eb711f660e44e585a8cc859650b33f32622710cd7bc4ee91fab9a35775fb271faaf6dde24012af062c8831a1ec239224134b99d9b913bb06ea07fb4f9 languageName: node linkType: hard -"@jest/transform@npm:^29.0.1": - version: 29.0.1 - resolution: "@jest/transform@npm:29.0.1" +"@jest/transform@npm:^29.0.2": + version: 29.0.2 + resolution: "@jest/transform@npm:29.0.2" dependencies: "@babel/core": ^7.11.6 - "@jest/types": ^29.0.1 + "@jest/types": ^29.0.2 "@jridgewell/trace-mapping": ^0.3.15 babel-plugin-istanbul: ^6.1.1 chalk: ^4.0.0 convert-source-map: ^1.4.0 fast-json-stable-stringify: ^2.1.0 graceful-fs: ^4.2.9 - jest-haste-map: ^29.0.1 + jest-haste-map: ^29.0.2 jest-regex-util: ^29.0.0 - jest-util: ^29.0.1 + jest-util: ^29.0.2 micromatch: ^4.0.4 pirates: ^4.0.4 slash: ^3.0.0 write-file-atomic: ^4.0.1 - checksum: dcd1e2c46b663f90f9bf536669d142af7638b06b36e7ffa0901ae18cf3b4c1d4898189b6a08c30604dfbb7d8bcee63e166827696fa96e3406ae400ae863457e0 + checksum: 4a8fdd6e7fc48b0d211912428e0731027cc653507c05040b974a338d06b53238a2e1629dbd13a196d9562983291b2e0fd80790514fb2b8e80557cd33437e6be1 languageName: node linkType: hard @@ -2664,6 +2673,20 @@ __metadata: languageName: node linkType: hard +"@jest/types@npm:^29.0.2": + version: 29.0.2 + resolution: "@jest/types@npm:29.0.2" + dependencies: + "@jest/schemas": ^29.0.0 + "@types/istanbul-lib-coverage": ^2.0.0 + "@types/istanbul-reports": ^3.0.0 + "@types/node": "*" + "@types/yargs": ^17.0.8 + chalk: ^4.0.0 + checksum: f093f4548f8022f5ac9d1edf712edbb5c8edb101017f4afd95b9f9eb978328d099dcb77e2f1893a6dfeb9a7dfdd6cc589b2d83829490cee7e9afa9166c2945bd + languageName: node + linkType: hard + "@jridgewell/gen-mapping@npm:^0.1.0": version: 0.1.1 resolution: "@jridgewell/gen-mapping@npm:0.1.1" @@ -2726,92 +2749,92 @@ __metadata: languageName: node linkType: hard -"@mantine/core@npm:^5.2.4": - version: 5.2.4 - resolution: "@mantine/core@npm:5.2.4" +"@mantine/core@npm:^5.2.5": + version: 5.2.5 + resolution: "@mantine/core@npm:5.2.5" dependencies: "@floating-ui/react-dom-interactions": 0.6.6 - "@mantine/styles": 5.2.4 - "@mantine/utils": 5.2.4 + "@mantine/styles": 5.2.5 + "@mantine/utils": 5.2.5 "@radix-ui/react-scroll-area": 1.0.0 react-textarea-autosize: 8.3.4 peerDependencies: - "@mantine/hooks": 5.2.4 + "@mantine/hooks": 5.2.5 react: ">=16.8.0" react-dom: ">=16.8.0" - checksum: d7702274a4c0e9f3dd88dda702fee296edfdba2069a0c50c4a106a995ccac058c3711c92812e7134bf80e118267aaee54aa5726427e40cf9b9b3a2ebff8e1230 + checksum: a7ccb98bf0dd5b845580ca9c89d01ada63cb329546097fa818f41ccd6118ce0e89af27b668a66fd51dd292f1080b31f376c747c95230353892cc51f6db18c3cc languageName: node linkType: hard -"@mantine/hooks@npm:^5.2.4": - version: 5.2.4 - resolution: "@mantine/hooks@npm:5.2.4" +"@mantine/hooks@npm:^5.2.5": + version: 5.2.5 + resolution: "@mantine/hooks@npm:5.2.5" peerDependencies: react: ">=16.8.0" - checksum: f7eef948eb5abf2266cbbe126ea9eff19ed2594dabfb62ca7bbee5520aa3ba168f8169db7bcd438dafabf60c17b8ed6944bedbdf803568caaabf7e93da80d651 + checksum: c4358d22acc3d2017115836a1b08c11c9eec64220a9ed9ba4828b14687f8a87367ef19ce7ea21c32a2c112046337afbc9e1ad55d3cbcb4ace20074c14c4233c3 languageName: node linkType: hard -"@mantine/next@npm:^5.2.4": - version: 5.2.4 - resolution: "@mantine/next@npm:5.2.4" +"@mantine/next@npm:^5.2.5": + version: 5.2.5 + resolution: "@mantine/next@npm:5.2.5" dependencies: - "@mantine/ssr": 5.2.4 - "@mantine/styles": 5.2.4 + "@mantine/ssr": 5.2.5 + "@mantine/styles": 5.2.5 peerDependencies: next: "*" react: ">=16.8.0" react-dom: ">=16.8.0" - checksum: 78baee7042eb4cb71320296797b626c3b0f10da176e6b80991e9442351fffd59ac2a419207cbde6873b01a45602b2a1faa96fca3e0734b5fae7de2ac43a1027a + checksum: a4b543a83e2af43bf96a4a4d3ad9f16f13d8830fcbbbdff47a144760eaf7059191f5e1b279b79c2a6469740f0c772a708437d42cf31811ef0748673096a7d16d languageName: node linkType: hard -"@mantine/nprogress@npm:^5.2.4": - version: 5.2.4 - resolution: "@mantine/nprogress@npm:5.2.4" +"@mantine/nprogress@npm:^5.2.5": + version: 5.2.5 + resolution: "@mantine/nprogress@npm:5.2.5" dependencies: - "@mantine/utils": 5.2.4 + "@mantine/utils": 5.2.5 peerDependencies: - "@mantine/core": 5.2.4 - "@mantine/hooks": 5.2.4 + "@mantine/core": 5.2.5 + "@mantine/hooks": 5.2.5 react: ">=16.8.0" react-dom: ">=16.8.0" - checksum: 048b78453afd8ee36b32078169197c7cb5dbd3f6f901376f90d406ea5bf650536fda77895dbce2283757382c0d643c669f613d175577779768490859c58ad10d + checksum: ce0971c6df3ea5978397647939288a9d00f80e26feb8389c773485937ff6d5bb0ebf53aadcf354b5abf1665a2657364caa9e91ecf484431e58f027ee5d2d5546 languageName: node linkType: hard -"@mantine/spotlight@npm:^5.2.4": - version: 5.2.4 - resolution: "@mantine/spotlight@npm:5.2.4" +"@mantine/spotlight@npm:^5.2.5": + version: 5.2.5 + resolution: "@mantine/spotlight@npm:5.2.5" dependencies: - "@mantine/utils": 5.2.4 + "@mantine/utils": 5.2.5 peerDependencies: - "@mantine/core": 5.2.4 - "@mantine/hooks": 5.2.4 + "@mantine/core": 5.2.5 + "@mantine/hooks": 5.2.5 react: ">=16.8.0" react-dom: ">=16.8.0" - checksum: 4dd281b6f88c8621c229ec14c35a4bc7342cc3ea2e975e2991b30f393d7c17c4eef2f823ae92efbe0e3c779c28cdfe59e6852ef604b170c2e08fbbd1d475196b + checksum: a895b39ff7c6475272213708d41a55c2a4e885f4882efca1e143d8c1393761fa015ef594ad1d9f3c093db8a6069b5cabe56c51cbac2c7154351a09434810184a languageName: node linkType: hard -"@mantine/ssr@npm:5.2.4": - version: 5.2.4 - resolution: "@mantine/ssr@npm:5.2.4" +"@mantine/ssr@npm:5.2.5": + version: 5.2.5 + resolution: "@mantine/ssr@npm:5.2.5" dependencies: - "@mantine/styles": 5.2.4 + "@mantine/styles": 5.2.5 html-react-parser: 1.4.12 peerDependencies: "@emotion/react": ">=11.9.0" "@emotion/server": ">=11.4.0" react: ">=16.8.0" react-dom: ">=16.8.0" - checksum: 05d590eb263259f4a6fb7b4261a15b7b1de62cc4f075eda30eb22e396f27a35c89ac92009d1ef3c9616e1b16e28af61de74204972b319b807d7884a6c09e7910 + checksum: 5369c0af18c7046c8552e3f8fcc4cc452f673fd201cb5d12c443b3c82e2a219201fb9f7435d2a3b4ac2cb34eed23a4725f9535afa9dc03d361fe1f23bc478f68 languageName: node linkType: hard -"@mantine/styles@npm:5.2.4": - version: 5.2.4 - resolution: "@mantine/styles@npm:5.2.4" +"@mantine/styles@npm:5.2.5": + version: 5.2.5 + resolution: "@mantine/styles@npm:5.2.5" dependencies: clsx: 1.1.1 csstype: 3.0.9 @@ -2819,16 +2842,16 @@ __metadata: "@emotion/react": ">=11.9.0" react: ">=16.8.0" react-dom: ">=16.8.0" - checksum: 8a0dee38931285d04bf022349a0cadaf812ee1a4d239b3c8246454002b9e5f37079d3fa5eef6706d610408c5fde06f5b82fd604177812169d3de3f9c8196900f + checksum: 4ef12a86da320f87d6f6fa6647bc56c266325b3dbef1c913104d4995784776fcea73aaccfc5b69217355628777ecc386d1691d786e623ff15a96613d01e6a602 languageName: node linkType: hard -"@mantine/utils@npm:5.2.4": - version: 5.2.4 - resolution: "@mantine/utils@npm:5.2.4" +"@mantine/utils@npm:5.2.5": + version: 5.2.5 + resolution: "@mantine/utils@npm:5.2.5" peerDependencies: react: ">=16.8.0" - checksum: c3c58b60255c140dc336615fc582960b88b2fc0e540da359bf8c6c4bdfbe43a07bf886a0da7ca6d9d11fbb457e86ed73c761765a850b0db7112c5ce6dec61d19 + checksum: 9ee266a9eb5c877a8b3fb4cbf918e5ee0a816ab8f459f13d6a31ba4eae45c1321e6f7bc0fa910019f781f6c8e0ae53737ed1084e6e34d9768b78de1bae4a69ee languageName: node linkType: hard @@ -3437,9 +3460,9 @@ __metadata: languageName: node linkType: hard -"@testing-library/react@npm:^13.3.0": - version: 13.3.0 - resolution: "@testing-library/react@npm:13.3.0" +"@testing-library/react@npm:^13.4.0": + version: 13.4.0 + resolution: "@testing-library/react@npm:13.4.0" dependencies: "@babel/runtime": ^7.12.5 "@testing-library/dom": ^8.5.0 @@ -3447,7 +3470,7 @@ __metadata: peerDependencies: react: ^18.0.0 react-dom: ^18.0.0 - checksum: 98fd8616a7cae0ecfcbe97b5b3c5b91fbafccf449c04875395ccc0e3f0b139e53b3261b9536ec2169a5e2883a1be2098907209064061fe0c2ff21dfbc785dd40 + checksum: 51ec548c1fdb1271089a5c63e0908f0166f2c7fcd9cacd3108ebbe0ce64cb4351812d885892020dc37608418cfb15698514856502b3cab0e5cc58d6cc1bd4a3e languageName: node linkType: hard @@ -4182,24 +4205,24 @@ __metadata: languageName: node linkType: hard -"@unocss/astro@npm:0.45.14": - version: 0.45.14 - resolution: "@unocss/astro@npm:0.45.14" +"@unocss/astro@npm:0.45.15": + version: 0.45.15 + resolution: "@unocss/astro@npm:0.45.15" dependencies: - "@unocss/core": 0.45.14 - "@unocss/reset": 0.45.14 - "@unocss/vite": 0.45.14 - checksum: d11bbfdd20dae490b229200e9e6bbb85b73b9f4817548545fc932fe6795a99a3dd351ea577567a999e69c3be395d31b18e9a55671594c0395f8b15f5b2c5e5ea + "@unocss/core": 0.45.15 + "@unocss/reset": 0.45.15 + "@unocss/vite": 0.45.15 + checksum: 85c36e521b593c7e2177bfa57e9f6be3d4d1630eaf58f8b5261214e990c943b947b4fb4f2acfa9c979dfb38db038aa1ad8a067c2267797db776ec1c8cf09176e languageName: node linkType: hard -"@unocss/cli@npm:0.45.14, @unocss/cli@npm:^0.45.14": - version: 0.45.14 - resolution: "@unocss/cli@npm:0.45.14" +"@unocss/cli@npm:0.45.15, @unocss/cli@npm:^0.45.15": + version: 0.45.15 + resolution: "@unocss/cli@npm:0.45.15" dependencies: - "@unocss/config": 0.45.14 - "@unocss/core": 0.45.14 - "@unocss/preset-uno": 0.45.14 + "@unocss/config": 0.45.15 + "@unocss/core": 0.45.15 + "@unocss/preset-uno": 0.45.15 cac: ^6.7.12 chokidar: ^3.5.3 colorette: ^2.0.19 @@ -4209,181 +4232,181 @@ __metadata: perfect-debounce: ^0.1.3 bin: unocss: bin/unocss.mjs - checksum: be25873a1d06465dd2154d0fc7b04e61a63ac6d1d468ffbad70d1030fa5b138ce45773f612d095bf67edd025f42617548cc64cc729f6bdd6d45dc37ad788e817 + checksum: f85b9e809880125607b088bd193deec49432c2a8bdaeb59ba82293775dad34da553a97a666c3eb2678f775ca2924b4debf9ef1cdfc91ad2b36c7fa3246b684ee languageName: node linkType: hard -"@unocss/config@npm:0.45.14": - version: 0.45.14 - resolution: "@unocss/config@npm:0.45.14" +"@unocss/config@npm:0.45.15": + version: 0.45.15 + resolution: "@unocss/config@npm:0.45.15" dependencies: - "@unocss/core": 0.45.14 + "@unocss/core": 0.45.15 unconfig: ^0.3.5 - checksum: 1fb374e82d20668f67ad71825007624375832a3e982d6eee9c55a11eea4e2c5e1528b57a74935a03decc9d2054fc5b868eda742ce11466f32a5e64d67ef1e243 + checksum: 31eb5b70d80e277962ff37a14689775d872c47429cb6bb4d4ac5c6fdf54042e058a23e5ed17e8fd1e890e2008af4274445347a8de86ffe73082d9a09fedf5221 languageName: node linkType: hard -"@unocss/core@npm:0.45.14": - version: 0.45.14 - resolution: "@unocss/core@npm:0.45.14" - checksum: d4fcffeebead539f3131ab202c5064087523e65ec08f24a77a7926ba29c77677742d7a5518bfe33a92a9f3c220c68dd3be351b640b09a740cdb4671571dfe63e +"@unocss/core@npm:0.45.15": + version: 0.45.15 + resolution: "@unocss/core@npm:0.45.15" + checksum: a3a841696514c0f48d17354c79660c8dddd75b1fffdedddf0a3244b294b22d27a65be6f315d4b13aac0216eae9eed6569ae297273c8a84a31e563512a135f38b languageName: node linkType: hard -"@unocss/inspector@npm:0.45.14": - version: 0.45.14 - resolution: "@unocss/inspector@npm:0.45.14" +"@unocss/inspector@npm:0.45.15": + version: 0.45.15 + resolution: "@unocss/inspector@npm:0.45.15" dependencies: gzip-size: ^6.0.0 sirv: ^2.0.2 - checksum: 5baf9b138acf441e65f8b331431995568fb2fe18ea9086a3390bf99b9b49ae7420d39003a867b130532aab85bd8274e9131ffd0144014db88d1ba43441fc12d6 + checksum: d6bbe0762323c999159f0c778cb582be880ffdf520a5b9d068197726650fa91c6c460ad186d1a62408af69d52d0cc17c0b62e970b7b314b044bdc09872bea374 languageName: node linkType: hard -"@unocss/preset-attributify@npm:0.45.14": - version: 0.45.14 - resolution: "@unocss/preset-attributify@npm:0.45.14" +"@unocss/preset-attributify@npm:0.45.15": + version: 0.45.15 + resolution: "@unocss/preset-attributify@npm:0.45.15" dependencies: - "@unocss/core": 0.45.14 - checksum: a3300e5c0ac69a71d583163c135022eebf316a8ad0b9019380f70051e27361f779ef1934a2508495300c132a5b2fb8c6b45fc5ef4e55aff273e3e62a909e61cd + "@unocss/core": 0.45.15 + checksum: 62e1a564e928703bbc3c8bb336d0c67e836c149b11c11f16aadcacc538f16e251d3dfc0e757d0dae1c416a4c85177bc9e42ee982f569e3209e9a6dac331e93e0 languageName: node linkType: hard -"@unocss/preset-icons@npm:0.45.14": - version: 0.45.14 - resolution: "@unocss/preset-icons@npm:0.45.14" +"@unocss/preset-icons@npm:0.45.15": + version: 0.45.15 + resolution: "@unocss/preset-icons@npm:0.45.15" dependencies: "@iconify/utils": ^1.0.33 - "@unocss/core": 0.45.14 + "@unocss/core": 0.45.15 ohmyfetch: ^0.4.18 - checksum: 8af8f24e659d47fedc00b7c3cc74625ed388c9f61630468fffa9b5ead7b14fba0df078ebb347d2855fbaa061e3c2b14a328e5680c6e2a9af65049b6c64358f78 + checksum: b1c0918f510a0a40ab2f6725f54015576277d5ee6981cf5ff8923ffd1a1836ee21f762bba5926eaca504fa6c52b443e54fd27c008cb97c74830245f19be50578 languageName: node linkType: hard -"@unocss/preset-mini@npm:0.45.14": - version: 0.45.14 - resolution: "@unocss/preset-mini@npm:0.45.14" +"@unocss/preset-mini@npm:0.45.15": + version: 0.45.15 + resolution: "@unocss/preset-mini@npm:0.45.15" dependencies: - "@unocss/core": 0.45.14 - checksum: 159a3df87c377fbdfe2cb5e3c8acc5515ad320ce232a7f13fd85e2bf36e45d119c62659574ff920645379d4df29a9f58018356ca7194b8e0e593c98fbab7421f + "@unocss/core": 0.45.15 + checksum: 730b4f0657643f62db2e9c6360d3ffbaf021c04eb0ff2c6fe18a9b0bf0b8419fdf08ad08a1e5c9abb4d72feac0a773286f9371d426d34c1045dbe335de8577b6 languageName: node linkType: hard -"@unocss/preset-tagify@npm:0.45.14": - version: 0.45.14 - resolution: "@unocss/preset-tagify@npm:0.45.14" +"@unocss/preset-tagify@npm:0.45.15": + version: 0.45.15 + resolution: "@unocss/preset-tagify@npm:0.45.15" dependencies: - "@unocss/core": 0.45.14 - checksum: 958c0afc5b7b7187617abbf5895fdf2fd573c18d9c1d38db7b68f8b29adc95c4dc1edd86efce8ee4cef19af2c627bbbf6b731a33e83eb5e75fa6909ae4b058ea + "@unocss/core": 0.45.15 + checksum: 796f71b9836fc1435888bd35699d135e32e9a8495ed2968fef584755407fb57ff691c951d4e3f96b853a1a7893953962cc53fa1b38c85907439d0c878a7d6f58 languageName: node linkType: hard -"@unocss/preset-typography@npm:0.45.14": - version: 0.45.14 - resolution: "@unocss/preset-typography@npm:0.45.14" +"@unocss/preset-typography@npm:0.45.15": + version: 0.45.15 + resolution: "@unocss/preset-typography@npm:0.45.15" dependencies: - "@unocss/core": 0.45.14 - checksum: b43293cd89ddfa2f69bf8bbc23b8cb0b9a86b3433528210a002fdbf84dbe281ecf44e72ea0f856b3a09f1e58ef9767cfd84c833d1260c8eb9f5774b63507e9ae + "@unocss/core": 0.45.15 + checksum: bf7e4fbbc3b590b820cfebbab77dd993ccf04b4c68b393abd93694c050b560003041c2d9a4620535948163ed05e3a8ff55ecc09ad821466f6f3fec7cc8164912 languageName: node linkType: hard -"@unocss/preset-uno@npm:0.45.14": - version: 0.45.14 - resolution: "@unocss/preset-uno@npm:0.45.14" +"@unocss/preset-uno@npm:0.45.15": + version: 0.45.15 + resolution: "@unocss/preset-uno@npm:0.45.15" dependencies: - "@unocss/core": 0.45.14 - "@unocss/preset-mini": 0.45.14 - "@unocss/preset-wind": 0.45.14 - checksum: 8692581daf4d39265505010108b7a96e8a477f68521fcb88ff45bb2091330647d9ab180f5e16b35265738ad0907d266b073880a2b5c8e36e19ea9a5aab3fff07 + "@unocss/core": 0.45.15 + "@unocss/preset-mini": 0.45.15 + "@unocss/preset-wind": 0.45.15 + checksum: 41ec67d5f788520f98ccb179820514d82b090286566ac428036d25e978461c680bad9262cec367c2fe0824ad4a8d79e6b15392e52b196dd74bef87a5ea6114bc languageName: node linkType: hard -"@unocss/preset-web-fonts@npm:0.45.14, @unocss/preset-web-fonts@npm:^0.45.14": - version: 0.45.14 - resolution: "@unocss/preset-web-fonts@npm:0.45.14" +"@unocss/preset-web-fonts@npm:0.45.15, @unocss/preset-web-fonts@npm:^0.45.15": + version: 0.45.15 + resolution: "@unocss/preset-web-fonts@npm:0.45.15" dependencies: - "@unocss/core": 0.45.14 + "@unocss/core": 0.45.15 ohmyfetch: ^0.4.18 - checksum: fe0faa7ff148b726ca95bcaaca2f6ab8eb9cbafac90231906a1bfdaffb2b10ac359ca3e8966d0a0e892beee2cbf6fa9db0d82b69eac476e07b06fa04955414b4 + checksum: c2f41837eba61d0b00aa81510c87bd2d8ec5f3c05899ba009ce943c4437e3c164122bab141f0205cbdd7da38b4f452da634d7e2199613ebe32164f24009f0a25 languageName: node linkType: hard -"@unocss/preset-wind@npm:0.45.14": - version: 0.45.14 - resolution: "@unocss/preset-wind@npm:0.45.14" +"@unocss/preset-wind@npm:0.45.15": + version: 0.45.15 + resolution: "@unocss/preset-wind@npm:0.45.15" dependencies: - "@unocss/core": 0.45.14 - "@unocss/preset-mini": 0.45.14 - checksum: 67bc7e5abca9e459e4f4b9cb4ae3e0bd040f5ef7a4e5c902f8192fb694328de04798af083cc87385934ef2d34754c230f452c36c5e7f5b0f1f339cb967f6efaa + "@unocss/core": 0.45.15 + "@unocss/preset-mini": 0.45.15 + checksum: 28229ae2cac6d437e51a7f3c0116af764ba4f1e84cd7197a7bbfb9211c4ffb704e061226de01c8974f8cae0233217785f78cec6ba5638df3de8b1e25f2f83a6c languageName: node linkType: hard -"@unocss/reset@npm:0.45.14, @unocss/reset@npm:^0.45.14": - version: 0.45.14 - resolution: "@unocss/reset@npm:0.45.14" - checksum: 72c5e6335258afbeb4f78266829ae5546ecc8a4e8077103aaf4d5502fa8342472a1595cd3d757ace305a4beaea4d9f73ba9eea88c4850c9ba5220eea5c7d4364 +"@unocss/reset@npm:0.45.15, @unocss/reset@npm:^0.45.15": + version: 0.45.15 + resolution: "@unocss/reset@npm:0.45.15" + checksum: 8dcbbe1a44abea7ef592bc1be30c50fde79b60917b5451ac95e1ed2d0a593006340a9670808c4645dfb614e9dfad3629d0e81d7a665d65bf0c9acf587511d978 languageName: node linkType: hard -"@unocss/scope@npm:0.45.14": - version: 0.45.14 - resolution: "@unocss/scope@npm:0.45.14" - checksum: 829062dfe112b9cf6940db39b722f1e81597ac8bc1f94f63adfc761a456a2c525557e4270acd70b69bb13daba0020481436d65bd364374434cfcc9f360bcdac5 +"@unocss/scope@npm:0.45.15": + version: 0.45.15 + resolution: "@unocss/scope@npm:0.45.15" + checksum: e93199b80d44fc3dcc8add4844974ddc5de3429568ec803a2363b3e7e640f45fa5215c473c12d4a61b7a1b604d240a064b4d83d2137ef903880e4d00c4eb34de languageName: node linkType: hard -"@unocss/transformer-attributify-jsx@npm:0.45.14": - version: 0.45.14 - resolution: "@unocss/transformer-attributify-jsx@npm:0.45.14" +"@unocss/transformer-attributify-jsx@npm:0.45.15": + version: 0.45.15 + resolution: "@unocss/transformer-attributify-jsx@npm:0.45.15" dependencies: - "@unocss/core": 0.45.14 - checksum: 24a5258606d1430c014f6e0ab4227de9590414cf913c52c7964b845cedc6a06865d17ee21f0b884f98f4e9bbe8dd64de6493b0cf42692b02e1f25f3817d1df30 + "@unocss/core": 0.45.15 + checksum: c476fe42adc227518144cd154827fa4b643dfd5e09b4ef49ecdddfb99495dcf51eb3b843226968b03046bd33a2a8118908b25e9ff7c6151d2f68375734bb019a languageName: node linkType: hard -"@unocss/transformer-compile-class@npm:0.45.14": - version: 0.45.14 - resolution: "@unocss/transformer-compile-class@npm:0.45.14" +"@unocss/transformer-compile-class@npm:0.45.15": + version: 0.45.15 + resolution: "@unocss/transformer-compile-class@npm:0.45.15" dependencies: - "@unocss/core": 0.45.14 - checksum: 4f035e7691d2ab60de784edeb36de12e79fbd2db87f46803b54f524d032eb55b910be0a1265e78f371fe12c3cae9df05108696e782ff7ae268e29f03a0399b6e + "@unocss/core": 0.45.15 + checksum: ae8f234137aa6f87d06bd71b6b9f1d685b53ff32325a365683b7ef045ac57166a5317024d09855394dafecd6897b9ca2b4ad8f53f6a8d0e802cfd456b14b6eaa languageName: node linkType: hard -"@unocss/transformer-directives@npm:0.45.14": - version: 0.45.14 - resolution: "@unocss/transformer-directives@npm:0.45.14" +"@unocss/transformer-directives@npm:0.45.15": + version: 0.45.15 + resolution: "@unocss/transformer-directives@npm:0.45.15" dependencies: - "@unocss/core": 0.45.14 + "@unocss/core": 0.45.15 css-tree: ^2.2.1 - checksum: ae4f2f7c614ba173a088fc738d785f8fa9eeed24874dcc0ff929e0a31e30ab4e556dc77af85325b55eb5a78d5ae10b3c68e45eb9212558dae1f57a26d862f6d0 + checksum: 3e4d6d3b2a04d57243925167bb8dcf12ec1f67718ada0bd9e1ed382d1e35c1a0e3828eff913f7dbd1ffe1faa6d27294f6a92de1266634019e162ab9b5092b002 languageName: node linkType: hard -"@unocss/transformer-variant-group@npm:0.45.14": - version: 0.45.14 - resolution: "@unocss/transformer-variant-group@npm:0.45.14" +"@unocss/transformer-variant-group@npm:0.45.15": + version: 0.45.15 + resolution: "@unocss/transformer-variant-group@npm:0.45.15" dependencies: - "@unocss/core": 0.45.14 - checksum: 2ba168e2b4365eba49659b3919021dc3689452196dbab75d7e4c6cefc4130ff292c1d2829205f536b9c55f588509ceec88951ab326fa5dc47866beb014dd9995 + "@unocss/core": 0.45.15 + checksum: b54c35b192d2cebd5be65964a2dbe512000052853614a51fca9830d353fb554edfed352c82ac3cbfaf355719613488156647d4a40a1053c4ada00fe0fb0cf6ab languageName: node linkType: hard -"@unocss/vite@npm:0.45.14": - version: 0.45.14 - resolution: "@unocss/vite@npm:0.45.14" +"@unocss/vite@npm:0.45.15": + version: 0.45.15 + resolution: "@unocss/vite@npm:0.45.15" dependencies: "@ampproject/remapping": ^2.2.0 "@rollup/pluginutils": ^4.2.1 - "@unocss/config": 0.45.14 - "@unocss/core": 0.45.14 - "@unocss/inspector": 0.45.14 - "@unocss/scope": 0.45.14 - "@unocss/transformer-directives": 0.45.14 + "@unocss/config": 0.45.15 + "@unocss/core": 0.45.15 + "@unocss/inspector": 0.45.15 + "@unocss/scope": 0.45.15 + "@unocss/transformer-directives": 0.45.15 magic-string: ^0.26.2 peerDependencies: vite: ^2.9.0 || ^3.0.0-0 - checksum: b1eb25d372a1893d828b0e2421743ae56b4419e2ca7e8208f9fbd408a2da42b0a06656d546d51dd1d729a0d40bb22d41e8b29450f9dd058608ebf2828a51490f + checksum: 99b88f122c6b5b979b7d870e378302218cbd5dd882029b3e16255aa89feafe45e1284959acbee67d307bf703dfc02d815c51f0a229b6a476838dd3f6d056d1f8 languageName: node linkType: hard @@ -4544,13 +4567,13 @@ __metadata: languageName: node linkType: hard -"@vitest/coverage-c8@npm:^0.22.1": - version: 0.22.1 - resolution: "@vitest/coverage-c8@npm:0.22.1" +"@vitest/coverage-c8@npm:^0.23.0": + version: 0.23.0 + resolution: "@vitest/coverage-c8@npm:0.23.0" dependencies: c8: ^7.12.0 - vitest: 0.22.1 - checksum: 141c10127a556ff32e43c6d92a468d800d7c62c767feef1a4123e204a07b58456b410efdba720fa3035639903098dc12767602aa7dabadd40e2d60abc0b008f1 + vitest: 0.23.0 + checksum: dfe9c55876c6570ef3da2e4764c3c5168f0551f7399f3c1973c214210fc6ab4c4efadc29cd688abd6ffb2154870bf5abf5c7adbe52ce49d4388bdafedb31602e languageName: node linkType: hard @@ -4603,7 +4626,7 @@ __metadata: languageName: node linkType: hard -"acorn@npm:^8.0.0, acorn@npm:^8.4.1, acorn@npm:^8.6.0, acorn@npm:^8.8.0": +"acorn@npm:^8.0.0, acorn@npm:^8.4.1, acorn@npm:^8.6.0, acorn@npm:^8.7.1, acorn@npm:^8.8.0": version: 8.8.0 resolution: "acorn@npm:8.8.0" bin: @@ -5125,20 +5148,20 @@ __metadata: languageName: node linkType: hard -"babel-jest@npm:^29.0.1": - version: 29.0.1 - resolution: "babel-jest@npm:29.0.1" +"babel-jest@npm:^29.0.2": + version: 29.0.2 + resolution: "babel-jest@npm:29.0.2" dependencies: - "@jest/transform": ^29.0.1 + "@jest/transform": ^29.0.2 "@types/babel__core": ^7.1.14 babel-plugin-istanbul: ^6.1.1 - babel-preset-jest: ^29.0.0 + babel-preset-jest: ^29.0.2 chalk: ^4.0.0 graceful-fs: ^4.2.9 slash: ^3.0.0 peerDependencies: "@babel/core": ^7.8.0 - checksum: 8aa919a981eb8129e16d802e5fd19674fdf4a6bacf11ce2360ebff2fa3aad013e8b14afa3ab247ebea26e4b64cad131036e42310fd9022ffc6a081fc7378914f + checksum: 33bd0b002237b1d015ee015b16f659660bf80880409b190c0e78132e7cc2a4b3443805ced9c40690d613ba425d18b4f241ffe406ed6878d4394b68e01519ede8 languageName: node linkType: hard @@ -5164,15 +5187,15 @@ __metadata: languageName: node linkType: hard -"babel-plugin-jest-hoist@npm:^29.0.0": - version: 29.0.0 - resolution: "babel-plugin-jest-hoist@npm:29.0.0" +"babel-plugin-jest-hoist@npm:^29.0.2": + version: 29.0.2 + resolution: "babel-plugin-jest-hoist@npm:29.0.2" dependencies: "@babel/template": ^7.3.3 "@babel/types": ^7.3.3 "@types/babel__core": ^7.1.14 "@types/babel__traverse": ^7.0.6 - checksum: e6f4c0821369bfb7e24e9cb7f62457dad9a38060a29c55775cfd6b99a0f21746b7b762eefab63544b3e7d807c135505253c50e931bf64a1875b5c64bea56e60b + checksum: e02ab2c56b471940bc147d75808f6fb5d18b81382088beb36088d2fee8c5f9699b2a814a98884539191d43871d66770928e09c268c095ec39aad5766c3337f34 languageName: node linkType: hard @@ -5245,15 +5268,15 @@ __metadata: languageName: node linkType: hard -"babel-preset-jest@npm:^29.0.0": - version: 29.0.0 - resolution: "babel-preset-jest@npm:29.0.0" +"babel-preset-jest@npm:^29.0.2": + version: 29.0.2 + resolution: "babel-preset-jest@npm:29.0.2" dependencies: - babel-plugin-jest-hoist: ^29.0.0 + babel-plugin-jest-hoist: ^29.0.2 babel-preset-current-node-syntax: ^1.0.0 peerDependencies: "@babel/core": ^7.0.0 - checksum: b93b4c5a801527246a34ef847764e462ad4789893190cbefc3c42df972cdd057d0e50910650503d1051b3503dc89b9c2d06488c6d57e11fddcaac96cf3f7818a + checksum: 485db525f4cd38c02c29edcd7240dd232e8d6dbcaef88bfa4765ad3057ed733512f1b7aad06f4bf9661afefeb0ada2c4e259d130113b0289d7db574f82bbd4f8 languageName: node linkType: hard @@ -6914,7 +6937,7 @@ __metadata: dtslint: ^4.2.1 eslint: ^8.23.0 fast-deep-equal: ^3.1.3 - jest: ^29.0.1 + jest: ^29.0.2 lodash.snakecase: ^4.1.1 prettier: ^2.7.1 tsd: ^0.23.0 @@ -7957,9 +7980,9 @@ __metadata: languageName: node linkType: hard -"eslint-config-neon@npm:^0.1.31": - version: 0.1.31 - resolution: "eslint-config-neon@npm:0.1.31" +"eslint-config-neon@npm:^0.1.33": + version: 0.1.33 + resolution: "eslint-config-neon@npm:0.1.33" dependencies: "@angular-eslint/eslint-plugin": ^14.0.3 "@angular-eslint/eslint-plugin-template": ^14.0.3 @@ -7989,7 +8012,7 @@ __metadata: eslint-plugin-unicorn: ^43.0.2 eslint-plugin-vue: ^9.4.0 vue-eslint-parser: ^9.0.3 - checksum: 03a566536896d8dca404755107407c7c19f7263c18a3906812fd465acebbbf449ac43d90af8f3c17961c69688ede901da9409a76c93caa6d0ec9dd2ba0ca4698 + checksum: 304a6fcf7dbb052cb5bc8e461f948baf05a1a67075fc7c52d85fb8830ec267b2d8391de0755b157306ba7dd8bbd111ef8b64e77a3aa2638655a1b0d88ecb5cea languageName: node linkType: hard @@ -8668,7 +8691,7 @@ __metadata: languageName: node linkType: hard -"expect@npm:^29.0.0, expect@npm:^29.0.1": +"expect@npm:^29.0.0": version: 29.0.1 resolution: "expect@npm:29.0.1" dependencies: @@ -8681,6 +8704,19 @@ __metadata: languageName: node linkType: hard +"expect@npm:^29.0.2": + version: 29.0.2 + resolution: "expect@npm:29.0.2" + dependencies: + "@jest/expect-utils": ^29.0.2 + jest-get-type: ^29.0.0 + jest-matcher-utils: ^29.0.2 + jest-message-util: ^29.0.2 + jest-util: ^29.0.2 + checksum: 1e2a3707cd27c3485cb2ed0f1793cfca9efa67ec1e18ca3dc36c5d09e7219ba05e948d3e91bdaa01cc2f8cf1def5711ca0e484ba665e755f9d0aeba4884eab83 + languageName: node + linkType: hard + "extend@npm:^3.0.0, extend@npm:~3.0.2": version: 3.0.2 resolution: "extend@npm:3.0.2" @@ -10653,47 +10689,47 @@ __metadata: languageName: node linkType: hard -"jest-circus@npm:^29.0.1": - version: 29.0.1 - resolution: "jest-circus@npm:29.0.1" +"jest-circus@npm:^29.0.2": + version: 29.0.2 + resolution: "jest-circus@npm:29.0.2" dependencies: - "@jest/environment": ^29.0.1 - "@jest/expect": ^29.0.1 - "@jest/test-result": ^29.0.1 - "@jest/types": ^29.0.1 + "@jest/environment": ^29.0.2 + "@jest/expect": ^29.0.2 + "@jest/test-result": ^29.0.2 + "@jest/types": ^29.0.2 "@types/node": "*" chalk: ^4.0.0 co: ^4.6.0 dedent: ^0.7.0 is-generator-fn: ^2.0.0 - jest-each: ^29.0.1 - jest-matcher-utils: ^29.0.1 - jest-message-util: ^29.0.1 - jest-runtime: ^29.0.1 - jest-snapshot: ^29.0.1 - jest-util: ^29.0.1 + jest-each: ^29.0.2 + jest-matcher-utils: ^29.0.2 + jest-message-util: ^29.0.2 + jest-runtime: ^29.0.2 + jest-snapshot: ^29.0.2 + jest-util: ^29.0.2 p-limit: ^3.1.0 - pretty-format: ^29.0.1 + pretty-format: ^29.0.2 slash: ^3.0.0 stack-utils: ^2.0.3 - checksum: 9cdb10b8def60ee9419f7efdba22dc94544d3e150d0d3350c8085bc1dc9330abb586a8d2bd840915198a11064704c2cf22902ecfbe97c698b896c5a9dafa345e + checksum: 334a74c067a8d42eb37f059a5279c58a2d10134530e4996c4d87d8bc7849bd1a141f683b6599735eac8fe30bee3ad18f2233881d0bf2363282a9f596c9f9abab languageName: node linkType: hard -"jest-cli@npm:^29.0.1": - version: 29.0.1 - resolution: "jest-cli@npm:29.0.1" +"jest-cli@npm:^29.0.2": + version: 29.0.2 + resolution: "jest-cli@npm:29.0.2" dependencies: - "@jest/core": ^29.0.1 - "@jest/test-result": ^29.0.1 - "@jest/types": ^29.0.1 + "@jest/core": ^29.0.2 + "@jest/test-result": ^29.0.2 + "@jest/types": ^29.0.2 chalk: ^4.0.0 exit: ^0.1.2 graceful-fs: ^4.2.9 import-local: ^3.0.2 - jest-config: ^29.0.1 - jest-util: ^29.0.1 - jest-validate: ^29.0.1 + jest-config: ^29.0.2 + jest-util: ^29.0.2 + jest-validate: ^29.0.2 prompts: ^2.0.1 yargs: ^17.3.1 peerDependencies: @@ -10703,34 +10739,34 @@ __metadata: optional: true bin: jest: bin/jest.js - checksum: 5bd9c5fa6f58d7ca686391edb44fcc8a5f161f698ce8bad6cc8a9ee8e0d355d870ef8db26a49559fa1229518bc90926d83a6da1509a004f9a2ed618177516fb4 + checksum: 765ca44584279d5ee6fe053ed39a298f6b48d98732e80657081e8ca086927ad5c6fb3ac15a878a2929e100982f3c1bffaf02e3f5966bf41167822fc3954b64bc languageName: node linkType: hard -"jest-config@npm:^29.0.1": - version: 29.0.1 - resolution: "jest-config@npm:29.0.1" +"jest-config@npm:^29.0.2": + version: 29.0.2 + resolution: "jest-config@npm:29.0.2" dependencies: "@babel/core": ^7.11.6 - "@jest/test-sequencer": ^29.0.1 - "@jest/types": ^29.0.1 - babel-jest: ^29.0.1 + "@jest/test-sequencer": ^29.0.2 + "@jest/types": ^29.0.2 + babel-jest: ^29.0.2 chalk: ^4.0.0 ci-info: ^3.2.0 deepmerge: ^4.2.2 glob: ^7.1.3 graceful-fs: ^4.2.9 - jest-circus: ^29.0.1 - jest-environment-node: ^29.0.1 + jest-circus: ^29.0.2 + jest-environment-node: ^29.0.2 jest-get-type: ^29.0.0 jest-regex-util: ^29.0.0 - jest-resolve: ^29.0.1 - jest-runner: ^29.0.1 - jest-util: ^29.0.1 - jest-validate: ^29.0.1 + jest-resolve: ^29.0.2 + jest-runner: ^29.0.2 + jest-util: ^29.0.2 + jest-validate: ^29.0.2 micromatch: ^4.0.4 parse-json: ^5.2.0 - pretty-format: ^29.0.1 + pretty-format: ^29.0.2 slash: ^3.0.0 strip-json-comments: ^3.1.1 peerDependencies: @@ -10741,7 +10777,7 @@ __metadata: optional: true ts-node: optional: true - checksum: 2660a91907838a1fb1eebcb3983f4968d973f8ad66e8ccecfc1eae6bfbd3b5d4db937e04b8dd57b969126b19a008d96d26d68d5307a1ea55bbc79adbf968524a + checksum: 899a5d2996f9e6b3520dcae49283b85bbddb65dcdf3f08fa97dc8da6b2be410531519e53be825185904eae6960d7055f8082d02485fa1dbb5c3781ebfcfda938 languageName: node linkType: hard @@ -10769,6 +10805,18 @@ __metadata: languageName: node linkType: hard +"jest-diff@npm:^29.0.2": + version: 29.0.2 + resolution: "jest-diff@npm:29.0.2" + dependencies: + chalk: ^4.0.0 + diff-sequences: ^29.0.0 + jest-get-type: ^29.0.0 + pretty-format: ^29.0.2 + checksum: fbf4f4a2502b4a5b46233fbcd77cc664de452d1612ebad670c3a4d1920985b16abdef3ebe7ce692efc3c7da8312f1b7253a4bb9027e98db1fb3c92cd53324aa9 + languageName: node + linkType: hard + "jest-docblock@npm:^29.0.0": version: 29.0.0 resolution: "jest-docblock@npm:29.0.0" @@ -10778,30 +10826,30 @@ __metadata: languageName: node linkType: hard -"jest-each@npm:^29.0.1": - version: 29.0.1 - resolution: "jest-each@npm:29.0.1" +"jest-each@npm:^29.0.2": + version: 29.0.2 + resolution: "jest-each@npm:29.0.2" dependencies: - "@jest/types": ^29.0.1 + "@jest/types": ^29.0.2 chalk: ^4.0.0 jest-get-type: ^29.0.0 - jest-util: ^29.0.1 - pretty-format: ^29.0.1 - checksum: 522ccc7dde6df3f979ab62145998780b6103086ac05dc512554a11095b6927d1246d177e3081b32f3b0030d87114ac85eb6ada7a42473c1ba1e3b7826ef60015 + jest-util: ^29.0.2 + pretty-format: ^29.0.2 + checksum: e64222fd050cbb057a8043c2546615f7ed0da22c59f54da0762e717b72489c686bf0f3be43973d74e50f0245dd4d39dcdb86b3553335fbe70e9684f73f3cf99d languageName: node linkType: hard -"jest-environment-node@npm:^29.0.1": - version: 29.0.1 - resolution: "jest-environment-node@npm:29.0.1" +"jest-environment-node@npm:^29.0.2": + version: 29.0.2 + resolution: "jest-environment-node@npm:29.0.2" dependencies: - "@jest/environment": ^29.0.1 - "@jest/fake-timers": ^29.0.1 - "@jest/types": ^29.0.1 + "@jest/environment": ^29.0.2 + "@jest/fake-timers": ^29.0.2 + "@jest/types": ^29.0.2 "@types/node": "*" - jest-mock: ^29.0.1 - jest-util: ^29.0.1 - checksum: a7e47ae14471e6c3a1de611fe67e1810c8ea7fe288282b6c084058de8d2b825017a2393bed689a6c0ac8abafd3ac00e3c48b5ccdadc5be7d577b1ec68f51aac3 + jest-mock: ^29.0.2 + jest-util: ^29.0.2 + checksum: 7c95aa56b9b24e859e03e0625f55e2b44c99629c7a18762681066c0a837e176405cd9bb81353b32838e2f70f4620259b2cbfb49cda36bdd1276e58e4fb384386 languageName: node linkType: hard @@ -10819,11 +10867,11 @@ __metadata: languageName: node linkType: hard -"jest-haste-map@npm:^29.0.1": - version: 29.0.1 - resolution: "jest-haste-map@npm:29.0.1" +"jest-haste-map@npm:^29.0.2": + version: 29.0.2 + resolution: "jest-haste-map@npm:29.0.2" dependencies: - "@jest/types": ^29.0.1 + "@jest/types": ^29.0.2 "@types/graceful-fs": ^4.1.3 "@types/node": "*" anymatch: ^3.0.3 @@ -10831,24 +10879,24 @@ __metadata: fsevents: ^2.3.2 graceful-fs: ^4.2.9 jest-regex-util: ^29.0.0 - jest-util: ^29.0.1 - jest-worker: ^29.0.1 + jest-util: ^29.0.2 + jest-worker: ^29.0.2 micromatch: ^4.0.4 walker: ^1.0.8 dependenciesMeta: fsevents: optional: true - checksum: fd3835bad2d4fd78768a868f801bb0eb47e22e1b4cf4098ae22edba01d3e1ac5bdf9ff795284f70bc4a307cd5b763eb427ee3a3da17f04a29f052309e4e57f78 + checksum: 57798a6840b08a44b0b4bcc679aa0f65f8498426ecaf68116d9e7bd7973ebf36acccaed4da23a3324f1423f2aa51fab81734bdacb889b2db26daca10b48351a1 languageName: node linkType: hard -"jest-leak-detector@npm:^29.0.1": - version: 29.0.1 - resolution: "jest-leak-detector@npm:29.0.1" +"jest-leak-detector@npm:^29.0.2": + version: 29.0.2 + resolution: "jest-leak-detector@npm:29.0.2" dependencies: jest-get-type: ^29.0.0 - pretty-format: ^29.0.1 - checksum: 57cbe9d1cc4c56029c323f7c9cebf841a28265fc4edab1fe4f7ba48941e2bd1a65b3fd2c530ec8d7a2ad71b97a002e2cd88bb7751de82abe001262a1ae27c9e8 + pretty-format: ^29.0.2 + checksum: bc10d75bc6dccf82f47d1d77bb90875726327aff1b3a9a095f063d84be550cb401a287d58effd363b934ecc3ad8f2e555cad476e5435fef13dc82fee2e1367b6 languageName: node linkType: hard @@ -10864,6 +10912,18 @@ __metadata: languageName: node linkType: hard +"jest-matcher-utils@npm:^29.0.2": + version: 29.0.2 + resolution: "jest-matcher-utils@npm:29.0.2" + dependencies: + chalk: ^4.0.0 + jest-diff: ^29.0.2 + jest-get-type: ^29.0.0 + pretty-format: ^29.0.2 + checksum: bc266a28e4d0035ae6e3c8e494056cf8253a128b93447114b7fdb9d311520a999bc83e6f6d445f3b57f67236af99e916dca9acbfb0a93f437b89ec586f711a0d + languageName: node + linkType: hard + "jest-message-util@npm:^29.0.1": version: 29.0.1 resolution: "jest-message-util@npm:29.0.1" @@ -10881,13 +10941,30 @@ __metadata: languageName: node linkType: hard -"jest-mock@npm:^29.0.1": - version: 29.0.1 - resolution: "jest-mock@npm:29.0.1" +"jest-message-util@npm:^29.0.2": + version: 29.0.2 + resolution: "jest-message-util@npm:29.0.2" dependencies: - "@jest/types": ^29.0.1 + "@babel/code-frame": ^7.12.13 + "@jest/types": ^29.0.2 + "@types/stack-utils": ^2.0.0 + chalk: ^4.0.0 + graceful-fs: ^4.2.9 + micromatch: ^4.0.4 + pretty-format: ^29.0.2 + slash: ^3.0.0 + stack-utils: ^2.0.3 + checksum: f75215e1a022b3063bbe5757db5c87d3dc0c0cc43a5afcfbb15f137872d51aa98e4238c0c77302ef1e2296701660e338510e644abde2d0e3ae42f62d4bad7abd + languageName: node + linkType: hard + +"jest-mock@npm:^29.0.2": + version: 29.0.2 + resolution: "jest-mock@npm:29.0.2" + dependencies: + "@jest/types": ^29.0.2 "@types/node": "*" - checksum: a81974c381112f4316e0e9491936b0a11d283959f7bb238ce8b99bb38d243828fedfa084d3cefc7a7e2f4d7fd3ac546a556085d5f17262b1667e2ca348c0ccd6 + checksum: e4d2fe7e254fbb0dfa4f0b9278a9dba3db3c928bdfaf1c05dcb5afb8cacbb31070df896c643c9215a43bf0837181c5d1fd523af6ed3bf637ef225aaa5e6205a4 languageName: node linkType: hard @@ -10910,95 +10987,95 @@ __metadata: languageName: node linkType: hard -"jest-resolve-dependencies@npm:^29.0.1": - version: 29.0.1 - resolution: "jest-resolve-dependencies@npm:29.0.1" +"jest-resolve-dependencies@npm:^29.0.2": + version: 29.0.2 + resolution: "jest-resolve-dependencies@npm:29.0.2" dependencies: jest-regex-util: ^29.0.0 - jest-snapshot: ^29.0.1 - checksum: e8d16137def352324f0b57195be484cd139d8d7eab67bc7d23633a61210c19cd396d18be8bf5a2d6fe269e3a70661fd6cad792a401b4609363375787a991bbe9 + jest-snapshot: ^29.0.2 + checksum: 98107bd4fc651a5ff80531e44aa49f9c5216e5ed46ebb568ffcd2e2f8632d05f4678ce09fbce6ab2a71df3c240f5022d826092ee5840f000946f072c8a83aa3c languageName: node linkType: hard -"jest-resolve@npm:^29.0.1": - version: 29.0.1 - resolution: "jest-resolve@npm:29.0.1" +"jest-resolve@npm:^29.0.2": + version: 29.0.2 + resolution: "jest-resolve@npm:29.0.2" dependencies: chalk: ^4.0.0 graceful-fs: ^4.2.9 - jest-haste-map: ^29.0.1 + jest-haste-map: ^29.0.2 jest-pnp-resolver: ^1.2.2 - jest-util: ^29.0.1 - jest-validate: ^29.0.1 + jest-util: ^29.0.2 + jest-validate: ^29.0.2 resolve: ^1.20.0 resolve.exports: ^1.1.0 slash: ^3.0.0 - checksum: f6716177c430ea4a073accc4e72d4f55f9d12804e789e10363946b9db89ffd12104b18541c7c468340a85a5dc4226d2538fb70e79f4be6b0761aed3d7315b5c9 + checksum: 857a79b1c4e8d6ddca54f318d2612a8cae528f6749e8e612e7b1e1213482a5abd0b89551c842f5193b3cf06544fc67535a533f07295eb69d6991bf6cf8d58423 languageName: node linkType: hard -"jest-runner@npm:^29.0.1": - version: 29.0.1 - resolution: "jest-runner@npm:29.0.1" +"jest-runner@npm:^29.0.2": + version: 29.0.2 + resolution: "jest-runner@npm:29.0.2" dependencies: - "@jest/console": ^29.0.1 - "@jest/environment": ^29.0.1 - "@jest/test-result": ^29.0.1 - "@jest/transform": ^29.0.1 - "@jest/types": ^29.0.1 + "@jest/console": ^29.0.2 + "@jest/environment": ^29.0.2 + "@jest/test-result": ^29.0.2 + "@jest/transform": ^29.0.2 + "@jest/types": ^29.0.2 "@types/node": "*" chalk: ^4.0.0 emittery: ^0.10.2 graceful-fs: ^4.2.9 jest-docblock: ^29.0.0 - jest-environment-node: ^29.0.1 - jest-haste-map: ^29.0.1 - jest-leak-detector: ^29.0.1 - jest-message-util: ^29.0.1 - jest-resolve: ^29.0.1 - jest-runtime: ^29.0.1 - jest-util: ^29.0.1 - jest-watcher: ^29.0.1 - jest-worker: ^29.0.1 + jest-environment-node: ^29.0.2 + jest-haste-map: ^29.0.2 + jest-leak-detector: ^29.0.2 + jest-message-util: ^29.0.2 + jest-resolve: ^29.0.2 + jest-runtime: ^29.0.2 + jest-util: ^29.0.2 + jest-watcher: ^29.0.2 + jest-worker: ^29.0.2 p-limit: ^3.1.0 source-map-support: 0.5.13 - checksum: 1b8933732c8fe897de193068155db86e70ff0795ab406a2294469f98fa3d902d0fd517add61c6116abc3e507304a0bbfbfe58271642a26d15211d2f6d8d8fa8d + checksum: e1a74ef52156b4ce41119db4467df868a4bcba467f2a2fa1e0a8cf63866ccb1e5f49341c7e12bb4f3f6a06d5e0ae0f359649f295cf6b6a19b70e41ee314278d4 languageName: node linkType: hard -"jest-runtime@npm:^29.0.1": - version: 29.0.1 - resolution: "jest-runtime@npm:29.0.1" +"jest-runtime@npm:^29.0.2": + version: 29.0.2 + resolution: "jest-runtime@npm:29.0.2" dependencies: - "@jest/environment": ^29.0.1 - "@jest/fake-timers": ^29.0.1 - "@jest/globals": ^29.0.1 + "@jest/environment": ^29.0.2 + "@jest/fake-timers": ^29.0.2 + "@jest/globals": ^29.0.2 "@jest/source-map": ^29.0.0 - "@jest/test-result": ^29.0.1 - "@jest/transform": ^29.0.1 - "@jest/types": ^29.0.1 + "@jest/test-result": ^29.0.2 + "@jest/transform": ^29.0.2 + "@jest/types": ^29.0.2 "@types/node": "*" chalk: ^4.0.0 cjs-module-lexer: ^1.0.0 collect-v8-coverage: ^1.0.0 glob: ^7.1.3 graceful-fs: ^4.2.9 - jest-haste-map: ^29.0.1 - jest-message-util: ^29.0.1 - jest-mock: ^29.0.1 + jest-haste-map: ^29.0.2 + jest-message-util: ^29.0.2 + jest-mock: ^29.0.2 jest-regex-util: ^29.0.0 - jest-resolve: ^29.0.1 - jest-snapshot: ^29.0.1 - jest-util: ^29.0.1 + jest-resolve: ^29.0.2 + jest-snapshot: ^29.0.2 + jest-util: ^29.0.2 slash: ^3.0.0 strip-bom: ^4.0.0 - checksum: a5e87370aefc489ae4294c88e633d0dcfd69197c4f5f7a2d68e447bcdfcae3bf220527dddd85832279e3f68548f429219609cbe29c406a744f75ed70487ae8b6 + checksum: 0b0a1a23ae2b2ca9e1b4dacd45bc2ae66fb47dd0e5cbea275398e0eb6b892c784546011fad59bd7572998b1b1442cff30bdbe9e02493c1bbc5d6be01cec1c5f8 languageName: node linkType: hard -"jest-snapshot@npm:^29.0.1": - version: 29.0.1 - resolution: "jest-snapshot@npm:29.0.1" +"jest-snapshot@npm:^29.0.2": + version: 29.0.2 + resolution: "jest-snapshot@npm:29.0.2" dependencies: "@babel/core": ^7.11.6 "@babel/generator": ^7.7.2 @@ -11006,25 +11083,25 @@ __metadata: "@babel/plugin-syntax-typescript": ^7.7.2 "@babel/traverse": ^7.7.2 "@babel/types": ^7.3.3 - "@jest/expect-utils": ^29.0.1 - "@jest/transform": ^29.0.1 - "@jest/types": ^29.0.1 + "@jest/expect-utils": ^29.0.2 + "@jest/transform": ^29.0.2 + "@jest/types": ^29.0.2 "@types/babel__traverse": ^7.0.6 "@types/prettier": ^2.1.5 babel-preset-current-node-syntax: ^1.0.0 chalk: ^4.0.0 - expect: ^29.0.1 + expect: ^29.0.2 graceful-fs: ^4.2.9 - jest-diff: ^29.0.1 + jest-diff: ^29.0.2 jest-get-type: ^29.0.0 - jest-haste-map: ^29.0.1 - jest-matcher-utils: ^29.0.1 - jest-message-util: ^29.0.1 - jest-util: ^29.0.1 + jest-haste-map: ^29.0.2 + jest-matcher-utils: ^29.0.2 + jest-message-util: ^29.0.2 + jest-util: ^29.0.2 natural-compare: ^1.4.0 - pretty-format: ^29.0.1 + pretty-format: ^29.0.2 semver: ^7.3.5 - checksum: 838bd4b322622f5f0f6956f1a9a77dab6f4aa6e864e9144b21a37caa6bf2ed9ca1e16a89c7dd3a1eecd6ce754c351781e8ff16edddc2c72f9876f3b02cf873df + checksum: a5cc84626b36b3cd649c11fac96f81dcc9f1b24b7969418d1a8c7c3ce792a90cc013e6077b38daf807de1f37b2eee8223c390f7c7a34517935896807f3b9529b languageName: node linkType: hard @@ -11042,33 +11119,47 @@ __metadata: languageName: node linkType: hard -"jest-validate@npm:^29.0.1": - version: 29.0.1 - resolution: "jest-validate@npm:29.0.1" +"jest-util@npm:^29.0.2": + version: 29.0.2 + resolution: "jest-util@npm:29.0.2" dependencies: - "@jest/types": ^29.0.1 + "@jest/types": ^29.0.2 + "@types/node": "*" + chalk: ^4.0.0 + ci-info: ^3.2.0 + graceful-fs: ^4.2.9 + picomatch: ^2.2.3 + checksum: ee7a264ac9968f5c2fc6d79b7b76c8df4b22762e3c45c92a35e66e81b9fb45c341b03e5e18d8c4de4cd19ab7faf70a67ec419e6b57b5dfc61b84e96719649838 + languageName: node + linkType: hard + +"jest-validate@npm:^29.0.2": + version: 29.0.2 + resolution: "jest-validate@npm:29.0.2" + dependencies: + "@jest/types": ^29.0.2 camelcase: ^6.2.0 chalk: ^4.0.0 jest-get-type: ^29.0.0 leven: ^3.1.0 - pretty-format: ^29.0.1 - checksum: a78523cc57ee26d5a4eec8a1b185dc63dc954172560b44321c979836ba7f699ba20d282359ac54b1c57811b87a626aae362b687ff8ff3d22f3e73b65dbbd57b4 + pretty-format: ^29.0.2 + checksum: 6d33bee7209aa735257e26b2eb887f3fd8fc4c6a072e52e97c3a51d4a90797e657dbe88a4df6de717aae3509e9979398f3b2ab2d7be5b26c30eaaa0dd0783b46 languageName: node linkType: hard -"jest-watcher@npm:^29.0.1": - version: 29.0.1 - resolution: "jest-watcher@npm:29.0.1" +"jest-watcher@npm:^29.0.2": + version: 29.0.2 + resolution: "jest-watcher@npm:29.0.2" dependencies: - "@jest/test-result": ^29.0.1 - "@jest/types": ^29.0.1 + "@jest/test-result": ^29.0.2 + "@jest/types": ^29.0.2 "@types/node": "*" ansi-escapes: ^4.2.1 chalk: ^4.0.0 emittery: ^0.10.2 - jest-util: ^29.0.1 + jest-util: ^29.0.2 string-length: ^4.0.1 - checksum: e5e188d35db7253813600fb7b229738e4fe306f1afdf74bfe66b0c4db111fdea70fa1b2d078443119558fd8f84677a78bd1fd65367ff88f263773a24d49e277c + checksum: 3e2c02e545facffbe8e0b845e8e6d21db893aa9ed706d6ce9673553c86757dbb8aec5cbe37fb2e17599d0165b08f471fe9194d906d4251c1729e5edb4f45af9a languageName: node linkType: hard @@ -11082,25 +11173,25 @@ __metadata: languageName: node linkType: hard -"jest-worker@npm:^29.0.1": - version: 29.0.1 - resolution: "jest-worker@npm:29.0.1" +"jest-worker@npm:^29.0.2": + version: 29.0.2 + resolution: "jest-worker@npm:29.0.2" dependencies: "@types/node": "*" merge-stream: ^2.0.0 supports-color: ^8.0.0 - checksum: f246b3b326ea3bca0f2f7023601ea74db9e51c1ae5801a0ff9a27f0044298db1579c09dbe27ea2accd2fa0bb295958bae8c5c6af4fa512082425b69a1b8730ee + checksum: e67fd41a25208235e27af4ad6d4b6d7a3f4eac45e4a27ba60f6c9a5ca85e0367bfcfb54d1425710b11b5a8342cf64ab8745e02a94dca106ff6d20144e9e6e175 languageName: node linkType: hard -"jest@npm:^29.0.1": - version: 29.0.1 - resolution: "jest@npm:29.0.1" +"jest@npm:^29.0.2": + version: 29.0.2 + resolution: "jest@npm:29.0.2" dependencies: - "@jest/core": ^29.0.1 - "@jest/types": ^29.0.1 + "@jest/core": ^29.0.2 + "@jest/types": ^29.0.2 import-local: ^3.0.2 - jest-cli: ^29.0.1 + jest-cli: ^29.0.2 peerDependencies: node-notifier: ^8.0.1 || ^9.0.0 || ^10.0.0 peerDependenciesMeta: @@ -11108,7 +11199,7 @@ __metadata: optional: true bin: jest: bin/jest.js - checksum: a2ece945c4477099df84dfc084a790b26050f609af6cb92ad7a0fd7faa66200d04a2360c223d14274f57d375c9a7768487f2be7add8590509d8844408b7b009a + checksum: b2af093f34e2e835141ba8ef3e4b3cc03e51eb05b1ed438071500ecfbf2e8681a85ef44cb331087b3f835cc050731a26b03bd40f98f2e8927a50b2e1a5806636 languageName: node linkType: hard @@ -14051,6 +14142,17 @@ __metadata: languageName: node linkType: hard +"pretty-format@npm:^29.0.2": + version: 29.0.2 + resolution: "pretty-format@npm:29.0.2" + dependencies: + "@jest/schemas": ^29.0.0 + ansi-styles: ^5.0.0 + react-is: ^18.0.0 + checksum: 02aa8f0e9a91d52d0ca67911b72dc44ae23f41dd50de961f9c86947046f2ced0818c4baccc806f89e78b13e8ee690f5d55a6a8cbdae03f5990c1f5e79ac81048 + languageName: node + linkType: hard + "pretty-ms@npm:7.0.1": version: 7.0.1 resolution: "pretty-ms@npm:7.0.1" @@ -15786,6 +15888,15 @@ __metadata: languageName: node linkType: hard +"strip-literal@npm:^0.4.0": + version: 0.4.0 + resolution: "strip-literal@npm:0.4.0" + dependencies: + acorn: ^8.7.1 + checksum: f764939203f24bc948dd22319de780e50b6ffa1a20915207090ddc851475a8ed7d99c94c446b75686e2f9f7fcb343dc99bc721a43ae2857f7848e79fc73b8200 + languageName: node + linkType: hard + "strtok3@npm:^7.0.0": version: 7.0.0 resolution: "strtok3@npm:7.0.0" @@ -16191,6 +16302,13 @@ __metadata: languageName: node linkType: hard +"tinybench@npm:^2.1.3": + version: 2.1.4 + resolution: "tinybench@npm:2.1.4" + checksum: 36b32b494afb379e4cd3fa1c040ca429ac8c1c064770801c9c4c6313053a1314946eb02028d62ab7d2c8f5dd743f9447c739b56516cdb9914d12c5f1021e8d41 + languageName: node + linkType: hard + "tinypool@npm:^0.2.4": version: 0.2.4 resolution: "tinypool@npm:0.2.4" @@ -16576,122 +16694,122 @@ __metadata: languageName: node linkType: hard -"turbo-android-arm64@npm:1.4.4": - version: 1.4.4 - resolution: "turbo-android-arm64@npm:1.4.4" +"turbo-android-arm64@npm:1.4.5": + version: 1.4.5 + resolution: "turbo-android-arm64@npm:1.4.5" conditions: os=android & cpu=arm64 languageName: node linkType: hard -"turbo-darwin-64@npm:1.4.4": - version: 1.4.4 - resolution: "turbo-darwin-64@npm:1.4.4" +"turbo-darwin-64@npm:1.4.5": + version: 1.4.5 + resolution: "turbo-darwin-64@npm:1.4.5" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"turbo-darwin-arm64@npm:1.4.4": - version: 1.4.4 - resolution: "turbo-darwin-arm64@npm:1.4.4" +"turbo-darwin-arm64@npm:1.4.5": + version: 1.4.5 + resolution: "turbo-darwin-arm64@npm:1.4.5" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"turbo-freebsd-64@npm:1.4.4": - version: 1.4.4 - resolution: "turbo-freebsd-64@npm:1.4.4" +"turbo-freebsd-64@npm:1.4.5": + version: 1.4.5 + resolution: "turbo-freebsd-64@npm:1.4.5" conditions: os=freebsd & cpu=x64 languageName: node linkType: hard -"turbo-freebsd-arm64@npm:1.4.4": - version: 1.4.4 - resolution: "turbo-freebsd-arm64@npm:1.4.4" +"turbo-freebsd-arm64@npm:1.4.5": + version: 1.4.5 + resolution: "turbo-freebsd-arm64@npm:1.4.5" conditions: os=freebsd & cpu=arm64 languageName: node linkType: hard -"turbo-linux-32@npm:1.4.4": - version: 1.4.4 - resolution: "turbo-linux-32@npm:1.4.4" +"turbo-linux-32@npm:1.4.5": + version: 1.4.5 + resolution: "turbo-linux-32@npm:1.4.5" conditions: os=linux & cpu=ia32 languageName: node linkType: hard -"turbo-linux-64@npm:1.4.4": - version: 1.4.4 - resolution: "turbo-linux-64@npm:1.4.4" +"turbo-linux-64@npm:1.4.5": + version: 1.4.5 + resolution: "turbo-linux-64@npm:1.4.5" conditions: os=linux & cpu=x64 languageName: node linkType: hard -"turbo-linux-arm64@npm:1.4.4": - version: 1.4.4 - resolution: "turbo-linux-arm64@npm:1.4.4" +"turbo-linux-arm64@npm:1.4.5": + version: 1.4.5 + resolution: "turbo-linux-arm64@npm:1.4.5" conditions: os=linux & cpu=arm64 languageName: node linkType: hard -"turbo-linux-arm@npm:1.4.4": - version: 1.4.4 - resolution: "turbo-linux-arm@npm:1.4.4" +"turbo-linux-arm@npm:1.4.5": + version: 1.4.5 + resolution: "turbo-linux-arm@npm:1.4.5" conditions: os=linux & cpu=arm languageName: node linkType: hard -"turbo-linux-mips64le@npm:1.4.4": - version: 1.4.4 - resolution: "turbo-linux-mips64le@npm:1.4.4" +"turbo-linux-mips64le@npm:1.4.5": + version: 1.4.5 + resolution: "turbo-linux-mips64le@npm:1.4.5" conditions: os=linux & cpu=mipsel languageName: node linkType: hard -"turbo-linux-ppc64le@npm:1.4.4": - version: 1.4.4 - resolution: "turbo-linux-ppc64le@npm:1.4.4" +"turbo-linux-ppc64le@npm:1.4.5": + version: 1.4.5 + resolution: "turbo-linux-ppc64le@npm:1.4.5" conditions: os=linux & cpu=ppc64 languageName: node linkType: hard -"turbo-windows-32@npm:1.4.4": - version: 1.4.4 - resolution: "turbo-windows-32@npm:1.4.4" +"turbo-windows-32@npm:1.4.5": + version: 1.4.5 + resolution: "turbo-windows-32@npm:1.4.5" conditions: os=win32 & cpu=ia32 languageName: node linkType: hard -"turbo-windows-64@npm:1.4.4": - version: 1.4.4 - resolution: "turbo-windows-64@npm:1.4.4" +"turbo-windows-64@npm:1.4.5": + version: 1.4.5 + resolution: "turbo-windows-64@npm:1.4.5" conditions: os=win32 & cpu=x64 languageName: node linkType: hard -"turbo-windows-arm64@npm:1.4.4": - version: 1.4.4 - resolution: "turbo-windows-arm64@npm:1.4.4" +"turbo-windows-arm64@npm:1.4.5": + version: 1.4.5 + resolution: "turbo-windows-arm64@npm:1.4.5" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard -"turbo@npm:^1.4.4": - version: 1.4.4 - resolution: "turbo@npm:1.4.4" - dependencies: - turbo-android-arm64: 1.4.4 - turbo-darwin-64: 1.4.4 - turbo-darwin-arm64: 1.4.4 - turbo-freebsd-64: 1.4.4 - turbo-freebsd-arm64: 1.4.4 - turbo-linux-32: 1.4.4 - turbo-linux-64: 1.4.4 - turbo-linux-arm: 1.4.4 - turbo-linux-arm64: 1.4.4 - turbo-linux-mips64le: 1.4.4 - turbo-linux-ppc64le: 1.4.4 - turbo-windows-32: 1.4.4 - turbo-windows-64: 1.4.4 - turbo-windows-arm64: 1.4.4 +"turbo@npm:^1.4.5": + version: 1.4.5 + resolution: "turbo@npm:1.4.5" + dependencies: + turbo-android-arm64: 1.4.5 + turbo-darwin-64: 1.4.5 + turbo-darwin-arm64: 1.4.5 + turbo-freebsd-64: 1.4.5 + turbo-freebsd-arm64: 1.4.5 + turbo-linux-32: 1.4.5 + turbo-linux-64: 1.4.5 + turbo-linux-arm: 1.4.5 + turbo-linux-arm64: 1.4.5 + turbo-linux-mips64le: 1.4.5 + turbo-linux-ppc64le: 1.4.5 + turbo-windows-32: 1.4.5 + turbo-windows-64: 1.4.5 + turbo-windows-arm64: 1.4.5 dependenciesMeta: turbo-android-arm64: optional: true @@ -16723,7 +16841,7 @@ __metadata: optional: true bin: turbo: bin/turbo - checksum: 630bc2c8b69f37b7c606ecc99721b33a197cd94c17b559fe0e487898ed56381a6d2f02bec77a009438886b4d2fd7c99e87483f74311acabffadd49c72695dc3b + checksum: 31ce43e825606abf1346ae379d7367ec9f0c76d1aca1c167708a149a89da735effaeb50e92ee8c358fbe4e64ec49d2388b4e5b250167036e700901401b3a76c5 languageName: node linkType: hard @@ -16808,9 +16926,9 @@ __metadata: languageName: node linkType: hard -"typedoc@npm:^0.23.13": - version: 0.23.13 - resolution: "typedoc@npm:0.23.13" +"typedoc@npm:^0.23.14": + version: 0.23.14 + resolution: "typedoc@npm:0.23.14" dependencies: lunr: ^2.3.9 marked: ^4.0.19 @@ -16820,7 +16938,7 @@ __metadata: typescript: 4.6.x || 4.7.x || 4.8.x bin: typedoc: bin/typedoc - checksum: 720b5fa9846fcb2d0e3a763bc01b8f856d7e1c80ac50d2efd85dd850f61b98c4f52b7519a86ff2c59cebc7ab1e19e92cab31a25082d4574ab9a6f93e660e5369 + checksum: 4037dc0db4aa8b205ac505bdc191de404ea2da3eb8dabbf8172851c239b85a96fbfd81503dc2d4789066d6901d76c552abc73ee04a239763b69b90587d44527b languageName: node linkType: hard @@ -17153,33 +17271,33 @@ __metadata: languageName: node linkType: hard -"unocss@npm:^0.45.14": - version: 0.45.14 - resolution: "unocss@npm:0.45.14" - dependencies: - "@unocss/astro": 0.45.14 - "@unocss/cli": 0.45.14 - "@unocss/core": 0.45.14 - "@unocss/preset-attributify": 0.45.14 - "@unocss/preset-icons": 0.45.14 - "@unocss/preset-mini": 0.45.14 - "@unocss/preset-tagify": 0.45.14 - "@unocss/preset-typography": 0.45.14 - "@unocss/preset-uno": 0.45.14 - "@unocss/preset-web-fonts": 0.45.14 - "@unocss/preset-wind": 0.45.14 - "@unocss/reset": 0.45.14 - "@unocss/transformer-attributify-jsx": 0.45.14 - "@unocss/transformer-compile-class": 0.45.14 - "@unocss/transformer-directives": 0.45.14 - "@unocss/transformer-variant-group": 0.45.14 - "@unocss/vite": 0.45.14 +"unocss@npm:^0.45.15": + version: 0.45.15 + resolution: "unocss@npm:0.45.15" + dependencies: + "@unocss/astro": 0.45.15 + "@unocss/cli": 0.45.15 + "@unocss/core": 0.45.15 + "@unocss/preset-attributify": 0.45.15 + "@unocss/preset-icons": 0.45.15 + "@unocss/preset-mini": 0.45.15 + "@unocss/preset-tagify": 0.45.15 + "@unocss/preset-typography": 0.45.15 + "@unocss/preset-uno": 0.45.15 + "@unocss/preset-web-fonts": 0.45.15 + "@unocss/preset-wind": 0.45.15 + "@unocss/reset": 0.45.15 + "@unocss/transformer-attributify-jsx": 0.45.15 + "@unocss/transformer-compile-class": 0.45.15 + "@unocss/transformer-directives": 0.45.15 + "@unocss/transformer-variant-group": 0.45.15 + "@unocss/vite": 0.45.15 peerDependencies: - "@unocss/webpack": 0.45.14 + "@unocss/webpack": 0.45.15 peerDependenciesMeta: "@unocss/webpack": optional: true - checksum: 96a0af6b47761eb18014a61c78637cb27b19d38b4a010b28fabc2b63f33366c0bec68afdc245a3d18491ea7260b79d78d447caa10699735eb76664e1103a7d7e + checksum: 851a2ceeaa9f7431c69df1e8dad0ef21c692f7e467b9909c8ad1ceb97e419b21bdb565507eb43ee6fa90a1385f21f0c94e348cdf26e6716fc25827d72aef9cbb languageName: node linkType: hard @@ -17481,9 +17599,9 @@ __metadata: languageName: node linkType: hard -"vitest@npm:0.22.1, vitest@npm:^0.22.1": - version: 0.22.1 - resolution: "vitest@npm:0.22.1" +"vitest@npm:0.23.0, vitest@npm:^0.23.0": + version: 0.23.0 + resolution: "vitest@npm:0.23.0" dependencies: "@types/chai": ^4.3.3 "@types/chai-subset": ^1.3.3 @@ -17491,6 +17609,8 @@ __metadata: chai: ^4.3.6 debug: ^4.3.4 local-pkg: ^0.4.2 + strip-literal: ^0.4.0 + tinybench: ^2.1.3 tinypool: ^0.2.4 tinyspy: ^1.0.2 vite: ^2.9.12 || ^3.0.0-0 @@ -17513,7 +17633,7 @@ __metadata: optional: true bin: vitest: vitest.mjs - checksum: 7abe50ceb51181e77cd62eb3a07c2da17f13078f09be34cc2e98f1f94a77eba33a56c644d48ae16bb474945ffc1cfc8664b1f4976c3de495c5e474057420c4ca + checksum: e35db8a2618b95cda9c98a8e1b5a6c83e7c84c7500296614829adef21ca7ac3e9580b19062f379e57df8d847a53eb6bfd8d66c501b5fb666e504c35ca5b18107 languageName: node linkType: hard From f3ce4a75d0c4eafc89a1f0ce9f4964bcbcdae6da Mon Sep 17 00:00:00 2001 From: Almeida Date: Mon, 5 Sep 2022 17:14:19 +0100 Subject: [PATCH 131/155] docs: use remarks instead of `Note` in descriptions (#8597) --- .../contextMenuCommands/ContextMenuCommandBuilder.ts | 12 +++++++----- .../slashCommands/SlashCommandBuilder.ts | 12 +++++++----- 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/packages/builders/src/interactions/contextMenuCommands/ContextMenuCommandBuilder.ts b/packages/builders/src/interactions/contextMenuCommands/ContextMenuCommandBuilder.ts index 51003b2512f6..ea94da034f4b 100644 --- a/packages/builders/src/interactions/contextMenuCommands/ContextMenuCommandBuilder.ts +++ b/packages/builders/src/interactions/contextMenuCommands/ContextMenuCommandBuilder.ts @@ -81,8 +81,8 @@ export class ContextMenuCommandBuilder { /** * Sets whether the command is enabled by default when the application is added to a guild. * - * **Note**: If set to `false`, you will have to later `PUT` the permissions for this command. - * + * @remarks + * If set to `false`, you will have to later `PUT` the permissions for this command. * @param value - Whether or not to enable this command by default * @see https://discord.com/developers/docs/interactions/application-commands#permissions * @deprecated Use {@link ContextMenuCommandBuilder.setDefaultMemberPermissions} or {@link ContextMenuCommandBuilder.setDMPermission} instead. @@ -99,8 +99,8 @@ export class ContextMenuCommandBuilder { /** * Sets the default permissions a member should have in order to run the command. * - * **Note:** You can set this to `'0'` to disable the command by default. - * + * @remarks + * You can set this to `'0'` to disable the command by default. * @param permissions - The permissions bit field to set * @see https://discord.com/developers/docs/interactions/application-commands#permissions */ @@ -174,7 +174,9 @@ export class ContextMenuCommandBuilder { /** * Returns the final data that should be sent to Discord. * - * **Note:** Calling this function will validate required properties based on their conditions. + * @remarks + * This method runs validations on the data before serializing it. + * As such, it may throw an error if the data is invalid. */ public toJSON(): RESTPostAPIContextMenuApplicationCommandsJSONBody { validateRequiredParameters(this.name, this.type); diff --git a/packages/builders/src/interactions/slashCommands/SlashCommandBuilder.ts b/packages/builders/src/interactions/slashCommands/SlashCommandBuilder.ts index c7b88d094cc5..c7b5a76c3992 100644 --- a/packages/builders/src/interactions/slashCommands/SlashCommandBuilder.ts +++ b/packages/builders/src/interactions/slashCommands/SlashCommandBuilder.ts @@ -67,7 +67,9 @@ export class SlashCommandBuilder { /** * Returns the final data that should be sent to Discord. * - * **Note:** Calling this function will validate required properties based on their conditions. + * @remarks + * This method runs validations on the data before serializing it. + * As such, it may throw an error if the data is invalid. */ public toJSON(): RESTPostAPIChatInputApplicationCommandsJSONBody { validateRequiredParameters(this.name, this.description, this.options); @@ -84,8 +86,8 @@ export class SlashCommandBuilder { /** * Sets whether the command is enabled by default when the application is added to a guild. * - * **Note**: If set to `false`, you will have to later `PUT` the permissions for this command. - * + * @remarks + * If set to `false`, you will have to later `PUT` the permissions for this command. * @param value - Whether or not to enable this command by default * @see https://discord.com/developers/docs/interactions/application-commands#permissions * @deprecated Use {@link (SlashCommandBuilder:class).setDefaultMemberPermissions} or {@link (SlashCommandBuilder:class).setDMPermission} instead. @@ -102,8 +104,8 @@ export class SlashCommandBuilder { /** * Sets the default permissions a member should have in order to run the command. * - * **Note:** You can set this to `'0'` to disable the command by default. - * + * @remarks + * You can set this to `'0'` to disable the command by default. * @param permissions - The permissions bit field to set * @see https://discord.com/developers/docs/interactions/application-commands#permissions */ From c3341570d983aea9ecc419979d5a01de658c9d67 Mon Sep 17 00:00:00 2001 From: Noel Date: Tue, 6 Sep 2022 19:48:33 +0200 Subject: [PATCH 132/155] refactor: website components (#8600) --- packages/actions/package.json | 6 +- packages/api-extractor-utils/package.json | 2 +- .../src/ApiNodeJSONEncoder.ts | 2 +- packages/builders/package.json | 6 +- packages/collection/package.json | 6 +- packages/discord.js/package.json | 2 +- packages/docgen/package.json | 2 +- packages/proxy-container/package.json | 2 +- packages/proxy/package.json | 6 +- packages/rest/package.json | 6 +- packages/scripts/package.json | 6 +- packages/voice/package.json | 6 +- packages/website/next.config.js | 4 + packages/website/package.json | 24 +- packages/website/src/assets/code-sample.png | Bin 86702 -> 0 bytes .../src/assets/djs_logo_rainbow_400x400.png | Bin 9800 -> 0 bytes .../assets}/powered-by-vercel.svg | 0 .../website/src/components/CodeListing.tsx | 80 +- .../website/src/components/DocContainer.tsx | 141 +- .../src/components/HyperlinkedText.tsx | 13 +- .../src/components/InheritanceText.tsx | 11 +- .../website/src/components/MethodItem.tsx | 125 +- .../website/src/components/MethodList.tsx | 17 +- .../website/src/components/ParameterTable.tsx | 26 +- .../website/src/components/PropertyList.tsx | 17 +- .../src/components/RouterTransition.tsx | 25 - packages/website/src/components/Section.tsx | 89 +- packages/website/src/components/Sections.tsx | 75 +- .../website/src/components/SidebarItems.tsx | 69 +- .../website/src/components/SidebarLayout.tsx | 547 ++--- .../src/components/SyntaxHighlighter.tsx | 31 + packages/website/src/components/Table.tsx | 54 +- .../src/components/TableOfContentItems.tsx | 124 +- .../website/src/components/TypeParamTable.tsx | 24 +- .../website/src/components/model/Class.tsx | 12 +- .../website/src/components/model/Enum.tsx | 35 +- .../website/src/components/model/Function.tsx | 8 +- .../src/components/model/Interface.tsx | 12 +- .../src/components/tsdoc/BlockComment.tsx | 23 +- .../website/src/components/tsdoc/TSDoc.tsx | 171 +- packages/website/src/middleware.ts | 16 +- packages/website/src/pages/404.tsx | 39 +- packages/website/src/pages/_app.tsx | 136 +- packages/website/src/pages/_document.tsx | 70 +- packages/website/src/pages/docs/[...slug].tsx | 135 +- .../pages/docs/packages/[package]/index.tsx | 108 +- .../website/src/pages/docs/packages/index.tsx | 161 +- packages/website/src/pages/index.tsx | 159 +- packages/website/src/styles/main.css | 41 +- packages/website/src/util/constants.ts | 22 + packages/website/src/util/packages.ts | 1 - packages/website/src/util/search.ts | 6 - packages/website/unocss.config.ts | 54 +- packages/ws/package.json | 6 +- yarn.lock | 1816 +++++++---------- 55 files changed, 1908 insertions(+), 2671 deletions(-) delete mode 100644 packages/website/src/assets/code-sample.png delete mode 100644 packages/website/src/assets/djs_logo_rainbow_400x400.png rename packages/website/{public => src/assets}/powered-by-vercel.svg (100%) delete mode 100644 packages/website/src/components/RouterTransition.tsx create mode 100644 packages/website/src/components/SyntaxHighlighter.tsx create mode 100644 packages/website/src/util/constants.ts delete mode 100644 packages/website/src/util/packages.ts delete mode 100644 packages/website/src/util/search.ts diff --git a/packages/actions/package.json b/packages/actions/package.json index 40e2559fdf72..8f5141e03fc8 100644 --- a/packages/actions/package.json +++ b/packages/actions/package.json @@ -43,14 +43,14 @@ "tslib": "^2.4.0" }, "devDependencies": { - "@types/node": "^16.11.56", - "@vitest/coverage-c8": "^0.23.0", + "@types/node": "^16.11.57", + "@vitest/coverage-c8": "^0.23.1", "eslint": "^8.23.0", "eslint-config-neon": "^0.1.33", "prettier": "^2.7.1", "tsup": "^6.2.3", "typescript": "^4.8.2", - "vitest": "^0.23.0" + "vitest": "^0.23.1" }, "engines": { "node": ">=16.9.0" diff --git a/packages/api-extractor-utils/package.json b/packages/api-extractor-utils/package.json index e36a91002344..5a01ef64bfef 100644 --- a/packages/api-extractor-utils/package.json +++ b/packages/api-extractor-utils/package.json @@ -35,7 +35,7 @@ "@microsoft/tsdoc": "^0.14.1" }, "devDependencies": { - "@types/node": "^16.11.56", + "@types/node": "^16.11.57", "eslint": "^8.23.0", "eslint-config-neon": "^0.1.33", "prettier": "^2.7.1", diff --git a/packages/api-extractor-utils/src/ApiNodeJSONEncoder.ts b/packages/api-extractor-utils/src/ApiNodeJSONEncoder.ts index 81d18056915e..4f485fded9b3 100644 --- a/packages/api-extractor-utils/src/ApiNodeJSONEncoder.ts +++ b/packages/api-extractor-utils/src/ApiNodeJSONEncoder.ts @@ -164,7 +164,7 @@ export class ApiNodeJSONEncoder { case ApiItemKind.Variable: return this.encodeVariable(model, node as ApiVariable, version); default: - console.log(`Unknown API item kind: ${node.kind}`); + // console.log(`Unknown API item kind: ${node.kind}`); return undefined; } } diff --git a/packages/builders/package.json b/packages/builders/package.json index 711f284d26cb..1939a1ec5a5f 100644 --- a/packages/builders/package.json +++ b/packages/builders/package.json @@ -64,15 +64,15 @@ "@discordjs/docgen": "workspace:^", "@favware/cliff-jumper": "^1.8.7", "@microsoft/api-extractor": "^7.30.0", - "@types/node": "^16.11.56", - "@vitest/coverage-c8": "^0.23.0", + "@types/node": "^16.11.57", + "@vitest/coverage-c8": "^0.23.1", "downlevel-dts": "^0.10.1", "eslint": "^8.23.0", "eslint-config-neon": "^0.1.33", "prettier": "^2.7.1", "tsup": "^6.2.3", "typescript": "^4.8.2", - "vitest": "^0.23.0" + "vitest": "^0.23.1" }, "engines": { "node": ">=16.9.0" diff --git a/packages/collection/package.json b/packages/collection/package.json index 196eb016da4c..7e9b09e9e551 100644 --- a/packages/collection/package.json +++ b/packages/collection/package.json @@ -53,15 +53,15 @@ "@discordjs/docgen": "workspace:^", "@favware/cliff-jumper": "^1.8.7", "@microsoft/api-extractor": "^7.30.0", - "@types/node": "^16.11.56", - "@vitest/coverage-c8": "^0.23.0", + "@types/node": "^16.11.57", + "@vitest/coverage-c8": "^0.23.1", "downlevel-dts": "^0.10.1", "eslint": "^8.23.0", "eslint-config-neon": "^0.1.33", "prettier": "^2.7.1", "tsup": "^6.2.3", "typescript": "^4.8.2", - "vitest": "^0.23.0" + "vitest": "^0.23.1" }, "engines": { "node": ">=16.9.0" diff --git a/packages/discord.js/package.json b/packages/discord.js/package.json index ea3dc77b8365..a50498df2c64 100644 --- a/packages/discord.js/package.json +++ b/packages/discord.js/package.json @@ -64,7 +64,7 @@ "devDependencies": { "@discordjs/docgen": "workspace:^", "@favware/cliff-jumper": "^1.8.7", - "@types/node": "^16.11.56", + "@types/node": "^16.11.57", "dtslint": "^4.2.1", "eslint": "^8.23.0", "jest": "^29.0.2", diff --git a/packages/docgen/package.json b/packages/docgen/package.json index c4d068a3987b..cb455afd9222 100644 --- a/packages/docgen/package.json +++ b/packages/docgen/package.json @@ -50,7 +50,7 @@ "devDependencies": { "@favware/cliff-jumper": "^1.8.7", "@types/jsdoc-to-markdown": "^7.0.3", - "@types/node": "^16.11.56", + "@types/node": "^16.11.57", "eslint": "^8.23.0", "eslint-config-neon": "^0.1.33", "prettier": "^2.7.1", diff --git a/packages/proxy-container/package.json b/packages/proxy-container/package.json index 6886dcb1421e..5c6f8e44dc60 100644 --- a/packages/proxy-container/package.json +++ b/packages/proxy-container/package.json @@ -49,7 +49,7 @@ "tslib": "^2.4.0" }, "devDependencies": { - "@types/node": "^16.11.56", + "@types/node": "^16.11.57", "eslint": "^8.23.0", "eslint-config-neon": "^0.1.33", "prettier": "^2.7.1", diff --git a/packages/proxy/package.json b/packages/proxy/package.json index 169e369a445e..7868c55e7165 100644 --- a/packages/proxy/package.json +++ b/packages/proxy/package.json @@ -62,9 +62,9 @@ "@discordjs/docgen": "workspace:^", "@favware/cliff-jumper": "^1.8.7", "@microsoft/api-extractor": "^7.30.0", - "@types/node": "^16.11.56", + "@types/node": "^16.11.57", "@types/supertest": "^2.0.12", - "@vitest/coverage-c8": "^0.23.0", + "@vitest/coverage-c8": "^0.23.1", "downlevel-dts": "^0.10.1", "eslint": "^8.23.0", "eslint-config-neon": "^0.1.33", @@ -72,7 +72,7 @@ "supertest": "^6.2.4", "tsup": "^6.2.3", "typescript": "^4.8.2", - "vitest": "^0.23.0" + "vitest": "^0.23.1" }, "engines": { "node": ">=16.9.0" diff --git a/packages/rest/package.json b/packages/rest/package.json index 226fdd1e85d1..3ce1a869f431 100644 --- a/packages/rest/package.json +++ b/packages/rest/package.json @@ -64,15 +64,15 @@ "@discordjs/docgen": "workspace:^", "@favware/cliff-jumper": "^1.8.7", "@microsoft/api-extractor": "^7.30.0", - "@types/node": "^16.11.56", - "@vitest/coverage-c8": "^0.23.0", + "@types/node": "^16.11.57", + "@vitest/coverage-c8": "^0.23.1", "downlevel-dts": "^0.10.1", "eslint": "^8.23.0", "eslint-config-neon": "^0.1.33", "prettier": "^2.7.1", "tsup": "^6.2.3", "typescript": "^4.8.2", - "vitest": "^0.23.0" + "vitest": "^0.23.1" }, "engines": { "node": ">=16.9.0" diff --git a/packages/scripts/package.json b/packages/scripts/package.json index 2b951a288c3d..5c7955ef7b81 100644 --- a/packages/scripts/package.json +++ b/packages/scripts/package.json @@ -52,14 +52,14 @@ "undici": "^5.10.0" }, "devDependencies": { - "@types/node": "^16.11.56", - "@vitest/coverage-c8": "^0.23.0", + "@types/node": "^16.11.57", + "@vitest/coverage-c8": "^0.23.1", "eslint": "^8.23.0", "eslint-config-neon": "^0.1.33", "prettier": "^2.7.1", "tsup": "^6.2.3", "typescript": "^4.8.2", - "vitest": "^0.23.0" + "vitest": "^0.23.1" }, "engines": { "node": ">=16.9.0" diff --git a/packages/voice/package.json b/packages/voice/package.json index aba04ab0fe66..7bd648f87ecd 100644 --- a/packages/voice/package.json +++ b/packages/voice/package.json @@ -59,14 +59,14 @@ "ws": "^8.8.1" }, "devDependencies": { - "@babel/core": "^7.18.13", - "@babel/preset-env": "^7.18.10", + "@babel/core": "^7.19.0", + "@babel/preset-env": "^7.19.0", "@babel/preset-typescript": "^7.18.6", "@discordjs/docgen": "workspace:^", "@favware/cliff-jumper": "^1.8.7", "@microsoft/api-extractor": "^7.30.0", "@types/jest": "^29.0.0", - "@types/node": "^16.11.56", + "@types/node": "^16.11.57", "downlevel-dts": "^0.10.1", "eslint": "^8.23.0", "eslint-config-neon": "^0.1.33", diff --git a/packages/website/next.config.js b/packages/website/next.config.js index 83828df53dfa..71eb42b67c62 100644 --- a/packages/website/next.config.js +++ b/packages/website/next.config.js @@ -1,3 +1,6 @@ +/* eslint-disable tsdoc/syntax */ +import { URL, fileURLToPath } from 'node:url'; + /** * @type {import('next').NextConfig} */ @@ -12,6 +15,7 @@ export default { images: { allowFutureImage: true, }, + outputFileTracingRoot: fileURLToPath(new URL('../../', import.meta.url)), }, images: { dangerouslyAllowSVG: true, diff --git a/packages/website/package.json b/packages/website/package.json index 25a4e6ee9b35..434c53cb7471 100644 --- a/packages/website/package.json +++ b/packages/website/package.json @@ -41,52 +41,50 @@ "dependencies": { "@discordjs/api-extractor-utils": "workspace:^", "@discordjs/scripts": "workspace:^", - "@emotion/react": "^11.10.4", - "@emotion/server": "^11.10.0", - "@mantine/core": "^5.2.5", - "@mantine/hooks": "^5.2.5", - "@mantine/next": "^5.2.5", - "@mantine/nprogress": "^5.2.5", - "@mantine/spotlight": "^5.2.5", "@microsoft/api-extractor-model": "7.24.0", "@microsoft/tsdoc": "0.14.1", "@vscode/codicons": "^0.0.32", + "ariakit": "^2.0.0-next.41", "minisearch": "^5.0.0", "next": "^12.2.5", "next-mdx-remote": "^4.1.0", + "next-progress": "^2.2.0", + "next-themes": "^0.2.0", "react": "^18.2.0", + "react-custom-scrollbars-2": "^4.5.0", "react-dom": "^18.2.0", "react-icons": "^4.4.0", "react-syntax-highlighter": "^15.5.0", + "react-use": "^17.4.0", "rehype-ignore": "^1.0.1", "rehype-pretty-code": "^0.3.2", "rehype-raw": "^6.1.1", "rehype-slug": "^5.0.1", "remark-gfm": "^3.0.1", - "sharp": "^0.30.7", + "sharp": "^0.31.0", "shiki": "^0.11.1", "swr": "^1.3.0" }, "devDependencies": { "@testing-library/react": "^13.4.0", "@testing-library/user-event": "^14.4.3", - "@types/node": "^16.11.56", + "@types/node": "^16.11.57", "@types/react-dom": "^18.0.6", "@types/react-syntax-highlighter": "^15.5.5", "@unocss/cli": "^0.45.15", - "@unocss/preset-web-fonts": "^0.45.15", "@unocss/reset": "^0.45.15", - "@vitejs/plugin-react": "^2.0.1", - "@vitest/coverage-c8": "^0.23.0", + "@vitejs/plugin-react": "^2.1.0", + "@vitest/coverage-c8": "^0.23.1", "concurrently": "^7.3.0", "eslint": "^8.23.0", "eslint-config-neon": "^0.1.33", "happy-dom": "^6.0.4", "prettier": "^2.7.1", + "prettier-plugin-tailwindcss": "^0.1.13", "typescript": "^4.8.2", "unocss": "^0.45.15", "vercel": "^28.2.2", - "vitest": "^0.23.0" + "vitest": "^0.23.1" }, "engines": { "node": ">=16.9.0" diff --git a/packages/website/src/assets/code-sample.png b/packages/website/src/assets/code-sample.png deleted file mode 100644 index a1e37da047ea58a2f91850ff0939e29718eb5ae5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 86702 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 diff --git a/packages/website/public/powered-by-vercel.svg b/packages/website/src/assets/powered-by-vercel.svg similarity index 100% rename from packages/website/public/powered-by-vercel.svg rename to packages/website/src/assets/powered-by-vercel.svg diff --git a/packages/website/src/components/CodeListing.tsx b/packages/website/src/components/CodeListing.tsx index 521907ae4459..5a3f1dd4c145 100644 --- a/packages/website/src/components/CodeListing.tsx +++ b/packages/website/src/components/CodeListing.tsx @@ -1,6 +1,4 @@ import type { TokenDocumentation, ApiItemJSON, AnyDocNodeJSON, InheritanceData } from '@discordjs/api-extractor-utils'; -import { ActionIcon, Badge, Box, createStyles, Group, MediaQuery, Stack, Title } from '@mantine/core'; -import { useMediaQuery } from '@mantine/hooks'; import type { PropsWithChildren } from 'react'; import { FiLink } from 'react-icons/fi'; import { HyperlinkedText } from './HyperlinkedText'; @@ -12,19 +10,6 @@ export enum CodeListingSeparatorType { Value = '=', } -const useStyles = createStyles((theme) => ({ - outer: { - display: 'flex', - alignItems: 'center', - gap: 16, - - [theme.fn.smallerThan('sm')]: { - flexDirection: 'column', - alignItems: 'unset', - }, - }, -})); - export function CodeListing({ name, separator = CodeListingSeparatorType.Type, @@ -47,48 +32,51 @@ export function CodeListing({ summary?: ApiItemJSON['summary']; typeTokens: TokenDocumentation[]; }>) { - const { classes } = useStyles(); - const matches = useMediaQuery('(max-width: 768px)'); - return ( - - - - - - - + + {summary || inheritanceData ? ( +
{deprecation ? : null} - {summary && } - {comment && } + {summary ? : null} + {comment ? : null} {inheritanceData ? : null} {children} - - - +
+ ) : null} + ); } diff --git a/packages/website/src/components/DocContainer.tsx b/packages/website/src/components/DocContainer.tsx index 934f7880fb19..4f7ddf778cdb 100644 --- a/packages/website/src/components/DocContainer.tsx +++ b/packages/website/src/components/DocContainer.tsx @@ -5,22 +5,8 @@ import type { ApiClassJSON, ApiInterfaceJSON, } from '@discordjs/api-extractor-utils'; -import { - Group, - Stack, - Title, - Text, - Box, - MediaQuery, - Aside, - ScrollArea, - Skeleton, - Divider, - useMantineColorScheme, -} from '@mantine/core'; -import { useMediaQuery } from '@mantine/hooks'; -import { useRouter } from 'next/router'; import { Fragment, type PropsWithChildren } from 'react'; +import { Scrollbars } from 'react-custom-scrollbars-2'; import { VscSymbolClass, VscSymbolMethod, @@ -30,10 +16,10 @@ import { VscListSelection, VscSymbolParameter, } from 'react-icons/vsc'; -import { PrismAsyncLight as SyntaxHighlighter } from 'react-syntax-highlighter'; -import { vscDarkPlus, ghcolors } from 'react-syntax-highlighter/dist/cjs/styles/prism'; +import { useMedia } from 'react-use'; import { HyperlinkedText } from './HyperlinkedText'; import { Section } from './Section'; +import { SyntaxHighlighter } from './SyntaxHighlighter'; import { TableOfContentItems } from './TableOfContentItems'; import { TypeParamTable } from './TypeParamTable'; import { TSDoc } from './tsdoc/TSDoc'; @@ -75,95 +61,76 @@ export function DocContainer({ methods, properties, }: DocContainerProps) { - const router = useRouter(); - const matches = useMediaQuery('(max-width: 768px)'); - const { colorScheme } = useMantineColorScheme(); + const matches = useMedia('(max-width: 768px)', true); return ( - - - - - <Group> - {generateIcon(kind)} - {name} - </Group> - - + <> +
+

+ {generateIcon(kind)} + {name} +

- -
} padded dense={matches}> - {summary ? : No summary provided.} - -
-
+
} padded dense={matches}> + {summary ? : No summary provided.} +
+
- - - - {excerpt} - - - + {extendsTokens?.length ? ( - - - Extends - - +
+

Extends

+ - - + +
) : null} {implementsTokens?.length ? ( - - - Implements - - +
+

Implements

+ {implementsTokens.map((token, idx) => ( {idx < implementsTokens.length - 1 ? ', ' : ''} ))} - - + +
) : null} - - - {typeParams?.length ? ( -
} - padded - dense={matches} - defaultClosed - > - -
- ) : null} - {children} -
-
- +
+ {typeParams?.length ? ( +
} + padded + dense={matches} + defaultClosed + > + +
+ ) : null} + {children} +
+
{(kind === 'Class' || kind === 'Interface') && (methods?.length || properties?.length) ? ( - - - + ) : null} -
+ ); } diff --git a/packages/website/src/components/HyperlinkedText.tsx b/packages/website/src/components/HyperlinkedText.tsx index bad5e93ed100..b1fa9d7fdc4d 100644 --- a/packages/website/src/components/HyperlinkedText.tsx +++ b/packages/website/src/components/HyperlinkedText.tsx @@ -1,5 +1,4 @@ import type { TokenDocumentation } from '@discordjs/api-extractor-utils'; -import { Anchor, Text } from '@mantine/core'; import Link from 'next/link'; export function HyperlinkedText({ tokens }: { tokens: TokenDocumentation[] }) { @@ -8,19 +7,13 @@ export function HyperlinkedText({ tokens }: { tokens: TokenDocumentation[] }) { {tokens.map((token, idx) => { if (token.path) { return ( - - - {token.text} - + + {token.text} ); } - return ( - - {token.text} - - ); + return {token.text}; })} ); diff --git a/packages/website/src/components/InheritanceText.tsx b/packages/website/src/components/InheritanceText.tsx index 744d6b7e6373..b97ceaf30748 100644 --- a/packages/website/src/components/InheritanceText.tsx +++ b/packages/website/src/components/InheritanceText.tsx @@ -1,16 +1,13 @@ import type { InheritanceData } from '@discordjs/api-extractor-utils'; -import { Anchor, Text } from '@mantine/core'; import Link from 'next/link'; export function InheritanceText({ data }: { data: InheritanceData }) { return ( - + {'Inherited from '} - - - {data.parentName} - + + {data.parentName} - + ); } diff --git a/packages/website/src/components/MethodItem.tsx b/packages/website/src/components/MethodItem.tsx index 3ef6f1d37a48..3b41f6caa027 100644 --- a/packages/website/src/components/MethodItem.tsx +++ b/packages/website/src/components/MethodItem.tsx @@ -1,86 +1,77 @@ import type { ApiMethodJSON, ApiMethodSignatureJSON } from '@discordjs/api-extractor-utils'; -import { ActionIcon, Badge, Box, createStyles, Group, MediaQuery, Stack, Title } from '@mantine/core'; -import { useMediaQuery } from '@mantine/hooks'; +import { useCallback, useMemo } from 'react'; import { FiLink } from 'react-icons/fi'; import { HyperlinkedText } from './HyperlinkedText'; import { InheritanceText } from './InheritanceText'; import { ParameterTable } from './ParameterTable'; import { TSDoc } from './tsdoc/TSDoc'; -const useStyles = createStyles((theme) => ({ - outer: { - display: 'flex', - alignItems: 'center', - gap: 16, - - [theme.fn.smallerThan('sm')]: { - flexDirection: 'column', - alignItems: 'unset', - }, - }, -})); - -function getShorthandName(data: ApiMethodJSON | ApiMethodSignatureJSON) { - return `${data.name}${data.optional ? '?' : ''}(${data.parameters.reduce((prev, cur, index) => { - if (index === 0) { - return `${prev}${cur.isOptional ? `${cur.name}?` : cur.name}`; - } - - return `${prev}, ${cur.isOptional ? `${cur.name}?` : cur.name}`; - }, '')})`; -} - export function MethodItem({ data }: { data: ApiMethodJSON | ApiMethodSignatureJSON }) { - const { classes } = useStyles(); - const matches = useMediaQuery('(max-width: 768px)'); const method = data as ApiMethodJSON; - const key = `${data.name}${data.overloadIndex && data.overloadIndex > 1 ? `:${data.overloadIndex}` : ''}`; + const key = useMemo( + () => `${data.name}${data.overloadIndex && data.overloadIndex > 1 ? `:${data.overloadIndex}` : ''}`, + [data.name, data.overloadIndex], + ); + + const getShorthandName = useCallback( + (data: ApiMethodJSON | ApiMethodSignatureJSON) => + `${data.name}${data.optional ? '?' : ''}(${data.parameters.reduce((prev, cur, index) => { + if (index === 0) { + return `${prev}${cur.isOptional ? `${cur.name}?` : cur.name}`; + } + + return `${prev}, ${cur.isOptional ? `${cur.name}?` : cur.name}`; + }, '')})`, + [], + ); return ( - - - - - - - - - - {data.deprecated || - (data.kind === 'Method' && method.protected) || - (data.kind === 'Method' && method.static) ? ( - - {data.deprecated ? ( - - Deprecated - - ) : null} - {data.kind === 'Method' && method.protected ? Protected : null} - {data.kind === 'Method' && method.static ? Static : null} - - ) : null} - - {`${getShorthandName( - data, - )}`} - : - - <HyperlinkedText tokens={data.returnTypeTokens} /> - - - - - - - +
+
+
+ + + + {data.deprecated || + (data.kind === 'Method' && method.protected) || + (data.kind === 'Method' && method.static) ? ( +
+ {data.deprecated ? ( +
+ Deprecated +
+ ) : null} + {data.kind === 'Method' && method.protected ? ( +
+ Protected +
+ ) : null} + {data.kind === 'Method' && method.static ? ( +
+ Static +
+ ) : null} +
+ ) : null} +
+

{`${getShorthandName(data)}`}

+

:

+

+ +

+
+
+
+ {data.summary || data.parameters.length ? ( +
{data.deprecated ? : null} {data.summary ? : null} {data.remarks ? : null} {data.comment ? : null} {data.parameters.length ? : null} {data.inheritanceData ? : null} - - - +
+ ) : null} +
); } diff --git a/packages/website/src/components/MethodList.tsx b/packages/website/src/components/MethodList.tsx index 6f994fec3519..431b3e2aa167 100644 --- a/packages/website/src/components/MethodList.tsx +++ b/packages/website/src/components/MethodList.tsx @@ -1,19 +1,20 @@ import type { ApiMethodJSON, ApiMethodSignatureJSON } from '@discordjs/api-extractor-utils'; -import { Divider, Stack } from '@mantine/core'; -import { Fragment } from 'react'; +import { Fragment, useMemo } from 'react'; import { MethodItem } from './MethodItem'; export function MethodList({ data }: { data: (ApiMethodJSON | ApiMethodSignatureJSON)[] }) { - return ( - - {data.map((method) => ( + const methodItems = useMemo( + () => + data.map((method) => ( 1 ? `:${method.overloadIndex}` : ''}`} > - +
- ))} - + )), + [data], ); + + return
{methodItems}
; } diff --git a/packages/website/src/components/ParameterTable.tsx b/packages/website/src/components/ParameterTable.tsx index 4666f387bd82..a2ef8fbb4e1d 100644 --- a/packages/website/src/components/ParameterTable.tsx +++ b/packages/website/src/components/ParameterTable.tsx @@ -1,5 +1,5 @@ import type { ParameterDocumentation } from '@discordjs/api-extractor-utils'; -import { Box, ScrollArea } from '@mantine/core'; +import { useMemo } from 'react'; import { HyperlinkedText } from './HyperlinkedText'; import { Table } from './Table'; import { TSDoc } from './tsdoc/TSDoc'; @@ -10,18 +10,20 @@ const columnStyles = { }; export function ParameterTable({ data }: { data: ParameterDocumentation[] }) { - const rows = data.map((param) => ({ - Name: param.name, - Type: , - Optional: param.isOptional ? 'Yes' : 'No', - Description: param.paramCommentBlock ? : 'None', - })); + const rows = useMemo( + () => + data.map((param) => ({ + Name: param.name, + Type: , + Optional: param.isOptional ? 'Yes' : 'No', + Description: param.paramCommentBlock ? : 'None', + })), + [data], + ); return ( - - -
+
+ + + {deprecation || readonly || optional ? ( - +
{deprecation ? ( - +
Deprecated - +
+ ) : null} + {readonly ? ( +
+ Readonly +
+ ) : null} + {optional ? ( +
+ Optional +
) : null} - {readonly ? Readonly : null} - {optional ? Optional : null} - +
) : null} - - + <div className="flex flex-row flex-wrap place-items-center gap-1"> + <h4 className="break-all font-mono text-lg font-bold"> {name} {optional ? '?' : ''} - - {separator} - + </h4> + <h4 className="font-mono text-lg font-bold">{separator}</h4> + <h4 className="break-all font-mono text-lg font-bold"> <HyperlinkedText tokens={typeTokens} /> - - - - - + +
+
- - +
+
+ ); } diff --git a/packages/website/src/components/PropertyList.tsx b/packages/website/src/components/PropertyList.tsx index 02305f571d30..61b7e2d37230 100644 --- a/packages/website/src/components/PropertyList.tsx +++ b/packages/website/src/components/PropertyList.tsx @@ -1,12 +1,11 @@ import type { ApiPropertyItemJSON } from '@discordjs/api-extractor-utils'; -import { Divider, Stack } from '@mantine/core'; -import { Fragment } from 'react'; +import { Fragment, useMemo } from 'react'; import { CodeListing } from './CodeListing'; export function PropertyList({ data }: { data: ApiPropertyItemJSON[] }) { - return ( - - {data.map((prop) => ( + const propertyItems = useMemo( + () => + data.map((prop) => ( - +
- ))} - + )), + [data], ); + + return
{propertyItems}
; } diff --git a/packages/website/src/components/RouterTransition.tsx b/packages/website/src/components/RouterTransition.tsx deleted file mode 100644 index 8d9a3005ab32..000000000000 --- a/packages/website/src/components/RouterTransition.tsx +++ /dev/null @@ -1,25 +0,0 @@ -import { startNavigationProgress, resetNavigationProgress, NavigationProgress } from '@mantine/nprogress'; -import { useRouter } from 'next/router'; -import { useEffect } from 'react'; - -export function RouterTransition() { - const router = useRouter(); - - useEffect(() => { - const handleStart = (url: string) => url !== router.asPath && startNavigationProgress(); - const handleComplete = () => resetNavigationProgress(); - - router.events.on('routeChangeStart', handleStart); - router.events.on('routeChangeComplete', handleComplete); - router.events.on('routeChangeError', handleComplete); - - return () => { - router.events.off('routeChangeStart', handleStart); - router.events.off('routeChangeComplete', handleComplete); - router.events.off('routeChangeError', handleComplete); - }; - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [router.asPath]); - - return ; -} diff --git a/packages/website/src/components/Section.tsx b/packages/website/src/components/Section.tsx index 68dd8c09f08b..aa4a2560d6ec 100644 --- a/packages/website/src/components/Section.tsx +++ b/packages/website/src/components/Section.tsx @@ -1,37 +1,7 @@ -import { - createStyles, - UnstyledButton, - Group, - ThemeIcon, - Collapse, - Box, - Text, - useMantineColorScheme, -} from '@mantine/core'; -import { useState, useEffect, type PropsWithChildren } from 'react'; +import { Disclosure, DisclosureContent, useDisclosureState } from 'ariakit/disclosure'; +import type { PropsWithChildren } from 'react'; import { VscChevronDown } from 'react-icons/vsc'; -const useStyles = createStyles((theme, { opened }: { opened: boolean }) => ({ - control: { - display: 'block', - width: '100%', - padding: theme.spacing.xs, - color: theme.colorScheme === 'dark' ? theme.colors.dark![0] : theme.black, - backgroundColor: theme.colorScheme === 'dark' ? theme.colors.dark![7] : 'transparent', - borderRadius: theme.radius.xs, - - '&:hover': { - backgroundColor: theme.colorScheme === 'dark' ? theme.colors.dark![5] : theme.colors.gray![2], - color: theme.colorScheme === 'dark' ? theme.white : theme.black, - }, - }, - - icon: { - transition: 'transform 150ms ease', - transform: opened ? 'rotate(180deg)' : 'rotate(0deg)', - }, -})); - export function Section({ title, icon, @@ -46,41 +16,28 @@ export function Section({ padded?: boolean; title: string; }>) { - const [opened, setOpened] = useState(!defaultClosed); - const { colorScheme } = useMantineColorScheme(); - const { classes } = useStyles({ opened }); - - useEffect(() => { - setOpened(!defaultClosed); - // eslint-disable-next-line react-hooks/exhaustive-deps - }, []); + const disclosure = useDisclosureState({ defaultOpen: !defaultClosed }); return ( - - setOpened((isOpen) => !isOpen)}> - - - {icon ? ( - - {icon} - - ) : null} - - {title} - - - - - - - {padded ? ( - - {children} - - ) : ( - children - )} - - +
+ +
+
+ {icon ?? null} + {title} +
+ +
+
+ + {padded ?
{children}
: children} +
+
); } diff --git a/packages/website/src/components/Sections.tsx b/packages/website/src/components/Sections.tsx index 6a809b2fb455..3d34c1400527 100644 --- a/packages/website/src/components/Sections.tsx +++ b/packages/website/src/components/Sections.tsx @@ -4,9 +4,9 @@ import type { ParameterDocumentation, ApiConstructorJSON, } from '@discordjs/api-extractor-utils'; -import { Stack, Group, Badge, Title } from '@mantine/core'; -import { useMediaQuery } from '@mantine/hooks'; +import { useMemo } from 'react'; import { VscSymbolConstant, VscSymbolMethod, VscSymbolProperty } from 'react-icons/vsc'; +import { useMedia } from 'react-use'; import { MethodList } from './MethodList'; import { ParameterTable } from './ParameterTable'; import { PropertyList } from './PropertyList'; @@ -14,7 +14,7 @@ import { Section } from './Section'; import { TSDoc } from './tsdoc/TSDoc'; export function PropertiesSection({ data }: { data: ApiClassJSON['properties'] | ApiInterfaceJSON['properties'] }) { - const matches = useMediaQuery('(max-width: 768px)'); + const matches = useMedia('(max-width: 768px)', true); return data.length ? (
} padded dense={matches}> @@ -24,7 +24,7 @@ export function PropertiesSection({ data }: { data: ApiClassJSON['properties'] | } export function MethodsSection({ data }: { data: ApiClassJSON['methods'] | ApiInterfaceJSON['methods'] }) { - const matches = useMediaQuery('(max-width: 768px)'); + const matches = useMedia('(max-width: 768px)', true); return data.length ? (
} padded dense={matches}> @@ -34,7 +34,7 @@ export function MethodsSection({ data }: { data: ApiClassJSON['methods'] | ApiIn } export function ParametersSection({ data }: { data: ParameterDocumentation[] }) { - const matches = useMediaQuery('(max-width: 768px)'); + const matches = useMedia('(max-width: 768px)', true); return data.length ? (
} padded dense={matches}> @@ -44,45 +44,52 @@ export function ParametersSection({ data }: { data: ParameterDocumentation[] }) } export function ConstructorSection({ data }: { data: ApiConstructorJSON }) { - const matches = useMediaQuery('(max-width: 768px)'); + const matches = useMedia('(max-width: 768px)', true); - const getShorthandName = () => - `constructor(${data.parameters.reduce((prev, cur, index) => { - if (index === 0) { - return `${prev}${cur.isOptional ? `${cur.name}?` : cur.name}`; - } + const getShorthandName = useMemo( + () => + `constructor(${data.parameters.reduce((prev, cur, index) => { + if (index === 0) { + return `${prev}${cur.isOptional ? `${cur.name}?` : cur.name}`; + } - return `${prev}, ${cur.isOptional ? `${cur.name}?` : cur.name}`; - }, '')})`; + return `${prev}, ${cur.isOptional ? `${cur.name}?` : cur.name}`; + }, '')})`, + [data.parameters], + ); return data.parameters.length ? (
} padded dense={matches}> - - - - - {data.deprecated ? ( - - Deprecated - - ) : null} - {data.protected ? Protected : null} - - {getShorthandName()} - - - - - - +
+
+
+ {data.deprecated || data.protected ? ( +
+ {data.deprecated ? ( +
+ Deprecated +
+ ) : null} + {data.protected ? ( +
+ Protected +
+ ) : null} +
+ ) : null} +

{getShorthandName}

+
+
+ {data.summary || data.parameters.length ? ( +
{data.deprecated ? : null} {data.summary ? : null} {data.remarks ? : null} {data.comment ? : null} {data.parameters.length ? : null} - - - +
+ ) : null} +
) : null; } diff --git a/packages/website/src/components/SidebarItems.tsx b/packages/website/src/components/SidebarItems.tsx index a190e5751f4c..cad89411d1d7 100644 --- a/packages/website/src/components/SidebarItems.tsx +++ b/packages/website/src/components/SidebarItems.tsx @@ -1,4 +1,3 @@ -import { createStyles, Group, Text, NavLink, Box } from '@mantine/core'; import Link from 'next/link'; import { useRouter } from 'next/router'; import { type Dispatch, type SetStateAction, useEffect, useState, useMemo } from 'react'; @@ -66,32 +65,6 @@ function resolveIcon(item: keyof GroupedMembers) { } } -const useStyles = createStyles((theme) => ({ - link: { - ...theme.fn.focusStyles(), - fontWeight: 500, - display: 'block', - width: 'unset', - padding: 5, - paddingLeft: 31, - marginLeft: 25, - fontSize: theme.fontSizes.sm, - color: theme.colorScheme === 'dark' ? theme.colors.dark![0] : theme.colors.gray![7], - borderLeft: `1px solid ${theme.colorScheme === 'dark' ? theme.colors.dark![4] : theme.colors.gray![3]}`, - - '&[data-active]': { - '&:hover': { - color: theme.white, - }, - }, - - '&:hover': { - backgroundColor: theme.colorScheme === 'dark' ? theme.colors.dark![6] : theme.colors.gray![0], - color: theme.colorScheme === 'dark' ? theme.white : theme.black, - }, - }, -})); - export function SidebarItems({ members, setOpened, @@ -101,7 +74,6 @@ export function SidebarItems({ }) { const router = useRouter(); const [asPathWithoutQueryAndAnchor, setAsPathWithoutQueryAndAnchor] = useState(''); - const { classes } = useStyles(); const groupItems = useMemo(() => groupMembers(members), [members]); useEffect(() => { @@ -109,36 +81,33 @@ export function SidebarItems({ }, [router.asPath]); return ( - ({ paddingBottom: 48, [theme.fn.smallerThan('md')]: { paddingBottom: 128 } })}> +
{(Object.keys(groupItems) as (keyof GroupedMembers)[]) .filter((group) => groupItems[group].length) .map((group, idx) => (
{groupItems[group].map((member, index) => ( - - setOpened((isOpened) => !isOpened)} - label={ - - - {member.name} - - {member.overloadIndex && member.overloadIndex > 1 ? ( - - {member.overloadIndex} - - ) : null} - - } - active={asPathWithoutQueryAndAnchor === member.path} - variant="filled" - /> + + setOpened(false)} + > +
+ {member.name} + {member.overloadIndex && member.overloadIndex > 1 ? ( + {member.overloadIndex} + ) : null} +
+
))}
))} - +
); } diff --git a/packages/website/src/components/SidebarLayout.tsx b/packages/website/src/components/SidebarLayout.tsx index 4449665b4681..dc20bdbdef4f 100644 --- a/packages/website/src/components/SidebarLayout.tsx +++ b/packages/website/src/components/SidebarLayout.tsx @@ -1,41 +1,20 @@ import type { getMembers, ApiItemJSON } from '@discordjs/api-extractor-utils'; -import { - useMantineTheme, - AppShell, - Navbar, - MediaQuery, - Header, - Burger, - Anchor, - Breadcrumbs, - ScrollArea, - Group, - Text, - ThemeIcon, - Box, - UnstyledButton, - createStyles, - Menu, - ActionIcon, - useMantineColorScheme, - Stack, - Skeleton, - LoadingOverlay, - Container, - Title, -} from '@mantine/core'; -import { NextLink } from '@mantine/next'; +import { Button } from 'ariakit/button'; +import { Menu, MenuButton, MenuItem, useMenuState } from 'ariakit/menu'; import Image from 'next/future/image'; import Link from 'next/link'; import { useRouter } from 'next/router'; import type { MDXRemoteSerializeResult } from 'next-mdx-remote'; -import { type PropsWithChildren, useState, useEffect, useMemo } from 'react'; -import { VscChevronDown, VscGithubInverted, VscPackage, VscVersions } from 'react-icons/vsc'; -import { WiDaySunny, WiNightClear } from 'react-icons/wi'; +import { useTheme } from 'next-themes'; +import { type PropsWithChildren, useState, useEffect, useMemo, Fragment } from 'react'; +import { Scrollbars } from 'react-custom-scrollbars-2'; +import { VscChevronDown, VscColorMode, VscGithubInverted, VscMenu, VscPackage, VscVersions } from 'react-icons/vsc'; +import { useMedia /* useLockBodyScroll */ } from 'react-use'; import useSWR from 'swr'; +import vercelLogo from '../assets/powered-by-vercel.svg'; import { SidebarItems } from './SidebarItems'; +import { PACKAGES } from '~/util/constants'; import type { findMember } from '~/util/model.server'; -import { PACKAGES } from '~/util/packages'; const fetcher = async (url: string) => { const res = await fetch(url); @@ -66,89 +45,6 @@ export interface GroupedMembers { Variables: Members; } -const useStyles = createStyles( - (theme, { openedLib, openedVersion }: { openedLib: boolean; openedVersion: boolean }) => ({ - control: { - display: 'block', - width: '100%', - padding: theme.spacing.xs, - color: theme.colorScheme === 'dark' ? theme.colors.dark![0] : theme.black, - backgroundColor: theme.colorScheme === 'dark' ? theme.colors.dark![6] : theme.colors.gray![1], - borderRadius: theme.radius.xs, - - '&:hover': { - backgroundColor: theme.colorScheme === 'dark' ? theme.colors.dark![5] : theme.colors.gray![2], - color: theme.colorScheme === 'dark' ? theme.white : theme.black, - }, - }, - - iconLib: { - transition: 'transform 150ms ease', - transform: openedLib ? 'rotate(180deg)' : 'rotate(0deg)', - }, - - iconVersion: { - transition: 'transform 150ms ease', - transform: openedVersion ? 'rotate(180deg)' : 'rotate(0deg)', - }, - - content: { - position: 'relative', - minHeight: 'calc(100vh - 50px)', - zIndex: 1, - background: theme.colorScheme === 'dark' ? theme.colors.dark![8] : theme.colors.gray![0], - boxShadow: '0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1)', - }, - - footer: { - position: 'fixed', - bottom: 0, - left: 0, - right: 0, - height: 200, - background: theme.colorScheme === 'dark' ? theme.colors.dark![7] : theme.colors.gray![0], - paddingLeft: 324, - - [theme.fn.smallerThan('lg')]: { - paddingRight: 54, - }, - - [theme.fn.smallerThan('md')]: { - paddingLeft: 24, - }, - - [theme.fn.smallerThan('sm')]: { - paddingRight: 24, - height: 300, - }, - }, - - links: { - display: 'flex', - justifyContent: 'space-between', - - [theme.fn.smallerThan('sm')]: { - flexDirection: 'column', - alignItems: 'center', - gap: 50, - }, - }, - - link: { color: theme.colorScheme === 'dark' ? theme.white : theme.black }, - }), -); - -const packageMenuItems = PACKAGES.map((pkg) => ( - ({ color: theme.colorScheme === 'dark' ? theme.white : theme.black })} - > - {pkg} - -)); - export function SidebarLayout({ packageName, branchName, @@ -157,261 +53,244 @@ export function SidebarLayout({ }: PropsWithChildren>) { const router = useRouter(); const [asPathWithoutQueryAndAnchor, setAsPathWithoutQueryAndAnchor] = useState(''); - const { data: versions } = useSWR( - `https://docs.discordjs.dev/api/info?package=${packageName ?? 'builders'}`, - fetcher, - ); - const theme = useMantineTheme(); - // eslint-disable-next-line @typescript-eslint/unbound-method - const { colorScheme, toggleColorScheme } = useMantineColorScheme(); - + const { data: versions } = useSWR(`https://docs.discordjs.dev/api/info?package=${packageName}`, fetcher); + const { resolvedTheme, setTheme } = useTheme(); + const toggleTheme = () => setTheme(resolvedTheme === 'light' ? 'dark' : 'light'); + const matches = useMedia('(min-width: 992px)', false); const [opened, setOpened] = useState(false); - const [openedLibPicker, setOpenedLibPicker] = useState(false); - const [openedVersionPicker, setOpenedVersionPicker] = useState(false); + const packageMenu = useMenuState({ gutter: 8, sameWidth: true }); + const versionMenu = useMenuState({ gutter: 8, sameWidth: true }); + // useLockBodyScroll(opened); useEffect(() => { - setOpened(false); - setOpenedLibPicker(false); - setOpenedVersionPicker(false); - }, []); + if (matches) { + setOpened(false); + } + }, [matches]); useEffect(() => { setAsPathWithoutQueryAndAnchor(router.asPath.split('?')[0]?.split('#')[0]?.split(':')[0] ?? ''); }, [router.asPath]); - const { classes } = useStyles({ openedLib: openedLibPicker, openedVersion: openedVersionPicker }); + const packageMenuItems = PACKAGES.map((pkg) => ( + + + {pkg} + + + )); const versionMenuItems = useMemo( () => - versions?.map((item) => ( - ({ color: theme.colorScheme === 'dark' ? theme.white : theme.black })} - > - {item} - - )) ?? [], + versions + ?.map((item) => ( + + + {item} + + + )) + .reverse() ?? [], + // eslint-disable-next-line react-hooks/exhaustive-deps [versions, packageName], ); - const breadcrumbs = useMemo( + const pathElements = useMemo( () => asPathWithoutQueryAndAnchor.split('/').map((path, idx, original) => ( - - ({ color: theme.colorScheme === 'dark' ? theme.white : theme.black })}> - {path} - + + {path} )), [asPathWithoutQueryAndAnchor], ); - return ( - ({ - main: { - background: theme.colorScheme === 'dark' ? theme.colors.dark![8] : theme.colors.gray![0], - overflowX: 'auto', - }, - })} - padding={0} - navbarOffsetBreakpoint="md" - asideOffsetBreakpoint="md" - navbar={ - <> - - - - - - } - header={ -
({ - boxShadow: - theme.colorScheme === 'dark' - ? '0 4px 6px -1px rgb(0 0 0 / 0.1), 0 2px 4px -2px rgb(0 0 0 / 0.1)' - : 'unset', - })} - height={70} - p="md" + return ( + <> +
+
+
+ +
{breadcrumbs}
+
+ + +
+
+
+
+ +
+
- } - > - -
+ +
+ + + + + + + + ); } diff --git a/packages/website/src/components/SyntaxHighlighter.tsx b/packages/website/src/components/SyntaxHighlighter.tsx new file mode 100644 index 000000000000..0ed5ddf93c23 --- /dev/null +++ b/packages/website/src/components/SyntaxHighlighter.tsx @@ -0,0 +1,31 @@ +import { PrismAsyncLight } from 'react-syntax-highlighter'; +import { vscDarkPlus, prism } from 'react-syntax-highlighter/dist/cjs/styles/prism'; + +export function SyntaxHighlighter({ language = 'typescript', code }: { code: string; language?: string }) { + return ( + <> +
+ + {code} + +
+
+ + {code} + +
+ + ); +} diff --git a/packages/website/src/components/Table.tsx b/packages/website/src/components/Table.tsx index af30348c1db4..c6340fee4f72 100644 --- a/packages/website/src/components/Table.tsx +++ b/packages/website/src/components/Table.tsx @@ -1,5 +1,4 @@ -import { Table as MantineTable } from '@mantine/core'; -import type { ReactNode } from 'react'; +import { useMemo, type ReactNode } from 'react'; export function Table({ rows, @@ -10,28 +9,39 @@ export function Table({ columns: string[]; rows: Record[]; }) { - return ( - -
- - {columns.map((column) => ( - + const cols = useMemo( + () => + columns.map((column) => ( + + )), + [columns], + ); + + const data = useMemo( + () => + rows.map((row, idx) => ( + + {Object.entries(row).map(([colName, val]) => ( + ))} + )), + [columnStyles, rows], + ); + + return ( +
- {column} - + {column} +
+ {val} +
+ + {cols} - - {rows.map((row, idx) => ( - - {Object.entries(row).map(([colName, val]) => ( - - ))} - - ))} - - + {data} +
- {val} -
); } diff --git a/packages/website/src/components/TableOfContentItems.tsx b/packages/website/src/components/TableOfContentItems.tsx index 89e1452fec08..7726fdf443ad 100644 --- a/packages/website/src/components/TableOfContentItems.tsx +++ b/packages/website/src/components/TableOfContentItems.tsx @@ -1,31 +1,7 @@ import type { ApiClassJSON, ApiInterfaceJSON } from '@discordjs/api-extractor-utils'; -import { createStyles, Group, Text, Box, Stack, ThemeIcon, useMantineColorScheme } from '@mantine/core'; import { useMemo } from 'react'; import { VscListSelection, VscSymbolMethod, VscSymbolProperty } from 'react-icons/vsc'; -const useStyles = createStyles((theme) => ({ - link: { - ...theme.fn.focusStyles(), - fontWeight: 500, - display: 'block', - textDecoration: 'none', - color: theme.colorScheme === 'dark' ? theme.colors.dark![0] : theme.colors.gray![7], - lineHeight: 1.2, - fontSize: theme.fontSizes.sm, - padding: 5, - paddingLeft: theme.spacing.md, - marginLeft: 14, - borderTopRightRadius: theme.radius.sm, - borderBottomRightRadius: theme.radius.sm, - borderLeft: `1px solid ${theme.colorScheme === 'dark' ? theme.colors.dark![4] : theme.colors.gray![3]}`, - - '&:hover': { - backgroundColor: theme.colorScheme === 'dark' ? theme.colors.dark![6] : theme.colors.gray![0], - color: theme.colorScheme === 'dark' ? theme.white : theme.black, - }, - }, -})); - export function TableOfContentItems({ methods, properties, @@ -33,22 +9,19 @@ export function TableOfContentItems({ methods: ApiClassJSON['methods'] | ApiInterfaceJSON['methods']; properties: ApiClassJSON['properties'] | ApiInterfaceJSON['properties']; }) { - const { colorScheme } = useMantineColorScheme(); - const { classes } = useStyles(); - const propertyItems = useMemo( () => properties.map((prop) => ( - key={prop.name} href={`#${prop.name}`} component="a" className={classes.link}> - - - {prop.name} - - -
+ + {prop.name} + )), - // eslint-disable-next-line react-hooks/exhaustive-deps - [properties, colorScheme], + [properties], ); const methodItems = useMemo( @@ -59,61 +32,52 @@ export function TableOfContentItems({ }`; return ( - key={key} component="a" href={`#${key}`} className={classes.link}> - - - {member.name} - - {member.overloadIndex && member.overloadIndex > 1 ? ( - - {member.overloadIndex} - - ) : null} - -
+ + {member.name} + {member.overloadIndex && member.overloadIndex > 1 ? ( + {member.overloadIndex} + ) : null} + ); }), - [methods, classes.link], + [methods], ); return ( - - +
+
- Table of contents - - + Contents +
+
{propertyItems.length ? ( - - - - - - - - Properties - - - +
+
+ +
+ Properties +
+
{propertyItems} - +
) : null} {methodItems.length ? ( - - - - - - - - Methods - - - +
+
+ +
+ Methods +
+
{methodItems} - +
) : null} - -
+
+
); } diff --git a/packages/website/src/components/TypeParamTable.tsx b/packages/website/src/components/TypeParamTable.tsx index 063e96e49ee4..3d2cc9b6072a 100644 --- a/packages/website/src/components/TypeParamTable.tsx +++ b/packages/website/src/components/TypeParamTable.tsx @@ -1,5 +1,5 @@ import type { TypeParameterData } from '@discordjs/api-extractor-utils'; -import { ScrollArea } from '@mantine/core'; +import { useMemo } from 'react'; import { HyperlinkedText } from './HyperlinkedText'; import { Table } from './Table'; import { TSDoc } from './tsdoc/TSDoc'; @@ -11,21 +11,25 @@ const rowElements = { }; export function TypeParamTable({ data }: { data: TypeParameterData[] }) { - const rows = data.map((typeParam) => ({ - Name: typeParam.name, - Constraints: , - Optional: typeParam.optional ? 'Yes' : 'No', - Default: , - Description: typeParam.commentBlock ? : 'None', - })); + const rows = useMemo( + () => + data.map((typeParam) => ({ + Name: typeParam.name, + Constraints: , + Optional: typeParam.optional ? 'Yes' : 'No', + Default: , + Description: typeParam.commentBlock ? : 'None', + })), + [data], + ); return ( - +
- + ); } diff --git a/packages/website/src/components/model/Class.tsx b/packages/website/src/components/model/Class.tsx index 24d080930a19..08124e245a54 100644 --- a/packages/website/src/components/model/Class.tsx +++ b/packages/website/src/components/model/Class.tsx @@ -1,12 +1,8 @@ import type { ApiClassJSON } from '@discordjs/api-extractor-utils'; -import { Skeleton } from '@mantine/core'; -import { useRouter } from 'next/router'; import { DocContainer } from '../DocContainer'; import { ConstructorSection, MethodsSection, PropertiesSection } from '../Sections'; export function Class({ data }: { data: ApiClassJSON }) { - const router = useRouter(); - return ( {data.constructor ? : null} - - - - - - + + ); } diff --git a/packages/website/src/components/model/Enum.tsx b/packages/website/src/components/model/Enum.tsx index 490106ff2d6f..b79f64349f76 100644 --- a/packages/website/src/components/model/Enum.tsx +++ b/packages/website/src/components/model/Enum.tsx @@ -1,33 +1,28 @@ import type { ApiEnumJSON } from '@discordjs/api-extractor-utils'; -import { Skeleton, Stack } from '@mantine/core'; -import { useMediaQuery } from '@mantine/hooks'; -import { useRouter } from 'next/router'; import { VscSymbolEnumMember } from 'react-icons/vsc'; +import { useMedia } from 'react-use'; import { CodeListing, CodeListingSeparatorType } from '../CodeListing'; import { DocContainer } from '../DocContainer'; import { Section } from '../Section'; export function Enum({ data }: { data: ApiEnumJSON }) { - const router = useRouter(); - const matches = useMediaQuery('(max-width: 768px)'); + const matches = useMedia('(max-width: 768px)', true); return ( - -
} padded dense={matches}> - - {data.members.map((member) => ( - - ))} - -
-
+
} padded dense={matches}> +
+ {data.members.map((member) => ( + + ))} +
+
); } diff --git a/packages/website/src/components/model/Function.tsx b/packages/website/src/components/model/Function.tsx index 9c81ef4840de..86ea8e5e5294 100644 --- a/packages/website/src/components/model/Function.tsx +++ b/packages/website/src/components/model/Function.tsx @@ -1,12 +1,8 @@ import type { ApiFunctionJSON } from '@discordjs/api-extractor-utils'; -import { Skeleton } from '@mantine/core'; -import { useRouter } from 'next/router'; import { DocContainer } from '../DocContainer'; import { ParametersSection } from '../Sections'; export function Function({ data }: { data: ApiFunctionJSON }) { - const router = useRouter(); - return ( 1 ? ` (${data.overloadIndex})` : ''}`} @@ -15,9 +11,7 @@ export function Function({ data }: { data: ApiFunctionJSON }) { summary={data.summary} typeParams={data.typeParameters} > - - - + ); } diff --git a/packages/website/src/components/model/Interface.tsx b/packages/website/src/components/model/Interface.tsx index 72a9315d3d69..a380c5c8519d 100644 --- a/packages/website/src/components/model/Interface.tsx +++ b/packages/website/src/components/model/Interface.tsx @@ -1,12 +1,8 @@ import type { ApiInterfaceJSON } from '@discordjs/api-extractor-utils'; -import { Skeleton } from '@mantine/core'; -import { useRouter } from 'next/router'; import { DocContainer } from '../DocContainer'; import { MethodsSection, PropertiesSection } from '../Sections'; export function Interface({ data }: { data: ApiInterfaceJSON }) { - const router = useRouter(); - return ( - - - - - - + + ); } diff --git a/packages/website/src/components/tsdoc/BlockComment.tsx b/packages/website/src/components/tsdoc/BlockComment.tsx index 729d2c4b1b2b..3b0bb4952653 100644 --- a/packages/website/src/components/tsdoc/BlockComment.tsx +++ b/packages/website/src/components/tsdoc/BlockComment.tsx @@ -1,14 +1,13 @@ -import { Alert, Box, Title, Text } from '@mantine/core'; import { StandardTags } from '@microsoft/tsdoc'; import type { PropsWithChildren } from 'react'; import { VscWarning } from 'react-icons/vsc'; export function Block({ children, title }: PropsWithChildren<{ title: string }>) { return ( - - {title} +
+
{title}
{children} - +
); } @@ -21,9 +20,17 @@ export function ExampleBlock({ export function DeprecatedBlock({ children }: PropsWithChildren): JSX.Element { return ( - } title="Deprecated" variant="outline" color="red" radius="sm"> - {children} - +
+
+ + + +
+ Deprecated + {children} +
+
+
); } @@ -54,7 +61,7 @@ export function BlockComment({ return {children}; case StandardTags.typeParam.tagNameWithUpperCase: case StandardTags.param.tagNameWithUpperCase: - return {children}; + return {children}; default: // TODO: Support more blocks in the future. return <>{children}; } diff --git a/packages/website/src/components/tsdoc/TSDoc.tsx b/packages/website/src/components/tsdoc/TSDoc.tsx index 3d81b4a35f93..2e649c03b5f3 100644 --- a/packages/website/src/components/tsdoc/TSDoc.tsx +++ b/packages/website/src/components/tsdoc/TSDoc.tsx @@ -7,132 +7,113 @@ import type { DocBlockJSON, DocCommentJSON, } from '@discordjs/api-extractor-utils'; -import { Anchor, Box, Code, Text, useMantineColorScheme } from '@mantine/core'; import { DocNodeKind, StandardTags } from '@microsoft/tsdoc'; import Link from 'next/link'; import { Fragment, useCallback, type ReactNode } from 'react'; -import { PrismAsyncLight as SyntaxHighlighter } from 'react-syntax-highlighter'; -import { vscDarkPlus, ghcolors } from 'react-syntax-highlighter/dist/cjs/styles/prism'; +import { SyntaxHighlighter } from '../SyntaxHighlighter'; import { BlockComment } from './BlockComment'; export function TSDoc({ node }: { node: AnyDocNodeJSON }): JSX.Element { - const { colorScheme } = useMantineColorScheme(); - - const createNode = useCallback( - (node: AnyDocNodeJSON, idx?: number): ReactNode => { - let numberOfExamples = 0; - let exampleIndex = 0; - - switch (node.kind) { - case DocNodeKind.PlainText: + const createNode = useCallback((node: AnyDocNodeJSON, idx?: number): ReactNode => { + let numberOfExamples = 0; + let exampleIndex = 0; + + switch (node.kind) { + case DocNodeKind.PlainText: + return ( + + {(node as DocPlainTextJSON).text} + + ); + case DocNodeKind.Paragraph: + return ( + + {(node as DocNodeContainerJSON).nodes.map((node, idx) => createNode(node, idx))} + + ); + case DocNodeKind.SoftBreak: + return ; + case DocNodeKind.LinkTag: { + const { codeDestination, urlDestination, text } = node as DocLinkTagJSON; + + if (codeDestination) { return ( - - {(node as DocPlainTextJSON).text} - + + {text ?? codeDestination.name} + ); - case DocNodeKind.Paragraph: - return ( - - {(node as DocNodeContainerJSON).nodes.map((node, idx) => createNode(node, idx))} - - ); - case DocNodeKind.SoftBreak: - return ; - case DocNodeKind.LinkTag: { - const { codeDestination, urlDestination, text } = node as DocLinkTagJSON; - - if (codeDestination) { - return ( - - - {text ?? codeDestination.name} - - - ); - } - - if (urlDestination) { - return ( - - - {text ?? urlDestination} - - - ); - } - - return null; } - case DocNodeKind.CodeSpan: { - const { code } = node as DocFencedCodeJSON; + if (urlDestination) { return ( - - {code} - + + {text ?? urlDestination} + ); } - case DocNodeKind.FencedCode: { - const { language, code } = node as DocFencedCodeJSON; - return ( - - {code} - - ); - } + return null; + } - case DocNodeKind.ParamBlock: - case DocNodeKind.Block: { - const { tag } = node as DocBlockJSON; + case DocNodeKind.CodeSpan: { + const { code } = node as DocFencedCodeJSON; + return ( + + {code} + + ); + } - if (tag.tagName.toUpperCase() === StandardTags.example.tagNameWithUpperCase) { - exampleIndex++; - } + case DocNodeKind.FencedCode: { + const { language, code } = node as DocFencedCodeJSON; + return ; + } - const index = numberOfExamples > 1 ? exampleIndex : undefined; + case DocNodeKind.ParamBlock: + case DocNodeKind.Block: { + const { tag } = node as DocBlockJSON; - return ( - - {(node as DocBlockJSON).content.map((node, idx) => createNode(node, idx))} - - ); + if (tag.tagName.toUpperCase() === StandardTags.example.tagNameWithUpperCase) { + exampleIndex++; } - case DocNodeKind.Comment: { - const comment = node as DocCommentJSON; - // Cheat a bit by finding out how many comments we have beforehand... - numberOfExamples = comment.customBlocks.filter( - (block) => block.tag.tagName.toUpperCase() === StandardTags.example.tagNameWithUpperCase, - ).length; + const index = numberOfExamples > 1 ? exampleIndex : undefined; + + return ( + + {(node as DocBlockJSON).content.map((node, idx) => createNode(node, idx))} + + ); + } + + case DocNodeKind.Comment: { + const comment = node as DocCommentJSON; - return {comment.customBlocks.map((node, idx) => createNode(node, idx))}; + if (!comment.customBlocks.length) { + return null; } - default: - console.log(`Captured unknown node kind: ${node.kind}`); - break; + // Cheat a bit by finding out how many comments we have beforehand... + numberOfExamples = comment.customBlocks.filter( + (block) => block.tag.tagName.toUpperCase() === StandardTags.example.tagNameWithUpperCase, + ).length; + + return
{comment.customBlocks.map((node, idx) => createNode(node, idx))}
; } - return null; - }, - [colorScheme], - ); + default: + // console.log(`Captured unknown node kind: ${node.kind}`); + return null; + } + }, []); return ( - + <> {node.kind === 'Paragraph' || node.kind === 'Section' ? ( <>{(node as DocNodeContainerJSON).nodes.map((node, idx) => createNode(node, idx))} ) : ( createNode(node) )} - + ); } diff --git a/packages/website/src/middleware.ts b/packages/website/src/middleware.ts index e11cc3f806cc..4139000e9181 100644 --- a/packages/website/src/middleware.ts +++ b/packages/website/src/middleware.ts @@ -1,9 +1,21 @@ import { NextResponse, type NextRequest } from 'next/server'; +import { PACKAGES } from './util/constants'; + +export default async function middleware(request: NextRequest) { + if (PACKAGES.some((pkg) => request.nextUrl.pathname.includes(pkg))) { + const packageName = /\/docs\/packages\/([^/]+)\/.*/.exec(request.nextUrl.pathname)?.[1] ?? 'builders'; + const res = await fetch(`https://docs.discordjs.dev/api/info?package=${packageName}`); + const data: string[] = await res.json(); + + const latestVersion = data.at(-2); + return NextResponse.redirect( + new URL(request.nextUrl.pathname.replace('stable', latestVersion ?? 'main'), request.url), + ); + } -export default function middleware(request: NextRequest) { return NextResponse.redirect(new URL('/docs/packages', request.url)); } export const config = { - matcher: ['/docs'], + matcher: ['/docs', '/docs/packages/:package/stable/:member*'], }; diff --git a/packages/website/src/pages/404.tsx b/packages/website/src/pages/404.tsx index 896cc214aa72..e4d5419af14a 100644 --- a/packages/website/src/pages/404.tsx +++ b/packages/website/src/pages/404.tsx @@ -1,41 +1,22 @@ -import { Container, Title, Group, Button, Box, createStyles } from '@mantine/core'; import Head from 'next/head'; import Link from 'next/link'; -const useStyles = createStyles((theme) => ({ - label: { - textAlign: 'center', - fontWeight: 900, - fontSize: 220, - lineHeight: 1, - marginBottom: theme.spacing.xl * 1.5, - color: theme.colorScheme === 'dark' ? theme.colors.dark![4] : theme.colors.gray![2], - - [theme.fn.smallerThan('sm')]: { - fontSize: 120, - }, - }, -})); - export default function FourOhFourPage() { - const { classes } = useStyles(); - return ( <> discord.js | 404 + - - 404 - Not found. - - - - - - +
+

404

+

Not found.

+ + + Take me back + + +
); } diff --git a/packages/website/src/pages/_app.tsx b/packages/website/src/pages/_app.tsx index 0451c156d0fc..dc4d5450be1a 100644 --- a/packages/website/src/pages/_app.tsx +++ b/packages/website/src/pages/_app.tsx @@ -1,135 +1,31 @@ -import { type ColorScheme, ColorSchemeProvider, MantineProvider } from '@mantine/core'; -import { useLocalStorage } from '@mantine/hooks'; -import { type SpotlightAction, SpotlightProvider } from '@mantine/spotlight'; import type { AppProps } from 'next/app'; import Head from 'next/head'; -import { type NextRouter, useRouter } from 'next/router'; -import { VscPackage } from 'react-icons/vsc'; -import { RouterTransition } from '../components/RouterTransition'; +import NextProgress from 'next-progress'; +import { ThemeProvider } from 'next-themes'; +import '@unocss/reset/antfu.css'; import '../styles/unocss.css'; import '../styles/main.css'; -import { miniSearch } from '~/util/search'; - -const actions: (router: NextRouter) => SpotlightAction[] = (router: NextRouter) => [ - { - title: 'Home', - description: 'Go to landing page', - onTrigger: () => void router.push('/'), - icon: , - }, - { - title: 'Packages', - description: 'Go to the package selection', - onTrigger: () => void router.push('/docs/packages'), - icon: , - }, - { - id: 'packages-builders', - title: 'Builders', - description: 'Go to the @discordjs/builders documentation', - onTrigger: () => void router.push('/docs/packages/builders'), - icon: , - }, - { - id: 'packages-collection', - title: 'Collection', - description: 'Go to the @discordjs/collection documentation', - onTrigger: () => void router.push('/docs/packages/collection'), - icon: , - }, - { - id: 'packages-proxy', - title: 'Proxy', - description: 'Go to the @discordjs/proxy documentation', - onTrigger: () => void router.push('/docs/packages/proxy'), - icon: , - }, - { - id: 'packages-rest', - title: 'REST', - description: 'Go to the @discordjs/rest documentation', - onTrigger: () => void router.push('/docs/packages/voice'), - icon: , - }, - { - id: 'packages-voice', - title: 'Voice', - description: 'Go to the @discordjs/voice documentation', - onTrigger: () => void router.push('/docs/packages/ws'), - icon: , - }, - { - id: 'packages-ws', - title: 'WS', - description: 'Go to the @discordjs/ws documentation', - onTrigger: () => void router.push('/docs'), - icon: , - }, -]; export default function MyApp({ Component, pageProps }: AppProps) { - const router = useRouter(); - const [colorScheme, setColorScheme] = useLocalStorage({ - key: 'theme', - defaultValue: 'dark', - getInitialValueInEffect: true, - }); - const toggleColorScheme = (value?: ColorScheme) => - setColorScheme(value ?? (colorScheme === 'dark' ? 'light' : 'dark')); - return ( <> discord.js + - - - { - if (!query) { - return actions; - } - - const search = miniSearch.search(query); - return actions.filter((action) => search.some((res) => res.name === action.title)); - }} - > - - - - - + + + + ); } diff --git a/packages/website/src/pages/_document.tsx b/packages/website/src/pages/_document.tsx index bc5736543aa7..3c4235adcb10 100644 --- a/packages/website/src/pages/_document.tsx +++ b/packages/website/src/pages/_document.tsx @@ -1,43 +1,33 @@ -import { createGetInitialProps } from '@mantine/next'; -import Document, { Html, Head, Main, NextScript } from 'next/document'; +import { Html, Head, Main, NextScript } from 'next/document'; +import { DESCRIPTION } from '~/util/constants'; -const getInitialProps = createGetInitialProps(); +export default function Document() { + return ( + + + + + + + -export default class _Document extends Document { - public static override getInitialProps = getInitialProps; - - public override render() { - return ( - - - - - - - - - - - - - - - - - - - - -
- - - - ); - } + + + + + + + + + + + + + + +
+ + + + ); } diff --git a/packages/website/src/pages/docs/[...slug].tsx b/packages/website/src/pages/docs/[...slug].tsx index 85ad5b0120cd..f69a06c2ef89 100644 --- a/packages/website/src/pages/docs/[...slug].tsx +++ b/packages/website/src/pages/docs/[...slug].tsx @@ -13,22 +13,23 @@ import { type ApiEnumJSON, } from '@discordjs/api-extractor-utils'; import { createApiModel } from '@discordjs/scripts'; -import { ActionIcon, Affix, Box, LoadingOverlay, Transition } from '@mantine/core'; -import { useMediaQuery, useWindowScroll } from '@mantine/hooks'; -import { registerSpotlightActions } from '@mantine/spotlight'; import { ApiFunction, ApiItemKind, type ApiPackage } from '@microsoft/api-extractor-model'; import Head from 'next/head'; import { useRouter } from 'next/router'; import type { GetStaticPaths, GetStaticProps } from 'next/types'; import { MDXRemote } from 'next-mdx-remote'; import { serialize } from 'next-mdx-remote/serialize'; -import { useEffect } from 'react'; -import { VscChevronUp } from 'react-icons/vsc'; +import { useMemo } from 'react'; import rehypeIgnore from 'rehype-ignore'; -import rehypePrettyCode from 'rehype-pretty-code'; +import rehypePrettyCode, { type Options } from 'rehype-pretty-code'; import rehypeRaw from 'rehype-raw'; import rehypeSlug from 'rehype-slug'; import remarkGfm from 'remark-gfm'; +import { getHighlighter } from 'shiki'; +import shikiLangJavascript from 'shiki/languages/javascript.tmLanguage.json'; +import shikiLangTypescript from 'shiki/languages/typescript.tmLanguage.json'; +import shikiThemeDarkPlus from 'shiki/themes/dark-plus.json'; +import shikiThemeLightPlus from 'shiki/themes/light-plus.json'; import { SidebarLayout, type SidebarLayoutProps } from '~/components/SidebarLayout'; import { Class } from '~/components/model/Class'; import { Enum } from '~/components/model/Enum'; @@ -37,9 +38,9 @@ import { Interface } from '~/components/model/Interface'; import { TypeAlias } from '~/components/model/TypeAlias'; import { Variable } from '~/components/model/Variable'; import { MemberProvider } from '~/contexts/member'; +import { PACKAGES } from '~/util/constants'; import { findMember, findMemberByKey } from '~/util/model.server'; -import { PACKAGES } from '~/util/packages'; -import { miniSearch } from '~/util/search'; +// import { miniSearch } from '~/util/search'; export const getStaticPaths: GetStaticPaths = async () => { const pkgs = ( @@ -54,6 +55,7 @@ export const getStaticPaths: GetStaticPaths = async () => { } else { const response = await fetch(`https://docs.discordjs.dev/api/info?package=${packageName}`); versions = await response.json(); + versions = versions.slice(-2); for (const version of versions) { const res = await fetch(`https://docs.discordjs.dev/docs/${packageName}/${version}.api.json`); @@ -123,7 +125,13 @@ export const getStaticPaths: GetStaticPaths = async () => { }; export const getStaticProps: GetStaticProps = async ({ params }) => { - const [, packageName = 'builders', branchName = 'main', member] = params!.slug as string[]; + const [path, packageName = 'builders', branchName = 'main', member] = params!.slug as string[]; + + if (path !== 'packages' || !PACKAGES.includes(packageName)) { + return { + notFound: true, + }; + } const [memberName, overloadIndex] = member?.split(':') ?? []; @@ -134,7 +142,30 @@ export const getStaticProps: GetStaticProps = async ({ params }) => { mdxOptions: { remarkPlugins: [remarkGfm], remarkRehypeOptions: { allowDangerousHtml: true }, - rehypePlugins: [rehypeRaw, rehypeIgnore, rehypeSlug, [rehypePrettyCode, { theme: 'dark-plus' }]], + rehypePlugins: [ + rehypeRaw, + rehypeIgnore, + rehypeSlug, + [ + rehypePrettyCode, + { + theme: { + dark: shikiThemeDarkPlus, + light: shikiThemeLightPlus, + }, + getHighlighter: async (options?: Partial) => + getHighlighter({ + ...options, + langs: [ + // @ts-expect-error: Working as intended + { id: 'javascript', aliases: ['js'], scopeName: 'source.js', grammar: shikiLangJavascript }, + // @ts-expect-error: Working as intended + { id: 'typescript', aliases: ['ts'], scopeName: 'source.ts', grammar: shikiLangTypescript }, + ], + }), + }, + ], + ], format: 'md', }, }); @@ -186,7 +217,7 @@ export const getStaticProps: GetStaticProps = async ({ params }) => { props: { error: error_, }, - revalidate: 3_600, + revalidate: 1, }; } }; @@ -206,46 +237,30 @@ const member = (props?: ApiItemJSON | undefined) => { case 'Enum': return ; default: - return Cannot render that item type; + return
Cannot render that item type
; } }; export default function SlugPage(props: Partial) { const router = useRouter(); - const [scroll, scrollTo] = useWindowScroll(); - const matches = useMediaQuery('(max-width: 1200px)'); - - useEffect(() => { - if (props.data?.searchIndex) { - const searchIndex = props.data?.searchIndex.map((idx, index) => ({ id: index, ...idx })) ?? []; - miniSearch.addAll(searchIndex); - - registerSpotlightActions( - searchIndex.map((idx) => ({ - title: idx.name, - description: idx.summary ?? '', - onTrigger: () => void router.push(idx.path), - })), - ); - } - // eslint-disable-next-line react-hooks/exhaustive-deps - }, []); - - const name = `discord.js${props.data?.member?.name ? ` | ${props.data.member.name}` : ''}`; + const name = useMemo( + () => `discord.js${props.data?.member?.name ? ` | ${props.data.member.name}` : ''}`, + [props.data?.member?.name], + ); + const ogTitle = useMemo( + () => `${props.packageName ?? 'discord.js'}${props.data?.member?.name ? ` | ${props.data.member.name}` : ''}`, + [props.packageName, props.data?.member?.name], + ); if (router.isFallback) { - return ( - - - - ); + return null; } // Just in case // return ; return props.error ? ( - {props.error} +
{props.error}
) : ( @@ -253,50 +268,20 @@ export default function SlugPage(props: Partial {name} + {member(props.data.member)} ) : props.data?.source ? ( - ({ - a: { - backgroundColor: 'transparent', - color: theme.colors.blurple![0], - textDecoration: 'none', - }, - img: { - borderStyle: 'none', - maxWidth: '100%', - boxSizing: 'content-box', - }, - })} - px="xl" - > +
- +
) : null} - - 200}> - {(transitionStyles) => ( - scrollTo({ y: 0 })} - > - - - )} - -
); } + +export const config = { + unstable_includeFiles: ['../{builders,collection,proxy,rest,voice,ws}/README.md'], +}; diff --git a/packages/website/src/pages/docs/packages/[package]/index.tsx b/packages/website/src/pages/docs/packages/[package]/index.tsx index 7567479017eb..c7b3dbc7ece6 100644 --- a/packages/website/src/pages/docs/packages/[package]/index.tsx +++ b/packages/website/src/pages/docs/packages/[package]/index.tsx @@ -1,21 +1,7 @@ -import { - Container, - UnstyledButton, - createStyles, - Group, - ThemeIcon, - Text, - Stack, - Box, - Title, - useMantineColorScheme, - Affix, -} from '@mantine/core'; import Link from 'next/link'; -import { useRouter } from 'next/router'; import type { GetStaticPaths, GetStaticProps } from 'next/types'; import { VscArrowLeft, VscArrowRight, VscVersions } from 'react-icons/vsc'; -import { PACKAGES } from '~/util/packages'; +import { PACKAGES } from '~/util/constants'; interface VersionProps { data: { @@ -34,20 +20,21 @@ export const getStaticPaths: GetStaticPaths = () => { }; export const getStaticProps: GetStaticProps = async ({ params }) => { - const packageName = params!.package as string | undefined; + const packageName = params!.package as string; + + if (!PACKAGES.includes(packageName)) { + return { + notFound: true, + }; + } try { - const res = await fetch(`https://docs.discordjs.dev/api/info?package=${packageName ?? 'builders'}`); + const res = await fetch(`https://docs.discordjs.dev/api/info?package=${packageName}`); const data: string[] = await res.json(); if (!data.length) { - console.error('No tags'); - return { - props: { - error: 'No tags', - }, - revalidate: 3_600, + notFound: true, }; } @@ -55,7 +42,7 @@ export const getStaticProps: GetStaticProps = async ({ params }) => { props: { packageName, data: { - versions: data, + versions: data.reverse(), }, }, revalidate: 3_600, @@ -68,66 +55,39 @@ export const getStaticProps: GetStaticProps = async ({ params }) => { props: { error: error_, }, - revalidate: 3_600, + revalidate: 1, }; } }; -const useStyles = createStyles((theme) => ({ - outer: { - display: 'flex', - height: '100%', - alignItems: 'center', - }, - - control: { - padding: theme.spacing.xs, - color: theme.colorScheme === 'dark' ? theme.colors.dark![0] : theme.black, - borderRadius: theme.radius.xs, - - '&:hover': { - backgroundColor: theme.colorScheme === 'dark' ? theme.colors.dark![6] : theme.colors.gray![0], - color: theme.colorScheme === 'dark' ? theme.white : theme.black, - }, - }, -})); - export default function VersionsRoute(props: Partial & { error?: string }) { - const router = useRouter(); - const { classes } = useStyles(); - const { colorScheme } = useMantineColorScheme(); - return props.error ? ( - {props.error} +
+ {props.error} +
) : ( - - - - Select a version: - +
+
+

Select a version:

{props.data?.versions.map((version) => ( - - - - - - - - - {version} - - + + +
+
+ +

{version}

+
- - +
+
)) ?? null} - - - void router.push('/docs/packages')}> - - - - + + + Go back + + +
+
); } diff --git a/packages/website/src/pages/docs/packages/index.tsx b/packages/website/src/pages/docs/packages/index.tsx index 928af3e36c95..459facc747a6 100644 --- a/packages/website/src/pages/docs/packages/index.tsx +++ b/packages/website/src/pages/docs/packages/index.tsx @@ -1,95 +1,98 @@ -import { - Container, - UnstyledButton, - createStyles, - Group, - ThemeIcon, - Text, - Stack, - Title, - useMantineColorScheme, - Button, -} from '@mantine/core'; +import { Button } from 'ariakit/button'; import Link from 'next/link'; import { useRouter } from 'next/router'; -import type { MouseEvent } from 'react'; -import { VscArrowRight, VscPackage } from 'react-icons/vsc'; -import { PACKAGES } from '~/util/packages'; +import type { GetStaticProps } from 'next/types'; +import { useCallback, type MouseEvent } from 'react'; +import { VscArrowLeft, VscArrowRight, VscPackage } from 'react-icons/vsc'; +import { PACKAGES } from '~/util/constants'; -const useStyles = createStyles((theme) => ({ - outer: { - display: 'flex', - height: '100%', - alignItems: 'center', - }, +interface PackageProps { + data: { + versions: { packageName: string; version: string }[]; + }; +} + +export const getStaticProps: GetStaticProps = async () => { + try { + const versions = await Promise.all( + PACKAGES.map(async (pkg) => { + const response = await fetch(`https://docs.discordjs.dev/api/info?package=${pkg}`); + const versions = await response.json(); + const latestVersion = versions.at(-2); + return { packageName: pkg, version: latestVersion }; + }), + ); - control: { - padding: theme.spacing.xs, - color: theme.colorScheme === 'dark' ? theme.colors.dark![0] : theme.black, - borderRadius: theme.radius.xs, + return { + props: { + versions, + }, + revalidate: 3_600, + }; + } catch (error_) { + const error = error_ as Error; + console.error(error); - '&:hover': { - backgroundColor: theme.colorScheme === 'dark' ? theme.colors.dark![6] : theme.colors.gray![0], - color: theme.colorScheme === 'dark' ? theme.white : theme.black, - }, - }, -})); + return { + props: { + error: error_, + }, + revalidate: 1, + }; + } +}; -export default function PackagesRoute() { - const { classes } = useStyles(); - const { colorScheme } = useMantineColorScheme(); +export default function PackagesRoute(props: Partial & { error?: string }) { const router = useRouter(); + const findLatestVersion = useCallback( + (pkg: string) => props.data?.versions.find((version) => version.packageName === pkg), + [props.data?.versions], + ); const handleClick = async (ev: MouseEvent, packageName: string) => { ev.stopPropagation(); - - const res = await fetch(`https://docs.discordjs.dev/api/info?package=${packageName ?? 'builders'}`); - const data: string[] = await res.json(); - - const latestVersion = data.at(-2); - void router.push(`/docs/packages/${packageName}/${latestVersion}`); + void router.push(`/docs/packages/${packageName}`); }; - return ( - - - - Select a package: - + return props.error ? ( +
+ {props.error} +
+ ) : ( +
+
+

Select a package:

{PACKAGES.map((pkg) => ( - ) => void handleClick(ev, pkg)} - > - - - - - - - - {pkg} - - - - - - - - - + + +
+
+
+ +

{pkg}

+
+ + + +
+ +
+
+ ))} - - + + + Go back + + +
+
); } diff --git a/packages/website/src/pages/index.tsx b/packages/website/src/pages/index.tsx index 38a966fd4739..91d3394d5797 100644 --- a/packages/website/src/pages/index.tsx +++ b/packages/website/src/pages/index.tsx @@ -1,133 +1,52 @@ -import { createStyles, Container, Title, Button, Group, Text, Center, Box, useMantineColorScheme } from '@mantine/core'; import Image from 'next/future/image'; import Link from 'next/link'; import { FiExternalLink } from 'react-icons/fi'; -import { PrismAsyncLight as SyntaxHighlighter } from 'react-syntax-highlighter'; -import { vscDarkPlus, ghcolors } from 'react-syntax-highlighter/dist/cjs/styles/prism'; - -const useStyles = createStyles((theme) => ({ - outer: { - display: 'flex', - flexDirection: 'column', - height: '100%', - justifyContent: 'center', - gap: 50, - padding: 32, - - [theme.fn.smallerThan('md')]: { - height: 'unset', - }, - }, - - inner: { - display: 'flex', - justifyContent: 'space-between', - alignItems: 'center', - - [theme.fn.smallerThan('md')]: { - flexDirection: 'column', - gap: 50, - }, - }, - - content: { - maxWidth: 480, - marginRight: theme.spacing.xl, - - [theme.fn.smallerThan('md')]: { - marginRight: 0, - }, - }, - - title: { - color: theme.colorScheme === 'dark' ? theme.white : theme.black, - fontSize: 44, - lineHeight: 1.2, - fontWeight: 900, - - [theme.fn.smallerThan('xs')]: { - fontSize: 28, - }, - }, - - highlight: { - position: 'relative', - backgroundColor: theme.fn.variant({ variant: 'light', color: theme.primaryColor }).background!, - borderRadius: theme.radius.sm, - padding: '4px 12px', - }, -})); +import vercelLogo from '../assets/powered-by-vercel.svg'; +import { SyntaxHighlighter } from '~/components/SyntaxHighlighter'; +import { CODE_EXAMPLE } from '~/util/constants'; export default function IndexRoute() { - const { classes } = useStyles(); - const { colorScheme } = useMantineColorScheme(); - return ( - - - - - The <span className={classes.highlight}>most popular</span> way to build Discord <br /> bots. - - +
+
+
+

+ The most popular way to build + Discord
bots. +

+

discord.js is a powerful node.js module that allows you to interact with the Discord API very easily. It takes a much more object-oriented approach than most other JS Discord libraries, making your bot's code significantly tidier and easier to comprehend. - - - - - + - - - - - - - - {`import { Client, GatewayIntentBits } from 'discord.js'; - -const client = new Client({ intents: [GatewayIntentBits.Guilds] }); - -client.on('ready', () => { - console.log(\`Logged in as \${client.user.tag}!\`); -}); - -client.on('interactionCreate', async (interaction) => { - if (!interaction.isChatInputCommand()) return; - - if (interaction.commandName === 'ping') { - await interaction.reply('Pong!'); - } -}); - -await client.login('token');`} - - - -

- - - - - -
- + + Guide + +
+
+ +
+
+ + + +
+ ); } diff --git a/packages/website/src/styles/main.css b/packages/website/src/styles/main.css index 8c7b5733c881..c38c8ea7a205 100644 --- a/packages/website/src/styles/main.css +++ b/packages/website/src/styles/main.css @@ -1,29 +1,43 @@ @import url('https://rsms.me/inter/inter.css'); +:root { + font-family: 'Inter', ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Helvetica Neue; + font-feature-settings: 'cv02', 'cv03', 'cv04', 'cv11'; +} + @supports (font-variation-settings: normal) { - html { - font-family: 'Inter var', sans-serif; - font-feature-settings: 'cv02', 'cv03', 'cv04', 'cv11'; + :root { + font-family: 'Inter var', Arial, Noto Sans, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', Segoe UI Symbol, + 'Noto Color Emoji'; } } html, body { - height: 100vh; - margin: 0; - font-family: 'Inter var', ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, - Helvetica Neue, Arial, Noto Sans, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', Segoe UI Symbol, - 'Noto Color Emoji'; - font-feature-settings: 'cv02', 'cv03', 'cv04', 'cv11'; + height: 100%; } #__next { - max-width: 100%; - max-height: 100%; - width: 100%; height: 100%; } +.light [data-theme='dark'] { + display: none; +} + +.dark [data-theme='light'] { + display: none; +} + +pre[data-theme='light'] { + background: #ffffff; + border: 1px solid #dddddd; +} + +pre[data-theme='dark'] { + background: #1e1e1e; +} + pre { font-size: 13px !important; white-space: pre; @@ -35,10 +49,9 @@ pre { padding: 1em; margin: 0.5em 0; overflow: auto; - background: #1e1e1e; border-radius: 4px; } code { - font-family: 'JetBrains Mono' !important; + font-family: 'JetBrains Mono', monospace !important; } diff --git a/packages/website/src/util/constants.ts b/packages/website/src/util/constants.ts new file mode 100644 index 000000000000..7c1098487d6d --- /dev/null +++ b/packages/website/src/util/constants.ts @@ -0,0 +1,22 @@ +export const PACKAGES = ['builders', 'collection', 'proxy', 'rest', 'voice', 'ws']; + +export const DESCRIPTION = + "discord.js is a powerful node.js module that allows you to interact with the Discord API very easily. It takes a much more object-oriented approach than most other JS Discord libraries, making your bot's code significantly tidier and easier to comprehend."; + +export const CODE_EXAMPLE = `import { Client, GatewayIntentBits } from 'discord.js'; + +const client = new Client({ intents: [GatewayIntentBits.Guilds] }); + +client.on('ready', () => { + console.log(\`Logged in as \${client.user.tag}!\`); +}); + +client.on('interactionCreate', async (interaction) => { + if (!interaction.isChatInputCommand()) return; + + if (interaction.commandName === 'ping') { + await interaction.reply('Pong!'); + } +}); + +await client.login('token');`; diff --git a/packages/website/src/util/packages.ts b/packages/website/src/util/packages.ts deleted file mode 100644 index 8b02eb866936..000000000000 --- a/packages/website/src/util/packages.ts +++ /dev/null @@ -1 +0,0 @@ -export const PACKAGES = ['builders', 'collection', 'proxy', 'rest', 'voice', 'ws']; diff --git a/packages/website/src/util/search.ts b/packages/website/src/util/search.ts deleted file mode 100644 index c48895b9d973..000000000000 --- a/packages/website/src/util/search.ts +++ /dev/null @@ -1,6 +0,0 @@ -import MiniSearch from 'minisearch'; - -export const miniSearch = new MiniSearch({ - fields: ['name', 'summary'], - storeFields: ['name', 'summary', 'path'], -}); diff --git a/packages/website/unocss.config.ts b/packages/website/unocss.config.ts index 7aa53932930f..17086a0abe45 100644 --- a/packages/website/unocss.config.ts +++ b/packages/website/unocss.config.ts @@ -1,10 +1,20 @@ -import presetWebFonts from '@unocss/preset-web-fonts'; -import { defineConfig, presetUno } from 'unocss'; +import { defineConfig, presetTypography, presetUno, presetWebFonts } from 'unocss'; export default defineConfig({ theme: { colors: { - blurple: '#5865F2', + blurple: { + 50: '#e0e3ff', + 100: '#cdd2ff', + 200: '#9ea7ff', + 300: '#7782fa', + DEFAULT: '#5865F2', + 500: '#3d48c3', + 600: '#293294', + 700: '#1a2165', + 800: '#0e1137', + 900: '#020208', + }, }, }, presets: [ @@ -12,7 +22,43 @@ export default defineConfig({ presetWebFonts({ provider: 'google', fonts: { - mono: ['JetBrains Mono', 'JetBrains Mono:400,600'], + mono: ['JetBrains Mono', 'JetBrains Mono:400,600,700'], + }, + }), + presetTypography({ + cssExtend: { + pre: { + padding: '1em', + 'line-height': '1.5', + 'border-radius': '4px', + }, + code: { + 'font-size': '1em', + 'font-weight': 'unset', + }, + ':where(:not(pre) > code)::before': { + content: '""', + }, + ':where(:not(pre) > code)::after': { + content: '""', + }, + a: { + color: '#5865F2', + 'text-decoration': 'none', + }, + 'a > img': { + display: 'inline-block', + }, + h2: { + 'margin-top': '1.25em', + }, + h3: { + 'margin-top': '0.75em', + }, + // eslint-disable-next-line id-length + p: { + margin: '.5em 0', + }, }, }), ], diff --git a/packages/ws/package.json b/packages/ws/package.json index ac2aab165bbb..ea685bfe11eb 100644 --- a/packages/ws/package.json +++ b/packages/ws/package.json @@ -65,8 +65,8 @@ "@discordjs/docgen": "workspace:^", "@favware/cliff-jumper": "^1.8.7", "@microsoft/api-extractor": "^7.30.0", - "@types/node": "^16.11.56", - "@vitest/coverage-c8": "^0.23.0", + "@types/node": "^16.11.57", + "@vitest/coverage-c8": "^0.23.1", "downlevel-dts": "^0.10.1", "eslint": "^8.23.0", "eslint-config-neon": "^0.1.33", @@ -75,7 +75,7 @@ "tsup": "^6.2.3", "typescript": "^4.8.2", "undici": "^5.10.0", - "vitest": "^0.23.0", + "vitest": "^0.23.1", "zlib-sync": "^0.1.7" }, "engines": { diff --git a/yarn.lock b/yarn.lock index 597ee31b5cc7..751ec1956c8b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -128,7 +128,14 @@ __metadata: languageName: node linkType: hard -"@babel/core@npm:^7.11.6, @babel/core@npm:^7.12.3, @babel/core@npm:^7.18.10, @babel/core@npm:^7.18.13": +"@babel/compat-data@npm:^7.19.0": + version: 7.19.0 + resolution: "@babel/compat-data@npm:7.19.0" + checksum: f90d25a3779578c230ad0632e12ffd5ee1033614dee2786f7f1567823a78923da7185638eedd7166f31e4771a3398ae6a28ab8e680b96cc25bafb38a3b66ff11 + languageName: node + linkType: hard + +"@babel/core@npm:^7.11.6, @babel/core@npm:^7.12.3, @babel/core@npm:^7.18.13": version: 7.18.13 resolution: "@babel/core@npm:7.18.13" dependencies: @@ -151,6 +158,29 @@ __metadata: languageName: node linkType: hard +"@babel/core@npm:^7.19.0": + version: 7.19.0 + resolution: "@babel/core@npm:7.19.0" + dependencies: + "@ampproject/remapping": ^2.1.0 + "@babel/code-frame": ^7.18.6 + "@babel/generator": ^7.19.0 + "@babel/helper-compilation-targets": ^7.19.0 + "@babel/helper-module-transforms": ^7.19.0 + "@babel/helpers": ^7.19.0 + "@babel/parser": ^7.19.0 + "@babel/template": ^7.18.10 + "@babel/traverse": ^7.19.0 + "@babel/types": ^7.19.0 + convert-source-map: ^1.7.0 + debug: ^4.1.0 + gensync: ^1.0.0-beta.2 + json5: ^2.2.1 + semver: ^6.3.0 + checksum: 0d5b52b552e215802d2fd7b266611c390d90b28dece09db8a142666c32928c5d404eb72a95630b4cb726c4d80a53fcdc2d6464cd7ad28bb26087475f1b2205e2 + languageName: node + linkType: hard + "@babel/generator@npm:^7.18.13, @babel/generator@npm:^7.7.2": version: 7.18.13 resolution: "@babel/generator@npm:7.18.13" @@ -162,6 +192,17 @@ __metadata: languageName: node linkType: hard +"@babel/generator@npm:^7.19.0": + version: 7.19.0 + resolution: "@babel/generator@npm:7.19.0" + dependencies: + "@babel/types": ^7.19.0 + "@jridgewell/gen-mapping": ^0.3.2 + jsesc: ^2.5.1 + checksum: aa3d5785cf8f8e81672dcc61aef351188efeadb20d9f66d79113d82cbcf3bbbdeb829989fa14582108572ddbc4e4027bdceb06ccaf5ec40fa93c2dda8fbcd4aa + languageName: node + linkType: hard + "@babel/helper-annotate-as-pure@npm:^7.18.6": version: 7.18.6 resolution: "@babel/helper-annotate-as-pure@npm:7.18.6" @@ -195,6 +236,20 @@ __metadata: languageName: node linkType: hard +"@babel/helper-compilation-targets@npm:^7.19.0": + version: 7.19.0 + resolution: "@babel/helper-compilation-targets@npm:7.19.0" + dependencies: + "@babel/compat-data": ^7.19.0 + "@babel/helper-validator-option": ^7.18.6 + browserslist: ^4.20.2 + semver: ^6.3.0 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 5f1be9811d53a5e43eb4b9b402517dec79bfa3a55e9fbc131a106914a78b435bc08a4b35591e424665c36c2c1eceb864ec2ca2c2f3dcf240a1551a28530428f9 + languageName: node + linkType: hard + "@babel/helper-create-class-features-plugin@npm:^7.18.6, @babel/helper-create-class-features-plugin@npm:^7.18.9": version: 7.18.13 resolution: "@babel/helper-create-class-features-plugin@npm:7.18.13" @@ -224,6 +279,18 @@ __metadata: languageName: node linkType: hard +"@babel/helper-create-regexp-features-plugin@npm:^7.19.0": + version: 7.19.0 + resolution: "@babel/helper-create-regexp-features-plugin@npm:7.19.0" + dependencies: + "@babel/helper-annotate-as-pure": ^7.18.6 + regexpu-core: ^5.1.0 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 811cc90afe9fc25a74ed37fc0c1361a4a91b0b940235dd3958e3f03b366d40a903b40fc93b51bcb93be774aba573219f8f215664bea1d1301f58797ca6854f3f + languageName: node + linkType: hard + "@babel/helper-define-polyfill-provider@npm:^0.3.2": version: 0.3.2 resolution: "@babel/helper-define-polyfill-provider@npm:0.3.2" @@ -266,6 +333,16 @@ __metadata: languageName: node linkType: hard +"@babel/helper-function-name@npm:^7.19.0": + version: 7.19.0 + resolution: "@babel/helper-function-name@npm:7.19.0" + dependencies: + "@babel/template": ^7.18.10 + "@babel/types": ^7.19.0 + checksum: eac1f5db428ba546270c2b8d750c24eb528b8fcfe50c81de2e0bdebf0e20f24bec688d4331533b782e4a907fad435244621ca2193cfcf80a86731299840e0f6e + languageName: node + linkType: hard + "@babel/helper-hoist-variables@npm:^7.18.6": version: 7.18.6 resolution: "@babel/helper-hoist-variables@npm:7.18.6" @@ -284,7 +361,7 @@ __metadata: languageName: node linkType: hard -"@babel/helper-module-imports@npm:^7.16.7, @babel/helper-module-imports@npm:^7.18.6": +"@babel/helper-module-imports@npm:^7.18.6": version: 7.18.6 resolution: "@babel/helper-module-imports@npm:7.18.6" dependencies: @@ -309,6 +386,22 @@ __metadata: languageName: node linkType: hard +"@babel/helper-module-transforms@npm:^7.19.0": + version: 7.19.0 + resolution: "@babel/helper-module-transforms@npm:7.19.0" + dependencies: + "@babel/helper-environment-visitor": ^7.18.9 + "@babel/helper-module-imports": ^7.18.6 + "@babel/helper-simple-access": ^7.18.6 + "@babel/helper-split-export-declaration": ^7.18.6 + "@babel/helper-validator-identifier": ^7.18.6 + "@babel/template": ^7.18.10 + "@babel/traverse": ^7.19.0 + "@babel/types": ^7.19.0 + checksum: 4483276c66f56cf3b5b063634092ad9438c2593725de5c143ba277dda82f1501e6d73b311c1b28036f181dbe36eaeff29f24726cde37a599d4e735af294e5359 + languageName: node + linkType: hard + "@babel/helper-optimise-call-expression@npm:^7.18.6": version: 7.18.6 resolution: "@babel/helper-optimise-call-expression@npm:7.18.6" @@ -325,6 +418,13 @@ __metadata: languageName: node linkType: hard +"@babel/helper-plugin-utils@npm:^7.19.0": + version: 7.19.0 + resolution: "@babel/helper-plugin-utils@npm:7.19.0" + checksum: eedc996c633c8c207921c26ec2989eae0976336ecd9b9f1ac526498f52b5d136f7cd03c32b6fdf8d46a426f907c142de28592f383c42e5fba1e904cbffa05345 + languageName: node + linkType: hard + "@babel/helper-remap-async-to-generator@npm:^7.18.6, @babel/helper-remap-async-to-generator@npm:^7.18.9": version: 7.18.9 resolution: "@babel/helper-remap-async-to-generator@npm:7.18.9" @@ -423,6 +523,17 @@ __metadata: languageName: node linkType: hard +"@babel/helpers@npm:^7.19.0": + version: 7.19.0 + resolution: "@babel/helpers@npm:7.19.0" + dependencies: + "@babel/template": ^7.18.10 + "@babel/traverse": ^7.19.0 + "@babel/types": ^7.19.0 + checksum: e50e78e0dbb0435075fa3f85021a6bcae529589800bca0292721afd7f7c874bea54508d6dc57eca16e5b8224f8142c6b0e32e3b0140029dc09865da747da4623 + languageName: node + linkType: hard + "@babel/highlight@npm:^7.18.6": version: 7.18.6 resolution: "@babel/highlight@npm:7.18.6" @@ -443,6 +554,15 @@ __metadata: languageName: node linkType: hard +"@babel/parser@npm:^7.19.0": + version: 7.19.0 + resolution: "@babel/parser@npm:7.19.0" + bin: + parser: ./bin/babel-parser.js + checksum: af86d829bfeb60e0dcf54a43489c2514674b6c8d9bb24cf112706772125752fcd517877ad30501d533fa85f70a439d02eebeec3be9c2e95499853367184e0da7 + languageName: node + linkType: hard + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:^7.18.6": version: 7.18.6 resolution: "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:7.18.6" @@ -467,17 +587,17 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-proposal-async-generator-functions@npm:^7.18.10": - version: 7.18.10 - resolution: "@babel/plugin-proposal-async-generator-functions@npm:7.18.10" +"@babel/plugin-proposal-async-generator-functions@npm:^7.19.0": + version: 7.19.0 + resolution: "@babel/plugin-proposal-async-generator-functions@npm:7.19.0" dependencies: "@babel/helper-environment-visitor": ^7.18.9 - "@babel/helper-plugin-utils": ^7.18.9 + "@babel/helper-plugin-utils": ^7.19.0 "@babel/helper-remap-async-to-generator": ^7.18.9 "@babel/plugin-syntax-async-generators": ^7.8.4 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 3a6c25085021053830f6c57780118d3337935ac3309eef7f09b11e413d189eed8119d50cbddeb4c8c02f42f8cc01e62a4667b869be6e158f40030bafb92a0629 + checksum: f1876286d608650928f60ac6091b9a6e7839e005941be483df47693b98c90649202aa1793f28f6e9b4ce69bf0773552144fa40f38751f56dc5d02051a8ee0461 languageName: node linkType: hard @@ -755,7 +875,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-jsx@npm:^7.17.12, @babel/plugin-syntax-jsx@npm:^7.18.6, @babel/plugin-syntax-jsx@npm:^7.7.2": +"@babel/plugin-syntax-jsx@npm:^7.18.6, @babel/plugin-syntax-jsx@npm:^7.7.2": version: 7.18.6 resolution: "@babel/plugin-syntax-jsx@npm:7.18.6" dependencies: @@ -911,21 +1031,22 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-classes@npm:^7.18.9": - version: 7.18.9 - resolution: "@babel/plugin-transform-classes@npm:7.18.9" +"@babel/plugin-transform-classes@npm:^7.19.0": + version: 7.19.0 + resolution: "@babel/plugin-transform-classes@npm:7.19.0" dependencies: "@babel/helper-annotate-as-pure": ^7.18.6 + "@babel/helper-compilation-targets": ^7.19.0 "@babel/helper-environment-visitor": ^7.18.9 - "@babel/helper-function-name": ^7.18.9 + "@babel/helper-function-name": ^7.19.0 "@babel/helper-optimise-call-expression": ^7.18.6 - "@babel/helper-plugin-utils": ^7.18.9 + "@babel/helper-plugin-utils": ^7.19.0 "@babel/helper-replace-supers": ^7.18.9 "@babel/helper-split-export-declaration": ^7.18.6 globals: ^11.1.0 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: d7e953c0cf32af64e75db1277d2556c04635f32691ef462436897840be6f8021d4f85ee96134cb796a12dda549cf53346fedf96b671885f881bc4037c9d120ad + checksum: 5500953031fc3eae73f717c7b59ef406158a4a710d566a0f78a4944240bcf98f817f07cf1d6af0e749e21f0dfee29c36412b75d57b0a753c3ad823b70c596b79 languageName: node linkType: hard @@ -940,7 +1061,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-destructuring@npm:^7.18.9": +"@babel/plugin-transform-destructuring@npm:^7.18.13": version: 7.18.13 resolution: "@babel/plugin-transform-destructuring@npm:7.18.13" dependencies: @@ -1059,18 +1180,18 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-modules-systemjs@npm:^7.18.9": - version: 7.18.9 - resolution: "@babel/plugin-transform-modules-systemjs@npm:7.18.9" +"@babel/plugin-transform-modules-systemjs@npm:^7.19.0": + version: 7.19.0 + resolution: "@babel/plugin-transform-modules-systemjs@npm:7.19.0" dependencies: "@babel/helper-hoist-variables": ^7.18.6 - "@babel/helper-module-transforms": ^7.18.9 - "@babel/helper-plugin-utils": ^7.18.9 + "@babel/helper-module-transforms": ^7.19.0 + "@babel/helper-plugin-utils": ^7.19.0 "@babel/helper-validator-identifier": ^7.18.6 babel-plugin-dynamic-import-node: ^2.3.3 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 6122d9901ed5dc56d9db843efc9249fe20d769a11989bbbf5a806ed4f086def949185198aa767888481babf70fc52b6b3e297a991e2b02b4f34ffb03d998d1e3 + checksum: a0742deee4a076d6fc303d036c1ea2bea9b7d91af390483fe91fc415f9cb43925bb5dd930fdcb8fcdc9d4c7a22774a3cec521c67f1422a9b473debcb85ee57f9 languageName: node linkType: hard @@ -1086,15 +1207,15 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-named-capturing-groups-regex@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/plugin-transform-named-capturing-groups-regex@npm:7.18.6" +"@babel/plugin-transform-named-capturing-groups-regex@npm:^7.19.0": + version: 7.19.0 + resolution: "@babel/plugin-transform-named-capturing-groups-regex@npm:7.19.0" dependencies: - "@babel/helper-create-regexp-features-plugin": ^7.18.6 - "@babel/helper-plugin-utils": ^7.18.6 + "@babel/helper-create-regexp-features-plugin": ^7.19.0 + "@babel/helper-plugin-utils": ^7.19.0 peerDependencies: "@babel/core": ^7.0.0 - checksum: 6ef64aa3dad68df139eeaa7b6e9bb626be8f738ed5ed4db765d516944b1456d513b6bad3bb60fff22babe73de26436fd814a4228705b2d3d2fdb272c31da35e2 + checksum: 60f7b2c537fa3e8392f19b1f1026ba68844c5dc7942867e7a96a636d8a52d4766629b898e59aa690d3806bf02a7fa52e12d1f7c1ca2ef4fa2b53f3fe0a835117 languageName: node linkType: hard @@ -1225,15 +1346,15 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-spread@npm:^7.18.9": - version: 7.18.9 - resolution: "@babel/plugin-transform-spread@npm:7.18.9" +"@babel/plugin-transform-spread@npm:^7.19.0": + version: 7.19.0 + resolution: "@babel/plugin-transform-spread@npm:7.19.0" dependencies: - "@babel/helper-plugin-utils": ^7.18.9 + "@babel/helper-plugin-utils": ^7.19.0 "@babel/helper-skip-transparent-expression-wrappers": ^7.18.9 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 59489dd6212bd21debdf77746d9fa02dfe36f7062dc08742b8841d04312a26ea37bc0d71c71a6e37c3ab81dce744faa7f23fa94b0915593458f6adc35c087766 + checksum: e73a4deb095999185e70b524d0ff4e35df50fcda58299e700a6149a15bbc1a9b369ef1cef384e15a54b3c3ce316cc0f054dbf249dcd0d1ca59f4281dd4df9718 languageName: node linkType: hard @@ -1306,17 +1427,17 @@ __metadata: languageName: node linkType: hard -"@babel/preset-env@npm:^7.18.10": - version: 7.18.10 - resolution: "@babel/preset-env@npm:7.18.10" +"@babel/preset-env@npm:^7.19.0": + version: 7.19.0 + resolution: "@babel/preset-env@npm:7.19.0" dependencies: - "@babel/compat-data": ^7.18.8 - "@babel/helper-compilation-targets": ^7.18.9 - "@babel/helper-plugin-utils": ^7.18.9 + "@babel/compat-data": ^7.19.0 + "@babel/helper-compilation-targets": ^7.19.0 + "@babel/helper-plugin-utils": ^7.19.0 "@babel/helper-validator-option": ^7.18.6 "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": ^7.18.6 "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": ^7.18.9 - "@babel/plugin-proposal-async-generator-functions": ^7.18.10 + "@babel/plugin-proposal-async-generator-functions": ^7.19.0 "@babel/plugin-proposal-class-properties": ^7.18.6 "@babel/plugin-proposal-class-static-block": ^7.18.6 "@babel/plugin-proposal-dynamic-import": ^7.18.6 @@ -1350,9 +1471,9 @@ __metadata: "@babel/plugin-transform-async-to-generator": ^7.18.6 "@babel/plugin-transform-block-scoped-functions": ^7.18.6 "@babel/plugin-transform-block-scoping": ^7.18.9 - "@babel/plugin-transform-classes": ^7.18.9 + "@babel/plugin-transform-classes": ^7.19.0 "@babel/plugin-transform-computed-properties": ^7.18.9 - "@babel/plugin-transform-destructuring": ^7.18.9 + "@babel/plugin-transform-destructuring": ^7.18.13 "@babel/plugin-transform-dotall-regex": ^7.18.6 "@babel/plugin-transform-duplicate-keys": ^7.18.9 "@babel/plugin-transform-exponentiation-operator": ^7.18.6 @@ -1362,9 +1483,9 @@ __metadata: "@babel/plugin-transform-member-expression-literals": ^7.18.6 "@babel/plugin-transform-modules-amd": ^7.18.6 "@babel/plugin-transform-modules-commonjs": ^7.18.6 - "@babel/plugin-transform-modules-systemjs": ^7.18.9 + "@babel/plugin-transform-modules-systemjs": ^7.19.0 "@babel/plugin-transform-modules-umd": ^7.18.6 - "@babel/plugin-transform-named-capturing-groups-regex": ^7.18.6 + "@babel/plugin-transform-named-capturing-groups-regex": ^7.19.0 "@babel/plugin-transform-new-target": ^7.18.6 "@babel/plugin-transform-object-super": ^7.18.6 "@babel/plugin-transform-parameters": ^7.18.8 @@ -1372,14 +1493,14 @@ __metadata: "@babel/plugin-transform-regenerator": ^7.18.6 "@babel/plugin-transform-reserved-words": ^7.18.6 "@babel/plugin-transform-shorthand-properties": ^7.18.6 - "@babel/plugin-transform-spread": ^7.18.9 + "@babel/plugin-transform-spread": ^7.19.0 "@babel/plugin-transform-sticky-regex": ^7.18.6 "@babel/plugin-transform-template-literals": ^7.18.9 "@babel/plugin-transform-typeof-symbol": ^7.18.9 "@babel/plugin-transform-unicode-escapes": ^7.18.10 "@babel/plugin-transform-unicode-regex": ^7.18.6 "@babel/preset-modules": ^0.1.5 - "@babel/types": ^7.18.10 + "@babel/types": ^7.19.0 babel-plugin-polyfill-corejs2: ^0.3.2 babel-plugin-polyfill-corejs3: ^0.5.3 babel-plugin-polyfill-regenerator: ^0.4.0 @@ -1387,7 +1508,7 @@ __metadata: semver: ^6.3.0 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 36eeb7157021091c8047703833b7a28e4963865d16968a5b9dbffe1eb05e44307a8d29ad45d81fd23817f68290b52921c42f513a93996c7083d23d5e2cea0c6b + checksum: ae1866b9a6c9749d52618f39aab8c369e0d6dc88e327341fae932411a0d51db2ec51b882cebc62ff3d49443261a6940e3fc03762ff3925d165884e7990eb612c languageName: node linkType: hard @@ -1429,7 +1550,7 @@ __metadata: languageName: node linkType: hard -"@babel/runtime@npm:^7.10.2, @babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.13.10, @babel/runtime@npm:^7.18.3, @babel/runtime@npm:^7.18.9, @babel/runtime@npm:^7.3.1, @babel/runtime@npm:^7.8.4": +"@babel/runtime@npm:^7.1.2, @babel/runtime@npm:^7.10.2, @babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.18.9, @babel/runtime@npm:^7.3.1, @babel/runtime@npm:^7.8.4": version: 7.18.9 resolution: "@babel/runtime@npm:7.18.9" dependencies: @@ -1467,6 +1588,24 @@ __metadata: languageName: node linkType: hard +"@babel/traverse@npm:^7.19.0": + version: 7.19.0 + resolution: "@babel/traverse@npm:7.19.0" + dependencies: + "@babel/code-frame": ^7.18.6 + "@babel/generator": ^7.19.0 + "@babel/helper-environment-visitor": ^7.18.9 + "@babel/helper-function-name": ^7.19.0 + "@babel/helper-hoist-variables": ^7.18.6 + "@babel/helper-split-export-declaration": ^7.18.6 + "@babel/parser": ^7.19.0 + "@babel/types": ^7.19.0 + debug: ^4.1.0 + globals: ^11.1.0 + checksum: dcbd1316c9f4bf3cefee45b6f5194590563aa5d123500a60d3c8d714bef279205014c8e599ebafc469967199a7622e1444cd0235c16d4243da437e3f1281771e + languageName: node + linkType: hard + "@babel/types@npm:^7.0.0, @babel/types@npm:^7.10.3, @babel/types@npm:^7.18.10, @babel/types@npm:^7.18.13, @babel/types@npm:^7.18.6, @babel/types@npm:^7.18.9, @babel/types@npm:^7.3.0, @babel/types@npm:^7.3.3, @babel/types@npm:^7.4.4, @babel/types@npm:^7.8.3": version: 7.18.13 resolution: "@babel/types@npm:7.18.13" @@ -1478,6 +1617,17 @@ __metadata: languageName: node linkType: hard +"@babel/types@npm:^7.19.0": + version: 7.19.0 + resolution: "@babel/types@npm:7.19.0" + dependencies: + "@babel/helper-string-parser": ^7.18.10 + "@babel/helper-validator-identifier": ^7.18.6 + to-fast-properties: ^2.0.0 + checksum: 9b346715a68aeede70ba9c685a144b0b26c53bcd595d448e24c8fa8df4d5956a5712e56ebadb7c85dcc32f218ee42788e37b93d50d3295c992072224cb3ef3fe + languageName: node + linkType: hard + "@bcoe/v8-coverage@npm:^0.2.3": version: 0.2.3 resolution: "@bcoe/v8-coverage@npm:0.2.3" @@ -1731,15 +1881,15 @@ __metadata: resolution: "@discordjs/actions@workspace:packages/actions" dependencies: "@actions/core": ^1.9.1 - "@types/node": ^16.11.56 - "@vitest/coverage-c8": ^0.23.0 + "@types/node": ^16.11.57 + "@vitest/coverage-c8": ^0.23.1 eslint: ^8.23.0 eslint-config-neon: ^0.1.33 prettier: ^2.7.1 tslib: ^2.4.0 tsup: ^6.2.3 typescript: ^4.8.2 - vitest: ^0.23.0 + vitest: ^0.23.1 languageName: unknown linkType: soft @@ -1749,7 +1899,7 @@ __metadata: dependencies: "@microsoft/api-extractor-model": 7.24.0 "@microsoft/tsdoc": ^0.14.1 - "@types/node": ^16.11.56 + "@types/node": ^16.11.57 eslint: ^8.23.0 eslint-config-neon: ^0.1.33 prettier: ^2.7.1 @@ -1766,8 +1916,8 @@ __metadata: "@favware/cliff-jumper": ^1.8.7 "@microsoft/api-extractor": ^7.30.0 "@sapphire/shapeshift": ^3.6.0 - "@types/node": ^16.11.56 - "@vitest/coverage-c8": ^0.23.0 + "@types/node": ^16.11.57 + "@vitest/coverage-c8": ^0.23.1 discord-api-types: ^0.37.5 downlevel-dts: ^0.10.1 eslint: ^8.23.0 @@ -1778,7 +1928,7 @@ __metadata: tslib: ^2.4.0 tsup: ^6.2.3 typescript: ^4.8.2 - vitest: ^0.23.0 + vitest: ^0.23.1 languageName: unknown linkType: soft @@ -1789,15 +1939,15 @@ __metadata: "@discordjs/docgen": "workspace:^" "@favware/cliff-jumper": ^1.8.7 "@microsoft/api-extractor": ^7.30.0 - "@types/node": ^16.11.56 - "@vitest/coverage-c8": ^0.23.0 + "@types/node": ^16.11.57 + "@vitest/coverage-c8": ^0.23.1 downlevel-dts: ^0.10.1 eslint: ^8.23.0 eslint-config-neon: ^0.1.33 prettier: ^2.7.1 tsup: ^6.2.3 typescript: ^4.8.2 - vitest: ^0.23.0 + vitest: ^0.23.1 languageName: unknown linkType: soft @@ -1825,7 +1975,7 @@ __metadata: dependencies: "@favware/cliff-jumper": ^1.8.7 "@types/jsdoc-to-markdown": ^7.0.3 - "@types/node": ^16.11.56 + "@types/node": ^16.11.57 commander: ^9.4.0 eslint: ^8.23.0 eslint-config-neon: ^0.1.33 @@ -1846,7 +1996,7 @@ __metadata: dependencies: "@discordjs/proxy": ^1.1.0 "@discordjs/rest": ^1.1.0 - "@types/node": ^16.11.56 + "@types/node": ^16.11.57 eslint: ^8.23.0 eslint-config-neon: ^0.1.33 prettier: ^2.7.1 @@ -1864,9 +2014,9 @@ __metadata: "@discordjs/rest": ^1.0.0 "@favware/cliff-jumper": ^1.8.7 "@microsoft/api-extractor": ^7.30.0 - "@types/node": ^16.11.56 + "@types/node": ^16.11.57 "@types/supertest": ^2.0.12 - "@vitest/coverage-c8": ^0.23.0 + "@vitest/coverage-c8": ^0.23.1 downlevel-dts: ^0.10.1 eslint: ^8.23.0 eslint-config-neon: ^0.1.33 @@ -1876,7 +2026,7 @@ __metadata: tsup: ^6.2.3 typescript: ^4.8.2 undici: ^5.10.0 - vitest: ^0.23.0 + vitest: ^0.23.1 languageName: unknown linkType: soft @@ -1890,8 +2040,8 @@ __metadata: "@microsoft/api-extractor": ^7.30.0 "@sapphire/async-queue": ^1.5.0 "@sapphire/snowflake": ^3.2.2 - "@types/node": ^16.11.56 - "@vitest/coverage-c8": ^0.23.0 + "@types/node": ^16.11.57 + "@vitest/coverage-c8": ^0.23.1 discord-api-types: ^0.37.5 downlevel-dts: ^0.10.1 eslint: ^8.23.0 @@ -1902,7 +2052,7 @@ __metadata: tsup: ^6.2.3 typescript: ^4.8.2 undici: ^5.10.0 - vitest: ^0.23.0 + vitest: ^0.23.1 languageName: unknown linkType: soft @@ -1914,8 +2064,8 @@ __metadata: "@microsoft/api-extractor-model": 7.24.0 "@microsoft/tsdoc": ^0.14.1 "@microsoft/tsdoc-config": 0.16.1 - "@types/node": ^16.11.56 - "@vitest/coverage-c8": ^0.23.0 + "@types/node": ^16.11.57 + "@vitest/coverage-c8": ^0.23.1 commander: ^9.4.0 eslint: ^8.23.0 eslint-config-neon: ^0.1.33 @@ -1924,7 +2074,7 @@ __metadata: tsup: ^6.2.3 typescript: ^4.8.2 undici: ^5.10.0 - vitest: ^0.23.0 + vitest: ^0.23.1 languageName: unknown linkType: soft @@ -1932,14 +2082,14 @@ __metadata: version: 0.0.0-use.local resolution: "@discordjs/voice@workspace:packages/voice" dependencies: - "@babel/core": ^7.18.13 - "@babel/preset-env": ^7.18.10 + "@babel/core": ^7.19.0 + "@babel/preset-env": ^7.19.0 "@babel/preset-typescript": ^7.18.6 "@discordjs/docgen": "workspace:^" "@favware/cliff-jumper": ^1.8.7 "@microsoft/api-extractor": ^7.30.0 "@types/jest": ^29.0.0 - "@types/node": ^16.11.56 + "@types/node": ^16.11.57 "@types/ws": ^8.5.3 discord-api-types: ^0.37.5 downlevel-dts: ^0.10.1 @@ -1964,26 +2114,19 @@ __metadata: dependencies: "@discordjs/api-extractor-utils": "workspace:^" "@discordjs/scripts": "workspace:^" - "@emotion/react": ^11.10.4 - "@emotion/server": ^11.10.0 - "@mantine/core": ^5.2.5 - "@mantine/hooks": ^5.2.5 - "@mantine/next": ^5.2.5 - "@mantine/nprogress": ^5.2.5 - "@mantine/spotlight": ^5.2.5 "@microsoft/api-extractor-model": 7.24.0 "@microsoft/tsdoc": 0.14.1 "@testing-library/react": ^13.4.0 "@testing-library/user-event": ^14.4.3 - "@types/node": ^16.11.56 + "@types/node": ^16.11.57 "@types/react-dom": ^18.0.6 "@types/react-syntax-highlighter": ^15.5.5 "@unocss/cli": ^0.45.15 - "@unocss/preset-web-fonts": ^0.45.15 "@unocss/reset": ^0.45.15 - "@vitejs/plugin-react": ^2.0.1 - "@vitest/coverage-c8": ^0.23.0 + "@vitejs/plugin-react": ^2.1.0 + "@vitest/coverage-c8": ^0.23.1 "@vscode/codicons": ^0.0.32 + ariakit: ^2.0.0-next.41 concurrently: ^7.3.0 eslint: ^8.23.0 eslint-config-neon: ^0.1.33 @@ -1991,23 +2134,28 @@ __metadata: minisearch: ^5.0.0 next: ^12.2.5 next-mdx-remote: ^4.1.0 + next-progress: ^2.2.0 + next-themes: ^0.2.0 prettier: ^2.7.1 + prettier-plugin-tailwindcss: ^0.1.13 react: ^18.2.0 + react-custom-scrollbars-2: ^4.5.0 react-dom: ^18.2.0 react-icons: ^4.4.0 react-syntax-highlighter: ^15.5.0 + react-use: ^17.4.0 rehype-ignore: ^1.0.1 rehype-pretty-code: ^0.3.2 rehype-raw: ^6.1.1 rehype-slug: ^5.0.1 remark-gfm: ^3.0.1 - sharp: ^0.30.7 + sharp: ^0.31.0 shiki: ^0.11.1 swr: ^1.3.0 typescript: ^4.8.2 unocss: ^0.45.15 vercel: ^28.2.2 - vitest: ^0.23.0 + vitest: ^0.23.1 languageName: unknown linkType: soft @@ -2021,9 +2169,9 @@ __metadata: "@favware/cliff-jumper": ^1.8.7 "@microsoft/api-extractor": ^7.30.0 "@sapphire/async-queue": ^1.5.0 - "@types/node": ^16.11.56 + "@types/node": ^16.11.57 "@types/ws": ^8.5.3 - "@vitest/coverage-c8": ^0.23.0 + "@vitest/coverage-c8": ^0.23.1 "@vladfrangu/async_event_emitter": ^2.0.1 discord-api-types: ^0.37.5 downlevel-dts: ^0.10.1 @@ -2035,7 +2183,7 @@ __metadata: tsup: ^6.2.3 typescript: ^4.8.2 undici: ^5.10.0 - vitest: ^0.23.0 + vitest: ^0.23.1 ws: ^8.8.1 zlib-sync: ^0.1.7 languageName: unknown @@ -2073,146 +2221,6 @@ __metadata: languageName: node linkType: hard -"@emotion/babel-plugin@npm:^11.10.0": - version: 11.10.2 - resolution: "@emotion/babel-plugin@npm:11.10.2" - dependencies: - "@babel/helper-module-imports": ^7.16.7 - "@babel/plugin-syntax-jsx": ^7.17.12 - "@babel/runtime": ^7.18.3 - "@emotion/hash": ^0.9.0 - "@emotion/memoize": ^0.8.0 - "@emotion/serialize": ^1.1.0 - babel-plugin-macros: ^3.1.0 - convert-source-map: ^1.5.0 - escape-string-regexp: ^4.0.0 - find-root: ^1.1.0 - source-map: ^0.5.7 - stylis: 4.0.13 - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 7f9e84b3c00b4db5a829c6880549c6a816b3defcaf828cb37808737f3c17b22a45a06e48334f38f5729b218812252857ced27d3a12dd8ca1e260e4b1d0045dfd - languageName: node - linkType: hard - -"@emotion/cache@npm:^11.10.0": - version: 11.10.3 - resolution: "@emotion/cache@npm:11.10.3" - dependencies: - "@emotion/memoize": ^0.8.0 - "@emotion/sheet": ^1.2.0 - "@emotion/utils": ^1.2.0 - "@emotion/weak-memoize": ^0.3.0 - stylis: 4.0.13 - checksum: d31291eff1b270d8db6f471b2b9b3bc5d786c296838631f101837747ff5afa8e8890655279457c68ce2cee23256ab02a25c177f5487b5061da82c7354c1bdce5 - languageName: node - linkType: hard - -"@emotion/hash@npm:^0.9.0": - version: 0.9.0 - resolution: "@emotion/hash@npm:0.9.0" - checksum: b63428f7c8186607acdca5d003700cecf0ded519d0b5c5cc3b3154eafcad6ff433f8361bd2bac8882715b557e6f06945694aeb6ba8b25c6095d7a88570e2e0bb - languageName: node - linkType: hard - -"@emotion/memoize@npm:^0.8.0": - version: 0.8.0 - resolution: "@emotion/memoize@npm:0.8.0" - checksum: c87bb110b829edd8e1c13b90a6bc37cebc39af29c7599a1e66a48e06f9bec43e8e53495ba86278cc52e7589549492c8dfdc81d19f4fdec0cee6ba13d2ad2c928 - languageName: node - linkType: hard - -"@emotion/react@npm:^11.10.4": - version: 11.10.4 - resolution: "@emotion/react@npm:11.10.4" - dependencies: - "@babel/runtime": ^7.18.3 - "@emotion/babel-plugin": ^11.10.0 - "@emotion/cache": ^11.10.0 - "@emotion/serialize": ^1.1.0 - "@emotion/use-insertion-effect-with-fallbacks": ^1.0.0 - "@emotion/utils": ^1.2.0 - "@emotion/weak-memoize": ^0.3.0 - hoist-non-react-statics: ^3.3.1 - peerDependencies: - "@babel/core": ^7.0.0 - react: ">=16.8.0" - peerDependenciesMeta: - "@babel/core": - optional: true - "@types/react": - optional: true - checksum: 7555f6a1840c71d841386be2ec98ebfd6399923bd6a61247c7b07283f9a056f57e83c4fdd9ea7a7fcc3d88e5e04bb03168b4f0557934bcd501c88af4db16e1e0 - languageName: node - linkType: hard - -"@emotion/serialize@npm:^1.1.0": - version: 1.1.0 - resolution: "@emotion/serialize@npm:1.1.0" - dependencies: - "@emotion/hash": ^0.9.0 - "@emotion/memoize": ^0.8.0 - "@emotion/unitless": ^0.8.0 - "@emotion/utils": ^1.2.0 - csstype: ^3.0.2 - checksum: 8f22f83194ad76cb3bbee481daa57fdc65ca3078a5db9e219c04151341ef93af80c7057aea17b64446682d275918f7ecc0c20e977c1af153c79a1485503fe717 - languageName: node - linkType: hard - -"@emotion/server@npm:^11.10.0": - version: 11.10.0 - resolution: "@emotion/server@npm:11.10.0" - dependencies: - "@emotion/utils": ^1.2.0 - html-tokenize: ^2.0.0 - multipipe: ^1.0.2 - through: ^2.3.8 - peerDependencies: - "@emotion/css": ^11.0.0-rc.0 - peerDependenciesMeta: - "@emotion/css": - optional: true - checksum: 15b7135a578630e36f551b8856d658a50876fb62fe042819ad57895adaf45b79e2d21b3464f1874319f48b5f6209ce09dd387ce1df6aea6f98a20c43a78221b2 - languageName: node - linkType: hard - -"@emotion/sheet@npm:^1.2.0": - version: 1.2.0 - resolution: "@emotion/sheet@npm:1.2.0" - checksum: b3771e47963d36c179f9a1119055d7e5d18e2718e73ebe2b4b1c56f4bbf4ea6b12c50bbc52cd502f03f7981beb2fbb3fee2638b6f5ef6c5f223b06f8bf88ec7b - languageName: node - linkType: hard - -"@emotion/unitless@npm:^0.8.0": - version: 0.8.0 - resolution: "@emotion/unitless@npm:0.8.0" - checksum: 176141117ed23c0eb6e53a054a69c63e17ae532ec4210907a20b2208f91771821835f1c63dd2ec63e30e22fcc984026d7f933773ee6526dd038e0850919fae7a - languageName: node - linkType: hard - -"@emotion/use-insertion-effect-with-fallbacks@npm:^1.0.0": - version: 1.0.0 - resolution: "@emotion/use-insertion-effect-with-fallbacks@npm:1.0.0" - peerDependencies: - react: ">=16.8.0" - checksum: 4f06a3b48258c832aa8022a262572061a31ff078d377e9164cccc99951309d70f4466e774fe704461b2f8715007a82ed625a54a5c7a127c89017d3ce3187d4f1 - languageName: node - linkType: hard - -"@emotion/utils@npm:^1.2.0": - version: 1.2.0 - resolution: "@emotion/utils@npm:1.2.0" - checksum: 55457a49ddd4db6a014ea0454dc09eaa23eedfb837095c8ff90470cb26a303f7ceb5fcc1e2190ef64683e64cfd33d3ba3ca3109cd87d12bc9e379e4195c9a4dd - languageName: node - linkType: hard - -"@emotion/weak-memoize@npm:^0.3.0": - version: 0.3.0 - resolution: "@emotion/weak-memoize@npm:0.3.0" - checksum: f43ef4c8b7de70d9fa5eb3105921724651e4188e895beb71f0c5919dc899a7b8743e1fdd99d38b9092dd5722c7be2312ebb47fbdad0c4e38bea58f6df5885cc0 - languageName: node - linkType: hard - "@es-joy/jsdoccomment@npm:~0.31.0": version: 0.31.0 resolution: "@es-joy/jsdoccomment@npm:0.31.0" @@ -2231,9 +2239,9 @@ __metadata: languageName: node linkType: hard -"@esbuild/linux-loong64@npm:0.15.6": - version: 0.15.6 - resolution: "@esbuild/linux-loong64@npm:0.15.6" +"@esbuild/linux-loong64@npm:0.15.7": + version: 0.15.7 + resolution: "@esbuild/linux-loong64@npm:0.15.7" conditions: os=linux & cpu=loong64 languageName: node linkType: hard @@ -2294,46 +2302,19 @@ __metadata: languageName: node linkType: hard -"@floating-ui/core@npm:^0.7.3": - version: 0.7.3 - resolution: "@floating-ui/core@npm:0.7.3" - checksum: f48f9fb0d19dcbe7a68c38e8de7fabb11f0c0e6e0ef215ae60b5004900bacb1386e7b89cb377d91a90ff7d147ea1f06c2905136ecf34dea162d9696d8f448d5f - languageName: node - linkType: hard - -"@floating-ui/dom@npm:^0.5.3": - version: 0.5.4 - resolution: "@floating-ui/dom@npm:0.5.4" - dependencies: - "@floating-ui/core": ^0.7.3 - checksum: 9f9d8a51a828c6be5f187204aa6d293c6c9ef70d51dcc5891a4d85683745fceebf79ff8826d0f75ae41b45c3b138367d339756f27f41be87a8770742ebc0de42 - languageName: node - linkType: hard - -"@floating-ui/react-dom-interactions@npm:0.6.6": - version: 0.6.6 - resolution: "@floating-ui/react-dom-interactions@npm:0.6.6" - dependencies: - "@floating-ui/react-dom": ^0.7.2 - aria-hidden: ^1.1.3 - use-isomorphic-layout-effect: ^1.1.1 - peerDependencies: - react: ">=16.8.0" - react-dom: ">=16.8.0" - checksum: 3c6cf848c0d9cee6a4f68817a2b32a9addf6f3057f9f120e4d537efe1d2935cdf8a368d9b599b49b97c8cbcf9f25c8da1683f41c563754dd5eca47b622a74cc5 +"@floating-ui/core@npm:^1.0.1": + version: 1.0.1 + resolution: "@floating-ui/core@npm:1.0.1" + checksum: c8a5f1a491788e5bebfe747e9372df2c7cbee0d8790ddf95e25149ac91ccf1a2cca8f768029826cfd3d687617c1d0f3241b97f1648bdf2a28d421f39e79c2eee languageName: node linkType: hard -"@floating-ui/react-dom@npm:^0.7.2": - version: 0.7.2 - resolution: "@floating-ui/react-dom@npm:0.7.2" +"@floating-ui/dom@npm:^1.0.0": + version: 1.0.1 + resolution: "@floating-ui/dom@npm:1.0.1" dependencies: - "@floating-ui/dom": ^0.5.3 - use-isomorphic-layout-effect: ^1.1.1 - peerDependencies: - react: ">=16.8.0" - react-dom: ">=16.8.0" - checksum: bc3f2b5557f87f6f4bbccfe3e8d097abafad61a41083d3b79f3499f27590e273bcb3dc7136c2444841ee7a8c0d2a70cc1385458c16103fa8b70eade80c24af52 + "@floating-ui/core": ^1.0.1 + checksum: 617d5b45d6454e9f2b5bba26d0181d1c5863c92960b8e867b9539763291dee0506077d338df805c116ea73330900e657da65af411df85b8ba99e8d4e5fc4e745 languageName: node linkType: hard @@ -2491,15 +2472,6 @@ __metadata: languageName: node linkType: hard -"@jest/expect-utils@npm:^29.0.1": - version: 29.0.1 - resolution: "@jest/expect-utils@npm:29.0.1" - dependencies: - jest-get-type: ^29.0.0 - checksum: d2cfe72f91fcb86a3f2ffc7c09e02cba7e9da0c41705a98e7fbed016b2141ab29764b15615806ece4ed6a21b60252f024b121be68c2bd66d055305a1d34b10f8 - languageName: node - linkType: hard - "@jest/expect-utils@npm:^29.0.2": version: 29.0.2 resolution: "@jest/expect-utils@npm:29.0.2" @@ -2659,20 +2631,6 @@ __metadata: languageName: node linkType: hard -"@jest/types@npm:^29.0.1": - version: 29.0.1 - resolution: "@jest/types@npm:29.0.1" - dependencies: - "@jest/schemas": ^29.0.0 - "@types/istanbul-lib-coverage": ^2.0.0 - "@types/istanbul-reports": ^3.0.0 - "@types/node": "*" - "@types/yargs": ^17.0.8 - chalk: ^4.0.0 - checksum: 50a3658d69cad32fe270ef22e9a21cbad38c387d0b17cb1f23b144f9c9081e81623feda940b6b23459df656f88153ffe7765f36cd3bc3f3b2d8cd0ca246d75b2 - languageName: node - linkType: hard - "@jest/types@npm:^29.0.2": version: 29.0.2 resolution: "@jest/types@npm:29.0.2" @@ -2749,112 +2707,6 @@ __metadata: languageName: node linkType: hard -"@mantine/core@npm:^5.2.5": - version: 5.2.5 - resolution: "@mantine/core@npm:5.2.5" - dependencies: - "@floating-ui/react-dom-interactions": 0.6.6 - "@mantine/styles": 5.2.5 - "@mantine/utils": 5.2.5 - "@radix-ui/react-scroll-area": 1.0.0 - react-textarea-autosize: 8.3.4 - peerDependencies: - "@mantine/hooks": 5.2.5 - react: ">=16.8.0" - react-dom: ">=16.8.0" - checksum: a7ccb98bf0dd5b845580ca9c89d01ada63cb329546097fa818f41ccd6118ce0e89af27b668a66fd51dd292f1080b31f376c747c95230353892cc51f6db18c3cc - languageName: node - linkType: hard - -"@mantine/hooks@npm:^5.2.5": - version: 5.2.5 - resolution: "@mantine/hooks@npm:5.2.5" - peerDependencies: - react: ">=16.8.0" - checksum: c4358d22acc3d2017115836a1b08c11c9eec64220a9ed9ba4828b14687f8a87367ef19ce7ea21c32a2c112046337afbc9e1ad55d3cbcb4ace20074c14c4233c3 - languageName: node - linkType: hard - -"@mantine/next@npm:^5.2.5": - version: 5.2.5 - resolution: "@mantine/next@npm:5.2.5" - dependencies: - "@mantine/ssr": 5.2.5 - "@mantine/styles": 5.2.5 - peerDependencies: - next: "*" - react: ">=16.8.0" - react-dom: ">=16.8.0" - checksum: a4b543a83e2af43bf96a4a4d3ad9f16f13d8830fcbbbdff47a144760eaf7059191f5e1b279b79c2a6469740f0c772a708437d42cf31811ef0748673096a7d16d - languageName: node - linkType: hard - -"@mantine/nprogress@npm:^5.2.5": - version: 5.2.5 - resolution: "@mantine/nprogress@npm:5.2.5" - dependencies: - "@mantine/utils": 5.2.5 - peerDependencies: - "@mantine/core": 5.2.5 - "@mantine/hooks": 5.2.5 - react: ">=16.8.0" - react-dom: ">=16.8.0" - checksum: ce0971c6df3ea5978397647939288a9d00f80e26feb8389c773485937ff6d5bb0ebf53aadcf354b5abf1665a2657364caa9e91ecf484431e58f027ee5d2d5546 - languageName: node - linkType: hard - -"@mantine/spotlight@npm:^5.2.5": - version: 5.2.5 - resolution: "@mantine/spotlight@npm:5.2.5" - dependencies: - "@mantine/utils": 5.2.5 - peerDependencies: - "@mantine/core": 5.2.5 - "@mantine/hooks": 5.2.5 - react: ">=16.8.0" - react-dom: ">=16.8.0" - checksum: a895b39ff7c6475272213708d41a55c2a4e885f4882efca1e143d8c1393761fa015ef594ad1d9f3c093db8a6069b5cabe56c51cbac2c7154351a09434810184a - languageName: node - linkType: hard - -"@mantine/ssr@npm:5.2.5": - version: 5.2.5 - resolution: "@mantine/ssr@npm:5.2.5" - dependencies: - "@mantine/styles": 5.2.5 - html-react-parser: 1.4.12 - peerDependencies: - "@emotion/react": ">=11.9.0" - "@emotion/server": ">=11.4.0" - react: ">=16.8.0" - react-dom: ">=16.8.0" - checksum: 5369c0af18c7046c8552e3f8fcc4cc452f673fd201cb5d12c443b3c82e2a219201fb9f7435d2a3b4ac2cb34eed23a4725f9535afa9dc03d361fe1f23bc478f68 - languageName: node - linkType: hard - -"@mantine/styles@npm:5.2.5": - version: 5.2.5 - resolution: "@mantine/styles@npm:5.2.5" - dependencies: - clsx: 1.1.1 - csstype: 3.0.9 - peerDependencies: - "@emotion/react": ">=11.9.0" - react: ">=16.8.0" - react-dom: ">=16.8.0" - checksum: 4ef12a86da320f87d6f6fa6647bc56c266325b3dbef1c913104d4995784776fcea73aaccfc5b69217355628777ecc386d1691d786e623ff15a96613d01e6a602 - languageName: node - linkType: hard - -"@mantine/utils@npm:5.2.5": - version: 5.2.5 - resolution: "@mantine/utils@npm:5.2.5" - peerDependencies: - react: ">=16.8.0" - checksum: 9ee266a9eb5c877a8b3fb4cbf918e5ee0a816ab8f459f13d6a31ba4eae45c1321e6f7bc0fa910019f781f6c8e0ae53737ed1084e6e34d9768b78de1bae4a69ee - languageName: node - linkType: hard - "@mapbox/node-pre-gyp@npm:^1.0.5": version: 1.0.9 resolution: "@mapbox/node-pre-gyp@npm:1.0.9" @@ -3159,139 +3011,6 @@ __metadata: languageName: node linkType: hard -"@radix-ui/number@npm:1.0.0": - version: 1.0.0 - resolution: "@radix-ui/number@npm:1.0.0" - dependencies: - "@babel/runtime": ^7.13.10 - checksum: 517ac0790e05cceb41401154d1bc55d4738accd51095e2a918ef9bcedac6a455cd7179201e88e76121bedec19cd93a37b2c20288b084fb224b69c74e67935457 - languageName: node - linkType: hard - -"@radix-ui/primitive@npm:1.0.0": - version: 1.0.0 - resolution: "@radix-ui/primitive@npm:1.0.0" - dependencies: - "@babel/runtime": ^7.13.10 - checksum: 72996afaf346ec4f4c73422f14f6cb2d0de994801ba7cbb9a4a67b0050e0cd74625182c349ef8017ccae1406579d4b74a34a225ef2efe61e8e5337decf235deb - languageName: node - linkType: hard - -"@radix-ui/react-compose-refs@npm:1.0.0": - version: 1.0.0 - resolution: "@radix-ui/react-compose-refs@npm:1.0.0" - dependencies: - "@babel/runtime": ^7.13.10 - peerDependencies: - react: ^16.8 || ^17.0 || ^18.0 - checksum: fb98be2e275a1a758ccac647780ff5b04be8dcf25dcea1592db3b691fecf719c4c0700126da605b2f512dd89caa111352b9fad59528d736b4e0e9a0e134a74a1 - languageName: node - linkType: hard - -"@radix-ui/react-context@npm:1.0.0": - version: 1.0.0 - resolution: "@radix-ui/react-context@npm:1.0.0" - dependencies: - "@babel/runtime": ^7.13.10 - peerDependencies: - react: ^16.8 || ^17.0 || ^18.0 - checksum: 43c6b6f2183398161fe6b109e83fff240a6b7babbb27092b815932342a89d5ca42aa9806bfae5927970eed5ff90feed04c67aa29c6721f84ae826f17fcf34ce0 - languageName: node - linkType: hard - -"@radix-ui/react-direction@npm:1.0.0": - version: 1.0.0 - resolution: "@radix-ui/react-direction@npm:1.0.0" - dependencies: - "@babel/runtime": ^7.13.10 - peerDependencies: - react: ^16.8 || ^17.0 || ^18.0 - checksum: 92a40de4087b161a56957872daf204a7735bd21f2fccbd42deff322d759977d085ad3dcdae05af437b7e64e628e939e0d67e5bc468a3027e1b02e0a7dc90c485 - languageName: node - linkType: hard - -"@radix-ui/react-presence@npm:1.0.0": - version: 1.0.0 - resolution: "@radix-ui/react-presence@npm:1.0.0" - dependencies: - "@babel/runtime": ^7.13.10 - "@radix-ui/react-compose-refs": 1.0.0 - "@radix-ui/react-use-layout-effect": 1.0.0 - peerDependencies: - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 - checksum: a607d67795aa265e88f1765dcc7c18bebf6d88d116cb7f529ebe5a3fbbe751a42763aff0c1c89cdd8ce7f7664355936c4070fd3d4685774aff1a80fa95f4665b - languageName: node - linkType: hard - -"@radix-ui/react-primitive@npm:1.0.0": - version: 1.0.0 - resolution: "@radix-ui/react-primitive@npm:1.0.0" - dependencies: - "@babel/runtime": ^7.13.10 - "@radix-ui/react-slot": 1.0.0 - peerDependencies: - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 - checksum: fb3fe8c8c5a57995716cce4d7e9039e474c09ba5d714994419ad4940bc954da670f1188813cc931f189b23d9bd5a67adf7087bf44fe1d4272b4a334a3514d38b - languageName: node - linkType: hard - -"@radix-ui/react-scroll-area@npm:1.0.0": - version: 1.0.0 - resolution: "@radix-ui/react-scroll-area@npm:1.0.0" - dependencies: - "@babel/runtime": ^7.13.10 - "@radix-ui/number": 1.0.0 - "@radix-ui/primitive": 1.0.0 - "@radix-ui/react-compose-refs": 1.0.0 - "@radix-ui/react-context": 1.0.0 - "@radix-ui/react-direction": 1.0.0 - "@radix-ui/react-presence": 1.0.0 - "@radix-ui/react-primitive": 1.0.0 - "@radix-ui/react-use-callback-ref": 1.0.0 - "@radix-ui/react-use-layout-effect": 1.0.0 - peerDependencies: - react: ^16.8 || ^17.0 || ^18.0 - react-dom: ^16.8 || ^17.0 || ^18.0 - checksum: 0b7756f1df19ac13c570941461794668d0fb15fd576f37a698a6d0a39f48b728db751455f8de202e5ccb8750c3d9f31a02ada7b79d9f064347aa96e780d8f104 - languageName: node - linkType: hard - -"@radix-ui/react-slot@npm:1.0.0": - version: 1.0.0 - resolution: "@radix-ui/react-slot@npm:1.0.0" - dependencies: - "@babel/runtime": ^7.13.10 - "@radix-ui/react-compose-refs": 1.0.0 - peerDependencies: - react: ^16.8 || ^17.0 || ^18.0 - checksum: 60c0190ebdca21785b4f8b58a0c52717600c98953fc49da9580870519c60f52d5cf873dffa05446f4bb539066326ccec0827f4ca252b02ec4ff1a4ae203f59d7 - languageName: node - linkType: hard - -"@radix-ui/react-use-callback-ref@npm:1.0.0": - version: 1.0.0 - resolution: "@radix-ui/react-use-callback-ref@npm:1.0.0" - dependencies: - "@babel/runtime": ^7.13.10 - peerDependencies: - react: ^16.8 || ^17.0 || ^18.0 - checksum: a8dda76ba0a26e23dc6ab5003831ad7439f59ba9d696a517643b9ee6a7fb06b18ae7a8f5a3c00c530d5c8104745a466a077b7475b99b4c0f5c15f5fc29474471 - languageName: node - linkType: hard - -"@radix-ui/react-use-layout-effect@npm:1.0.0": - version: 1.0.0 - resolution: "@radix-ui/react-use-layout-effect@npm:1.0.0" - dependencies: - "@babel/runtime": ^7.13.10 - peerDependencies: - react: ^16.8 || ^17.0 || ^18.0 - checksum: fcdc8cfa79bd45766ebe3de11039c58abe3fed968cb39c12b2efce5d88013c76fe096ea4cee464d42576d02fe7697779b682b4268459bca3c4e48644f5b4ac5e - languageName: node - linkType: hard - "@rollup/pluginutils@npm:^4.2.1": version: 4.2.1 resolution: "@rollup/pluginutils@npm:4.2.1" @@ -3395,9 +3114,9 @@ __metadata: linkType: hard "@sinclair/typebox@npm:^0.24.1": - version: 0.24.34 - resolution: "@sinclair/typebox@npm:0.24.34" - checksum: 35adcc7698fe751951e75fefe748a1d6e928afa3e52c153d1984a9d47c2a4f39e89f6adf727daef5cc12a58c71c2a0f63e3d88d105e4435252cfb68231518687 + version: 0.24.35 + resolution: "@sinclair/typebox@npm:0.24.35" + checksum: 41fdadc7692f5b62acbc2155d693977bf5bdffb934ba046c1a55624c46dfa12a9a4a3878c4ce89a4c5625ce90e2210a02c256e564262b3ec4f4738b195033f57 languageName: node linkType: hard @@ -3737,6 +3456,13 @@ __metadata: languageName: node linkType: hard +"@types/js-cookie@npm:^2.2.6": + version: 2.2.7 + resolution: "@types/js-cookie@npm:2.2.7" + checksum: 851f47e94ca1fc43661d8f51614d67a613e7810c91b876d0a3b311ce72f7df800107fd02a08cb6948184e12c120b4f058edca2f50424d8798bdcffd6627281e3 + languageName: node + linkType: hard + "@types/js-yaml@npm:^4.0.0": version: 4.0.5 resolution: "@types/js-yaml@npm:4.0.5" @@ -3849,10 +3575,10 @@ __metadata: languageName: node linkType: hard -"@types/node@npm:^16.11.56": - version: 16.11.56 - resolution: "@types/node@npm:16.11.56" - checksum: b4efade16eb08a39810921c54a1637e69c8f3184a20d87e8fe74d557d9bda73f0829ac318e2a30a32b1903e4b099812defd1dfe438be70b98dbfbea5b0d99a53 +"@types/node@npm:^16.11.57": + version: 16.11.57 + resolution: "@types/node@npm:16.11.57" + checksum: 7c34f5e50e38460fd0f18ae939ad62d5ecf992be7b9db7b1b86b9cc76a4d153b55bf3a94c6379da23df0803c11ad1a96be54c45d3ce612206cb8a18ce433028b languageName: node linkType: hard @@ -4321,7 +4047,7 @@ __metadata: languageName: node linkType: hard -"@unocss/preset-web-fonts@npm:0.45.15, @unocss/preset-web-fonts@npm:^0.45.15": +"@unocss/preset-web-fonts@npm:0.45.15": version: 0.45.15 resolution: "@unocss/preset-web-fonts@npm:0.45.15" dependencies: @@ -4550,11 +4276,11 @@ __metadata: languageName: node linkType: hard -"@vitejs/plugin-react@npm:^2.0.1": - version: 2.0.1 - resolution: "@vitejs/plugin-react@npm:2.0.1" +"@vitejs/plugin-react@npm:^2.1.0": + version: 2.1.0 + resolution: "@vitejs/plugin-react@npm:2.1.0" dependencies: - "@babel/core": ^7.18.10 + "@babel/core": ^7.18.13 "@babel/plugin-transform-react-jsx": ^7.18.10 "@babel/plugin-transform-react-jsx-development": ^7.18.6 "@babel/plugin-transform-react-jsx-self": ^7.18.6 @@ -4563,17 +4289,17 @@ __metadata: react-refresh: ^0.14.0 peerDependencies: vite: ^3.0.0 - checksum: 90702768ee34bd7e5021398ab827c682cfe1ebfce0988a532a678b664d80b9ad991d1c24f81045626b811c9aa2aae7d9d0fd563db5c6b7b8fd36c8eecdfc04b9 + checksum: cd13ad549f33e579e0e1d14f5b8a4ad60d5fbbc8cd579e4381d52bb426700118e876644a619a19c5cec4efeb4f8a0ff50b6c9456d5c24836071190b46d781fef languageName: node linkType: hard -"@vitest/coverage-c8@npm:^0.23.0": - version: 0.23.0 - resolution: "@vitest/coverage-c8@npm:0.23.0" +"@vitest/coverage-c8@npm:^0.23.1": + version: 0.23.1 + resolution: "@vitest/coverage-c8@npm:0.23.1" dependencies: c8: ^7.12.0 - vitest: 0.23.0 - checksum: dfe9c55876c6570ef3da2e4764c3c5168f0551f7399f3c1973c214210fc6ab4c4efadc29cd688abd6ffb2154870bf5abf5c7adbe52ce49d4388bdafedb31602e + vitest: 0.23.1 + checksum: 632788d2579e029d53ba42fa3a4d432fc50f8b4feb974900c8ae734bed8afae02f56dae1feadf92aacc60a113884a37c2cbf454240725985eba705dc501f2976 languageName: node linkType: hard @@ -4591,6 +4317,13 @@ __metadata: languageName: node linkType: hard +"@xobotyi/scrollbar-width@npm:^1.9.5": + version: 1.9.5 + resolution: "@xobotyi/scrollbar-width@npm:1.9.5" + checksum: e880c8696bd6c7eedaad4e89cc7bcfcd502c22dc6c061288ffa7f5a4fe5dab4aa2358bdd68e7357bf0334dc8b56724ed9bee05e010b60d83a3bb0d855f3d886f + languageName: node + linkType: hard + "JSONStream@npm:^1.0.4": version: 1.3.5 resolution: "JSONStream@npm:1.3.5" @@ -4635,6 +4368,13 @@ __metadata: languageName: node linkType: hard +"add-px-to-style@npm:1.0.0": + version: 1.0.0 + resolution: "add-px-to-style@npm:1.0.0" + checksum: 673831d81d86d717e3a9f4f644059476ca74990dd28310d9bffe6cb35fac8007865351d37a885af168a8613f5cdb054db728a3df19e9ee1457b75a668003c729 + languageName: node + linkType: hard + "add-stream@npm:^1.0.0": version: 1.0.0 resolution: "add-stream@npm:1.0.0" @@ -4879,21 +4619,6 @@ __metadata: languageName: node linkType: hard -"aria-hidden@npm:^1.1.3": - version: 1.2.1 - resolution: "aria-hidden@npm:1.2.1" - dependencies: - tslib: ^2.0.0 - peerDependencies: - "@types/react": ^16.9.0 || ^17.0.0 || ^18.0.0 - react: ^16.9.0 || ^17.0.0 || ^18.0.0 - peerDependenciesMeta: - "@types/react": - optional: true - checksum: cd8047a0113d5ecc11bce1616ae2772abcb0a6e1da5a70cbfc3555e8da063b0416d62cced3e704b6d424cbf408c1fc21225d69723cd62c3f1f0cf3b41d674c2b - languageName: node - linkType: hard - "aria-query@npm:5.0.0": version: 5.0.0 resolution: "aria-query@npm:5.0.0" @@ -4918,6 +4643,28 @@ __metadata: languageName: node linkType: hard +"ariakit-utils@npm:0.17.0-next.26": + version: 0.17.0-next.26 + resolution: "ariakit-utils@npm:0.17.0-next.26" + peerDependencies: + react: ^17.0.0 || ^18.0.0 + checksum: dc41a324c74561dfc6afa6037ac4227b06f73a16336d670285392d630bab42d259269ca1afe1c05cc3d5b2bdbc941a518053ba7427edec60080bd8bb3dffd226 + languageName: node + linkType: hard + +"ariakit@npm:^2.0.0-next.41": + version: 2.0.0-next.41 + resolution: "ariakit@npm:2.0.0-next.41" + dependencies: + "@floating-ui/dom": ^1.0.0 + ariakit-utils: 0.17.0-next.26 + peerDependencies: + react: ^17.0.0 || ^18.0.0 + react-dom: ^17.0.0 || ^18.0.0 + checksum: a0384dbc4e44211f31e7347a9613a02e98965d4f675bda0a0d9ce002adfe7921abe1b1f77a56569cec93750feb05fd28809adf959006df145b679b94e143786d + languageName: node + linkType: hard + "array-back@npm:^1.0.2, array-back@npm:^1.0.3": version: 1.0.4 resolution: "array-back@npm:1.0.4" @@ -5199,17 +4946,6 @@ __metadata: languageName: node linkType: hard -"babel-plugin-macros@npm:^3.1.0": - version: 3.1.0 - resolution: "babel-plugin-macros@npm:3.1.0" - dependencies: - "@babel/runtime": ^7.12.5 - cosmiconfig: ^7.0.0 - resolve: ^1.19.0 - checksum: 765de4abebd3e4688ebdfbff8571ddc8cd8061f839bb6c3e550b0344a4027b04c60491f843296ce3f3379fb356cc873d57a9ee6694262547eb822c14a25be9a6 - languageName: node - linkType: hard - "babel-plugin-polyfill-corejs2@npm:^0.3.2": version: 0.3.2 resolution: "babel-plugin-polyfill-corejs2@npm:0.3.2" @@ -5443,13 +5179,6 @@ __metadata: languageName: node linkType: hard -"buffer-from@npm:~0.1.1": - version: 0.1.2 - resolution: "buffer-from@npm:0.1.2" - checksum: 50a1fa5da97d2081b7d945483c8967d3b89a096fa585eb55000bb2100e827c647c9370280ec9bd057da8f9fa5abc1d3b764228851a31fa8a67f659f70c0052d8 - languageName: node - linkType: hard - "buffer@npm:^5.5.0": version: 5.7.1 resolution: "buffer@npm:5.7.1" @@ -5919,13 +5648,6 @@ __metadata: languageName: node linkType: hard -"clsx@npm:1.1.1": - version: 1.1.1 - resolution: "clsx@npm:1.1.1" - checksum: ff052650329773b9b245177305fc4c4dc3129f7b2be84af4f58dc5defa99538c61d4207be7419405a5f8f3d92007c954f4daba5a7b74e563d5de71c28c830063 - languageName: node - linkType: hard - "co@npm:^4.6.0": version: 4.6.0 resolution: "co@npm:4.6.0" @@ -6470,7 +6192,7 @@ __metadata: languageName: node linkType: hard -"convert-source-map@npm:^1.4.0, convert-source-map@npm:^1.5.0, convert-source-map@npm:^1.6.0, convert-source-map@npm:^1.7.0": +"convert-source-map@npm:^1.4.0, convert-source-map@npm:^1.6.0, convert-source-map@npm:^1.7.0": version: 1.8.0 resolution: "convert-source-map@npm:1.8.0" dependencies: @@ -6486,6 +6208,15 @@ __metadata: languageName: node linkType: hard +"copy-to-clipboard@npm:^3.3.1": + version: 3.3.2 + resolution: "copy-to-clipboard@npm:3.3.2" + dependencies: + toggle-selection: ^1.0.6 + checksum: 968ec7ec3d0cf3067542b63dd244ba5d05e743899d7a0361fb0a3130e731d277f5ea54ea4d90fc88cc66eea2e4c67dc2dd8698e4ed360f921af5aa7c60b889ac + languageName: node + linkType: hard + "core-js-compat@npm:^3.21.0, core-js-compat@npm:^3.22.1": version: 3.25.0 resolution: "core-js-compat@npm:3.25.0" @@ -6576,6 +6307,16 @@ __metadata: languageName: node linkType: hard +"css-in-js-utils@npm:^2.0.0": + version: 2.0.1 + resolution: "css-in-js-utils@npm:2.0.1" + dependencies: + hyphenate-style-name: ^1.0.2 + isobject: ^3.0.1 + checksum: c9964c4708216954c468b69bbee2d971fd759ada4f40637b8ca4d3f79caba4818d0532a4f190ac560227c08742ad063ffec7a30afddc4d96b66a18c3a008f0d8 + languageName: node + linkType: hard + "css-selector-parser@npm:^1.0.0": version: 1.4.1 resolution: "css-selector-parser@npm:1.4.1" @@ -6583,6 +6324,16 @@ __metadata: languageName: node linkType: hard +"css-tree@npm:^1.1.2": + version: 1.1.3 + resolution: "css-tree@npm:1.1.3" + dependencies: + mdn-data: 2.0.14 + source-map: ^0.6.1 + checksum: 79f9b81803991b6977b7fcb1588799270438274d89066ce08f117f5cdb5e20019b446d766c61506dd772c839df84caa16042d6076f20c97187f5abe3b50e7d1f + languageName: node + linkType: hard + "css-tree@npm:^2.2.1": version: 2.2.1 resolution: "css-tree@npm:2.2.1" @@ -6609,14 +6360,7 @@ __metadata: languageName: node linkType: hard -"csstype@npm:3.0.9": - version: 3.0.9 - resolution: "csstype@npm:3.0.9" - checksum: 199f9af7e673f9f188525c3102a329d637ff46c52f6385a4427ff5cb17adcb736189150170a7af7c5701d18d7704bdad130273f4aa7e44c6c4f9967e6115dc93 - languageName: node - linkType: hard - -"csstype@npm:^3.0.2": +"csstype@npm:^3.0.2, csstype@npm:^3.0.6": version: 3.1.0 resolution: "csstype@npm:3.1.0" checksum: 644e986cefab86525f0b674a06889cfdbb1f117e5b7d1ce0fc55b0423ecc58807a1ea42ecc75c4f18999d14fc42d1d255f84662a45003a52bb5840e977eb2ffd @@ -6931,7 +6675,7 @@ __metadata: "@discordjs/rest": "workspace:^" "@favware/cliff-jumper": ^1.8.7 "@sapphire/snowflake": ^3.2.2 - "@types/node": ^16.11.56 + "@types/node": ^16.11.57 "@types/ws": ^8.5.3 discord-api-types: ^0.37.5 dtslint: ^4.2.1 @@ -6994,41 +6738,14 @@ __metadata: languageName: node linkType: hard -"dom-serializer@npm:^1.0.1": - version: 1.4.1 - resolution: "dom-serializer@npm:1.4.1" - dependencies: - domelementtype: ^2.0.1 - domhandler: ^4.2.0 - entities: ^2.0.0 - checksum: fbb0b01f87a8a2d18e6e5a388ad0f7ec4a5c05c06d219377da1abc7bb0f674d804f4a8a94e3f71ff15f6cb7dcfc75704a54b261db672b9b3ab03da6b758b0b22 - languageName: node - linkType: hard - -"domelementtype@npm:^2.0.1, domelementtype@npm:^2.2.0": - version: 2.3.0 - resolution: "domelementtype@npm:2.3.0" - checksum: ee837a318ff702622f383409d1f5b25dd1024b692ef64d3096ff702e26339f8e345820f29a68bcdcea8cfee3531776b3382651232fbeae95612d6f0a75efb4f6 - languageName: node - linkType: hard - -"domhandler@npm:4.3.1, domhandler@npm:^4.2.0, domhandler@npm:^4.2.2": - version: 4.3.1 - resolution: "domhandler@npm:4.3.1" - dependencies: - domelementtype: ^2.2.0 - checksum: 4c665ceed016e1911bf7d1dadc09dc888090b64dee7851cccd2fcf5442747ec39c647bb1cb8c8919f8bbdd0f0c625a6bafeeed4b2d656bbecdbae893f43ffaaa - languageName: node - linkType: hard - -"domutils@npm:^2.8.0": - version: 2.8.0 - resolution: "domutils@npm:2.8.0" +"dom-css@npm:^2.0.0": + version: 2.1.0 + resolution: "dom-css@npm:2.1.0" dependencies: - dom-serializer: ^1.0.1 - domelementtype: ^2.2.0 - domhandler: ^4.2.0 - checksum: abf7434315283e9aadc2a24bac0e00eab07ae4313b40cc239f89d84d7315ebdfd2fb1b5bf750a96bc1b4403d7237c7b2ebf60459be394d625ead4ca89b934391 + add-px-to-style: 1.0.0 + prefix-style: 2.0.1 + to-camel-case: 1.0.0 + checksum: f61cc63e88771e1800ff4b7d98b17be2b311de984d94c3d3e0be692794502eb021d28c5c40ba08d4370a6d8bd96caf7a56d15c635451c2db1a2233c94ca0fcc0 languageName: node linkType: hard @@ -7092,15 +6809,6 @@ __metadata: languageName: node linkType: hard -"duplexer2@npm:^0.1.2": - version: 0.1.4 - resolution: "duplexer2@npm:0.1.4" - dependencies: - readable-stream: ^2.0.2 - checksum: 744961f03c7f54313f90555ac20284a3fb7bf22fdff6538f041a86c22499560eb6eac9d30ab5768054137cb40e6b18b40f621094e0261d7d8c35a37b7a5ad241 - languageName: node - linkType: hard - "duplexer3@npm:^0.1.4": version: 0.1.5 resolution: "duplexer3@npm:0.1.5" @@ -7152,9 +6860,9 @@ __metadata: linkType: hard "electron-to-chromium@npm:^1.4.202": - version: 1.4.240 - resolution: "electron-to-chromium@npm:1.4.240" - checksum: 6590e2cddd2e6a564cc491fb1ece5719c35dcbbeed34fc66e878b1659753653d0e344908b36b11741968dfc47a0141759e3780546384bb5308d38bc5232e0cb5 + version: 1.4.241 + resolution: "electron-to-chromium@npm:1.4.241" + checksum: a3d77207f4c46b64633eab3dcb46b4dcbd3e7e03f12ab81928a20ac4f585a9f04968176094318995f376645436325ddc8085f99bc985bc53b04d6c2016f1f9b0 languageName: node linkType: hard @@ -7197,20 +6905,6 @@ __metadata: languageName: node linkType: hard -"entities@npm:^2.0.0": - version: 2.2.0 - resolution: "entities@npm:2.2.0" - checksum: 19010dacaf0912c895ea262b4f6128574f9ccf8d4b3b65c7e8334ad0079b3706376360e28d8843ff50a78aabcb8f08f0a32dbfacdc77e47ed77ca08b713669b3 - languageName: node - linkType: hard - -"entities@npm:^3.0.1": - version: 3.0.1 - resolution: "entities@npm:3.0.1" - checksum: aaf7f12033f0939be91f5161593f853f2da55866db55ccbf72f45430b8977e2b79dbd58c53d0fdd2d00bd7d313b75b0968d09f038df88e308aa97e39f9456572 - languageName: node - linkType: hard - "entities@npm:~2.1.0": version: 2.1.0 resolution: "entities@npm:2.1.0" @@ -7241,6 +6935,15 @@ __metadata: languageName: node linkType: hard +"error-stack-parser@npm:^2.0.6": + version: 2.1.4 + resolution: "error-stack-parser@npm:2.1.4" + dependencies: + stackframe: ^1.3.4 + checksum: 3b916d2d14c6682f287c8bfa28e14672f47eafe832701080e420e7cdbaebb2c50293868256a95706ac2330fe078cf5664713158b49bc30d7a5f2ac229ded0e18 + languageName: node + linkType: hard + "es-abstract@npm:^1.19.0, es-abstract@npm:^1.19.1, es-abstract@npm:^1.19.2, es-abstract@npm:^1.19.5, es-abstract@npm:^1.20.1": version: 1.20.2 resolution: "es-abstract@npm:1.20.2" @@ -7313,9 +7016,9 @@ __metadata: languageName: node linkType: hard -"esbuild-android-64@npm:0.15.6": - version: 0.15.6 - resolution: "esbuild-android-64@npm:0.15.6" +"esbuild-android-64@npm:0.15.7": + version: 0.15.7 + resolution: "esbuild-android-64@npm:0.15.7" conditions: os=android & cpu=x64 languageName: node linkType: hard @@ -7334,9 +7037,9 @@ __metadata: languageName: node linkType: hard -"esbuild-android-arm64@npm:0.15.6": - version: 0.15.6 - resolution: "esbuild-android-arm64@npm:0.15.6" +"esbuild-android-arm64@npm:0.15.7": + version: 0.15.7 + resolution: "esbuild-android-arm64@npm:0.15.7" conditions: os=android & cpu=arm64 languageName: node linkType: hard @@ -7355,9 +7058,9 @@ __metadata: languageName: node linkType: hard -"esbuild-darwin-64@npm:0.15.6": - version: 0.15.6 - resolution: "esbuild-darwin-64@npm:0.15.6" +"esbuild-darwin-64@npm:0.15.7": + version: 0.15.7 + resolution: "esbuild-darwin-64@npm:0.15.7" conditions: os=darwin & cpu=x64 languageName: node linkType: hard @@ -7376,9 +7079,9 @@ __metadata: languageName: node linkType: hard -"esbuild-darwin-arm64@npm:0.15.6": - version: 0.15.6 - resolution: "esbuild-darwin-arm64@npm:0.15.6" +"esbuild-darwin-arm64@npm:0.15.7": + version: 0.15.7 + resolution: "esbuild-darwin-arm64@npm:0.15.7" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard @@ -7397,9 +7100,9 @@ __metadata: languageName: node linkType: hard -"esbuild-freebsd-64@npm:0.15.6": - version: 0.15.6 - resolution: "esbuild-freebsd-64@npm:0.15.6" +"esbuild-freebsd-64@npm:0.15.7": + version: 0.15.7 + resolution: "esbuild-freebsd-64@npm:0.15.7" conditions: os=freebsd & cpu=x64 languageName: node linkType: hard @@ -7418,9 +7121,9 @@ __metadata: languageName: node linkType: hard -"esbuild-freebsd-arm64@npm:0.15.6": - version: 0.15.6 - resolution: "esbuild-freebsd-arm64@npm:0.15.6" +"esbuild-freebsd-arm64@npm:0.15.7": + version: 0.15.7 + resolution: "esbuild-freebsd-arm64@npm:0.15.7" conditions: os=freebsd & cpu=arm64 languageName: node linkType: hard @@ -7439,9 +7142,9 @@ __metadata: languageName: node linkType: hard -"esbuild-linux-32@npm:0.15.6": - version: 0.15.6 - resolution: "esbuild-linux-32@npm:0.15.6" +"esbuild-linux-32@npm:0.15.7": + version: 0.15.7 + resolution: "esbuild-linux-32@npm:0.15.7" conditions: os=linux & cpu=ia32 languageName: node linkType: hard @@ -7460,9 +7163,9 @@ __metadata: languageName: node linkType: hard -"esbuild-linux-64@npm:0.15.6": - version: 0.15.6 - resolution: "esbuild-linux-64@npm:0.15.6" +"esbuild-linux-64@npm:0.15.7": + version: 0.15.7 + resolution: "esbuild-linux-64@npm:0.15.7" conditions: os=linux & cpu=x64 languageName: node linkType: hard @@ -7481,9 +7184,9 @@ __metadata: languageName: node linkType: hard -"esbuild-linux-arm64@npm:0.15.6": - version: 0.15.6 - resolution: "esbuild-linux-arm64@npm:0.15.6" +"esbuild-linux-arm64@npm:0.15.7": + version: 0.15.7 + resolution: "esbuild-linux-arm64@npm:0.15.7" conditions: os=linux & cpu=arm64 languageName: node linkType: hard @@ -7502,9 +7205,9 @@ __metadata: languageName: node linkType: hard -"esbuild-linux-arm@npm:0.15.6": - version: 0.15.6 - resolution: "esbuild-linux-arm@npm:0.15.6" +"esbuild-linux-arm@npm:0.15.7": + version: 0.15.7 + resolution: "esbuild-linux-arm@npm:0.15.7" conditions: os=linux & cpu=arm languageName: node linkType: hard @@ -7523,9 +7226,9 @@ __metadata: languageName: node linkType: hard -"esbuild-linux-mips64le@npm:0.15.6": - version: 0.15.6 - resolution: "esbuild-linux-mips64le@npm:0.15.6" +"esbuild-linux-mips64le@npm:0.15.7": + version: 0.15.7 + resolution: "esbuild-linux-mips64le@npm:0.15.7" conditions: os=linux & cpu=mips64el languageName: node linkType: hard @@ -7544,9 +7247,9 @@ __metadata: languageName: node linkType: hard -"esbuild-linux-ppc64le@npm:0.15.6": - version: 0.15.6 - resolution: "esbuild-linux-ppc64le@npm:0.15.6" +"esbuild-linux-ppc64le@npm:0.15.7": + version: 0.15.7 + resolution: "esbuild-linux-ppc64le@npm:0.15.7" conditions: os=linux & cpu=ppc64 languageName: node linkType: hard @@ -7565,9 +7268,9 @@ __metadata: languageName: node linkType: hard -"esbuild-linux-riscv64@npm:0.15.6": - version: 0.15.6 - resolution: "esbuild-linux-riscv64@npm:0.15.6" +"esbuild-linux-riscv64@npm:0.15.7": + version: 0.15.7 + resolution: "esbuild-linux-riscv64@npm:0.15.7" conditions: os=linux & cpu=riscv64 languageName: node linkType: hard @@ -7586,9 +7289,9 @@ __metadata: languageName: node linkType: hard -"esbuild-linux-s390x@npm:0.15.6": - version: 0.15.6 - resolution: "esbuild-linux-s390x@npm:0.15.6" +"esbuild-linux-s390x@npm:0.15.7": + version: 0.15.7 + resolution: "esbuild-linux-s390x@npm:0.15.7" conditions: os=linux & cpu=s390x languageName: node linkType: hard @@ -7607,9 +7310,9 @@ __metadata: languageName: node linkType: hard -"esbuild-netbsd-64@npm:0.15.6": - version: 0.15.6 - resolution: "esbuild-netbsd-64@npm:0.15.6" +"esbuild-netbsd-64@npm:0.15.7": + version: 0.15.7 + resolution: "esbuild-netbsd-64@npm:0.15.7" conditions: os=netbsd & cpu=x64 languageName: node linkType: hard @@ -7628,9 +7331,9 @@ __metadata: languageName: node linkType: hard -"esbuild-openbsd-64@npm:0.15.6": - version: 0.15.6 - resolution: "esbuild-openbsd-64@npm:0.15.6" +"esbuild-openbsd-64@npm:0.15.7": + version: 0.15.7 + resolution: "esbuild-openbsd-64@npm:0.15.7" conditions: os=openbsd & cpu=x64 languageName: node linkType: hard @@ -7649,9 +7352,9 @@ __metadata: languageName: node linkType: hard -"esbuild-sunos-64@npm:0.15.6": - version: 0.15.6 - resolution: "esbuild-sunos-64@npm:0.15.6" +"esbuild-sunos-64@npm:0.15.7": + version: 0.15.7 + resolution: "esbuild-sunos-64@npm:0.15.7" conditions: os=sunos & cpu=x64 languageName: node linkType: hard @@ -7670,9 +7373,9 @@ __metadata: languageName: node linkType: hard -"esbuild-windows-32@npm:0.15.6": - version: 0.15.6 - resolution: "esbuild-windows-32@npm:0.15.6" +"esbuild-windows-32@npm:0.15.7": + version: 0.15.7 + resolution: "esbuild-windows-32@npm:0.15.7" conditions: os=win32 & cpu=ia32 languageName: node linkType: hard @@ -7691,9 +7394,9 @@ __metadata: languageName: node linkType: hard -"esbuild-windows-64@npm:0.15.6": - version: 0.15.6 - resolution: "esbuild-windows-64@npm:0.15.6" +"esbuild-windows-64@npm:0.15.7": + version: 0.15.7 + resolution: "esbuild-windows-64@npm:0.15.7" conditions: os=win32 & cpu=x64 languageName: node linkType: hard @@ -7712,9 +7415,9 @@ __metadata: languageName: node linkType: hard -"esbuild-windows-arm64@npm:0.15.6": - version: 0.15.6 - resolution: "esbuild-windows-arm64@npm:0.15.6" +"esbuild-windows-arm64@npm:0.15.7": + version: 0.15.7 + resolution: "esbuild-windows-arm64@npm:0.15.7" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard @@ -7865,30 +7568,30 @@ __metadata: linkType: hard "esbuild@npm:^0.15.1": - version: 0.15.6 - resolution: "esbuild@npm:0.15.6" - dependencies: - "@esbuild/linux-loong64": 0.15.6 - esbuild-android-64: 0.15.6 - esbuild-android-arm64: 0.15.6 - esbuild-darwin-64: 0.15.6 - esbuild-darwin-arm64: 0.15.6 - esbuild-freebsd-64: 0.15.6 - esbuild-freebsd-arm64: 0.15.6 - esbuild-linux-32: 0.15.6 - esbuild-linux-64: 0.15.6 - esbuild-linux-arm: 0.15.6 - esbuild-linux-arm64: 0.15.6 - esbuild-linux-mips64le: 0.15.6 - esbuild-linux-ppc64le: 0.15.6 - esbuild-linux-riscv64: 0.15.6 - esbuild-linux-s390x: 0.15.6 - esbuild-netbsd-64: 0.15.6 - esbuild-openbsd-64: 0.15.6 - esbuild-sunos-64: 0.15.6 - esbuild-windows-32: 0.15.6 - esbuild-windows-64: 0.15.6 - esbuild-windows-arm64: 0.15.6 + version: 0.15.7 + resolution: "esbuild@npm:0.15.7" + dependencies: + "@esbuild/linux-loong64": 0.15.7 + esbuild-android-64: 0.15.7 + esbuild-android-arm64: 0.15.7 + esbuild-darwin-64: 0.15.7 + esbuild-darwin-arm64: 0.15.7 + esbuild-freebsd-64: 0.15.7 + esbuild-freebsd-arm64: 0.15.7 + esbuild-linux-32: 0.15.7 + esbuild-linux-64: 0.15.7 + esbuild-linux-arm: 0.15.7 + esbuild-linux-arm64: 0.15.7 + esbuild-linux-mips64le: 0.15.7 + esbuild-linux-ppc64le: 0.15.7 + esbuild-linux-riscv64: 0.15.7 + esbuild-linux-s390x: 0.15.7 + esbuild-netbsd-64: 0.15.7 + esbuild-openbsd-64: 0.15.7 + esbuild-sunos-64: 0.15.7 + esbuild-windows-32: 0.15.7 + esbuild-windows-64: 0.15.7 + esbuild-windows-arm64: 0.15.7 dependenciesMeta: "@esbuild/linux-loong64": optional: true @@ -7934,7 +7637,7 @@ __metadata: optional: true bin: esbuild: bin/esbuild - checksum: e351cd5647311aa857fa30fb3fa7055b39d7c82ebd96a7abd2657e42e62b5960aeb1dd9466ba97699ab1a1fbc0f0217b26b266fe5e9301590855c53b3133282f + checksum: 54ddaa6cf96798d817861b4f68cb8d176075dc09b6e0ed511c57e5db6fd86d2c673ac2ec631ad9b11678d58ad4a77cd6b7a3853b9c6eac29b7f5c6d38e42f92e languageName: node linkType: hard @@ -8246,8 +7949,8 @@ __metadata: linkType: hard "eslint-plugin-react@npm:^7.31.1": - version: 7.31.1 - resolution: "eslint-plugin-react@npm:7.31.1" + version: 7.31.5 + resolution: "eslint-plugin-react@npm:7.31.5" dependencies: array-includes: ^3.1.5 array.prototype.flatmap: ^1.3.0 @@ -8265,7 +7968,7 @@ __metadata: string.prototype.matchall: ^4.0.7 peerDependencies: eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 - checksum: 6217d4c4e36c8fea24facd0cdcf22b2fd38a3603db94ec7c0a6f430046c8564b6c6884e0a9d4a4b8766201f66e8b18af594002210421bf9b6623b1fc32e15a3a + checksum: 9ec72d5ab2da9a2dd6374f91ec0aefca297cc93f84dddfa16fe9a10acd31e78962a702f524b6855d41669c3ae5133d10e3ce8d596a4f1e61c4da47f4a6d3841b languageName: node linkType: hard @@ -8691,20 +8394,7 @@ __metadata: languageName: node linkType: hard -"expect@npm:^29.0.0": - version: 29.0.1 - resolution: "expect@npm:29.0.1" - dependencies: - "@jest/expect-utils": ^29.0.1 - jest-get-type: ^29.0.0 - jest-matcher-utils: ^29.0.1 - jest-message-util: ^29.0.1 - jest-util: ^29.0.1 - checksum: 103d9ecd00d5caefa0e536cde7abefa767f66d0e9ed8e00cf9e1bc1a14dfcee02080ebb9857974250dc68f3e525a85d81796fc37e405838d4cdb3613d76e48a4 - languageName: node - linkType: hard - -"expect@npm:^29.0.2": +"expect@npm:^29.0.0, expect@npm:^29.0.2": version: 29.0.2 resolution: "expect@npm:29.0.2" dependencies: @@ -8779,6 +8469,20 @@ __metadata: languageName: node linkType: hard +"fast-shallow-equal@npm:^1.0.0": + version: 1.0.0 + resolution: "fast-shallow-equal@npm:1.0.0" + checksum: ae89318ce43c0c46410d9511ac31520d59cfe675bad3d0b1cb5f900b2d635943d788b8370437178e91ae0d0412decc394229c03e69925ade929a8c02da241610 + languageName: node + linkType: hard + +"fastest-stable-stringify@npm:^2.0.2": + version: 2.0.2 + resolution: "fastest-stable-stringify@npm:2.0.2" + checksum: 5e2cb166c7bb6f16ac25a1e4be17f6b8d2923234c80739e12c9d21dea376b3128b2c63f90aa2aae7746cfec4dcf188d1d4eb6a964bb484ca133f17c8e9acfacc + languageName: node + linkType: hard + "fastq@npm:^1.6.0": version: 1.13.0 resolution: "fastq@npm:1.13.0" @@ -8861,13 +8565,6 @@ __metadata: languageName: node linkType: hard -"find-root@npm:^1.1.0": - version: 1.1.0 - resolution: "find-root@npm:1.1.0" - checksum: b2a59fe4b6c932eef36c45a048ae8f93c85640212ebe8363164814990ee20f154197505965f3f4f102efc33bfb1cbc26fd17c4a2fc739ebc51b886b137cbefaf - languageName: node - linkType: hard - "find-up@npm:^2.0.0": version: 2.1.0 resolution: "find-up@npm:2.1.0" @@ -9864,15 +9561,6 @@ __metadata: languageName: node linkType: hard -"hoist-non-react-statics@npm:^3.3.1": - version: 3.3.2 - resolution: "hoist-non-react-statics@npm:3.3.2" - dependencies: - react-is: ^16.7.0 - checksum: b1538270429b13901ee586aa44f4cc3ecd8831c061d06cb8322e50ea17b3f5ce4d0e2e66394761e6c8e152cd8c34fb3b4b690116c6ce2bd45b18c746516cb9e8 - languageName: node - linkType: hard - "hosted-git-info@npm:^2.1.4": version: 2.8.9 resolution: "hosted-git-info@npm:2.8.9" @@ -9898,49 +9586,10 @@ __metadata: languageName: node linkType: hard -"html-dom-parser@npm:1.2.0": - version: 1.2.0 - resolution: "html-dom-parser@npm:1.2.0" - dependencies: - domhandler: 4.3.1 - htmlparser2: 7.2.0 - checksum: d5e72baba7e1a9da334f023f3b3669247c5cebaf51b23011764202c11b3850339aa0fef9f26e00c2b0510e75fe6183453fcba33304a006f9fcde3d037bf60f3d - languageName: node - linkType: hard - "html-escaper@npm:^2.0.0": - version: 2.0.2 - resolution: "html-escaper@npm:2.0.2" - checksum: d2df2da3ad40ca9ee3a39c5cc6475ef67c8f83c234475f24d8e9ce0dc80a2c82df8e1d6fa78ddd1e9022a586ea1bd247a615e80a5cd9273d90111ddda7d9e974 - languageName: node - linkType: hard - -"html-react-parser@npm:1.4.12": - version: 1.4.12 - resolution: "html-react-parser@npm:1.4.12" - dependencies: - domhandler: 4.3.1 - html-dom-parser: 1.2.0 - react-property: 2.0.0 - style-to-js: 1.1.0 - peerDependencies: - react: 0.14 || 15 || 16 || 17 || 18 - checksum: ddc62b2f8d0f8836ca7aa18e51ddd3e329b51d77810547cd6bcb194aa36c61533ed64a8356283b64d57e1b4b96eb7c2fbf6e657e1b4c6d0fad8577132efa6f30 - languageName: node - linkType: hard - -"html-tokenize@npm:^2.0.0": - version: 2.0.1 - resolution: "html-tokenize@npm:2.0.1" - dependencies: - buffer-from: ~0.1.1 - inherits: ~2.0.1 - minimist: ~1.2.5 - readable-stream: ~1.0.27-1 - through2: ~0.4.1 - bin: - html-tokenize: bin/cmd.js - checksum: 4e04078fd22cf274fc1fa430490af3feda1c3bc4dd2fc88880caf6c2e816992d508bc44a7b16721b713a6b98d880f43e10ea4b169529056134cd488403adc8fc + version: 2.0.2 + resolution: "html-escaper@npm:2.0.2" + checksum: d2df2da3ad40ca9ee3a39c5cc6475ef67c8f83c234475f24d8e9ce0dc80a2c82df8e1d6fa78ddd1e9022a586ea1bd247a615e80a5cd9273d90111ddda7d9e974 languageName: node linkType: hard @@ -9951,18 +9600,6 @@ __metadata: languageName: node linkType: hard -"htmlparser2@npm:7.2.0": - version: 7.2.0 - resolution: "htmlparser2@npm:7.2.0" - dependencies: - domelementtype: ^2.0.1 - domhandler: ^4.2.2 - domutils: ^2.8.0 - entities: ^3.0.1 - checksum: 96563d9965729cfcb3f5f19c26d013c6831b4cb38d79d8c185e9cd669ea6a9ffe8fb9ccc74d29a068c9078aa0e2767053ed6b19aa32723c41550340d0094bea0 - languageName: node - linkType: hard - "http-basic@npm:^8.1.1": version: 8.1.3 resolution: "http-basic@npm:8.1.3" @@ -10062,6 +9699,13 @@ __metadata: languageName: node linkType: hard +"hyphenate-style-name@npm:^1.0.2": + version: 1.0.4 + resolution: "hyphenate-style-name@npm:1.0.4" + checksum: 4f5bf4b055089754924babebaa23c17845937bcca6aee95d5d015f8fa1e6814279002bd6a9e541e3fac2cd02519fc76305396727066c57c8e21a7e73e7a12137 + languageName: node + linkType: hard + "iconv-lite@npm:0.6.3, iconv-lite@npm:^0.6.2": version: 0.6.3 resolution: "iconv-lite@npm:0.6.3" @@ -10152,7 +9796,7 @@ __metadata: languageName: node linkType: hard -"inherits@npm:2, inherits@npm:^2.0.1, inherits@npm:^2.0.3, inherits@npm:^2.0.4, inherits@npm:~2.0.0, inherits@npm:~2.0.1, inherits@npm:~2.0.3": +"inherits@npm:2, inherits@npm:^2.0.1, inherits@npm:^2.0.3, inherits@npm:^2.0.4, inherits@npm:~2.0.0, inherits@npm:~2.0.3": version: 2.0.4 resolution: "inherits@npm:2.0.4" checksum: 4a48a733847879d6cf6691860a6b1e3f0f4754176e4d71494c41f3475553768b10f84b5ce1d40fbd0e34e6bfbb864ee35858ad4dd2cf31e02fc4a154b724d7f1 @@ -10180,6 +9824,15 @@ __metadata: languageName: node linkType: hard +"inline-style-prefixer@npm:^6.0.0": + version: 6.0.1 + resolution: "inline-style-prefixer@npm:6.0.1" + dependencies: + css-in-js-utils: ^2.0.0 + checksum: 0bfa6fa89faa21e425c71425910c37c7b35a16ea753586c408fcc9246c84937c1b8184e6ce792139cda5de5cce8e1bc9eb0ba9f30968bdc97e7a06ece21c0737 + languageName: node + linkType: hard + "internal-slot@npm:^1.0.3": version: 1.0.3 resolution: "internal-slot@npm:1.0.3" @@ -10599,13 +10252,6 @@ __metadata: languageName: node linkType: hard -"isarray@npm:0.0.1": - version: 0.0.1 - resolution: "isarray@npm:0.0.1" - checksum: 49191f1425681df4a18c2f0f93db3adb85573bcdd6a4482539d98eac9e705d8961317b01175627e860516a2fc45f8f9302db26e5a380a97a520e272e2a40a8d4 - languageName: node - linkType: hard - "isarray@npm:~1.0.0": version: 1.0.0 resolution: "isarray@npm:1.0.0" @@ -10620,6 +10266,13 @@ __metadata: languageName: node linkType: hard +"isobject@npm:^3.0.1": + version: 3.0.1 + resolution: "isobject@npm:3.0.1" + checksum: db85c4c970ce30693676487cca0e61da2ca34e8d4967c2e1309143ff910c207133a969f9e4ddb2dc6aba670aabce4e0e307146c310350b298e74a31f7d464703 + languageName: node + linkType: hard + "isstream@npm:~0.1.2": version: 0.1.2 resolution: "isstream@npm:0.1.2" @@ -10793,18 +10446,6 @@ __metadata: languageName: node linkType: hard -"jest-diff@npm:^29.0.1": - version: 29.0.1 - resolution: "jest-diff@npm:29.0.1" - dependencies: - chalk: ^4.0.0 - diff-sequences: ^29.0.0 - jest-get-type: ^29.0.0 - pretty-format: ^29.0.1 - checksum: f6f80ab9af14dee8046342d074ab64b1c0c4eb5d4a5d71aec0c71eba0192be1864fc5c270a33c6163184561b1fe516c0e2ecd3f21b267340cf710bab61441b3d - languageName: node - linkType: hard - "jest-diff@npm:^29.0.2": version: 29.0.2 resolution: "jest-diff@npm:29.0.2" @@ -10900,18 +10541,6 @@ __metadata: languageName: node linkType: hard -"jest-matcher-utils@npm:^29.0.1": - version: 29.0.1 - resolution: "jest-matcher-utils@npm:29.0.1" - dependencies: - chalk: ^4.0.0 - jest-diff: ^29.0.1 - jest-get-type: ^29.0.0 - pretty-format: ^29.0.1 - checksum: 1ad41a91d05703b3396c9a344a4c1afd9155913403289b0d5282e42e67540418f17f802a60bae4e3931eb80a08d42b4e6f1e04835d4d122cc83ccd68fe181524 - languageName: node - linkType: hard - "jest-matcher-utils@npm:^29.0.2": version: 29.0.2 resolution: "jest-matcher-utils@npm:29.0.2" @@ -10924,23 +10553,6 @@ __metadata: languageName: node linkType: hard -"jest-message-util@npm:^29.0.1": - version: 29.0.1 - resolution: "jest-message-util@npm:29.0.1" - dependencies: - "@babel/code-frame": ^7.12.13 - "@jest/types": ^29.0.1 - "@types/stack-utils": ^2.0.0 - chalk: ^4.0.0 - graceful-fs: ^4.2.9 - micromatch: ^4.0.4 - pretty-format: ^29.0.1 - slash: ^3.0.0 - stack-utils: ^2.0.3 - checksum: cef700aeb8746d1e55a39ba4d9bfc91d580373cf4afca22ee9499dee7ab0147ea8349ccb0c2b2d89ab5f374a9f67ec0560dc6eeb123a28795fafb6bf0ac5f9a3 - languageName: node - linkType: hard - "jest-message-util@npm:^29.0.2": version: 29.0.2 resolution: "jest-message-util@npm:29.0.2" @@ -11105,20 +10717,6 @@ __metadata: languageName: node linkType: hard -"jest-util@npm:^29.0.1": - version: 29.0.1 - resolution: "jest-util@npm:29.0.1" - dependencies: - "@jest/types": ^29.0.1 - "@types/node": "*" - chalk: ^4.0.0 - ci-info: ^3.2.0 - graceful-fs: ^4.2.9 - picomatch: ^2.2.3 - checksum: 7404658788d9a8f3c69b946cbf7d9a773f1b353474792ab4d63b0e7f44cf07be87999102b49f2396e205a43b1b995a742ccc1d4a23966594c4b8976d0d116935 - languageName: node - linkType: hard - "jest-util@npm:^29.0.2": version: 29.0.2 resolution: "jest-util@npm:29.0.2" @@ -11226,6 +10824,13 @@ __metadata: languageName: node linkType: hard +"js-cookie@npm:^2.2.1": + version: 2.2.1 + resolution: "js-cookie@npm:2.2.1" + checksum: 9b1fb980a1c5e624fd4b28ea4867bb30c71e04c4484bb3a42766344c533faa684de9498e443425479ec68609e96e27b60614bfe354877c449c631529b6d932f2 + languageName: node + linkType: hard + "js-tokens@npm:^3.0.0 || ^4.0.0, js-tokens@npm:^4.0.0": version: 4.0.0 resolution: "js-tokens@npm:4.0.0" @@ -12268,6 +11873,13 @@ __metadata: languageName: node linkType: hard +"mdn-data@npm:2.0.14": + version: 2.0.14 + resolution: "mdn-data@npm:2.0.14" + checksum: 9d0128ed425a89f4cba8f787dca27ad9408b5cb1b220af2d938e2a0629d17d879a34d2cb19318bdb26c3f14c77dd5dfbae67211f5caaf07b61b1f2c5c8c7dc16 + languageName: node + linkType: hard + "mdn-data@npm:2.0.28": version: 2.0.28 resolution: "mdn-data@npm:2.0.28" @@ -12876,7 +12488,7 @@ __metadata: languageName: node linkType: hard -"minimist@npm:^1.2.0, minimist@npm:^1.2.3, minimist@npm:^1.2.5, minimist@npm:^1.2.6, minimist@npm:~1.2.5": +"minimist@npm:^1.2.0, minimist@npm:^1.2.3, minimist@npm:^1.2.5, minimist@npm:^1.2.6": version: 1.2.6 resolution: "minimist@npm:1.2.6" checksum: d15428cd1e11eb14e1233bcfb88ae07ed7a147de251441d61158619dfb32c4d7e9061d09cab4825fdee18ecd6fce323228c8c47b5ba7cd20af378ca4048fb3fb @@ -13053,16 +12665,6 @@ __metadata: languageName: node linkType: hard -"multipipe@npm:^1.0.2": - version: 1.0.2 - resolution: "multipipe@npm:1.0.2" - dependencies: - duplexer2: ^0.1.2 - object-assign: ^4.1.0 - checksum: 99cf8934714da7f9ce03e1f0a99621a41443217d80849c62e22b31b6ac356b9acd22f41e555fd7a759f1c7c9d3273e7abff2fb82dff8285f00a6a1022727e4ab - languageName: node - linkType: hard - "mz@npm:^2.7.0": version: 2.7.0 resolution: "mz@npm:2.7.0" @@ -13083,6 +12685,25 @@ __metadata: languageName: node linkType: hard +"nano-css@npm:^5.3.1": + version: 5.3.5 + resolution: "nano-css@npm:5.3.5" + dependencies: + css-tree: ^1.1.2 + csstype: ^3.0.6 + fastest-stable-stringify: ^2.0.2 + inline-style-prefixer: ^6.0.0 + rtl-css-js: ^1.14.0 + sourcemap-codec: ^1.4.8 + stacktrace-js: ^2.0.2 + stylis: ^4.0.6 + peerDependencies: + react: "*" + react-dom: "*" + checksum: 8d4e59a2a29477221af47320d850a7dcee1ac51774fb5a0dce6ee59b22174c7149f75108235de85559581fbb2b93aa222a2b32ea53c93ba3f5d322c4d098c355 + languageName: node + linkType: hard + "nanoid@npm:^3.3.4": version: 3.3.4 resolution: "nanoid@npm:3.3.4" @@ -13142,6 +12763,29 @@ __metadata: languageName: node linkType: hard +"next-progress@npm:^2.2.0": + version: 2.2.0 + resolution: "next-progress@npm:2.2.0" + dependencies: + nprogress: ^0.2.0 + peerDependencies: + next: ">=6.0.0" + react: ">=16.0.0" + checksum: ef0e2c66c6990a6d0cf20c28896461ab32a3322972d52f3cb3ee2d2d58bdc2b620a402b1d7df9e0340b230d9ec9a9457584871ea0b8b890b1fc334d1886d2b97 + languageName: node + linkType: hard + +"next-themes@npm:^0.2.0": + version: 0.2.0 + resolution: "next-themes@npm:0.2.0" + peerDependencies: + next: "*" + react: "*" + react-dom: "*" + checksum: cee02db16bee471856557db9572ffa041b1d77254798e345fad09e1bd8b878e937cdacc73bb73c598eb3b042f20fff0201bd73d2de42e2061fa818585415e857 + languageName: node + linkType: hard + "next@npm:^12.2.5": version: 12.2.5 resolution: "next@npm:12.2.5" @@ -13443,6 +13087,13 @@ __metadata: languageName: node linkType: hard +"nprogress@npm:^0.2.0": + version: 0.2.0 + resolution: "nprogress@npm:0.2.0" + checksum: 66b7bec5d563ecf2d1c3d2815e6d5eb74ed815eee8563e0afa63d3f185ab1b9cf2ddd97e1ded263b9995c5019d26d600320e849e50f3747984daa033744619dc + languageName: node + linkType: hard + "nth-check@npm:^2.0.0, nth-check@npm:^2.0.1": version: 2.1.1 resolution: "nth-check@npm:2.1.1" @@ -13494,13 +13145,6 @@ __metadata: languageName: node linkType: hard -"object-keys@npm:~0.4.0": - version: 0.4.0 - resolution: "object-keys@npm:0.4.0" - checksum: 1be3ebe9b48c0d5eda8e4a30657d887a748cb42435e0e2eaf49faf557bdd602cd2b7558b8ce90a4eb2b8592d16b875a1900bce859cbb0f35b21c67e11a45313c - languageName: node - linkType: hard - "object-to-spawn-args@npm:^2.0.1": version: 2.0.1 resolution: "object-to-spawn-args@npm:2.0.1" @@ -14078,6 +13722,13 @@ __metadata: languageName: node linkType: hard +"prefix-style@npm:2.0.1": + version: 2.0.1 + resolution: "prefix-style@npm:2.0.1" + checksum: 79c3559b74417a1552a91d2008d64cc7f326ff4fe8ed2053519663677238f28455bfda0dd935cb1d6690ac7281aff14361e15cfcf83ec263a8183827df7b2a90 + languageName: node + linkType: hard + "prelude-ls@npm:^1.2.1": version: 1.2.1 resolution: "prelude-ls@npm:1.2.1" @@ -14092,6 +13743,15 @@ __metadata: languageName: node linkType: hard +"prettier-plugin-tailwindcss@npm:^0.1.13": + version: 0.1.13 + resolution: "prettier-plugin-tailwindcss@npm:0.1.13" + peerDependencies: + prettier: ">=2.2.0" + checksum: 1b9000686e661be81de7d36d514c5ee34a98b11639b538bce8dd3a482c073c0148feb9d54b526babaede681d1c5ecb318ad97f38e8d71dd5cc26c33dfcaf8344 + languageName: node + linkType: hard + "prettier@npm:^2.7.1": version: 2.7.1 resolution: "prettier@npm:2.7.1" @@ -14131,18 +13791,7 @@ __metadata: languageName: node linkType: hard -"pretty-format@npm:^29.0.0, pretty-format@npm:^29.0.1": - version: 29.0.1 - resolution: "pretty-format@npm:29.0.1" - dependencies: - "@jest/schemas": ^29.0.0 - ansi-styles: ^5.0.0 - react-is: ^18.0.0 - checksum: d31e72769b0bc0453123c52259dba28551cfc3f02b4968fa286c14dcaed08c1e68e45d5383d425f1ac5ab829c908ebe18f9aee4e4df507be5fc82ab51b1e8995 - languageName: node - linkType: hard - -"pretty-format@npm:^29.0.2": +"pretty-format@npm:^29.0.0, pretty-format@npm:^29.0.2": version: 29.0.2 resolution: "pretty-format@npm:29.0.2" dependencies: @@ -14247,7 +13896,7 @@ __metadata: languageName: node linkType: hard -"prop-types@npm:^15.8.1": +"prop-types@npm:^15.5.10, prop-types@npm:^15.8.1": version: 15.8.1 resolution: "prop-types@npm:15.8.1" dependencies: @@ -14351,6 +14000,15 @@ __metadata: languageName: node linkType: hard +"raf@npm:^3.1.0": + version: 3.4.1 + resolution: "raf@npm:3.4.1" + dependencies: + performance-now: ^2.1.0 + checksum: 50ba284e481c8185dbcf45fc4618ba3aec580bb50c9121385d5698cb6012fe516d2015b1df6dd407a7b7c58d44be8086108236affbce1861edd6b44637c8cd52 + languageName: node + linkType: hard + "rc@npm:1.2.8, rc@npm:^1.2.7, rc@npm:^1.2.8": version: 1.2.8 resolution: "rc@npm:1.2.8" @@ -14365,6 +14023,20 @@ __metadata: languageName: node linkType: hard +"react-custom-scrollbars-2@npm:^4.5.0": + version: 4.5.0 + resolution: "react-custom-scrollbars-2@npm:4.5.0" + dependencies: + dom-css: ^2.0.0 + prop-types: ^15.5.10 + raf: ^3.1.0 + peerDependencies: + react: ^0.14.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 + react-dom: ^0.14.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 || ^18.0.0 + checksum: b264629c0bfcc292106540f802e4d4281fb4acfab93ab259dcde096b72f135a1be6f2fcf636478f9e9bce6e15a9c6eb624c799184bb478073bb7ace86588a1de + languageName: node + linkType: hard + "react-dom@npm:^18.2.0": version: 18.2.0 resolution: "react-dom@npm:18.2.0" @@ -14386,7 +14058,7 @@ __metadata: languageName: node linkType: hard -"react-is@npm:^16.13.1, react-is@npm:^16.7.0": +"react-is@npm:^16.13.1": version: 16.13.1 resolution: "react-is@npm:16.13.1" checksum: f7a19ac3496de32ca9ae12aa030f00f14a3d45374f1ceca0af707c831b2a6098ef0d6bdae51bd437b0a306d7f01d4677fcc8de7c0d331eb47ad0f46130e53c5f @@ -14407,13 +14079,6 @@ __metadata: languageName: node linkType: hard -"react-property@npm:2.0.0": - version: 2.0.0 - resolution: "react-property@npm:2.0.0" - checksum: 8a444df30ef0937689c7968dae2501a0ca523777169f450e1f7ef5beeb855d6509bd058bf612f6ed8f459aa35468335d356e50264492e1938586e59fdb988262 - languageName: node - linkType: hard - "react-refresh@npm:^0.14.0": version: 0.14.0 resolution: "react-refresh@npm:0.14.0" @@ -14436,16 +14101,38 @@ __metadata: languageName: node linkType: hard -"react-textarea-autosize@npm:8.3.4": - version: 8.3.4 - resolution: "react-textarea-autosize@npm:8.3.4" +"react-universal-interface@npm:^0.6.2": + version: 0.6.2 + resolution: "react-universal-interface@npm:0.6.2" + peerDependencies: + react: "*" + tslib: "*" + checksum: 070a7e9e3cdd8b0ec91a2ac9ac0a8df6bcb3fd183d2775bf0f439b9870fc1faf5b4fa9fe9741abd5187f0a35be645cb4004e1c9ebda9ada7e5d0a624f94910cb + languageName: node + linkType: hard + +"react-use@npm:^17.4.0": + version: 17.4.0 + resolution: "react-use@npm:17.4.0" dependencies: - "@babel/runtime": ^7.10.2 - use-composed-ref: ^1.3.0 - use-latest: ^1.2.1 + "@types/js-cookie": ^2.2.6 + "@xobotyi/scrollbar-width": ^1.9.5 + copy-to-clipboard: ^3.3.1 + fast-deep-equal: ^3.1.3 + fast-shallow-equal: ^1.0.0 + js-cookie: ^2.2.1 + nano-css: ^5.3.1 + react-universal-interface: ^0.6.2 + resize-observer-polyfill: ^1.5.1 + screenfull: ^5.1.0 + set-harmonic-interval: ^1.0.1 + throttle-debounce: ^3.0.1 + ts-easing: ^0.2.0 + tslib: ^2.1.0 peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - checksum: 87360d4392276d4e87511a73be9b0634b8bcce8f4f648cf659334d993f25ad3d4062f468f1e1944fc614123acae4299580aad00b760c6a96cec190e076f847f5 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + checksum: 0889da919b49a186de375ec15d2778b954ae981c523acd17dd496e4a4da7b6190efe7993491e1b85fdd6de3e745d08a4eaba4caa35408d570b5f1de550f35d11 languageName: node linkType: hard @@ -14513,7 +14200,7 @@ __metadata: languageName: node linkType: hard -"readable-stream@npm:^2.0.2, readable-stream@npm:^2.0.6, readable-stream@npm:^2.2.2, readable-stream@npm:~2.3.6": +"readable-stream@npm:^2.0.6, readable-stream@npm:^2.2.2, readable-stream@npm:~2.3.6": version: 2.3.7 resolution: "readable-stream@npm:2.3.7" dependencies: @@ -14528,18 +14215,6 @@ __metadata: languageName: node linkType: hard -"readable-stream@npm:~1.0.17, readable-stream@npm:~1.0.27-1": - version: 1.0.34 - resolution: "readable-stream@npm:1.0.34" - dependencies: - core-util-is: ~1.0.0 - inherits: ~2.0.1 - isarray: 0.0.1 - string_decoder: ~0.10.x - checksum: 85042c537e4f067daa1448a7e257a201070bfec3dd2706abdbd8ebc7f3418eb4d3ed4b8e5af63e2544d69f88ab09c28d5da3c0b77dc76185fddd189a59863b60 - languageName: node - linkType: hard - "readable-web-to-node-stream@npm:^3.0.2": version: 3.0.2 resolution: "readable-web-to-node-stream@npm:3.0.2" @@ -14894,6 +14569,13 @@ __metadata: languageName: node linkType: hard +"resize-observer-polyfill@npm:^1.5.1": + version: 1.5.1 + resolution: "resize-observer-polyfill@npm:1.5.1" + checksum: 57e7f79489867b00ba43c9c051524a5c8f162a61d5547e99333549afc23e15c44fd43f2f318ea0261ea98c0eb3158cca261e6f48d66e1ed1cd1f340a43977094 + languageName: node + linkType: hard + "resolve-cwd@npm:^3.0.0": version: 3.0.0 resolution: "resolve-cwd@npm:3.0.0" @@ -14933,7 +14615,7 @@ __metadata: languageName: node linkType: hard -"resolve@npm:^1.1.6, resolve@npm:^1.10.0, resolve@npm:^1.14.2, resolve@npm:^1.19.0, resolve@npm:^1.20.0, resolve@npm:^1.22.1, resolve@npm:^1.3.2": +"resolve@npm:^1.1.6, resolve@npm:^1.10.0, resolve@npm:^1.14.2, resolve@npm:^1.20.0, resolve@npm:^1.22.1, resolve@npm:^1.3.2": version: 1.22.1 resolution: "resolve@npm:1.22.1" dependencies: @@ -14978,7 +14660,7 @@ __metadata: languageName: node linkType: hard -"resolve@patch:resolve@^1.1.6#~builtin, resolve@patch:resolve@^1.10.0#~builtin, resolve@patch:resolve@^1.14.2#~builtin, resolve@patch:resolve@^1.19.0#~builtin, resolve@patch:resolve@^1.20.0#~builtin, resolve@patch:resolve@^1.22.1#~builtin, resolve@patch:resolve@^1.3.2#~builtin": +"resolve@patch:resolve@^1.1.6#~builtin, resolve@patch:resolve@^1.10.0#~builtin, resolve@patch:resolve@^1.14.2#~builtin, resolve@patch:resolve@^1.20.0#~builtin, resolve@patch:resolve@^1.22.1#~builtin, resolve@patch:resolve@^1.3.2#~builtin": version: 1.22.1 resolution: "resolve@patch:resolve@npm%3A1.22.1#~builtin::version=1.22.1&hash=07638b" dependencies: @@ -15122,6 +14804,15 @@ __metadata: languageName: node linkType: hard +"rtl-css-js@npm:^1.14.0": + version: 1.16.0 + resolution: "rtl-css-js@npm:1.16.0" + dependencies: + "@babel/runtime": ^7.1.2 + checksum: 51756329f691cacd3e1b48f0f9d04a69338a90013f2d2942ca1ae3b069c952f70055f5fd76c66921e9a5cb956276252376a847c3294bd0ee54be9ceb32ea868c + languageName: node + linkType: hard + "run-parallel@npm:^1.1.9": version: 1.2.0 resolution: "run-parallel@npm:1.2.0" @@ -15205,6 +14896,13 @@ __metadata: languageName: node linkType: hard +"screenfull@npm:^5.1.0": + version: 5.2.0 + resolution: "screenfull@npm:5.2.0" + checksum: 21eae33b780eb4679ea0ea2d14734b11168cf35049c45a2bf24ddeb39c67a788e7a8fb46d8b61ca6d8367fd67ce9dd4fc8bfe476489249c7189c2a79cf83f51a + languageName: node + linkType: hard + "semver-diff@npm:^3.1.1": version: 3.1.1 resolution: "semver-diff@npm:3.1.1" @@ -15268,9 +14966,16 @@ __metadata: languageName: node linkType: hard -"sharp@npm:^0.30.7": - version: 0.30.7 - resolution: "sharp@npm:0.30.7" +"set-harmonic-interval@npm:^1.0.1": + version: 1.0.1 + resolution: "set-harmonic-interval@npm:1.0.1" + checksum: c122b831c2e0b1fb812e5e9d065094b9d174bd0576f9a779ab7a7d8881c8f6dd7d5fcab9a2553da15eea670eb598f9dd4d5162b626d45cc9c529706aa1444a84 + languageName: node + linkType: hard + +"sharp@npm:^0.31.0": + version: 0.31.0 + resolution: "sharp@npm:0.31.0" dependencies: color: ^4.2.3 detect-libc: ^2.0.1 @@ -15281,7 +14986,7 @@ __metadata: simple-get: ^4.0.1 tar-fs: ^2.1.1 tunnel-agent: ^0.6.0 - checksum: bbc63ca3c7ea8a5bff32cd77022cfea30e25a03f5bd031e935924bf6cf0e11e3388e8b0e22b3137bf8816aa73407f1e4fbeb190f3a35605c27ffca9f32b91601 + checksum: 1ab73fea3a506f0bf290eb9dff6e7bab7947813e69bf8ca3eebcbe96498cb23dd6c8d8d02d67575fd8e9b555b01d9529d140c5a66e3a774855ba758455a90f3e languageName: node linkType: hard @@ -15506,6 +15211,13 @@ __metadata: languageName: node linkType: hard +"source-map@npm:0.5.6": + version: 0.5.6 + resolution: "source-map@npm:0.5.6" + checksum: 390b3f5165c9631a74fb6fb55ba61e62a7f9b7d4026ae0e2bfc2899c241d71c1bccb8731c496dc7f7cb79a5f523406eb03d8c5bebe8448ee3fc38168e2d209c8 + languageName: node + linkType: hard + "source-map@npm:0.8.0-beta.0": version: 0.8.0-beta.0 resolution: "source-map@npm:0.8.0-beta.0" @@ -15515,13 +15227,6 @@ __metadata: languageName: node linkType: hard -"source-map@npm:^0.5.7": - version: 0.5.7 - resolution: "source-map@npm:0.5.7" - checksum: 5dc2043b93d2f194142c7f38f74a24670cd7a0063acdaf4bf01d2964b402257ae843c2a8fa822ad5b71013b5fcafa55af7421383da919752f22ff488bc553f4d - languageName: node - linkType: hard - "source-map@npm:^0.6.0, source-map@npm:^0.6.1, source-map@npm:~0.6.1": version: 0.6.1 resolution: "source-map@npm:0.6.1" @@ -15662,6 +15367,15 @@ __metadata: languageName: node linkType: hard +"stack-generator@npm:^2.0.5": + version: 2.0.10 + resolution: "stack-generator@npm:2.0.10" + dependencies: + stackframe: ^1.3.4 + checksum: 4fc3978a934424218a0aa9f398034e1f78153d5ff4f4ff9c62478c672debb47dd58de05b09fc3900530cbb526d72c93a6e6c9353bacc698e3b1c00ca3dda0c47 + languageName: node + linkType: hard + "stack-utils@npm:^2.0.3": version: 2.0.5 resolution: "stack-utils@npm:2.0.5" @@ -15671,6 +15385,34 @@ __metadata: languageName: node linkType: hard +"stackframe@npm:^1.3.4": + version: 1.3.4 + resolution: "stackframe@npm:1.3.4" + checksum: bae1596873595c4610993fa84f86a3387d67586401c1816ea048c0196800c0646c4d2da98c2ee80557fd9eff05877efe33b91ba6cd052658ed96ddc85d19067d + languageName: node + linkType: hard + +"stacktrace-gps@npm:^3.0.4": + version: 3.1.2 + resolution: "stacktrace-gps@npm:3.1.2" + dependencies: + source-map: 0.5.6 + stackframe: ^1.3.4 + checksum: 85daa232d138239b6ae0f4bcdd87d15d302a045d93625db17614030945b5314e204b5fbcf9bee5b6f4f9e6af5fca05f65c27fe910894b861ef6853b99470aa1c + languageName: node + linkType: hard + +"stacktrace-js@npm:^2.0.2": + version: 2.0.2 + resolution: "stacktrace-js@npm:2.0.2" + dependencies: + error-stack-parser: ^2.0.6 + stack-generator: ^2.0.5 + stacktrace-gps: ^3.0.4 + checksum: 081e786d56188ac04ac6604c09cd863b3ca2b4300ec061366cf68c3e4ad9edaa34fb40deea03cc23a05f442aa341e9171f47313f19bd588f9bec6c505a396286 + languageName: node + linkType: hard + "stream-connect@npm:^1.0.2": version: 1.0.2 resolution: "stream-connect@npm:1.0.2" @@ -15784,13 +15526,6 @@ __metadata: languageName: node linkType: hard -"string_decoder@npm:~0.10.x": - version: 0.10.31 - resolution: "string_decoder@npm:0.10.31" - checksum: fe00f8e303647e5db919948ccb5ce0da7dea209ab54702894dd0c664edd98e5d4df4b80d6fabf7b9e92b237359d21136c95bf068b2f7760b772ca974ba970202 - languageName: node - linkType: hard - "string_decoder@npm:~1.1.1": version: 1.1.1 resolution: "string_decoder@npm:1.1.1" @@ -15907,16 +15642,7 @@ __metadata: languageName: node linkType: hard -"style-to-js@npm:1.1.0": - version: 1.1.0 - resolution: "style-to-js@npm:1.1.0" - dependencies: - style-to-object: 0.3.0 - checksum: 8facf902b55271de8edf105d7b5d5017869518e34a2ee4b8e25093ea3ecf25ead9cc4b6a7fee7c17f7ac3ff95d36198d81aa4d53a46d4fee7d856903a097557d - languageName: node - linkType: hard - -"style-to-object@npm:0.3.0, style-to-object@npm:^0.3.0": +"style-to-object@npm:^0.3.0": version: 0.3.0 resolution: "style-to-object@npm:0.3.0" dependencies: @@ -15939,10 +15665,10 @@ __metadata: languageName: node linkType: hard -"stylis@npm:4.0.13": - version: 4.0.13 - resolution: "stylis@npm:4.0.13" - checksum: 8ea7a87028b6383c6a982231c4b5b6150031ce028e0fdaf7b2ace82253d28a8af50cc5a9da8a421d3c7c4441592f393086e332795add672aa4a825f0fe3713a3 +"stylis@npm:^4.0.6": + version: 4.1.1 + resolution: "stylis@npm:4.1.1" + checksum: e9b0a086996a94c44d45933287731313f6ecdbf9334410231d882d31a1890fb36e34a7b163487e2d7f992c2044e4cb37179810fc6f758f359a431343c2374ed2 languageName: node linkType: hard @@ -16257,6 +15983,13 @@ __metadata: languageName: node linkType: hard +"throttle-debounce@npm:^3.0.1": + version: 3.0.1 + resolution: "throttle-debounce@npm:3.0.1" + checksum: e34ef638e8df3a9154249101b68afcbf2652a139c803415ef8a2f6a8bc577bcd4d79e4bb914ad3cd206523ac78b9fb7e80885bfa049f64fbb1927f99d98b5736 + languageName: node + linkType: hard + "through2@npm:^2.0.0": version: 2.0.5 resolution: "through2@npm:2.0.5" @@ -16276,16 +16009,6 @@ __metadata: languageName: node linkType: hard -"through2@npm:~0.4.1": - version: 0.4.2 - resolution: "through2@npm:0.4.2" - dependencies: - readable-stream: ~1.0.17 - xtend: ~2.1.1 - checksum: 50e41d272db4a74b10a62b7e92eeeb8d30e426a7a8a772cd85fac0f8e21d92c6e5cb5012d7db5f7a20f6e147e1f14f87062058c77b05bc9d463ae4d8b3eb1e42 - languageName: node - linkType: hard - "through@npm:2, through@npm:>=2.2.7 <3, through@npm:^2.3.8": version: 2.3.8 resolution: "through@npm:2.3.8" @@ -16339,6 +16062,15 @@ __metadata: languageName: node linkType: hard +"to-camel-case@npm:1.0.0": + version: 1.0.0 + resolution: "to-camel-case@npm:1.0.0" + dependencies: + to-space-case: ^1.0.0 + checksum: 2f74cfcffa58e8ddede7e01a03eda2cc3f0ab50efdad1d0f1092d55b4e499be43846d1f9087c458fa9efde4958e407738197d65858272c56c915b649b9ca1e62 + languageName: node + linkType: hard + "to-fast-properties@npm:^2.0.0": version: 2.0.0 resolution: "to-fast-properties@npm:2.0.0" @@ -16346,6 +16078,13 @@ __metadata: languageName: node linkType: hard +"to-no-case@npm:^1.0.0": + version: 1.0.2 + resolution: "to-no-case@npm:1.0.2" + checksum: 1d85326eeb89f9f3a805bf5b395bcabb8556e882350164c1faa10846076732f4cec02ac95b016e7d6bb2f55e448ce5dd227c7699ec43e387c705a5b2b1ee2963 + languageName: node + linkType: hard + "to-readable-stream@npm:^1.0.0": version: 1.0.0 resolution: "to-readable-stream@npm:1.0.0" @@ -16362,6 +16101,22 @@ __metadata: languageName: node linkType: hard +"to-space-case@npm:^1.0.0": + version: 1.0.0 + resolution: "to-space-case@npm:1.0.0" + dependencies: + to-no-case: ^1.0.0 + checksum: 157cebe3e98e7cb465fe1978cf26450cc8ea8e637a01039854fac7ed60ad074e5e18b32333cc5f30df81b81ca374d63df768cd4c1fa0fe672605f965376227f4 + languageName: node + linkType: hard + +"toggle-selection@npm:^1.0.6": + version: 1.0.6 + resolution: "toggle-selection@npm:1.0.6" + checksum: a90dc80ed1e7b18db8f4e16e86a5574f87632dc729cfc07d9ea3ced50021ad42bb4e08f22c0913e0b98e3837b0b717e0a51613c65f30418e21eb99da6556a74c + languageName: node + linkType: hard + "token-types@npm:^5.0.1": version: 5.0.1 resolution: "token-types@npm:5.0.1" @@ -16435,6 +16190,13 @@ __metadata: languageName: node linkType: hard +"ts-easing@npm:^0.2.0": + version: 0.2.0 + resolution: "ts-easing@npm:0.2.0" + checksum: e67ee862acca3b2e2718e736f31999adcef862d0df76d76a0e138588728d8a87dfec9978556044640bd0e90203590ad88ac2fe8746d0e9959b8d399132315150 + languageName: node + linkType: hard + "ts-interface-checker@npm:^0.1.9": version: 0.1.13 resolution: "ts-interface-checker@npm:0.1.13" @@ -16963,12 +16725,12 @@ __metadata: linkType: hard "typescript@npm:next": - version: 4.9.0-dev.20220902 - resolution: "typescript@npm:4.9.0-dev.20220902" + version: 4.9.0-dev.20220904 + resolution: "typescript@npm:4.9.0-dev.20220904" bin: tsc: bin/tsc tsserver: bin/tsserver - checksum: 7a70c76cb5ac454eae4d15bd673f94f589dbe2e4ebd63c2d00d2bffee059c8f6b9dbdb45c567e175562ba0a3fcf9d3b433f72869fe12578f9949367001c873d8 + checksum: a3699604c77df70768aeef24a512453e8fa8d1a510fb8738052dcd38d70da4c19360e08dfdcfdbb1221bb5227afe3f0da8d5a872302f9b4b66e7e494b598162b languageName: node linkType: hard @@ -17003,12 +16765,12 @@ __metadata: linkType: hard "typescript@patch:typescript@next#~builtin": - version: 4.9.0-dev.20220902 - resolution: "typescript@patch:typescript@npm%3A4.9.0-dev.20220902#~builtin::version=4.9.0-dev.20220902&hash=7ad353" + version: 4.9.0-dev.20220904 + resolution: "typescript@patch:typescript@npm%3A4.9.0-dev.20220904#~builtin::version=4.9.0-dev.20220904&hash=7ad353" bin: tsc: bin/tsc tsserver: bin/tsserver - checksum: fded29ff273c5b76d97ad0ab4dd6a38e746add0a102a6a8fa8bec755f35237e505d73d13a1a966513e6fd38934ba9f7db8cd0a628148d9dfe6c7cc64584c21ca + checksum: 1f6ab5e5517cb999752eca08c1a77f5c76d9d810081776ab6e0ccf3c1e126be1d6bc8703ec45c26311044c7c2734ece51135cc313d2a1cd12a864d4208e87a2c languageName: node linkType: hard @@ -17355,41 +17117,6 @@ __metadata: languageName: node linkType: hard -"use-composed-ref@npm:^1.3.0": - version: 1.3.0 - resolution: "use-composed-ref@npm:1.3.0" - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - checksum: f771cbadfdc91e03b7ab9eb32d0fc0cc647755711801bf507e891ad38c4bbc5f02b2509acadf9c965ec9c5f2f642fd33bdfdfb17b0873c4ad0a9b1f5e5e724bf - languageName: node - linkType: hard - -"use-isomorphic-layout-effect@npm:^1.1.1": - version: 1.1.2 - resolution: "use-isomorphic-layout-effect@npm:1.1.2" - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - peerDependenciesMeta: - "@types/react": - optional: true - checksum: a6532f7fc9ae222c3725ff0308aaf1f1ddbd3c00d685ef9eee6714fd0684de5cb9741b432fbf51e61a784e2955424864f7ea9f99734a02f237b17ad3e18ea5cb - languageName: node - linkType: hard - -"use-latest@npm:^1.2.1": - version: 1.2.1 - resolution: "use-latest@npm:1.2.1" - dependencies: - use-isomorphic-layout-effect: ^1.1.1 - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - peerDependenciesMeta: - "@types/react": - optional: true - checksum: ed3f2ddddf6f21825e2ede4c2e0f0db8dcce5129802b69d1f0575fc1b42380436e8c76a6cd885d4e9aa8e292e60fb8b959c955f33c6a9123b83814a1a1875367 - languageName: node - linkType: hard - "use-sync-external-store@npm:1.2.0": version: 1.2.0 resolution: "use-sync-external-store@npm:1.2.0" @@ -17599,9 +17326,9 @@ __metadata: languageName: node linkType: hard -"vitest@npm:0.23.0, vitest@npm:^0.23.0": - version: 0.23.0 - resolution: "vitest@npm:0.23.0" +"vitest@npm:0.23.1, vitest@npm:^0.23.1": + version: 0.23.1 + resolution: "vitest@npm:0.23.1" dependencies: "@types/chai": ^4.3.3 "@types/chai-subset": ^1.3.3 @@ -17633,7 +17360,7 @@ __metadata: optional: true bin: vitest: vitest.mjs - checksum: e35db8a2618b95cda9c98a8e1b5a6c83e7c84c7500296614829adef21ca7ac3e9580b19062f379e57df8d847a53eb6bfd8d66c501b5fb666e504c35ca5b18107 + checksum: 26ca78dc0979c435f2b2f265fc94d13d4e2da5e72680812471cd0b802e5727784c1c05b7dff945bb6638da0ae50ada06dfea5c28cec318575cad95d8a769c131 languageName: node linkType: hard @@ -17923,15 +17650,6 @@ __metadata: languageName: node linkType: hard -"xtend@npm:~2.1.1": - version: 2.1.2 - resolution: "xtend@npm:2.1.2" - dependencies: - object-keys: ~0.4.0 - checksum: a8b79f31502c163205984eaa2b196051cd2fab0882b49758e30f2f9018255bc6c462e32a090bf3385d1bda04755ad8cc0052a09e049b0038f49eb9b950d9c447 - languageName: node - linkType: hard - "y18n@npm:^4.0.0": version: 4.0.3 resolution: "y18n@npm:4.0.3" From 55c3ee20ae700e78d18a3c4c04b6a7426cffc060 Mon Sep 17 00:00:00 2001 From: Maksi <96802571+MaksiRose@users.noreply.github.com> Date: Tue, 6 Sep 2022 19:56:21 +0200 Subject: [PATCH 133/155] feat: add typeguard to BaseInteraction#isRepliable (#8565) * feat: add typeguard to BaseInteraction#isRepliable * fix: redefine RepliableInteraaction ...to exclude impossible interactions rather than specify possible ones Co-authored-by: Jiralite <33201955+Jiralite@users.noreply.github.com> * fix: remove InteractionResponseFields * fix: replace InteractionResponseFields with RepliableInteraction in index test Co-authored-by: Jiralite <33201955+Jiralite@users.noreply.github.com> Co-authored-by: kodiakhq[bot] <49736102+kodiakhq[bot]@users.noreply.github.com> --- packages/discord.js/typings/index.d.ts | 25 ++------------------- packages/discord.js/typings/index.test-d.ts | 6 ++--- 2 files changed, 5 insertions(+), 26 deletions(-) diff --git a/packages/discord.js/typings/index.d.ts b/packages/discord.js/typings/index.d.ts index c450df38fe44..ea03e53d3a71 100644 --- a/packages/discord.js/typings/index.d.ts +++ b/packages/discord.js/typings/index.d.ts @@ -398,28 +398,6 @@ export type GuildCacheMessage = CacheTypeReducer< Message | APIMessage >; -export interface InteractionResponseFields { - deferred: boolean; - ephemeral: boolean | null; - replied: boolean; - webhook: InteractionWebhook; - reply(options: InteractionReplyOptions & { fetchReply: true }): Promise; - reply(options: string | MessagePayload | InteractionReplyOptions): Promise; - deleteReply(): Promise; - editReply(options: string | MessagePayload | WebhookEditMessageOptions): Promise; - deferReply(options: InteractionDeferReplyOptions & { fetchReply: true }): Promise; - deferReply(options?: InteractionDeferReplyOptions): Promise; - fetchReply(): Promise; - followUp(options: string | MessagePayload | InteractionReplyOptions): Promise; - showModal( - modal: - | JSONEncodable - | ModalComponentData - | APIModalInteractionResponseCallbackData, - ): Promise; - awaitModalSubmit(options: AwaitModalSubmitOptions): Promise>; -} - export type BooleanCache = T extends 'cached' ? true : false; export abstract class CommandInteraction extends BaseInteraction { @@ -1504,6 +1482,7 @@ export type Interaction = | AutocompleteInteraction | ModalSubmitInteraction; +export type RepliableInteraction = Exclude; export class BaseInteraction extends Base { // This a technique used to brand different cached types. Or else we'll get `never` errors on typeguard checks. private readonly _cacheType: Cached; @@ -1544,7 +1523,7 @@ export class BaseInteraction extends Base public isModalSubmit(): this is ModalSubmitInteraction; public isUserContextMenuCommand(): this is UserContextMenuCommandInteraction; public isSelectMenu(): this is SelectMenuInteraction; - public isRepliable(): this is this & InteractionResponseFields; + public isRepliable(): this is RepliableInteraction; } export class InteractionCollector extends Collector< diff --git a/packages/discord.js/typings/index.test-d.ts b/packages/discord.js/typings/index.test-d.ts index 79c7bf06fa56..3a027d871a09 100644 --- a/packages/discord.js/typings/index.test-d.ts +++ b/packages/discord.js/typings/index.test-d.ts @@ -100,7 +100,7 @@ import { ActionRowBuilder, ButtonComponent, SelectMenuComponent, - InteractionResponseFields, + RepliableInteraction, ThreadChannelType, Events, WebSocketShardEvents, @@ -1519,7 +1519,7 @@ client.on('interactionCreate', async interaction => { } if (interaction.isRepliable()) { - expectAssignable(interaction); + expectAssignable(interaction); interaction.reply('test'); } @@ -1529,7 +1529,7 @@ client.on('interactionCreate', async interaction => { interaction.isRepliable() ) { expectAssignable(interaction); - expectAssignable(interaction); + expectAssignable(interaction); } }); From d8e774138d5ab0333a767599e5470b4ea3f35ba5 Mon Sep 17 00:00:00 2001 From: iCrawl Date: Wed, 7 Sep 2022 11:29:58 +0200 Subject: [PATCH 134/155] fix: accessibility improvements --- packages/website/src/components/CodeListing.tsx | 4 ++-- packages/website/src/components/MethodItem.tsx | 6 +++--- packages/website/src/components/Sections.tsx | 2 +- packages/website/src/components/SidebarItems.tsx | 2 +- packages/website/src/components/SidebarLayout.tsx | 8 +++++--- 5 files changed, 12 insertions(+), 10 deletions(-) diff --git a/packages/website/src/components/CodeListing.tsx b/packages/website/src/components/CodeListing.tsx index 5a3f1dd4c145..b913b6a852fa 100644 --- a/packages/website/src/components/CodeListing.tsx +++ b/packages/website/src/components/CodeListing.tsx @@ -35,11 +35,11 @@ export function CodeListing({ return (
- + {deprecation || readonly || optional ? ( -
+
{deprecation ? (
Deprecated diff --git a/packages/website/src/components/MethodItem.tsx b/packages/website/src/components/MethodItem.tsx index 3b41f6caa027..4ceea7b93976 100644 --- a/packages/website/src/components/MethodItem.tsx +++ b/packages/website/src/components/MethodItem.tsx @@ -29,13 +29,13 @@ export function MethodItem({ data }: { data: ApiMethodJSON | ApiMethodSignatureJ
- + {data.deprecated || (data.kind === 'Method' && method.protected) || (data.kind === 'Method' && method.static) ? ( -
+
{data.deprecated ? (
Deprecated @@ -54,7 +54,7 @@ export function MethodItem({ data }: { data: ApiMethodJSON | ApiMethodSignatureJ
) : null}
-

{`${getShorthandName(data)}`}

+

{getShorthandName(data)}

:

diff --git a/packages/website/src/components/Sections.tsx b/packages/website/src/components/Sections.tsx index 3d34c1400527..06babab6cb6c 100644 --- a/packages/website/src/components/Sections.tsx +++ b/packages/website/src/components/Sections.tsx @@ -64,7 +64,7 @@ export function ConstructorSection({ data }: { data: ApiConstructorJSON }) {
{data.deprecated || data.protected ? ( -
+
{data.deprecated ? (
Deprecated diff --git a/packages/website/src/components/SidebarItems.tsx b/packages/website/src/components/SidebarItems.tsx index cad89411d1d7..384daf3f3a2d 100644 --- a/packages/website/src/components/SidebarItems.tsx +++ b/packages/website/src/components/SidebarItems.tsx @@ -97,7 +97,7 @@ export function SidebarItems({ title={member.name} onClick={() => setOpened(false)} > -
+
{member.name} {member.overloadIndex && member.overloadIndex > 1 ? ( {member.overloadIndex} diff --git a/packages/website/src/components/SidebarLayout.tsx b/packages/website/src/components/SidebarLayout.tsx index dc20bdbdef4f..8975aa8638d5 100644 --- a/packages/website/src/components/SidebarLayout.tsx +++ b/packages/website/src/components/SidebarLayout.tsx @@ -137,6 +137,7 @@ export function SidebarLayout({

+ ); } diff --git a/packages/website/src/pages/_app.tsx b/packages/website/src/pages/_app.tsx index 876d659d1227..1d2c5dc0645b 100644 --- a/packages/website/src/pages/_app.tsx +++ b/packages/website/src/pages/_app.tsx @@ -4,6 +4,7 @@ import NextProgress from 'next-progress'; import { ThemeProvider } from 'next-themes'; import '@unocss/reset/tailwind.css'; import '../styles/unocss.css'; +import '../styles/cmdk.css'; import '../styles/main.css'; export default function MyApp({ Component, pageProps }: AppProps) { diff --git a/packages/website/src/pages/docs/[...slug].tsx b/packages/website/src/pages/docs/[...slug].tsx index f69a06c2ef89..c01423dea062 100644 --- a/packages/website/src/pages/docs/[...slug].tsx +++ b/packages/website/src/pages/docs/[...slug].tsx @@ -171,16 +171,9 @@ export const getStaticProps: GetStaticProps = async ({ params }) => { }); let data; - let searchIndex = []; if (process.env.NEXT_PUBLIC_LOCAL_DEV) { const res = await readFile(join(cwd(), '..', packageName, 'docs', 'docs.api.json'), 'utf8'); data = JSON.parse(res); - - const response = await readFile( - join(cwd(), '..', 'scripts', 'searchIndex', `${packageName}-main-index.json`), - 'utf8', - ); - searchIndex = JSON.parse(response); } else { const res = await fetch(`https://docs.discordjs.dev/docs/${packageName}/${branchName}.api.json`); data = await res.json(); @@ -204,7 +197,6 @@ export const getStaticProps: GetStaticProps = async ({ params }) => { member: memberName && containerKey ? findMemberByKey(model, packageName, containerKey, branchName) ?? null : null, source: mdxSource, - searchIndex, }, }, revalidate: 3_600, @@ -215,7 +207,7 @@ export const getStaticProps: GetStaticProps = async ({ params }) => { return { props: { - error: error_, + error: error.message, }, revalidate: 1, }; diff --git a/packages/website/src/pages/docs/packages/[package]/index.tsx b/packages/website/src/pages/docs/packages/[package]/index.tsx index c7b3dbc7ece6..809ef5f34b89 100644 --- a/packages/website/src/pages/docs/packages/[package]/index.tsx +++ b/packages/website/src/pages/docs/packages/[package]/index.tsx @@ -53,7 +53,7 @@ export const getStaticProps: GetStaticProps = async ({ params }) => { return { props: { - error: error_, + error: error.message, }, revalidate: 1, }; diff --git a/packages/website/src/pages/docs/packages/index.tsx b/packages/website/src/pages/docs/packages/index.tsx index 991a94cd8f24..f41cb155de9b 100644 --- a/packages/website/src/pages/docs/packages/index.tsx +++ b/packages/website/src/pages/docs/packages/index.tsx @@ -35,7 +35,7 @@ export const getStaticProps: GetStaticProps = async () => { return { props: { - error: error_, + error: error.message, }, revalidate: 1, }; @@ -44,6 +44,7 @@ export const getStaticProps: GetStaticProps = async () => { export default function PackagesRoute(props: Partial & { error?: string }) { const router = useRouter(); + const findLatestVersion = useCallback( (pkg: string) => props.data?.versions.find((version) => version.packageName === pkg), [props.data?.versions], diff --git a/packages/website/src/styles/cmdk.css b/packages/website/src/styles/cmdk.css new file mode 100644 index 000000000000..4aa7cc1a3ea1 --- /dev/null +++ b/packages/website/src/styles/cmdk.css @@ -0,0 +1,3 @@ +[data-backdrop] { + background-color: rgb(0 0 0 / 25%); +} diff --git a/packages/website/src/util/fetcher.ts b/packages/website/src/util/fetcher.ts new file mode 100644 index 000000000000..5071b32999b1 --- /dev/null +++ b/packages/website/src/util/fetcher.ts @@ -0,0 +1,4 @@ +export const fetcher = async (url: string) => { + const res = await fetch(url); + return res.json(); +}; From d11edc6397495462af64309668e3ce039170fbcc Mon Sep 17 00:00:00 2001 From: iCrawl Date: Fri, 9 Sep 2022 00:23:42 +0200 Subject: [PATCH 145/155] fix: build script for website --- packages/website/package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/website/package.json b/packages/website/package.json index 8cc47b7c53d0..9585628d9d33 100644 --- a/packages/website/package.json +++ b/packages/website/package.json @@ -6,7 +6,7 @@ "scripts": { "test": "vitest run", "build:local": "NEXT_PUBLIC_LOCAL_DEV=true yarn build:prod", - "build:prod": "yarn run --top-level docs --force && yarn build:css && yarn build:next && yarn node scripts/generateAllIndicies.js", + "build:prod": "yarn run --top-level build && yarn run --top-level docs --force && yarn build:css && yarn build:next && yarn node scripts/generateAllIndicies.js", "build:next": "next build", "build:css": "yarn generate:css", "dev": "yarn run --top-level docs && concurrently 'yarn dev:css' 'yarn dev:next'", From 7a9e52e63a369196ab94920669aaa5e34969fa0d Mon Sep 17 00:00:00 2001 From: iCrawl Date: Fri, 9 Sep 2022 21:55:35 +0200 Subject: [PATCH 146/155] fix: tiny screen cmdk size --- packages/website/package.json | 5 +++-- packages/website/src/components/Cmdk.tsx | 2 +- packages/website/src/contexts/member.tsx | 10 +++++++--- 3 files changed, 11 insertions(+), 6 deletions(-) diff --git a/packages/website/package.json b/packages/website/package.json index 9585628d9d33..4bdda7b07ad6 100644 --- a/packages/website/package.json +++ b/packages/website/package.json @@ -5,10 +5,11 @@ "private": true, "scripts": { "test": "vitest run", - "build:local": "NEXT_PUBLIC_LOCAL_DEV=true yarn build:prod", - "build:prod": "yarn run --top-level build && yarn run --top-level docs --force && yarn build:css && yarn build:next && yarn node scripts/generateAllIndicies.js", + "build:local": "NEXT_PUBLIC_LOCAL_DEV=true yarn run --top-level docs --force && yarn build:prod", + "build:prod": "yarn workspace @discordjs/api-extractor-utils run build && yarn workspace @discordjs/scripts run build && yarn build:css && yarn build:next", "build:next": "next build", "build:css": "yarn generate:css", + "build:search_indicies": "yarn node scripts/generateAllIndicies.js", "dev": "yarn run --top-level docs && concurrently 'yarn dev:css' 'yarn dev:next'", "dev:next": "next dev", "dev:css": "yarn generate:css --watch", diff --git a/packages/website/src/components/Cmdk.tsx b/packages/website/src/components/Cmdk.tsx index 6243e41e2b97..a1dd8020a7d8 100644 --- a/packages/website/src/components/Cmdk.tsx +++ b/packages/website/src/components/Cmdk.tsx @@ -178,7 +178,7 @@ export function CmdkDialog() { return ( - + (undefined); -export const MemberProvider = ({ member, children }: { children: ReactNode; member: ApiItemJSON | undefined }) => ( - {children} -); +export const MemberProvider = ({ + member, + children, +}: { + children?: ReactNode | undefined; + member: ApiItemJSON | undefined; +}) => {children}; export function useMember() { return useContext(MemberContext); From 32523325c6610e95fe3ffcc31d005b3418c6bc68 Mon Sep 17 00:00:00 2001 From: advaith Date: Sun, 11 Sep 2022 11:16:34 -0700 Subject: [PATCH 147/155] docs(Options): update DefaultMakeCacheSettings (#8585) Co-authored-by: kodiakhq[bot] <49736102+kodiakhq[bot]@users.noreply.github.com> --- packages/discord.js/src/util/Options.js | 3 --- 1 file changed, 3 deletions(-) diff --git a/packages/discord.js/src/util/Options.js b/packages/discord.js/src/util/Options.js index 078b93d31f5e..58f79af408d3 100644 --- a/packages/discord.js/src/util/Options.js +++ b/packages/discord.js/src/util/Options.js @@ -154,9 +154,6 @@ class Options extends null { * The default settings passed to {@link Options.cacheWithLimits}. * The caches that this changes are: * * `MessageManager` - Limit to 200 messages - * * `ChannelManager` - Sweep archived threads - * * `GuildChannelManager` - Sweep archived threads - * * `ThreadManager` - Sweep archived threads * If you want to keep default behavior and add on top of it you can use this object and add on to it, e.g. * `makeCache: Options.cacheWithLimits({ ...Options.DefaultMakeCacheSettings, ReactionManager: 0 })` * @type {Object} From 8e1afaebdb686033555ca58e53f34bb97f7369c8 Mon Sep 17 00:00:00 2001 From: Jiralite <33201955+Jiralite@users.noreply.github.com> Date: Sun, 11 Sep 2022 19:22:53 +0100 Subject: [PATCH 148/155] refactor: Split message send/edit types/documentation (#8590) * refactor: split message send/edit types * refactor: move `MessageEditOptions` Co-authored-by: kodiakhq[bot] <49736102+kodiakhq[bot]@users.noreply.github.com> --- .../discord.js/src/client/WebhookClient.js | 4 +- .../discord.js/src/managers/MessageManager.js | 9 ++ .../discord.js/src/managers/UserManager.js | 2 +- packages/discord.js/src/structures/Message.js | 21 +--- .../src/structures/MessagePayload.js | 16 ++- packages/discord.js/src/structures/Webhook.js | 18 ++-- .../interfaces/InteractionResponses.js | 5 +- .../structures/interfaces/TextBasedChannel.js | 40 ++++---- packages/discord.js/src/util/Options.js | 4 +- packages/discord.js/typings/index.d.ts | 99 +++++++++---------- 10 files changed, 106 insertions(+), 112 deletions(-) diff --git a/packages/discord.js/src/client/WebhookClient.js b/packages/discord.js/src/client/WebhookClient.js index 376c2e31a08a..8ecd3e950067 100644 --- a/packages/discord.js/src/client/WebhookClient.js +++ b/packages/discord.js/src/client/WebhookClient.js @@ -32,7 +32,7 @@ class WebhookClient extends BaseClient { /** * Options for a webhook client. * @typedef {Object} WebhookClientOptions - * @property {MessageMentionOptions} [allowedMentions] Default value for {@link WebhookMessageOptions#allowedMentions} + * @property {MessageMentionOptions} [allowedMentions] Default value for {@link BaseMessageOptions#allowedMentions} * @property {RESTOptions} [rest] Options for the REST manager */ @@ -68,7 +68,7 @@ class WebhookClient extends BaseClient { /* eslint-disable no-empty-function, valid-jsdoc */ /** * Sends a message with this webhook. - * @param {string|MessagePayload|WebhookMessageOptions} options The content for the reply + * @param {string|MessagePayload|WebhookCreateMessageOptions} options The content for the reply * @returns {Promise} */ send() {} diff --git a/packages/discord.js/src/managers/MessageManager.js b/packages/discord.js/src/managers/MessageManager.js index 2b188e5e56c0..7bd083c7be67 100644 --- a/packages/discord.js/src/managers/MessageManager.js +++ b/packages/discord.js/src/managers/MessageManager.js @@ -147,6 +147,15 @@ class MessageManager extends CachedManager { * @returns {?Snowflake} */ + /** + * Options that can be passed to edit a message. + * @typedef {BaseMessageOptions} MessageEditOptions + * @property {Array>} [attachments] An array of attachments to keep, + * all attachments will be kept if omitted + * @property {MessageFlags} [flags] Which flags to set for the message + * Only the {@link MessageFlags.SuppressEmbeds} flag can be modified. + */ + /** * Edits a message, even if it's not cached. * @param {MessageResolvable} message The message to edit diff --git a/packages/discord.js/src/managers/UserManager.js b/packages/discord.js/src/managers/UserManager.js index 76a35d720e39..f56da85b321f 100644 --- a/packages/discord.js/src/managers/UserManager.js +++ b/packages/discord.js/src/managers/UserManager.js @@ -105,7 +105,7 @@ class UserManager extends CachedManager { /** * Sends a message to a user. * @param {UserResolvable} user The UserResolvable to identify - * @param {string|MessagePayload|MessageOptions} options The options to provide + * @param {string|MessagePayload|MessageCreateOptions} options The options to provide * @returns {Promise} */ async send(user, options) { diff --git a/packages/discord.js/src/structures/Message.js b/packages/discord.js/src/structures/Message.js index 2ce960c03aa8..16d120a36701 100644 --- a/packages/discord.js/src/structures/Message.js +++ b/packages/discord.js/src/structures/Message.js @@ -644,22 +644,6 @@ class Message extends Base { ); } - /** - * Options that can be passed into {@link Message#edit}. - * @typedef {Object} MessageEditOptions - * @property {?string} [content] Content to be edited - * @property {Embed[]|APIEmbed[]} [embeds] Embeds to be added/edited - * @property {MessageMentionOptions} [allowedMentions] Which mentions should be parsed from the message content - * @property {MessageFlags} [flags] Which flags to set for the message - * Only the {@link MessageFlags.SuppressEmbeds} flag can be modified. - * @property {Attachment[]} [attachments] An array of attachments to keep, - * all attachments will be kept if omitted - * @property {Array>|BufferResolvable[]|Attachment[]|AttachmentBuilder[]} [files] - * Files to add to the message - * @property {ActionRow[]|ActionRowOptions[]} [components] - * Action rows containing interactive components for the message (buttons, select menus) - */ - /** * Edits the content of the message. * @param {string|MessagePayload|MessageEditOptions} options The options to provide @@ -770,7 +754,8 @@ class Message extends Base { /** * Options provided when sending a message as an inline reply. - * @typedef {BaseMessageOptions} ReplyMessageOptions + * @typedef {BaseMessageCreateOptions} MessageReplyOptions + * @property {StickerResolvable[]} [stickers=[]] The stickers to send in the message * @property {boolean} [failIfNotExists=this.client.options.failIfNotExists] Whether to error if the referenced * message does not exist (creates a standard message in this case when false) * @property {StickerResolvable[]} [stickers=[]] Stickers to send in the message @@ -778,7 +763,7 @@ class Message extends Base { /** * Send an inline reply to this message. - * @param {string|MessagePayload|ReplyMessageOptions} options The options to provide + * @param {string|MessagePayload|MessageReplyOptions} options The options to provide * @returns {Promise} * @example * // Reply to a message diff --git a/packages/discord.js/src/structures/MessagePayload.js b/packages/discord.js/src/structures/MessagePayload.js index ff6a8f5d0565..3d7b693ae2ea 100644 --- a/packages/discord.js/src/structures/MessagePayload.js +++ b/packages/discord.js/src/structures/MessagePayload.js @@ -17,7 +17,7 @@ const getBaseInteraction = lazy(() => require('./BaseInteraction')); class MessagePayload { /** * @param {MessageTarget} target The target for this message to be sent to - * @param {MessageOptions|WebhookMessageOptions} options Options passed in from send + * @param {MessagePayloadOption} options The payload of this message */ constructor(target, options) { /** @@ -27,8 +27,8 @@ class MessagePayload { this.target = target; /** - * Options passed in from send - * @type {MessageOptions|WebhookMessageOptions} + * The payload of this message. + * @type {MessagePayloadOption} */ this.options = options; @@ -261,8 +261,8 @@ class MessagePayload { /** * Creates a {@link MessagePayload} from user-level arguments. * @param {MessageTarget} target Target to send to - * @param {string|MessageOptions|WebhookMessageOptions} options Options or content to use - * @param {MessageOptions|WebhookMessageOptions} [extra={}] Extra options to add onto specified options + * @param {string|MessagePayloadOption} options Options or content to use + * @param {MessagePayloadOption} [extra={}] Extra options to add onto specified options * @returns {MessagePayload} */ static create(target, options, extra = {}) { @@ -281,6 +281,12 @@ module.exports = MessagePayload; * Message|MessageManager} MessageTarget */ +/** + * A possible payload option. + * @typedef {MessageCreateOptions|MessageEditOptions|WebhookCreateMessageOptions|WebhookEditMessageOptions| + * InteractionReplyOptions|InteractionUpdateOptions} MessagePayloadOption + */ + /** * @external APIMessage * @see {@link https://discord.com/developers/docs/resources/channel#message-object} diff --git a/packages/discord.js/src/structures/Webhook.js b/packages/discord.js/src/structures/Webhook.js index ca164a724caf..729e1d613072 100644 --- a/packages/discord.js/src/structures/Webhook.js +++ b/packages/discord.js/src/structures/Webhook.js @@ -122,33 +122,27 @@ class Webhook { /** * Options that can be passed into send. - * @typedef {BaseMessageOptions} WebhookMessageOptions + * @typedef {BaseMessageOptions} WebhookCreateMessageOptions + * @property {boolean} [tts=false] Whether the message should be spoken aloud + * @property {MessageFlags} [flags] Which flags to set for the message. + * Only the {@link MessageFlags.SuppressEmbeds} flag can be set. * @property {string} [username=this.name] Username override for the message * @property {string} [avatarURL] Avatar URL override for the message * @property {Snowflake} [threadId] The id of the thread in the channel to send to. * For interaction webhooks, this property is ignored - * @property {MessageFlags} [flags] Which flags to set for the message. - * Only the {@link MessageFlags.SuppressEmbeds} flag can be set. */ /** * Options that can be passed into editMessage. - * @typedef {Object} WebhookEditMessageOptions - * @property {Embed[]|APIEmbed[]} [embeds] See {@link WebhookMessageOptions#embeds} - * @property {string} [content] See {@link BaseMessageOptions#content} - * @property {JSONEncodable|BufferResolvable[]|Attachment[]|AttachmentBuilder[]} [files] - * See {@link BaseMessageOptions#files} - * @property {MessageMentionOptions} [allowedMentions] See {@link BaseMessageOptions#allowedMentions} + * @typedef {BaseMessageOptions} WebhookEditMessageOptions * @property {Attachment[]} [attachments] Attachments to send with the message - * @property {ActionRow[]|ActionRowOptions[]} [components] - * Action rows containing interactive components for the message (buttons, select menus) * @property {Snowflake} [threadId] The id of the thread this message belongs to * For interaction webhooks, this property is ignored */ /** * Sends a message with this webhook. - * @param {string|MessagePayload|WebhookMessageOptions} options The options to provide + * @param {string|MessagePayload|WebhookCreateMessageOptions} options The options to provide * @returns {Promise} * @example * // Send a basic message diff --git a/packages/discord.js/src/structures/interfaces/InteractionResponses.js b/packages/discord.js/src/structures/interfaces/InteractionResponses.js index b18ece62d4c9..aee852b62539 100644 --- a/packages/discord.js/src/structures/interfaces/InteractionResponses.js +++ b/packages/discord.js/src/structures/interfaces/InteractionResponses.js @@ -33,12 +33,13 @@ class InteractionResponses { */ /** - * Options for a reply to an {@link BaseInteraction}. + * Options for a reply to a {@link BaseInteraction}. * @typedef {BaseMessageOptions} InteractionReplyOptions + * @property {boolean} [tts=false] Whether the message should be spoken aloud * @property {boolean} [ephemeral] Whether the reply should be ephemeral * @property {boolean} [fetchReply] Whether to fetch the reply * @property {MessageFlags} [flags] Which flags to set for the message. - * Only `MessageFlags.SuppressEmbeds` and `MessageFlags.Ephemeral` can be set. + * Only `MessageFlags.SuppressEmbeds` and `MessageFlags.Ephemeral` can be set. */ /** diff --git a/packages/discord.js/src/structures/interfaces/TextBasedChannel.js b/packages/discord.js/src/structures/interfaces/TextBasedChannel.js index fa885cd56d06..3d3acb51029a 100644 --- a/packages/discord.js/src/structures/interfaces/TextBasedChannel.js +++ b/packages/discord.js/src/structures/interfaces/TextBasedChannel.js @@ -52,27 +52,35 @@ class TextBasedChannel { } /** - * Base options provided when sending. + * The base message options for messages. * @typedef {Object} BaseMessageOptions - * @property {boolean} [tts=false] Whether or not the message should be spoken aloud - * @property {string} [nonce=''] The nonce for the message - * @property {string} [content=''] The content for the message + * @property {string|null} [content=''] The content for the message. This can only be `null` when editing a message. * @property {Embed[]|APIEmbed[]} [embeds] The embeds for the message - * (see [here](https://discord.com/developers/docs/resources/channel#embed-object) for more details) * @property {MessageMentionOptions} [allowedMentions] Which mentions should be parsed from the message content * (see [here](https://discord.com/developers/docs/resources/channel#allowed-mentions-object) for more details) - * @property {FileOptions[]|BufferResolvable[]|Attachment[]} [files] Files to send with the message + * @property {Array>|BufferResolvable[]|Attachment[]|AttachmentBuilder[]} [files] + * The files to send with the message. * @property {ActionRow[]|ActionRowOptions[]} [components] * Action rows containing interactive components for the message (buttons, select menus) - * @property {Array>} [attachments] Attachments to send in the message */ /** - * Options provided when sending or editing a message. - * @typedef {BaseMessageOptions} MessageOptions + * Options for sending a message with a reply. + * @typedef {Object} ReplyOptions + * @property {MessageResolvable} messageReference The message to reply to (must be in the same channel and not system) + * @property {boolean} [failIfNotExists=this.client.options.failIfNotExists] Whether to error if the referenced + * message does not exist (creates a standard message in this case when false) + */ + + /** + * The options for sending a message. + * @typedef {BaseMessageOptions} MessageCreateOptions + * @property {boolean} [tts=false] Whether the message should be spoken aloud + * @property {string} [nonce=''] The nonce for the message * @property {ReplyOptions} [reply] The options for replying to a message - * @property {StickerResolvable[]} [stickers=[]] Stickers to send in the message - * @property {MessageFlags} [flags] Which flags to set for the message. Only `MessageFlags.SuppressEmbeds` can be set. + * @property {StickerResolvable[]} [stickers=[]] The stickers to send in the message + * @property {MessageFlags} [flags] Which flags to set for the message. + * Only `MessageFlags.SuppressEmbeds` can be set. */ /** @@ -99,17 +107,9 @@ class TextBasedChannel { * @property {string} description The description of the file */ - /** - * Options for sending a message with a reply. - * @typedef {Object} ReplyOptions - * @property {MessageResolvable} messageReference The message to reply to (must be in the same channel and not system) - * @property {boolean} [failIfNotExists=this.client.options.failIfNotExists] Whether to error if the referenced - * message does not exist (creates a standard message in this case when false) - */ - /** * Sends a message to this channel. - * @param {string|MessagePayload|MessageOptions} options The options to provide + * @param {string|MessagePayload|MessageCreateOptions} options The options to provide * @returns {Promise} * @example * // Send a basic message diff --git a/packages/discord.js/src/util/Options.js b/packages/discord.js/src/util/Options.js index 58f79af408d3..f6106f3bc5cf 100644 --- a/packages/discord.js/src/util/Options.js +++ b/packages/discord.js/src/util/Options.js @@ -25,12 +25,12 @@ const { toSnakeCase } = require('./Transformers'); * You can use your own function, or the {@link Options} class to customize the Collection used for the cache. * Overriding the cache used in `GuildManager`, `ChannelManager`, `GuildChannelManager`, `RoleManager`, * and `PermissionOverwriteManager` is unsupported and **will** break functionality - * @property {MessageMentionOptions} [allowedMentions] Default value for {@link MessageOptions#allowedMentions} + * @property {MessageMentionOptions} [allowedMentions] The default value for {@link BaseMessageOptions#allowedMentions} * @property {Partials[]} [partials] Structures allowed to be partial. This means events can be emitted even when * they're missing all the data for a particular structure. See the "Partial Structures" topic on the * [guide](https://discordjs.guide/popular-topics/partials.html) for some * important usage information, as partials require you to put checks in place when handling data. - * @property {boolean} [failIfNotExists=true] Default value for {@link ReplyMessageOptions#failIfNotExists} + * @property {boolean} [failIfNotExists=true] The default value for {@link MessageReplyOptions#failIfNotExists} * @property {PresenceData} [presence={}] Presence data to use upon login * @property {IntentsResolvable} intents Intents to enable for this connection * @property {number} [waitGuildTimeout=15_000] Time in milliseconds that clients with the diff --git a/packages/discord.js/typings/index.d.ts b/packages/discord.js/typings/index.d.ts index f10619348960..6b8607b1a84c 100644 --- a/packages/discord.js/typings/index.d.ts +++ b/packages/discord.js/typings/index.d.ts @@ -1718,7 +1718,7 @@ export class Message extends Base { public pin(reason?: string): Promise>; public react(emoji: EmojiIdentifierResolvable): Promise; public removeAttachments(): Promise>; - public reply(options: string | MessagePayload | ReplyMessageOptions): Promise>; + public reply(options: string | MessagePayload | MessageReplyOptions): Promise>; public resolveComponent(customId: string): MessageActionRowComponent | null; public startThread(options: StartThreadOptions): Promise; public suppressEmbeds(suppress?: boolean): Promise>; @@ -1875,8 +1875,16 @@ export class MessageMentions { public static UsersPattern: typeof FormattingPatterns.User; } +export type MessagePayloadOption = + | MessageCreateOptions + | MessageEditOptions + | WebhookCreateMessageOptions + | WebhookEditMessageOptions + | InteractionReplyOptions + | InteractionUpdateOptions; + export class MessagePayload { - public constructor(target: MessageTarget, options: MessageOptions | WebhookMessageOptions); + public constructor(target: MessageTarget, options: MessagePayloadOption); public body: RawMessagePayloadData | null; public get isUser(): boolean; public get isWebhook(): boolean; @@ -1884,13 +1892,13 @@ export class MessagePayload { public get isMessageManager(): boolean; public get isInteraction(): boolean; public files: RawFile[] | null; - public options: MessageOptions | WebhookMessageOptions; + public options: MessagePayloadOption; public target: MessageTarget; public static create( target: MessageTarget, - options: string | MessageOptions | WebhookMessageOptions, - extra?: MessageOptions | WebhookMessageOptions, + options: string | MessagePayloadOption, + extra?: MessagePayloadOption, ): MessagePayload; public static resolveFile( fileLike: BufferResolvable | Stream | AttachmentPayload | JSONEncodable, @@ -2831,7 +2839,7 @@ export class Webhook extends WebhookMixin() { options: string | MessagePayload | WebhookEditMessageOptions, ): Promise; public fetchMessage(message: Snowflake, options?: WebhookFetchMessageOptions): Promise; - public send(options: string | MessagePayload | Omit): Promise; + public send(options: string | MessagePayload | WebhookCreateMessageOptions): Promise; } export class WebhookClient extends WebhookMixin(BaseClient) { @@ -2844,7 +2852,7 @@ export class WebhookClient extends WebhookMixin(BaseClient) { options: string | MessagePayload | WebhookEditMessageOptions, ): Promise; public fetchMessage(message: Snowflake, options?: WebhookFetchMessageOptions): Promise; - public send(options: string | MessagePayload | WebhookMessageOptions): Promise; + public send(options: string | MessagePayload | WebhookCreateMessageOptions): Promise; } export class WebSocketManager extends EventEmitter { @@ -3627,7 +3635,7 @@ export class UserManager extends CachedManager public deleteDM(user: UserResolvable): Promise; public fetch(user: UserResolvable, options?: BaseFetchOptions): Promise; public fetchFlags(user: UserResolvable, options?: BaseFetchOptions): Promise; - public send(user: UserResolvable, options: string | MessagePayload | MessageOptions): Promise; + public send(user: UserResolvable, options: string | MessagePayload | MessageCreateOptions): Promise; } export class VoiceStateManager extends CachedManager { @@ -3659,7 +3667,7 @@ export function TextBasedChannelMixin< ): Constructable, I>>; export interface PartialTextBasedChannelFields { - send(options: string | MessagePayload | MessageOptions): Promise>; + send(options: string | MessagePayload | MessageCreateOptions): Promise>; } export interface TextBasedChannelFields @@ -3700,7 +3708,9 @@ export interface PartialWebhookFields { options: string | MessagePayload | WebhookEditMessageOptions, ): Promise; fetchMessage(message: Snowflake | '@original', options?: WebhookFetchMessageOptions): Promise; - send(options: string | MessagePayload | Omit): Promise; + send( + options: string | MessagePayload | InteractionReplyOptions | WebhookCreateMessageOptions, + ): Promise; } export interface WebhookFields extends PartialWebhookFields { @@ -5023,10 +5033,14 @@ export interface InteractionDeferReplyOptions { export type InteractionDeferUpdateOptions = Omit; -export interface InteractionReplyOptions extends Omit { +export interface InteractionReplyOptions extends BaseMessageOptions { + tts?: boolean; ephemeral?: boolean; fetchReply?: boolean; - flags?: BitFieldResolvable, number>; + flags?: BitFieldResolvable< + Extract, + MessageFlags.Ephemeral | MessageFlags.SuppressEmbeds + >; } export interface InteractionUpdateOptions extends MessageEditOptions { @@ -5121,28 +5135,6 @@ export type MessageChannelComponentCollectorOptions; -export interface MessageEditOptions { - attachments?: JSONEncodable[]; - content?: string | null; - embeds?: (JSONEncodable | APIEmbed)[] | null; - files?: ( - | BufferResolvable - | Stream - | JSONEncodable - | Attachment - | AttachmentBuilder - | AttachmentPayload - )[]; - flags?: BitFieldResolvable; - allowedMentions?: MessageMentionOptions; - components?: ( - | JSONEncodable> - | ActionRow - | ActionRowData - | APIActionRowComponent - )[]; -} - export interface MessageEvent { data: WebSocket.Data; type: string; @@ -5172,16 +5164,9 @@ export interface MessageMentionOptions { export type MessageMentionTypes = 'roles' | 'users' | 'everyone'; -export interface MessageOptions { - tts?: boolean; - nonce?: string | number; - content?: string | null; +export interface BaseMessageOptions { + content?: string; embeds?: (JSONEncodable | APIEmbed)[]; - components?: ( - | JSONEncodable> - | ActionRowData - | APIActionRowComponent - )[]; allowedMentions?: MessageMentionOptions; files?: ( | BufferResolvable @@ -5191,10 +5176,25 @@ export interface MessageOptions { | AttachmentBuilder | AttachmentPayload )[]; + components?: ( + | JSONEncodable> + | ActionRowData + | APIActionRowComponent + )[]; +} + +export interface MessageCreateOptions extends BaseMessageOptions { + tts?: boolean; + nonce?: string | number; reply?: ReplyOptions; stickers?: StickerResolvable[]; + flags?: BitFieldResolvable, MessageFlags.SuppressEmbeds>; +} + +export interface MessageEditOptions extends Omit { + content?: string | null; attachments?: JSONEncodable[]; - flags?: BitFieldResolvable, number>; + flags?: BitFieldResolvable, MessageFlags.SuppressEmbeds>; } export type MessageReactionResolvable = @@ -5387,7 +5387,7 @@ export interface ReplyOptions { failIfNotExists?: boolean; } -export interface ReplyMessageOptions extends Omit { +export interface MessageReplyOptions extends Omit { failIfNotExists?: boolean; } @@ -5608,16 +5608,15 @@ export interface WebhookEditData { reason?: string; } -export type WebhookEditMessageOptions = Pick< - WebhookMessageOptions, - 'content' | 'embeds' | 'files' | 'allowedMentions' | 'components' | 'attachments' | 'threadId' ->; +export interface WebhookEditMessageOptions extends Omit { + threadId?: Snowflake; +} export interface WebhookFetchMessageOptions { threadId?: Snowflake; } -export interface WebhookMessageOptions extends Omit { +export interface WebhookCreateMessageOptions extends Omit { username?: string; avatarURL?: string; threadId?: Snowflake; From 1d4cdee321ab25bb0f109d55a000582825dd79f9 Mon Sep 17 00:00:00 2001 From: RedGuy12 <61329810+RedGuy12@users.noreply.github.com> Date: Sun, 11 Sep 2022 13:29:28 -0500 Subject: [PATCH 149/155] types(GuildChannelManager): correct `fetch` return type (#8549) * types(GuildChannelManager): correct `fetch` return type * fix(ci): fix the types tests * fix: fix the docs * Update packages/discord.js/src/managers/GuildChannelManager.js Co-authored-by: Almeida * types: allow channels in the collection to be null Signed-off-by: RedGuy12 <61329810+RedGuy12@users.noreply.github.com> * style: run prettier Signed-off-by: RedGuy12 <61329810+RedGuy12@users.noreply.github.com> * test: fix types again Signed-off-by: RedGuy12 <61329810+RedGuy12@users.noreply.github.com> * style: run prettier Signed-off-by: RedGuy12 <61329810+RedGuy12@users.noreply.github.com> Signed-off-by: RedGuy12 <61329810+RedGuy12@users.noreply.github.com> Co-authored-by: Almeida Co-authored-by: kodiakhq[bot] <49736102+kodiakhq[bot]@users.noreply.github.com> --- packages/discord.js/src/managers/GuildChannelManager.js | 2 +- packages/discord.js/typings/index.d.ts | 7 +++++-- packages/discord.js/typings/index.test-d.ts | 6 +++--- 3 files changed, 9 insertions(+), 6 deletions(-) diff --git a/packages/discord.js/src/managers/GuildChannelManager.js b/packages/discord.js/src/managers/GuildChannelManager.js index 012821cfcd76..7e76d5bc89b5 100644 --- a/packages/discord.js/src/managers/GuildChannelManager.js +++ b/packages/discord.js/src/managers/GuildChannelManager.js @@ -317,7 +317,7 @@ class GuildChannelManager extends CachedManager { * Obtains one or more guild channels from Discord, or the channel cache if they're already available. * @param {Snowflake} [id] The channel's id * @param {BaseFetchOptions} [options] Additional options for this fetch - * @returns {Promise>} + * @returns {Promise>} * @example * // Fetch all channels from the guild (excluding threads) * message.guild.channels.fetch() diff --git a/packages/discord.js/typings/index.d.ts b/packages/discord.js/typings/index.d.ts index 6b8607b1a84c..5588e75dbc4b 100644 --- a/packages/discord.js/typings/index.d.ts +++ b/packages/discord.js/typings/index.d.ts @@ -3364,8 +3364,11 @@ export class GuildChannelManager extends CachedManager; public createWebhook(options: WebhookCreateOptions): Promise; public edit(channel: GuildChannelResolvable, data: GuildChannelEditOptions): Promise; - public fetch(id: Snowflake, options?: BaseFetchOptions): Promise; - public fetch(id?: undefined, options?: BaseFetchOptions): Promise>; + public fetch(id: Snowflake, options?: BaseFetchOptions): Promise; + public fetch( + id?: undefined, + options?: BaseFetchOptions, + ): Promise>; public fetchWebhooks(channel: GuildChannelResolvable): Promise>; public setPosition( channel: GuildChannelResolvable, diff --git a/packages/discord.js/typings/index.test-d.ts b/packages/discord.js/typings/index.test-d.ts index 3a027d871a09..c70dfb5223db 100644 --- a/packages/discord.js/typings/index.test-d.ts +++ b/packages/discord.js/typings/index.test-d.ts @@ -1187,9 +1187,9 @@ declare const guildChannelManager: GuildChannelManager; expectType>(guildChannelManager.create({ name: 'name', type: ChannelType.GuildNews })); expectType>(guildChannelManager.create({ name: 'name', type: ChannelType.GuildStageVoice })); - expectType>>(guildChannelManager.fetch()); - expectType>>(guildChannelManager.fetch(undefined, {})); - expectType>(guildChannelManager.fetch('0')); + expectType>>(guildChannelManager.fetch()); + expectType>>(guildChannelManager.fetch(undefined, {})); + expectType>(guildChannelManager.fetch('0')); const channel = guildChannelManager.cache.first()!; From a9f003ac9b56d31166cbf353d02140dad0b2517e Mon Sep 17 00:00:00 2001 From: Jiralite <33201955+Jiralite@users.noreply.github.com> Date: Sun, 11 Sep 2022 19:36:24 +0100 Subject: [PATCH 150/155] types: Ensure events possess `Client` (#8612) types: ensure events possess `Client` Co-authored-by: kodiakhq[bot] <49736102+kodiakhq[bot]@users.noreply.github.com> --- packages/discord.js/typings/index.d.ts | 150 ++-- packages/discord.js/typings/index.test-d.ts | 879 ++++++++++++-------- 2 files changed, 590 insertions(+), 439 deletions(-) diff --git a/packages/discord.js/typings/index.d.ts b/packages/discord.js/typings/index.d.ts index 5588e75dbc4b..6153c98734df 100644 --- a/packages/discord.js/typings/index.d.ts +++ b/packages/discord.js/typings/index.d.ts @@ -281,7 +281,7 @@ export class ActivityFlagsBitField extends BitField { } export abstract class AnonymousGuild extends BaseGuild { - protected constructor(client: Client, data: RawAnonymousGuildData, immediatePatch?: boolean); + protected constructor(client: Client, data: RawAnonymousGuildData, immediatePatch?: boolean); public banner: string | null; public description: string | null; public nsfwLevel: GuildNSFWLevel; @@ -294,7 +294,7 @@ export abstract class AnonymousGuild extends BaseGuild { } export abstract class Application extends Base { - protected constructor(client: Client, data: RawApplicationData); + protected constructor(client: Client, data: RawApplicationData); public get createdAt(): Date; public get createdTimestamp(): number; public description: string | null; @@ -308,7 +308,7 @@ export abstract class Application extends Base { } export class ApplicationCommand extends Base { - private constructor(client: Client, data: RawApplicationCommandData, guild?: Guild, guildId?: Snowflake); + private constructor(client: Client, data: RawApplicationCommandData, guild?: Guild, guildId?: Snowflake); public applicationId: Snowflake; public get createdAt(): Date; public get createdTimestamp(): number; @@ -373,8 +373,8 @@ export class ApplicationFlagsBitField extends BitField { } export abstract class Base { - public constructor(client: Client); - public readonly client: Client; + public constructor(client: Client); + public readonly client: Client; public toJSON(...props: Record[]): unknown; public valueOf(): string; } @@ -474,7 +474,7 @@ export class InteractionResponse { } export abstract class BaseGuild extends Base { - protected constructor(client: Client, data: RawBaseGuildData); + protected constructor(client: Client, data: RawBaseGuildData); public get createdAt(): Date; public get createdTimestamp(): number; public features: `${GuildFeature}`[]; @@ -490,7 +490,7 @@ export abstract class BaseGuild extends Base { } export class BaseGuildEmoji extends Emoji { - protected constructor(client: Client, data: RawGuildEmojiData, guild: Guild | GuildPreview); + protected constructor(client: Client, data: RawGuildEmojiData, guild: Guild | GuildPreview); public available: boolean | null; public get createdAt(): Date; public get createdTimestamp(): number; @@ -501,7 +501,7 @@ export class BaseGuildEmoji extends Emoji { } export class BaseGuildTextChannel extends TextBasedChannelMixin(GuildChannel, true) { - protected constructor(guild: Guild, data?: RawGuildChannelData, client?: Client, immediatePatch?: boolean); + protected constructor(guild: Guild, data?: RawGuildChannelData, client?: Client, immediatePatch?: boolean); public defaultAutoArchiveDuration?: ThreadAutoArchiveDuration; public rateLimitPerUser: number | null; public nsfw: boolean; @@ -553,7 +553,7 @@ export class BitField { } export class ButtonInteraction extends MessageComponentInteraction { - private constructor(client: Client, data: RawMessageButtonInteractionData); + private constructor(client: Client, data: RawMessageButtonInteractionData); public componentType: ComponentType.Button; public get component(): CacheTypeReducer< Cached, @@ -725,7 +725,7 @@ export class CategoryChannel extends GuildChannel { export type CategoryChannelResolvable = Snowflake | CategoryChannel; export abstract class BaseChannel extends Base { - public constructor(client: Client, data?: RawChannelData, immediatePatch?: boolean); + public constructor(client: Client, data?: RawChannelData, immediatePatch?: boolean); public get createdAt(): Date | null; public get createdTimestamp(): number | null; public id: Snowflake; @@ -805,7 +805,7 @@ export class Client extends BaseClient { } export class ClientApplication extends Application { - private constructor(client: Client, data: RawClientApplicationData); + private constructor(client: Client, data: RawClientApplicationData); public botPublic: boolean | null; public botRequireCodeGrant: boolean | null; public commands: ApplicationCommandManager; @@ -821,7 +821,7 @@ export class ClientApplication extends Application { } export class ClientPresence extends Presence { - private constructor(client: Client, data: RawPresenceData); + private constructor(client: Client, data: RawPresenceData); private _parse(data: PresenceData): RawPresenceData; public set(presence: PresenceData): ClientPresence; @@ -866,7 +866,7 @@ export interface CollectorEventTypes { } export abstract class Collector extends EventEmitter { - protected constructor(client: Client, options?: CollectorOptions<[V, ...F]>); + protected constructor(client: Client, options?: CollectorOptions<[V, ...F]>); private _timeout: NodeJS.Timeout | null; private _idletimeout: NodeJS.Timeout | null; private _endReason: string | null; @@ -930,7 +930,11 @@ export class AutocompleteInteraction exten } export class CommandInteractionOptionResolver { - private constructor(client: Client, options: CommandInteractionOption[], resolved: CommandInteractionResolvedData); + private constructor( + client: Client, + options: CommandInteractionOption[], + resolved: CommandInteractionResolvedData, + ); public readonly client: Client; public readonly data: readonly CommandInteractionOption[]; public readonly resolved: Readonly> | null; @@ -1035,7 +1039,7 @@ export class DMChannel extends TextBasedChannelMixin(BaseChannel, false, [ 'setRateLimitPerUser', 'setNSFW', ]) { - private constructor(client: Client, data?: RawDMChannelData); + private constructor(client: Client, data?: RawDMChannelData); public recipientId: Snowflake; public get recipient(): User | null; public type: ChannelType.DM; @@ -1044,7 +1048,7 @@ export class DMChannel extends TextBasedChannelMixin(BaseChannel, false, [ } export class Emoji extends Base { - protected constructor(client: Client, emoji: RawEmojiData); + protected constructor(client: Client, emoji: RawEmojiData); public animated: boolean | null; public get createdAt(): Date | null; public get createdTimestamp(): number | null; @@ -1057,7 +1061,7 @@ export class Emoji extends Base { } export class Guild extends AnonymousGuild { - private constructor(client: Client, data: RawGuildData); + private constructor(client: Client, data: RawGuildData); private _sortedRoles(): Collection; private _sortedChannels(channel: NonThreadGuildBasedChannel): Collection; @@ -1203,7 +1207,7 @@ export class GuildAuditLogsEntry< } export class GuildBan extends Base { - private constructor(client: Client, data: RawGuildBanData, guild: Guild); + private constructor(client: Client, data: RawGuildBanData, guild: Guild); public guild: Guild; public user: User; public get partial(): boolean; @@ -1212,7 +1216,7 @@ export class GuildBan extends Base { } export abstract class GuildChannel extends BaseChannel { - public constructor(guild: Guild, data?: RawGuildChannelData, client?: Client, immediatePatch?: boolean); + public constructor(guild: Guild, data?: RawGuildChannelData, client?: Client, immediatePatch?: boolean); private memberPermissions(member: GuildMember, checkAdmin: boolean): Readonly; private rolePermissions(role: Role, checkAdmin: boolean): Readonly; public get createdAt(): Date; @@ -1249,7 +1253,7 @@ export abstract class GuildChannel extends BaseChannel { } export class GuildEmoji extends BaseGuildEmoji { - private constructor(client: Client, data: RawGuildEmojiData, guild: Guild); + private constructor(client: Client, data: RawGuildEmojiData, guild: Guild); private _roles: Snowflake[]; public get deletable(): boolean; @@ -1265,7 +1269,7 @@ export class GuildEmoji extends BaseGuildEmoji { } export class GuildMember extends PartialTextBasedChannel(Base) { - private constructor(client: Client, data: RawGuildMemberData, guild: Guild); + private constructor(client: Client, data: RawGuildMemberData, guild: Guild); public avatar: string | null; public get bannable(): boolean; public get dmChannel(): DMChannel | null; @@ -1313,7 +1317,7 @@ export class GuildMember extends PartialTextBasedChannel(Base) { } export class GuildPreview extends Base { - private constructor(client: Client, data: RawGuildPreviewData); + private constructor(client: Client, data: RawGuildPreviewData); public approximateMemberCount: number; public approximatePresenceCount: number; public get createdAt(): Date; @@ -1336,7 +1340,7 @@ export class GuildPreview extends Base { } export class GuildScheduledEvent extends Base { - private constructor(client: Client, data: RawGuildScheduledEventData); + private constructor(client: Client, data: RawGuildScheduledEventData); public id: Snowflake; public guildId: Snowflake; public channelId: Snowflake | null; @@ -1386,7 +1390,7 @@ export class GuildScheduledEvent, data: RawGuildTemplateData); public createdTimestamp: number; public updatedTimestamp: number; public get url(): string; @@ -1410,13 +1414,13 @@ export class GuildTemplate extends Base { } export class GuildPreviewEmoji extends BaseGuildEmoji { - private constructor(client: Client, data: RawGuildEmojiData, guild: GuildPreview); + private constructor(client: Client, data: RawGuildEmojiData, guild: GuildPreview); public guild: GuildPreview; public roles: Snowflake[]; } export class Integration extends Base { - private constructor(client: Client, data: RawIntegrationData, guild: Guild); + private constructor(client: Client, data: RawIntegrationData, guild: Guild); public account: IntegrationAccount; public application: IntegrationApplication | null; public enabled: boolean | null; @@ -1440,7 +1444,7 @@ export class Integration extends Base { } export class IntegrationApplication extends Application { - private constructor(client: Client, data: RawIntegrationApplicationData); + private constructor(client: Client, data: RawIntegrationApplicationData); public bot: User | null; public termsOfServiceURL: string | null; public privacyPolicyURL: string | null; @@ -1486,7 +1490,7 @@ export type RepliableInteraction = Exclude export class BaseInteraction extends Base { // This a technique used to brand different cached types. Or else we'll get `never` errors on typeguard checks. private readonly _cacheType: Cached; - protected constructor(client: Client, data: RawInteractionData); + protected constructor(client: Client, data: RawInteractionData); public applicationId: Snowflake; public get channel(): CacheTypeReducer< Cached, @@ -1531,7 +1535,7 @@ export class InteractionCollector extends Collec T, [Collection] > { - public constructor(client: Client, options?: InteractionCollectorOptions); + public constructor(client: Client, options?: InteractionCollectorOptions); private _handleMessageDeletion(message: Message): void; private _handleChannelDeletion(channel: NonThreadGuildBasedChannel): void; private _handleGuildDeletion(guild: Guild): void; @@ -1559,7 +1563,7 @@ export class InteractionCollector extends Collec } export class InteractionWebhook extends PartialWebhookMixin() { - public constructor(client: Client, id: Snowflake, token: string); + public constructor(client: Client, id: Snowflake, token: string); public token: string; public send(options: string | MessagePayload | InteractionReplyOptions): Promise; public editMessage( @@ -1570,7 +1574,7 @@ export class InteractionWebhook extends PartialWebhookMixin() { } export class Invite extends Base { - private constructor(client: Client, data: RawInviteData); + private constructor(client: Client, data: RawInviteData); public channel: NonThreadGuildBasedChannel | PartialGroupDMChannel | null; public channelId: Snowflake | null; public code: string; @@ -1603,7 +1607,7 @@ export class Invite extends Base { /** @deprecated */ export class InviteStageInstance extends Base { - private constructor(client: Client, data: RawInviteStageInstance, channelId: Snowflake, guildId: Snowflake); + private constructor(client: Client, data: RawInviteStageInstance, channelId: Snowflake, guildId: Snowflake); public channelId: Snowflake; public guildId: Snowflake; public members: Collection; @@ -1615,7 +1619,7 @@ export class InviteStageInstance extends Base { } export class InviteGuild extends AnonymousGuild { - private constructor(client: Client, data: RawInviteGuildData); + private constructor(client: Client, data: RawInviteGuildData); public welcomeScreen: WelcomeScreen | null; } @@ -1658,7 +1662,7 @@ export interface MappedInteractionTypes { export class Message extends Base { private readonly _cacheType: InGuild; - private constructor(client: Client, data: RawMessageData); + private constructor(client: Client, data: RawMessageData); private _patch(data: RawPartialMessageData | RawMessageData): void; public activity: MessageActivity | null; @@ -1773,7 +1777,7 @@ export class MessageCollector extends Collector extends BaseInteraction { - protected constructor(client: Client, data: RawMessageComponentInteractionData); + protected constructor(client: Client, data: RawMessageComponentInteractionData); public type: InteractionType.MessageComponent; public get component(): CacheTypeReducer< Cached, @@ -1910,10 +1914,10 @@ export class MessagePayload { } export class MessageReaction { - private constructor(client: Client, data: RawMessageReactionData, message: Message); + private constructor(client: Client, data: RawMessageReactionData, message: Message); private _emoji: GuildEmoji | ReactionEmoji; - public readonly client: Client; + public readonly client: Client; public count: number; public get emoji(): GuildEmoji | ReactionEmoji; public me: boolean; @@ -1975,7 +1979,7 @@ export interface ModalMessageModalSubmitInteraction extends BaseInteraction { - private constructor(client: Client, data: APIModalSubmitInteraction); + private constructor(client: Client, data: APIModalSubmitInteraction); public type: InteractionType.ModalSubmit; public readonly customId: string; public readonly components: ActionRowModalData[]; @@ -2014,13 +2018,13 @@ export class NewsChannel extends BaseGuildTextChannel { } export class OAuth2Guild extends BaseGuild { - private constructor(client: Client, data: RawOAuth2GuildData); + private constructor(client: Client, data: RawOAuth2GuildData); public owner: boolean; public permissions: Readonly; } export class PartialGroupDMChannel extends BaseChannel { - private constructor(client: Client, data: RawPartialGroupDMChannelData); + private constructor(client: Client, data: RawPartialGroupDMChannelData); public type: ChannelType.GroupDM; public name: string | null; public icon: string | null; @@ -2030,7 +2034,7 @@ export class PartialGroupDMChannel extends BaseChannel { } export class PermissionOverwrites extends Base { - private constructor(client: Client, data: RawPermissionOverwriteData, channel: NonThreadGuildBasedChannel); + private constructor(client: Client, data: RawPermissionOverwriteData, channel: NonThreadGuildBasedChannel); public allow: Readonly; public readonly channel: NonThreadGuildBasedChannel; public deny: Readonly; @@ -2063,7 +2067,7 @@ export class PermissionsBitField extends BitField { } export class Presence extends Base { - protected constructor(client: Client, data?: RawPresenceData); + protected constructor(client: Client, data?: RawPresenceData); public activities: Activity[]; public clientStatus: ClientPresenceStatusData | null; public guild: Guild | null; @@ -2126,7 +2130,7 @@ export class RichPresenceAssets { } export class Role extends Base { - private constructor(client: Client, data: RawRoleData, guild: Guild); + private constructor(client: Client, data: RawRoleData, guild: Guild); public color: number; public get createdAt(): Date; public get createdTimestamp(): number; @@ -2167,7 +2171,7 @@ export class Role extends Base { } export class SelectMenuInteraction extends MessageComponentInteraction { - public constructor(client: Client, data: RawMessageSelectMenuInteractionData); + public constructor(client: Client, data: RawMessageSelectMenuInteractionData); public get component(): CacheTypeReducer< Cached, SelectMenuComponent, @@ -2212,7 +2216,7 @@ export class Shard extends EventEmitter { public worker: Worker | null; public eval(script: string): Promise; public eval(fn: (client: Client) => T): Promise; - public eval(fn: (client: Client, context: Serialized

) => T, context: P): Promise; + public eval(fn: (client: Client, context: Serialized

) => T, context: P): Promise; public fetchClientValue(prop: string): Promise; public kill(): void; public respawn(options?: { delay?: number; timeout?: number }): Promise; @@ -2231,7 +2235,7 @@ export class Shard extends EventEmitter { } export class ShardClientUtil { - private constructor(client: Client, mode: ShardingManagerMode); + private constructor(client: Client, mode: ShardingManagerMode); private _handleMessage(message: unknown): void; private _respond(type: string, message: unknown): void; private incrementMaxListeners(emitter: EventEmitter | ChildProcess): void; @@ -2245,11 +2249,11 @@ export class ShardClientUtil { public broadcastEval(fn: (client: Client) => Awaitable): Promise[]>; public broadcastEval(fn: (client: Client) => Awaitable, options: { shard: number }): Promise>; public broadcastEval( - fn: (client: Client, context: Serialized

) => Awaitable, + fn: (client: Client, context: Serialized

) => Awaitable, options: { context: P }, ): Promise[]>; public broadcastEval( - fn: (client: Client, context: Serialized

) => Awaitable, + fn: (client: Client, context: Serialized

) => Awaitable, options: { context: P; shard: number }, ): Promise>; public fetchClientValues(prop: string): Promise; @@ -2257,7 +2261,7 @@ export class ShardClientUtil { public respawnAll(options?: MultipleShardRespawnOptions): Promise; public send(message: unknown): Promise; - public static singleton(client: Client, mode: ShardingManagerMode): ShardClientUtil; + public static singleton(client: Client, mode: ShardingManagerMode): ShardClientUtil; public static shardIdForGuildId(guildId: Snowflake, shardCount: number): number; } @@ -2277,11 +2281,11 @@ export class ShardingManager extends EventEmitter { public broadcastEval(fn: (client: Client) => Awaitable): Promise[]>; public broadcastEval(fn: (client: Client) => Awaitable, options: { shard: number }): Promise>; public broadcastEval( - fn: (client: Client, context: Serialized

) => Awaitable, + fn: (client: Client, context: Serialized

) => Awaitable, options: { context: P }, ): Promise[]>; public broadcastEval( - fn: (client: Client, context: Serialized

) => Awaitable, + fn: (client: Client, context: Serialized

) => Awaitable, options: { context: P; shard: number }, ): Promise>; public createShard(id: number): Shard; @@ -2321,7 +2325,7 @@ export class DirectoryChannel extends BaseChannel { } export class StageInstance extends Base { - private constructor(client: Client, data: RawStageInstanceData, channel: StageChannel); + private constructor(client: Client, data: RawStageInstanceData, channel: StageChannel); public id: Snowflake; public guildId: Snowflake; public channelId: Snowflake; @@ -2341,7 +2345,7 @@ export class StageInstance extends Base { } export class Sticker extends Base { - private constructor(client: Client, data: RawStickerData); + private constructor(client: Client, data: RawStickerData); public get createdTimestamp(): number; public get createdAt(): Date; public available: boolean | null; @@ -2367,7 +2371,7 @@ export class Sticker extends Base { } export class StickerPack extends Base { - private constructor(client: Client, data: RawStickerPackData); + private constructor(client: Client, data: RawStickerPackData); public get createdTimestamp(): number; public get createdAt(): Date; public bannerId: Snowflake | null; @@ -2382,7 +2386,7 @@ export class StickerPack extends Base { } export class Sweepers { - public constructor(client: Client, options: SweeperOptions); + public constructor(client: Client, options: SweeperOptions); public readonly client: Client; public intervals: Record; public options: SweeperOptions; @@ -2451,7 +2455,7 @@ export class SystemChannelFlagsBitField extends BitField, data: RawTeamData); public id: Snowflake; public name: string; public icon: string | null; @@ -2500,7 +2504,7 @@ export class ThreadChannel extends TextBasedChannelMixin(BaseChannel, true, [ 'createWebhook', 'setNSFW', ]) { - private constructor(guild: Guild, data?: RawThreadChannelData, client?: Client, fromInteraction?: boolean); + private constructor(guild: Guild, data?: RawThreadChannelData, client?: Client, fromInteraction?: boolean); public archived: boolean | null; public get archivedAt(): Date | null; public archiveTimestamp: number | null; @@ -2587,7 +2591,7 @@ export class Typing extends Base { } export class User extends PartialTextBasedChannel(Base) { - protected constructor(client: Client, data: RawUserData); + protected constructor(client: Client, data: RawUserData); private _equals(user: APIUser): boolean; public accentColor: number | null | undefined; @@ -2664,7 +2668,7 @@ export function setPosition( position: number, relative: boolean, sorted: Collection, - client: Client, + client: Client, route: string, reason?: string, ): Promise<{ id: Snowflake; position: number }[]>; @@ -2689,7 +2693,7 @@ export interface CreateChannelOptions { fromInteraction?: boolean; } -export function createChannel(client: Client, data: APIChannel, options?: CreateChannelOptions): Channel; +export function createChannel(client: Client, data: APIChannel, options?: CreateChannelOptions): Channel; export function createComponent( data: APIMessageComponent & { type: T }, @@ -2798,7 +2802,7 @@ export class VoiceState extends Base { } export class Webhook extends WebhookMixin() { - private constructor(client: Client, data?: RawWebhookData); + private constructor(client: Client, data?: RawWebhookData); public avatar: string | null; public avatarURL(options?: ImageURLOptions): string | null; public channelId: Snowflake; @@ -2956,7 +2960,7 @@ export class WebSocketShard extends EventEmitter { } export class Widget extends Base { - private constructor(client: Client, data: RawWidgetData); + private constructor(client: Client, data: RawWidgetData); private _patch(data: RawWidgetData): void; public fetch(): Promise; public id: Snowflake; @@ -2967,7 +2971,7 @@ export class Widget extends Base { } export class WidgetMember extends Base { - private constructor(client: Client, data: RawWidgetMemberData); + private constructor(client: Client, data: RawWidgetMemberData); public id: string; public username: string; public discriminator: string; @@ -3194,7 +3198,7 @@ export abstract class BaseManager { } export abstract class DataManager extends BaseManager { - protected constructor(client: Client, holds: Constructable); + protected constructor(client: Client, holds: Constructable); public readonly holds: Constructable; public get cache(): Collection; public resolve(resolvable: Holds): Holds; @@ -3205,7 +3209,7 @@ export abstract class DataManager extends BaseManager { } export abstract class CachedManager extends DataManager { - protected constructor(client: Client, holds: Constructable); + protected constructor(client: Client, holds: Constructable); private _add(data: unknown, cache?: boolean, { id, extras }?: { id: K; extras: unknown[] }): Holds; } @@ -3219,7 +3223,7 @@ export class ApplicationCommandManager< PermissionsOptionsExtras = { guild: GuildResolvable }, PermissionsGuildType = null, > extends CachedManager { - protected constructor(client: Client, iterable?: Iterable); + protected constructor(client: Client, iterable?: Iterable); public permissions: ApplicationCommandPermissionsManager< { command?: ApplicationCommandResolvable } & PermissionsOptionsExtras, { command: ApplicationCommandResolvable } & PermissionsOptionsExtras, @@ -3307,7 +3311,7 @@ export class ApplicationCommandPermissionsManager< } export class BaseGuildEmojiManager extends CachedManager { - protected constructor(client: Client, iterable?: Iterable); + protected constructor(client: Client, iterable?: Iterable); public resolveIdentifier(emoji: EmojiIdentifierResolvable): string | null; } @@ -3323,7 +3327,7 @@ export class CategoryChannelChildManager extends DataManager { - private constructor(client: Client, iterable: Iterable); + private constructor(client: Client, iterable: Iterable); public fetch(id: Snowflake, options?: FetchChannelOptions): Promise; } @@ -3405,7 +3409,7 @@ export class GuildEmojiRoleManager extends DataManager { - private constructor(client: Client, iterable?: Iterable); + private constructor(client: Client, iterable?: Iterable); public create(options: GuildCreateOptions): Promise; public fetch(options: Snowflake | FetchGuildOptions): Promise; public fetch(options?: FetchGuildsOptions): Promise>; @@ -3543,7 +3547,7 @@ export class PermissionOverwriteManager extends CachedManager< PermissionOverwrites, PermissionOverwriteResolvable > { - private constructor(client: Client, iterable?: Iterable); + private constructor(client: Client, iterable?: Iterable); public set( overwrites: readonly OverwriteResolvable[] | Collection, reason?: string, @@ -3568,7 +3572,7 @@ export class PermissionOverwriteManager extends CachedManager< } export class PresenceManager extends CachedManager { - private constructor(client: Client, iterable?: Iterable); + private constructor(client: Client, iterable?: Iterable); } export class ReactionManager extends CachedManager { @@ -3632,7 +3636,7 @@ export class ThreadMemberManager extends CachedManager { - private constructor(client: Client, iterable?: Iterable); + private constructor(client: Client, iterable?: Iterable); private dmChannel(userId: Snowflake): DMChannel | null; public createDM(user: UserResolvable, options?: BaseFetchOptions): Promise; public deleteDM(user: UserResolvable): Promise; @@ -5332,7 +5336,7 @@ export type Partialize< M extends keyof T | null = null, E extends keyof T | '' = '', > = { - readonly client: Client; + readonly client: Client; id: Snowflake; partial: true; } & { diff --git a/packages/discord.js/typings/index.test-d.ts b/packages/discord.js/typings/index.test-d.ts index c70dfb5223db..2b6a4a41e575 100644 --- a/packages/discord.js/typings/index.test-d.ts +++ b/packages/discord.js/typings/index.test-d.ts @@ -165,8 +165,383 @@ const guildCommandId = '234567890123456789'; // example id declare const slashCommandBuilder: SlashCommandBuilder; declare const contextMenuCommandBuilder: ContextMenuCommandBuilder; -client.on('ready', async () => { - console.log(`Client is logged in as ${client.user!.tag} and ready!`); +client.on('channelCreate', ({ client }) => expectType>(client)); +client.on('channelDelete', ({ client }) => expectType>(client)); +client.on('channelPinsUpdate', ({ client }) => expectType>(client)); + +client.on('channelUpdate', ({ client: oldClient }, { client: newClient }) => { + expectType>(oldClient); + expectType>(newClient); +}); + +client.on('emojiCreate', ({ client }) => expectType>(client)); +client.on('emojiDelete', ({ client }) => expectType>(client)); + +client.on('emojiUpdate', ({ client: oldClient }, { client: newClient }) => { + expectType>(oldClient); + expectType>(newClient); +}); + +client.on('guildBanAdd', ({ client }) => expectType>(client)); +client.on('guildBanRemove', ({ client }) => expectType>(client)); +client.on('guildDelete', ({ client }) => expectType>(client)); +client.on('guildIntegrationsUpdate', ({ client }) => expectType>(client)); +client.on('guildMemberAdd', ({ client }) => expectType>(client)); +client.on('guildMemberAvailable', ({ client }) => expectType>(client)); + +client.on('guildMemberRemove', member => { + expectType>(member.client); + if (member.partial) return expectType(member.joinedAt); + expectType(member.joinedAt); +}); + +client.on('guildMembersChunk', (members, { client }) => { + expectType>(members.first()!.client); + expectType>(client); +}); + +client.on('guildMemberUpdate', ({ client: oldClient }, { client: newClient }) => { + expectType>(oldClient); + expectType>(newClient); +}); + +client.on('guildScheduledEventCreate', ({ client }) => expectType>(client)); +client.on('guildScheduledEventDelete', ({ client }) => expectType>(client)); + +client.on('guildScheduledEventUpdate', (oldGuildScheduledEvent, { client }) => { + expectType>(oldGuildScheduledEvent!.client); + expectType>(client); +}); + +client.on('guildScheduledEventUserAdd', ({ client: oldClient }, { client: newClient }) => { + expectType>(oldClient); + expectType>(newClient); +}); + +client.on('guildScheduledEventUserRemove', ({ client: oldClient }, { client: newClient }) => { + expectType>(oldClient); + expectType>(newClient); +}); + +client.on('guildUnavailable', ({ client }) => expectType>(client)); + +client.on('guildUpdate', ({ client: oldClient }, { client: newClient }) => { + expectType>(oldClient); + expectType>(newClient); +}); + +client.on('interactionCreate', async interaction => { + expectType>(interaction.client); + expectType(interaction.guildId); + expectType(interaction.channelId); + expectType(interaction.member); + + if (interaction.type === InteractionType.MessageComponent) { + expectType(interaction.channelId); + } + + if (interaction.type !== InteractionType.ApplicationCommand) return; + + void new ActionRowBuilder(); + + const button = new ButtonBuilder(); + + const actionRow = new ActionRowBuilder({ + type: ComponentType.ActionRow, + components: [button.toJSON()], + }); + + actionRow.toJSON(); + + await interaction.reply({ content: 'Hi!', components: [actionRow] }); + + // @ts-expect-error + interaction.reply({ content: 'Hi!', components: [[button]] }); + + void new ActionRowBuilder({}); + + // @ts-expect-error + await interaction.reply({ content: 'Hi!', components: [button] }); + + await interaction.reply({ + content: 'test', + components: [ + { + components: [ + { + custom_id: 'abc', + label: 'abc', + style: ButtonStyle.Primary, + type: ComponentType.Button, + }, + ], + type: ComponentType.ActionRow, + }, + ], + }); + + // This is for testing never type resolution + if (!interaction.inGuild()) { + return; + } + + if (interaction.inRawGuild()) { + expectNotType(interaction); + return; + } + + if (interaction.inCachedGuild()) { + expectNotType(interaction); + return; + } +}); + +client.on('inviteCreate', ({ client }) => expectType>(client)); +client.on('inviteDelete', ({ client }) => expectType>(client)); + +// This is to check that stuff is the right type +declare const assertIsMessage: (m: Promise) => void; + +client.on('messageCreate', async message => { + const { client, channel } = message; + expectType>(client); + assertIsMessage(channel.send('string')); + assertIsMessage(channel.send({})); + assertIsMessage(channel.send({ embeds: [] })); + + const attachment = new AttachmentBuilder('file.png'); + const embed = new EmbedBuilder(); + assertIsMessage(channel.send({ files: [attachment] })); + assertIsMessage(channel.send({ embeds: [embed] })); + assertIsMessage(channel.send({ embeds: [embed], files: [attachment] })); + + if (message.inGuild()) { + expectAssignable>(message); + const component = await message.awaitMessageComponent({ componentType: ComponentType.Button }); + expectType>(component); + expectType>(await component.reply({ fetchReply: true })); + + const buttonCollector = message.createMessageComponentCollector({ componentType: ComponentType.Button }); + expectType>>(buttonCollector); + expectAssignable< + ( + test: ButtonInteraction<'cached'>, + items: Collection>, + ) => boolean | Promise + >(buttonCollector.filter); + expectType(message.channel); + expectType(message.guild); + expectType(message.member); + } + + expectType(message.channel); + expectNotType(message.channel); + + // @ts-expect-error + channel.send(); + // @ts-expect-error + channel.send({ another: 'property' }); + + // Check collector creations. + + // Verify that buttons interactions are inferred. + const buttonCollector = message.createMessageComponentCollector({ componentType: ComponentType.Button }); + expectAssignable>(message.awaitMessageComponent({ componentType: ComponentType.Button })); + expectAssignable>(channel.awaitMessageComponent({ componentType: ComponentType.Button })); + expectAssignable>(buttonCollector); + + // Verify that select menus interaction are inferred. + const selectMenuCollector = message.createMessageComponentCollector({ componentType: ComponentType.SelectMenu }); + expectAssignable>( + message.awaitMessageComponent({ componentType: ComponentType.SelectMenu }), + ); + expectAssignable>( + channel.awaitMessageComponent({ componentType: ComponentType.SelectMenu }), + ); + expectAssignable>(selectMenuCollector); + + // Verify that message component interactions are default collected types. + const defaultCollector = message.createMessageComponentCollector(); + expectAssignable>(message.awaitMessageComponent()); + expectAssignable>(channel.awaitMessageComponent()); + expectAssignable>(defaultCollector); + + // Verify that additional options don't affect default collector types. + const semiDefaultCollector = message.createMessageComponentCollector({ time: 10000 }); + expectType>(semiDefaultCollector); + const semiDefaultCollectorChannel = message.createMessageComponentCollector({ time: 10000 }); + expectType>(semiDefaultCollectorChannel); + + // Verify that interaction collector options can't be used. + message.createMessageComponentCollector({ + // @ts-expect-error + interactionType: InteractionType.ApplicationCommand, + }); + + // Make sure filter parameters are properly inferred. + message.createMessageComponentCollector({ + filter: i => { + expectType(i); + return true; + }, + }); + + message.createMessageComponentCollector({ + componentType: ComponentType.Button, + filter: i => { + expectType(i); + return true; + }, + }); + + message.createMessageComponentCollector({ + componentType: ComponentType.SelectMenu, + filter: i => { + expectType(i); + return true; + }, + }); + + message.awaitMessageComponent({ + filter: i => { + expectType(i); + return true; + }, + }); + + message.awaitMessageComponent({ + componentType: ComponentType.Button, + filter: i => { + expectType(i); + return true; + }, + }); + + message.awaitMessageComponent({ + componentType: ComponentType.SelectMenu, + filter: i => { + expectType(i); + return true; + }, + }); + + const webhook = await message.fetchWebhook(); + + if (webhook.isChannelFollower()) { + expectAssignable(webhook.sourceGuild); + expectAssignable(webhook.sourceChannel); + } else if (webhook.isIncoming()) { + expectType(webhook.token); + } + + expectNotType(webhook.sourceGuild); + expectNotType(webhook.sourceChannel); + expectNotType(webhook.token); + + channel.awaitMessageComponent({ + filter: i => { + expectType>(i); + return true; + }, + }); + + channel.awaitMessageComponent({ + componentType: ComponentType.Button, + filter: i => { + expectType>(i); + return true; + }, + }); + + channel.awaitMessageComponent({ + componentType: ComponentType.SelectMenu, + filter: i => { + expectType>(i); + return true; + }, + }); + + // Check that both builders and builder data can be sent in messages + const row = new ActionRowBuilder(); + const buttonsRow: ActionRowData = { + type: ComponentType.ActionRow, + components: [ + new ButtonBuilder(), + { type: ComponentType.Button, label: 'test', style: ButtonStyle.Primary, customId: 'test' }, + { + type: ComponentType.Button, + label: 'another test', + style: ButtonStyle.Link, + url: 'https://discord.js.org', + }, + ], + }; + const selectsRow: ActionRowData = { + type: ComponentType.ActionRow, + components: [ + new SelectMenuBuilder(), + { + type: ComponentType.SelectMenu, + label: 'select menu', + options: [{ label: 'test', value: 'test' }], + customId: 'test', + }, + ], + }; + + const embedData = { description: 'test', color: 0xff0000 }; + channel.send({ components: [row, buttonsRow, selectsRow], embeds: [embed, embedData] }); +}); + +client.on('messageDelete', ({ client }) => expectType>(client)); + +client.on('messageDeleteBulk', (messages, { client }) => { + expectType>(messages.first()!.client); + expectType>(client); +}); + +client.on('messageReactionAdd', async (reaction, { client }) => { + expectType>(reaction.client); + expectType>(client); + + if (reaction.partial) { + expectType(reaction.count); + reaction = await reaction.fetch(); + } + + expectType(reaction.count); + if (reaction.message.partial) return expectType(reaction.message.content); + expectType(reaction.message.content); +}); + +client.on('messageReactionRemove', ({ client: oldClient }, { client: newClient }) => { + expectType>(oldClient); + expectType>(newClient); +}); + +client.on('messageReactionRemoveAll', async (message, reactions) => { + console.log(`messageReactionRemoveAll - id: ${message.id} (${message.id.length})`); + if (message.partial) message = await message.fetch(); + console.log(`messageReactionRemoveAll - content: ${message.content}`); + expectType>(message.client); + expectType>(reactions.first()!.client); +}); + +client.on('messageReactionRemoveEmoji', ({ client }) => expectType>(client)); + +client.on('messageUpdate', ({ client: oldClient }, { client: newClient }) => { + expectType>(oldClient); + expectType>(newClient); +}); + +client.on('presenceUpdate', (oldPresence, { client }) => { + expectType>(oldPresence!.client); + expectType>(client); +}); + +client.on('ready', async client => { + expectType>(client); + console.log(`Client is logged in as ${client.user.tag} and ready!`); // Test fetching all global commands and ones from one guild expectType>>( @@ -601,311 +976,71 @@ client.on('ready', async () => { await guildCommandFromGuild?.permissions.remove({ // @ts-expect-error command: guildCommandId, - roles: [testGuildId], - users: [testUserId], - token: 'VeryRealToken', - }); - await guildCommandFromGuild?.permissions.set({ - // @ts-expect-error - command: guildCommandId, - permissions: [{ type: ApplicationCommandPermissionType.Role, id: testGuildId, permission: true }], - token: 'VeryRealToken', - }); - - await guildCommandFromGuild?.permissions.add({ - // @ts-expect-error - guild: testGuildId, - permissions: [{ type: ApplicationCommandPermissionType.Role, id: testGuildId, permission: true }], - token: 'VeryRealToken', - }); - // @ts-expect-error - await guildCommandFromGuild?.permissions.has({ guild: testGuildId, permissionId: testGuildId }); - // @ts-expect-error - await guildCommandFromGuild?.permissions.remove({ guild: testGuildId, roles: [testGuildId], token: 'VeryRealToken' }); - // @ts-expect-error - await guildCommandFromGuild?.permissions.remove({ guild: testGuildId, users: [testUserId], token: 'VeryRealToken' }); - await guildCommandFromGuild?.permissions.remove({ - // @ts-expect-error - guild: testGuildId, - roles: [testGuildId], - users: [testUserId], - token: 'VeryRealToken', - }); - await guildCommandFromGuild?.permissions.set({ - // @ts-expect-error - guild: testGuildId, - permissions: [{ type: ApplicationCommandPermissionType.Role, id: testGuildId, permission: true }], - token: 'VeryRealToken', - }); -}); - -client.on('guildCreate', async g => { - const channel = g.channels.cache.random(); - if (!channel) return; - - if (channel.type === ChannelType.GuildText) { - const row: ActionRowData = { - type: ComponentType.ActionRow, - components: [ - new ButtonBuilder(), - { type: ComponentType.Button, style: ButtonStyle.Primary, label: 'string', customId: 'foo' }, - { type: ComponentType.Button, style: ButtonStyle.Link, label: 'test', url: 'test' }, - { type: ComponentType.SelectMenu, customId: 'foo' }, - new SelectMenuBuilder(), - // @ts-expect-error - { type: ComponentType.TextInput, style: TextInputStyle.Paragraph, customId: 'foo', label: 'test' }, - // @ts-expect-error - new TextInputBuilder(), - ], - }; - - const row2 = new ActionRowBuilder({ - type: ComponentType.ActionRow, - components: [ - { type: ComponentType.Button, style: ButtonStyle.Primary, label: 'string', customId: 'foo' }, - { type: ComponentType.Button, style: ButtonStyle.Link, label: 'test', url: 'test' }, - { type: ComponentType.SelectMenu, customId: 'foo' }, - ], - }); - - channel.send({ components: [row, row2] }); - } - - channel.setName('foo').then(updatedChannel => { - console.log(`New channel name: ${updatedChannel.name}`); - }); - - // @ts-expect-error no options - expectNotType>(g.members.add(testUserId)); - - // @ts-expect-error no access token - expectNotType>(g.members.add(testUserId, {})); - - expectNotType>( - // @ts-expect-error invalid role resolvable - g.members.add(testUserId, { accessToken: 'totallyRealAccessToken', roles: [g.roles.cache] }), - ); - - expectType>( - g.members.add(testUserId, { accessToken: 'totallyRealAccessToken', fetchWhenExisting: false }), - ); - - expectType>(g.members.add(testUserId, { accessToken: 'totallyRealAccessToken' })); - - expectType>( - g.members.add(testUserId, { - accessToken: 'totallyRealAccessToken', - mute: true, - deaf: false, - roles: [g.roles.cache.first()!], - force: true, - fetchWhenExisting: true, - }), - ); -}); - -client.on('messageReactionRemoveAll', async message => { - console.log(`messageReactionRemoveAll - id: ${message.id} (${message.id.length})`); - - if (message.partial) message = await message.fetch(); - - console.log(`messageReactionRemoveAll - content: ${message.content}`); -}); - -// This is to check that stuff is the right type -declare const assertIsMessage: (m: Promise) => void; - -client.on('messageCreate', async message => { - const { channel } = message; - assertIsMessage(channel.send('string')); - assertIsMessage(channel.send({})); - assertIsMessage(channel.send({ embeds: [] })); - - const attachment = new AttachmentBuilder('file.png'); - const embed = new EmbedBuilder(); - assertIsMessage(channel.send({ files: [attachment] })); - assertIsMessage(channel.send({ embeds: [embed] })); - assertIsMessage(channel.send({ embeds: [embed], files: [attachment] })); - - if (message.inGuild()) { - expectAssignable>(message); - const component = await message.awaitMessageComponent({ componentType: ComponentType.Button }); - expectType>(component); - expectType>(await component.reply({ fetchReply: true })); - - const buttonCollector = message.createMessageComponentCollector({ componentType: ComponentType.Button }); - expectType>>(buttonCollector); - expectAssignable< - ( - test: ButtonInteraction<'cached'>, - items: Collection>, - ) => boolean | Promise - >(buttonCollector.filter); - expectType(message.channel); - expectType(message.guild); - expectType(message.member); - } - - expectType(message.channel); - expectNotType(message.channel); - - // @ts-expect-error - channel.send(); - // @ts-expect-error - channel.send({ another: 'property' }); - - // Check collector creations. - - // Verify that buttons interactions are inferred. - const buttonCollector = message.createMessageComponentCollector({ componentType: ComponentType.Button }); - expectAssignable>(message.awaitMessageComponent({ componentType: ComponentType.Button })); - expectAssignable>(channel.awaitMessageComponent({ componentType: ComponentType.Button })); - expectAssignable>(buttonCollector); - - // Verify that select menus interaction are inferred. - const selectMenuCollector = message.createMessageComponentCollector({ componentType: ComponentType.SelectMenu }); - expectAssignable>( - message.awaitMessageComponent({ componentType: ComponentType.SelectMenu }), - ); - expectAssignable>( - channel.awaitMessageComponent({ componentType: ComponentType.SelectMenu }), - ); - expectAssignable>(selectMenuCollector); - - // Verify that message component interactions are default collected types. - const defaultCollector = message.createMessageComponentCollector(); - expectAssignable>(message.awaitMessageComponent()); - expectAssignable>(channel.awaitMessageComponent()); - expectAssignable>(defaultCollector); - - // Verify that additional options don't affect default collector types. - const semiDefaultCollector = message.createMessageComponentCollector({ time: 10000 }); - expectType>(semiDefaultCollector); - const semiDefaultCollectorChannel = message.createMessageComponentCollector({ time: 10000 }); - expectType>(semiDefaultCollectorChannel); - - // Verify that interaction collector options can't be used. - message.createMessageComponentCollector({ - // @ts-expect-error - interactionType: InteractionType.ApplicationCommand, - }); - - // Make sure filter parameters are properly inferred. - message.createMessageComponentCollector({ - filter: i => { - expectType(i); - return true; - }, - }); - - message.createMessageComponentCollector({ - componentType: ComponentType.Button, - filter: i => { - expectType(i); - return true; - }, + roles: [testGuildId], + users: [testUserId], + token: 'VeryRealToken', }); - - message.createMessageComponentCollector({ - componentType: ComponentType.SelectMenu, - filter: i => { - expectType(i); - return true; - }, + await guildCommandFromGuild?.permissions.set({ + // @ts-expect-error + command: guildCommandId, + permissions: [{ type: ApplicationCommandPermissionType.Role, id: testGuildId, permission: true }], + token: 'VeryRealToken', }); - message.awaitMessageComponent({ - filter: i => { - expectType(i); - return true; - }, + await guildCommandFromGuild?.permissions.add({ + // @ts-expect-error + guild: testGuildId, + permissions: [{ type: ApplicationCommandPermissionType.Role, id: testGuildId, permission: true }], + token: 'VeryRealToken', }); - - message.awaitMessageComponent({ - componentType: ComponentType.Button, - filter: i => { - expectType(i); - return true; - }, + // @ts-expect-error + await guildCommandFromGuild?.permissions.has({ guild: testGuildId, permissionId: testGuildId }); + // @ts-expect-error + await guildCommandFromGuild?.permissions.remove({ guild: testGuildId, roles: [testGuildId], token: 'VeryRealToken' }); + // @ts-expect-error + await guildCommandFromGuild?.permissions.remove({ guild: testGuildId, users: [testUserId], token: 'VeryRealToken' }); + await guildCommandFromGuild?.permissions.remove({ + // @ts-expect-error + guild: testGuildId, + roles: [testGuildId], + users: [testUserId], + token: 'VeryRealToken', }); - - message.awaitMessageComponent({ - componentType: ComponentType.SelectMenu, - filter: i => { - expectType(i); - return true; - }, + await guildCommandFromGuild?.permissions.set({ + // @ts-expect-error + guild: testGuildId, + permissions: [{ type: ApplicationCommandPermissionType.Role, id: testGuildId, permission: true }], + token: 'VeryRealToken', }); +}); - const webhook = await message.fetchWebhook(); - - if (webhook.isChannelFollower()) { - expectAssignable(webhook.sourceGuild); - expectAssignable(webhook.sourceChannel); - } else if (webhook.isIncoming()) { - expectType(webhook.token); - } - - expectNotType(webhook.sourceGuild); - expectNotType(webhook.sourceChannel); - expectNotType(webhook.token); +client.on('roleCreate', ({ client }) => expectType>(client)); +client.on('roleDelete', ({ client }) => expectType>(client)); - channel.awaitMessageComponent({ - filter: i => { - expectType>(i); - return true; - }, - }); +client.on('roleUpdate', ({ client: oldClient }, { client: newClient }) => { + expectType>(oldClient); + expectType>(newClient); +}); - channel.awaitMessageComponent({ - componentType: ComponentType.Button, - filter: i => { - expectType>(i); - return true; - }, - }); +client.on('stageInstanceCreate', ({ client }) => expectType>(client)); +client.on('stageInstanceDelete', ({ client }) => expectType>(client)); - channel.awaitMessageComponent({ - componentType: ComponentType.SelectMenu, - filter: i => { - expectType>(i); - return true; - }, - }); +client.on('stageInstanceUpdate', (oldStageInstance, { client }) => { + expectType>(oldStageInstance!.client); + expectType>(client); +}); - // Check that both builders and builder data can be sent in messages - const row = new ActionRowBuilder(); - const buttonsRow: ActionRowData = { - type: ComponentType.ActionRow, - components: [ - new ButtonBuilder(), - { type: ComponentType.Button, label: 'test', style: ButtonStyle.Primary, customId: 'test' }, - { - type: ComponentType.Button, - label: 'another test', - style: ButtonStyle.Link, - url: 'https://discord.js.org', - }, - ], - }; - const selectsRow: ActionRowData = { - type: ComponentType.ActionRow, - components: [ - new SelectMenuBuilder(), - { - type: ComponentType.SelectMenu, - label: 'select menu', - options: [{ label: 'test', value: 'test' }], - customId: 'test', - }, - ], - }; +client.on('stickerCreate', ({ client }) => expectType>(client)); +client.on('stickerDelete', ({ client }) => expectType>(client)); - const embedData = { description: 'test', color: 0xff0000 }; - channel.send({ components: [row, buttonsRow, selectsRow], embeds: [embed, embedData] }); +client.on('stickerUpdate', ({ client: oldClient }, { client: newClient }) => { + expectType>(oldClient); + expectType>(newClient); }); client.on('threadCreate', thread => { + expectType>(thread.client); + if (thread.type === ChannelType.GuildPrivateThread) { expectType(thread.createdTimestamp); expectType(thread.createdAt); @@ -915,7 +1050,17 @@ client.on('threadCreate', thread => { } }); +client.on('threadDelete', ({ client }) => expectType>(client)); + +client.on('threadListSync', (threads, { client }) => { + expectType>(threads.first()!.client); + expectType>(client); +}); + client.on('threadMembersUpdate', (addedMembers, removedMembers, thread) => { + expectType>(addedMembers.first()!.client); + expectType>(removedMembers.first()!.client); + expectType>(thread.client); expectType>(addedMembers); expectType>(removedMembers); expectType(thread); @@ -931,63 +1076,98 @@ client.on('threadMembersUpdate', (addedMembers, removedMembers, thread) => { } }); -client.on('interactionCreate', async interaction => { - expectType(interaction.guildId); - expectType(interaction.channelId); - expectType(interaction.member); +client.on('threadMemberUpdate', ({ client: oldClient }, { client: newClient }) => { + expectType>(oldClient); + expectType>(newClient); +}); - if (interaction.type === InteractionType.MessageComponent) { - expectType(interaction.channelId); - } +client.on('threadUpdate', ({ client: oldClient }, { client: newClient }) => { + expectType>(oldClient); + expectType>(newClient); +}); - if (interaction.type !== InteractionType.ApplicationCommand) return; +client.on('typingStart', ({ client }) => expectType>(client)); - void new ActionRowBuilder(); +client.on('userUpdate', ({ client: oldClient }, { client: newClient }) => { + expectType>(oldClient); + expectType>(newClient); +}); - const button = new ButtonBuilder(); +client.on('voiceStateUpdate', ({ client: oldClient }, { client: newClient }) => { + expectType>(oldClient); + expectType>(newClient); +}); - const actionRow = new ActionRowBuilder({ - type: ComponentType.ActionRow, - components: [button.toJSON()], +client.on('webhookUpdate', ({ client }) => expectType>(client)); + +client.on('guildCreate', async g => { + expectType>(g.client); + const channel = g.channels.cache.random(); + if (!channel) return; + + if (channel.type === ChannelType.GuildText) { + const row: ActionRowData = { + type: ComponentType.ActionRow, + components: [ + new ButtonBuilder(), + { type: ComponentType.Button, style: ButtonStyle.Primary, label: 'string', customId: 'foo' }, + { type: ComponentType.Button, style: ButtonStyle.Link, label: 'test', url: 'test' }, + { type: ComponentType.SelectMenu, customId: 'foo' }, + new SelectMenuBuilder(), + // @ts-expect-error + { type: ComponentType.TextInput, style: TextInputStyle.Paragraph, customId: 'foo', label: 'test' }, + // @ts-expect-error + new TextInputBuilder(), + ], + }; + + const row2 = new ActionRowBuilder({ + type: ComponentType.ActionRow, + components: [ + { type: ComponentType.Button, style: ButtonStyle.Primary, label: 'string', customId: 'foo' }, + { type: ComponentType.Button, style: ButtonStyle.Link, label: 'test', url: 'test' }, + { type: ComponentType.SelectMenu, customId: 'foo' }, + ], + }); + + channel.send({ components: [row, row2] }); + } + + channel.setName('foo').then(updatedChannel => { + console.log(`New channel name: ${updatedChannel.name}`); }); - actionRow.toJSON(); + // @ts-expect-error no options + expectNotType>(g.members.add(testUserId)); - await interaction.reply({ content: 'Hi!', components: [actionRow] }); + // @ts-expect-error no access token + expectNotType>(g.members.add(testUserId, {})); - // @ts-expect-error - interaction.reply({ content: 'Hi!', components: [[button]] }); + expectNotType>( + // @ts-expect-error invalid role resolvable + g.members.add(testUserId, { accessToken: 'totallyRealAccessToken', roles: [g.roles.cache] }), + ); - void new ActionRowBuilder({}); + expectType>( + g.members.add(testUserId, { accessToken: 'totallyRealAccessToken', fetchWhenExisting: false }), + ); - // @ts-expect-error - await interaction.reply({ content: 'Hi!', components: [button] }); + expectType>(g.members.add(testUserId, { accessToken: 'totallyRealAccessToken' })); - await interaction.reply({ - content: 'test', - components: [ - { - components: [ - { - custom_id: 'abc', - label: 'abc', - style: ButtonStyle.Primary, - type: ComponentType.Button, - }, - ], - type: ComponentType.ActionRow, - }, - ], - }); + expectType>( + g.members.add(testUserId, { + accessToken: 'totallyRealAccessToken', + mute: true, + deaf: false, + roles: [g.roles.cache.first()!], + force: true, + fetchWhenExisting: true, + }), + ); }); client.login('absolutely-valid-token'); -// Test client conditional types -client.on('ready', client => { - expectType>(client); -}); - declare const loggedInClient: Client; expectType(loggedInClient.application); expectType(loggedInClient.readyAt); @@ -1289,22 +1469,6 @@ if (typing.inGuild()) { expectType(typing.guild); } -// Test partials structures -client.on('guildMemberRemove', member => { - if (member.partial) return expectType(member.joinedAt); - expectType(member.joinedAt); -}); - -client.on('messageReactionAdd', async reaction => { - if (reaction.partial) { - expectType(reaction.count); - reaction = await reaction.fetch(); - } - expectType(reaction.count); - if (reaction.message.partial) return expectType(reaction.message.content); - expectType(reaction.message.content); -}); - // Test interactions declare const interaction: Interaction; declare const booleanValue: boolean; @@ -1314,23 +1478,6 @@ if (interaction.inGuild()) { expectType(interaction.guildId); } -client.on('interactionCreate', interaction => { - // This is for testing never type resolution - if (!interaction.inGuild()) { - return; - } - - if (interaction.inRawGuild()) { - expectNotType(interaction); - return; - } - - if (interaction.inCachedGuild()) { - expectNotType(interaction); - return; - } -}); - client.on('interactionCreate', async interaction => { if (interaction.type === InteractionType.MessageComponent) { expectType(interaction); From d14d47b62fea9a57570f24195ca486886751c6fa Mon Sep 17 00:00:00 2001 From: iCrawl Date: Mon, 12 Sep 2022 18:46:15 +0200 Subject: [PATCH 151/155] chore: dep cleanup --- packages/website/package.json | 3 --- packages/website/unocss.config.ts | 2 +- yarn.lock | 24 ------------------------ 3 files changed, 1 insertion(+), 28 deletions(-) diff --git a/packages/website/package.json b/packages/website/package.json index 4bdda7b07ad6..5b8b259303d2 100644 --- a/packages/website/package.json +++ b/packages/website/package.json @@ -48,8 +48,6 @@ "@vscode/codicons": "^0.0.32", "ariakit": "^2.0.0-next.41", "cmdk": "^0.1.20", - "flexsearch": "^0.7.21", - "minisearch": "^5.0.0", "next": "^12.3.0", "next-mdx-remote": "^4.1.0", "next-progress": "^2.2.0", @@ -72,7 +70,6 @@ "devDependencies": { "@testing-library/react": "^13.4.0", "@testing-library/user-event": "^14.4.3", - "@types/flexsearch": "^0.7.3", "@types/node": "^16.11.58", "@types/react-dom": "^18.0.6", "@types/react-syntax-highlighter": "^15.5.5", diff --git a/packages/website/unocss.config.ts b/packages/website/unocss.config.ts index 17086a0abe45..e8846211975c 100644 --- a/packages/website/unocss.config.ts +++ b/packages/website/unocss.config.ts @@ -20,7 +20,7 @@ export default defineConfig({ presets: [ presetUno({ dark: 'class' }), presetWebFonts({ - provider: 'google', + provider: 'bunny', fonts: { mono: ['JetBrains Mono', 'JetBrains Mono:400,600,700'], }, diff --git a/yarn.lock b/yarn.lock index 94d8e211dc44..6494fe4a0c80 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2128,7 +2128,6 @@ __metadata: "@microsoft/tsdoc": 0.14.1 "@testing-library/react": ^13.4.0 "@testing-library/user-event": ^14.4.3 - "@types/flexsearch": ^0.7.3 "@types/node": ^16.11.58 "@types/react-dom": ^18.0.6 "@types/react-syntax-highlighter": ^15.5.5 @@ -2142,9 +2141,7 @@ __metadata: concurrently: ^7.4.0 eslint: ^8.23.0 eslint-config-neon: ^0.1.33 - flexsearch: ^0.7.21 happy-dom: ^6.0.4 - minisearch: ^5.0.0 next: ^12.3.0 next-mdx-remote: ^4.1.0 next-progress: ^2.2.0 @@ -3615,13 +3612,6 @@ __metadata: languageName: node linkType: hard -"@types/flexsearch@npm:^0.7.3": - version: 0.7.3 - resolution: "@types/flexsearch@npm:0.7.3" - checksum: fac365e6d6f7f251c49b22530635a7042523b00a45dcb5591372782125f5e5e97b0508c71e08c8d1b3fbef0e01c504027271df5d60698b1e26caf7d067cc2ef0 - languageName: node - linkType: hard - "@types/form-data@npm:0.0.33": version: 0.0.33 resolution: "@types/form-data@npm:0.0.33" @@ -8882,13 +8872,6 @@ __metadata: languageName: node linkType: hard -"flexsearch@npm:^0.7.21": - version: 0.7.21 - resolution: "flexsearch@npm:0.7.21" - checksum: ae77c6ebba6f02660bf28a36b56427ec2d737dcb9bd03564db27801484be2dd943fc7350e60a6f0aed47ab1b85af7fd5b33e27e84fd2fcbb241d9c5d21c8d068 - languageName: node - linkType: hard - "foreground-child@npm:^2.0.0": version: 2.0.0 resolution: "foreground-child@npm:2.0.0" @@ -12859,13 +12842,6 @@ __metadata: languageName: node linkType: hard -"minisearch@npm:^5.0.0": - version: 5.0.0 - resolution: "minisearch@npm:5.0.0" - checksum: e716c877706be6b4977b1e4fe70baa006c392857bdd7cf13f483483fcc7c8cbb34f852616449da9de41bed4b0b2e034dde80305ee3ed7c10f8c4845a813a91ec - languageName: node - linkType: hard - "minizlib@npm:^2.1.1, minizlib@npm:^2.1.2": version: 2.1.2 resolution: "minizlib@npm:2.1.2" From 22ac6b4660db6b02f62b9851e9e3bcfe5fb506b5 Mon Sep 17 00:00:00 2001 From: Almeida Date: Thu, 15 Sep 2022 19:13:55 +0100 Subject: [PATCH 152/155] docs: update misleading `Client#guildMemberAvailable` event description (#8626) --- packages/discord.js/src/client/actions/GuildMemberUpdate.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/discord.js/src/client/actions/GuildMemberUpdate.js b/packages/discord.js/src/client/actions/GuildMemberUpdate.js index dc41a798f51a..491b36181e0a 100644 --- a/packages/discord.js/src/client/actions/GuildMemberUpdate.js +++ b/packages/discord.js/src/client/actions/GuildMemberUpdate.js @@ -31,7 +31,7 @@ class GuildMemberUpdateAction extends Action { } else { const newMember = guild.members._add(data); /** - * Emitted whenever a member becomes available in a large guild. + * Emitted whenever a member becomes available. * @event Client#guildMemberAvailable * @param {GuildMember} member The member that became available */ From fc9653f5aea4013da15fb8de0a4452400eaa7739 Mon Sep 17 00:00:00 2001 From: RedGuy12 <61329810+RedGuy12@users.noreply.github.com> Date: Thu, 15 Sep 2022 13:15:01 -0500 Subject: [PATCH 153/155] docs: fix regexps incorrectly being called global (#8624) --- packages/discord.js/src/structures/GuildTemplate.js | 2 +- packages/discord.js/src/structures/Invite.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/discord.js/src/structures/GuildTemplate.js b/packages/discord.js/src/structures/GuildTemplate.js index eba00b75b2b5..7f4cad43da58 100644 --- a/packages/discord.js/src/structures/GuildTemplate.js +++ b/packages/discord.js/src/structures/GuildTemplate.js @@ -12,7 +12,7 @@ const Events = require('../util/Events'); */ class GuildTemplate extends Base { /** - * A regular expression that globally matches guild template links. + * A regular expression that matches guild template links. * The `code` group property is present on the `exec()` result of this expression. * @type {RegExp} * @memberof GuildTemplate diff --git a/packages/discord.js/src/structures/Invite.js b/packages/discord.js/src/structures/Invite.js index 68699aba7207..92e4b5d7e236 100644 --- a/packages/discord.js/src/structures/Invite.js +++ b/packages/discord.js/src/structures/Invite.js @@ -13,7 +13,7 @@ const { Error, ErrorCodes } = require('../errors'); */ class Invite extends Base { /** - * A regular expression that globally matches Discord invite links. + * A regular expression that matches Discord invite links. * The `code` group property is present on the `exec()` result of this expression. * @type {RegExp} * @memberof Invite From 053da5bc91d5cfa8d842b13b0b05083d2f7f086d Mon Sep 17 00:00:00 2001 From: Almeida Date: Thu, 15 Sep 2022 19:18:48 +0100 Subject: [PATCH 154/155] types(interactions): pass `Cached` type to return type of methods (#8619) --- packages/discord.js/typings/index.d.ts | 24 ++++--- packages/discord.js/typings/index.test-d.ts | 74 +++++++++++++++++++-- 2 files changed, 85 insertions(+), 13 deletions(-) diff --git a/packages/discord.js/typings/index.d.ts b/packages/discord.js/typings/index.d.ts index 6153c98734df..851211d2b980 100644 --- a/packages/discord.js/typings/index.d.ts +++ b/packages/discord.js/typings/index.d.ts @@ -435,9 +435,11 @@ export abstract class CommandInteraction e ): Promise>>; public deferReply(options?: InteractionDeferReplyOptions): Promise>>; public deleteReply(): Promise; - public editReply(options: string | MessagePayload | WebhookEditMessageOptions): Promise; - public fetchReply(): Promise; - public followUp(options: string | MessagePayload | InteractionReplyOptions): Promise; + public editReply( + options: string | MessagePayload | WebhookEditMessageOptions, + ): Promise>>; + public fetchReply(): Promise>>; + public followUp(options: string | MessagePayload | InteractionReplyOptions): Promise>>; public reply(options: InteractionReplyOptions & { fetchReply: true }): Promise>>; public reply( options: string | MessagePayload | InteractionReplyOptions, @@ -1806,14 +1808,16 @@ export class MessageComponentInteraction e ): Promise>>; public deferUpdate(options?: InteractionDeferUpdateOptions): Promise>>; public deleteReply(): Promise; - public editReply(options: string | MessagePayload | WebhookEditMessageOptions): Promise; - public fetchReply(): Promise; - public followUp(options: string | MessagePayload | InteractionReplyOptions): Promise; + public editReply( + options: string | MessagePayload | WebhookEditMessageOptions, + ): Promise>>; + public fetchReply(): Promise>>; + public followUp(options: string | MessagePayload | InteractionReplyOptions): Promise>>; public reply(options: InteractionReplyOptions & { fetchReply: true }): Promise>>; public reply( options: string | MessagePayload | InteractionReplyOptions, ): Promise>>; - public update(options: InteractionUpdateOptions & { fetchReply: true }): Promise; + public update(options: InteractionUpdateOptions & { fetchReply: true }): Promise>>; public update( options: string | MessagePayload | InteractionUpdateOptions, ): Promise>>; @@ -1989,7 +1993,7 @@ export class ModalSubmitInteraction extend public message: Message> | null; public replied: boolean; public readonly webhook: InteractionWebhook; - public reply(options: InteractionReplyOptions & { fetchReply: true }): Promise; + public reply(options: InteractionReplyOptions & { fetchReply: true }): Promise>>; public reply( options: string | MessagePayload | InteractionReplyOptions, ): Promise>>; @@ -2003,7 +2007,9 @@ export class ModalSubmitInteraction extend public deferReply(options?: InteractionDeferReplyOptions): Promise>>; public fetchReply(): Promise>>; public followUp(options: string | MessagePayload | InteractionReplyOptions): Promise>>; - public deferUpdate(options: InteractionDeferUpdateOptions & { fetchReply: true }): Promise; + public deferUpdate( + options: InteractionDeferUpdateOptions & { fetchReply: true }, + ): Promise>>; public deferUpdate(options?: InteractionDeferUpdateOptions): Promise>>; public inGuild(): this is ModalSubmitInteraction<'raw' | 'cached'>; public inCachedGuild(): this is ModalSubmitInteraction<'cached'>; diff --git a/packages/discord.js/typings/index.test-d.ts b/packages/discord.js/typings/index.test-d.ts index 2b6a4a41e575..3ffaf2e5f9bb 100644 --- a/packages/discord.js/typings/index.test-d.ts +++ b/packages/discord.js/typings/index.test-d.ts @@ -136,6 +136,7 @@ import { InteractionWebhook, GuildAuditLogsActionType, GuildAuditLogsTargetType, + ModalSubmitInteraction, } from '.'; import { expectAssignable, expectNotAssignable, expectNotType, expectType } from 'tsd'; import type { ContextMenuCommandBuilder, SlashCommandBuilder } from '@discordjs/builders'; @@ -1488,19 +1489,37 @@ client.on('interactionCreate', async interaction => { expectType(interaction.component); expectType>(interaction.message); expectType(interaction.guild); - expectAssignable>(interaction.reply({ fetchReply: true })); + expectType>>(interaction.reply({ content: 'a', fetchReply: true })); + expectType>>(interaction.deferReply({ fetchReply: true })); + expectType>>(interaction.editReply({ content: 'a' })); + expectType>>(interaction.fetchReply()); + expectType>>(interaction.update({ content: 'a', fetchReply: true })); + expectType>>(interaction.deferUpdate({ fetchReply: true })); + expectType>>(interaction.followUp({ content: 'a' })); } else if (interaction.inRawGuild()) { expectAssignable(interaction); expectType(interaction.component); expectType>(interaction.message); expectType(interaction.guild); - expectType>>(interaction.reply({ fetchReply: true })); + expectType>>(interaction.reply({ content: 'a', fetchReply: true })); + expectType>>(interaction.deferReply({ fetchReply: true })); + expectType>>(interaction.editReply({ content: 'a' })); + expectType>>(interaction.fetchReply()); + expectType>>(interaction.update({ content: 'a', fetchReply: true })); + expectType>>(interaction.deferUpdate({ fetchReply: true })); + expectType>>(interaction.followUp({ content: 'a' })); } else if (interaction.inGuild()) { expectAssignable(interaction); expectType(interaction.component); expectType(interaction.message); expectType(interaction.guild); - expectType>(interaction.reply({ fetchReply: true })); + expectType>(interaction.reply({ content: 'a', fetchReply: true })); + expectType>(interaction.deferReply({ fetchReply: true })); + expectType>(interaction.editReply({ content: 'a' })); + expectType>(interaction.fetchReply()); + expectType>(interaction.update({ content: 'a', fetchReply: true })); + expectType>(interaction.deferUpdate({ fetchReply: true })); + expectType>(interaction.followUp({ content: 'a' })); } } @@ -1531,12 +1550,27 @@ client.on('interactionCreate', async interaction => { expectAssignable(interaction); expectAssignable(interaction.guild); expectAssignable>(interaction); + expectType>>(interaction.reply({ content: 'a', fetchReply: true })); + expectType>>(interaction.deferReply({ fetchReply: true })); + expectType>>(interaction.editReply({ content: 'a' })); + expectType>>(interaction.fetchReply()); + expectType>>(interaction.followUp({ content: 'a' })); } else if (interaction.inRawGuild()) { expectAssignable(interaction); expectType(interaction.guild); + expectType>>(interaction.reply({ content: 'a', fetchReply: true })); + expectType>>(interaction.deferReply({ fetchReply: true })); + expectType>>(interaction.editReply({ content: 'a' })); + expectType>>(interaction.fetchReply()); + expectType>>(interaction.followUp({ content: 'a' })); } else if (interaction.inGuild()) { expectAssignable(interaction); expectType(interaction.guild); + expectType>(interaction.reply({ content: 'a', fetchReply: true })); + expectType>(interaction.deferReply({ fetchReply: true })); + expectType>(interaction.editReply({ content: 'a' })); + expectType>(interaction.fetchReply()); + expectType>(interaction.followUp({ content: 'a' })); } } @@ -1563,7 +1597,7 @@ client.on('interactionCreate', async interaction => { expectType(interaction.component); expectType>(interaction.message); expectType(interaction.guild); - expectAssignable>(interaction.reply({ fetchReply: true })); + expectType>>(interaction.reply({ fetchReply: true })); } else if (interaction.inRawGuild()) { expectAssignable(interaction); expectType(interaction.component); @@ -1678,6 +1712,38 @@ client.on('interactionCreate', async interaction => { expectAssignable(interaction); expectAssignable(interaction); } + + if (interaction.type === InteractionType.ModalSubmit && interaction.isRepliable()) { + expectType(interaction); + if (interaction.inCachedGuild()) { + expectAssignable(interaction); + expectType(interaction.guild); + expectType>>(interaction.reply({ content: 'a', fetchReply: true })); + expectType>>(interaction.deferReply({ fetchReply: true })); + expectType>>(interaction.editReply({ content: 'a' })); + expectType>>(interaction.fetchReply()); + expectType>>(interaction.deferUpdate({ fetchReply: true })); + expectType>>(interaction.followUp({ content: 'a' })); + } else if (interaction.inRawGuild()) { + expectAssignable(interaction); + expectType(interaction.guild); + expectType>>(interaction.reply({ content: 'a', fetchReply: true })); + expectType>>(interaction.deferReply({ fetchReply: true })); + expectType>>(interaction.editReply({ content: 'a' })); + expectType>>(interaction.fetchReply()); + expectType>>(interaction.deferUpdate({ fetchReply: true })); + expectType>>(interaction.followUp({ content: 'a' })); + } else if (interaction.inGuild()) { + expectAssignable(interaction); + expectType(interaction.guild); + expectType>(interaction.reply({ content: 'a', fetchReply: true })); + expectType>(interaction.deferReply({ fetchReply: true })); + expectType>(interaction.editReply({ content: 'a' })); + expectType>(interaction.fetchReply()); + expectType>(interaction.deferUpdate({ fetchReply: true })); + expectType>(interaction.followUp({ content: 'a' })); + } + } }); declare const shard: Shard; From 1c5b78fd2130f09c951459cf4c2d637f46c3c2c9 Mon Sep 17 00:00:00 2001 From: Almeida Date: Thu, 15 Sep 2022 19:19:13 +0100 Subject: [PATCH 155/155] fix(SlashCommandBuilder): missing methods in subcommand builder (#8583) --- .../interactions/SlashCommands/SlashCommands.test.ts | 12 ++++++++++++ .../slashCommands/SlashCommandBuilder.ts | 3 +-- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/packages/builders/__tests__/interactions/SlashCommands/SlashCommands.test.ts b/packages/builders/__tests__/interactions/SlashCommands/SlashCommands.test.ts index 863dc61b1015..39f3a4546f75 100644 --- a/packages/builders/__tests__/interactions/SlashCommands/SlashCommands.test.ts +++ b/packages/builders/__tests__/interactions/SlashCommands/SlashCommands.test.ts @@ -371,6 +371,18 @@ describe('Slash Commands', () => { ).not.toThrowError(); }); + test('GIVEN builder with subcommand THEN has regular slash command fields', () => { + expect(() => + getBuilder() + .setName('name') + .setDescription('description') + .addSubcommand((option) => option.setName('ye').setDescription('ye')) + .addSubcommand((option) => option.setName('no').setDescription('no')) + .setDMPermission(false) + .setDefaultMemberPermissions(1n), + ).not.toThrowError(); + }); + test('GIVEN builder with already built subcommand group THEN does not throw error', () => { expect(() => getNamedBuilder().addSubcommandGroup(getSubcommandGroup())).not.toThrowError(); }); diff --git a/packages/builders/src/interactions/slashCommands/SlashCommandBuilder.ts b/packages/builders/src/interactions/slashCommands/SlashCommandBuilder.ts index c7b5a76c3992..8bdb6c49e1bf 100644 --- a/packages/builders/src/interactions/slashCommands/SlashCommandBuilder.ts +++ b/packages/builders/src/interactions/slashCommands/SlashCommandBuilder.ts @@ -190,8 +190,7 @@ export class SlashCommandBuilder { export interface SlashCommandBuilder extends SharedNameAndDescription, SharedSlashCommandOptions {} export interface SlashCommandSubcommandsOnlyBuilder - extends SharedNameAndDescription, - Pick {} + extends Omit> {} export interface SlashCommandOptionsOnlyBuilder extends SharedNameAndDescription,