untested rewrite

This commit is contained in:
itsMapleLeaf
2022-08-04 10:29:06 -05:00
parent 5852b4a616
commit 14d6f87dda
24 changed files with 640 additions and 508 deletions

View File

@@ -1,8 +1,7 @@
import type { ReactNode } from "react" import type { ReactNode } from "react"
import React from "react" import React from "react"
import { ReacordElement } from "../internal/element.js" import { Node } from "../node.js"
import type { MessageOptions } from "../../internal/message" import { ReacordElement } from "../reacord-element.js"
import { Node } from "../internal/node.js"
/** /**
* Props for an action row * Props for an action row
@@ -31,17 +30,10 @@ export type ActionRowProps = {
*/ */
export function ActionRow(props: ActionRowProps) { export function ActionRow(props: ActionRowProps) {
return ( return (
<ReacordElement props={props} createNode={() => new ActionRowNode(props)}> <ReacordElement props={{}} createNode={() => new ActionRowNode({})}>
{props.children} {props.children}
</ReacordElement> </ReacordElement>
) )
} }
class ActionRowNode extends Node<{}> { export class ActionRowNode extends Node<{}> {}
override modifyMessageOptions(options: MessageOptions): void {
options.actionRows.push([])
for (const child of this.children) {
child.modifyMessageOptions(options)
}
}
}

View File

@@ -2,8 +2,8 @@ import type { APIMessageComponentButtonInteraction } from "discord.js"
import { randomUUID } from "node:crypto" import { randomUUID } from "node:crypto"
import React from "react" import React from "react"
import type { ComponentEvent } from "../core/component-event.js" import type { ComponentEvent } from "../core/component-event.js"
import { ReacordElement } from "../internal/element.js"
import { Node } from "../node.js" import { Node } from "../node.js"
import { ReacordElement } from "../reacord-element.js"
import type { ButtonSharedProps } from "./button-shared-props" import type { ButtonSharedProps } from "./button-shared-props"
/** /**

View File

@@ -1,9 +1,7 @@
import type { ReactNode } from "react" import type { ReactNode } from "react"
import React from "react" import React from "react"
import { ReacordElement } from "../internal/element.js" import { Node } from "../node.js"
import { Node } from "../internal/node.js" import { ReacordElement } from "../reacord-element.js"
import { EmbedChildNode } from "./embed-child.js"
import type { EmbedOptions } from "./embed-options"
/** /**
* @category Embed * @category Embed
@@ -21,21 +19,9 @@ export type EmbedAuthorProps = {
export function EmbedAuthor(props: EmbedAuthorProps) { export function EmbedAuthor(props: EmbedAuthorProps) {
return ( return (
<ReacordElement props={props} createNode={() => new EmbedAuthorNode(props)}> <ReacordElement props={props} createNode={() => new EmbedAuthorNode(props)}>
<ReacordElement props={{}} createNode={() => new AuthorTextNode({})}>
{props.name ?? props.children} {props.name ?? props.children}
</ReacordElement> </ReacordElement>
</ReacordElement>
) )
} }
class EmbedAuthorNode extends EmbedChildNode<EmbedAuthorProps> { export class EmbedAuthorNode extends Node<EmbedAuthorProps> {}
override modifyEmbedOptions(options: EmbedOptions): void {
options.author = {
name: this.children.findType(AuthorTextNode)?.text ?? "",
url: this.props.url,
icon_url: this.props.iconUrl,
}
}
}
class AuthorTextNode extends Node<{}> {}

View File

@@ -1,9 +1,7 @@
import type { ReactNode } from "react" import type { ReactNode } from "react"
import React from "react" import React from "react"
import { ReacordElement } from "../internal/element.js" import { Node } from "../node.js"
import { Node } from "../internal/node.js" import { ReacordElement } from "../reacord-element.js"
import { EmbedChildNode } from "./embed-child.js"
import type { EmbedOptions } from "./embed-options"
/** /**
* @category Embed * @category Embed
@@ -21,26 +19,26 @@ export type EmbedFieldProps = {
export function EmbedField(props: EmbedFieldProps) { export function EmbedField(props: EmbedFieldProps) {
return ( return (
<ReacordElement props={props} createNode={() => new EmbedFieldNode(props)}> <ReacordElement props={props} createNode={() => new EmbedFieldNode(props)}>
<ReacordElement props={{}} createNode={() => new FieldNameNode({})}> <ReacordElement props={{}} createNode={() => new EmbedFieldNameNode({})}>
{props.name} {props.name}
</ReacordElement> </ReacordElement>
<ReacordElement props={{}} createNode={() => new FieldValueNode({})}> <ReacordElement props={{}} createNode={() => new EmbedFieldValueNode({})}>
{props.value || props.children} {props.value ?? props.children}
</ReacordElement> </ReacordElement>
</ReacordElement> </ReacordElement>
) )
} }
class EmbedFieldNode extends EmbedChildNode<EmbedFieldProps> { export class EmbedFieldNode extends Node<EmbedFieldProps> {
override modifyEmbedOptions(options: EmbedOptions): void { // override modifyEmbedOptions(options: EmbedOptions): void {
options.fields ??= [] // options.fields ??= []
options.fields.push({ // options.fields.push({
name: this.children.findType(FieldNameNode)?.text ?? "", // name: this.children.findType(FieldNameNode)?.text ?? "",
value: this.children.findType(FieldValueNode)?.text ?? "", // value: this.children.findType(FieldValueNode)?.text ?? "",
inline: this.props.inline, // inline: this.props.inline,
}) // })
} // }
} }
class FieldNameNode extends Node<{}> {} export class EmbedFieldNameNode extends Node<{}> {}
class FieldValueNode extends Node<{}> {} export class EmbedFieldValueNode extends Node<{}> {}

View File

@@ -1,9 +1,7 @@
import type { ReactNode } from "react" import type { ReactNode } from "react"
import React from "react" import React from "react"
import { ReacordElement } from "../internal/element.js" import { Node } from "../node.js"
import { Node } from "../internal/node.js" import { ReacordElement } from "../reacord-element.js"
import { EmbedChildNode } from "./embed-child.js"
import type { EmbedOptions } from "./embed-options"
/** /**
* @category Embed * @category Embed
@@ -21,25 +19,21 @@ export type EmbedFooterProps = {
export function EmbedFooter({ text, children, ...props }: EmbedFooterProps) { export function EmbedFooter({ text, children, ...props }: EmbedFooterProps) {
return ( return (
<ReacordElement props={props} createNode={() => new EmbedFooterNode(props)}> <ReacordElement props={props} createNode={() => new EmbedFooterNode(props)}>
<ReacordElement props={{}} createNode={() => new FooterTextNode({})}>
{text ?? children} {text ?? children}
</ReacordElement> </ReacordElement>
</ReacordElement>
) )
} }
class EmbedFooterNode extends EmbedChildNode< export class EmbedFooterNode extends Node<
Omit<EmbedFooterProps, "text" | "children"> Omit<EmbedFooterProps, "text" | "children">
> { > {
override modifyEmbedOptions(options: EmbedOptions): void { // override modifyEmbedOptions(options: EmbedOptions): void {
options.footer = { // options.footer = {
text: this.children.findType(FooterTextNode)?.text ?? "", // text: this.children.findType(FooterTextNode)?.text ?? "",
icon_url: this.props.iconUrl, // icon_url: this.props.iconUrl,
// }
// options.timestamp = this.props.timestamp
// ? new Date(this.props.timestamp).toISOString()
// : undefined
// }
} }
options.timestamp = this.props.timestamp
? new Date(this.props.timestamp).toISOString()
: undefined
}
}
class FooterTextNode extends Node<{}> {}

View File

@@ -1,7 +1,6 @@
import React from "react" import React from "react"
import { ReacordElement } from "../internal/element.js" import { Node } from "../node"
import { EmbedChildNode } from "./embed-child.js" import { ReacordElement } from "../reacord-element.js"
import type { EmbedOptions } from "./embed-options"
/** /**
* @category Embed * @category Embed
@@ -22,8 +21,4 @@ export function EmbedImage(props: EmbedImageProps) {
) )
} }
class EmbedImageNode extends EmbedChildNode<EmbedImageProps> { export class EmbedImageNode extends Node<EmbedImageProps> {}
override modifyEmbedOptions(options: EmbedOptions): void {
options.image = { url: this.props.url }
}
}

View File

@@ -1,7 +1,6 @@
import React from "react" import React from "react"
import { ReacordElement } from "../internal/element.js" import { Node } from "../node"
import { EmbedChildNode } from "./embed-child.js" import { ReacordElement } from "../reacord-element.js"
import type { EmbedOptions } from "./embed-options"
/** /**
* @category Embed * @category Embed
@@ -22,8 +21,4 @@ export function EmbedThumbnail(props: EmbedThumbnailProps) {
) )
} }
class EmbedThumbnailNode extends EmbedChildNode<EmbedThumbnailProps> { export class EmbedThumbnailNode extends Node<EmbedThumbnailProps> {}
override modifyEmbedOptions(options: EmbedOptions): void {
options.thumbnail = { url: this.props.url }
}
}

View File

@@ -1,9 +1,8 @@
import type { ReactNode } from "react" import type { ReactNode } from "react"
import React from "react" import React from "react"
import { ReacordElement } from "../internal/element.js" import type { Except } from "type-fest"
import { Node } from "../internal/node.js" import { Node } from "../node"
import { EmbedChildNode } from "./embed-child.js" import { ReacordElement } from "../reacord-element.js"
import type { EmbedOptions } from "./embed-options"
/** /**
* @category Embed * @category Embed
@@ -19,18 +18,9 @@ export type EmbedTitleProps = {
export function EmbedTitle({ children, ...props }: EmbedTitleProps) { export function EmbedTitle({ children, ...props }: EmbedTitleProps) {
return ( return (
<ReacordElement props={props} createNode={() => new EmbedTitleNode(props)}> <ReacordElement props={props} createNode={() => new EmbedTitleNode(props)}>
<ReacordElement props={{}} createNode={() => new TitleTextNode({})}>
{children} {children}
</ReacordElement> </ReacordElement>
</ReacordElement>
) )
} }
class EmbedTitleNode extends EmbedChildNode<Omit<EmbedTitleProps, "children">> { export class EmbedTitleNode extends Node<Except<EmbedTitleProps, "children">> {}
override modifyEmbedOptions(options: EmbedOptions): void {
options.title = this.children.findType(TitleTextNode)?.text ?? ""
options.url = this.props.url
}
}
class TitleTextNode extends Node<{}> {}

View File

@@ -1,12 +1,6 @@
import { snakeCaseDeep } from "@reacord/helpers/convert-object-property-case.js"
import { omit } from "@reacord/helpers/omit.js"
import React from "react" import React from "react"
import type { MessageOptions } from "../../internal/message"
import { ReacordElement } from "../internal/element.js"
import { Node } from "../node.js" import { Node } from "../node.js"
import { TextNode } from "../text-node" import { ReacordElement } from "../reacord-element.js"
import { EmbedChildNode } from "./embed-child.js"
import type { EmbedOptions } from "./embed-options"
/** /**
* @category Embed * @category Embed
@@ -39,24 +33,22 @@ export function Embed(props: EmbedProps) {
) )
} }
class EmbedNode extends Node<EmbedProps> { export class EmbedNode extends Node<EmbedProps> {
override modifyMessageOptions(options: MessageOptions): void { // override modifyMessageOptions(options: MessageOptions): void {
const embed: EmbedOptions = { // const embed: EmbedOptions = {
...snakeCaseDeep(omit(this.props, ["children", "timestamp"])), // ...snakeCaseDeep(omit(this.props, ["children", "timestamp"])),
timestamp: this.props.timestamp // timestamp: this.props.timestamp
? new Date(this.props.timestamp).toISOString() // ? new Date(this.props.timestamp).toISOString()
: undefined, // : undefined,
} // }
// for (const child of this.children) {
for (const child of this.children) { // if (child instanceof EmbedChildNode) {
if (child instanceof EmbedChildNode) { // child.modifyEmbedOptions(embed)
child.modifyEmbedOptions(embed) // }
} // if (child instanceof TextNode) {
if (child instanceof TextNode) { // embed.description = (embed.description || "") + child.props
embed.description = (embed.description || "") + child.props // }
} // }
} // options.embeds.push(embed)
// }
options.embeds.push(embed)
}
} }

View File

@@ -1,8 +1,7 @@
import React from "react" import React from "react"
import { ReacordElement } from "../internal/element.js" import type { Except } from "type-fest"
import type { MessageOptions } from "../../internal/message" import { Node } from "../node.js"
import { getNextActionRow } from "../internal/message" import { ReacordElement } from "../reacord-element.js"
import { Node } from "../internal/node.js"
import type { ButtonSharedProps } from "./button-shared-props" import type { ButtonSharedProps } from "./button-shared-props"
/** /**
@@ -21,23 +20,9 @@ export type LinkProps = ButtonSharedProps & {
export function Link({ label, children, ...props }: LinkProps) { export function Link({ label, children, ...props }: LinkProps) {
return ( return (
<ReacordElement props={props} createNode={() => new LinkNode(props)}> <ReacordElement props={props} createNode={() => new LinkNode(props)}>
<ReacordElement props={{}} createNode={() => new LinkTextNode({})}>
{label || children} {label || children}
</ReacordElement> </ReacordElement>
</ReacordElement>
) )
} }
class LinkNode extends Node<Omit<LinkProps, "label" | "children">> { export class LinkNode extends Node<Except<LinkProps, "label" | "children">> {}
override modifyMessageOptions(options: MessageOptions): void {
getNextActionRow(options).push({
type: "link",
disabled: this.props.disabled,
emoji: this.props.emoji,
label: this.children.findType(LinkTextNode)?.text,
url: this.props.url,
})
}
}
class LinkTextNode extends Node<{}> {}

View File

@@ -1,19 +0,0 @@
import type { MessageSelectOptionOptions } from "../../internal/message"
import { Node } from "../node"
import type { OptionProps } from "./option"
export class OptionNode extends Node<
Omit<OptionProps, "children" | "label" | "description">
> {
get options(): MessageSelectOptionOptions {
return {
label: this.children.findType(OptionLabelNode)?.text ?? this.props.value,
value: this.props.value,
description: this.children.findType(OptionDescriptionNode)?.text,
emoji: this.props.emoji,
}
}
}
export class OptionLabelNode extends Node<{}> {}
export class OptionDescriptionNode extends Node<{}> {}

View File

@@ -1,11 +1,7 @@
import type { ReactNode } from "react" import type { ReactNode } from "react"
import React from "react" import React from "react"
import { ReacordElement } from "../internal/element" import { Node } from "../node"
import { import { ReacordElement } from "../reacord-element"
OptionDescriptionNode,
OptionLabelNode,
OptionNode,
} from "./option-node"
/** /**
* @category Select * @category Select
@@ -60,3 +56,9 @@ export function Option({
</ReacordElement> </ReacordElement>
) )
} }
export class OptionNode extends Node<
Omit<OptionProps, "children" | "label" | "description">
> {}
export class OptionLabelNode extends Node<{}> {}
export class OptionDescriptionNode extends Node<{}> {}

View File

@@ -1,18 +1,10 @@
import { isInstanceOf } from "@reacord/helpers/is-instance-of.js"
import type { APIMessageComponentSelectMenuInteraction } from "discord.js" import type { APIMessageComponentSelectMenuInteraction } from "discord.js"
import { randomUUID } from "node:crypto" import { randomUUID } from "node:crypto"
import type { ReactNode } from "react" import type { ReactNode } from "react"
import React from "react" import React from "react"
import { ReacordElement } from "../internal/element.js" import type { ComponentEvent } from "../core/component-event.js"
import type { ComponentInteraction } from "../../internal/interaction" import { Node } from "../node.js"
import type { import { ReacordElement } from "../reacord-element.js"
ActionRow,
ActionRowItem,
MessageOptions,
} from "../../internal/message"
import { Node } from "../internal/node.js"
import type { ComponentEvent } from "../component-event"
import { OptionNode } from "./option-node"
/** /**
* @category Select * @category Select
@@ -100,64 +92,4 @@ export function Select(props: SelectProps) {
export class SelectNode extends Node<SelectProps> { export class SelectNode extends Node<SelectProps> {
readonly customId = randomUUID() readonly customId = randomUUID()
override modifyMessageOptions(message: MessageOptions): void {
const actionRow: ActionRow = []
message.actionRows.push(actionRow)
const options = [...this.children]
.filter(isInstanceOf(OptionNode))
.map((node) => node.options)
const {
multiple,
value,
values,
minValues = 0,
maxValues = 25,
children,
onChange,
onChangeValue,
onChangeMultiple,
...props
} = this.props
const item: ActionRowItem = {
...props,
type: "select",
customId: this.customId,
options,
values: [],
}
if (multiple) {
item.minValues = minValues
item.maxValues = maxValues
if (values) item.values = values
}
if (!multiple && value != undefined) {
item.values = [value]
}
actionRow.push(item)
}
override handleComponentInteraction(
interaction: ComponentInteraction,
): boolean {
const isSelectInteraction =
interaction.type === "select" &&
interaction.customId === this.customId &&
!this.props.disabled
if (!isSelectInteraction) return false
this.props.onChange?.(interaction.event)
this.props.onChangeMultiple?.(interaction.event.values, interaction.event)
if (interaction.event.values[0]) {
this.props.onChangeValue?.(interaction.event.values[0], interaction.event)
}
return true
}
} }

View File

@@ -0,0 +1,244 @@
import type {
APIActionRowComponent,
APIButtonComponent,
APIEmbed,
APISelectMenuComponent,
APISelectMenuOption,
} from "discord-api-types/v10"
import { ButtonStyle, ComponentType } from "discord-api-types/v10"
import { ActionRowNode } from "./components/action-row"
import type { ButtonProps } from "./components/button"
import { ButtonNode } from "./components/button"
import { EmbedNode } from "./components/embed"
import { EmbedAuthorNode } from "./components/embed-author"
import {
EmbedFieldNameNode,
EmbedFieldNode,
EmbedFieldValueNode,
} from "./components/embed-field"
import { EmbedFooterNode } from "./components/embed-footer"
import { EmbedImageNode } from "./components/embed-image"
import { EmbedThumbnailNode } from "./components/embed-thumbnail"
import { EmbedTitleNode } from "./components/embed-title"
import { LinkNode } from "./components/link"
import {
OptionDescriptionNode,
OptionLabelNode,
OptionNode,
} from "./components/option"
import { SelectNode } from "./components/select"
import type { Node } from "./node"
export type MessageUpdatePayload = {
content: string
embeds: APIEmbed[]
components: Array<
APIActionRowComponent<APIButtonComponent | APISelectMenuComponent>
>
}
export function makeMessageUpdatePayload(root: Node): MessageUpdatePayload {
return {
content: root.extractText(),
embeds: makeEmbeds(root),
components: makeActionRows(root),
}
}
function makeEmbeds(root: Node) {
const embeds: APIEmbed[] = []
for (const node of root.children) {
if (node instanceof EmbedNode) {
const { props, children } = node
const embed: APIEmbed = {
author: props.author && {
name: props.author.name,
icon_url: props.author.iconUrl,
url: props.author.url,
},
color: props.color,
description: props.description,
fields: props.fields?.map(({ name, value, inline }) => ({
name,
value,
inline,
})),
footer: props.footer && {
text: props.footer.text,
icon_url: props.footer.iconUrl,
},
image: props.image,
thumbnail: props.thumbnail,
title: props.title,
url: props.url,
video: props.video,
}
if (props.timestamp !== undefined) {
embed.timestamp = normalizeDatePropToISOString(props.timestamp)
}
applyEmbedChildren(embed, children)
embeds.push(embed)
}
}
return embeds
}
function applyEmbedChildren(embed: APIEmbed, children: Node[]) {
for (const child of children) {
if (child instanceof EmbedAuthorNode) {
embed.author = {
name: child.extractText(),
icon_url: child.props.iconUrl,
url: child.props.url,
}
}
if (child instanceof EmbedFieldNode) {
embed.fields ??= []
embed.fields.push({
name: child.findInstanceOf(EmbedFieldNameNode)?.extractText() ?? "",
value: child.findInstanceOf(EmbedFieldValueNode)?.extractText() ?? "",
inline: child.props.inline,
})
}
if (child instanceof EmbedFooterNode) {
embed.footer = {
text: child.extractText(),
icon_url: child.props.iconUrl,
}
if (child.props.timestamp != undefined) {
embed.timestamp = normalizeDatePropToISOString(child.props.timestamp)
}
}
if (child instanceof EmbedImageNode) {
embed.image = { url: child.props.url }
}
if (child instanceof EmbedThumbnailNode) {
embed.thumbnail = { url: child.props.url }
}
if (child instanceof EmbedTitleNode) {
embed.title = child.extractText()
embed.url = child.props.url
}
if (child instanceof EmbedNode) {
applyEmbedChildren(embed, child.children)
}
}
}
function normalizeDatePropToISOString(value: string | number | Date) {
return value instanceof Date
? value.toISOString()
: new Date(value).toISOString()
}
function makeActionRows(root: Node) {
const actionRows: Array<
APIActionRowComponent<APIButtonComponent | APISelectMenuComponent>
> = []
for (const node of root.children) {
let currentRow = actionRows[actionRows.length - 1]
if (
!currentRow ||
currentRow.components.length >= 5 ||
currentRow.components[0]?.type === ComponentType.SelectMenu
) {
currentRow = {
type: ComponentType.ActionRow,
components: [],
}
actionRows.push(currentRow)
}
if (node instanceof ButtonNode) {
currentRow.components.push({
type: ComponentType.Button,
custom_id: node.customId,
label: node.extractText(Number.POSITIVE_INFINITY),
emoji: { name: node.props.emoji },
style: translateButtonStyle(node.props.style ?? "secondary"),
disabled: node.props.disabled,
})
}
if (node instanceof LinkNode) {
currentRow.components.push({
type: ComponentType.Button,
label: node.extractText(Number.POSITIVE_INFINITY),
url: node.props.url,
style: ButtonStyle.Link,
disabled: node.props.disabled,
})
}
if (node instanceof SelectNode) {
const actionRow: APIActionRowComponent<APISelectMenuComponent> = {
type: ComponentType.ActionRow,
components: [],
}
actionRows.push(actionRow)
let selectedValues: string[] = []
if (node.props.multiple && node.props.values) {
selectedValues = node.props.values ?? []
}
if (!node.props.multiple && node.props.value != undefined) {
selectedValues = [node.props.value]
}
const options = [...node.children]
.flatMap((child) => (child instanceof OptionNode ? child : []))
.map<APISelectMenuOption>((child) => ({
label: child.findInstanceOf(OptionLabelNode)?.extractText() ?? "",
description: child
.findInstanceOf(OptionDescriptionNode)
?.extractText(),
value: child.props.value,
default: selectedValues.includes(child.props.value),
emoji: { name: child.props.emoji },
}))
const select: APISelectMenuComponent = {
type: ComponentType.SelectMenu,
custom_id: node.customId,
options,
disabled: node.props.disabled,
}
if (node.props.multiple) {
select.min_values = node.props.minValues
select.max_values = node.props.maxValues
}
actionRow.components.push(select)
}
if (node instanceof ActionRowNode) {
actionRows.push(...makeActionRows(node))
}
}
return actionRows
}
function translateButtonStyle(style: NonNullable<ButtonProps["style"]>) {
const styleMap = {
primary: ButtonStyle.Primary,
secondary: ButtonStyle.Secondary,
danger: ButtonStyle.Danger,
success: ButtonStyle.Success,
} as const
return styleMap[style]
}

View File

@@ -38,4 +38,20 @@ export class Node<Props = unknown> {
yield* child.walk() yield* child.walk()
} }
} }
findInstanceOf<T extends Node>(
cls: new (...args: any[]) => T,
): T | undefined {
for (const child of this.children) {
if (child instanceof cls) return child
} }
}
extractText(depth = 1): string {
if (this instanceof TextNode) return this.props.text
if (depth <= 0) return ""
return this.children.map((child) => child.extractText(depth - 1)).join("")
}
}
export class TextNode extends Node<{ text: string }> {}

View File

@@ -6,7 +6,7 @@ import {
InteractionType, InteractionType,
} from "discord.js" } from "discord.js"
import * as React from "react" import * as React from "react"
import { InstanceProvider } from "./core/instance-context.js" import { InstanceProvider } from "./core/instance-context"
import type { ReacordInstance } from "./reacord-instance.js" import type { ReacordInstance } from "./reacord-instance.js"
import { ReacordInstancePrivate } from "./reacord-instance.js" import { ReacordInstancePrivate } from "./reacord-instance.js"
import type { Renderer } from "./renderer.js" import type { Renderer } from "./renderer.js"
@@ -79,7 +79,7 @@ export class ReacordClient {
send(channelId: string, initialContent?: React.ReactNode): ReacordInstance { send(channelId: string, initialContent?: React.ReactNode): ReacordInstance {
return this.createInstance( return this.createInstance(
new ChannelMessageRenderer(channelId), new ChannelMessageRenderer(channelId, this.client),
initialContent, initialContent,
) )
} }
@@ -127,7 +127,11 @@ export class ReacordClient {
const publicInstance: ReacordInstance = { const publicInstance: ReacordInstance = {
render: (content: React.ReactNode) => { render: (content: React.ReactNode) => {
instance.render( instance.render(
<InstanceProvider value={publicInstance}>{content}</InstanceProvider>, React.createElement(
InstanceProvider,
{ value: publicInstance },
content,
),
) )
}, },
deactivate: () => { deactivate: () => {

View File

@@ -4,14 +4,14 @@ import type {
APIMessageComponentSelectMenuInteraction, APIMessageComponentSelectMenuInteraction,
} from "discord.js" } from "discord.js"
import { ComponentType } from "discord.js" import { ComponentType } from "discord.js"
import { ButtonNode } from "./components/button.js" import { ButtonNode } from "./components/button"
import type { SelectChangeEvent } from "./components/select.js" import type { SelectChangeEvent } from "./components/select"
import { SelectNode } from "./components/select.js" import { SelectNode } from "./components/select"
import type { ComponentEvent } from "./core/component-event.js" import type { ComponentEvent } from "./core/component-event"
import { reconciler } from "./internal/reconciler.js" import { Node } from "./node"
import { Node } from "./node.js" import type { ReacordClient } from "./reacord-client"
import type { ReacordClient } from "./reacord-client.js" import { reconciler } from "./reconciler"
import type { Renderer } from "./renderer.js" import type { Renderer } from "./renderer"
/** /**
* Represents an interactive message, which can later be replaced or deleted. * Represents an interactive message, which can later be replaced or deleted.

View File

@@ -2,9 +2,8 @@
import { raise } from "@reacord/helpers/raise.js" import { raise } from "@reacord/helpers/raise.js"
import ReactReconciler from "react-reconciler" import ReactReconciler from "react-reconciler"
import { DefaultEventPriority } from "react-reconciler/constants" import { DefaultEventPriority } from "react-reconciler/constants"
import { Node } from "./node.js" import { Node, TextNode } from "./node.js"
import type { ReacordInstancePrivate } from "./reacord-instance.js" import type { ReacordInstancePrivate } from "./reacord-instance.js"
import { TextNode } from "./text-node.js"
export const reconciler = ReactReconciler< export const reconciler = ReactReconciler<
string, // Type, string, // Type,

View File

@@ -1,35 +1,74 @@
import { AsyncQueue } from "@reacord/helpers/async-queue" import { AsyncQueue } from "@reacord/helpers/async-queue"
import type { Node } from "./internal/node.js" import type { Client, Message } from "discord.js"
import { TextChannel } from "discord.js"
import { makeMessageUpdatePayload } from "./make-message-update-payload.js"
import type { Node } from "./node.js"
import type { InteractionInfo } from "./reacord-client.js" import type { InteractionInfo } from "./reacord-client.js"
export type Renderer = { export type Renderer = {
update(tree: Node<unknown>): Promise<void> update(tree: Node): Promise<void>
deactivate(): Promise<void> deactivate(): Promise<void>
destroy(): Promise<void> destroy(): Promise<void>
} }
export class ChannelMessageRenderer implements Renderer { export class ChannelMessageRenderer implements Renderer {
private readonly queue = new AsyncQueue() private readonly queue = new AsyncQueue()
private channel: TextChannel | undefined
private message: Message | undefined
private active = true
constructor(private readonly channelId: string) {} constructor(
private readonly channelId: string,
private readonly client: Client,
) {}
update(tree: Node<unknown>): Promise<void> { private async getChannel(): Promise<TextChannel> {
throw new Error("Method not implemented.") if (this.channel) return this.channel
const channel =
this.client.channels.cache.get(this.channelId) ??
(await this.client.channels.fetch(this.channelId))
if (!(channel instanceof TextChannel)) {
throw new TypeError(`Channel ${this.channelId} is not a text channel`)
} }
deactivate(): Promise<void> { this.channel = channel
throw new Error("Method not implemented.") return channel
} }
destroy(): Promise<void> { update(tree: Node) {
throw new Error("Method not implemented.") const payload = makeMessageUpdatePayload(tree)
return this.queue.add(async () => {
if (!this.active) return
if (this.message) {
await this.message.edit(payload)
} else {
const channel = await this.getChannel()
this.message = await channel.send(payload)
}
})
}
async deactivate() {
return this.queue.add(async () => {
this.active = false
// TODO: disable message components
})
}
async destroy() {
return this.queue.add(async () => {
this.active = false
await this.message?.delete()
})
} }
} }
export class InteractionReplyRenderer implements Renderer { export class InteractionReplyRenderer implements Renderer {
constructor(private readonly interaction: InteractionInfo) {} constructor(private readonly interaction: InteractionInfo) {}
update(tree: Node<unknown>): Promise<void> { update(tree: Node): Promise<void> {
throw new Error("Method not implemented.") throw new Error("Method not implemented.")
} }
@@ -45,7 +84,7 @@ export class InteractionReplyRenderer implements Renderer {
export class EphemeralInteractionReplyRenderer implements Renderer { export class EphemeralInteractionReplyRenderer implements Renderer {
constructor(private readonly interaction: InteractionInfo) {} constructor(private readonly interaction: InteractionInfo) {}
update(tree: Node<unknown>): Promise<void> { update(tree: Node): Promise<void> {
throw new Error("Method not implemented.") throw new Error("Method not implemented.")
} }

View File

@@ -1,3 +0,0 @@
import { Node } from "./node.js"
export class TextNode extends Node<{ text: string }> {}

View File

@@ -38,7 +38,7 @@
"scripts": { "scripts": {
"build": "cp ../../README.md . && cp ../../LICENSE . && tsup library/main.ts --target node16 --format cjs,esm --dts --sourcemap", "build": "cp ../../README.md . && cp ../../LICENSE . && tsup library/main.ts --target node16 --format cjs,esm --dts --sourcemap",
"build-watch": "pnpm build --watch", "build-watch": "pnpm build --watch",
"test-manual": "nodemon --exec tsx --ext ts,tsx ./scripts/discordjs-manual-test.tsx", "test-manual": "tsx watch ./scripts/discordjs-manual-test.tsx",
"typecheck": "tsc --noEmit", "typecheck": "tsc --noEmit",
"release": "bash scripts/release.sh" "release": "bash scripts/release.sh"
}, },
@@ -62,17 +62,17 @@
"devDependencies": { "devDependencies": {
"@reacord/helpers": "workspace:*", "@reacord/helpers": "workspace:*",
"@types/lodash-es": "^4.17.6", "@types/lodash-es": "^4.17.6",
"discord.js": "^14.0.3", "discord.js": "^14.1.2",
"dotenv": "^16.0.1", "dotenv": "^16.0.1",
"lodash-es": "^4.17.21", "lodash-es": "^4.17.21",
"nodemon": "^2.0.19", "nodemon": "^2.0.19",
"prettier": "^2.7.1", "prettier": "^2.7.1",
"pretty-ms": "^8.0.0", "pretty-ms": "^8.0.0",
"react": "^18.2.0", "react": "^18.2.0",
"release-it": "^15.1.3", "release-it": "^15.2.0",
"tsup": "^6.1.3", "tsup": "^6.2.1",
"tsx": "^3.8.0", "tsx": "^3.8.0",
"type-fest": "^2.17.0", "type-fest": "^2.18.0",
"typescript": "^4.7.4" "typescript": "^4.7.4"
}, },
"resolutions": { "resolutions": {

View File

@@ -3,16 +3,17 @@ import "dotenv/config"
import { kebabCase } from "lodash-es" import { kebabCase } from "lodash-es"
import * as React from "react" import * as React from "react"
import { useState } from "react" import { useState } from "react"
import { import { Button } from "../library/components/button"
Button, import { Option } from "../library/components/option"
Option, import { Select } from "../library/components/select"
ReacordDiscordJs, import { useInstance } from "../library/core/instance-context"
Select, import { ReacordClient } from "../library/reacord-client"
useInstance,
} from "../library/main"
const client = new Client({ intents: IntentsBitField.Flags.Guilds }) const client = new Client({ intents: IntentsBitField.Flags.Guilds })
const reacord = new ReacordDiscordJs(client)
const reacord = new ReacordClient({
token: process.env.TEST_BOT_TOKEN!,
})
type TestCase = { type TestCase = {
name: string name: string
@@ -180,6 +181,7 @@ await Promise.all([
tests.map(async (test, index) => { tests.map(async (test, index) => {
const channelName = getTestCaseChannelName(test, index) const channelName = getTestCaseChannelName(test, index)
const channel = await getTestCaseChannel(channelName, index) const channel = await getTestCaseChannel(channelName, index)
console.info("running test:", test.name)
await test.run(channel) await test.run(channel)
}), }),
), ),

441
pnpm-lock.yaml generated
View File

@@ -45,9 +45,9 @@ importers:
'@types/lodash-es': ^4.17.6 '@types/lodash-es': ^4.17.6
'@types/node': '*' '@types/node': '*'
'@types/react': '*' '@types/react': '*'
'@types/react-reconciler': ^0.28.0 '@types/react-reconciler': '*'
discord-api-types: ^0.36.3 discord-api-types: ^0.36.3
discord.js: ^14.0.3 discord.js: ^14.1.2
dotenv: ^16.0.1 dotenv: ^16.0.1
lodash-es: ^4.17.21 lodash-es: ^4.17.21
nodemon: ^2.0.19 nodemon: ^2.0.19
@@ -55,14 +55,14 @@ importers:
pretty-ms: ^8.0.0 pretty-ms: ^8.0.0
react: ^18.2.0 react: ^18.2.0
react-reconciler: ^0.29.0 react-reconciler: ^0.29.0
release-it: ^15.1.3 release-it: ^15.2.0
rxjs: ^7.5.6 rxjs: ^7.5.6
tsup: ^6.1.3 tsup: ^6.2.1
tsx: ^3.8.0 tsx: ^3.8.0
type-fest: ^2.17.0 type-fest: ^2.18.0
typescript: ^4.7.4 typescript: ^4.7.4
dependencies: dependencies:
'@types/node': 18.0.6 '@types/node': 18.6.3
'@types/react': 18.0.15 '@types/react': 18.0.15
'@types/react-reconciler': 0.28.0 '@types/react-reconciler': 0.28.0
discord-api-types: 0.36.3 discord-api-types: 0.36.3
@@ -71,17 +71,17 @@ importers:
devDependencies: devDependencies:
'@reacord/helpers': link:../helpers '@reacord/helpers': link:../helpers
'@types/lodash-es': 4.17.6 '@types/lodash-es': 4.17.6
discord.js: 14.0.3 discord.js: 14.1.2
dotenv: 16.0.1 dotenv: 16.0.1
lodash-es: 4.17.21 lodash-es: 4.17.21
nodemon: 2.0.19 nodemon: 2.0.19
prettier: 2.7.1 prettier: 2.7.1
pretty-ms: 8.0.0 pretty-ms: 8.0.0
react: 18.2.0 react: 18.2.0
release-it: 15.1.3 release-it: 15.2.0
tsup: 6.1.3_typescript@4.7.4 tsup: 6.2.1_typescript@4.7.4
tsx: 3.8.0 tsx: 3.8.0
type-fest: 2.17.0 type-fest: 2.18.0
typescript: 4.7.4 typescript: 4.7.4
packages/website: packages/website:
@@ -1631,8 +1631,8 @@ packages:
- supports-color - supports-color
dev: true dev: true
/@discordjs/builders/1.0.0: /@discordjs/builders/1.1.0:
resolution: {integrity: sha512-8y91ZfpOHubiGJu5tVyGI9tQCEyHZDTeqUWVcJd0dq7B96xIf84S0L4fwmD1k9zTe1eqEFSk0gc7BpY+FKn7Ww==} resolution: {integrity: sha512-EO8TSltiIc9Z1wE854wAFvv5AccqEtvjFmao9PPoxQhRaJ0hEb7FwWRTCA1jGg4ZWI3hcp4m+RET5ufZQz3rOg==}
engines: {node: '>=16.9.0'} engines: {node: '>=16.9.0'}
dependencies: dependencies:
'@sapphire/shapeshift': 3.5.1 '@sapphire/shapeshift': 3.5.1
@@ -1642,20 +1642,20 @@ packages:
tslib: 2.4.0 tslib: 2.4.0
dev: true dev: true
/@discordjs/collection/1.0.0: /@discordjs/collection/1.0.1:
resolution: {integrity: sha512-nAxDQYE5dNAzEGQ7HU20sujDsG5vLowUKCEqZkKUIlrXERZFTt/60zKUj/g4+AVCGeq+pXC5hivMaNtiC+PY5Q==} resolution: {integrity: sha512-5V/wswzR3r2RVYXLxxg4TvrAnBhVCNgHTXhC+OUtLoriJ072rPMHo+Iw1SS1vrCckp8Es40XM411+WkNRPaXFw==}
engines: {node: '>=16.9.0'} engines: {node: '>=16.9.0'}
dev: true dev: true
/@discordjs/rest/1.0.0: /@discordjs/rest/1.0.1:
resolution: {integrity: sha512-uDAvnE0P2a8axMdD4C51EGjvCRQ2HZk2Yxf6vHWZgIqG87D8DGKMPwmquIxrrB07MjV+rwci2ObU+mGhGP+bJg==} resolution: {integrity: sha512-w08CTKVzzYYvKxEjXKOs9AdS7KQ1J502TrPfF8eCZ2lF6AfKuMP/32YgDakiwIyYTDjEQS/v0nKLSFcncHRMtg==}
engines: {node: '>=16.9.0'} engines: {node: '>=16.9.0'}
dependencies: dependencies:
'@discordjs/collection': 1.0.0 '@discordjs/collection': 1.0.1
'@sapphire/async-queue': 1.3.2 '@sapphire/async-queue': 1.3.2
'@sapphire/snowflake': 3.2.2 '@sapphire/snowflake': 3.2.2
discord-api-types: 0.36.3 discord-api-types: 0.36.3
file-type: 17.1.3 file-type: 17.1.4
tslib: 2.4.0 tslib: 2.4.0
undici: 5.8.0 undici: 5.8.0
dev: true dev: true
@@ -1670,7 +1670,7 @@ packages:
/@esbuild-kit/core-utils/2.1.0: /@esbuild-kit/core-utils/2.1.0:
resolution: {integrity: sha512-fZirrc2KjeTumVjE4bpleWOk2gD83b7WuGeQqOceKFQL+heNKKkNB5G5pekOUTLzfSBc0hP7hCSBoD9TuR0hLw==} resolution: {integrity: sha512-fZirrc2KjeTumVjE4bpleWOk2gD83b7WuGeQqOceKFQL+heNKKkNB5G5pekOUTLzfSBc0hP7hCSBoD9TuR0hLw==}
dependencies: dependencies:
esbuild: 0.14.49 esbuild: 0.14.51
source-map-support: 0.5.21 source-map-support: 0.5.21
dev: true dev: true
@@ -1893,7 +1893,7 @@ packages:
resolution: {integrity: sha512-MDNFUBcJIptB9At7HiV7VCvU3NcL4GnfCQaP8C5lrxWrRPMJBnemYtehaKSOlaM7AYxeRyj9etenu8LVpSpVaQ==} resolution: {integrity: sha512-MDNFUBcJIptB9At7HiV7VCvU3NcL4GnfCQaP8C5lrxWrRPMJBnemYtehaKSOlaM7AYxeRyj9etenu8LVpSpVaQ==}
engines: {node: '>= 14'} engines: {node: '>= 14'}
dependencies: dependencies:
'@octokit/types': 6.40.0 '@octokit/types': 6.41.0
dev: true dev: true
/@octokit/core/4.0.4: /@octokit/core/4.0.4:
@@ -1904,7 +1904,7 @@ packages:
'@octokit/graphql': 5.0.0 '@octokit/graphql': 5.0.0
'@octokit/request': 6.2.0 '@octokit/request': 6.2.0
'@octokit/request-error': 3.0.0 '@octokit/request-error': 3.0.0
'@octokit/types': 6.40.0 '@octokit/types': 6.41.0
before-after-hook: 2.2.2 before-after-hook: 2.2.2
universal-user-agent: 6.0.0 universal-user-agent: 6.0.0
transitivePeerDependencies: transitivePeerDependencies:
@@ -1915,7 +1915,7 @@ packages:
resolution: {integrity: sha512-Kz/mIkOTjs9rV50hf/JK9pIDl4aGwAtT8pry6Rpy+hVXkAPhXanNQRxMoq6AeRgDCZR6t/A1zKniY2V1YhrzlQ==} resolution: {integrity: sha512-Kz/mIkOTjs9rV50hf/JK9pIDl4aGwAtT8pry6Rpy+hVXkAPhXanNQRxMoq6AeRgDCZR6t/A1zKniY2V1YhrzlQ==}
engines: {node: '>= 14'} engines: {node: '>= 14'}
dependencies: dependencies:
'@octokit/types': 6.40.0 '@octokit/types': 6.41.0
is-plain-object: 5.0.0 is-plain-object: 5.0.0
universal-user-agent: 6.0.0 universal-user-agent: 6.0.0
dev: true dev: true
@@ -1925,24 +1925,24 @@ packages:
engines: {node: '>= 14'} engines: {node: '>= 14'}
dependencies: dependencies:
'@octokit/request': 6.2.0 '@octokit/request': 6.2.0
'@octokit/types': 6.40.0 '@octokit/types': 6.41.0
universal-user-agent: 6.0.0 universal-user-agent: 6.0.0
transitivePeerDependencies: transitivePeerDependencies:
- encoding - encoding
dev: true dev: true
/@octokit/openapi-types/12.10.1: /@octokit/openapi-types/12.11.0:
resolution: {integrity: sha512-P+SukKanjFY0ZhsK6wSVnQmxTP2eVPPE8OPSNuxaMYtgVzwJZgfGdwlYjf4RlRU4vLEw4ts2fsE2icG4nZ5ddQ==} resolution: {integrity: sha512-VsXyi8peyRq9PqIz/tpqiL2w3w80OgVMwBHltTml3LmVvXiphgeqmY9mvBw9Wu7e0QWk/fqD37ux8yP5uVekyQ==}
dev: true dev: true
/@octokit/plugin-paginate-rest/3.0.0_@octokit+core@4.0.4: /@octokit/plugin-paginate-rest/3.1.0_@octokit+core@4.0.4:
resolution: {integrity: sha512-fvw0Q5IXnn60D32sKeLIxgXCEZ7BTSAjJd8cFAE6QU5qUp0xo7LjFUjjX1J5D7HgN355CN4EXE4+Q1/96JaNUA==} resolution: {integrity: sha512-+cfc40pMzWcLkoDcLb1KXqjX0jTGYXjKuQdFQDc6UAknISJHnZTiBqld6HDwRJvD4DsouDKrWXNbNV0lE/3AXA==}
engines: {node: '>= 14'} engines: {node: '>= 14'}
peerDependencies: peerDependencies:
'@octokit/core': '>=4' '@octokit/core': '>=4'
dependencies: dependencies:
'@octokit/core': 4.0.4 '@octokit/core': 4.0.4
'@octokit/types': 6.40.0 '@octokit/types': 6.41.0
dev: true dev: true
/@octokit/plugin-request-log/1.0.4_@octokit+core@4.0.4: /@octokit/plugin-request-log/1.0.4_@octokit+core@4.0.4:
@@ -1953,14 +1953,14 @@ packages:
'@octokit/core': 4.0.4 '@octokit/core': 4.0.4
dev: true dev: true
/@octokit/plugin-rest-endpoint-methods/6.1.2_@octokit+core@4.0.4: /@octokit/plugin-rest-endpoint-methods/6.2.0_@octokit+core@4.0.4:
resolution: {integrity: sha512-sAfSKtLHNq0UQ2iFuI41I6m5SK6bnKFRJ5kUjDRVbmQXiRVi4aQiIcgG4cM7bt+bhSiWL4HwnTxDkWFlKeKClA==} resolution: {integrity: sha512-PZ+yfkbZAuRUtqu6Y191/V3eM0KBPx+Yq7nh+ONPdpm3EX4pd5UnK2y2XgO/0AtNum5a4aJCDjqsDuUZ2hWRXw==}
engines: {node: '>= 14'} engines: {node: '>= 14'}
peerDependencies: peerDependencies:
'@octokit/core': '>=3' '@octokit/core': '>=3'
dependencies: dependencies:
'@octokit/core': 4.0.4 '@octokit/core': 4.0.4
'@octokit/types': 6.40.0 '@octokit/types': 6.41.0
deprecation: 2.3.1 deprecation: 2.3.1
dev: true dev: true
@@ -1968,7 +1968,7 @@ packages:
resolution: {integrity: sha512-WBtpzm9lR8z4IHIMtOqr6XwfkGvMOOILNLxsWvDwtzm/n7f5AWuqJTXQXdDtOvPfTDrH4TPhEvW2qMlR4JFA2w==} resolution: {integrity: sha512-WBtpzm9lR8z4IHIMtOqr6XwfkGvMOOILNLxsWvDwtzm/n7f5AWuqJTXQXdDtOvPfTDrH4TPhEvW2qMlR4JFA2w==}
engines: {node: '>= 14'} engines: {node: '>= 14'}
dependencies: dependencies:
'@octokit/types': 6.40.0 '@octokit/types': 6.41.0
deprecation: 2.3.1 deprecation: 2.3.1
once: 1.4.0 once: 1.4.0
dev: true dev: true
@@ -1979,7 +1979,7 @@ packages:
dependencies: dependencies:
'@octokit/endpoint': 7.0.0 '@octokit/endpoint': 7.0.0
'@octokit/request-error': 3.0.0 '@octokit/request-error': 3.0.0
'@octokit/types': 6.40.0 '@octokit/types': 6.41.0
is-plain-object: 5.0.0 is-plain-object: 5.0.0
node-fetch: 2.6.7 node-fetch: 2.6.7
universal-user-agent: 6.0.0 universal-user-agent: 6.0.0
@@ -1992,17 +1992,17 @@ packages:
engines: {node: '>= 14'} engines: {node: '>= 14'}
dependencies: dependencies:
'@octokit/core': 4.0.4 '@octokit/core': 4.0.4
'@octokit/plugin-paginate-rest': 3.0.0_@octokit+core@4.0.4 '@octokit/plugin-paginate-rest': 3.1.0_@octokit+core@4.0.4
'@octokit/plugin-request-log': 1.0.4_@octokit+core@4.0.4 '@octokit/plugin-request-log': 1.0.4_@octokit+core@4.0.4
'@octokit/plugin-rest-endpoint-methods': 6.1.2_@octokit+core@4.0.4 '@octokit/plugin-rest-endpoint-methods': 6.2.0_@octokit+core@4.0.4
transitivePeerDependencies: transitivePeerDependencies:
- encoding - encoding
dev: true dev: true
/@octokit/types/6.40.0: /@octokit/types/6.41.0:
resolution: {integrity: sha512-MFZOU5r8SwgJWDMhrLUSvyJPtVsqA6VnbVI3TNbsmw+Jnvrktzvq2fYES/6RiJA/5Ykdwq4mJmtlYUfW7CGjmw==} resolution: {integrity: sha512-eJ2jbzjdijiL3B4PrSQaSjuF2sPEQPVCPzBvTHJD9Nz+9dw2SGH4K4xeQJ77YfTq5bRQ+bD8wT11JbeDPmxmGg==}
dependencies: dependencies:
'@octokit/openapi-types': 12.10.1 '@octokit/openapi-types': 12.11.0
dev: true dev: true
/@pnpm/network.ca-file/1.0.1: /@pnpm/network.ca-file/1.0.1:
@@ -2265,6 +2265,11 @@ packages:
engines: {node: '>=10'} engines: {node: '>=10'}
dev: true dev: true
/@sindresorhus/is/5.3.0:
resolution: {integrity: sha512-CX6t4SYQ37lzxicAqsBtxA3OseeoVrh9cSJ5PFYam0GksYlupRfy1A+Q4aYD3zvcfECLc0zO2u+ZnR2UYKvCrw==}
engines: {node: '>=14.16'}
dev: true
/@szmarczak/http-timer/4.0.6: /@szmarczak/http-timer/4.0.6:
resolution: {integrity: sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==} resolution: {integrity: sha512-4BAffykYOgO+5nzBWYwE3W90sBgLJoUPRWWcL8wlyiM8IB8ipJz3UMJ9KXQd1RKQXpKp8Tutn80HZtWsu2u76w==}
engines: {node: '>=10'} engines: {node: '>=10'}
@@ -2339,7 +2344,7 @@ packages:
dependencies: dependencies:
'@types/http-cache-semantics': 4.0.1 '@types/http-cache-semantics': 4.0.1
'@types/keyv': 3.1.4 '@types/keyv': 3.1.4
'@types/node': 18.0.6 '@types/node': 18.6.3
'@types/responselike': 1.0.0 '@types/responselike': 1.0.0
dev: true dev: true
@@ -2428,7 +2433,7 @@ packages:
/@types/keyv/3.1.4: /@types/keyv/3.1.4:
resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==} resolution: {integrity: sha512-BQ5aZNSCpj7D6K2ksrRCTmKRLEpnPvWDiLPfoGyhZ++8YtiK9d/3DBKPJgry359X/P1PfruyYwvnvwFjuEiEIg==}
dependencies: dependencies:
'@types/node': 18.0.6 '@types/node': 18.6.3
dev: true dev: true
/@types/lodash-es/4.17.6: /@types/lodash-es/4.17.6:
@@ -2471,6 +2476,10 @@ packages:
/@types/node/18.0.6: /@types/node/18.0.6:
resolution: {integrity: sha512-/xUq6H2aQm261exT6iZTMifUySEt4GR5KX8eYyY+C4MSNPqSh9oNIP7tz2GLKTlFaiBbgZNxffoR3CVRG+cljw==} resolution: {integrity: sha512-/xUq6H2aQm261exT6iZTMifUySEt4GR5KX8eYyY+C4MSNPqSh9oNIP7tz2GLKTlFaiBbgZNxffoR3CVRG+cljw==}
dev: true
/@types/node/18.6.3:
resolution: {integrity: sha512-6qKpDtoaYLM+5+AFChLhHermMQxc3TOEFIDzrZLPRGHPrLEwqFkkT5Kx3ju05g6X7uDPazz3jHbKPX0KzCjntg==}
/@types/normalize-package-data/2.4.1: /@types/normalize-package-data/2.4.1:
resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==} resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==}
@@ -2513,7 +2522,7 @@ packages:
/@types/responselike/1.0.0: /@types/responselike/1.0.0:
resolution: {integrity: sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==} resolution: {integrity: sha512-85Y2BjiufFzaMIlvJDvTTB8Fxl2xfLo4HgmHzVBz08w4wDePCTjYw66PdrolO0kzli3yam/YCgRufyo1DdQVTA==}
dependencies: dependencies:
'@types/node': 18.0.6 '@types/node': 18.6.3
dev: true dev: true
/@types/scheduler/0.16.2: /@types/scheduler/0.16.2:
@@ -2559,7 +2568,7 @@ packages:
/@types/ws/8.5.3: /@types/ws/8.5.3:
resolution: {integrity: sha512-6YOoWjruKj1uLf3INHH7D3qTXwFfEsg1kf3c0uDdSBJwfa/llkwIjrAGV7j7mVgGNbzTQ3HiHKKDXl6bJPD97w==} resolution: {integrity: sha512-6YOoWjruKj1uLf3INHH7D3qTXwFfEsg1kf3c0uDdSBJwfa/llkwIjrAGV7j7mVgGNbzTQ3HiHKKDXl6bJPD97w==}
dependencies: dependencies:
'@types/node': 18.0.6 '@types/node': 18.6.3
dev: true dev: true
/@types/yauzl/2.10.0: /@types/yauzl/2.10.0:
@@ -3269,7 +3278,7 @@ packages:
chalk: 5.0.1 chalk: 5.0.1
cli-boxes: 3.0.0 cli-boxes: 3.0.0
string-width: 5.1.2 string-width: 5.1.2
type-fest: 2.17.0 type-fest: 2.18.0
widest-line: 4.0.1 widest-line: 4.0.1
wrap-ansi: 8.0.1 wrap-ansi: 8.0.1
dev: true dev: true
@@ -3360,13 +3369,13 @@ packages:
engines: {node: '>=6'} engines: {node: '>=6'}
dev: true dev: true
/bundle-require/3.0.4_esbuild@0.14.50: /bundle-require/3.0.4_esbuild@0.14.51:
resolution: {integrity: sha512-VXG6epB1yrLAvWVQpl92qF347/UXmncQj7J3U8kZEbdVZ1ZkQyr4hYeL/9RvcE8vVVdp53dY78Fd/3pqfRqI1A==} resolution: {integrity: sha512-VXG6epB1yrLAvWVQpl92qF347/UXmncQj7J3U8kZEbdVZ1ZkQyr4hYeL/9RvcE8vVVdp53dY78Fd/3pqfRqI1A==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
peerDependencies: peerDependencies:
esbuild: '>=0.13' esbuild: '>=0.13'
dependencies: dependencies:
esbuild: 0.14.50 esbuild: 0.14.51
load-tsconfig: 0.2.3 load-tsconfig: 0.2.3
dev: true dev: true
@@ -3657,6 +3666,11 @@ packages:
engines: {node: '>=6'} engines: {node: '>=6'}
dev: true dev: true
/cli-spinners/2.7.0:
resolution: {integrity: sha512-qu3pN8Y3qHNgE2AFweciB1IfMnmZ/fsNTEE+NOFjmGB2F/7rLhnhzppvpCnN4FovtP26k8lHyy9ptEbNwWFLzw==}
engines: {node: '>=6'}
dev: true
/cli-table3/0.6.2: /cli-table3/0.6.2:
resolution: {integrity: sha512-QyavHCaIC80cMivimWu4aWHilIpiDpfm3hGmqAmXVL1UsnbLuBSMd21hTX6VY4ZSDSM73ESLeF8TOYId3rBTbw==} resolution: {integrity: sha512-QyavHCaIC80cMivimWu4aWHilIpiDpfm3hGmqAmXVL1UsnbLuBSMd21hTX6VY4ZSDSM73ESLeF8TOYId3rBTbw==}
engines: {node: 10.* || >= 12.*} engines: {node: 10.* || >= 12.*}
@@ -4318,13 +4332,13 @@ packages:
/discord-api-types/0.36.3: /discord-api-types/0.36.3:
resolution: {integrity: sha512-bz/NDyG0KBo/tY14vSkrwQ/n3HKPf87a0WFW/1M9+tXYK+vp5Z5EksawfCWo2zkAc6o7CClc0eff1Pjrqznlwg==} resolution: {integrity: sha512-bz/NDyG0KBo/tY14vSkrwQ/n3HKPf87a0WFW/1M9+tXYK+vp5Z5EksawfCWo2zkAc6o7CClc0eff1Pjrqznlwg==}
/discord.js/14.0.3: /discord.js/14.1.2:
resolution: {integrity: sha512-wH/VQl4CqN8/+dcXEtYis1iurqxGlDpEe0O4CqH5FGqZGIjVpTdtK0STXXx7bVNX8MT/0GvLZLkmO/5gLDWZVg==} resolution: {integrity: sha512-apdWNLkjAkeEnuNpB8H6rS/4OgrXQlSAjuuzeodjCOdIXy3OwOjD314V/HiSttcAlr9+r3ONhaT5qvbDad5SIg==}
engines: {node: '>=16.9.0'} engines: {node: '>=16.9.0'}
dependencies: dependencies:
'@discordjs/builders': 1.0.0 '@discordjs/builders': 1.1.0
'@discordjs/collection': 1.0.0 '@discordjs/collection': 1.0.1
'@discordjs/rest': 1.0.0 '@discordjs/rest': 1.0.1
'@sapphire/snowflake': 3.2.2 '@sapphire/snowflake': 3.2.2
'@types/ws': 8.5.3 '@types/ws': 8.5.3
discord-api-types: 0.36.3 discord-api-types: 0.36.3
@@ -4493,15 +4507,6 @@ packages:
is-date-object: 1.0.5 is-date-object: 1.0.5
is-symbol: 1.0.4 is-symbol: 1.0.4
/esbuild-android-64/0.14.49:
resolution: {integrity: sha512-vYsdOTD+yi+kquhBiFWl3tyxnj2qZJsl4tAqwhT90ktUdnyTizgle7TjNx6Ar1bN7wcwWqZ9QInfdk2WVagSww==}
engines: {node: '>=12'}
cpu: [x64]
os: [android]
requiresBuild: true
dev: true
optional: true
/esbuild-android-64/0.14.50: /esbuild-android-64/0.14.50:
resolution: {integrity: sha512-H7iUEm7gUJHzidsBlFPGF6FTExazcgXL/46xxLo6i6bMtPim6ZmXyTccS8yOMpy6HAC6dPZ/JCQqrkkin69n6Q==} resolution: {integrity: sha512-H7iUEm7gUJHzidsBlFPGF6FTExazcgXL/46xxLo6i6bMtPim6ZmXyTccS8yOMpy6HAC6dPZ/JCQqrkkin69n6Q==}
engines: {node: '>=12'} engines: {node: '>=12'}
@@ -4511,10 +4516,10 @@ packages:
dev: true dev: true
optional: true optional: true
/esbuild-android-arm64/0.14.49: /esbuild-android-64/0.14.51:
resolution: {integrity: sha512-g2HGr/hjOXCgSsvQZ1nK4nW/ei8JUx04Li74qub9qWrStlysaVmadRyTVuW32FGIpLQyc5sUjjZopj49eGGM2g==} resolution: {integrity: sha512-6FOuKTHnC86dtrKDmdSj2CkcKF8PnqkaIXqvgydqfJmqBazCPdw+relrMlhGjkvVdiiGV70rpdnyFmA65ekBCQ==}
engines: {node: '>=12'} engines: {node: '>=12'}
cpu: [arm64] cpu: [x64]
os: [android] os: [android]
requiresBuild: true requiresBuild: true
dev: true dev: true
@@ -4529,11 +4534,11 @@ packages:
dev: true dev: true
optional: true optional: true
/esbuild-darwin-64/0.14.49: /esbuild-android-arm64/0.14.51:
resolution: {integrity: sha512-3rvqnBCtX9ywso5fCHixt2GBCUsogNp9DjGmvbBohh31Ces34BVzFltMSxJpacNki96+WIcX5s/vum+ckXiLYg==} resolution: {integrity: sha512-vBtp//5VVkZWmYYvHsqBRCMMi1MzKuMIn5XDScmnykMTu9+TD9v0NMEDqQxvtFToeYmojdo5UCV2vzMQWJcJ4A==}
engines: {node: '>=12'} engines: {node: '>=12'}
cpu: [x64] cpu: [arm64]
os: [darwin] os: [android]
requiresBuild: true requiresBuild: true
dev: true dev: true
optional: true optional: true
@@ -4547,10 +4552,10 @@ packages:
dev: true dev: true
optional: true optional: true
/esbuild-darwin-arm64/0.14.49: /esbuild-darwin-64/0.14.51:
resolution: {integrity: sha512-XMaqDxO846srnGlUSJnwbijV29MTKUATmOLyQSfswbK/2X5Uv28M9tTLUJcKKxzoo9lnkYPsx2o8EJcTYwCs/A==} resolution: {integrity: sha512-YFmXPIOvuagDcwCejMRtCDjgPfnDu+bNeh5FU2Ryi68ADDVlWEpbtpAbrtf/lvFTWPexbgyKgzppNgsmLPr8PA==}
engines: {node: '>=12'} engines: {node: '>=12'}
cpu: [arm64] cpu: [x64]
os: [darwin] os: [darwin]
requiresBuild: true requiresBuild: true
dev: true dev: true
@@ -4565,11 +4570,11 @@ packages:
dev: true dev: true
optional: true optional: true
/esbuild-freebsd-64/0.14.49: /esbuild-darwin-arm64/0.14.51:
resolution: {integrity: sha512-NJ5Q6AjV879mOHFri+5lZLTp5XsO2hQ+KSJYLbfY9DgCu8s6/Zl2prWXVANYTeCDLlrIlNNYw8y34xqyLDKOmQ==} resolution: {integrity: sha512-juYD0QnSKwAMfzwKdIF6YbueXzS6N7y4GXPDeDkApz/1RzlT42mvX9jgNmyOlWKN7YzQAYbcUEJmZJYQGdf2ow==}
engines: {node: '>=12'} engines: {node: '>=12'}
cpu: [x64] cpu: [arm64]
os: [freebsd] os: [darwin]
requiresBuild: true requiresBuild: true
dev: true dev: true
optional: true optional: true
@@ -4583,10 +4588,10 @@ packages:
dev: true dev: true
optional: true optional: true
/esbuild-freebsd-arm64/0.14.49: /esbuild-freebsd-64/0.14.51:
resolution: {integrity: sha512-lFLtgXnAc3eXYqj5koPlBZvEbBSOSUbWO3gyY/0+4lBdRqELyz4bAuamHvmvHW5swJYL7kngzIZw6kdu25KGOA==} resolution: {integrity: sha512-cLEI/aXjb6vo5O2Y8rvVSQ7smgLldwYY5xMxqh/dQGfWO+R1NJOFsiax3IS4Ng300SVp7Gz3czxT6d6qf2cw0g==}
engines: {node: '>=12'} engines: {node: '>=12'}
cpu: [arm64] cpu: [x64]
os: [freebsd] os: [freebsd]
requiresBuild: true requiresBuild: true
dev: true dev: true
@@ -4601,11 +4606,11 @@ packages:
dev: true dev: true
optional: true optional: true
/esbuild-linux-32/0.14.49: /esbuild-freebsd-arm64/0.14.51:
resolution: {integrity: sha512-zTTH4gr2Kb8u4QcOpTDVn7Z8q7QEIvFl/+vHrI3cF6XOJS7iEI1FWslTo3uofB2+mn6sIJEQD9PrNZKoAAMDiA==} resolution: {integrity: sha512-TcWVw/rCL2F+jUgRkgLa3qltd5gzKjIMGhkVybkjk6PJadYInPtgtUBp1/hG+mxyigaT7ib+od1Xb84b+L+1Mg==}
engines: {node: '>=12'} engines: {node: '>=12'}
cpu: [ia32] cpu: [arm64]
os: [linux] os: [freebsd]
requiresBuild: true requiresBuild: true
dev: true dev: true
optional: true optional: true
@@ -4619,10 +4624,10 @@ packages:
dev: true dev: true
optional: true optional: true
/esbuild-linux-64/0.14.49: /esbuild-linux-32/0.14.51:
resolution: {integrity: sha512-hYmzRIDzFfLrB5c1SknkxzM8LdEUOusp6M2TnuQZJLRtxTgyPnZZVtyMeCLki0wKgYPXkFsAVhi8vzo2mBNeTg==} resolution: {integrity: sha512-RFqpyC5ChyWrjx8Xj2K0EC1aN0A37H6OJfmUXIASEqJoHcntuV3j2Efr9RNmUhMfNE6yEj2VpYuDteZLGDMr0w==}
engines: {node: '>=12'} engines: {node: '>=12'}
cpu: [x64] cpu: [ia32]
os: [linux] os: [linux]
requiresBuild: true requiresBuild: true
dev: true dev: true
@@ -4637,10 +4642,10 @@ packages:
dev: true dev: true
optional: true optional: true
/esbuild-linux-arm/0.14.49: /esbuild-linux-64/0.14.51:
resolution: {integrity: sha512-iE3e+ZVv1Qz1Sy0gifIsarJMQ89Rpm9mtLSRtG3AH0FPgAzQ5Z5oU6vYzhc/3gSPi2UxdCOfRhw2onXuFw/0lg==} resolution: {integrity: sha512-dxjhrqo5i7Rq6DXwz5v+MEHVs9VNFItJmHBe1CxROWNf4miOGoQhqSG8StStbDkQ1Mtobg6ng+4fwByOhoQoeA==}
engines: {node: '>=12'} engines: {node: '>=12'}
cpu: [arm] cpu: [x64]
os: [linux] os: [linux]
requiresBuild: true requiresBuild: true
dev: true dev: true
@@ -4655,10 +4660,10 @@ packages:
dev: true dev: true
optional: true optional: true
/esbuild-linux-arm64/0.14.49: /esbuild-linux-arm/0.14.51:
resolution: {integrity: sha512-KLQ+WpeuY+7bxukxLz5VgkAAVQxUv67Ft4DmHIPIW+2w3ObBPQhqNoeQUHxopoW/aiOn3m99NSmSV+bs4BSsdA==} resolution: {integrity: sha512-LsJynDxYF6Neg7ZC7748yweCDD+N8ByCv22/7IAZglIEniEkqdF4HCaa49JNDLw1UQGlYuhOB8ZT/MmcSWzcWg==}
engines: {node: '>=12'} engines: {node: '>=12'}
cpu: [arm64] cpu: [arm]
os: [linux] os: [linux]
requiresBuild: true requiresBuild: true
dev: true dev: true
@@ -4673,10 +4678,10 @@ packages:
dev: true dev: true
optional: true optional: true
/esbuild-linux-mips64le/0.14.49: /esbuild-linux-arm64/0.14.51:
resolution: {integrity: sha512-n+rGODfm8RSum5pFIqFQVQpYBw+AztL8s6o9kfx7tjfK0yIGF6tm5HlG6aRjodiiKkH2xAiIM+U4xtQVZYU4rA==} resolution: {integrity: sha512-D9rFxGutoqQX3xJPxqd6o+kvYKeIbM0ifW2y0bgKk5HPgQQOo2k9/2Vpto3ybGYaFPCE5qTGtqQta9PoP6ZEzw==}
engines: {node: '>=12'} engines: {node: '>=12'}
cpu: [mips64el] cpu: [arm64]
os: [linux] os: [linux]
requiresBuild: true requiresBuild: true
dev: true dev: true
@@ -4691,10 +4696,10 @@ packages:
dev: true dev: true
optional: true optional: true
/esbuild-linux-ppc64le/0.14.49: /esbuild-linux-mips64le/0.14.51:
resolution: {integrity: sha512-WP9zR4HX6iCBmMFH+XHHng2LmdoIeUmBpL4aL2TR8ruzXyT4dWrJ5BSbT8iNo6THN8lod6GOmYDLq/dgZLalGw==} resolution: {integrity: sha512-vS54wQjy4IinLSlb5EIlLoln8buh1yDgliP4CuEHumrPk4PvvP4kTRIG4SzMXm6t19N0rIfT4bNdAxzJLg2k6A==}
engines: {node: '>=12'} engines: {node: '>=12'}
cpu: [ppc64] cpu: [mips64el]
os: [linux] os: [linux]
requiresBuild: true requiresBuild: true
dev: true dev: true
@@ -4709,10 +4714,10 @@ packages:
dev: true dev: true
optional: true optional: true
/esbuild-linux-riscv64/0.14.49: /esbuild-linux-ppc64le/0.14.51:
resolution: {integrity: sha512-h66ORBz+Dg+1KgLvzTVQEA1LX4XBd1SK0Fgbhhw4akpG/YkN8pS6OzYI/7SGENiN6ao5hETRDSkVcvU9NRtkMQ==} resolution: {integrity: sha512-xcdd62Y3VfGoyphNP/aIV9LP+RzFw5M5Z7ja+zdpQHHvokJM7d0rlDRMN+iSSwvUymQkqZO+G/xjb4/75du8BQ==}
engines: {node: '>=12'} engines: {node: '>=12'}
cpu: [riscv64] cpu: [ppc64]
os: [linux] os: [linux]
requiresBuild: true requiresBuild: true
dev: true dev: true
@@ -4727,10 +4732,10 @@ packages:
dev: true dev: true
optional: true optional: true
/esbuild-linux-s390x/0.14.49: /esbuild-linux-riscv64/0.14.51:
resolution: {integrity: sha512-DhrUoFVWD+XmKO1y7e4kNCqQHPs6twz6VV6Uezl/XHYGzM60rBewBF5jlZjG0nCk5W/Xy6y1xWeopkrhFFM0sQ==} resolution: {integrity: sha512-syXHGak9wkAnFz0gMmRBoy44JV0rp4kVCEA36P5MCeZcxFq8+fllBC2t6sKI23w3qd8Vwo9pTADCgjTSf3L3rA==}
engines: {node: '>=12'} engines: {node: '>=12'}
cpu: [s390x] cpu: [riscv64]
os: [linux] os: [linux]
requiresBuild: true requiresBuild: true
dev: true dev: true
@@ -4745,11 +4750,11 @@ packages:
dev: true dev: true
optional: true optional: true
/esbuild-netbsd-64/0.14.49: /esbuild-linux-s390x/0.14.51:
resolution: {integrity: sha512-BXaUwFOfCy2T+hABtiPUIpWjAeWK9P8O41gR4Pg73hpzoygVGnj0nI3YK4SJhe52ELgtdgWP/ckIkbn2XaTxjQ==} resolution: {integrity: sha512-kFAJY3dv+Wq8o28K/C7xkZk/X34rgTwhknSsElIqoEo8armCOjMJ6NsMxm48KaWY2h2RUYGtQmr+RGuUPKBhyw==}
engines: {node: '>=12'} engines: {node: '>=12'}
cpu: [x64] cpu: [s390x]
os: [netbsd] os: [linux]
requiresBuild: true requiresBuild: true
dev: true dev: true
optional: true optional: true
@@ -4763,11 +4768,11 @@ packages:
dev: true dev: true
optional: true optional: true
/esbuild-openbsd-64/0.14.49: /esbuild-netbsd-64/0.14.51:
resolution: {integrity: sha512-lP06UQeLDGmVPw9Rg437Btu6J9/BmyhdoefnQ4gDEJTtJvKtQaUcOQrhjTq455ouZN4EHFH1h28WOJVANK41kA==} resolution: {integrity: sha512-ZZBI7qrR1FevdPBVHz/1GSk1x5GDL/iy42Zy8+neEm/HA7ma+hH/bwPEjeHXKWUDvM36CZpSL/fn1/y9/Hb+1A==}
engines: {node: '>=12'} engines: {node: '>=12'}
cpu: [x64] cpu: [x64]
os: [openbsd] os: [netbsd]
requiresBuild: true requiresBuild: true
dev: true dev: true
optional: true optional: true
@@ -4781,11 +4786,11 @@ packages:
dev: true dev: true
optional: true optional: true
/esbuild-sunos-64/0.14.49: /esbuild-openbsd-64/0.14.51:
resolution: {integrity: sha512-4c8Zowp+V3zIWje329BeLbGh6XI9c/rqARNaj5yPHdC61pHI9UNdDxT3rePPJeWcEZVKjkiAS6AP6kiITp7FSw==} resolution: {integrity: sha512-7R1/p39M+LSVQVgDVlcY1KKm6kFKjERSX1lipMG51NPcspJD1tmiZSmmBXoY5jhHIu6JL1QkFDTx94gMYK6vfA==}
engines: {node: '>=12'} engines: {node: '>=12'}
cpu: [x64] cpu: [x64]
os: [sunos] os: [openbsd]
requiresBuild: true requiresBuild: true
dev: true dev: true
optional: true optional: true
@@ -4799,11 +4804,11 @@ packages:
dev: true dev: true
optional: true optional: true
/esbuild-windows-32/0.14.49: /esbuild-sunos-64/0.14.51:
resolution: {integrity: sha512-q7Rb+J9yHTeKr9QTPDYkqfkEj8/kcKz9lOabDuvEXpXuIcosWCJgo5Z7h/L4r7rbtTH4a8U2FGKb6s1eeOHmJA==} resolution: {integrity: sha512-HoHaCswHxLEYN8eBTtyO0bFEWvA3Kdb++hSQ/lLG7TyKF69TeSG0RNoBRAs45x/oCeWaTDntEZlYwAfQlhEtJA==}
engines: {node: '>=12'} engines: {node: '>=12'}
cpu: [ia32] cpu: [x64]
os: [win32] os: [sunos]
requiresBuild: true requiresBuild: true
dev: true dev: true
optional: true optional: true
@@ -4817,10 +4822,10 @@ packages:
dev: true dev: true
optional: true optional: true
/esbuild-windows-64/0.14.49: /esbuild-windows-32/0.14.51:
resolution: {integrity: sha512-+Cme7Ongv0UIUTniPqfTX6mJ8Deo7VXw9xN0yJEN1lQMHDppTNmKwAM3oGbD/Vqff+07K2gN0WfNkMohmG+dVw==} resolution: {integrity: sha512-4rtwSAM35A07CBt1/X8RWieDj3ZUHQqUOaEo5ZBs69rt5WAFjP4aqCIobdqOy4FdhYw1yF8Z0xFBTyc9lgPtEg==}
engines: {node: '>=12'} engines: {node: '>=12'}
cpu: [x64] cpu: [ia32]
os: [win32] os: [win32]
requiresBuild: true requiresBuild: true
dev: true dev: true
@@ -4835,10 +4840,10 @@ packages:
dev: true dev: true
optional: true optional: true
/esbuild-windows-arm64/0.14.49: /esbuild-windows-64/0.14.51:
resolution: {integrity: sha512-v+HYNAXzuANrCbbLFJ5nmO3m5y2PGZWLe3uloAkLt87aXiO2mZr3BTmacZdjwNkNEHuH3bNtN8cak+mzVjVPfA==} resolution: {integrity: sha512-HoN/5HGRXJpWODprGCgKbdMvrC3A2gqvzewu2eECRw2sYxOUoh2TV1tS+G7bHNapPGI79woQJGV6pFH7GH7qnA==}
engines: {node: '>=12'} engines: {node: '>=12'}
cpu: [arm64] cpu: [x64]
os: [win32] os: [win32]
requiresBuild: true requiresBuild: true
dev: true dev: true
@@ -4853,33 +4858,14 @@ packages:
dev: true dev: true
optional: true optional: true
/esbuild/0.14.49: /esbuild-windows-arm64/0.14.51:
resolution: {integrity: sha512-/TlVHhOaq7Yz8N1OJrjqM3Auzo5wjvHFLk+T8pIue+fhnhIMpfAzsG6PLVMbFveVxqD2WOp3QHei+52IMUNmCw==} resolution: {integrity: sha512-JQDqPjuOH7o+BsKMSddMfmVJXrnYZxXDHsoLHc0xgmAZkOOCflRmC43q31pk79F9xuyWY45jDBPolb5ZgGOf9g==}
engines: {node: '>=12'} engines: {node: '>=12'}
hasBin: true cpu: [arm64]
os: [win32]
requiresBuild: true requiresBuild: true
optionalDependencies:
esbuild-android-64: 0.14.49
esbuild-android-arm64: 0.14.49
esbuild-darwin-64: 0.14.49
esbuild-darwin-arm64: 0.14.49
esbuild-freebsd-64: 0.14.49
esbuild-freebsd-arm64: 0.14.49
esbuild-linux-32: 0.14.49
esbuild-linux-64: 0.14.49
esbuild-linux-arm: 0.14.49
esbuild-linux-arm64: 0.14.49
esbuild-linux-mips64le: 0.14.49
esbuild-linux-ppc64le: 0.14.49
esbuild-linux-riscv64: 0.14.49
esbuild-linux-s390x: 0.14.49
esbuild-netbsd-64: 0.14.49
esbuild-openbsd-64: 0.14.49
esbuild-sunos-64: 0.14.49
esbuild-windows-32: 0.14.49
esbuild-windows-64: 0.14.49
esbuild-windows-arm64: 0.14.49
dev: true dev: true
optional: true
/esbuild/0.14.50: /esbuild/0.14.50:
resolution: {integrity: sha512-SbC3k35Ih2IC6trhbMYW7hYeGdjPKf9atTKwBUHqMCYFZZ9z8zhuvfnZihsnJypl74FjiAKjBRqFkBkAd0rS/w==} resolution: {integrity: sha512-SbC3k35Ih2IC6trhbMYW7hYeGdjPKf9atTKwBUHqMCYFZZ9z8zhuvfnZihsnJypl74FjiAKjBRqFkBkAd0rS/w==}
@@ -4909,6 +4895,34 @@ packages:
esbuild-windows-arm64: 0.14.50 esbuild-windows-arm64: 0.14.50
dev: true dev: true
/esbuild/0.14.51:
resolution: {integrity: sha512-+CvnDitD7Q5sT7F+FM65sWkF8wJRf+j9fPcprxYV4j+ohmzVj2W7caUqH2s5kCaCJAfcAICjSlKhDCcvDpU7nw==}
engines: {node: '>=12'}
hasBin: true
requiresBuild: true
optionalDependencies:
esbuild-android-64: 0.14.51
esbuild-android-arm64: 0.14.51
esbuild-darwin-64: 0.14.51
esbuild-darwin-arm64: 0.14.51
esbuild-freebsd-64: 0.14.51
esbuild-freebsd-arm64: 0.14.51
esbuild-linux-32: 0.14.51
esbuild-linux-64: 0.14.51
esbuild-linux-arm: 0.14.51
esbuild-linux-arm64: 0.14.51
esbuild-linux-mips64le: 0.14.51
esbuild-linux-ppc64le: 0.14.51
esbuild-linux-riscv64: 0.14.51
esbuild-linux-s390x: 0.14.51
esbuild-netbsd-64: 0.14.51
esbuild-openbsd-64: 0.14.51
esbuild-sunos-64: 0.14.51
esbuild-windows-32: 0.14.51
esbuild-windows-64: 0.14.51
esbuild-windows-arm64: 0.14.51
dev: true
/escalade/3.1.1: /escalade/3.1.1:
resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==} resolution: {integrity: sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==}
engines: {node: '>=6'} engines: {node: '>=6'}
@@ -5479,13 +5493,13 @@ packages:
flat-cache: 3.0.4 flat-cache: 3.0.4
dev: true dev: true
/file-type/17.1.3: /file-type/17.1.4:
resolution: {integrity: sha512-MFVSozBIhvnx2dkxlf+010Xqn6+ojlMUT9LXQiPNoOijgRtXNMghWdGK0u2o1RoCqzHoVsw65IL8ZBcQ4MhIrw==} resolution: {integrity: sha512-3w/rJUUPBj6CYhVER3D5JCKwYJJiC36uj5dP+LnyubHI6H6FJo1TeWVCEA09YLVoZqV3/mLP26j9+Pz1GjAyjQ==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
dependencies: dependencies:
readable-web-to-node-stream: 3.0.2 readable-web-to-node-stream: 3.0.2
strtok3: 7.0.0-alpha.8 strtok3: 7.0.0-alpha.9
token-types: 5.0.0-alpha.2 token-types: 5.0.0-alpha.3
dev: true dev: true
/file-uri-to-path/1.0.0: /file-uri-to-path/1.0.0:
@@ -5514,11 +5528,6 @@ packages:
dependencies: dependencies:
to-regex-range: 5.0.1 to-regex-range: 5.0.1
/filter-obj/1.1.0:
resolution: {integrity: sha512-8rXg1ZnX7xzy2NGDVkBVaAy+lSlPNwad13BtgSlLuxfIslyt5Vg64U7tFcCt4WS1R0hvtnQybT/IyCkGZ3DpXQ==}
engines: {node: '>=0.10.0'}
dev: true
/finalhandler/1.2.0: /finalhandler/1.2.0:
resolution: {integrity: sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==} resolution: {integrity: sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==}
engines: {node: '>= 0.8'} engines: {node: '>= 0.8'}
@@ -5628,8 +5637,9 @@ packages:
resolution: {integrity: sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==} resolution: {integrity: sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw==}
dev: true dev: true
/form-data-encoder/1.7.1: /form-data-encoder/2.0.1:
resolution: {integrity: sha512-EFRDrsMm/kyqbTQocNvRXMLjc7Es2Vk+IQFx/YW7hkUH1eBl4J1fqiP34l74Yt0pFLCNpc06fkbVk00008mzjg==} resolution: {integrity: sha512-Oy+P9w5mnO4TWXVgUiQvggNKPI9/ummcSt5usuIV6HkaLKigwzPpoenhEqmGmx3zHqm6ZLJ+CR/99N8JLinaEw==}
engines: {node: '>= 14.17'}
dev: true dev: true
/form-data/2.3.3: /form-data/2.3.3:
@@ -5861,17 +5871,17 @@ packages:
resolution: {integrity: sha512-Y7wLWcrLUXwk2noSka166byGCvhMtDRpgHdzCno1UQv/n/Hegp++a2xBWJL1lJarnKD3SWaljD+0z1ztqxuKyQ==} resolution: {integrity: sha512-Y7wLWcrLUXwk2noSka166byGCvhMtDRpgHdzCno1UQv/n/Hegp++a2xBWJL1lJarnKD3SWaljD+0z1ztqxuKyQ==}
dev: true dev: true
/git-up/4.0.5: /git-up/6.0.0:
resolution: {integrity: sha512-YUvVDg/vX3d0syBsk/CKUTib0srcQME0JyHkL5BaYdwLsiCslPWmDSi8PUMo9pXYjrryMcmsCoCgsTpSCJEQaA==} resolution: {integrity: sha512-6RUFSNd1c/D0xtGnyWN2sxza2bZtZ/EmI9448n6rCZruFwV/ezeEn2fJP7XnUQGwf0RAtd/mmUCbtH6JPYA2SA==}
dependencies: dependencies:
is-ssh: 1.4.0 is-ssh: 1.4.0
parse-url: 6.0.2 parse-url: 7.0.2
dev: true dev: true
/git-url-parse/11.6.0: /git-url-parse/12.0.0:
resolution: {integrity: sha512-WWUxvJs5HsyHL6L08wOusa/IXYtMuCAhrMmnTjQPpBU0TTHyDhnOATNH3xNQz7YOQUsqIIPTGr4xiVti1Hsk5g==} resolution: {integrity: sha512-I6LMWsxV87vysX1WfsoglXsXg6GjQRKq7+Dgiseo+h0skmp5Hp2rzmcEIRQot9CPA+uzU7x1x7jZdqvTFGnB+Q==}
dependencies: dependencies:
git-up: 4.0.5 git-up: 6.0.0
dev: true dev: true
/glob-parent/5.1.2: /glob-parent/5.1.2:
@@ -5981,18 +5991,18 @@ packages:
responselike: 2.0.1 responselike: 2.0.1
dev: true dev: true
/got/12.1.0: /got/12.2.0:
resolution: {integrity: sha512-hBv2ty9QN2RdbJJMK3hesmSkFTjVIHyIDDbssCKnSmq62edGgImJWD10Eb1k77TiV1bxloxqcFAVK8+9pkhOig==} resolution: {integrity: sha512-A81ll5Z8wzeCmSdIlWVMDWFKDo82v2nmOaMZDQNHKGInNqDBcle+CSb6BBiZcn/Aiefz/kSpo520WBKi9QAO/A==}
engines: {node: '>=14.16'} engines: {node: '>=14.16'}
dependencies: dependencies:
'@sindresorhus/is': 4.6.0 '@sindresorhus/is': 5.3.0
'@szmarczak/http-timer': 5.0.1 '@szmarczak/http-timer': 5.0.1
'@types/cacheable-request': 6.0.2 '@types/cacheable-request': 6.0.2
'@types/responselike': 1.0.0 '@types/responselike': 1.0.0
cacheable-lookup: 6.0.4 cacheable-lookup: 6.0.4
cacheable-request: 7.0.2 cacheable-request: 7.0.2
decompress-response: 6.0.0 decompress-response: 6.0.0
form-data-encoder: 1.7.1 form-data-encoder: 2.0.1
get-stream: 6.0.1 get-stream: 6.0.1
http2-wrapper: 2.1.11 http2-wrapper: 2.1.11
lowercase-keys: 3.0.0 lowercase-keys: 3.0.0
@@ -8026,7 +8036,7 @@ packages:
resolution: {integrity: sha512-NHDDGYudnvRutt/VhKFlX26IotXe1w0cmkDm6JGquh5bz/bDTw0LufSmH/GxTjEdpHEO+bVKFTwdrcGa/9XlKQ==} resolution: {integrity: sha512-NHDDGYudnvRutt/VhKFlX26IotXe1w0cmkDm6JGquh5bz/bDTw0LufSmH/GxTjEdpHEO+bVKFTwdrcGa/9XlKQ==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
dependencies: dependencies:
type-fest: 2.17.0 type-fest: 2.18.0
dev: true dev: true
/node-addon-api/1.7.2: /node-addon-api/1.7.2:
@@ -8323,7 +8333,7 @@ packages:
bl: 5.0.0 bl: 5.0.0
chalk: 5.0.1 chalk: 5.0.1
cli-cursor: 4.0.0 cli-cursor: 4.0.0
cli-spinners: 2.6.1 cli-spinners: 2.7.0
is-interactive: 2.0.0 is-interactive: 2.0.0
is-unicode-supported: 1.2.0 is-unicode-supported: 1.2.0
log-symbols: 5.1.0 log-symbols: 5.1.0
@@ -8484,7 +8494,7 @@ packages:
resolution: {integrity: sha512-hySwcV8RAWeAfPsXb9/HGSPn8lwDnv6fabH+obUZKX169QknRkRhPxd1yMubpKDskLFATkl3jHpNtVtDPFA0Wg==} resolution: {integrity: sha512-hySwcV8RAWeAfPsXb9/HGSPn8lwDnv6fabH+obUZKX169QknRkRhPxd1yMubpKDskLFATkl3jHpNtVtDPFA0Wg==}
engines: {node: '>=14.16'} engines: {node: '>=14.16'}
dependencies: dependencies:
got: 12.1.0 got: 12.2.0
registry-auth-token: 5.0.1 registry-auth-token: 5.0.1
registry-url: 6.0.1 registry-url: 6.0.1
semver: 7.3.7 semver: 7.3.7
@@ -8538,22 +8548,19 @@ packages:
resolution: {integrity: sha512-twN+njEipszzlMJd4ONUYgSfZPDxgHhT9Ahed5uTigpQn90FggW4SA/AIPq/6a149fTbE9qBEcSwE3FAEp6wQQ==} resolution: {integrity: sha512-twN+njEipszzlMJd4ONUYgSfZPDxgHhT9Ahed5uTigpQn90FggW4SA/AIPq/6a149fTbE9qBEcSwE3FAEp6wQQ==}
dev: true dev: true
/parse-path/4.0.4: /parse-path/5.0.0:
resolution: {integrity: sha512-Z2lWUis7jlmXC1jeOG9giRO2+FsuyNipeQ43HAjqAZjwSe3SEf+q/84FGPHoso3kyntbxa4c4i77t3m6fGf8cw==} resolution: {integrity: sha512-qOpH55/+ZJ4jUu/oLO+ifUKjFPNZGfnPJtzvGzKN/4oLMil5m9OH4VpOj6++9/ytJcfks4kzH2hhi87GL/OU9A==}
dependencies: dependencies:
is-ssh: 1.4.0 protocols: 2.0.1
protocols: 1.4.8
qs: 6.11.0
query-string: 6.14.1
dev: true dev: true
/parse-url/6.0.2: /parse-url/7.0.2:
resolution: {integrity: sha512-uCSjOvD3T+6B/sPWhR+QowAZcU/o4bjPrVBQBGFxcDF6J6FraCGIaDBsdoQawiaaAVdHvtqBe3w3vKlfBKySOQ==} resolution: {integrity: sha512-PqO4Z0eCiQ08Wj6QQmrmp5YTTxpYfONdOEamrtvK63AmzXpcavIVQubGHxOEwiIoDZFb8uDOoQFS0NCcjqIYQg==}
dependencies: dependencies:
is-ssh: 1.4.0 is-ssh: 1.4.0
normalize-url: 6.1.0 normalize-url: 6.1.0
parse-path: 4.0.4 parse-path: 5.0.0
protocols: 1.4.8 protocols: 2.0.1
dev: true dev: true
/parse5/6.0.1: /parse5/6.0.1:
@@ -8873,10 +8880,6 @@ packages:
engines: {node: '>=4'} engines: {node: '>=4'}
dev: true dev: true
/protocols/1.4.8:
resolution: {integrity: sha512-IgjKyaUSjsROSO8/D49Ab7hP8mJgTYcqApOqdPhLoPxAplXmkp+zRvsrSQjFn5by0rhm4VH0GAUELIPpx7B1yg==}
dev: true
/protocols/2.0.1: /protocols/2.0.1:
resolution: {integrity: sha512-/XJ368cyBJ7fzLMwLKv1e4vLxOju2MNAIokcr7meSaNcVbWz/CPcW22cP04mwxOErdA5mwjA8Q6w/cdAQxVn7Q==} resolution: {integrity: sha512-/XJ368cyBJ7fzLMwLKv1e4vLxOju2MNAIokcr7meSaNcVbWz/CPcW22cP04mwxOErdA5mwjA8Q6w/cdAQxVn7Q==}
dev: true dev: true
@@ -8964,28 +8967,11 @@ packages:
dependencies: dependencies:
side-channel: 1.0.4 side-channel: 1.0.4
/qs/6.11.0:
resolution: {integrity: sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==}
engines: {node: '>=0.6'}
dependencies:
side-channel: 1.0.4
dev: true
/qs/6.5.3: /qs/6.5.3:
resolution: {integrity: sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==} resolution: {integrity: sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==}
engines: {node: '>=0.6'} engines: {node: '>=0.6'}
dev: true dev: true
/query-string/6.14.1:
resolution: {integrity: sha512-XDxAeVmpfu1/6IjyT/gXHOl+S0vQ9owggJ30hhWKdHAsNPOcasn5o9BW0eejZqL2e4vMjhAxoW3jVHcD6mbcYw==}
engines: {node: '>=6'}
dependencies:
decode-uri-component: 0.2.0
filter-obj: 1.1.0
split-on-first: 1.1.0
strict-uri-encode: 2.0.0
dev: true
/queue-microtask/1.2.3: /queue-microtask/1.2.3:
resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
@@ -9388,8 +9374,8 @@ packages:
unist-util-visit: 4.1.0 unist-util-visit: 4.1.0
dev: true dev: true
/release-it/15.1.3: /release-it/15.2.0:
resolution: {integrity: sha512-pdW9Ua59S3upm2wwzrWiQK8N5vXazNBBYk/UhpVf0faHV6mmY8GunS1ZzawSNi4fOOx55zSQFj2IHkOgfBxNUg==} resolution: {integrity: sha512-zVtk/+BSX941e9lR2dhWGQhOIVdr98Fifgel4xUnsJVycU0uTtalOUhjoZM2jyDgcD22idmuDVgvgOTl9IyJ/g==}
engines: {node: '>=14.9'} engines: {node: '>=14.9'}
hasBin: true hasBin: true
dependencies: dependencies:
@@ -9400,9 +9386,9 @@ packages:
cosmiconfig: 7.0.1 cosmiconfig: 7.0.1
execa: 6.1.0 execa: 6.1.0
form-data: 4.0.0 form-data: 4.0.0
git-url-parse: 11.6.0 git-url-parse: 12.0.0
globby: 13.1.2 globby: 13.1.2
got: 12.1.0 got: 12.2.0
inquirer: 9.0.2 inquirer: 9.0.2
is-ci: 3.0.1 is-ci: 3.0.1
lodash: 4.17.21 lodash: 4.17.21
@@ -9607,6 +9593,14 @@ packages:
fsevents: 2.3.2 fsevents: 2.3.2
dev: true dev: true
/rollup/2.77.2:
resolution: {integrity: sha512-m/4YzYgLcpMQbxX3NmAqDvwLATZzxt8bIegO78FZLl+lAgKJBd1DRAOeEiZcKOIOPjxE6ewHWHNgGEalFXuz1g==}
engines: {node: '>=10.0.0'}
hasBin: true
optionalDependencies:
fsevents: 2.3.2
dev: true
/run-async/2.4.1: /run-async/2.4.1:
resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==} resolution: {integrity: sha512-tvVnVv01b8c1RrA6Ep7JkStj85Guv/YrMcwqYQnwjsAS2cTmmPGBBjAjpCW7RrSodNSoE2/qg9O4bceNvUuDgQ==}
engines: {node: '>=0.12.0'} engines: {node: '>=0.12.0'}
@@ -10022,11 +10016,6 @@ packages:
resolution: {integrity: sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==} resolution: {integrity: sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==}
dev: true dev: true
/split-on-first/1.1.0:
resolution: {integrity: sha512-43ZssAJaMusuKWL8sKUBQXHWOpq8d6CfN/u1p4gUzfJkM05C8rxTmYrkIPTXapZpORA6LkkzcUulJ8FqA7Uudw==}
engines: {node: '>=6'}
dev: true
/split-string/3.1.0: /split-string/3.1.0:
resolution: {integrity: sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==} resolution: {integrity: sha512-NzNVhJDYpwceVVii8/Hu6DKfD2G+NrQHlS/V/qgv763EYudVwEcMQNxd2lh+0VrUByXN/oJkl5grOhYWvQUYiw==}
engines: {node: '>=0.10.0'} engines: {node: '>=0.10.0'}
@@ -10085,11 +10074,6 @@ packages:
mixme: 0.5.4 mixme: 0.5.4
dev: true dev: true
/strict-uri-encode/2.0.0:
resolution: {integrity: sha512-QwiXZgpRcKkhTj2Scnn++4PKtWsH0kpzZ62L2R6c/LUVYv7hVnZqcg2+sMuT6R7Jusu1vviK/MFsu6kNJfWlEQ==}
engines: {node: '>=4'}
dev: true
/string-width/4.2.3: /string-width/4.2.3:
resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==}
engines: {node: '>=8'} engines: {node: '>=8'}
@@ -10209,8 +10193,8 @@ packages:
engines: {node: '>=8'} engines: {node: '>=8'}
dev: true dev: true
/strtok3/7.0.0-alpha.8: /strtok3/7.0.0-alpha.9:
resolution: {integrity: sha512-u+k19v+rTxBjGYxncRQjGvZYwYvEd0uP3D+uHKe/s4WB1eXS5ZwpZsTlBu5xSS4zEd89mTXECXg6WW3FSeV8cA==} resolution: {integrity: sha512-G8WxjBFjTZ77toVElv1i7k3jCXNkBB14FVaZ/6LIOka/WGo4La5XHLrU7neFVLdKbXESZf4BejVKZu5maOmocA==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
dependencies: dependencies:
'@tokenizer/token': 0.3.0 '@tokenizer/token': 0.3.0
@@ -10223,8 +10207,8 @@ packages:
inline-style-parser: 0.1.1 inline-style-parser: 0.1.1
dev: true dev: true
/sucrase/3.24.0: /sucrase/3.25.0:
resolution: {integrity: sha512-SevqflhW356TKEyWjFHg2e5f3eH+5rzmsMJxrVMDvZIEHh/goYrpzDGA6APEj4ME9MdGm8oNgIzi1eF3c3dDQA==} resolution: {integrity: sha512-WxTtwEYXSmZArPGStGBicyRsg5TBEFhT5b7N+tF+zauImP0Acy+CoUK0/byJ8JNPK/5lbpWIVuFagI4+0l85QQ==}
engines: {node: '>=8'} engines: {node: '>=8'}
hasBin: true hasBin: true
dependencies: dependencies:
@@ -10444,8 +10428,8 @@ packages:
resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==} resolution: {integrity: sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==}
engines: {node: '>=0.6'} engines: {node: '>=0.6'}
/token-types/5.0.0-alpha.2: /token-types/5.0.0-alpha.3:
resolution: {integrity: sha512-EsG9UxAW4M6VATrEEjhPFTKEUi1OiJqTUMIZOGBN49fGxYjZB36k0p7to3HZSmWRoHm1QfZgrg3e02fpqAt5fQ==} resolution: {integrity: sha512-GWGtybxmoWRB1pNghnsNBftIfbzGLiTnytq1XKG/0ZQnLmSqgUA4x06dTvqRem5ZuXI0LY3zkNxl2/RG6QwJkA==}
engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
dependencies: dependencies:
'@tokenizer/token': 0.3.0 '@tokenizer/token': 0.3.0
@@ -10517,8 +10501,8 @@ packages:
/tslib/2.4.0: /tslib/2.4.0:
resolution: {integrity: sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==} resolution: {integrity: sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==}
/tsup/6.1.3_typescript@4.7.4: /tsup/6.2.1_typescript@4.7.4:
resolution: {integrity: sha512-eRpBnbfpDFng+EJNTQ90N7QAf4HAGGC7O3buHIjroKWK7D1ibk9/YnR/3cS8HsMU5T+6Oi+cnF+yU5WmCnB//Q==} resolution: {integrity: sha512-KhBhCqVA3bHrIWhkcqTUA7R69H05IcBlHEtCVLEu42XDGUzz+bDqCcfu5PwpkKJ8DqK5tpdgM/qmyk4DdUbkZw==}
engines: {node: '>=14'} engines: {node: '>=14'}
hasBin: true hasBin: true
peerDependencies: peerDependencies:
@@ -10533,19 +10517,19 @@ packages:
typescript: typescript:
optional: true optional: true
dependencies: dependencies:
bundle-require: 3.0.4_esbuild@0.14.50 bundle-require: 3.0.4_esbuild@0.14.51
cac: 6.7.12 cac: 6.7.12
chokidar: 3.5.3 chokidar: 3.5.3
debug: 4.3.4 debug: 4.3.4
esbuild: 0.14.50 esbuild: 0.14.51
execa: 5.1.1 execa: 5.1.1
globby: 11.1.0 globby: 11.1.0
joycon: 3.1.1 joycon: 3.1.1
postcss-load-config: 3.1.4 postcss-load-config: 3.1.4
resolve-from: 5.0.0 resolve-from: 5.0.0
rollup: 2.77.0 rollup: 2.77.2
source-map: 0.8.0-beta.0 source-map: 0.8.0-beta.0
sucrase: 3.24.0 sucrase: 3.25.0
tree-kill: 1.2.2 tree-kill: 1.2.2
typescript: 4.7.4 typescript: 4.7.4
transitivePeerDependencies: transitivePeerDependencies:
@@ -10651,6 +10635,11 @@ packages:
resolution: {integrity: sha512-U+g3/JVXnOki1kLSc+xZGPRll3Ah9u2VIG6Sn9iH9YX6UkPERmt6O/0fIyTgsd2/whV0+gAaHAg8fz6sG1QzMA==} resolution: {integrity: sha512-U+g3/JVXnOki1kLSc+xZGPRll3Ah9u2VIG6Sn9iH9YX6UkPERmt6O/0fIyTgsd2/whV0+gAaHAg8fz6sG1QzMA==}
engines: {node: '>=12.20'} engines: {node: '>=12.20'}
/type-fest/2.18.0:
resolution: {integrity: sha512-pRS+/yrW5TjPPHNOvxhbNZexr2bS63WjrMU8a+VzEBhUi9Tz1pZeD+vQz3ut0svZ46P+SRqMEPnJmk2XnvNzTw==}
engines: {node: '>=12.20'}
dev: true
/type-is/1.6.18: /type-is/1.6.18:
resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==} resolution: {integrity: sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==}
engines: {node: '>= 0.6'} engines: {node: '>= 0.6'}