├── .env.example
├── .commitlintrc.json
├── herald
├── utils.go
├── join_responses.go
├── role_responses.go
├── handlers.go
├── join_commands.go
├── join_modals.go
├── role_modals.go
├── join_utils.go
├── role_commands.go
├── herald.go
├── role_utils.go
├── models.go
├── join_components.go
└── role_components.go
├── .husky
└── commit-msg
├── docker-compose.yml
├── interactor
├── constants.go
├── interactor.go
├── utils.go
├── structs.go
├── modal.go
├── context.go
├── modal_utils.go
├── applicationcommand.go
├── messagecomponent.go
├── modal_options.go
├── applicationcommand_structs.go
├── modal_structs.go
├── messagecomponent_structs.ts.go
├── messagecomponent_options.go
├── handlers.go
├── applicationcommand_utils.go
└── applicationcommand_options.go
├── .changeset
├── config.json
└── README.md
├── .dockerignore
├── CHANGELOG.md
├── package.json
├── Dockerfile
├── go.mod
├── db
└── db.go
├── .github
└── workflows
│ ├── test.yml
│ ├── changesets.yml
│ └── docker.yml
├── main.go
├── .gitignore
├── discord
├── discord.go
└── sync.go
├── LICENSE
├── config
└── config.go
├── core
└── core.go
├── README.md
├── go.sum
└── yarn.lock
/.env.example:
--------------------------------------------------------------------------------
1 | DISCORD_TOKEN=
--------------------------------------------------------------------------------
/.commitlintrc.json:
--------------------------------------------------------------------------------
1 | {
2 | "extends": ["@commitlint/config-conventional"]
3 | }
--------------------------------------------------------------------------------
/herald/utils.go:
--------------------------------------------------------------------------------
1 | package herald
2 |
3 | func ptr[T any](v T) *T {
4 | return &v
5 | }
6 |
--------------------------------------------------------------------------------
/.husky/commit-msg:
--------------------------------------------------------------------------------
1 | #!/usr/bin/env sh
2 | . "$(dirname -- "$0")/_/husky.sh"
3 |
4 | yarn commitlint --edit $1
5 |
--------------------------------------------------------------------------------
/docker-compose.yml:
--------------------------------------------------------------------------------
1 | version: '3.8'
2 |
3 | services:
4 | digbot:
5 | build: .
6 | environment:
7 | - DISCORD_TOKEN
8 | volumes:
9 | - ./data:/data
--------------------------------------------------------------------------------
/interactor/constants.go:
--------------------------------------------------------------------------------
1 | package interactor
2 |
3 | const idDelimiter = ":"
4 |
5 | const (
6 | ColorPrimary = 52421
7 | ColorSecondary = 7895160
8 | ColorError = 12845056
9 | ColorWarning = 13936130
10 | ColorSuccess = 4434775
11 | )
12 |
--------------------------------------------------------------------------------
/.changeset/config.json:
--------------------------------------------------------------------------------
1 | {
2 | "$schema": "https://unpkg.com/@changesets/config@2.3.1/schema.json",
3 | "changelog": [
4 | "@changesets/changelog-github",
5 | {
6 | "repo": "dignityofwar/digbot"
7 | }
8 | ],
9 | "commit": false,
10 | "access": "public",
11 | "baseBranch": "main"
12 | }
13 |
--------------------------------------------------------------------------------
/.dockerignore:
--------------------------------------------------------------------------------
1 | # Ignore local npm modules and logs
2 | node_modules/
3 | npm-debug.log
4 |
5 | # Ignore all md files
6 | *.md
7 |
8 | # Ignore all hidden files (git, travis, docker, etc)
9 | .*
10 |
11 | # Ignore all docker files
12 | Dockerfile
13 | docker-compose.yml
14 |
15 | dist/
16 | data/
17 | temp/
18 |
--------------------------------------------------------------------------------
/CHANGELOG.md:
--------------------------------------------------------------------------------
1 | # digbot
2 |
3 | ## 4.0.0
4 |
5 | ### Major Changes
6 |
7 | - [#127](https://github.com/dignityofwar/digbot/pull/127) [`1141ebf`](https://github.com/dignityofwar/digbot/commit/1141ebf3fed28da1ecbd545fdcb92b456e335a40) Thanks [@microwavekonijn](https://github.com/microwavekonijn)! - refactor: switched to go
8 |
--------------------------------------------------------------------------------
/interactor/interactor.go:
--------------------------------------------------------------------------------
1 | package interactor
2 |
3 | import (
4 | "github.com/dignityofwar/digbot/core"
5 | "github.com/dignityofwar/digbot/discord"
6 | "log"
7 | )
8 |
9 | var Module = core.Module{
10 | Name: "Interactor",
11 | OnInit: func() {
12 | log.Println("Setting up Interactor")
13 |
14 | discord.Discord.AddHandler(interactionHandler)
15 | },
16 | }
17 |
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "digbot",
3 | "private": true,
4 | "version": "4.0.0",
5 | "scripts": {
6 | "prepare": "husky install"
7 | },
8 | "dependencies": {
9 | "@changesets/changelog-github": "^0.4.8",
10 | "@changesets/cli": "^2.26.2",
11 | "@commitlint/cli": "^17.7.1",
12 | "@commitlint/config-conventional": "^17.7.0",
13 | "husky": "^8.0.3"
14 | }
15 | }
16 |
--------------------------------------------------------------------------------
/Dockerfile:
--------------------------------------------------------------------------------
1 | # syntax=docker/dockerfile:1
2 | FROM golang:1.21 AS build
3 |
4 | WORKDIR /app
5 |
6 | COPY go.mod go.sum ./
7 | RUN go mod download
8 |
9 | COPY . .
10 |
11 | RUN CGO_ENABLED=1 GOOS=linux go build -o /digbot
12 |
13 |
14 | FROM gcr.io/distroless/base-debian12 AS release
15 |
16 | WORKDIR /
17 |
18 | COPY --from=build /digbot /digbot
19 |
20 | VOLUME /data
21 |
22 | USER nonroot:nonroot
23 |
24 | ENTRYPOINT ["/digbot"]
25 |
--------------------------------------------------------------------------------
/.changeset/README.md:
--------------------------------------------------------------------------------
1 | # Changesets
2 |
3 | Hello and welcome! This folder has been automatically generated by `@changesets/cli`, a build tool that works
4 | with multi-package repos, or single-package repos to help you version and publish your code. You can
5 | find the full documentation for it [in our repository](https://github.com/changesets/changesets)
6 |
7 | We have a quick list of common questions to get you started engaging with this project in
8 | [our documentation](https://github.com/changesets/changesets/blob/main/docs/common-questions.md)
9 |
--------------------------------------------------------------------------------
/go.mod:
--------------------------------------------------------------------------------
1 | module github.com/dignityofwar/digbot
2 |
3 | go 1.21
4 |
5 | require (
6 | github.com/bwmarrin/discordgo v0.27.1
7 | github.com/joho/godotenv v1.5.1
8 | gorm.io/driver/sqlite v1.5.3
9 | gorm.io/gorm v1.25.4
10 | )
11 |
12 | require (
13 | github.com/gorilla/websocket v1.5.0 // indirect
14 | github.com/jinzhu/inflection v1.0.0 // indirect
15 | github.com/jinzhu/now v1.1.5 // indirect
16 | github.com/mattn/go-sqlite3 v1.14.17 // indirect
17 | golang.org/x/crypto v0.12.0 // indirect
18 | golang.org/x/sys v0.11.0 // indirect
19 | )
20 |
--------------------------------------------------------------------------------
/db/db.go:
--------------------------------------------------------------------------------
1 | package db
2 |
3 | import (
4 | "github.com/dignityofwar/digbot/config"
5 | "github.com/dignityofwar/digbot/core"
6 | "gorm.io/driver/sqlite"
7 | "gorm.io/gorm"
8 | "gorm.io/gorm/logger"
9 | )
10 |
11 | var Connection *gorm.DB
12 |
13 | var Module = core.Module{
14 | Name: "DB",
15 | OnInit: func() {
16 | var err error
17 |
18 | Connection, err = gorm.Open(sqlite.Open(config.DB.FilePath), &gorm.Config{
19 | Logger: logger.Default.LogMode(logger.Silent),
20 | })
21 |
22 | if err != nil {
23 | panic(err)
24 | }
25 | },
26 | }
27 |
--------------------------------------------------------------------------------
/.github/workflows/test.yml:
--------------------------------------------------------------------------------
1 | name: CI
2 |
3 | on:
4 | push:
5 | branches:
6 | - main
7 | pull_request:
8 |
9 | jobs:
10 | compile-test:
11 | runs-on: ubuntu-latest
12 |
13 | strategy:
14 | matrix:
15 | golang-version: [ '1.21' ]
16 |
17 | steps:
18 | - uses: actions/checkout@v2
19 |
20 | - name: Setup Go ${{ matrix.golang-version }}
21 | uses: actions/setup-go@v4
22 | with:
23 | go-version: ${{ matrix.golang-version }}
24 |
25 | - name: Compile
26 | run: go build -v ./...
27 |
--------------------------------------------------------------------------------
/main.go:
--------------------------------------------------------------------------------
1 | package main
2 |
3 | import (
4 | "github.com/dignityofwar/digbot/config"
5 | "github.com/dignityofwar/digbot/core"
6 | "github.com/dignityofwar/digbot/db"
7 | "github.com/dignityofwar/digbot/discord"
8 | "github.com/dignityofwar/digbot/herald"
9 | "github.com/dignityofwar/digbot/interactor"
10 | "log"
11 | )
12 |
13 | func main() {
14 | app := core.CreateApp([]core.Module{
15 | config.Module,
16 | db.Module,
17 | discord.Module,
18 | interactor.Module,
19 | herald.Module,
20 | })
21 | app.Start()
22 |
23 | app.AwaitExit()
24 |
25 | log.Println("Goodbye :)")
26 | }
27 |
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # If you prefer the allow list template instead of the deny list, see community template:
2 | # https://github.com/github/gitignore/blob/main/community/Golang/Go.AllowList.gitignore
3 | #
4 | # Binaries for programs and plugins
5 | *.exe
6 | *.exe~
7 | *.dll
8 | *.so
9 | *.dylib
10 |
11 | # Test binary, built with `go test -c`
12 | *.test
13 |
14 | # Output of the go coverage tool, specifically when used with LiteIDE
15 | *.out
16 |
17 | # Dependency directories (remove the comment below to include it)
18 | vendor/
19 |
20 | # Go workspace file
21 | go.work
22 |
23 | node_modules/
24 | data/
25 | .env
--------------------------------------------------------------------------------
/interactor/utils.go:
--------------------------------------------------------------------------------
1 | package interactor
2 |
3 | import "reflect"
4 |
5 | func captureError(values []reflect.Value) error {
6 | if l := len(values); l > 0 {
7 | if err := values[l-1]; !err.IsZero() {
8 | if err, ok := err.Interface().(error); ok {
9 | return err
10 | }
11 | }
12 | }
13 |
14 | return nil
15 | }
16 |
17 | func mapToArray[T any](m map[string]T) []T {
18 | s := make([]T, 0, len(m))
19 |
20 | for _, v := range m {
21 | s = append(s, v)
22 | }
23 |
24 | return s
25 | }
26 |
27 | func mapArray[T any, S any](s []T, m func(T) S) []S {
28 | a := make([]S, len(s))
29 |
30 | for i, v := range s {
31 | a[i] = m(v)
32 | }
33 |
34 | return a
35 | }
36 |
--------------------------------------------------------------------------------
/interactor/structs.go:
--------------------------------------------------------------------------------
1 | package interactor
2 |
3 | import "github.com/bwmarrin/discordgo"
4 |
5 | type Mentionable struct {
6 | id string
7 | resolvedUsers map[string]*discordgo.User
8 | resolvedMembers map[string]*discordgo.Member
9 | resolvedRoles map[string]*discordgo.Role
10 | }
11 |
12 | func (m *Mentionable) User() (*discordgo.User, bool) {
13 | user, ok := m.resolvedUsers[m.id]
14 | return user, ok
15 | }
16 |
17 | func (m *Mentionable) Member() (*discordgo.Member, bool) {
18 | member, ok := m.resolvedMembers[m.id]
19 | return member, ok
20 | }
21 |
22 | func (m *Mentionable) Role() (*discordgo.Role, bool) {
23 | role, ok := m.resolvedRoles[m.id]
24 | return role, ok
25 | }
26 |
--------------------------------------------------------------------------------
/herald/join_responses.go:
--------------------------------------------------------------------------------
1 | package herald
2 |
3 | import (
4 | "github.com/bwmarrin/discordgo"
5 | "github.com/dignityofwar/digbot/interactor"
6 | )
7 |
8 | var joinResponseNotFound = &discordgo.InteractionResponseData{
9 | Embeds: []*discordgo.MessageEmbed{{
10 | Description: "Could not update message as it does not exist",
11 | Color: interactor.ColorError,
12 | }},
13 | Flags: discordgo.MessageFlagsEphemeral,
14 | }
15 |
16 | var joinResponseNotificationUpdated = &discordgo.MessageEmbed{
17 | Description: "Join message updated",
18 | Color: interactor.ColorSuccess,
19 | }
20 |
21 | var joinResponseNotificationFailed = &discordgo.MessageEmbed{
22 | Description: "Update failed as there already exist an message for this join + channel combination",
23 | Color: interactor.ColorError,
24 | }
25 |
--------------------------------------------------------------------------------
/herald/role_responses.go:
--------------------------------------------------------------------------------
1 | package herald
2 |
3 | import (
4 | "github.com/bwmarrin/discordgo"
5 | "github.com/dignityofwar/digbot/interactor"
6 | )
7 |
8 | var roleResponseNotFound = &discordgo.InteractionResponseData{
9 | Embeds: []*discordgo.MessageEmbed{{
10 | Description: "Could not update message as it does not exist",
11 | Color: interactor.ColorError,
12 | }},
13 | Flags: discordgo.MessageFlagsEphemeral,
14 | }
15 |
16 | var roleResponseNotificationUpdated = &discordgo.MessageEmbed{
17 | Description: "Role message updated",
18 | Color: interactor.ColorSuccess,
19 | }
20 |
21 | var roleResponseNotificationFailed = &discordgo.MessageEmbed{
22 | Description: "Update failed as there already exist an message for this role + channel combination",
23 | Color: interactor.ColorError,
24 | }
25 |
--------------------------------------------------------------------------------
/discord/discord.go:
--------------------------------------------------------------------------------
1 | package discord
2 |
3 | import (
4 | "github.com/bwmarrin/discordgo"
5 | "github.com/dignityofwar/digbot/config"
6 | "github.com/dignityofwar/digbot/core"
7 | "log"
8 | )
9 |
10 | var Discord *discordgo.Session
11 |
12 | var Module = core.Module{
13 | Name: "Discord",
14 | OnInit: func() {
15 | log.Println("Setting up Discord")
16 |
17 | var err error
18 | Discord, err = discordgo.New("Bot " + config.Discord.Token)
19 | Discord.Identify.Intents = 14219
20 |
21 | if err != nil {
22 | log.Fatalf("Invalid bot parameters: %v", err)
23 | }
24 |
25 | initSync()
26 | },
27 | OnBoot: func() {
28 | log.Println("Connecting to Discord")
29 |
30 | if err := Discord.Open(); err != nil {
31 | log.Fatalf("Failed to open Discord session: %v", err)
32 | }
33 | },
34 | OnDestroy: func() {
35 | Discord.Close()
36 | },
37 | }
38 |
--------------------------------------------------------------------------------
/.github/workflows/changesets.yml:
--------------------------------------------------------------------------------
1 | name: Release
2 |
3 | on:
4 | push:
5 | branches:
6 | - main
7 |
8 | concurrency: ${{ github.workflow }}-${{ github.ref }}
9 |
10 | jobs:
11 | release:
12 | name: Release
13 | if: github.repository == 'dignityofwar/digbot'
14 | runs-on: ubuntu-latest
15 | environment: changesets
16 | steps:
17 | - uses: actions/checkout@v3
18 | with:
19 | ssh-key: "${{ secrets.COMMIT_KEY }}"
20 | - uses: actions/setup-node@v3
21 | with:
22 | node-version: 20.x
23 | cache: 'yarn'
24 | - run: yarn --frozen-lockfile
25 | - name: Create PR or release
26 | uses: changesets/action@v1
27 | with:
28 | commit: 'chore: release'
29 | title: 'Release Candidate'
30 | env:
31 | GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
32 |
--------------------------------------------------------------------------------
/interactor/modal.go:
--------------------------------------------------------------------------------
1 | package interactor
2 |
3 | import (
4 | "errors"
5 | "github.com/bwmarrin/discordgo"
6 | "log"
7 | )
8 |
9 | var modalHandlers = make(map[string]*modalDescriptor)
10 |
11 | func RegisterModal(options *ModalOptions) error {
12 | if _, found := modalHandlers[options.ModalID]; found {
13 | return errors.New("modalID needs to be unique")
14 | }
15 |
16 | if modal, err := options.convert(); err == nil {
17 | modalHandlers[options.ModalID] = modal
18 | } else {
19 | return err
20 | }
21 |
22 | log.Println("Registered modal: " + options.ModalID)
23 |
24 | return nil
25 | }
26 |
27 | func RegisterModals(options ...*ModalOptions) error {
28 | for _, option := range options {
29 | if err := RegisterModal(option); err != nil {
30 | return err
31 | }
32 | }
33 |
34 | return nil
35 | }
36 |
37 | func MakeModal(modal *Modal) *discordgo.InteractionResponse {
38 | return modalHandlers[modal.ModalID].make(modal)
39 | }
40 |
--------------------------------------------------------------------------------
/interactor/context.go:
--------------------------------------------------------------------------------
1 | package interactor
2 |
3 | import "github.com/bwmarrin/discordgo"
4 |
5 | type Context struct {
6 | Session *discordgo.Session
7 | Interaction *discordgo.Interaction
8 | }
9 |
10 | func (c *Context) Respond(resp *discordgo.InteractionResponse) error {
11 | return c.Session.InteractionRespond(c.Interaction, resp)
12 | }
13 |
14 | func (c *Context) UpsertRespond(data *discordgo.InteractionResponseData) error {
15 | if c.Interaction.Message == nil {
16 | return c.Session.InteractionRespond(c.Interaction, &discordgo.InteractionResponse{
17 | Type: discordgo.InteractionResponseChannelMessageWithSource,
18 | Data: data,
19 | })
20 | } else {
21 | return c.Session.InteractionRespond(c.Interaction, &discordgo.InteractionResponse{
22 | Type: discordgo.InteractionResponseUpdateMessage,
23 | Data: data,
24 | })
25 | }
26 | }
27 |
28 | func (c *Context) ModalRespond(modal *Modal) error {
29 | return c.Session.InteractionRespond(c.Interaction, MakeModal(modal))
30 | }
31 |
--------------------------------------------------------------------------------
/interactor/modal_utils.go:
--------------------------------------------------------------------------------
1 | package interactor
2 |
3 | import (
4 | "github.com/bwmarrin/discordgo"
5 | "reflect"
6 | "strconv"
7 | )
8 |
9 | func resolveTextInputLabel(t reflect.StructField) string {
10 | if label, has := t.Tag.Lookup("label"); has {
11 | return label
12 | }
13 |
14 | return t.Name
15 | }
16 |
17 | func resolveTextInputStyle(t reflect.StructField) discordgo.TextInputStyle {
18 | switch t.Tag.Get("style") {
19 | case "":
20 | return discordgo.TextInputShort
21 | case "short":
22 | return discordgo.TextInputShort
23 | case "paragraph":
24 | return discordgo.TextInputParagraph
25 | }
26 |
27 | panic("nope nope nope")
28 | }
29 |
30 | func resolveTextInputMinLength(t reflect.StructField) int {
31 | if min, err := strconv.Atoi(t.Tag.Get("min")); err != nil {
32 | return min
33 | }
34 |
35 | return 0
36 | }
37 |
38 | func resolveTextInputMaxLength(t reflect.StructField) int {
39 | if max, err := strconv.Atoi(t.Tag.Get("max")); err != nil {
40 | return max
41 | }
42 |
43 | return 0
44 | }
45 |
--------------------------------------------------------------------------------
/herald/handlers.go:
--------------------------------------------------------------------------------
1 | package herald
2 |
3 | import (
4 | "github.com/bwmarrin/discordgo"
5 | "github.com/dignityofwar/digbot/db"
6 | )
7 |
8 | func handleRoleAssign(s *discordgo.Session, m *discordgo.GuildMemberUpdate) {
9 | thisOne:
10 | for _, role := range m.Roles {
11 | for _, prev := range m.BeforeUpdate.Roles {
12 | if role == prev {
13 | continue thisOne
14 | }
15 | }
16 |
17 | var messages []RoleMessageEntity
18 |
19 | db.Connection.Where(&RoleMessageEntity{
20 | MessageEntity: MessageEntity{GuildID: m.GuildID},
21 | RoleID: role,
22 | }).Find(&messages)
23 |
24 | for _, message := range messages {
25 |
26 | message.send(s, m.Member)
27 | }
28 | }
29 | }
30 |
31 | func handleJoin(s *discordgo.Session, m *discordgo.GuildMemberAdd) {
32 | var messages []JoinMessageEntity
33 |
34 | db.Connection.Where(&JoinMessageEntity{
35 | MessageEntity: MessageEntity{GuildID: m.GuildID},
36 | }).Find(&messages)
37 |
38 | for _, message := range messages {
39 | message.send(s, m.Member)
40 | }
41 | }
42 |
--------------------------------------------------------------------------------
/interactor/applicationcommand.go:
--------------------------------------------------------------------------------
1 | package interactor
2 |
3 | import (
4 | "errors"
5 | "github.com/dignityofwar/digbot/discord"
6 | "log"
7 | )
8 |
9 | // TODO: split when CommandType is supported by discordgo
10 | var (
11 | commandHandlers = make(map[string]commandExecuteDescriptor)
12 | )
13 |
14 | func RegisterCommand(cmd Command, perms *CommandPermissions) (err error) {
15 | if discord.Discord.State.User == nil {
16 | return errors.New("cannot register command as Discord is not ready")
17 | }
18 |
19 | if perms == nil {
20 | perms = &CommandPermissions{}
21 | }
22 |
23 | ac, desc, err := cmd.compileCommand(perms)
24 |
25 | if _, found := commandHandlers[ac.Name]; found {
26 | return errors.New("command name needs to be unique")
27 | }
28 |
29 | if err != nil {
30 | return
31 | }
32 |
33 | res, err := discord.Discord.ApplicationCommandCreate(discord.Discord.State.User.ID, "", ac)
34 |
35 | if err != nil {
36 | return
37 | }
38 |
39 | log.Println("Registered command: " + ac.Name + "(" + res.Version + ")")
40 |
41 | commandHandlers[ac.Name] = desc
42 |
43 | return
44 | }
45 |
--------------------------------------------------------------------------------
/LICENSE:
--------------------------------------------------------------------------------
1 | MIT License
2 |
3 | Copyright (c) 2020 DIG Development Team
4 |
5 | Permission is hereby granted, free of charge, to any person obtaining a copy
6 | of this software and associated documentation files (the "Software"), to deal
7 | in the Software without restriction, including without limitation the rights
8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9 | copies of the Software, and to permit persons to whom the Software is
10 | furnished to do so, subject to the following conditions:
11 |
12 | The above copyright notice and this permission notice shall be included in all
13 | copies or substantial portions of the Software.
14 |
15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21 | SOFTWARE.
22 |
--------------------------------------------------------------------------------
/config/config.go:
--------------------------------------------------------------------------------
1 | package config
2 |
3 | import (
4 | "github.com/dignityofwar/digbot/core"
5 | "github.com/joho/godotenv"
6 | "log"
7 | "os"
8 | "reflect"
9 | )
10 |
11 | var (
12 | Discord struct {
13 | Token string `env:"DISCORD_TOKEN"`
14 | }
15 |
16 | DB struct {
17 | FilePath string `env:"DB_PATH" default:"./data/db.sqlite"`
18 | }
19 | )
20 |
21 | var Module = core.Module{
22 | Name: "Config",
23 | OnInit: func() {
24 | log.Println("Loading config")
25 |
26 | godotenv.Load()
27 |
28 | initConfigStruct(&Discord)
29 | initConfigStruct(&DB)
30 | },
31 | }
32 |
33 | func initConfigStruct(config any) {
34 | configValue := reflect.ValueOf(config).Elem()
35 | configType := configValue.Type()
36 |
37 | for i := 0; i < configType.NumField(); i++ {
38 | fieldValue := configValue.Field(i)
39 | fieldType := configType.Field(i)
40 |
41 | // TODO: Add parsing to support int, float, bool, arrays
42 | fieldValue.SetString(fieldType.Tag.Get("default"))
43 |
44 | if key, ok := fieldType.Tag.Lookup("env"); ok {
45 | if value := os.Getenv(key); value != "" {
46 | fieldValue.SetString(value)
47 | }
48 | }
49 | }
50 | }
51 |
--------------------------------------------------------------------------------
/interactor/messagecomponent.go:
--------------------------------------------------------------------------------
1 | package interactor
2 |
3 | import (
4 | "errors"
5 | "github.com/bwmarrin/discordgo"
6 | "log"
7 | "reflect"
8 | )
9 |
10 | // TODO: components per type questionmark?
11 | var messageComponentHandlers = make(map[string]*messageComponentDescriptor)
12 |
13 | func RegisterMessageComponent(cmp MessageComponent) error {
14 | cmpValue := reflect.ValueOf(cmp).Elem()
15 | cmpID := cmpValue.FieldByName("ComponentID").String()
16 |
17 | if _, found := messageComponentHandlers[cmpID]; found {
18 | return errors.New("componentID needs to be unique")
19 | }
20 |
21 | if desc, err := cmp.compileMessageComponent(); err == nil {
22 | messageComponentHandlers[cmpID] = desc
23 | } else {
24 | return err
25 | }
26 |
27 | log.Println("Registered component: " + cmpID)
28 |
29 | return nil
30 | }
31 |
32 | func RegisterMessageComponents(cmps ...MessageComponent) error {
33 | for _, cmp := range cmps {
34 | if err := RegisterMessageComponent(cmp); err != nil {
35 | return err
36 | }
37 | }
38 |
39 | return nil
40 | }
41 |
42 | func MakeMessageComponent(cmp *MessageComponentOptions) discordgo.MessageComponent {
43 | return messageComponentHandlers[cmp.ComponentID].ComponentGenerator(cmp)
44 | }
45 |
--------------------------------------------------------------------------------
/.github/workflows/docker.yml:
--------------------------------------------------------------------------------
1 | name: Release
2 |
3 | on:
4 | push:
5 | tags:
6 | - 'v*'
7 |
8 | jobs:
9 | build:
10 | name: Release Docker image
11 | if: github.repository == 'dignityofwar/digbot'
12 | runs-on: ubuntu-latest
13 | environment: docker
14 | steps:
15 | - uses: actions/checkout@v3
16 |
17 | - name: Set up QEMU
18 | uses: docker/setup-qemu-action@v2
19 |
20 | - name: Set up Docker Buildx
21 | uses: docker/setup-buildx-action@v2
22 |
23 | - name: Login to Docker Hub
24 | uses: docker/login-action@v2
25 | with:
26 | username: ${{ secrets.DOCKER_HUB_USERNAME }}
27 | password: ${{ secrets.DOCKER_HUB_ACCESS_TOKEN }}
28 |
29 | - name: Docker meta
30 | id: meta
31 | uses: docker/metadata-action@v4
32 | with:
33 | images: dignityofwar/digbot
34 | tags: |
35 | type=semver,pattern={{version}}
36 | type=semver,pattern={{major}}.{{minor}}
37 | type=semver,pattern={{major}}
38 |
39 | - name: Build and push
40 | id: docker_build
41 | uses: docker/build-push-action@v4
42 | with:
43 | push: true
44 | platforms: linux/amd64,linux/arm64
45 | tags: ${{ steps.meta.outputs.tags }}
46 | labels: ${{ steps.meta.outputs.labels }}
47 | cache-from: type=gha
48 | cache-to: type=gha,mode=max
49 |
50 | - name: Image digest
51 | run: echo ${{ steps.docker_build.outputs.digest }}
52 |
--------------------------------------------------------------------------------
/core/core.go:
--------------------------------------------------------------------------------
1 | package core
2 |
3 | import (
4 | "os"
5 | "os/signal"
6 | )
7 |
8 | type Module struct {
9 | Name string
10 | OnInit func()
11 | OnBoot func()
12 | OnDestroy func()
13 | OnShutdown func()
14 | }
15 |
16 | type App struct {
17 | modules []Module
18 | initHooks []func()
19 | bootBooks []func()
20 | destroyHooks []func()
21 | shutdownHooks []func()
22 | }
23 |
24 | func CreateApp(modules []Module) (a *App) {
25 | a = &App{
26 | modules: modules,
27 | }
28 |
29 | for _, module := range modules {
30 | if module.OnInit != nil {
31 | a.initHooks = append(a.initHooks, module.OnInit)
32 | }
33 |
34 | if module.OnBoot != nil {
35 | a.bootBooks = append(a.bootBooks, module.OnBoot)
36 | }
37 |
38 | if module.OnDestroy != nil {
39 | a.destroyHooks = append(a.destroyHooks, module.OnDestroy)
40 | }
41 |
42 | if module.OnShutdown != nil {
43 | a.shutdownHooks = append(a.shutdownHooks, module.OnShutdown)
44 | }
45 | }
46 |
47 | return
48 | }
49 |
50 | func (a *App) Start() {
51 | for _, initHook := range a.initHooks {
52 | initHook()
53 | }
54 |
55 | for _, bootHook := range a.bootBooks {
56 | bootHook()
57 | }
58 | }
59 |
60 | func (a *App) Close() {
61 | for _, destroyHook := range a.destroyHooks {
62 | destroyHook()
63 | }
64 |
65 | for _, shutdownHook := range a.shutdownHooks {
66 | shutdownHook()
67 | }
68 | }
69 |
70 | func (a *App) AwaitExit() {
71 | defer a.Close()
72 |
73 | stop := make(chan os.Signal, 1)
74 | signal.Notify(stop, os.Interrupt)
75 | <-stop
76 | }
77 |
--------------------------------------------------------------------------------
/herald/join_commands.go:
--------------------------------------------------------------------------------
1 | package herald
2 |
3 | import (
4 | "github.com/bwmarrin/discordgo"
5 | "github.com/dignityofwar/digbot/db"
6 | "github.com/dignityofwar/digbot/interactor"
7 | )
8 |
9 | type JoinMessageParams struct {
10 | Channel *discordgo.Channel `description:"Send message to" channels:"GuildText"`
11 | }
12 |
13 | var joinCommands = &interactor.SlashCommandGroup{
14 | Name: "join",
15 | Description: "Manage messages send when a new member joins the server",
16 | SubCommands: []interactor.CommandOptions{
17 | &interactor.SlashCommand{
18 | Name: "find",
19 | Description: "Find join message",
20 | Callback: func(ctx *interactor.CommandContext, params *JoinMessageParams) error {
21 | channelID := ""
22 | if params.Channel != nil {
23 | channelID = params.Channel.ID
24 | }
25 |
26 | var message JoinMessageEntity
27 |
28 | res := db.Connection.Where(JoinMessageEntity{
29 | MessageEntity: MessageEntity{
30 | GuildID: ctx.Interaction.GuildID,
31 | ChannelID: &channelID,
32 | },
33 | }).First(&message)
34 |
35 | if res.Error == nil {
36 | return ctx.Respond(&discordgo.InteractionResponse{
37 | Type: discordgo.InteractionResponseChannelMessageWithSource,
38 | Data: formatJoinMessageResponse(&ctx.Context, &message),
39 | })
40 |
41 | } else {
42 | return ctx.ModalRespond(&interactor.Modal{
43 | ModalID: createJoinMessageModalID,
44 | Title: "Create message",
45 | ID: channelID,
46 | })
47 | }
48 | },
49 | },
50 | },
51 | }
52 |
--------------------------------------------------------------------------------
/herald/join_modals.go:
--------------------------------------------------------------------------------
1 | package herald
2 |
3 | import (
4 | "github.com/dignityofwar/digbot/db"
5 | "github.com/dignityofwar/digbot/interactor"
6 | )
7 |
8 | type EditJoinMessageParams struct {
9 | Message string `style:"paragraph" min:"1" max:"3500"`
10 | }
11 |
12 | const createJoinMessageModalID = "herald_join_create"
13 |
14 | var createJoinMessageModal = &interactor.ModalOptions{
15 | ModalID: createJoinMessageModalID,
16 | Callback: func(ctx *interactor.ModalContext, params *EditJoinMessageParams) error {
17 | message := JoinMessageEntity{
18 | MessageEntity: MessageEntity{
19 | GuildID: ctx.Interaction.GuildID,
20 | ChannelID: &ctx.ID,
21 | Content: params.Message,
22 | },
23 | }
24 |
25 | if err := db.Connection.Save(&message).Error; err != nil {
26 | return err
27 | }
28 |
29 | return ctx.UpsertRespond(formatJoinMessageResponse(&ctx.Context, &message))
30 | },
31 | }
32 |
33 | const editJoinMessageModalID = "herald_join_edit"
34 |
35 | var editJoinMessageModal = &interactor.ModalOptions{
36 | ModalID: editJoinMessageModalID,
37 | Callback: func(ctx *interactor.ModalContext, params *EditJoinMessageParams) error {
38 | var message JoinMessageEntity
39 |
40 | if db.Connection.First(&message, ctx.ID).Error != nil {
41 | return ctx.UpsertRespond(joinResponseNotFound)
42 | }
43 |
44 | message.Content = params.Message
45 |
46 | if err := db.Connection.Save(&message).Error; err != nil {
47 | return err
48 | }
49 |
50 | return ctx.UpsertRespond(formatJoinMessageResponse(&ctx.Context, &message, joinResponseNotificationUpdated))
51 | },
52 | }
53 |
--------------------------------------------------------------------------------
/interactor/modal_options.go:
--------------------------------------------------------------------------------
1 | package interactor
2 |
3 | import (
4 | "errors"
5 | "github.com/bwmarrin/discordgo"
6 | "reflect"
7 | )
8 |
9 | type ModalOptions struct {
10 | ModalID string
11 | Title string
12 | Callback any
13 | }
14 |
15 | func (o *ModalOptions) convert() (modal *modalDescriptor, err error) {
16 | callbackValue := reflect.ValueOf(o.Callback)
17 | callbackType := callbackValue.Type()
18 |
19 | fields := reflect.VisibleFields(callbackType.In(1).Elem())
20 |
21 | modal = &modalDescriptor{
22 | Title: o.Title,
23 | Callback: callbackValue,
24 | ParamFieldMap: make(map[string]modalParamField, len(fields)),
25 | }
26 |
27 | for _, field := range fields {
28 | if field.Anonymous {
29 | continue
30 | } else if field.Type.Kind() != reflect.String {
31 | err = errors.New("")
32 | return
33 | }
34 |
35 | modal.ParamFieldMap[field.Name] = modalParamField{
36 | ComponentPrototype: discordgo.TextInput{
37 | CustomID: field.Name,
38 | Label: resolveTextInputLabel(field),
39 | Style: resolveTextInputStyle(field),
40 | Placeholder: field.Tag.Get("placeholder"),
41 | Required: field.Tag.Get("required") == "true",
42 | MinLength: resolveTextInputMinLength(field),
43 | MaxLength: resolveTextInputMaxLength(field),
44 | },
45 | }
46 | }
47 |
48 | return
49 | }
50 |
51 | //
52 | //
53 | //
54 |
55 | type Modal struct {
56 | ModalID string
57 | ID string
58 | Title string
59 | Values any
60 | }
61 |
62 | func (m Modal) customID() string {
63 | return m.ModalID + idDelimiter + m.ID
64 | }
65 |
--------------------------------------------------------------------------------
/herald/role_modals.go:
--------------------------------------------------------------------------------
1 | package herald
2 |
3 | import (
4 | "github.com/dignityofwar/digbot/db"
5 | "github.com/dignityofwar/digbot/interactor"
6 | "strings"
7 | )
8 |
9 | type EditRoleMessageParams struct {
10 | Message string `style:"paragraph" min:"1" max:"3500"`
11 | }
12 |
13 | const createRoleMessageModalID = "herald_role_create"
14 |
15 | var createRoleMessageModal = &interactor.ModalOptions{
16 | ModalID: createRoleMessageModalID,
17 | Callback: func(ctx *interactor.ModalContext, params *EditRoleMessageParams) error {
18 | ids := strings.SplitN(ctx.ID, ":", 2)
19 |
20 | message := RoleMessageEntity{
21 | MessageEntity: MessageEntity{
22 | GuildID: ctx.Interaction.GuildID,
23 | ChannelID: &ids[1],
24 | Content: params.Message,
25 | },
26 | RoleID: ids[0],
27 | }
28 |
29 | if err := db.Connection.Save(&message).Error; err != nil {
30 | return err
31 | }
32 |
33 | return ctx.UpsertRespond(formatRoleMessageResponse(&ctx.Context, &message))
34 | },
35 | }
36 |
37 | const editRoleMessageModalID = "herald_role_edit"
38 |
39 | var editRoleMessageModal = &interactor.ModalOptions{
40 | ModalID: editRoleMessageModalID,
41 | Callback: func(ctx *interactor.ModalContext, params *EditRoleMessageParams) error {
42 | var message RoleMessageEntity
43 |
44 | if db.Connection.First(&message, ctx.ID).Error != nil {
45 | return ctx.UpsertRespond(roleResponseNotFound)
46 | }
47 |
48 | message.Content = params.Message
49 |
50 | if err := db.Connection.Save(&message).Error; err != nil {
51 | return err
52 | }
53 |
54 | return ctx.UpsertRespond(formatRoleMessageResponse(&ctx.Context, &message, roleResponseNotificationUpdated))
55 | },
56 | }
57 |
--------------------------------------------------------------------------------
/herald/join_utils.go:
--------------------------------------------------------------------------------
1 | package herald
2 |
3 | import (
4 | "github.com/bwmarrin/discordgo"
5 | "github.com/dignityofwar/digbot/interactor"
6 | "strconv"
7 | )
8 |
9 | func formatJoinMessageResponse(ctx *interactor.Context, joinMessage *JoinMessageEntity, embeds ...*discordgo.MessageEmbed) *discordgo.InteractionResponseData {
10 | id := strconv.Itoa(int(joinMessage.ID))
11 | channel := "DM"
12 | if *joinMessage.ChannelID != "" {
13 | channel = "<#" + *joinMessage.ChannelID + ">"
14 | }
15 |
16 | embeds = append(embeds, &discordgo.MessageEmbed{
17 | Description: joinMessage.compile(ctx.Interaction.Member),
18 | Color: interactor.ColorPrimary,
19 | Fields: []*discordgo.MessageEmbedField{
20 | {
21 | Name: "Channel",
22 | Value: channel,
23 | Inline: true,
24 | },
25 | },
26 | })
27 |
28 | return &discordgo.InteractionResponseData{
29 | Flags: discordgo.MessageFlagsEphemeral,
30 | Embeds: embeds,
31 | Components: []discordgo.MessageComponent{
32 | discordgo.ActionsRow{
33 | Components: []discordgo.MessageComponent{
34 | interactor.MakeMessageComponent(&interactor.MessageComponentOptions{
35 | ComponentID: joinMessageChannelSelectID,
36 | ID: id,
37 | }),
38 | },
39 | },
40 | discordgo.ActionsRow{
41 | Components: []discordgo.MessageComponent{
42 | interactor.MakeMessageComponent(&interactor.MessageComponentOptions{
43 | ComponentID: editJoinMessageButtonID,
44 | ID: id,
45 | }),
46 | interactor.MakeMessageComponent(&interactor.MessageComponentOptions{
47 | ComponentID: deleteJoinMessageButtonID,
48 | ID: id,
49 | }),
50 | },
51 | },
52 | },
53 | }
54 | }
55 |
--------------------------------------------------------------------------------
/herald/role_commands.go:
--------------------------------------------------------------------------------
1 | package herald
2 |
3 | import (
4 | "github.com/bwmarrin/discordgo"
5 | "github.com/dignityofwar/digbot/db"
6 | "github.com/dignityofwar/digbot/interactor"
7 | )
8 |
9 | type RoleMessageParams struct {
10 | Role *discordgo.Role `description:"Trigger on assignment of" required:"true"`
11 | Channel *discordgo.Channel `description:"Send message to" channels:"GuildText"`
12 | }
13 |
14 | var roleCommands = &interactor.SlashCommandGroup{
15 | Name: "role",
16 | Description: "Manage messages send when a member receives a role",
17 | SubCommands: []interactor.CommandOptions{
18 | &interactor.SlashCommand{
19 | Name: "find",
20 | Description: "Find role message",
21 | Callback: func(ctx *interactor.CommandContext, params *RoleMessageParams) error {
22 | channelID := ""
23 | if params.Channel != nil {
24 | channelID = params.Channel.ID
25 | }
26 |
27 | var message RoleMessageEntity
28 |
29 | res := db.Connection.Where(RoleMessageEntity{
30 | MessageEntity: MessageEntity{
31 | GuildID: ctx.Interaction.GuildID,
32 | ChannelID: &channelID,
33 | },
34 | RoleID: params.Role.ID,
35 | }).First(&message)
36 |
37 | if res.Error == nil {
38 | return ctx.Respond(&discordgo.InteractionResponse{
39 | Type: discordgo.InteractionResponseChannelMessageWithSource,
40 | Data: formatRoleMessageResponse(&ctx.Context, &message),
41 | })
42 |
43 | } else {
44 | return ctx.ModalRespond(&interactor.Modal{
45 | ModalID: createRoleMessageModalID,
46 | Title: "Create message",
47 | ID: params.Role.ID + ":" + channelID,
48 | })
49 | }
50 | },
51 | },
52 | },
53 | }
54 |
--------------------------------------------------------------------------------
/herald/herald.go:
--------------------------------------------------------------------------------
1 | package herald
2 |
3 | import (
4 | "github.com/bwmarrin/discordgo"
5 | "github.com/dignityofwar/digbot/core"
6 | "github.com/dignityofwar/digbot/db"
7 | "github.com/dignityofwar/digbot/discord"
8 | "github.com/dignityofwar/digbot/interactor"
9 | "log"
10 | )
11 |
12 | var Module = core.Module{
13 | Name: "Herald",
14 | OnInit: func() {
15 | if err := db.Connection.AutoMigrate(&RoleMessageEntity{}, &JoinMessageEntity{}); err != nil {
16 | log.Fatalf("Unable to migrate messenger entities: %v", err)
17 | }
18 |
19 | discord.Discord.AddHandler(func(s *discordgo.Session, m *discordgo.GuildMemberUpdate) {
20 | handleRoleAssign(s, m)
21 | })
22 |
23 | discord.Discord.AddHandler(func(s *discordgo.Session, m *discordgo.GuildMemberAdd) {
24 | handleJoin(s, m)
25 | })
26 | },
27 | OnBoot: func() {
28 | err := interactor.RegisterCommand(&interactor.SlashCommandGroup{
29 | Name: "herald",
30 | Description: "Manage automated messages send by the bot",
31 | SubCommands: []interactor.CommandOptions{
32 | roleCommands,
33 | joinCommands,
34 | },
35 | }, &interactor.CommandPermissions{
36 | DefaultMemberPermissions: ptr[int64](0),
37 | DMPermission: ptr(false),
38 | })
39 |
40 | if err != nil {
41 | log.Fatalf(err.Error())
42 | }
43 |
44 | if err := interactor.RegisterMessageComponents(
45 | editRoleMessageButton,
46 | deleteRoleMessageButton,
47 | roleMessageRoleSelect,
48 | roleMessageChannelSelect,
49 | editJoinMessageButton,
50 | deleteJoinMessageButton,
51 | joinMessageChannelSelect,
52 | ); err != nil {
53 | log.Fatalf(err.Error())
54 | }
55 |
56 | if err := interactor.RegisterModals(
57 | createRoleMessageModal,
58 | editRoleMessageModal,
59 | createJoinMessageModal,
60 | editJoinMessageModal,
61 | ); err != nil {
62 | log.Fatalf(err.Error())
63 | }
64 | },
65 | }
66 |
--------------------------------------------------------------------------------
/interactor/applicationcommand_structs.go:
--------------------------------------------------------------------------------
1 | package interactor
2 |
3 | import (
4 | "errors"
5 | "github.com/bwmarrin/discordgo"
6 | "reflect"
7 | )
8 |
9 | type CommandContext struct {
10 | Context
11 | Data *discordgo.ApplicationCommandInteractionData
12 | }
13 |
14 | type commandExecuteDescriptor interface {
15 | execute(ctx *CommandContext, options []*discordgo.ApplicationCommandInteractionDataOption) error
16 | }
17 |
18 | //
19 | //
20 | //
21 |
22 | type versionedCommandDescriptor struct {
23 | commandDescriptor
24 | Version int
25 | }
26 |
27 | func (d *versionedCommandDescriptor) execute(ctx *CommandContext, options []*discordgo.ApplicationCommandInteractionDataOption) error {
28 | if d.Version != ctx.Interaction.Version {
29 | return errors.New("command version mismatch")
30 | }
31 |
32 | return d.commandDescriptor.execute(ctx, options)
33 | }
34 |
35 | //
36 | //
37 | //
38 |
39 | type commandParamGenerator func(*CommandContext, []*discordgo.ApplicationCommandInteractionDataOption) reflect.Value
40 |
41 | type commandDescriptor struct {
42 | Callback reflect.Value
43 | ParamGenerator commandParamGenerator
44 | }
45 |
46 | func (d *commandDescriptor) execute(ctx *CommandContext, options []*discordgo.ApplicationCommandInteractionDataOption) error {
47 | args := []reflect.Value{
48 | reflect.ValueOf(ctx),
49 | }
50 | if d.ParamGenerator != nil {
51 | args = append(args, d.ParamGenerator(ctx, options))
52 | }
53 |
54 | if err := captureError(d.Callback.Call(args)); err != nil {
55 | return err
56 | }
57 |
58 | return nil
59 | }
60 |
61 | //
62 | //
63 | //
64 |
65 | type commandGroupDescriptor struct {
66 | SubCommands map[string]commandExecuteDescriptor
67 | }
68 |
69 | func (d *commandGroupDescriptor) execute(ctx *CommandContext, options []*discordgo.ApplicationCommandInteractionDataOption) error {
70 | return d.SubCommands[options[0].Name].execute(ctx, options[0].Options)
71 | }
72 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 |
2 |

3 |
4 | # DigBot
5 |
6 | [](https://github.com/dignityofwar/digbot/releases)
7 | [](https://github.com/dignityofwar/digbot/blob/main/LICENSE)
8 |
9 |
10 | ## About
11 |
12 | DigBot is a custom discord bot ran on the [DIG community's discord server](https://discord.gg/cjQBNpc), it was
13 | originally created to fulfil all the functionality of the current bots that were on the server and allow the community
14 | to implement any feature's they desired.
15 |
16 | ## Usage
17 |
18 | DigBot is releases as a Docker image on [Docker Hub](https://hub.docker.com/r/dignityofwar/digbot). Pull the latest
19 | version using `docker pull dignityofwar/digbot:latest`.
20 |
21 | To configure DigBot the following environment variables:
22 |
23 | - `DISCORD_TOKEN`: a Discord Bot application token, which can be created in
24 | the [Discord developer portal](https://discord.com/developers/applications);
25 | - `DB_PATH`: path to the Sqlite database file.
26 |
27 | ## Code Usage
28 |
29 | The project is open-sourced under the [MIT license](LICENSE).
30 |
31 | ## Acknowledgements
32 |
33 | This repository was created from
34 | an [existing private codebase](https://github.com/JamesLongman/DIGBot/releases/tag/0.0.1). The previous project was
35 | headed by Maelstromeous who was ultimately responsible for code review, design decisions and deployment.
36 |
37 | File contributions were as follows
38 | Maelstromeous: 510 commits, 7,623 additions, 6,378 deletions
39 | JamesLongman: 459 commits, 30,076 additions, 18,144 deletions
40 | Euwas: 37 commits, 1,982 additions, 1040 deletions
41 | CptCannonFodder: 10 commits, 22 additions, 16 deletions
42 | Blacky704: 3 commits, 29 additions, 8 deletions
43 |
--------------------------------------------------------------------------------
/interactor/modal_structs.go:
--------------------------------------------------------------------------------
1 | package interactor
2 |
3 | import (
4 | "github.com/bwmarrin/discordgo"
5 | "reflect"
6 | )
7 |
8 | type ModalContext struct {
9 | Context
10 | Data *discordgo.ModalSubmitInteractionData
11 | ID string
12 | }
13 |
14 | type modalDescriptor struct {
15 | Title string
16 | Callback reflect.Value
17 | ParamFieldMap map[string]modalParamField
18 | }
19 |
20 | func (m *modalDescriptor) handle(ctx *ModalContext) error {
21 | paramsValue := reflect.New(m.Callback.Type().In(1).Elem())
22 |
23 | for _, component := range ctx.Data.Components {
24 | input := component.(*discordgo.ActionsRow).Components[0].(*discordgo.TextInput)
25 |
26 | paramsValue.Elem().FieldByName(input.CustomID).SetString(input.Value)
27 | }
28 |
29 | args := []reflect.Value{reflect.ValueOf(ctx), paramsValue}
30 |
31 | if err := captureError(m.Callback.Call(args)); err != nil {
32 | return err
33 | }
34 |
35 | return nil
36 | }
37 |
38 | func (m *modalDescriptor) make(modal *Modal) *discordgo.InteractionResponse {
39 | components := make([]discordgo.MessageComponent, 0, len(m.ParamFieldMap))
40 | values := reflect.ValueOf(modal.Values)
41 | hasValues := values.Kind() == reflect.Struct
42 |
43 | for fieldName, field := range m.ParamFieldMap {
44 | value := ""
45 | if hasValues {
46 | value = values.FieldByName(fieldName).String()
47 | }
48 |
49 | components = append(components, discordgo.ActionsRow{
50 | Components: []discordgo.MessageComponent{field.make(value)},
51 | })
52 | }
53 |
54 | return &discordgo.InteractionResponse{
55 | Type: discordgo.InteractionResponseModal,
56 | Data: &discordgo.InteractionResponseData{
57 | CustomID: modal.customID(),
58 | Title: modal.Title,
59 | Components: components,
60 | },
61 | }
62 | }
63 |
64 | type modalParamField struct {
65 | ComponentPrototype discordgo.TextInput
66 | }
67 |
68 | func (f *modalParamField) make(value string) discordgo.TextInput {
69 | input := f.ComponentPrototype
70 |
71 | input.Value = value
72 |
73 | return input
74 | }
75 |
--------------------------------------------------------------------------------
/herald/role_utils.go:
--------------------------------------------------------------------------------
1 | package herald
2 |
3 | import (
4 | "github.com/bwmarrin/discordgo"
5 | "github.com/dignityofwar/digbot/interactor"
6 | "strconv"
7 | )
8 |
9 | func formatRoleMessageResponse(ctx *interactor.Context, roleMessage *RoleMessageEntity, embeds ...*discordgo.MessageEmbed) *discordgo.InteractionResponseData {
10 | id := strconv.Itoa(int(roleMessage.ID))
11 | channel := "DM"
12 | if *roleMessage.ChannelID != "" {
13 | channel = "<#" + *roleMessage.ChannelID + ">"
14 | }
15 |
16 | embeds = append(embeds, &discordgo.MessageEmbed{
17 | Description: roleMessage.compile(ctx.Interaction.Member),
18 | Color: interactor.ColorPrimary,
19 | Fields: []*discordgo.MessageEmbedField{
20 | {
21 | Name: "Role",
22 | Value: "<@&" + roleMessage.RoleID + ">",
23 | Inline: true,
24 | },
25 | {
26 | Name: "Channel",
27 | Value: channel,
28 | Inline: true,
29 | },
30 | },
31 | })
32 |
33 | return &discordgo.InteractionResponseData{
34 | Flags: discordgo.MessageFlagsEphemeral,
35 | Embeds: embeds,
36 | Components: []discordgo.MessageComponent{
37 | discordgo.ActionsRow{
38 | Components: []discordgo.MessageComponent{
39 | interactor.MakeMessageComponent(&interactor.MessageComponentOptions{
40 | ComponentID: roleMessageRoleSelectID,
41 | ID: id,
42 | }),
43 | },
44 | },
45 | discordgo.ActionsRow{
46 | Components: []discordgo.MessageComponent{
47 | interactor.MakeMessageComponent(&interactor.MessageComponentOptions{
48 | ComponentID: roleMessageChannelSelectID,
49 | ID: id,
50 | }),
51 | },
52 | },
53 | discordgo.ActionsRow{
54 | Components: []discordgo.MessageComponent{
55 | interactor.MakeMessageComponent(&interactor.MessageComponentOptions{
56 | ComponentID: editRoleMessageButtonID,
57 | ID: id,
58 | }),
59 | interactor.MakeMessageComponent(&interactor.MessageComponentOptions{
60 | ComponentID: deleteRoleMessageButtonID,
61 | ID: id,
62 | }),
63 | },
64 | },
65 | },
66 | }
67 | }
68 |
--------------------------------------------------------------------------------
/interactor/messagecomponent_structs.ts.go:
--------------------------------------------------------------------------------
1 | package interactor
2 |
3 | import (
4 | "fmt"
5 | "github.com/bwmarrin/discordgo"
6 | "reflect"
7 | )
8 |
9 | type MessageComponentContext struct {
10 | Context
11 | Data *discordgo.MessageComponentInteractionData
12 | ID string
13 | }
14 |
15 | type messageComponentDescriptor struct {
16 | Callback reflect.Value
17 | ComponentGenerator func(cmp *MessageComponentOptions) discordgo.MessageComponent
18 | }
19 |
20 | func (c *messageComponentDescriptor) handle(ctx *MessageComponentContext) error {
21 | args := []reflect.Value{reflect.ValueOf(ctx)}
22 |
23 | if ctx.Data.Values != nil {
24 | value, err := c.resolveValues(ctx)
25 | if err != nil {
26 | return err
27 | }
28 |
29 | args = append(args, value)
30 | }
31 |
32 | if err := captureError(c.Callback.Call(args)); err != nil {
33 | return err
34 | }
35 |
36 | return nil
37 | }
38 |
39 | func (c *messageComponentDescriptor) resolveValues(ctx *MessageComponentContext) (reflect.Value, error) {
40 | switch ctx.Data.ComponentType {
41 | //case discordgo.ActionsRowComponent:
42 | //case discordgo.ButtonComponent:
43 | case discordgo.SelectMenuComponent:
44 | return reflect.ValueOf(ctx.Data.Values), nil
45 | //case discordgo.TextInputComponent:
46 | case discordgo.UserSelectMenuComponent:
47 | return reflect.ValueOf(mapToArray(ctx.Data.Resolved.Users)), nil
48 | case discordgo.RoleSelectMenuComponent:
49 | return reflect.ValueOf(mapToArray(ctx.Data.Resolved.Roles)), nil
50 | case discordgo.MentionableSelectMenuComponent:
51 | mentionables := make([]Mentionable, len(ctx.Data.Values))
52 |
53 | for i, id := range ctx.Data.Values {
54 | mentionables[i] = Mentionable{
55 | id: id,
56 | resolvedUsers: ctx.Data.Resolved.Users,
57 | resolvedMembers: ctx.Data.Resolved.Members,
58 | resolvedRoles: ctx.Data.Resolved.Roles,
59 | }
60 | }
61 |
62 | return reflect.ValueOf(mentionables), nil
63 | case discordgo.ChannelSelectMenuComponent:
64 | return reflect.ValueOf(mapToArray(ctx.Data.Resolved.Channels)), nil
65 | }
66 |
67 | return reflect.Value{}, fmt.Errorf("unable to resolveValue values due to unsupported component type %d", ctx.Data.ComponentType)
68 | }
69 |
--------------------------------------------------------------------------------
/herald/models.go:
--------------------------------------------------------------------------------
1 | package herald
2 |
3 | import (
4 | "fmt"
5 | "github.com/bwmarrin/discordgo"
6 | "github.com/dignityofwar/digbot/discord"
7 | "log"
8 | "strings"
9 | "time"
10 | )
11 |
12 | type MessageEntity struct {
13 | ID uint `gorm:"primaryKey"`
14 | GuildID string `gorm:"not null;index:,unique,composite:umc"`
15 | GuildRef *discord.GuildRef `gorm:"foreignKey:GuildID"`
16 | ChannelID *string `gorm:"index:,unique,composite:umc"`
17 | ChannelRef *discord.ChannelRef `gorm:"foreignKey:ChannelID"`
18 | Content string `gorm:"not null"`
19 |
20 | CreatedAt time.Time
21 | UpdatedAt time.Time
22 | }
23 |
24 | type RoleMessageEntity struct {
25 | MessageEntity `gorm:"embedded"`
26 |
27 | RoleID string `gorm:"not null;index:,unique,composite:umc"`
28 | RoleRef discord.RoleRef `gorm:"foreignKey:RoleID"`
29 | }
30 |
31 | type JoinMessageEntity struct {
32 | MessageEntity `gorm:"embedded"`
33 | }
34 |
35 | func (msg *MessageEntity) compile(member *discordgo.Member) string {
36 | compiledMessage := strings.ReplaceAll(msg.Content, "@member", member.Mention())
37 | compiledMessage = strings.ReplaceAll(compiledMessage, "@username", member.User.Username)
38 | if member.Nick == "" {
39 | compiledMessage = strings.ReplaceAll(compiledMessage, "@name", member.User.Username)
40 | } else {
41 | compiledMessage = strings.ReplaceAll(compiledMessage, "@name", member.Nick)
42 | }
43 |
44 | return compiledMessage
45 | }
46 |
47 | func (msg *MessageEntity) send(s *discordgo.Session, member *discordgo.Member) {
48 | embed := &discordgo.MessageEmbed{
49 | Description: msg.compile(member),
50 | }
51 |
52 | channelID := ""
53 | if *msg.ChannelID == "" {
54 | userChannel, err := s.UserChannelCreate(member.User.ID)
55 | if err != nil {
56 | log.Fatalf("Failed to create user channel: %v", err)
57 | }
58 |
59 | guild, _ := s.State.Guild(member.GuildID)
60 |
61 | channelID = userChannel.ID
62 | embed.Footer = &discordgo.MessageEmbedFooter{
63 | Text: fmt.Sprintf("Welcome message from %s", guild.Name),
64 | IconURL: guild.IconURL("128"),
65 | }
66 | } else {
67 | channelID = *msg.ChannelID
68 | }
69 |
70 | _, err := s.ChannelMessageSendComplex(channelID, &discordgo.MessageSend{
71 | Embed: embed,
72 | })
73 |
74 | if err != nil {
75 | log.Fatalf("Failed to send message: %v", err)
76 | }
77 | }
78 |
--------------------------------------------------------------------------------
/go.sum:
--------------------------------------------------------------------------------
1 | github.com/bwmarrin/discordgo v0.27.1 h1:ib9AIc/dom1E/fSIulrBwnez0CToJE113ZGt4HoliGY=
2 | github.com/bwmarrin/discordgo v0.27.1/go.mod h1:NJZpH+1AfhIcyQsPeuBKsUtYrRnjkyu0kIVMCHkZtRY=
3 | github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
4 | github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc=
5 | github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE=
6 | github.com/jinzhu/inflection v1.0.0 h1:K317FqzuhWc8YvSVlFMCCUb36O/S9MCKRDI7QkRKD/E=
7 | github.com/jinzhu/inflection v1.0.0/go.mod h1:h+uFLlag+Qp1Va5pdKtLDYj+kHp5pxUVkryuEj+Srlc=
8 | github.com/jinzhu/now v1.1.5 h1:/o9tlHleP7gOFmsnYNz3RGnqzefHA47wQpKrrdTIwXQ=
9 | github.com/jinzhu/now v1.1.5/go.mod h1:d3SSVoowX0Lcu0IBviAWJpolVfI5UJVZZ7cO71lE/z8=
10 | github.com/joho/godotenv v1.5.1 h1:7eLL/+HRGLY0ldzfGMeQkb7vMd0as4CfYvUVzLqw0N0=
11 | github.com/joho/godotenv v1.5.1/go.mod h1:f4LDr5Voq0i2e/R5DDNOoa2zzDfwtkZa6DnEwAbqwq4=
12 | github.com/mattn/go-sqlite3 v1.14.17 h1:mCRHCLDUBXgpKAqIKsaAaAsrAlbkeomtRFKXh2L6YIM=
13 | github.com/mattn/go-sqlite3 v1.14.17/go.mod h1:2eHXhiwb8IkHr+BDWZGa96P6+rkvnG63S2DGjv9HUNg=
14 | golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4=
15 | golang.org/x/crypto v0.12.0 h1:tFM/ta59kqch6LlvYnPa0yx5a83cL2nHflFhYKvv9Yk=
16 | golang.org/x/crypto v0.12.0/go.mod h1:NF0Gs7EO5K4qLn+Ylc+fih8BSTeIjAP05siRnAh98yw=
17 | golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
18 | golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
19 | golang.org/x/sys v0.11.0 h1:eG7RXZHdqOJ1i+0lgLgCpSXAp6M3LYlAo6osgSi0xOM=
20 | golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
21 | golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
22 | golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
23 | golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
24 | gorm.io/driver/sqlite v1.5.3 h1:7/0dUgX28KAcopdfbRWWl68Rflh6osa4rDh+m51KL2g=
25 | gorm.io/driver/sqlite v1.5.3/go.mod h1:qxAuCol+2r6PannQDpOP1FP6ag3mKi4esLnB/jHed+4=
26 | gorm.io/gorm v1.25.4 h1:iyNd8fNAe8W9dvtlgeRI5zSVZPsq3OpcTu37cYcpCmw=
27 | gorm.io/gorm v1.25.4/go.mod h1:L4uxeKpfBml98NYqVqwAdmV1a2nBtAec/cf3fpucW/k=
28 |
--------------------------------------------------------------------------------
/herald/join_components.go:
--------------------------------------------------------------------------------
1 | package herald
2 |
3 | import (
4 | "github.com/bwmarrin/discordgo"
5 | "github.com/dignityofwar/digbot/db"
6 | "github.com/dignityofwar/digbot/interactor"
7 | "github.com/mattn/go-sqlite3"
8 | )
9 |
10 | const editJoinMessageButtonID = "herald_join_edit"
11 |
12 | var editJoinMessageButton = &interactor.ButtonOptions{
13 | ComponentID: editJoinMessageButtonID,
14 | Style: discordgo.PrimaryButton,
15 | Label: "Edit",
16 | Callback: func(ctx *interactor.MessageComponentContext) error {
17 | return ctx.ModalRespond(&interactor.Modal{
18 | ModalID: editJoinMessageModalID,
19 | ID: ctx.ID,
20 | Title: "Create message",
21 | })
22 | },
23 | }
24 |
25 | //
26 | //
27 | //
28 |
29 | const deleteJoinMessageButtonID = "herald_join_delete"
30 |
31 | var deleteJoinMessageButton = &interactor.ButtonOptions{
32 | ComponentID: deleteJoinMessageButtonID,
33 | Style: discordgo.DangerButton,
34 | Label: "Delete",
35 | Callback: func(ctx *interactor.MessageComponentContext) error {
36 | db.Connection.Delete(&JoinMessageEntity{}, ctx.ID)
37 |
38 | return ctx.Respond(&discordgo.InteractionResponse{
39 | Type: discordgo.InteractionResponseUpdateMessage,
40 | Data: &discordgo.InteractionResponseData{
41 | Embeds: []*discordgo.MessageEmbed{
42 | {
43 | Color: interactor.ColorSuccess,
44 | Description: "Message deleted",
45 | },
46 | },
47 | },
48 | })
49 | },
50 | }
51 |
52 | //
53 | //
54 | //
55 |
56 | const joinMessageChannelSelectID = "herald_join_channel"
57 |
58 | var joinMessageChannelSelect = &interactor.SelectMenuOptions{
59 | ComponentID: joinMessageChannelSelectID,
60 | Placeholder: "Change channel",
61 | MinValues: ptr(0),
62 | MaxValues: 1,
63 | ChannelTypes: []discordgo.ChannelType{
64 | discordgo.ChannelTypeGuildText,
65 | },
66 | Callback: func(ctx *interactor.MessageComponentContext, values []*discordgo.Channel) error {
67 | var message JoinMessageEntity
68 | if db.Connection.First(&message, ctx.ID).Error != nil {
69 | return ctx.UpsertRespond(joinResponseNotFound)
70 | }
71 |
72 | updatedMessage := message
73 |
74 | if len(values) == 0 {
75 | updatedMessage.ChannelID = ptr("")
76 | } else {
77 | updatedMessage.ChannelID = &values[0].ID
78 | }
79 |
80 | if err := db.Connection.Save(updatedMessage).Error; err != nil {
81 | switch err.(sqlite3.Error).ExtendedCode {
82 | case sqlite3.ErrConstraintUnique:
83 | return ctx.Respond(&discordgo.InteractionResponse{
84 | Type: discordgo.InteractionResponseUpdateMessage,
85 | Data: formatJoinMessageResponse(&ctx.Context, &message, joinResponseNotificationFailed),
86 | })
87 | }
88 |
89 | return err
90 | }
91 |
92 | return ctx.Respond(&discordgo.InteractionResponse{
93 | Type: discordgo.InteractionResponseUpdateMessage,
94 | Data: formatJoinMessageResponse(&ctx.Context, &updatedMessage, joinResponseNotificationUpdated),
95 | })
96 | },
97 | }
98 |
--------------------------------------------------------------------------------
/discord/sync.go:
--------------------------------------------------------------------------------
1 | package discord
2 |
3 | import (
4 | "github.com/bwmarrin/discordgo"
5 | "github.com/dignityofwar/digbot/db"
6 | "gorm.io/gorm/clause"
7 | "log"
8 | "time"
9 | )
10 |
11 | type GuildRef struct {
12 | ID string `gorm:"primaryKey"`
13 | InactiveSince *time.Time
14 | }
15 |
16 | type ChannelRef struct {
17 | ID string `gorm:"primaryKey"`
18 | GuildID string `gorm:"primaryKey"`
19 | Available bool
20 | Guild GuildRef `gorm:"constraint:OnDelete:CASCADE"`
21 | }
22 |
23 | type RoleRef struct {
24 | ID string `gorm:"primaryKey"`
25 | GuildID string `gorm:"primaryKey"`
26 | Available bool
27 | Guild GuildRef `gorm:"constraint:OnDelete:CASCADE"`
28 | }
29 |
30 | func initSync() {
31 | if err := db.Connection.AutoMigrate(&GuildRef{}, &ChannelRef{}, &RoleRef{}); err != nil {
32 | log.Fatalf("Failed to migrate sync to db: %v", err)
33 | }
34 |
35 | now := time.Now()
36 |
37 | db.Connection.Where(&GuildRef{InactiveSince: &time.Time{}}).Updates(&GuildRef{
38 | InactiveSince: &now,
39 | })
40 |
41 | Discord.AddHandler(func(s *discordgo.Session, g *discordgo.GuildCreate) {
42 | log.Printf("Guild became available: %s(%s) %t\n", g.Name, g.ID, g.Unavailable)
43 |
44 | db.Connection.Clauses(clause.OnConflict{
45 | UpdateAll: true,
46 | }).Create(&GuildRef{
47 | ID: g.ID,
48 | InactiveSince: nil,
49 | })
50 |
51 | {
52 | db.Connection.Where(&ChannelRef{GuildID: g.ID}).Updates(&ChannelRef{Available: false})
53 |
54 | channels := make([]ChannelRef, len(g.Channels))
55 | for i, c := range g.Channels {
56 | channels[i] = ChannelRef{
57 | ID: c.ID,
58 | GuildID: g.ID,
59 | Available: true,
60 | }
61 | }
62 |
63 | db.Connection.Clauses(clause.OnConflict{
64 | UpdateAll: true,
65 | }).Create(&channels)
66 | }
67 | {
68 | db.Connection.Where(&RoleRef{GuildID: g.ID}).Update("available", false)
69 |
70 | roles := make([]RoleRef, len(g.Roles))
71 | for i, r := range g.Roles {
72 | roles[i] = RoleRef{
73 | ID: r.ID,
74 | GuildID: g.ID,
75 | Available: true,
76 | }
77 | }
78 |
79 | db.Connection.Clauses(clause.OnConflict{
80 | UpdateAll: true,
81 | }).Create(&roles)
82 | }
83 | })
84 |
85 | Discord.AddHandler(func(s *discordgo.Session, g *discordgo.GuildDelete) {
86 | if g.Unavailable {
87 | now := time.Now()
88 |
89 | db.Connection.Save(&GuildRef{
90 | ID: g.ID,
91 | InactiveSince: &now,
92 | })
93 | } else {
94 | db.Connection.Delete(GuildRef{}, g.ID)
95 | }
96 | })
97 |
98 | Discord.AddHandler(func(s *discordgo.Session, c *discordgo.ChannelCreate) {
99 | db.Connection.Save(&ChannelRef{
100 | ID: c.ID,
101 | GuildID: c.GuildID,
102 | Available: true,
103 | })
104 | })
105 |
106 | Discord.AddHandler(func(s *discordgo.Session, c *discordgo.ChannelDelete) {
107 | db.Connection.Delete(&ChannelRef{
108 | ID: c.ID,
109 | GuildID: c.GuildID,
110 | })
111 | })
112 |
113 | Discord.AddHandler(func(s *discordgo.Session, r *discordgo.GuildRoleCreate) {
114 | db.Connection.Save(&RoleRef{
115 | ID: r.Role.ID,
116 | GuildID: r.GuildID,
117 | })
118 | })
119 |
120 | Discord.AddHandler(func(s *discordgo.Session, r *discordgo.GuildRoleDelete) {
121 | db.Connection.Delete(&RoleRef{
122 | ID: r.RoleID,
123 | GuildID: r.GuildID,
124 | })
125 | })
126 |
127 | }
128 |
--------------------------------------------------------------------------------
/interactor/messagecomponent_options.go:
--------------------------------------------------------------------------------
1 | package interactor
2 |
3 | import (
4 | "errors"
5 | "github.com/bwmarrin/discordgo"
6 | "reflect"
7 | )
8 |
9 | type MessageComponent interface {
10 | compileMessageComponent() (*messageComponentDescriptor, error)
11 | }
12 |
13 | //
14 | //
15 | //
16 |
17 | type ButtonOptions struct {
18 | ComponentID string
19 | Callback any
20 |
21 | Label string
22 | Style discordgo.ButtonStyle
23 | Emoji discordgo.ComponentEmoji
24 | }
25 |
26 | func (o *ButtonOptions) compileMessageComponent() (cmp *messageComponentDescriptor, err error) {
27 | callbackValue := reflect.ValueOf(o.Callback)
28 | callbackType := callbackValue.Type()
29 |
30 | if callbackValue.Kind() != reflect.Func {
31 | err = errors.New("callback needs to be of kind func")
32 | return
33 | } else if callbackType.NumIn() > 1 {
34 | err = errors.New("too many arguments")
35 | return
36 | } else if callbackType.NumIn() < 1 || callbackType.In(0) != reflect.TypeOf((*MessageComponentContext)(nil)) {
37 | err = errors.New("first argument need to be an a pointer to the component context")
38 | return
39 | }
40 |
41 | cmp = &messageComponentDescriptor{
42 | ComponentGenerator: func(cmp *MessageComponentOptions) discordgo.MessageComponent {
43 | return discordgo.Button{
44 | CustomID: cmp.customID(),
45 | Disabled: cmp.Disabled,
46 | Label: o.Label,
47 | Style: o.Style,
48 | Emoji: o.Emoji,
49 | }
50 | },
51 | Callback: callbackValue,
52 | }
53 |
54 | return
55 | }
56 |
57 | //
58 | //
59 | //
60 |
61 | type SelectMenuOptions struct {
62 | ComponentID string
63 | Callback any
64 |
65 | Placeholder string
66 | MinValues *int
67 | MaxValues int
68 | Options []discordgo.SelectMenuOption
69 | ChannelTypes []discordgo.ChannelType
70 | }
71 |
72 | func (o *SelectMenuOptions) compileMessageComponent() (cmp *messageComponentDescriptor, err error) {
73 | callbackValue := reflect.ValueOf(o.Callback)
74 | callbackType := callbackValue.Type()
75 |
76 | componentType, err := o.resolveType(callbackType.In(1).Elem())
77 | if err != nil {
78 | return
79 | }
80 |
81 | cmp = &messageComponentDescriptor{
82 | ComponentGenerator: func(cmp *MessageComponentOptions) discordgo.MessageComponent {
83 | return discordgo.SelectMenu{
84 | MenuType: componentType,
85 | CustomID: cmp.customID(),
86 | Disabled: cmp.Disabled,
87 | Placeholder: o.Placeholder,
88 | MinValues: o.MinValues,
89 | MaxValues: o.MaxValues,
90 | Options: o.Options,
91 | ChannelTypes: o.ChannelTypes,
92 | }
93 | },
94 | Callback: callbackValue,
95 | }
96 |
97 | return
98 | }
99 |
100 | func (o *SelectMenuOptions) resolveType(i reflect.Type) (discordgo.SelectMenuType, error) {
101 | switch i {
102 | case reflect.TypeOf(""):
103 | return discordgo.StringSelectMenu, nil
104 | case reflect.TypeOf((*discordgo.User)(nil)):
105 | return discordgo.UserSelectMenu, nil
106 | case reflect.TypeOf((*discordgo.Role)(nil)):
107 | return discordgo.RoleSelectMenu, nil
108 | case reflect.TypeOf(Mentionable{}):
109 | return discordgo.MentionableSelectMenu, nil
110 | case reflect.TypeOf((*discordgo.Channel)(nil)):
111 | return discordgo.ChannelSelectMenu, nil
112 | }
113 |
114 | return 0, errors.New("")
115 | }
116 |
117 | //
118 | //
119 | //
120 |
121 | type MessageComponentOptions struct {
122 | ComponentID string
123 | ID string
124 | Disabled bool
125 | }
126 |
127 | func (o MessageComponentOptions) customID() string {
128 | return o.ComponentID + idDelimiter + o.ID
129 | }
130 |
--------------------------------------------------------------------------------
/herald/role_components.go:
--------------------------------------------------------------------------------
1 | package herald
2 |
3 | import (
4 | "github.com/bwmarrin/discordgo"
5 | "github.com/dignityofwar/digbot/db"
6 | "github.com/dignityofwar/digbot/interactor"
7 | "github.com/mattn/go-sqlite3"
8 | )
9 |
10 | const editRoleMessageButtonID = "herald_role_edit"
11 |
12 | var editRoleMessageButton = &interactor.ButtonOptions{
13 | ComponentID: editRoleMessageButtonID,
14 | Style: discordgo.PrimaryButton,
15 | Label: "Edit",
16 | Callback: func(ctx *interactor.MessageComponentContext) error {
17 | return ctx.ModalRespond(&interactor.Modal{
18 | ModalID: editRoleMessageModalID,
19 | ID: ctx.ID,
20 | Title: "Create message",
21 | })
22 | },
23 | }
24 |
25 | //
26 | //
27 | //
28 |
29 | const deleteRoleMessageButtonID = "herald_role_delete"
30 |
31 | var deleteRoleMessageButton = &interactor.ButtonOptions{
32 | ComponentID: deleteRoleMessageButtonID,
33 | Style: discordgo.DangerButton,
34 | Label: "Delete",
35 | Callback: func(ctx *interactor.MessageComponentContext) error {
36 | db.Connection.Delete(&RoleMessageEntity{}, ctx.ID)
37 |
38 | return ctx.Respond(&discordgo.InteractionResponse{
39 | Type: discordgo.InteractionResponseUpdateMessage,
40 | Data: &discordgo.InteractionResponseData{
41 | Embeds: []*discordgo.MessageEmbed{
42 | {
43 | Color: interactor.ColorSuccess,
44 | Description: "Message deleted",
45 | },
46 | },
47 | },
48 | })
49 | },
50 | }
51 |
52 | //
53 | //
54 | //
55 |
56 | const roleMessageRoleSelectID = "herald_role_role"
57 |
58 | var roleMessageRoleSelect = &interactor.SelectMenuOptions{
59 | ComponentID: roleMessageRoleSelectID,
60 | Placeholder: "Change role",
61 | MinValues: ptr(1),
62 | MaxValues: 1,
63 | Callback: func(ctx *interactor.MessageComponentContext, values []*discordgo.Role) error {
64 | var message RoleMessageEntity
65 | if db.Connection.First(&message, ctx.ID).Error != nil {
66 | return ctx.UpsertRespond(roleResponseNotFound)
67 | }
68 |
69 | updatedMessage := message
70 |
71 | updatedMessage.RoleID = values[0].ID
72 |
73 | if err := db.Connection.Save(updatedMessage).Error; err != nil {
74 | switch err.(sqlite3.Error).ExtendedCode {
75 | case sqlite3.ErrConstraintUnique:
76 | return ctx.Respond(&discordgo.InteractionResponse{
77 | Type: discordgo.InteractionResponseUpdateMessage,
78 | Data: formatRoleMessageResponse(&ctx.Context, &message, roleResponseNotificationFailed),
79 | })
80 | }
81 |
82 | return err
83 | }
84 |
85 | return ctx.Respond(&discordgo.InteractionResponse{
86 | Type: discordgo.InteractionResponseUpdateMessage,
87 | Data: formatRoleMessageResponse(&ctx.Context, &updatedMessage, roleResponseNotificationUpdated),
88 | })
89 | },
90 | }
91 |
92 | //
93 | //
94 | //
95 |
96 | const roleMessageChannelSelectID = "herald_role_channel"
97 |
98 | var roleMessageChannelSelect = &interactor.SelectMenuOptions{
99 | ComponentID: roleMessageChannelSelectID,
100 | Placeholder: "Change channel",
101 | MinValues: ptr(0),
102 | MaxValues: 1,
103 | ChannelTypes: []discordgo.ChannelType{
104 | discordgo.ChannelTypeGuildText,
105 | },
106 | Callback: func(ctx *interactor.MessageComponentContext, values []*discordgo.Channel) error {
107 | var message RoleMessageEntity
108 | if db.Connection.First(&message, ctx.ID).Error != nil {
109 | return ctx.UpsertRespond(roleResponseNotFound)
110 | }
111 |
112 | updatedMessage := message
113 |
114 | if len(values) == 0 {
115 | updatedMessage.ChannelID = ptr("")
116 | } else {
117 | updatedMessage.ChannelID = &values[0].ID
118 | }
119 |
120 | if err := db.Connection.Save(updatedMessage).Error; err != nil {
121 | switch err.(sqlite3.Error).ExtendedCode {
122 | case sqlite3.ErrConstraintUnique:
123 | return ctx.Respond(&discordgo.InteractionResponse{
124 | Type: discordgo.InteractionResponseUpdateMessage,
125 | Data: formatRoleMessageResponse(&ctx.Context, &message, roleResponseNotificationFailed),
126 | })
127 | }
128 |
129 | return err
130 | }
131 |
132 | return ctx.Respond(&discordgo.InteractionResponse{
133 | Type: discordgo.InteractionResponseUpdateMessage,
134 | Data: formatRoleMessageResponse(&ctx.Context, &updatedMessage, roleResponseNotificationUpdated),
135 | })
136 | },
137 | }
138 |
--------------------------------------------------------------------------------
/interactor/handlers.go:
--------------------------------------------------------------------------------
1 | package interactor
2 |
3 | import (
4 | "github.com/bwmarrin/discordgo"
5 | "strings"
6 | )
7 |
8 | func interactionHandler(s *discordgo.Session, i *discordgo.InteractionCreate) {
9 | context := Context{
10 | Session: s,
11 | Interaction: i.Interaction,
12 | }
13 |
14 | switch i.Type {
15 | case discordgo.InteractionApplicationCommand:
16 | data := i.ApplicationCommandData()
17 |
18 | if command, ok := commandHandlers[data.Name]; ok {
19 | ctx := &CommandContext{
20 | Context: context,
21 | Data: &data,
22 | }
23 |
24 | if err := command.execute(ctx, data.Options); err != nil {
25 | println(err.Error())
26 |
27 | if err := ctx.Respond(&discordgo.InteractionResponse{
28 | Type: discordgo.InteractionResponseChannelMessageWithSource,
29 | Data: &discordgo.InteractionResponseData{
30 | Embeds: []*discordgo.MessageEmbed{
31 | {
32 | Description: "Something went wrong",
33 | Color: ColorError,
34 | },
35 | },
36 | Flags: discordgo.MessageFlagsEphemeral,
37 | },
38 | }); err != nil {
39 | panic(err)
40 | }
41 | }
42 | } else {
43 | if err := s.InteractionRespond(i.Interaction, &discordgo.InteractionResponse{
44 | Type: discordgo.InteractionResponseChannelMessageWithSource,
45 | Data: &discordgo.InteractionResponseData{
46 | Embeds: []*discordgo.MessageEmbed{
47 | {
48 | Description: "Command not found",
49 | Color: ColorError,
50 | },
51 | },
52 | Flags: discordgo.MessageFlagsEphemeral,
53 | },
54 | }); err != nil {
55 | panic(err)
56 | }
57 | }
58 |
59 | ///
60 | case discordgo.InteractionMessageComponent:
61 | data := i.MessageComponentData()
62 | componentID, id := splitCustomID(data.CustomID)
63 |
64 | if cmp, ok := messageComponentHandlers[componentID]; ok {
65 | ctx := &MessageComponentContext{
66 | Context: context,
67 | Data: &data,
68 | ID: id,
69 | }
70 |
71 | if err := cmp.handle(ctx); err != nil {
72 | println(err.Error())
73 |
74 | if err := ctx.Respond(&discordgo.InteractionResponse{
75 | Type: discordgo.InteractionResponseChannelMessageWithSource,
76 | Data: &discordgo.InteractionResponseData{
77 | Embeds: []*discordgo.MessageEmbed{
78 | {
79 | Description: "Something went wrong",
80 | Color: ColorError,
81 | },
82 | },
83 | Flags: discordgo.MessageFlagsEphemeral,
84 | },
85 | }); err != nil {
86 | panic(err)
87 | }
88 | }
89 | } else {
90 | if err := s.InteractionRespond(i.Interaction, &discordgo.InteractionResponse{
91 | Type: discordgo.InteractionResponseChannelMessageWithSource,
92 | Data: &discordgo.InteractionResponseData{
93 | Content: "Something went wrong",
94 | Flags: discordgo.MessageFlagsEphemeral,
95 | },
96 | }); err != nil {
97 | panic(err)
98 | }
99 | }
100 |
101 | //case discordgo.InteractionApplicationCommandAutocomplete:
102 | // TODO: Support autocomplete
103 | case discordgo.InteractionModalSubmit:
104 | data := i.ModalSubmitData()
105 | componentID, id := splitCustomID(data.CustomID)
106 |
107 | if modal, ok := modalHandlers[componentID]; ok {
108 | ctx := &ModalContext{
109 | Context: context,
110 | Data: &data,
111 | ID: id,
112 | }
113 |
114 | if err := modal.handle(ctx); err != nil {
115 | println(err.Error())
116 |
117 | if err := ctx.Respond(&discordgo.InteractionResponse{
118 | Type: discordgo.InteractionResponseChannelMessageWithSource,
119 | Data: &discordgo.InteractionResponseData{
120 | Embeds: []*discordgo.MessageEmbed{
121 | {
122 | Description: "Something went wrong",
123 | Color: ColorError,
124 | },
125 | },
126 | Flags: discordgo.MessageFlagsEphemeral,
127 | },
128 | }); err != nil {
129 | panic(err)
130 | }
131 | }
132 | } else {
133 | if err := s.InteractionRespond(i.Interaction, &discordgo.InteractionResponse{
134 | Type: discordgo.InteractionResponseChannelMessageWithSource,
135 | Data: &discordgo.InteractionResponseData{
136 | Content: "Something went wrong",
137 | Flags: discordgo.MessageFlagsEphemeral,
138 | },
139 | }); err != nil {
140 | panic(err)
141 | }
142 | }
143 | }
144 | }
145 |
146 | func splitCustomID(customID string) (string, string) {
147 | pieces := strings.SplitN(customID, idDelimiter, 2)
148 |
149 | return pieces[0], pieces[1]
150 | }
151 |
--------------------------------------------------------------------------------
/interactor/applicationcommand_utils.go:
--------------------------------------------------------------------------------
1 | package interactor
2 |
3 | import (
4 | "errors"
5 | "github.com/bwmarrin/discordgo"
6 | "reflect"
7 | "strconv"
8 | "strings"
9 | )
10 |
11 | func resolveCommandOptionType(i reflect.Type) (optionType discordgo.ApplicationCommandOptionType, err error) {
12 | if i.Kind() == reflect.String {
13 | optionType = discordgo.ApplicationCommandOptionString
14 | return
15 | }
16 |
17 | //TODO: Support user and members
18 | switch i {
19 | case reflect.TypeOf(""):
20 | optionType = discordgo.ApplicationCommandOptionString
21 | case reflect.TypeOf(int64(0)):
22 | optionType = discordgo.ApplicationCommandOptionInteger
23 | case reflect.TypeOf(true):
24 | optionType = discordgo.ApplicationCommandOptionBoolean
25 | case reflect.TypeOf((*discordgo.Member)(nil)):
26 | optionType = discordgo.ApplicationCommandOptionUser
27 | case reflect.TypeOf((*discordgo.Channel)(nil)):
28 | optionType = discordgo.ApplicationCommandOptionChannel
29 | case reflect.TypeOf((*discordgo.Role)(nil)):
30 | optionType = discordgo.ApplicationCommandOptionRole
31 | case reflect.TypeOf((*Mentionable)(nil)):
32 | optionType = discordgo.ApplicationCommandOptionMentionable
33 | case reflect.TypeOf(float64(0)):
34 | optionType = discordgo.ApplicationCommandOptionNumber
35 | case reflect.TypeOf((*discordgo.MessageAttachment)(nil)):
36 | optionType = discordgo.ApplicationCommandOptionAttachment
37 | default:
38 | err = errors.New("nope")
39 | }
40 |
41 | return
42 | }
43 |
44 | func resolveOptionsChannelTypes(f reflect.StructField) []discordgo.ChannelType {
45 | if tag, ok := f.Tag.Lookup("channels"); ok {
46 | list := strings.Split(tag, ",")
47 | channelTypes := make([]discordgo.ChannelType, len(list))
48 |
49 | for i, channelType := range list {
50 | switch channelType {
51 | case "GuildText":
52 | channelTypes[i] = discordgo.ChannelTypeGuildText
53 | case "DM":
54 | channelTypes[i] = discordgo.ChannelTypeDM
55 | case "GuildVoice":
56 | channelTypes[i] = discordgo.ChannelTypeGuildVoice
57 | case "GroupDM":
58 | channelTypes[i] = discordgo.ChannelTypeGroupDM
59 | case "GuildCategory":
60 | channelTypes[i] = discordgo.ChannelTypeGuildCategory
61 | case "GuildNews":
62 | channelTypes[i] = discordgo.ChannelTypeGuildNews
63 | case "GuildStore":
64 | channelTypes[i] = discordgo.ChannelTypeGuildStore
65 | case "GuildNewsThread":
66 | channelTypes[i] = discordgo.ChannelTypeGuildNewsThread
67 | case "GuildPublicThread":
68 | channelTypes[i] = discordgo.ChannelTypeGuildPublicThread
69 | case "GuildPrivateThread":
70 | channelTypes[i] = discordgo.ChannelTypeGuildPrivateThread
71 | case "GuildStageVoice":
72 | channelTypes[i] = discordgo.ChannelTypeGuildStageVoice
73 | case "GuildForum":
74 | channelTypes[i] = discordgo.ChannelTypeGuildForum
75 | default:
76 | // TODO: Can't be arsed to do this properly for now
77 | panic("No clue what you want from me")
78 | }
79 | }
80 |
81 | return channelTypes
82 | }
83 |
84 | return nil
85 | }
86 |
87 | func setCommandOption(v reflect.Value, o *discordgo.ApplicationCommandInteractionDataOption, r *discordgo.ApplicationCommandInteractionDataResolved) {
88 | switch o.Type {
89 | case discordgo.ApplicationCommandOptionString:
90 | v.SetString(o.Value.(string))
91 | case discordgo.ApplicationCommandOptionInteger:
92 | v.SetInt(int64(o.Value.(float64)))
93 | case discordgo.ApplicationCommandOptionBoolean:
94 | v.SetBool(o.Value.(bool))
95 | case discordgo.ApplicationCommandOptionNumber:
96 | v.SetFloat(o.Value.(float64))
97 | case discordgo.ApplicationCommandOptionUser:
98 | v.Set(reflect.ValueOf(r.Members[o.Value.(string)]))
99 | case discordgo.ApplicationCommandOptionChannel:
100 | v.Set(reflect.ValueOf(r.Channels[o.Value.(string)]))
101 | case discordgo.ApplicationCommandOptionRole:
102 | v.Set(reflect.ValueOf(r.Roles[o.Value.(string)]))
103 | case discordgo.ApplicationCommandOptionMentionable:
104 | v.Set(reflect.ValueOf(&Mentionable{
105 | id: o.Value.(string),
106 | resolvedUsers: r.Users,
107 | resolvedMembers: r.Members,
108 | resolvedRoles: r.Roles,
109 | }))
110 | case discordgo.ApplicationCommandOptionAttachment:
111 | v.Set(reflect.ValueOf(r.Attachments[o.Value.(string)]))
112 | }
113 |
114 | panic("No idea what I am suppose to do with that type: " + o.Name)
115 | }
116 |
117 | func resolveOptionMinValue(t reflect.StructField, optionType discordgo.ApplicationCommandOptionType) *float64 {
118 | if optionType == discordgo.ApplicationCommandOptionInteger || optionType == discordgo.ApplicationCommandOptionNumber {
119 | if min, err := strconv.ParseFloat(t.Tag.Get("min"), 64); err != nil {
120 | return &min
121 | }
122 | }
123 |
124 | return nil
125 | }
126 |
127 | func resolveOptionMaxValue(t reflect.StructField, optionType discordgo.ApplicationCommandOptionType) float64 {
128 | if optionType == discordgo.ApplicationCommandOptionInteger || optionType == discordgo.ApplicationCommandOptionNumber {
129 | if max, err := strconv.ParseFloat(t.Tag.Get("max"), 64); err != nil {
130 | return max
131 | }
132 | }
133 |
134 | return 0
135 | }
136 |
137 | func resolveOptionMinLength(t reflect.StructField, optionType discordgo.ApplicationCommandOptionType) *int {
138 | if optionType == discordgo.ApplicationCommandOptionString {
139 | if min, err := strconv.Atoi(t.Tag.Get("min")); err != nil {
140 | return &min
141 | }
142 | }
143 |
144 | return nil
145 | }
146 |
147 | func resolveOptionMaxLength(t reflect.StructField, optionType discordgo.ApplicationCommandOptionType) int {
148 | if optionType == discordgo.ApplicationCommandOptionString {
149 | if max, err := strconv.Atoi(t.Tag.Get("max")); err != nil {
150 | return max
151 | }
152 | }
153 |
154 | return 0
155 | }
156 |
157 | func resolveOptionChoices(t reflect.StructField) []*discordgo.ApplicationCommandOptionChoice {
158 | if t.Type.Implements(reflect.TypeOf((*choiceParam)(nil)).Elem()) {
159 | gen, _ := t.Type.MethodByName("Choices")
160 |
161 | return gen.Func.Call(nil)[0].Interface().([]*discordgo.ApplicationCommandOptionChoice)
162 | }
163 |
164 | return nil
165 | }
166 |
--------------------------------------------------------------------------------
/interactor/applicationcommand_options.go:
--------------------------------------------------------------------------------
1 | package interactor
2 |
3 | import (
4 | "errors"
5 | "github.com/bwmarrin/discordgo"
6 | "reflect"
7 | "strings"
8 | )
9 |
10 | type CommandPermissions struct {
11 | DefaultMemberPermissions *int64
12 | DMPermission *bool
13 | NSFW *bool
14 | }
15 |
16 | type Command interface {
17 | compileCommand(perms *CommandPermissions) (*discordgo.ApplicationCommand, commandExecuteDescriptor, error)
18 | }
19 |
20 | type CommandOptions interface {
21 | compileOption() (*discordgo.ApplicationCommandOption, commandExecuteDescriptor, error)
22 | }
23 |
24 | //
25 | //
26 | //
27 |
28 | type MemberCommand struct {
29 | Name string
30 | NameLocalizations *map[discordgo.Locale]string
31 | Callback any
32 | }
33 |
34 | func (c *MemberCommand) compileCommand(perms *CommandPermissions) (*discordgo.ApplicationCommand, commandExecuteDescriptor, error) {
35 | cmd := &discordgo.ApplicationCommand{
36 | Type: discordgo.UserApplicationCommand,
37 | Name: c.Name,
38 | NameLocalizations: c.NameLocalizations,
39 | DefaultMemberPermissions: perms.DefaultMemberPermissions,
40 | DMPermission: perms.DMPermission,
41 | NSFW: perms.NSFW,
42 | }
43 |
44 | callbackValue := reflect.ValueOf(c.Callback)
45 | paramType := callbackValue.Type().In(1)
46 | desc := &commandDescriptor{
47 | Callback: callbackValue,
48 | }
49 |
50 | if paramType == reflect.TypeOf((*discordgo.Member)(nil)) {
51 | desc.ParamGenerator = func(ctx *CommandContext, options []*discordgo.ApplicationCommandInteractionDataOption) reflect.Value {
52 | for _, value := range ctx.Data.Resolved.Members {
53 | return reflect.ValueOf(value)
54 | }
55 | panic("uuuggggghhhhhh")
56 | }
57 | } else if paramType == reflect.TypeOf((*discordgo.User)(nil)) {
58 | desc.ParamGenerator = func(ctx *CommandContext, options []*discordgo.ApplicationCommandInteractionDataOption) reflect.Value {
59 | for _, value := range ctx.Data.Resolved.Users {
60 | return reflect.ValueOf(value)
61 | }
62 | panic("uuuugggghhhhhhhhhhh")
63 | }
64 | } else {
65 | return nil, nil, errors.New("invalid second parameter for function")
66 | }
67 |
68 | return cmd, desc, nil
69 | }
70 |
71 | //
72 | //
73 | //
74 |
75 | type MessageCommand struct {
76 | Name string
77 | NameLocalizations *map[discordgo.Locale]string
78 | Callback any
79 | }
80 |
81 | func (c *MessageCommand) compileCommand(perms *CommandPermissions) (*discordgo.ApplicationCommand, commandExecuteDescriptor, error) {
82 | cmd := &discordgo.ApplicationCommand{
83 | Type: discordgo.MessageApplicationCommand,
84 | Name: c.Name,
85 | NameLocalizations: c.NameLocalizations,
86 | DefaultMemberPermissions: perms.DefaultMemberPermissions,
87 | DMPermission: perms.DMPermission,
88 | NSFW: perms.NSFW,
89 | }
90 |
91 | callbackValue := reflect.ValueOf(c.Callback)
92 | desc := &commandDescriptor{
93 | Callback: callbackValue,
94 | ParamGenerator: func(ctx *CommandContext, options []*discordgo.ApplicationCommandInteractionDataOption) reflect.Value {
95 | for _, value := range ctx.Data.Resolved.Messages {
96 | return reflect.ValueOf(value)
97 | }
98 | panic("uggghhhh")
99 | },
100 | }
101 |
102 | return cmd, desc, nil
103 | }
104 |
105 | //
106 | //
107 | //
108 |
109 | type SlashCommand struct {
110 | Name string
111 | NameLocalizations *map[discordgo.Locale]string
112 | Description string
113 | DescriptionLocalizations *map[discordgo.Locale]string
114 | Callback any
115 | }
116 |
117 | func (c *SlashCommand) compileCommand(perms *CommandPermissions) (*discordgo.ApplicationCommand, commandExecuteDescriptor, error) {
118 | option, desc, err := c.compileOption()
119 |
120 | if err != nil {
121 | return nil, nil, err
122 | }
123 |
124 | cmd := &discordgo.ApplicationCommand{
125 | Type: discordgo.ChatApplicationCommand,
126 | Name: option.Name,
127 | NameLocalizations: c.NameLocalizations,
128 | Description: option.Description,
129 | DescriptionLocalizations: c.DescriptionLocalizations,
130 | DefaultMemberPermissions: perms.DefaultMemberPermissions,
131 | DMPermission: perms.DMPermission,
132 | NSFW: perms.NSFW,
133 | }
134 |
135 | return cmd, desc, nil
136 | }
137 |
138 | func (c *SlashCommand) compileOption() (*discordgo.ApplicationCommandOption, commandExecuteDescriptor, error) {
139 | option := &discordgo.ApplicationCommandOption{
140 | Type: discordgo.ApplicationCommandOptionSubCommand,
141 | Name: c.Name,
142 | Description: c.Description,
143 | }
144 |
145 | callbackValue := reflect.ValueOf(c.Callback)
146 | desc := &commandDescriptor{
147 | Callback: callbackValue,
148 | }
149 |
150 | if callbackType := callbackValue.Type(); callbackType.NumIn() > 1 {
151 | var err error
152 | option.Options, desc.ParamGenerator, err = c.inferParams(callbackType.In(1).Elem())
153 |
154 | if err != nil {
155 | return nil, nil, err
156 | }
157 | }
158 |
159 | return option, desc, nil
160 | }
161 |
162 | func (c *SlashCommand) inferParams(param reflect.Type) (options []*discordgo.ApplicationCommandOption, gen commandParamGenerator, err error) {
163 | nameToFieldMap := make(map[string][]int)
164 |
165 | for _, field := range reflect.VisibleFields(param) {
166 | if field.Anonymous {
167 | continue
168 | }
169 |
170 | option, errField := c.inferFieldOption(field)
171 | err = errField
172 | if err != nil {
173 | return
174 | }
175 |
176 | options = append(options, option)
177 | nameToFieldMap[option.Name] = field.Index
178 | }
179 |
180 | gen = func(ctx *CommandContext, options []*discordgo.ApplicationCommandInteractionDataOption) (value reflect.Value) {
181 | value = reflect.New(param)
182 | elemValue := value.Elem()
183 |
184 | for _, option := range options {
185 | setCommandOption(elemValue.FieldByIndex(nameToFieldMap[option.Name]), option, ctx.Data.Resolved)
186 | }
187 |
188 | return
189 | }
190 |
191 | return
192 | }
193 |
194 | func (c *SlashCommand) inferFieldOption(field reflect.StructField) (*discordgo.ApplicationCommandOption, error) {
195 | optionType, err := resolveCommandOptionType(field.Type)
196 | if err != nil {
197 | return nil, err
198 | }
199 |
200 | option := &discordgo.ApplicationCommandOption{
201 | Type: optionType,
202 | Name: strings.ToLower(field.Name),
203 | NameLocalizations: nil,
204 | Description: field.Tag.Get("description"),
205 | DescriptionLocalizations: nil,
206 | Required: field.Tag.Get("required") == "true",
207 | ChannelTypes: resolveOptionsChannelTypes(field),
208 | Choices: resolveOptionChoices(field),
209 | MinValue: resolveOptionMinValue(field, optionType),
210 | MaxValue: resolveOptionMaxValue(field, optionType),
211 | MinLength: resolveOptionMinLength(field, optionType),
212 | MaxLength: resolveOptionMaxLength(field, optionType),
213 | }
214 |
215 | return option, err
216 | }
217 |
218 | //
219 | //
220 | //
221 |
222 | type SlashCommandGroup struct {
223 | Name string
224 | NameLocalizations *map[discordgo.Locale]string
225 | Description string
226 | DescriptionLocalizations *map[discordgo.Locale]string
227 | SubCommands []CommandOptions
228 | }
229 |
230 | func (c *SlashCommandGroup) compileCommand(perms *CommandPermissions) (*discordgo.ApplicationCommand, commandExecuteDescriptor, error) {
231 | option, desc, err := c.compileOption()
232 |
233 | cmd := &discordgo.ApplicationCommand{
234 | Type: discordgo.ChatApplicationCommand,
235 | Name: option.Name,
236 | NameLocalizations: c.NameLocalizations,
237 | Description: option.Description,
238 | DescriptionLocalizations: c.DescriptionLocalizations,
239 | Options: option.Options,
240 | DefaultMemberPermissions: perms.DefaultMemberPermissions,
241 | DMPermission: perms.DMPermission,
242 | NSFW: perms.NSFW,
243 | }
244 |
245 | return cmd, desc, err
246 | }
247 |
248 | func (c *SlashCommandGroup) compileOption() (*discordgo.ApplicationCommandOption, commandExecuteDescriptor, error) {
249 | options := make([]*discordgo.ApplicationCommandOption, len(c.SubCommands))
250 | subCommands := make(map[string]commandExecuteDescriptor, len(c.SubCommands))
251 |
252 | for i, sub := range c.SubCommands {
253 | option, subDesc, err := sub.compileOption()
254 |
255 | if err != nil {
256 | return nil, nil, err
257 | }
258 |
259 | options[i] = option
260 | subCommands[option.Name] = subDesc
261 | }
262 |
263 | option := &discordgo.ApplicationCommandOption{
264 | Type: discordgo.ApplicationCommandOptionSubCommandGroup,
265 | Name: c.Name,
266 | Description: c.Description,
267 | Options: options,
268 | }
269 |
270 | desc := &commandGroupDescriptor{
271 | SubCommands: subCommands,
272 | }
273 |
274 | return option, desc, nil
275 | }
276 |
277 | //
278 | //
279 | //
280 |
281 | type choiceParam interface {
282 | Choices() []*discordgo.ApplicationCommandOptionChoice
283 | }
284 |
--------------------------------------------------------------------------------
/yarn.lock:
--------------------------------------------------------------------------------
1 | # THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
2 | # yarn lockfile v1
3 |
4 |
5 | "@babel/code-frame@^7.0.0":
6 | version "7.22.10"
7 | resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.22.10.tgz#1c20e612b768fefa75f6e90d6ecb86329247f0a3"
8 | integrity sha512-/KKIMG4UEL35WmI9OlvMhurwtytjvXoFcGNrOvyG9zIzA8YmPjVtIZUf7b05+TPO7G7/GEmLHDaoCgACHl9hhA==
9 | dependencies:
10 | "@babel/highlight" "^7.22.10"
11 | chalk "^2.4.2"
12 |
13 | "@babel/helper-validator-identifier@^7.22.5":
14 | version "7.22.5"
15 | resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.5.tgz#9544ef6a33999343c8740fa51350f30eeaaaf193"
16 | integrity sha512-aJXu+6lErq8ltp+JhkJUfk1MTGyuA4v7f3pA+BJ5HLfNC6nAQ0Cpi9uOquUj8Hehg0aUiHzWQbOVJGao6ztBAQ==
17 |
18 | "@babel/highlight@^7.22.10":
19 | version "7.22.10"
20 | resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.22.10.tgz#02a3f6d8c1cb4521b2fd0ab0da8f4739936137d7"
21 | integrity sha512-78aUtVcT7MUscr0K5mIEnkwxPE0MaxkR5RxRwuHaQ+JuU5AmTPhY+do2mdzVTnIJJpyBglql2pehuBIWHug+WQ==
22 | dependencies:
23 | "@babel/helper-validator-identifier" "^7.22.5"
24 | chalk "^2.4.2"
25 | js-tokens "^4.0.0"
26 |
27 | "@babel/runtime@^7.20.1", "@babel/runtime@^7.5.5":
28 | version "7.22.10"
29 | resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.22.10.tgz#ae3e9631fd947cb7e3610d3e9d8fef5f76696682"
30 | integrity sha512-21t/fkKLMZI4pqP2wlmsQAWnYW1PDyKyyUV4vCi+B25ydmdaYTKXPwCj0BzSUnZf4seIiYvSA3jcZ3gdsMFkLQ==
31 | dependencies:
32 | regenerator-runtime "^0.14.0"
33 |
34 | "@changesets/apply-release-plan@^6.1.4":
35 | version "6.1.4"
36 | resolved "https://registry.yarnpkg.com/@changesets/apply-release-plan/-/apply-release-plan-6.1.4.tgz#09293256090737ecd2f683842d6d732034a5e3c8"
37 | integrity sha512-FMpKF1fRlJyCZVYHr3CbinpZZ+6MwvOtWUuO8uo+svcATEoc1zRDcj23pAurJ2TZ/uVz1wFHH6K3NlACy0PLew==
38 | dependencies:
39 | "@babel/runtime" "^7.20.1"
40 | "@changesets/config" "^2.3.1"
41 | "@changesets/get-version-range-type" "^0.3.2"
42 | "@changesets/git" "^2.0.0"
43 | "@changesets/types" "^5.2.1"
44 | "@manypkg/get-packages" "^1.1.3"
45 | detect-indent "^6.0.0"
46 | fs-extra "^7.0.1"
47 | lodash.startcase "^4.4.0"
48 | outdent "^0.5.0"
49 | prettier "^2.7.1"
50 | resolve-from "^5.0.0"
51 | semver "^7.5.3"
52 |
53 | "@changesets/assemble-release-plan@^5.2.4":
54 | version "5.2.4"
55 | resolved "https://registry.yarnpkg.com/@changesets/assemble-release-plan/-/assemble-release-plan-5.2.4.tgz#d42fd63f4297a2e630e8e0a49f07d4ff5f5ef7bc"
56 | integrity sha512-xJkWX+1/CUaOUWTguXEbCDTyWJFECEhmdtbkjhn5GVBGxdP/JwaHBIU9sW3FR6gD07UwZ7ovpiPclQZs+j+mvg==
57 | dependencies:
58 | "@babel/runtime" "^7.20.1"
59 | "@changesets/errors" "^0.1.4"
60 | "@changesets/get-dependents-graph" "^1.3.6"
61 | "@changesets/types" "^5.2.1"
62 | "@manypkg/get-packages" "^1.1.3"
63 | semver "^7.5.3"
64 |
65 | "@changesets/changelog-git@^0.1.14":
66 | version "0.1.14"
67 | resolved "https://registry.yarnpkg.com/@changesets/changelog-git/-/changelog-git-0.1.14.tgz#852caa7727dcf91497c131d05bc2cd6248532ada"
68 | integrity sha512-+vRfnKtXVWsDDxGctOfzJsPhaCdXRYoe+KyWYoq5X/GqoISREiat0l3L8B0a453B2B4dfHGcZaGyowHbp9BSaA==
69 | dependencies:
70 | "@changesets/types" "^5.2.1"
71 |
72 | "@changesets/changelog-github@^0.4.8":
73 | version "0.4.8"
74 | resolved "https://registry.yarnpkg.com/@changesets/changelog-github/-/changelog-github-0.4.8.tgz#b7f8ae85d0c0ff08028d924c5e59a1cbd3742634"
75 | integrity sha512-jR1DHibkMAb5v/8ym77E4AMNWZKB5NPzw5a5Wtqm1JepAuIF+hrKp2u04NKM14oBZhHglkCfrla9uq8ORnK/dw==
76 | dependencies:
77 | "@changesets/get-github-info" "^0.5.2"
78 | "@changesets/types" "^5.2.1"
79 | dotenv "^8.1.0"
80 |
81 | "@changesets/cli@^2.26.2":
82 | version "2.26.2"
83 | resolved "https://registry.yarnpkg.com/@changesets/cli/-/cli-2.26.2.tgz#8914dd6ef3ea425a7d5935f6c35a8b7ccde54e45"
84 | integrity sha512-dnWrJTmRR8bCHikJHl9b9HW3gXACCehz4OasrXpMp7sx97ECuBGGNjJhjPhdZNCvMy9mn4BWdplI323IbqsRig==
85 | dependencies:
86 | "@babel/runtime" "^7.20.1"
87 | "@changesets/apply-release-plan" "^6.1.4"
88 | "@changesets/assemble-release-plan" "^5.2.4"
89 | "@changesets/changelog-git" "^0.1.14"
90 | "@changesets/config" "^2.3.1"
91 | "@changesets/errors" "^0.1.4"
92 | "@changesets/get-dependents-graph" "^1.3.6"
93 | "@changesets/get-release-plan" "^3.0.17"
94 | "@changesets/git" "^2.0.0"
95 | "@changesets/logger" "^0.0.5"
96 | "@changesets/pre" "^1.0.14"
97 | "@changesets/read" "^0.5.9"
98 | "@changesets/types" "^5.2.1"
99 | "@changesets/write" "^0.2.3"
100 | "@manypkg/get-packages" "^1.1.3"
101 | "@types/is-ci" "^3.0.0"
102 | "@types/semver" "^7.5.0"
103 | ansi-colors "^4.1.3"
104 | chalk "^2.1.0"
105 | enquirer "^2.3.0"
106 | external-editor "^3.1.0"
107 | fs-extra "^7.0.1"
108 | human-id "^1.0.2"
109 | is-ci "^3.0.1"
110 | meow "^6.0.0"
111 | outdent "^0.5.0"
112 | p-limit "^2.2.0"
113 | preferred-pm "^3.0.0"
114 | resolve-from "^5.0.0"
115 | semver "^7.5.3"
116 | spawndamnit "^2.0.0"
117 | term-size "^2.1.0"
118 | tty-table "^4.1.5"
119 |
120 | "@changesets/config@^2.3.1":
121 | version "2.3.1"
122 | resolved "https://registry.yarnpkg.com/@changesets/config/-/config-2.3.1.tgz#3d4a1dc866c3623375180b30f69fccdf0e3efebf"
123 | integrity sha512-PQXaJl82CfIXddUOppj4zWu+987GCw2M+eQcOepxN5s+kvnsZOwjEJO3DH9eVy+OP6Pg/KFEWdsECFEYTtbg6w==
124 | dependencies:
125 | "@changesets/errors" "^0.1.4"
126 | "@changesets/get-dependents-graph" "^1.3.6"
127 | "@changesets/logger" "^0.0.5"
128 | "@changesets/types" "^5.2.1"
129 | "@manypkg/get-packages" "^1.1.3"
130 | fs-extra "^7.0.1"
131 | micromatch "^4.0.2"
132 |
133 | "@changesets/errors@^0.1.4":
134 | version "0.1.4"
135 | resolved "https://registry.yarnpkg.com/@changesets/errors/-/errors-0.1.4.tgz#f79851746c43679a66b383fdff4c012f480f480d"
136 | integrity sha512-HAcqPF7snsUJ/QzkWoKfRfXushHTu+K5KZLJWPb34s4eCZShIf8BFO3fwq6KU8+G7L5KdtN2BzQAXOSXEyiY9Q==
137 | dependencies:
138 | extendable-error "^0.1.5"
139 |
140 | "@changesets/get-dependents-graph@^1.3.6":
141 | version "1.3.6"
142 | resolved "https://registry.yarnpkg.com/@changesets/get-dependents-graph/-/get-dependents-graph-1.3.6.tgz#5e19e7b0bfbc7dc38e1986eaaa7016ff377ed888"
143 | integrity sha512-Q/sLgBANmkvUm09GgRsAvEtY3p1/5OCzgBE5vX3vgb5CvW0j7CEljocx5oPXeQSNph6FXulJlXV3Re/v3K3P3Q==
144 | dependencies:
145 | "@changesets/types" "^5.2.1"
146 | "@manypkg/get-packages" "^1.1.3"
147 | chalk "^2.1.0"
148 | fs-extra "^7.0.1"
149 | semver "^7.5.3"
150 |
151 | "@changesets/get-github-info@^0.5.2":
152 | version "0.5.2"
153 | resolved "https://registry.yarnpkg.com/@changesets/get-github-info/-/get-github-info-0.5.2.tgz#0cde2cadba57db85c714dc303c077da919a574e5"
154 | integrity sha512-JppheLu7S114aEs157fOZDjFqUDpm7eHdq5E8SSR0gUBTEK0cNSHsrSR5a66xs0z3RWuo46QvA3vawp8BxDHvg==
155 | dependencies:
156 | dataloader "^1.4.0"
157 | node-fetch "^2.5.0"
158 |
159 | "@changesets/get-release-plan@^3.0.17":
160 | version "3.0.17"
161 | resolved "https://registry.yarnpkg.com/@changesets/get-release-plan/-/get-release-plan-3.0.17.tgz#8aabced2795ffeae864696b60ee3031f8a94c5f3"
162 | integrity sha512-6IwKTubNEgoOZwDontYc2x2cWXfr6IKxP3IhKeK+WjyD6y3M4Gl/jdQvBw+m/5zWILSOCAaGLu2ZF6Q+WiPniw==
163 | dependencies:
164 | "@babel/runtime" "^7.20.1"
165 | "@changesets/assemble-release-plan" "^5.2.4"
166 | "@changesets/config" "^2.3.1"
167 | "@changesets/pre" "^1.0.14"
168 | "@changesets/read" "^0.5.9"
169 | "@changesets/types" "^5.2.1"
170 | "@manypkg/get-packages" "^1.1.3"
171 |
172 | "@changesets/get-version-range-type@^0.3.2":
173 | version "0.3.2"
174 | resolved "https://registry.yarnpkg.com/@changesets/get-version-range-type/-/get-version-range-type-0.3.2.tgz#8131a99035edd11aa7a44c341cbb05e668618c67"
175 | integrity sha512-SVqwYs5pULYjYT4op21F2pVbcrca4qA/bAA3FmFXKMN7Y+HcO8sbZUTx3TAy2VXulP2FACd1aC7f2nTuqSPbqg==
176 |
177 | "@changesets/git@^2.0.0":
178 | version "2.0.0"
179 | resolved "https://registry.yarnpkg.com/@changesets/git/-/git-2.0.0.tgz#8de57649baf13a86eb669a25fa51bcad5cea517f"
180 | integrity sha512-enUVEWbiqUTxqSnmesyJGWfzd51PY4H7mH9yUw0hPVpZBJ6tQZFMU3F3mT/t9OJ/GjyiM4770i+sehAn6ymx6A==
181 | dependencies:
182 | "@babel/runtime" "^7.20.1"
183 | "@changesets/errors" "^0.1.4"
184 | "@changesets/types" "^5.2.1"
185 | "@manypkg/get-packages" "^1.1.3"
186 | is-subdir "^1.1.1"
187 | micromatch "^4.0.2"
188 | spawndamnit "^2.0.0"
189 |
190 | "@changesets/logger@^0.0.5":
191 | version "0.0.5"
192 | resolved "https://registry.yarnpkg.com/@changesets/logger/-/logger-0.0.5.tgz#68305dd5a643e336be16a2369cb17cdd8ed37d4c"
193 | integrity sha512-gJyZHomu8nASHpaANzc6bkQMO9gU/ib20lqew1rVx753FOxffnCrJlGIeQVxNWCqM+o6OOleCo/ivL8UAO5iFw==
194 | dependencies:
195 | chalk "^2.1.0"
196 |
197 | "@changesets/parse@^0.3.16":
198 | version "0.3.16"
199 | resolved "https://registry.yarnpkg.com/@changesets/parse/-/parse-0.3.16.tgz#f8337b70aeb476dc81745ab3294022909bc4a84a"
200 | integrity sha512-127JKNd167ayAuBjUggZBkmDS5fIKsthnr9jr6bdnuUljroiERW7FBTDNnNVyJ4l69PzR57pk6mXQdtJyBCJKg==
201 | dependencies:
202 | "@changesets/types" "^5.2.1"
203 | js-yaml "^3.13.1"
204 |
205 | "@changesets/pre@^1.0.14":
206 | version "1.0.14"
207 | resolved "https://registry.yarnpkg.com/@changesets/pre/-/pre-1.0.14.tgz#9df73999a4d15804da7381358d77bb37b00ddf0f"
208 | integrity sha512-dTsHmxQWEQekHYHbg+M1mDVYFvegDh9j/kySNuDKdylwfMEevTeDouR7IfHNyVodxZXu17sXoJuf2D0vi55FHQ==
209 | dependencies:
210 | "@babel/runtime" "^7.20.1"
211 | "@changesets/errors" "^0.1.4"
212 | "@changesets/types" "^5.2.1"
213 | "@manypkg/get-packages" "^1.1.3"
214 | fs-extra "^7.0.1"
215 |
216 | "@changesets/read@^0.5.9":
217 | version "0.5.9"
218 | resolved "https://registry.yarnpkg.com/@changesets/read/-/read-0.5.9.tgz#a1b63a82b8e9409738d7a0f9cc39b6d7c28cbab0"
219 | integrity sha512-T8BJ6JS6j1gfO1HFq50kU3qawYxa4NTbI/ASNVVCBTsKquy2HYwM9r7ZnzkiMe8IEObAJtUVGSrePCOxAK2haQ==
220 | dependencies:
221 | "@babel/runtime" "^7.20.1"
222 | "@changesets/git" "^2.0.0"
223 | "@changesets/logger" "^0.0.5"
224 | "@changesets/parse" "^0.3.16"
225 | "@changesets/types" "^5.2.1"
226 | chalk "^2.1.0"
227 | fs-extra "^7.0.1"
228 | p-filter "^2.1.0"
229 |
230 | "@changesets/types@^4.0.1":
231 | version "4.1.0"
232 | resolved "https://registry.yarnpkg.com/@changesets/types/-/types-4.1.0.tgz#fb8f7ca2324fd54954824e864f9a61a82cb78fe0"
233 | integrity sha512-LDQvVDv5Kb50ny2s25Fhm3d9QSZimsoUGBsUioj6MC3qbMUCuC8GPIvk/M6IvXx3lYhAs0lwWUQLb+VIEUCECw==
234 |
235 | "@changesets/types@^5.2.1":
236 | version "5.2.1"
237 | resolved "https://registry.yarnpkg.com/@changesets/types/-/types-5.2.1.tgz#a228c48004aa8a93bce4be2d1d31527ef3bf21f6"
238 | integrity sha512-myLfHbVOqaq9UtUKqR/nZA/OY7xFjQMdfgfqeZIBK4d0hA6pgxArvdv8M+6NUzzBsjWLOtvApv8YHr4qM+Kpfg==
239 |
240 | "@changesets/write@^0.2.3":
241 | version "0.2.3"
242 | resolved "https://registry.yarnpkg.com/@changesets/write/-/write-0.2.3.tgz#baf6be8ada2a67b9aba608e251bfea4fdc40bc63"
243 | integrity sha512-Dbamr7AIMvslKnNYsLFafaVORx4H0pvCA2MHqgtNCySMe1blImEyAEOzDmcgKAkgz4+uwoLz7demIrX+JBr/Xw==
244 | dependencies:
245 | "@babel/runtime" "^7.20.1"
246 | "@changesets/types" "^5.2.1"
247 | fs-extra "^7.0.1"
248 | human-id "^1.0.2"
249 | prettier "^2.7.1"
250 |
251 | "@commitlint/cli@^17.7.1":
252 | version "17.7.1"
253 | resolved "https://registry.yarnpkg.com/@commitlint/cli/-/cli-17.7.1.tgz#f3ab35bd38d82fcd4ab03ec5a1e9db26d57fe1b0"
254 | integrity sha512-BCm/AT06SNCQtvFv921iNhudOHuY16LswT0R3OeolVGLk8oP+Rk9TfQfgjH7QPMjhvp76bNqGFEcpKojxUNW1g==
255 | dependencies:
256 | "@commitlint/format" "^17.4.4"
257 | "@commitlint/lint" "^17.7.0"
258 | "@commitlint/load" "^17.7.1"
259 | "@commitlint/read" "^17.5.1"
260 | "@commitlint/types" "^17.4.4"
261 | execa "^5.0.0"
262 | lodash.isfunction "^3.0.9"
263 | resolve-from "5.0.0"
264 | resolve-global "1.0.0"
265 | yargs "^17.0.0"
266 |
267 | "@commitlint/config-conventional@^17.7.0":
268 | version "17.7.0"
269 | resolved "https://registry.yarnpkg.com/@commitlint/config-conventional/-/config-conventional-17.7.0.tgz#1bbf2bce7851db63c1a8aa8d924277ad4938247e"
270 | integrity sha512-iicqh2o6et+9kWaqsQiEYZzfLbtoWv9uZl8kbI8EGfnc0HeGafQBF7AJ0ylN9D/2kj6txltsdyQs8+2fTMwWEw==
271 | dependencies:
272 | conventional-changelog-conventionalcommits "^6.1.0"
273 |
274 | "@commitlint/config-validator@^17.6.7":
275 | version "17.6.7"
276 | resolved "https://registry.yarnpkg.com/@commitlint/config-validator/-/config-validator-17.6.7.tgz#c664d42a1ecf5040a3bb0843845150f55734df41"
277 | integrity sha512-vJSncmnzwMvpr3lIcm0I8YVVDJTzyjy7NZAeXbTXy+MPUdAr9pKyyg7Tx/ebOQ9kqzE6O9WT6jg2164br5UdsQ==
278 | dependencies:
279 | "@commitlint/types" "^17.4.4"
280 | ajv "^8.11.0"
281 |
282 | "@commitlint/ensure@^17.6.7":
283 | version "17.6.7"
284 | resolved "https://registry.yarnpkg.com/@commitlint/ensure/-/ensure-17.6.7.tgz#77a77a0c05e6a1c34589f59e82e6cb937101fc4b"
285 | integrity sha512-mfDJOd1/O/eIb/h4qwXzUxkmskXDL9vNPnZ4AKYKiZALz4vHzwMxBSYtyL2mUIDeU9DRSpEUins8SeKtFkYHSw==
286 | dependencies:
287 | "@commitlint/types" "^17.4.4"
288 | lodash.camelcase "^4.3.0"
289 | lodash.kebabcase "^4.1.1"
290 | lodash.snakecase "^4.1.1"
291 | lodash.startcase "^4.4.0"
292 | lodash.upperfirst "^4.3.1"
293 |
294 | "@commitlint/execute-rule@^17.4.0":
295 | version "17.4.0"
296 | resolved "https://registry.yarnpkg.com/@commitlint/execute-rule/-/execute-rule-17.4.0.tgz#4518e77958893d0a5835babe65bf87e2638f6939"
297 | integrity sha512-LIgYXuCSO5Gvtc0t9bebAMSwd68ewzmqLypqI2Kke1rqOqqDbMpYcYfoPfFlv9eyLIh4jocHWwCK5FS7z9icUA==
298 |
299 | "@commitlint/format@^17.4.4":
300 | version "17.4.4"
301 | resolved "https://registry.yarnpkg.com/@commitlint/format/-/format-17.4.4.tgz#0f6e1b4d7a301c7b1dfd4b6334edd97fc050b9f5"
302 | integrity sha512-+IS7vpC4Gd/x+uyQPTAt3hXs5NxnkqAZ3aqrHd5Bx/R9skyCAWusNlNbw3InDbAK6j166D9asQM8fnmYIa+CXQ==
303 | dependencies:
304 | "@commitlint/types" "^17.4.4"
305 | chalk "^4.1.0"
306 |
307 | "@commitlint/is-ignored@^17.7.0":
308 | version "17.7.0"
309 | resolved "https://registry.yarnpkg.com/@commitlint/is-ignored/-/is-ignored-17.7.0.tgz#df9b284420bdb1aed5fdb2be44f4e98cc4826014"
310 | integrity sha512-043rA7m45tyEfW7Zv2vZHF++176MLHH9h70fnPoYlB1slKBeKl8BwNIlnPg4xBdRBVNPaCqvXxWswx2GR4c9Hw==
311 | dependencies:
312 | "@commitlint/types" "^17.4.4"
313 | semver "7.5.4"
314 |
315 | "@commitlint/lint@^17.7.0":
316 | version "17.7.0"
317 | resolved "https://registry.yarnpkg.com/@commitlint/lint/-/lint-17.7.0.tgz#33f831298dc43679e4de6b088aea63d1f884c7e7"
318 | integrity sha512-TCQihm7/uszA5z1Ux1vw+Nf3yHTgicus/+9HiUQk+kRSQawByxZNESeQoX9ujfVd3r4Sa+3fn0JQAguG4xvvbA==
319 | dependencies:
320 | "@commitlint/is-ignored" "^17.7.0"
321 | "@commitlint/parse" "^17.7.0"
322 | "@commitlint/rules" "^17.7.0"
323 | "@commitlint/types" "^17.4.4"
324 |
325 | "@commitlint/load@^17.7.1":
326 | version "17.7.1"
327 | resolved "https://registry.yarnpkg.com/@commitlint/load/-/load-17.7.1.tgz#0723b11723a20043a304a74960602dead89b5cdd"
328 | integrity sha512-S/QSOjE1ztdogYj61p6n3UbkUvweR17FQ0zDbNtoTLc+Hz7vvfS7ehoTMQ27hPSjVBpp7SzEcOQu081RLjKHJQ==
329 | dependencies:
330 | "@commitlint/config-validator" "^17.6.7"
331 | "@commitlint/execute-rule" "^17.4.0"
332 | "@commitlint/resolve-extends" "^17.6.7"
333 | "@commitlint/types" "^17.4.4"
334 | "@types/node" "20.4.7"
335 | chalk "^4.1.0"
336 | cosmiconfig "^8.0.0"
337 | cosmiconfig-typescript-loader "^4.0.0"
338 | lodash.isplainobject "^4.0.6"
339 | lodash.merge "^4.6.2"
340 | lodash.uniq "^4.5.0"
341 | resolve-from "^5.0.0"
342 | ts-node "^10.8.1"
343 | typescript "^4.6.4 || ^5.0.0"
344 |
345 | "@commitlint/message@^17.4.2":
346 | version "17.4.2"
347 | resolved "https://registry.yarnpkg.com/@commitlint/message/-/message-17.4.2.tgz#f4753a79701ad6db6db21f69076e34de6580e22c"
348 | integrity sha512-3XMNbzB+3bhKA1hSAWPCQA3lNxR4zaeQAQcHj0Hx5sVdO6ryXtgUBGGv+1ZCLMgAPRixuc6en+iNAzZ4NzAa8Q==
349 |
350 | "@commitlint/parse@^17.7.0":
351 | version "17.7.0"
352 | resolved "https://registry.yarnpkg.com/@commitlint/parse/-/parse-17.7.0.tgz#aacb2d189e50ab8454154b1df150aaf20478ae47"
353 | integrity sha512-dIvFNUMCUHqq5Abv80mIEjLVfw8QNuA4DS7OWip4pcK/3h5wggmjVnlwGCDvDChkw2TjK1K6O+tAEV78oxjxag==
354 | dependencies:
355 | "@commitlint/types" "^17.4.4"
356 | conventional-changelog-angular "^6.0.0"
357 | conventional-commits-parser "^4.0.0"
358 |
359 | "@commitlint/read@^17.5.1":
360 | version "17.5.1"
361 | resolved "https://registry.yarnpkg.com/@commitlint/read/-/read-17.5.1.tgz#fec903b766e2c41e3cefa80630040fcaba4f786c"
362 | integrity sha512-7IhfvEvB//p9aYW09YVclHbdf1u7g7QhxeYW9ZHSO8Huzp8Rz7m05aCO1mFG7G8M+7yfFnXB5xOmG18brqQIBg==
363 | dependencies:
364 | "@commitlint/top-level" "^17.4.0"
365 | "@commitlint/types" "^17.4.4"
366 | fs-extra "^11.0.0"
367 | git-raw-commits "^2.0.11"
368 | minimist "^1.2.6"
369 |
370 | "@commitlint/resolve-extends@^17.6.7":
371 | version "17.6.7"
372 | resolved "https://registry.yarnpkg.com/@commitlint/resolve-extends/-/resolve-extends-17.6.7.tgz#9c53a4601c96ab2dd20b90fb35c988639307735d"
373 | integrity sha512-PfeoAwLHtbOaC9bGn/FADN156CqkFz6ZKiVDMjuC2N5N0740Ke56rKU7Wxdwya8R8xzLK9vZzHgNbuGhaOVKIg==
374 | dependencies:
375 | "@commitlint/config-validator" "^17.6.7"
376 | "@commitlint/types" "^17.4.4"
377 | import-fresh "^3.0.0"
378 | lodash.mergewith "^4.6.2"
379 | resolve-from "^5.0.0"
380 | resolve-global "^1.0.0"
381 |
382 | "@commitlint/rules@^17.7.0":
383 | version "17.7.0"
384 | resolved "https://registry.yarnpkg.com/@commitlint/rules/-/rules-17.7.0.tgz#b97a4933c5cba11a659a19ee467f6f000f31533e"
385 | integrity sha512-J3qTh0+ilUE5folSaoK91ByOb8XeQjiGcdIdiB/8UT1/Rd1itKo0ju/eQVGyFzgTMYt8HrDJnGTmNWwcMR1rmA==
386 | dependencies:
387 | "@commitlint/ensure" "^17.6.7"
388 | "@commitlint/message" "^17.4.2"
389 | "@commitlint/to-lines" "^17.4.0"
390 | "@commitlint/types" "^17.4.4"
391 | execa "^5.0.0"
392 |
393 | "@commitlint/to-lines@^17.4.0":
394 | version "17.4.0"
395 | resolved "https://registry.yarnpkg.com/@commitlint/to-lines/-/to-lines-17.4.0.tgz#9bd02e911e7d4eab3fb4a50376c4c6d331e10d8d"
396 | integrity sha512-LcIy/6ZZolsfwDUWfN1mJ+co09soSuNASfKEU5sCmgFCvX5iHwRYLiIuoqXzOVDYOy7E7IcHilr/KS0e5T+0Hg==
397 |
398 | "@commitlint/top-level@^17.4.0":
399 | version "17.4.0"
400 | resolved "https://registry.yarnpkg.com/@commitlint/top-level/-/top-level-17.4.0.tgz#540cac8290044cf846fbdd99f5cc51e8ac5f27d6"
401 | integrity sha512-/1loE/g+dTTQgHnjoCy0AexKAEFyHsR2zRB4NWrZ6lZSMIxAhBJnmCqwao7b4H8888PsfoTBCLBYIw8vGnej8g==
402 | dependencies:
403 | find-up "^5.0.0"
404 |
405 | "@commitlint/types@^17.4.4":
406 | version "17.4.4"
407 | resolved "https://registry.yarnpkg.com/@commitlint/types/-/types-17.4.4.tgz#1416df936e9aad0d6a7bbc979ecc31e55dade662"
408 | integrity sha512-amRN8tRLYOsxRr6mTnGGGvB5EmW/4DDjLMgiwK3CCVEmN6Sr/6xePGEpWaspKkckILuUORCwe6VfDBw6uj4axQ==
409 | dependencies:
410 | chalk "^4.1.0"
411 |
412 | "@cspotcode/source-map-support@^0.8.0":
413 | version "0.8.1"
414 | resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1"
415 | integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==
416 | dependencies:
417 | "@jridgewell/trace-mapping" "0.3.9"
418 |
419 | "@jridgewell/resolve-uri@^3.0.3":
420 | version "3.1.1"
421 | resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz#c08679063f279615a3326583ba3a90d1d82cc721"
422 | integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==
423 |
424 | "@jridgewell/sourcemap-codec@^1.4.10":
425 | version "1.4.15"
426 | resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32"
427 | integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==
428 |
429 | "@jridgewell/trace-mapping@0.3.9":
430 | version "0.3.9"
431 | resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz#6534fd5933a53ba7cbf3a17615e273a0d1273ff9"
432 | integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==
433 | dependencies:
434 | "@jridgewell/resolve-uri" "^3.0.3"
435 | "@jridgewell/sourcemap-codec" "^1.4.10"
436 |
437 | "@manypkg/find-root@^1.1.0":
438 | version "1.1.0"
439 | resolved "https://registry.yarnpkg.com/@manypkg/find-root/-/find-root-1.1.0.tgz#a62d8ed1cd7e7d4c11d9d52a8397460b5d4ad29f"
440 | integrity sha512-mki5uBvhHzO8kYYix/WRy2WX8S3B5wdVSc9D6KcU5lQNglP2yt58/VfLuAK49glRXChosY8ap2oJ1qgma3GUVA==
441 | dependencies:
442 | "@babel/runtime" "^7.5.5"
443 | "@types/node" "^12.7.1"
444 | find-up "^4.1.0"
445 | fs-extra "^8.1.0"
446 |
447 | "@manypkg/get-packages@^1.1.3":
448 | version "1.1.3"
449 | resolved "https://registry.yarnpkg.com/@manypkg/get-packages/-/get-packages-1.1.3.tgz#e184db9bba792fa4693de4658cfb1463ac2c9c47"
450 | integrity sha512-fo+QhuU3qE/2TQMQmbVMqaQ6EWbMhi4ABWP+O4AM1NqPBuy0OrApV5LO6BrrgnhtAHS2NH6RrVk9OL181tTi8A==
451 | dependencies:
452 | "@babel/runtime" "^7.5.5"
453 | "@changesets/types" "^4.0.1"
454 | "@manypkg/find-root" "^1.1.0"
455 | fs-extra "^8.1.0"
456 | globby "^11.0.0"
457 | read-yaml-file "^1.1.0"
458 |
459 | "@nodelib/fs.scandir@2.1.5":
460 | version "2.1.5"
461 | resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5"
462 | integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==
463 | dependencies:
464 | "@nodelib/fs.stat" "2.0.5"
465 | run-parallel "^1.1.9"
466 |
467 | "@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2":
468 | version "2.0.5"
469 | resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b"
470 | integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==
471 |
472 | "@nodelib/fs.walk@^1.2.3":
473 | version "1.2.8"
474 | resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a"
475 | integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==
476 | dependencies:
477 | "@nodelib/fs.scandir" "2.1.5"
478 | fastq "^1.6.0"
479 |
480 | "@tsconfig/node10@^1.0.7":
481 | version "1.0.9"
482 | resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.9.tgz#df4907fc07a886922637b15e02d4cebc4c0021b2"
483 | integrity sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==
484 |
485 | "@tsconfig/node12@^1.0.7":
486 | version "1.0.11"
487 | resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.11.tgz#ee3def1f27d9ed66dac6e46a295cffb0152e058d"
488 | integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag==
489 |
490 | "@tsconfig/node14@^1.0.0":
491 | version "1.0.3"
492 | resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.3.tgz#e4386316284f00b98435bf40f72f75a09dabf6c1"
493 | integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow==
494 |
495 | "@tsconfig/node16@^1.0.2":
496 | version "1.0.4"
497 | resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.4.tgz#0b92dcc0cc1c81f6f306a381f28e31b1a56536e9"
498 | integrity sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA==
499 |
500 | "@types/is-ci@^3.0.0":
501 | version "3.0.0"
502 | resolved "https://registry.yarnpkg.com/@types/is-ci/-/is-ci-3.0.0.tgz#7e8910af6857601315592436f030aaa3ed9783c3"
503 | integrity sha512-Q0Op0hdWbYd1iahB+IFNQcWXFq4O0Q5MwQP7uN0souuQ4rPg1vEYcnIOfr1gY+M+6rc8FGoRaBO1mOOvL29sEQ==
504 | dependencies:
505 | ci-info "^3.1.0"
506 |
507 | "@types/minimist@^1.2.0":
508 | version "1.2.2"
509 | resolved "https://registry.yarnpkg.com/@types/minimist/-/minimist-1.2.2.tgz#ee771e2ba4b3dc5b372935d549fd9617bf345b8c"
510 | integrity sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==
511 |
512 | "@types/node@20.4.7":
513 | version "20.4.7"
514 | resolved "https://registry.yarnpkg.com/@types/node/-/node-20.4.7.tgz#74d323a93f1391a63477b27b9aec56669c98b2ab"
515 | integrity sha512-bUBrPjEry2QUTsnuEjzjbS7voGWCc30W0qzgMf90GPeDGFRakvrz47ju+oqDAKCXLUCe39u57/ORMl/O/04/9g==
516 |
517 | "@types/node@^12.7.1":
518 | version "12.20.55"
519 | resolved "https://registry.yarnpkg.com/@types/node/-/node-12.20.55.tgz#c329cbd434c42164f846b909bd6f85b5537f6240"
520 | integrity sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==
521 |
522 | "@types/normalize-package-data@^2.4.0":
523 | version "2.4.1"
524 | resolved "https://registry.yarnpkg.com/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz#d3357479a0fdfdd5907fe67e17e0a85c906e1301"
525 | integrity sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==
526 |
527 | "@types/semver@^7.5.0":
528 | version "7.5.0"
529 | resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.0.tgz#591c1ce3a702c45ee15f47a42ade72c2fd78978a"
530 | integrity sha512-G8hZ6XJiHnuhQKR7ZmysCeJWE08o8T0AXtk5darsCaTVsYZhhgUrq53jizaR2FvsoeCwJhlmwTjkXBY5Pn/ZHw==
531 |
532 | JSONStream@^1.3.5:
533 | version "1.3.5"
534 | resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0"
535 | integrity sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==
536 | dependencies:
537 | jsonparse "^1.2.0"
538 | through ">=2.2.7 <3"
539 |
540 | acorn-walk@^8.1.1:
541 | version "8.2.0"
542 | resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.2.0.tgz#741210f2e2426454508853a2f44d0ab83b7f69c1"
543 | integrity sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==
544 |
545 | acorn@^8.4.1:
546 | version "8.10.0"
547 | resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.10.0.tgz#8be5b3907a67221a81ab23c7889c4c5526b62ec5"
548 | integrity sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==
549 |
550 | ajv@^8.11.0:
551 | version "8.12.0"
552 | resolved "https://registry.yarnpkg.com/ajv/-/ajv-8.12.0.tgz#d1a0527323e22f53562c567c00991577dfbe19d1"
553 | integrity sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==
554 | dependencies:
555 | fast-deep-equal "^3.1.1"
556 | json-schema-traverse "^1.0.0"
557 | require-from-string "^2.0.2"
558 | uri-js "^4.2.2"
559 |
560 | ansi-colors@^4.1.1, ansi-colors@^4.1.3:
561 | version "4.1.3"
562 | resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.3.tgz#37611340eb2243e70cc604cad35d63270d48781b"
563 | integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw==
564 |
565 | ansi-regex@^5.0.1:
566 | version "5.0.1"
567 | resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304"
568 | integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==
569 |
570 | ansi-styles@^3.2.1:
571 | version "3.2.1"
572 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-3.2.1.tgz#41fbb20243e50b12be0f04b8dedbf07520ce841d"
573 | integrity sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==
574 | dependencies:
575 | color-convert "^1.9.0"
576 |
577 | ansi-styles@^4.0.0, ansi-styles@^4.1.0:
578 | version "4.3.0"
579 | resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937"
580 | integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==
581 | dependencies:
582 | color-convert "^2.0.1"
583 |
584 | arg@^4.1.0:
585 | version "4.1.3"
586 | resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089"
587 | integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==
588 |
589 | argparse@^1.0.7:
590 | version "1.0.10"
591 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911"
592 | integrity sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==
593 | dependencies:
594 | sprintf-js "~1.0.2"
595 |
596 | argparse@^2.0.1:
597 | version "2.0.1"
598 | resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38"
599 | integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==
600 |
601 | array-buffer-byte-length@^1.0.0:
602 | version "1.0.0"
603 | resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz#fabe8bc193fea865f317fe7807085ee0dee5aead"
604 | integrity sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==
605 | dependencies:
606 | call-bind "^1.0.2"
607 | is-array-buffer "^3.0.1"
608 |
609 | array-ify@^1.0.0:
610 | version "1.0.0"
611 | resolved "https://registry.yarnpkg.com/array-ify/-/array-ify-1.0.0.tgz#9e528762b4a9066ad163a6962a364418e9626ece"
612 | integrity sha512-c5AMf34bKdvPhQ7tBGhqkgKNUzMr4WUs+WDtC2ZUGOUncbxKMTvqxYctiseW3+L4bA8ec+GcZ6/A/FW4m8ukng==
613 |
614 | array-union@^2.1.0:
615 | version "2.1.0"
616 | resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d"
617 | integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==
618 |
619 | array.prototype.flat@^1.2.3:
620 | version "1.3.1"
621 | resolved "https://registry.yarnpkg.com/array.prototype.flat/-/array.prototype.flat-1.3.1.tgz#ffc6576a7ca3efc2f46a143b9d1dda9b4b3cf5e2"
622 | integrity sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==
623 | dependencies:
624 | call-bind "^1.0.2"
625 | define-properties "^1.1.4"
626 | es-abstract "^1.20.4"
627 | es-shim-unscopables "^1.0.0"
628 |
629 | arraybuffer.prototype.slice@^1.0.1:
630 | version "1.0.1"
631 | resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.1.tgz#9b5ea3868a6eebc30273da577eb888381c0044bb"
632 | integrity sha512-09x0ZWFEjj4WD8PDbykUwo3t9arLn8NIzmmYEJFpYekOAQjpkGSyrQhNoRTcwwcFRu+ycWF78QZ63oWTqSjBcw==
633 | dependencies:
634 | array-buffer-byte-length "^1.0.0"
635 | call-bind "^1.0.2"
636 | define-properties "^1.2.0"
637 | get-intrinsic "^1.2.1"
638 | is-array-buffer "^3.0.2"
639 | is-shared-array-buffer "^1.0.2"
640 |
641 | arrify@^1.0.1:
642 | version "1.0.1"
643 | resolved "https://registry.yarnpkg.com/arrify/-/arrify-1.0.1.tgz#898508da2226f380df904728456849c1501a4b0d"
644 | integrity sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==
645 |
646 | available-typed-arrays@^1.0.5:
647 | version "1.0.5"
648 | resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7"
649 | integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==
650 |
651 | better-path-resolve@1.0.0:
652 | version "1.0.0"
653 | resolved "https://registry.yarnpkg.com/better-path-resolve/-/better-path-resolve-1.0.0.tgz#13a35a1104cdd48a7b74bf8758f96a1ee613f99d"
654 | integrity sha512-pbnl5XzGBdrFU/wT4jqmJVPn2B6UHPBOhzMQkY/SPUPB6QtUXtmBHBIwCbXJol93mOpGMnQyP/+BB19q04xj7g==
655 | dependencies:
656 | is-windows "^1.0.0"
657 |
658 | braces@^3.0.2:
659 | version "3.0.2"
660 | resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107"
661 | integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==
662 | dependencies:
663 | fill-range "^7.0.1"
664 |
665 | breakword@^1.0.5:
666 | version "1.0.6"
667 | resolved "https://registry.yarnpkg.com/breakword/-/breakword-1.0.6.tgz#242506e7b871b7fad1bce8dc05cb0f2a129c12bd"
668 | integrity sha512-yjxDAYyK/pBvws9H4xKYpLDpYKEH6CzrBPAuXq3x18I+c/2MkVtT3qAr7Oloi6Dss9qNhPVueAAVU1CSeNDIXw==
669 | dependencies:
670 | wcwidth "^1.0.1"
671 |
672 | call-bind@^1.0.0, call-bind@^1.0.2:
673 | version "1.0.2"
674 | resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c"
675 | integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==
676 | dependencies:
677 | function-bind "^1.1.1"
678 | get-intrinsic "^1.0.2"
679 |
680 | callsites@^3.0.0:
681 | version "3.1.0"
682 | resolved "https://registry.yarnpkg.com/callsites/-/callsites-3.1.0.tgz#b3630abd8943432f54b3f0519238e33cd7df2f73"
683 | integrity sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==
684 |
685 | camelcase-keys@^6.2.2:
686 | version "6.2.2"
687 | resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-6.2.2.tgz#5e755d6ba51aa223ec7d3d52f25778210f9dc3c0"
688 | integrity sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==
689 | dependencies:
690 | camelcase "^5.3.1"
691 | map-obj "^4.0.0"
692 | quick-lru "^4.0.1"
693 |
694 | camelcase@^5.0.0, camelcase@^5.3.1:
695 | version "5.3.1"
696 | resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-5.3.1.tgz#e3c9b31569e106811df242f715725a1f4c494320"
697 | integrity sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==
698 |
699 | chalk@^2.1.0, chalk@^2.4.2:
700 | version "2.4.2"
701 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424"
702 | integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==
703 | dependencies:
704 | ansi-styles "^3.2.1"
705 | escape-string-regexp "^1.0.5"
706 | supports-color "^5.3.0"
707 |
708 | chalk@^4.1.0, chalk@^4.1.2:
709 | version "4.1.2"
710 | resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01"
711 | integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==
712 | dependencies:
713 | ansi-styles "^4.1.0"
714 | supports-color "^7.1.0"
715 |
716 | chardet@^0.7.0:
717 | version "0.7.0"
718 | resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e"
719 | integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==
720 |
721 | ci-info@^3.1.0, ci-info@^3.2.0:
722 | version "3.8.0"
723 | resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.8.0.tgz#81408265a5380c929f0bc665d62256628ce9ef91"
724 | integrity sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw==
725 |
726 | cliui@^6.0.0:
727 | version "6.0.0"
728 | resolved "https://registry.yarnpkg.com/cliui/-/cliui-6.0.0.tgz#511d702c0c4e41ca156d7d0e96021f23e13225b1"
729 | integrity sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==
730 | dependencies:
731 | string-width "^4.2.0"
732 | strip-ansi "^6.0.0"
733 | wrap-ansi "^6.2.0"
734 |
735 | cliui@^8.0.1:
736 | version "8.0.1"
737 | resolved "https://registry.yarnpkg.com/cliui/-/cliui-8.0.1.tgz#0c04b075db02cbfe60dc8e6cf2f5486b1a3608aa"
738 | integrity sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==
739 | dependencies:
740 | string-width "^4.2.0"
741 | strip-ansi "^6.0.1"
742 | wrap-ansi "^7.0.0"
743 |
744 | clone@^1.0.2:
745 | version "1.0.4"
746 | resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e"
747 | integrity sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg==
748 |
749 | color-convert@^1.9.0:
750 | version "1.9.3"
751 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-1.9.3.tgz#bb71850690e1f136567de629d2d5471deda4c1e8"
752 | integrity sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==
753 | dependencies:
754 | color-name "1.1.3"
755 |
756 | color-convert@^2.0.1:
757 | version "2.0.1"
758 | resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3"
759 | integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==
760 | dependencies:
761 | color-name "~1.1.4"
762 |
763 | color-name@1.1.3:
764 | version "1.1.3"
765 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.3.tgz#a7d0558bd89c42f795dd42328f740831ca53bc25"
766 | integrity sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==
767 |
768 | color-name@~1.1.4:
769 | version "1.1.4"
770 | resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2"
771 | integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==
772 |
773 | compare-func@^2.0.0:
774 | version "2.0.0"
775 | resolved "https://registry.yarnpkg.com/compare-func/-/compare-func-2.0.0.tgz#fb65e75edbddfd2e568554e8b5b05fff7a51fcb3"
776 | integrity sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==
777 | dependencies:
778 | array-ify "^1.0.0"
779 | dot-prop "^5.1.0"
780 |
781 | conventional-changelog-angular@^6.0.0:
782 | version "6.0.0"
783 | resolved "https://registry.yarnpkg.com/conventional-changelog-angular/-/conventional-changelog-angular-6.0.0.tgz#a9a9494c28b7165889144fd5b91573c4aa9ca541"
784 | integrity sha512-6qLgrBF4gueoC7AFVHu51nHL9pF9FRjXrH+ceVf7WmAfH3gs+gEYOkvxhjMPjZu57I4AGUGoNTY8V7Hrgf1uqg==
785 | dependencies:
786 | compare-func "^2.0.0"
787 |
788 | conventional-changelog-conventionalcommits@^6.1.0:
789 | version "6.1.0"
790 | resolved "https://registry.yarnpkg.com/conventional-changelog-conventionalcommits/-/conventional-changelog-conventionalcommits-6.1.0.tgz#3bad05f4eea64e423d3d90fc50c17d2c8cf17652"
791 | integrity sha512-3cS3GEtR78zTfMzk0AizXKKIdN4OvSh7ibNz6/DPbhWWQu7LqE/8+/GqSodV+sywUR2gpJAdP/1JFf4XtN7Zpw==
792 | dependencies:
793 | compare-func "^2.0.0"
794 |
795 | conventional-commits-parser@^4.0.0:
796 | version "4.0.0"
797 | resolved "https://registry.yarnpkg.com/conventional-commits-parser/-/conventional-commits-parser-4.0.0.tgz#02ae1178a381304839bce7cea9da5f1b549ae505"
798 | integrity sha512-WRv5j1FsVM5FISJkoYMR6tPk07fkKT0UodruX4je86V4owk451yjXAKzKAPOs9l7y59E2viHUS9eQ+dfUA9NSg==
799 | dependencies:
800 | JSONStream "^1.3.5"
801 | is-text-path "^1.0.1"
802 | meow "^8.1.2"
803 | split2 "^3.2.2"
804 |
805 | cosmiconfig-typescript-loader@^4.0.0:
806 | version "4.4.0"
807 | resolved "https://registry.yarnpkg.com/cosmiconfig-typescript-loader/-/cosmiconfig-typescript-loader-4.4.0.tgz#f3feae459ea090f131df5474ce4b1222912319f9"
808 | integrity sha512-BabizFdC3wBHhbI4kJh0VkQP9GkBfoHPydD0COMce1nJ1kJAB3F2TmJ/I7diULBKtmEWSwEbuN/KDtgnmUUVmw==
809 |
810 | cosmiconfig@^8.0.0:
811 | version "8.2.0"
812 | resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-8.2.0.tgz#f7d17c56a590856cd1e7cee98734dca272b0d8fd"
813 | integrity sha512-3rTMnFJA1tCOPwRxtgF4wd7Ab2qvDbL8jX+3smjIbS4HlZBagTlpERbdN7iAbWlrfxE3M8c27kTwTawQ7st+OQ==
814 | dependencies:
815 | import-fresh "^3.2.1"
816 | js-yaml "^4.1.0"
817 | parse-json "^5.0.0"
818 | path-type "^4.0.0"
819 |
820 | create-require@^1.1.0:
821 | version "1.1.1"
822 | resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333"
823 | integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ==
824 |
825 | cross-spawn@^5.1.0:
826 | version "5.1.0"
827 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449"
828 | integrity sha512-pTgQJ5KC0d2hcY8eyL1IzlBPYjTkyH72XRZPnLyKus2mBfNjQs3klqbJU2VILqZryAZUt9JOb3h/mWMy23/f5A==
829 | dependencies:
830 | lru-cache "^4.0.1"
831 | shebang-command "^1.2.0"
832 | which "^1.2.9"
833 |
834 | cross-spawn@^7.0.3:
835 | version "7.0.3"
836 | resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6"
837 | integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==
838 | dependencies:
839 | path-key "^3.1.0"
840 | shebang-command "^2.0.0"
841 | which "^2.0.1"
842 |
843 | csv-generate@^3.4.3:
844 | version "3.4.3"
845 | resolved "https://registry.yarnpkg.com/csv-generate/-/csv-generate-3.4.3.tgz#bc42d943b45aea52afa896874291da4b9108ffff"
846 | integrity sha512-w/T+rqR0vwvHqWs/1ZyMDWtHHSJaN06klRqJXBEpDJaM/+dZkso0OKh1VcuuYvK3XM53KysVNq8Ko/epCK8wOw==
847 |
848 | csv-parse@^4.16.3:
849 | version "4.16.3"
850 | resolved "https://registry.yarnpkg.com/csv-parse/-/csv-parse-4.16.3.tgz#7ca624d517212ebc520a36873c3478fa66efbaf7"
851 | integrity sha512-cO1I/zmz4w2dcKHVvpCr7JVRu8/FymG5OEpmvsZYlccYolPBLoVGKUHgNoc4ZGkFeFlWGEDmMyBM+TTqRdW/wg==
852 |
853 | csv-stringify@^5.6.5:
854 | version "5.6.5"
855 | resolved "https://registry.yarnpkg.com/csv-stringify/-/csv-stringify-5.6.5.tgz#c6d74badda4b49a79bf4e72f91cce1e33b94de00"
856 | integrity sha512-PjiQ659aQ+fUTQqSrd1XEDnOr52jh30RBurfzkscaE2tPaFsDH5wOAHJiw8XAHphRknCwMUE9KRayc4K/NbO8A==
857 |
858 | csv@^5.5.3:
859 | version "5.5.3"
860 | resolved "https://registry.yarnpkg.com/csv/-/csv-5.5.3.tgz#cd26c1e45eae00ce6a9b7b27dcb94955ec95207d"
861 | integrity sha512-QTaY0XjjhTQOdguARF0lGKm5/mEq9PD9/VhZZegHDIBq2tQwgNpHc3dneD4mGo2iJs+fTKv5Bp0fZ+BRuY3Z0g==
862 | dependencies:
863 | csv-generate "^3.4.3"
864 | csv-parse "^4.16.3"
865 | csv-stringify "^5.6.5"
866 | stream-transform "^2.1.3"
867 |
868 | dargs@^7.0.0:
869 | version "7.0.0"
870 | resolved "https://registry.yarnpkg.com/dargs/-/dargs-7.0.0.tgz#04015c41de0bcb69ec84050f3d9be0caf8d6d5cc"
871 | integrity sha512-2iy1EkLdlBzQGvbweYRFxmFath8+K7+AKB0TlhHWkNuH+TmovaMH/Wp7V7R4u7f4SnX3OgLsU9t1NI9ioDnUpg==
872 |
873 | dataloader@^1.4.0:
874 | version "1.4.0"
875 | resolved "https://registry.yarnpkg.com/dataloader/-/dataloader-1.4.0.tgz#bca11d867f5d3f1b9ed9f737bd15970c65dff5c8"
876 | integrity sha512-68s5jYdlvasItOJnCuI2Q9s4q98g0pCyL3HrcKJu8KNugUl8ahgmZYg38ysLTgQjjXX3H8CJLkAvWrclWfcalw==
877 |
878 | decamelize-keys@^1.1.0:
879 | version "1.1.1"
880 | resolved "https://registry.yarnpkg.com/decamelize-keys/-/decamelize-keys-1.1.1.tgz#04a2d523b2f18d80d0158a43b895d56dff8d19d8"
881 | integrity sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==
882 | dependencies:
883 | decamelize "^1.1.0"
884 | map-obj "^1.0.0"
885 |
886 | decamelize@^1.1.0, decamelize@^1.2.0:
887 | version "1.2.0"
888 | resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290"
889 | integrity sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==
890 |
891 | defaults@^1.0.3:
892 | version "1.0.4"
893 | resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.4.tgz#b0b02062c1e2aa62ff5d9528f0f98baa90978d7a"
894 | integrity sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A==
895 | dependencies:
896 | clone "^1.0.2"
897 |
898 | define-properties@^1.1.3, define-properties@^1.1.4, define-properties@^1.2.0:
899 | version "1.2.0"
900 | resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.0.tgz#52988570670c9eacedd8064f4a990f2405849bd5"
901 | integrity sha512-xvqAVKGfT1+UAvPwKTVw/njhdQ8ZhXK4lI0bCIuCMrp2up9nPnaDftrLtmpTazqd1o+UY4zgzU+avtMbDP+ldA==
902 | dependencies:
903 | has-property-descriptors "^1.0.0"
904 | object-keys "^1.1.1"
905 |
906 | detect-indent@^6.0.0:
907 | version "6.1.0"
908 | resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-6.1.0.tgz#592485ebbbf6b3b1ab2be175c8393d04ca0d57e6"
909 | integrity sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==
910 |
911 | diff@^4.0.1:
912 | version "4.0.2"
913 | resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d"
914 | integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==
915 |
916 | dir-glob@^3.0.1:
917 | version "3.0.1"
918 | resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f"
919 | integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==
920 | dependencies:
921 | path-type "^4.0.0"
922 |
923 | dot-prop@^5.1.0:
924 | version "5.3.0"
925 | resolved "https://registry.yarnpkg.com/dot-prop/-/dot-prop-5.3.0.tgz#90ccce708cd9cd82cc4dc8c3ddd9abdd55b20e88"
926 | integrity sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==
927 | dependencies:
928 | is-obj "^2.0.0"
929 |
930 | dotenv@^8.1.0:
931 | version "8.6.0"
932 | resolved "https://registry.yarnpkg.com/dotenv/-/dotenv-8.6.0.tgz#061af664d19f7f4d8fc6e4ff9b584ce237adcb8b"
933 | integrity sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==
934 |
935 | emoji-regex@^8.0.0:
936 | version "8.0.0"
937 | resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37"
938 | integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==
939 |
940 | enquirer@^2.3.0:
941 | version "2.4.1"
942 | resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.4.1.tgz#93334b3fbd74fc7097b224ab4a8fb7e40bf4ae56"
943 | integrity sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==
944 | dependencies:
945 | ansi-colors "^4.1.1"
946 | strip-ansi "^6.0.1"
947 |
948 | error-ex@^1.3.1:
949 | version "1.3.2"
950 | resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf"
951 | integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==
952 | dependencies:
953 | is-arrayish "^0.2.1"
954 |
955 | es-abstract@^1.19.0, es-abstract@^1.20.4:
956 | version "1.22.1"
957 | resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.22.1.tgz#8b4e5fc5cefd7f1660f0f8e1a52900dfbc9d9ccc"
958 | integrity sha512-ioRRcXMO6OFyRpyzV3kE1IIBd4WG5/kltnzdxSCqoP8CMGs/Li+M1uF5o7lOkZVFjDs+NLesthnF66Pg/0q0Lw==
959 | dependencies:
960 | array-buffer-byte-length "^1.0.0"
961 | arraybuffer.prototype.slice "^1.0.1"
962 | available-typed-arrays "^1.0.5"
963 | call-bind "^1.0.2"
964 | es-set-tostringtag "^2.0.1"
965 | es-to-primitive "^1.2.1"
966 | function.prototype.name "^1.1.5"
967 | get-intrinsic "^1.2.1"
968 | get-symbol-description "^1.0.0"
969 | globalthis "^1.0.3"
970 | gopd "^1.0.1"
971 | has "^1.0.3"
972 | has-property-descriptors "^1.0.0"
973 | has-proto "^1.0.1"
974 | has-symbols "^1.0.3"
975 | internal-slot "^1.0.5"
976 | is-array-buffer "^3.0.2"
977 | is-callable "^1.2.7"
978 | is-negative-zero "^2.0.2"
979 | is-regex "^1.1.4"
980 | is-shared-array-buffer "^1.0.2"
981 | is-string "^1.0.7"
982 | is-typed-array "^1.1.10"
983 | is-weakref "^1.0.2"
984 | object-inspect "^1.12.3"
985 | object-keys "^1.1.1"
986 | object.assign "^4.1.4"
987 | regexp.prototype.flags "^1.5.0"
988 | safe-array-concat "^1.0.0"
989 | safe-regex-test "^1.0.0"
990 | string.prototype.trim "^1.2.7"
991 | string.prototype.trimend "^1.0.6"
992 | string.prototype.trimstart "^1.0.6"
993 | typed-array-buffer "^1.0.0"
994 | typed-array-byte-length "^1.0.0"
995 | typed-array-byte-offset "^1.0.0"
996 | typed-array-length "^1.0.4"
997 | unbox-primitive "^1.0.2"
998 | which-typed-array "^1.1.10"
999 |
1000 | es-set-tostringtag@^2.0.1:
1001 | version "2.0.1"
1002 | resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.1.tgz#338d502f6f674301d710b80c8592de8a15f09cd8"
1003 | integrity sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==
1004 | dependencies:
1005 | get-intrinsic "^1.1.3"
1006 | has "^1.0.3"
1007 | has-tostringtag "^1.0.0"
1008 |
1009 | es-shim-unscopables@^1.0.0:
1010 | version "1.0.0"
1011 | resolved "https://registry.yarnpkg.com/es-shim-unscopables/-/es-shim-unscopables-1.0.0.tgz#702e632193201e3edf8713635d083d378e510241"
1012 | integrity sha512-Jm6GPcCdC30eMLbZ2x8z2WuRwAws3zTBBKuusffYVUrNj/GVSUAZ+xKMaUpfNDR5IbyNA5LJbaecoUVbmUcB1w==
1013 | dependencies:
1014 | has "^1.0.3"
1015 |
1016 | es-to-primitive@^1.2.1:
1017 | version "1.2.1"
1018 | resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a"
1019 | integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==
1020 | dependencies:
1021 | is-callable "^1.1.4"
1022 | is-date-object "^1.0.1"
1023 | is-symbol "^1.0.2"
1024 |
1025 | escalade@^3.1.1:
1026 | version "3.1.1"
1027 | resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40"
1028 | integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==
1029 |
1030 | escape-string-regexp@^1.0.5:
1031 | version "1.0.5"
1032 | resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4"
1033 | integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==
1034 |
1035 | esprima@^4.0.0:
1036 | version "4.0.1"
1037 | resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71"
1038 | integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==
1039 |
1040 | execa@^5.0.0:
1041 | version "5.1.1"
1042 | resolved "https://registry.yarnpkg.com/execa/-/execa-5.1.1.tgz#f80ad9cbf4298f7bd1d4c9555c21e93741c411dd"
1043 | integrity sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==
1044 | dependencies:
1045 | cross-spawn "^7.0.3"
1046 | get-stream "^6.0.0"
1047 | human-signals "^2.1.0"
1048 | is-stream "^2.0.0"
1049 | merge-stream "^2.0.0"
1050 | npm-run-path "^4.0.1"
1051 | onetime "^5.1.2"
1052 | signal-exit "^3.0.3"
1053 | strip-final-newline "^2.0.0"
1054 |
1055 | extendable-error@^0.1.5:
1056 | version "0.1.7"
1057 | resolved "https://registry.yarnpkg.com/extendable-error/-/extendable-error-0.1.7.tgz#60b9adf206264ac920058a7395685ae4670c2b96"
1058 | integrity sha512-UOiS2in6/Q0FK0R0q6UY9vYpQ21mr/Qn1KOnte7vsACuNJf514WvCCUHSRCPcgjPT2bAhNIJdlE6bVap1GKmeg==
1059 |
1060 | external-editor@^3.1.0:
1061 | version "3.1.0"
1062 | resolved "https://registry.yarnpkg.com/external-editor/-/external-editor-3.1.0.tgz#cb03f740befae03ea4d283caed2741a83f335495"
1063 | integrity sha512-hMQ4CX1p1izmuLYyZqLMO/qGNw10wSv9QDCPfzXfyFrOaCSSoRfqE1Kf1s5an66J5JZC62NewG+mK49jOCtQew==
1064 | dependencies:
1065 | chardet "^0.7.0"
1066 | iconv-lite "^0.4.24"
1067 | tmp "^0.0.33"
1068 |
1069 | fast-deep-equal@^3.1.1:
1070 | version "3.1.3"
1071 | resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525"
1072 | integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==
1073 |
1074 | fast-glob@^3.2.9:
1075 | version "3.3.1"
1076 | resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.1.tgz#784b4e897340f3dbbef17413b3f11acf03c874c4"
1077 | integrity sha512-kNFPyjhh5cKjrUltxs+wFx+ZkbRaxxmZ+X0ZU31SOsxCEtP9VPgtq2teZw1DebupL5GmDaNQ6yKMMVcM41iqDg==
1078 | dependencies:
1079 | "@nodelib/fs.stat" "^2.0.2"
1080 | "@nodelib/fs.walk" "^1.2.3"
1081 | glob-parent "^5.1.2"
1082 | merge2 "^1.3.0"
1083 | micromatch "^4.0.4"
1084 |
1085 | fastq@^1.6.0:
1086 | version "1.15.0"
1087 | resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.15.0.tgz#d04d07c6a2a68fe4599fea8d2e103a937fae6b3a"
1088 | integrity sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==
1089 | dependencies:
1090 | reusify "^1.0.4"
1091 |
1092 | fill-range@^7.0.1:
1093 | version "7.0.1"
1094 | resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40"
1095 | integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==
1096 | dependencies:
1097 | to-regex-range "^5.0.1"
1098 |
1099 | find-up@^4.0.0, find-up@^4.1.0:
1100 | version "4.1.0"
1101 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19"
1102 | integrity sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==
1103 | dependencies:
1104 | locate-path "^5.0.0"
1105 | path-exists "^4.0.0"
1106 |
1107 | find-up@^5.0.0:
1108 | version "5.0.0"
1109 | resolved "https://registry.yarnpkg.com/find-up/-/find-up-5.0.0.tgz#4c92819ecb7083561e4f4a240a86be5198f536fc"
1110 | integrity sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==
1111 | dependencies:
1112 | locate-path "^6.0.0"
1113 | path-exists "^4.0.0"
1114 |
1115 | find-yarn-workspace-root2@1.2.16:
1116 | version "1.2.16"
1117 | resolved "https://registry.yarnpkg.com/find-yarn-workspace-root2/-/find-yarn-workspace-root2-1.2.16.tgz#60287009dd2f324f59646bdb4b7610a6b301c2a9"
1118 | integrity sha512-hr6hb1w8ePMpPVUK39S4RlwJzi+xPLuVuG8XlwXU3KD5Yn3qgBWVfy3AzNlDhWvE1EORCE65/Qm26rFQt3VLVA==
1119 | dependencies:
1120 | micromatch "^4.0.2"
1121 | pkg-dir "^4.2.0"
1122 |
1123 | for-each@^0.3.3:
1124 | version "0.3.3"
1125 | resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e"
1126 | integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==
1127 | dependencies:
1128 | is-callable "^1.1.3"
1129 |
1130 | fs-extra@^11.0.0:
1131 | version "11.1.1"
1132 | resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-11.1.1.tgz#da69f7c39f3b002378b0954bb6ae7efdc0876e2d"
1133 | integrity sha512-MGIE4HOvQCeUCzmlHs0vXpih4ysz4wg9qiSAu6cd42lVwPbTM1TjV7RusoyQqMmk/95gdQZX72u+YW+c3eEpFQ==
1134 | dependencies:
1135 | graceful-fs "^4.2.0"
1136 | jsonfile "^6.0.1"
1137 | universalify "^2.0.0"
1138 |
1139 | fs-extra@^7.0.1:
1140 | version "7.0.1"
1141 | resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-7.0.1.tgz#4f189c44aa123b895f722804f55ea23eadc348e9"
1142 | integrity sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==
1143 | dependencies:
1144 | graceful-fs "^4.1.2"
1145 | jsonfile "^4.0.0"
1146 | universalify "^0.1.0"
1147 |
1148 | fs-extra@^8.1.0:
1149 | version "8.1.0"
1150 | resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0"
1151 | integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==
1152 | dependencies:
1153 | graceful-fs "^4.2.0"
1154 | jsonfile "^4.0.0"
1155 | universalify "^0.1.0"
1156 |
1157 | function-bind@^1.1.1:
1158 | version "1.1.1"
1159 | resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
1160 | integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==
1161 |
1162 | function.prototype.name@^1.1.5:
1163 | version "1.1.5"
1164 | resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.5.tgz#cce0505fe1ffb80503e6f9e46cc64e46a12a9621"
1165 | integrity sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==
1166 | dependencies:
1167 | call-bind "^1.0.2"
1168 | define-properties "^1.1.3"
1169 | es-abstract "^1.19.0"
1170 | functions-have-names "^1.2.2"
1171 |
1172 | functions-have-names@^1.2.2, functions-have-names@^1.2.3:
1173 | version "1.2.3"
1174 | resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834"
1175 | integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==
1176 |
1177 | get-caller-file@^2.0.1, get-caller-file@^2.0.5:
1178 | version "2.0.5"
1179 | resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-2.0.5.tgz#4f94412a82db32f36e3b0b9741f8a97feb031f7e"
1180 | integrity sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==
1181 |
1182 | get-intrinsic@^1.0.2, get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.0, get-intrinsic@^1.2.1:
1183 | version "1.2.1"
1184 | resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.1.tgz#d295644fed4505fc9cde952c37ee12b477a83d82"
1185 | integrity sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==
1186 | dependencies:
1187 | function-bind "^1.1.1"
1188 | has "^1.0.3"
1189 | has-proto "^1.0.1"
1190 | has-symbols "^1.0.3"
1191 |
1192 | get-stream@^6.0.0:
1193 | version "6.0.1"
1194 | resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.1.tgz#a262d8eef67aced57c2852ad6167526a43cbf7b7"
1195 | integrity sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==
1196 |
1197 | get-symbol-description@^1.0.0:
1198 | version "1.0.0"
1199 | resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6"
1200 | integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==
1201 | dependencies:
1202 | call-bind "^1.0.2"
1203 | get-intrinsic "^1.1.1"
1204 |
1205 | git-raw-commits@^2.0.11:
1206 | version "2.0.11"
1207 | resolved "https://registry.yarnpkg.com/git-raw-commits/-/git-raw-commits-2.0.11.tgz#bc3576638071d18655e1cc60d7f524920008d723"
1208 | integrity sha512-VnctFhw+xfj8Va1xtfEqCUD2XDrbAPSJx+hSrE5K7fGdjZruW7XV+QOrN7LF/RJyvspRiD2I0asWsxFp0ya26A==
1209 | dependencies:
1210 | dargs "^7.0.0"
1211 | lodash "^4.17.15"
1212 | meow "^8.0.0"
1213 | split2 "^3.0.0"
1214 | through2 "^4.0.0"
1215 |
1216 | glob-parent@^5.1.2:
1217 | version "5.1.2"
1218 | resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4"
1219 | integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==
1220 | dependencies:
1221 | is-glob "^4.0.1"
1222 |
1223 | global-dirs@^0.1.1:
1224 | version "0.1.1"
1225 | resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-0.1.1.tgz#b319c0dd4607f353f3be9cca4c72fc148c49f445"
1226 | integrity sha512-NknMLn7F2J7aflwFOlGdNIuCDpN3VGoSoB+aap3KABFWbHVn1TCgFC+np23J8W2BiZbjfEw3BFBycSMv1AFblg==
1227 | dependencies:
1228 | ini "^1.3.4"
1229 |
1230 | globalthis@^1.0.3:
1231 | version "1.0.3"
1232 | resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.3.tgz#5852882a52b80dc301b0660273e1ed082f0b6ccf"
1233 | integrity sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==
1234 | dependencies:
1235 | define-properties "^1.1.3"
1236 |
1237 | globby@^11.0.0:
1238 | version "11.1.0"
1239 | resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b"
1240 | integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==
1241 | dependencies:
1242 | array-union "^2.1.0"
1243 | dir-glob "^3.0.1"
1244 | fast-glob "^3.2.9"
1245 | ignore "^5.2.0"
1246 | merge2 "^1.4.1"
1247 | slash "^3.0.0"
1248 |
1249 | gopd@^1.0.1:
1250 | version "1.0.1"
1251 | resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c"
1252 | integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==
1253 | dependencies:
1254 | get-intrinsic "^1.1.3"
1255 |
1256 | graceful-fs@^4.1.2, graceful-fs@^4.1.5, graceful-fs@^4.1.6, graceful-fs@^4.2.0:
1257 | version "4.2.11"
1258 | resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3"
1259 | integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==
1260 |
1261 | grapheme-splitter@^1.0.4:
1262 | version "1.0.4"
1263 | resolved "https://registry.yarnpkg.com/grapheme-splitter/-/grapheme-splitter-1.0.4.tgz#9cf3a665c6247479896834af35cf1dbb4400767e"
1264 | integrity sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==
1265 |
1266 | hard-rejection@^2.1.0:
1267 | version "2.1.0"
1268 | resolved "https://registry.yarnpkg.com/hard-rejection/-/hard-rejection-2.1.0.tgz#1c6eda5c1685c63942766d79bb40ae773cecd883"
1269 | integrity sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==
1270 |
1271 | has-bigints@^1.0.1, has-bigints@^1.0.2:
1272 | version "1.0.2"
1273 | resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa"
1274 | integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==
1275 |
1276 | has-flag@^3.0.0:
1277 | version "3.0.0"
1278 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
1279 | integrity sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==
1280 |
1281 | has-flag@^4.0.0:
1282 | version "4.0.0"
1283 | resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b"
1284 | integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==
1285 |
1286 | has-property-descriptors@^1.0.0:
1287 | version "1.0.0"
1288 | resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.0.tgz#610708600606d36961ed04c196193b6a607fa861"
1289 | integrity sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==
1290 | dependencies:
1291 | get-intrinsic "^1.1.1"
1292 |
1293 | has-proto@^1.0.1:
1294 | version "1.0.1"
1295 | resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0"
1296 | integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==
1297 |
1298 | has-symbols@^1.0.2, has-symbols@^1.0.3:
1299 | version "1.0.3"
1300 | resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8"
1301 | integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==
1302 |
1303 | has-tostringtag@^1.0.0:
1304 | version "1.0.0"
1305 | resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25"
1306 | integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==
1307 | dependencies:
1308 | has-symbols "^1.0.2"
1309 |
1310 | has@^1.0.3:
1311 | version "1.0.3"
1312 | resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796"
1313 | integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==
1314 | dependencies:
1315 | function-bind "^1.1.1"
1316 |
1317 | hosted-git-info@^2.1.4:
1318 | version "2.8.9"
1319 | resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9"
1320 | integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==
1321 |
1322 | hosted-git-info@^4.0.1:
1323 | version "4.1.0"
1324 | resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-4.1.0.tgz#827b82867e9ff1c8d0c4d9d53880397d2c86d224"
1325 | integrity sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==
1326 | dependencies:
1327 | lru-cache "^6.0.0"
1328 |
1329 | human-id@^1.0.2:
1330 | version "1.0.2"
1331 | resolved "https://registry.yarnpkg.com/human-id/-/human-id-1.0.2.tgz#e654d4b2b0d8b07e45da9f6020d8af17ec0a5df3"
1332 | integrity sha512-UNopramDEhHJD+VR+ehk8rOslwSfByxPIZyJRfV739NDhN5LF1fa1MqnzKm2lGTQRjNrjK19Q5fhkgIfjlVUKw==
1333 |
1334 | human-signals@^2.1.0:
1335 | version "2.1.0"
1336 | resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0"
1337 | integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==
1338 |
1339 | husky@^8.0.3:
1340 | version "8.0.3"
1341 | resolved "https://registry.yarnpkg.com/husky/-/husky-8.0.3.tgz#4936d7212e46d1dea28fef29bb3a108872cd9184"
1342 | integrity sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg==
1343 |
1344 | iconv-lite@^0.4.24:
1345 | version "0.4.24"
1346 | resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b"
1347 | integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==
1348 | dependencies:
1349 | safer-buffer ">= 2.1.2 < 3"
1350 |
1351 | ignore@^5.2.0:
1352 | version "5.2.4"
1353 | resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.4.tgz#a291c0c6178ff1b960befe47fcdec301674a6324"
1354 | integrity sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==
1355 |
1356 | import-fresh@^3.0.0, import-fresh@^3.2.1:
1357 | version "3.3.0"
1358 | resolved "https://registry.yarnpkg.com/import-fresh/-/import-fresh-3.3.0.tgz#37162c25fcb9ebaa2e6e53d5b4d88ce17d9e0c2b"
1359 | integrity sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==
1360 | dependencies:
1361 | parent-module "^1.0.0"
1362 | resolve-from "^4.0.0"
1363 |
1364 | indent-string@^4.0.0:
1365 | version "4.0.0"
1366 | resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251"
1367 | integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg==
1368 |
1369 | inherits@^2.0.3:
1370 | version "2.0.4"
1371 | resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c"
1372 | integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==
1373 |
1374 | ini@^1.3.4:
1375 | version "1.3.8"
1376 | resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c"
1377 | integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==
1378 |
1379 | internal-slot@^1.0.5:
1380 | version "1.0.5"
1381 | resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.5.tgz#f2a2ee21f668f8627a4667f309dc0f4fb6674986"
1382 | integrity sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ==
1383 | dependencies:
1384 | get-intrinsic "^1.2.0"
1385 | has "^1.0.3"
1386 | side-channel "^1.0.4"
1387 |
1388 | is-array-buffer@^3.0.1, is-array-buffer@^3.0.2:
1389 | version "3.0.2"
1390 | resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.2.tgz#f2653ced8412081638ecb0ebbd0c41c6e0aecbbe"
1391 | integrity sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==
1392 | dependencies:
1393 | call-bind "^1.0.2"
1394 | get-intrinsic "^1.2.0"
1395 | is-typed-array "^1.1.10"
1396 |
1397 | is-arrayish@^0.2.1:
1398 | version "0.2.1"
1399 | resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d"
1400 | integrity sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==
1401 |
1402 | is-bigint@^1.0.1:
1403 | version "1.0.4"
1404 | resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3"
1405 | integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==
1406 | dependencies:
1407 | has-bigints "^1.0.1"
1408 |
1409 | is-boolean-object@^1.1.0:
1410 | version "1.1.2"
1411 | resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719"
1412 | integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==
1413 | dependencies:
1414 | call-bind "^1.0.2"
1415 | has-tostringtag "^1.0.0"
1416 |
1417 | is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7:
1418 | version "1.2.7"
1419 | resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055"
1420 | integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==
1421 |
1422 | is-ci@^3.0.1:
1423 | version "3.0.1"
1424 | resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-3.0.1.tgz#db6ecbed1bd659c43dac0f45661e7674103d1867"
1425 | integrity sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ==
1426 | dependencies:
1427 | ci-info "^3.2.0"
1428 |
1429 | is-core-module@^2.13.0, is-core-module@^2.5.0:
1430 | version "2.13.0"
1431 | resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.0.tgz#bb52aa6e2cbd49a30c2ba68c42bf3435ba6072db"
1432 | integrity sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==
1433 | dependencies:
1434 | has "^1.0.3"
1435 |
1436 | is-date-object@^1.0.1:
1437 | version "1.0.5"
1438 | resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f"
1439 | integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==
1440 | dependencies:
1441 | has-tostringtag "^1.0.0"
1442 |
1443 | is-extglob@^2.1.1:
1444 | version "2.1.1"
1445 | resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2"
1446 | integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==
1447 |
1448 | is-fullwidth-code-point@^3.0.0:
1449 | version "3.0.0"
1450 | resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d"
1451 | integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==
1452 |
1453 | is-glob@^4.0.1:
1454 | version "4.0.3"
1455 | resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084"
1456 | integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==
1457 | dependencies:
1458 | is-extglob "^2.1.1"
1459 |
1460 | is-negative-zero@^2.0.2:
1461 | version "2.0.2"
1462 | resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150"
1463 | integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==
1464 |
1465 | is-number-object@^1.0.4:
1466 | version "1.0.7"
1467 | resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.7.tgz#59d50ada4c45251784e9904f5246c742f07a42fc"
1468 | integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==
1469 | dependencies:
1470 | has-tostringtag "^1.0.0"
1471 |
1472 | is-number@^7.0.0:
1473 | version "7.0.0"
1474 | resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b"
1475 | integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==
1476 |
1477 | is-obj@^2.0.0:
1478 | version "2.0.0"
1479 | resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-2.0.0.tgz#473fb05d973705e3fd9620545018ca8e22ef4982"
1480 | integrity sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==
1481 |
1482 | is-plain-obj@^1.1.0:
1483 | version "1.1.0"
1484 | resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e"
1485 | integrity sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==
1486 |
1487 | is-regex@^1.1.4:
1488 | version "1.1.4"
1489 | resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958"
1490 | integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==
1491 | dependencies:
1492 | call-bind "^1.0.2"
1493 | has-tostringtag "^1.0.0"
1494 |
1495 | is-shared-array-buffer@^1.0.2:
1496 | version "1.0.2"
1497 | resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79"
1498 | integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==
1499 | dependencies:
1500 | call-bind "^1.0.2"
1501 |
1502 | is-stream@^2.0.0:
1503 | version "2.0.1"
1504 | resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077"
1505 | integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==
1506 |
1507 | is-string@^1.0.5, is-string@^1.0.7:
1508 | version "1.0.7"
1509 | resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd"
1510 | integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==
1511 | dependencies:
1512 | has-tostringtag "^1.0.0"
1513 |
1514 | is-subdir@^1.1.1:
1515 | version "1.2.0"
1516 | resolved "https://registry.yarnpkg.com/is-subdir/-/is-subdir-1.2.0.tgz#b791cd28fab5202e91a08280d51d9d7254fd20d4"
1517 | integrity sha512-2AT6j+gXe/1ueqbW6fLZJiIw3F8iXGJtt0yDrZaBhAZEG1raiTxKWU+IPqMCzQAXOUCKdA4UDMgacKH25XG2Cw==
1518 | dependencies:
1519 | better-path-resolve "1.0.0"
1520 |
1521 | is-symbol@^1.0.2, is-symbol@^1.0.3:
1522 | version "1.0.4"
1523 | resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c"
1524 | integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==
1525 | dependencies:
1526 | has-symbols "^1.0.2"
1527 |
1528 | is-text-path@^1.0.1:
1529 | version "1.0.1"
1530 | resolved "https://registry.yarnpkg.com/is-text-path/-/is-text-path-1.0.1.tgz#4e1aa0fb51bfbcb3e92688001397202c1775b66e"
1531 | integrity sha512-xFuJpne9oFz5qDaodwmmG08e3CawH/2ZV8Qqza1Ko7Sk8POWbkRdwIoAWVhqvq0XeUzANEhKo2n0IXUGBm7A/w==
1532 | dependencies:
1533 | text-extensions "^1.0.0"
1534 |
1535 | is-typed-array@^1.1.10, is-typed-array@^1.1.9:
1536 | version "1.1.12"
1537 | resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.12.tgz#d0bab5686ef4a76f7a73097b95470ab199c57d4a"
1538 | integrity sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==
1539 | dependencies:
1540 | which-typed-array "^1.1.11"
1541 |
1542 | is-weakref@^1.0.2:
1543 | version "1.0.2"
1544 | resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2"
1545 | integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==
1546 | dependencies:
1547 | call-bind "^1.0.2"
1548 |
1549 | is-windows@^1.0.0:
1550 | version "1.0.2"
1551 | resolved "https://registry.yarnpkg.com/is-windows/-/is-windows-1.0.2.tgz#d1850eb9791ecd18e6182ce12a30f396634bb19d"
1552 | integrity sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==
1553 |
1554 | isarray@^2.0.5:
1555 | version "2.0.5"
1556 | resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723"
1557 | integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==
1558 |
1559 | isexe@^2.0.0:
1560 | version "2.0.0"
1561 | resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10"
1562 | integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==
1563 |
1564 | js-tokens@^4.0.0:
1565 | version "4.0.0"
1566 | resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499"
1567 | integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==
1568 |
1569 | js-yaml@^3.13.0, js-yaml@^3.13.1, js-yaml@^3.6.1:
1570 | version "3.14.1"
1571 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.14.1.tgz#dae812fdb3825fa306609a8717383c50c36a0537"
1572 | integrity sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==
1573 | dependencies:
1574 | argparse "^1.0.7"
1575 | esprima "^4.0.0"
1576 |
1577 | js-yaml@^4.1.0:
1578 | version "4.1.0"
1579 | resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-4.1.0.tgz#c1fb65f8f5017901cdd2c951864ba18458a10602"
1580 | integrity sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==
1581 | dependencies:
1582 | argparse "^2.0.1"
1583 |
1584 | json-parse-even-better-errors@^2.3.0:
1585 | version "2.3.1"
1586 | resolved "https://registry.yarnpkg.com/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#7c47805a94319928e05777405dc12e1f7a4ee02d"
1587 | integrity sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==
1588 |
1589 | json-schema-traverse@^1.0.0:
1590 | version "1.0.0"
1591 | resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#ae7bcb3656ab77a73ba5c49bf654f38e6b6860e2"
1592 | integrity sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==
1593 |
1594 | jsonfile@^4.0.0:
1595 | version "4.0.0"
1596 | resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb"
1597 | integrity sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg==
1598 | optionalDependencies:
1599 | graceful-fs "^4.1.6"
1600 |
1601 | jsonfile@^6.0.1:
1602 | version "6.1.0"
1603 | resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae"
1604 | integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==
1605 | dependencies:
1606 | universalify "^2.0.0"
1607 | optionalDependencies:
1608 | graceful-fs "^4.1.6"
1609 |
1610 | jsonparse@^1.2.0:
1611 | version "1.3.1"
1612 | resolved "https://registry.yarnpkg.com/jsonparse/-/jsonparse-1.3.1.tgz#3f4dae4a91fac315f71062f8521cc239f1366280"
1613 | integrity sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==
1614 |
1615 | kind-of@^6.0.3:
1616 | version "6.0.3"
1617 | resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-6.0.3.tgz#07c05034a6c349fa06e24fa35aa76db4580ce4dd"
1618 | integrity sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==
1619 |
1620 | kleur@^4.1.5:
1621 | version "4.1.5"
1622 | resolved "https://registry.yarnpkg.com/kleur/-/kleur-4.1.5.tgz#95106101795f7050c6c650f350c683febddb1780"
1623 | integrity sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==
1624 |
1625 | lines-and-columns@^1.1.6:
1626 | version "1.2.4"
1627 | resolved "https://registry.yarnpkg.com/lines-and-columns/-/lines-and-columns-1.2.4.tgz#eca284f75d2965079309dc0ad9255abb2ebc1632"
1628 | integrity sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==
1629 |
1630 | load-yaml-file@^0.2.0:
1631 | version "0.2.0"
1632 | resolved "https://registry.yarnpkg.com/load-yaml-file/-/load-yaml-file-0.2.0.tgz#af854edaf2bea89346c07549122753c07372f64d"
1633 | integrity sha512-OfCBkGEw4nN6JLtgRidPX6QxjBQGQf72q3si2uvqyFEMbycSFFHwAZeXx6cJgFM9wmLrf9zBwCP3Ivqa+LLZPw==
1634 | dependencies:
1635 | graceful-fs "^4.1.5"
1636 | js-yaml "^3.13.0"
1637 | pify "^4.0.1"
1638 | strip-bom "^3.0.0"
1639 |
1640 | locate-path@^5.0.0:
1641 | version "5.0.0"
1642 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-5.0.0.tgz#1afba396afd676a6d42504d0a67a3a7eb9f62aa0"
1643 | integrity sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==
1644 | dependencies:
1645 | p-locate "^4.1.0"
1646 |
1647 | locate-path@^6.0.0:
1648 | version "6.0.0"
1649 | resolved "https://registry.yarnpkg.com/locate-path/-/locate-path-6.0.0.tgz#55321eb309febbc59c4801d931a72452a681d286"
1650 | integrity sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==
1651 | dependencies:
1652 | p-locate "^5.0.0"
1653 |
1654 | lodash.camelcase@^4.3.0:
1655 | version "4.3.0"
1656 | resolved "https://registry.yarnpkg.com/lodash.camelcase/-/lodash.camelcase-4.3.0.tgz#b28aa6288a2b9fc651035c7711f65ab6190331a6"
1657 | integrity sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==
1658 |
1659 | lodash.isfunction@^3.0.9:
1660 | version "3.0.9"
1661 | resolved "https://registry.yarnpkg.com/lodash.isfunction/-/lodash.isfunction-3.0.9.tgz#06de25df4db327ac931981d1bdb067e5af68d051"
1662 | integrity sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw==
1663 |
1664 | lodash.isplainobject@^4.0.6:
1665 | version "4.0.6"
1666 | resolved "https://registry.yarnpkg.com/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz#7c526a52d89b45c45cc690b88163be0497f550cb"
1667 | integrity sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==
1668 |
1669 | lodash.kebabcase@^4.1.1:
1670 | version "4.1.1"
1671 | resolved "https://registry.yarnpkg.com/lodash.kebabcase/-/lodash.kebabcase-4.1.1.tgz#8489b1cb0d29ff88195cceca448ff6d6cc295c36"
1672 | integrity sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==
1673 |
1674 | lodash.merge@^4.6.2:
1675 | version "4.6.2"
1676 | resolved "https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a"
1677 | integrity sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==
1678 |
1679 | lodash.mergewith@^4.6.2:
1680 | version "4.6.2"
1681 | resolved "https://registry.yarnpkg.com/lodash.mergewith/-/lodash.mergewith-4.6.2.tgz#617121f89ac55f59047c7aec1ccd6654c6590f55"
1682 | integrity sha512-GK3g5RPZWTRSeLSpgP8Xhra+pnjBC56q9FZYe1d5RN3TJ35dbkGy3YqBSMbyCrlbi+CM9Z3Jk5yTL7RCsqboyQ==
1683 |
1684 | lodash.snakecase@^4.1.1:
1685 | version "4.1.1"
1686 | resolved "https://registry.yarnpkg.com/lodash.snakecase/-/lodash.snakecase-4.1.1.tgz#39d714a35357147837aefd64b5dcbb16becd8f8d"
1687 | integrity sha512-QZ1d4xoBHYUeuouhEq3lk3Uq7ldgyFXGBhg04+oRLnIz8o9T65Eh+8YdroUwn846zchkA9yDsDl5CVVaV2nqYw==
1688 |
1689 | lodash.startcase@^4.4.0:
1690 | version "4.4.0"
1691 | resolved "https://registry.yarnpkg.com/lodash.startcase/-/lodash.startcase-4.4.0.tgz#9436e34ed26093ed7ffae1936144350915d9add8"
1692 | integrity sha512-+WKqsK294HMSc2jEbNgpHpd0JfIBhp7rEV4aqXWqFr6AlXov+SlcgB1Fv01y2kGe3Gc8nMW7VA0SrGuSkRfIEg==
1693 |
1694 | lodash.uniq@^4.5.0:
1695 | version "4.5.0"
1696 | resolved "https://registry.yarnpkg.com/lodash.uniq/-/lodash.uniq-4.5.0.tgz#d0225373aeb652adc1bc82e4945339a842754773"
1697 | integrity sha512-xfBaXQd9ryd9dlSDvnvI0lvxfLJlYAZzXomUYzLKtUeOQvOP5piqAWuGtrhWeqaXK9hhoM/iyJc5AV+XfsX3HQ==
1698 |
1699 | lodash.upperfirst@^4.3.1:
1700 | version "4.3.1"
1701 | resolved "https://registry.yarnpkg.com/lodash.upperfirst/-/lodash.upperfirst-4.3.1.tgz#1365edf431480481ef0d1c68957a5ed99d49f7ce"
1702 | integrity sha512-sReKOYJIJf74dhJONhU4e0/shzi1trVbSWDOhKYE5XV2O+H7Sb2Dihwuc7xWxVl+DgFPyTqIN3zMfT9cq5iWDg==
1703 |
1704 | lodash@^4.17.15:
1705 | version "4.17.21"
1706 | resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c"
1707 | integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==
1708 |
1709 | lru-cache@^4.0.1:
1710 | version "4.1.5"
1711 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-4.1.5.tgz#8bbe50ea85bed59bc9e33dcab8235ee9bcf443cd"
1712 | integrity sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==
1713 | dependencies:
1714 | pseudomap "^1.0.2"
1715 | yallist "^2.1.2"
1716 |
1717 | lru-cache@^6.0.0:
1718 | version "6.0.0"
1719 | resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94"
1720 | integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==
1721 | dependencies:
1722 | yallist "^4.0.0"
1723 |
1724 | make-error@^1.1.1:
1725 | version "1.3.6"
1726 | resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2"
1727 | integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==
1728 |
1729 | map-obj@^1.0.0:
1730 | version "1.0.1"
1731 | resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d"
1732 | integrity sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==
1733 |
1734 | map-obj@^4.0.0:
1735 | version "4.3.0"
1736 | resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-4.3.0.tgz#9304f906e93faae70880da102a9f1df0ea8bb05a"
1737 | integrity sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==
1738 |
1739 | meow@^6.0.0:
1740 | version "6.1.1"
1741 | resolved "https://registry.yarnpkg.com/meow/-/meow-6.1.1.tgz#1ad64c4b76b2a24dfb2f635fddcadf320d251467"
1742 | integrity sha512-3YffViIt2QWgTy6Pale5QpopX/IvU3LPL03jOTqp6pGj3VjesdO/U8CuHMKpnQr4shCNCM5fd5XFFvIIl6JBHg==
1743 | dependencies:
1744 | "@types/minimist" "^1.2.0"
1745 | camelcase-keys "^6.2.2"
1746 | decamelize-keys "^1.1.0"
1747 | hard-rejection "^2.1.0"
1748 | minimist-options "^4.0.2"
1749 | normalize-package-data "^2.5.0"
1750 | read-pkg-up "^7.0.1"
1751 | redent "^3.0.0"
1752 | trim-newlines "^3.0.0"
1753 | type-fest "^0.13.1"
1754 | yargs-parser "^18.1.3"
1755 |
1756 | meow@^8.0.0, meow@^8.1.2:
1757 | version "8.1.2"
1758 | resolved "https://registry.yarnpkg.com/meow/-/meow-8.1.2.tgz#bcbe45bda0ee1729d350c03cffc8395a36c4e897"
1759 | integrity sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==
1760 | dependencies:
1761 | "@types/minimist" "^1.2.0"
1762 | camelcase-keys "^6.2.2"
1763 | decamelize-keys "^1.1.0"
1764 | hard-rejection "^2.1.0"
1765 | minimist-options "4.1.0"
1766 | normalize-package-data "^3.0.0"
1767 | read-pkg-up "^7.0.1"
1768 | redent "^3.0.0"
1769 | trim-newlines "^3.0.0"
1770 | type-fest "^0.18.0"
1771 | yargs-parser "^20.2.3"
1772 |
1773 | merge-stream@^2.0.0:
1774 | version "2.0.0"
1775 | resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60"
1776 | integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==
1777 |
1778 | merge2@^1.3.0, merge2@^1.4.1:
1779 | version "1.4.1"
1780 | resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae"
1781 | integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==
1782 |
1783 | micromatch@^4.0.2, micromatch@^4.0.4:
1784 | version "4.0.5"
1785 | resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6"
1786 | integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==
1787 | dependencies:
1788 | braces "^3.0.2"
1789 | picomatch "^2.3.1"
1790 |
1791 | mimic-fn@^2.1.0:
1792 | version "2.1.0"
1793 | resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b"
1794 | integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==
1795 |
1796 | min-indent@^1.0.0:
1797 | version "1.0.1"
1798 | resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869"
1799 | integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==
1800 |
1801 | minimist-options@4.1.0, minimist-options@^4.0.2:
1802 | version "4.1.0"
1803 | resolved "https://registry.yarnpkg.com/minimist-options/-/minimist-options-4.1.0.tgz#c0655713c53a8a2ebd77ffa247d342c40f010619"
1804 | integrity sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==
1805 | dependencies:
1806 | arrify "^1.0.1"
1807 | is-plain-obj "^1.1.0"
1808 | kind-of "^6.0.3"
1809 |
1810 | minimist@^1.2.6:
1811 | version "1.2.8"
1812 | resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c"
1813 | integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==
1814 |
1815 | mixme@^0.5.1:
1816 | version "0.5.9"
1817 | resolved "https://registry.yarnpkg.com/mixme/-/mixme-0.5.9.tgz#a5a58e17354632179ff3ce5b0fc130899c8ba81c"
1818 | integrity sha512-VC5fg6ySUscaWUpI4gxCBTQMH2RdUpNrk+MsbpCYtIvf9SBJdiUey4qE7BXviJsJR4nDQxCZ+3yaYNW3guz/Pw==
1819 |
1820 | node-fetch@^2.5.0:
1821 | version "2.6.12"
1822 | resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.12.tgz#02eb8e22074018e3d5a83016649d04df0e348fba"
1823 | integrity sha512-C/fGU2E8ToujUivIO0H+tpQ6HWo4eEmchoPIoXtxCrVghxdKq+QOHqEZW7tuP3KlV3bC8FRMO5nMCC7Zm1VP6g==
1824 | dependencies:
1825 | whatwg-url "^5.0.0"
1826 |
1827 | normalize-package-data@^2.5.0:
1828 | version "2.5.0"
1829 | resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8"
1830 | integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==
1831 | dependencies:
1832 | hosted-git-info "^2.1.4"
1833 | resolve "^1.10.0"
1834 | semver "2 || 3 || 4 || 5"
1835 | validate-npm-package-license "^3.0.1"
1836 |
1837 | normalize-package-data@^3.0.0:
1838 | version "3.0.3"
1839 | resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-3.0.3.tgz#dbcc3e2da59509a0983422884cd172eefdfa525e"
1840 | integrity sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==
1841 | dependencies:
1842 | hosted-git-info "^4.0.1"
1843 | is-core-module "^2.5.0"
1844 | semver "^7.3.4"
1845 | validate-npm-package-license "^3.0.1"
1846 |
1847 | npm-run-path@^4.0.1:
1848 | version "4.0.1"
1849 | resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea"
1850 | integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==
1851 | dependencies:
1852 | path-key "^3.0.0"
1853 |
1854 | object-inspect@^1.12.3, object-inspect@^1.9.0:
1855 | version "1.12.3"
1856 | resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.3.tgz#ba62dffd67ee256c8c086dfae69e016cd1f198b9"
1857 | integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==
1858 |
1859 | object-keys@^1.1.1:
1860 | version "1.1.1"
1861 | resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e"
1862 | integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==
1863 |
1864 | object.assign@^4.1.4:
1865 | version "4.1.4"
1866 | resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.4.tgz#9673c7c7c351ab8c4d0b516f4343ebf4dfb7799f"
1867 | integrity sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==
1868 | dependencies:
1869 | call-bind "^1.0.2"
1870 | define-properties "^1.1.4"
1871 | has-symbols "^1.0.3"
1872 | object-keys "^1.1.1"
1873 |
1874 | onetime@^5.1.2:
1875 | version "5.1.2"
1876 | resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e"
1877 | integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==
1878 | dependencies:
1879 | mimic-fn "^2.1.0"
1880 |
1881 | os-tmpdir@~1.0.2:
1882 | version "1.0.2"
1883 | resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274"
1884 | integrity sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==
1885 |
1886 | outdent@^0.5.0:
1887 | version "0.5.0"
1888 | resolved "https://registry.yarnpkg.com/outdent/-/outdent-0.5.0.tgz#9e10982fdc41492bb473ad13840d22f9655be2ff"
1889 | integrity sha512-/jHxFIzoMXdqPzTaCpFzAAWhpkSjZPF4Vsn6jAfNpmbH/ymsmd7Qc6VE9BGn0L6YMj6uwpQLxCECpus4ukKS9Q==
1890 |
1891 | p-filter@^2.1.0:
1892 | version "2.1.0"
1893 | resolved "https://registry.yarnpkg.com/p-filter/-/p-filter-2.1.0.tgz#1b1472562ae7a0f742f0f3d3d3718ea66ff9c09c"
1894 | integrity sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==
1895 | dependencies:
1896 | p-map "^2.0.0"
1897 |
1898 | p-limit@^2.2.0:
1899 | version "2.3.0"
1900 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1"
1901 | integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==
1902 | dependencies:
1903 | p-try "^2.0.0"
1904 |
1905 | p-limit@^3.0.2:
1906 | version "3.1.0"
1907 | resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-3.1.0.tgz#e1daccbe78d0d1388ca18c64fea38e3e57e3706b"
1908 | integrity sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==
1909 | dependencies:
1910 | yocto-queue "^0.1.0"
1911 |
1912 | p-locate@^4.1.0:
1913 | version "4.1.0"
1914 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-4.1.0.tgz#a3428bb7088b3a60292f66919278b7c297ad4f07"
1915 | integrity sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==
1916 | dependencies:
1917 | p-limit "^2.2.0"
1918 |
1919 | p-locate@^5.0.0:
1920 | version "5.0.0"
1921 | resolved "https://registry.yarnpkg.com/p-locate/-/p-locate-5.0.0.tgz#83c8315c6785005e3bd021839411c9e110e6d834"
1922 | integrity sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==
1923 | dependencies:
1924 | p-limit "^3.0.2"
1925 |
1926 | p-map@^2.0.0:
1927 | version "2.1.0"
1928 | resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175"
1929 | integrity sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==
1930 |
1931 | p-try@^2.0.0:
1932 | version "2.2.0"
1933 | resolved "https://registry.yarnpkg.com/p-try/-/p-try-2.2.0.tgz#cb2868540e313d61de58fafbe35ce9004d5540e6"
1934 | integrity sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==
1935 |
1936 | parent-module@^1.0.0:
1937 | version "1.0.1"
1938 | resolved "https://registry.yarnpkg.com/parent-module/-/parent-module-1.0.1.tgz#691d2709e78c79fae3a156622452d00762caaaa2"
1939 | integrity sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==
1940 | dependencies:
1941 | callsites "^3.0.0"
1942 |
1943 | parse-json@^5.0.0:
1944 | version "5.2.0"
1945 | resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-5.2.0.tgz#c76fc66dee54231c962b22bcc8a72cf2f99753cd"
1946 | integrity sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==
1947 | dependencies:
1948 | "@babel/code-frame" "^7.0.0"
1949 | error-ex "^1.3.1"
1950 | json-parse-even-better-errors "^2.3.0"
1951 | lines-and-columns "^1.1.6"
1952 |
1953 | path-exists@^4.0.0:
1954 | version "4.0.0"
1955 | resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3"
1956 | integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==
1957 |
1958 | path-key@^3.0.0, path-key@^3.1.0:
1959 | version "3.1.1"
1960 | resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375"
1961 | integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==
1962 |
1963 | path-parse@^1.0.7:
1964 | version "1.0.7"
1965 | resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735"
1966 | integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==
1967 |
1968 | path-type@^4.0.0:
1969 | version "4.0.0"
1970 | resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b"
1971 | integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==
1972 |
1973 | picomatch@^2.3.1:
1974 | version "2.3.1"
1975 | resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42"
1976 | integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==
1977 |
1978 | pify@^4.0.1:
1979 | version "4.0.1"
1980 | resolved "https://registry.yarnpkg.com/pify/-/pify-4.0.1.tgz#4b2cd25c50d598735c50292224fd8c6df41e3231"
1981 | integrity sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==
1982 |
1983 | pkg-dir@^4.2.0:
1984 | version "4.2.0"
1985 | resolved "https://registry.yarnpkg.com/pkg-dir/-/pkg-dir-4.2.0.tgz#f099133df7ede422e81d1d8448270eeb3e4261f3"
1986 | integrity sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==
1987 | dependencies:
1988 | find-up "^4.0.0"
1989 |
1990 | preferred-pm@^3.0.0:
1991 | version "3.0.3"
1992 | resolved "https://registry.yarnpkg.com/preferred-pm/-/preferred-pm-3.0.3.tgz#1b6338000371e3edbce52ef2e4f65eb2e73586d6"
1993 | integrity sha512-+wZgbxNES/KlJs9q40F/1sfOd/j7f1O9JaHcW5Dsn3aUUOZg3L2bjpVUcKV2jvtElYfoTuQiNeMfQJ4kwUAhCQ==
1994 | dependencies:
1995 | find-up "^5.0.0"
1996 | find-yarn-workspace-root2 "1.2.16"
1997 | path-exists "^4.0.0"
1998 | which-pm "2.0.0"
1999 |
2000 | prettier@^2.7.1:
2001 | version "2.8.8"
2002 | resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.8.8.tgz#e8c5d7e98a4305ffe3de2e1fc4aca1a71c28b1da"
2003 | integrity sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==
2004 |
2005 | pseudomap@^1.0.2:
2006 | version "1.0.2"
2007 | resolved "https://registry.yarnpkg.com/pseudomap/-/pseudomap-1.0.2.tgz#f052a28da70e618917ef0a8ac34c1ae5a68286b3"
2008 | integrity sha512-b/YwNhb8lk1Zz2+bXXpS/LK9OisiZZ1SNsSLxN1x2OXVEhW2Ckr/7mWE5vrC1ZTiJlD9g19jWszTmJsB+oEpFQ==
2009 |
2010 | punycode@^2.1.0:
2011 | version "2.3.0"
2012 | resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f"
2013 | integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==
2014 |
2015 | queue-microtask@^1.2.2:
2016 | version "1.2.3"
2017 | resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243"
2018 | integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==
2019 |
2020 | quick-lru@^4.0.1:
2021 | version "4.0.1"
2022 | resolved "https://registry.yarnpkg.com/quick-lru/-/quick-lru-4.0.1.tgz#5b8878f113a58217848c6482026c73e1ba57727f"
2023 | integrity sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==
2024 |
2025 | read-pkg-up@^7.0.1:
2026 | version "7.0.1"
2027 | resolved "https://registry.yarnpkg.com/read-pkg-up/-/read-pkg-up-7.0.1.tgz#f3a6135758459733ae2b95638056e1854e7ef507"
2028 | integrity sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==
2029 | dependencies:
2030 | find-up "^4.1.0"
2031 | read-pkg "^5.2.0"
2032 | type-fest "^0.8.1"
2033 |
2034 | read-pkg@^5.2.0:
2035 | version "5.2.0"
2036 | resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-5.2.0.tgz#7bf295438ca5a33e56cd30e053b34ee7250c93cc"
2037 | integrity sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==
2038 | dependencies:
2039 | "@types/normalize-package-data" "^2.4.0"
2040 | normalize-package-data "^2.5.0"
2041 | parse-json "^5.0.0"
2042 | type-fest "^0.6.0"
2043 |
2044 | read-yaml-file@^1.1.0:
2045 | version "1.1.0"
2046 | resolved "https://registry.yarnpkg.com/read-yaml-file/-/read-yaml-file-1.1.0.tgz#9362bbcbdc77007cc8ea4519fe1c0b821a7ce0d8"
2047 | integrity sha512-VIMnQi/Z4HT2Fxuwg5KrY174U1VdUIASQVWXXyqtNRtxSr9IYkn1rsI6Tb6HsrHCmB7gVpNwX6JxPTHcH6IoTA==
2048 | dependencies:
2049 | graceful-fs "^4.1.5"
2050 | js-yaml "^3.6.1"
2051 | pify "^4.0.1"
2052 | strip-bom "^3.0.0"
2053 |
2054 | readable-stream@3, readable-stream@^3.0.0:
2055 | version "3.6.2"
2056 | resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967"
2057 | integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==
2058 | dependencies:
2059 | inherits "^2.0.3"
2060 | string_decoder "^1.1.1"
2061 | util-deprecate "^1.0.1"
2062 |
2063 | redent@^3.0.0:
2064 | version "3.0.0"
2065 | resolved "https://registry.yarnpkg.com/redent/-/redent-3.0.0.tgz#e557b7998316bb53c9f1f56fa626352c6963059f"
2066 | integrity sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==
2067 | dependencies:
2068 | indent-string "^4.0.0"
2069 | strip-indent "^3.0.0"
2070 |
2071 | regenerator-runtime@^0.14.0:
2072 | version "0.14.0"
2073 | resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz#5e19d68eb12d486f797e15a3c6a918f7cec5eb45"
2074 | integrity sha512-srw17NI0TUWHuGa5CFGGmhfNIeja30WMBfbslPNhf6JrqQlLN5gcrvig1oqPxiVaXb0oW0XRKtH6Nngs5lKCIA==
2075 |
2076 | regexp.prototype.flags@^1.5.0:
2077 | version "1.5.0"
2078 | resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.0.tgz#fe7ce25e7e4cca8db37b6634c8a2c7009199b9cb"
2079 | integrity sha512-0SutC3pNudRKgquxGoRGIz946MZVHqbNfPjBdxeOhBrdgDKlRoXmYLQN9xRbrR09ZXWeGAdPuif7egofn6v5LA==
2080 | dependencies:
2081 | call-bind "^1.0.2"
2082 | define-properties "^1.2.0"
2083 | functions-have-names "^1.2.3"
2084 |
2085 | require-directory@^2.1.1:
2086 | version "2.1.1"
2087 | resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42"
2088 | integrity sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==
2089 |
2090 | require-from-string@^2.0.2:
2091 | version "2.0.2"
2092 | resolved "https://registry.yarnpkg.com/require-from-string/-/require-from-string-2.0.2.tgz#89a7fdd938261267318eafe14f9c32e598c36909"
2093 | integrity sha512-Xf0nWe6RseziFMu+Ap9biiUbmplq6S9/p+7w7YXP/JBHhrUDDUhwa+vANyubuqfZWTveU//DYVGsDG7RKL/vEw==
2094 |
2095 | require-main-filename@^2.0.0:
2096 | version "2.0.0"
2097 | resolved "https://registry.yarnpkg.com/require-main-filename/-/require-main-filename-2.0.0.tgz#d0b329ecc7cc0f61649f62215be69af54aa8989b"
2098 | integrity sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==
2099 |
2100 | resolve-from@5.0.0, resolve-from@^5.0.0:
2101 | version "5.0.0"
2102 | resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-5.0.0.tgz#c35225843df8f776df21c57557bc087e9dfdfc69"
2103 | integrity sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==
2104 |
2105 | resolve-from@^4.0.0:
2106 | version "4.0.0"
2107 | resolved "https://registry.yarnpkg.com/resolve-from/-/resolve-from-4.0.0.tgz#4abcd852ad32dd7baabfe9b40e00a36db5f392e6"
2108 | integrity sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==
2109 |
2110 | resolve-global@1.0.0, resolve-global@^1.0.0:
2111 | version "1.0.0"
2112 | resolved "https://registry.yarnpkg.com/resolve-global/-/resolve-global-1.0.0.tgz#a2a79df4af2ca3f49bf77ef9ddacd322dad19255"
2113 | integrity sha512-zFa12V4OLtT5XUX/Q4VLvTfBf+Ok0SPc1FNGM/z9ctUdiU618qwKpWnd0CHs3+RqROfyEg/DhuHbMWYqcgljEw==
2114 | dependencies:
2115 | global-dirs "^0.1.1"
2116 |
2117 | resolve@^1.10.0:
2118 | version "1.22.4"
2119 | resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.4.tgz#1dc40df46554cdaf8948a486a10f6ba1e2026c34"
2120 | integrity sha512-PXNdCiPqDqeUou+w1C2eTQbNfxKSuMxqTCuvlmmMsk1NWHL5fRrhY6Pl0qEYYc6+QqGClco1Qj8XnjPego4wfg==
2121 | dependencies:
2122 | is-core-module "^2.13.0"
2123 | path-parse "^1.0.7"
2124 | supports-preserve-symlinks-flag "^1.0.0"
2125 |
2126 | reusify@^1.0.4:
2127 | version "1.0.4"
2128 | resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76"
2129 | integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==
2130 |
2131 | run-parallel@^1.1.9:
2132 | version "1.2.0"
2133 | resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee"
2134 | integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==
2135 | dependencies:
2136 | queue-microtask "^1.2.2"
2137 |
2138 | safe-array-concat@^1.0.0:
2139 | version "1.0.0"
2140 | resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.0.0.tgz#2064223cba3c08d2ee05148eedbc563cd6d84060"
2141 | integrity sha512-9dVEFruWIsnie89yym+xWTAYASdpw3CJV7Li/6zBewGf9z2i1j31rP6jnY0pHEO4QZh6N0K11bFjWmdR8UGdPQ==
2142 | dependencies:
2143 | call-bind "^1.0.2"
2144 | get-intrinsic "^1.2.0"
2145 | has-symbols "^1.0.3"
2146 | isarray "^2.0.5"
2147 |
2148 | safe-buffer@~5.2.0:
2149 | version "5.2.1"
2150 | resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6"
2151 | integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==
2152 |
2153 | safe-regex-test@^1.0.0:
2154 | version "1.0.0"
2155 | resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.0.tgz#793b874d524eb3640d1873aad03596db2d4f2295"
2156 | integrity sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==
2157 | dependencies:
2158 | call-bind "^1.0.2"
2159 | get-intrinsic "^1.1.3"
2160 | is-regex "^1.1.4"
2161 |
2162 | "safer-buffer@>= 2.1.2 < 3":
2163 | version "2.1.2"
2164 | resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a"
2165 | integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==
2166 |
2167 | "semver@2 || 3 || 4 || 5":
2168 | version "5.7.2"
2169 | resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.2.tgz#48d55db737c3287cd4835e17fa13feace1c41ef8"
2170 | integrity sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==
2171 |
2172 | semver@7.5.4, semver@^7.3.4, semver@^7.5.3:
2173 | version "7.5.4"
2174 | resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e"
2175 | integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==
2176 | dependencies:
2177 | lru-cache "^6.0.0"
2178 |
2179 | set-blocking@^2.0.0:
2180 | version "2.0.0"
2181 | resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7"
2182 | integrity sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==
2183 |
2184 | shebang-command@^1.2.0:
2185 | version "1.2.0"
2186 | resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-1.2.0.tgz#44aac65b695b03398968c39f363fee5deafdf1ea"
2187 | integrity sha512-EV3L1+UQWGor21OmnvojK36mhg+TyIKDh3iFBKBohr5xeXIhNBcx8oWdgkTEEQ+BEFFYdLRuqMfd5L84N1V5Vg==
2188 | dependencies:
2189 | shebang-regex "^1.0.0"
2190 |
2191 | shebang-command@^2.0.0:
2192 | version "2.0.0"
2193 | resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea"
2194 | integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==
2195 | dependencies:
2196 | shebang-regex "^3.0.0"
2197 |
2198 | shebang-regex@^1.0.0:
2199 | version "1.0.0"
2200 | resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-1.0.0.tgz#da42f49740c0b42db2ca9728571cb190c98efea3"
2201 | integrity sha512-wpoSFAxys6b2a2wHZ1XpDSgD7N9iVjg29Ph9uV/uaP9Ex/KXlkTZTeddxDPSYQpgvzKLGJke2UU0AzoGCjNIvQ==
2202 |
2203 | shebang-regex@^3.0.0:
2204 | version "3.0.0"
2205 | resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172"
2206 | integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==
2207 |
2208 | side-channel@^1.0.4:
2209 | version "1.0.4"
2210 | resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf"
2211 | integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==
2212 | dependencies:
2213 | call-bind "^1.0.0"
2214 | get-intrinsic "^1.0.2"
2215 | object-inspect "^1.9.0"
2216 |
2217 | signal-exit@^3.0.2, signal-exit@^3.0.3:
2218 | version "3.0.7"
2219 | resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9"
2220 | integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==
2221 |
2222 | slash@^3.0.0:
2223 | version "3.0.0"
2224 | resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634"
2225 | integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==
2226 |
2227 | smartwrap@^2.0.2:
2228 | version "2.0.2"
2229 | resolved "https://registry.yarnpkg.com/smartwrap/-/smartwrap-2.0.2.tgz#7e25d3dd58b51c6ca4aba3a9e391650ea62698a4"
2230 | integrity sha512-vCsKNQxb7PnCNd2wY1WClWifAc2lwqsG8OaswpJkVJsvMGcnEntdTCDajZCkk93Ay1U3t/9puJmb525Rg5MZBA==
2231 | dependencies:
2232 | array.prototype.flat "^1.2.3"
2233 | breakword "^1.0.5"
2234 | grapheme-splitter "^1.0.4"
2235 | strip-ansi "^6.0.0"
2236 | wcwidth "^1.0.1"
2237 | yargs "^15.1.0"
2238 |
2239 | spawndamnit@^2.0.0:
2240 | version "2.0.0"
2241 | resolved "https://registry.yarnpkg.com/spawndamnit/-/spawndamnit-2.0.0.tgz#9f762ac5c3476abb994b42ad592b5ad22bb4b0ad"
2242 | integrity sha512-j4JKEcncSjFlqIwU5L/rp2N5SIPsdxaRsIv678+TZxZ0SRDJTm8JrxJMjE/XuiEZNEir3S8l0Fa3Ke339WI4qA==
2243 | dependencies:
2244 | cross-spawn "^5.1.0"
2245 | signal-exit "^3.0.2"
2246 |
2247 | spdx-correct@^3.0.0:
2248 | version "3.2.0"
2249 | resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.2.0.tgz#4f5ab0668f0059e34f9c00dce331784a12de4e9c"
2250 | integrity sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==
2251 | dependencies:
2252 | spdx-expression-parse "^3.0.0"
2253 | spdx-license-ids "^3.0.0"
2254 |
2255 | spdx-exceptions@^2.1.0:
2256 | version "2.3.0"
2257 | resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d"
2258 | integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==
2259 |
2260 | spdx-expression-parse@^3.0.0:
2261 | version "3.0.1"
2262 | resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679"
2263 | integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==
2264 | dependencies:
2265 | spdx-exceptions "^2.1.0"
2266 | spdx-license-ids "^3.0.0"
2267 |
2268 | spdx-license-ids@^3.0.0:
2269 | version "3.0.13"
2270 | resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.13.tgz#7189a474c46f8d47c7b0da4b987bb45e908bd2d5"
2271 | integrity sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==
2272 |
2273 | split2@^3.0.0, split2@^3.2.2:
2274 | version "3.2.2"
2275 | resolved "https://registry.yarnpkg.com/split2/-/split2-3.2.2.tgz#bf2cf2a37d838312c249c89206fd7a17dd12365f"
2276 | integrity sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==
2277 | dependencies:
2278 | readable-stream "^3.0.0"
2279 |
2280 | sprintf-js@~1.0.2:
2281 | version "1.0.3"
2282 | resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.0.3.tgz#04e6926f662895354f3dd015203633b857297e2c"
2283 | integrity sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==
2284 |
2285 | stream-transform@^2.1.3:
2286 | version "2.1.3"
2287 | resolved "https://registry.yarnpkg.com/stream-transform/-/stream-transform-2.1.3.tgz#a1c3ecd72ddbf500aa8d342b0b9df38f5aa598e3"
2288 | integrity sha512-9GHUiM5hMiCi6Y03jD2ARC1ettBXkQBoQAe7nJsPknnI0ow10aXjTnew8QtYQmLjzn974BnmWEAJgCY6ZP1DeQ==
2289 | dependencies:
2290 | mixme "^0.5.1"
2291 |
2292 | string-width@^4.1.0, string-width@^4.2.0, string-width@^4.2.3:
2293 | version "4.2.3"
2294 | resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010"
2295 | integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==
2296 | dependencies:
2297 | emoji-regex "^8.0.0"
2298 | is-fullwidth-code-point "^3.0.0"
2299 | strip-ansi "^6.0.1"
2300 |
2301 | string.prototype.trim@^1.2.7:
2302 | version "1.2.7"
2303 | resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.7.tgz#a68352740859f6893f14ce3ef1bb3037f7a90533"
2304 | integrity sha512-p6TmeT1T3411M8Cgg9wBTMRtY2q9+PNy9EV1i2lIXUN/btt763oIfxwN3RR8VU6wHX8j/1CFy0L+YuThm6bgOg==
2305 | dependencies:
2306 | call-bind "^1.0.2"
2307 | define-properties "^1.1.4"
2308 | es-abstract "^1.20.4"
2309 |
2310 | string.prototype.trimend@^1.0.6:
2311 | version "1.0.6"
2312 | resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.6.tgz#c4a27fa026d979d79c04f17397f250a462944533"
2313 | integrity sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==
2314 | dependencies:
2315 | call-bind "^1.0.2"
2316 | define-properties "^1.1.4"
2317 | es-abstract "^1.20.4"
2318 |
2319 | string.prototype.trimstart@^1.0.6:
2320 | version "1.0.6"
2321 | resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.6.tgz#e90ab66aa8e4007d92ef591bbf3cd422c56bdcf4"
2322 | integrity sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==
2323 | dependencies:
2324 | call-bind "^1.0.2"
2325 | define-properties "^1.1.4"
2326 | es-abstract "^1.20.4"
2327 |
2328 | string_decoder@^1.1.1:
2329 | version "1.3.0"
2330 | resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e"
2331 | integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==
2332 | dependencies:
2333 | safe-buffer "~5.2.0"
2334 |
2335 | strip-ansi@^6.0.0, strip-ansi@^6.0.1:
2336 | version "6.0.1"
2337 | resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9"
2338 | integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==
2339 | dependencies:
2340 | ansi-regex "^5.0.1"
2341 |
2342 | strip-bom@^3.0.0:
2343 | version "3.0.0"
2344 | resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3"
2345 | integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==
2346 |
2347 | strip-final-newline@^2.0.0:
2348 | version "2.0.0"
2349 | resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad"
2350 | integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==
2351 |
2352 | strip-indent@^3.0.0:
2353 | version "3.0.0"
2354 | resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-3.0.0.tgz#c32e1cee940b6b3432c771bc2c54bcce73cd3001"
2355 | integrity sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==
2356 | dependencies:
2357 | min-indent "^1.0.0"
2358 |
2359 | supports-color@^5.3.0:
2360 | version "5.5.0"
2361 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-5.5.0.tgz#e2e69a44ac8772f78a1ec0b35b689df6530efc8f"
2362 | integrity sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==
2363 | dependencies:
2364 | has-flag "^3.0.0"
2365 |
2366 | supports-color@^7.1.0:
2367 | version "7.2.0"
2368 | resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da"
2369 | integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==
2370 | dependencies:
2371 | has-flag "^4.0.0"
2372 |
2373 | supports-preserve-symlinks-flag@^1.0.0:
2374 | version "1.0.0"
2375 | resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09"
2376 | integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==
2377 |
2378 | term-size@^2.1.0:
2379 | version "2.2.1"
2380 | resolved "https://registry.yarnpkg.com/term-size/-/term-size-2.2.1.tgz#2a6a54840432c2fb6320fea0f415531e90189f54"
2381 | integrity sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==
2382 |
2383 | text-extensions@^1.0.0:
2384 | version "1.9.0"
2385 | resolved "https://registry.yarnpkg.com/text-extensions/-/text-extensions-1.9.0.tgz#1853e45fee39c945ce6f6c36b2d659b5aabc2a26"
2386 | integrity sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==
2387 |
2388 | through2@^4.0.0:
2389 | version "4.0.2"
2390 | resolved "https://registry.yarnpkg.com/through2/-/through2-4.0.2.tgz#a7ce3ac2a7a8b0b966c80e7c49f0484c3b239764"
2391 | integrity sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==
2392 | dependencies:
2393 | readable-stream "3"
2394 |
2395 | "through@>=2.2.7 <3":
2396 | version "2.3.8"
2397 | resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
2398 | integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==
2399 |
2400 | tmp@^0.0.33:
2401 | version "0.0.33"
2402 | resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.0.33.tgz#6d34335889768d21b2bcda0aa277ced3b1bfadf9"
2403 | integrity sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==
2404 | dependencies:
2405 | os-tmpdir "~1.0.2"
2406 |
2407 | to-regex-range@^5.0.1:
2408 | version "5.0.1"
2409 | resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4"
2410 | integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==
2411 | dependencies:
2412 | is-number "^7.0.0"
2413 |
2414 | tr46@~0.0.3:
2415 | version "0.0.3"
2416 | resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a"
2417 | integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw==
2418 |
2419 | trim-newlines@^3.0.0:
2420 | version "3.0.1"
2421 | resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-3.0.1.tgz#260a5d962d8b752425b32f3a7db0dcacd176c144"
2422 | integrity sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==
2423 |
2424 | ts-node@^10.8.1:
2425 | version "10.9.1"
2426 | resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.1.tgz#e73de9102958af9e1f0b168a6ff320e25adcff4b"
2427 | integrity sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==
2428 | dependencies:
2429 | "@cspotcode/source-map-support" "^0.8.0"
2430 | "@tsconfig/node10" "^1.0.7"
2431 | "@tsconfig/node12" "^1.0.7"
2432 | "@tsconfig/node14" "^1.0.0"
2433 | "@tsconfig/node16" "^1.0.2"
2434 | acorn "^8.4.1"
2435 | acorn-walk "^8.1.1"
2436 | arg "^4.1.0"
2437 | create-require "^1.1.0"
2438 | diff "^4.0.1"
2439 | make-error "^1.1.1"
2440 | v8-compile-cache-lib "^3.0.1"
2441 | yn "3.1.1"
2442 |
2443 | tty-table@^4.1.5:
2444 | version "4.2.1"
2445 | resolved "https://registry.yarnpkg.com/tty-table/-/tty-table-4.2.1.tgz#c06cd76c54542acf4e2b4a0e9a5802984b65cba6"
2446 | integrity sha512-xz0uKo+KakCQ+Dxj1D/tKn2FSyreSYWzdkL/BYhgN6oMW808g8QRMuh1atAV9fjTPbWBjfbkKQpI/5rEcnAc7g==
2447 | dependencies:
2448 | chalk "^4.1.2"
2449 | csv "^5.5.3"
2450 | kleur "^4.1.5"
2451 | smartwrap "^2.0.2"
2452 | strip-ansi "^6.0.1"
2453 | wcwidth "^1.0.1"
2454 | yargs "^17.7.1"
2455 |
2456 | type-fest@^0.13.1:
2457 | version "0.13.1"
2458 | resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.13.1.tgz#0172cb5bce80b0bd542ea348db50c7e21834d934"
2459 | integrity sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==
2460 |
2461 | type-fest@^0.18.0:
2462 | version "0.18.1"
2463 | resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.18.1.tgz#db4bc151a4a2cf4eebf9add5db75508db6cc841f"
2464 | integrity sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==
2465 |
2466 | type-fest@^0.6.0:
2467 | version "0.6.0"
2468 | resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.6.0.tgz#8d2a2370d3df886eb5c90ada1c5bf6188acf838b"
2469 | integrity sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==
2470 |
2471 | type-fest@^0.8.1:
2472 | version "0.8.1"
2473 | resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.8.1.tgz#09e249ebde851d3b1e48d27c105444667f17b83d"
2474 | integrity sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==
2475 |
2476 | typed-array-buffer@^1.0.0:
2477 | version "1.0.0"
2478 | resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz#18de3e7ed7974b0a729d3feecb94338d1472cd60"
2479 | integrity sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==
2480 | dependencies:
2481 | call-bind "^1.0.2"
2482 | get-intrinsic "^1.2.1"
2483 | is-typed-array "^1.1.10"
2484 |
2485 | typed-array-byte-length@^1.0.0:
2486 | version "1.0.0"
2487 | resolved "https://registry.yarnpkg.com/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz#d787a24a995711611fb2b87a4052799517b230d0"
2488 | integrity sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==
2489 | dependencies:
2490 | call-bind "^1.0.2"
2491 | for-each "^0.3.3"
2492 | has-proto "^1.0.1"
2493 | is-typed-array "^1.1.10"
2494 |
2495 | typed-array-byte-offset@^1.0.0:
2496 | version "1.0.0"
2497 | resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz#cbbe89b51fdef9cd6aaf07ad4707340abbc4ea0b"
2498 | integrity sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==
2499 | dependencies:
2500 | available-typed-arrays "^1.0.5"
2501 | call-bind "^1.0.2"
2502 | for-each "^0.3.3"
2503 | has-proto "^1.0.1"
2504 | is-typed-array "^1.1.10"
2505 |
2506 | typed-array-length@^1.0.4:
2507 | version "1.0.4"
2508 | resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.4.tgz#89d83785e5c4098bec72e08b319651f0eac9c1bb"
2509 | integrity sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==
2510 | dependencies:
2511 | call-bind "^1.0.2"
2512 | for-each "^0.3.3"
2513 | is-typed-array "^1.1.9"
2514 |
2515 | "typescript@^4.6.4 || ^5.0.0":
2516 | version "5.1.6"
2517 | resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.1.6.tgz#02f8ac202b6dad2c0dd5e0913745b47a37998274"
2518 | integrity sha512-zaWCozRZ6DLEWAWFrVDz1H6FVXzUSfTy5FUMWsQlU8Ym5JP9eO4xkTIROFCQvhQf61z6O/G6ugw3SgAnvvm+HA==
2519 |
2520 | unbox-primitive@^1.0.2:
2521 | version "1.0.2"
2522 | resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e"
2523 | integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==
2524 | dependencies:
2525 | call-bind "^1.0.2"
2526 | has-bigints "^1.0.2"
2527 | has-symbols "^1.0.3"
2528 | which-boxed-primitive "^1.0.2"
2529 |
2530 | universalify@^0.1.0:
2531 | version "0.1.2"
2532 | resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66"
2533 | integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==
2534 |
2535 | universalify@^2.0.0:
2536 | version "2.0.0"
2537 | resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717"
2538 | integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==
2539 |
2540 | uri-js@^4.2.2:
2541 | version "4.4.1"
2542 | resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e"
2543 | integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==
2544 | dependencies:
2545 | punycode "^2.1.0"
2546 |
2547 | util-deprecate@^1.0.1:
2548 | version "1.0.2"
2549 | resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf"
2550 | integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==
2551 |
2552 | v8-compile-cache-lib@^3.0.1:
2553 | version "3.0.1"
2554 | resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf"
2555 | integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==
2556 |
2557 | validate-npm-package-license@^3.0.1:
2558 | version "3.0.4"
2559 | resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a"
2560 | integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==
2561 | dependencies:
2562 | spdx-correct "^3.0.0"
2563 | spdx-expression-parse "^3.0.0"
2564 |
2565 | wcwidth@^1.0.1:
2566 | version "1.0.1"
2567 | resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8"
2568 | integrity sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg==
2569 | dependencies:
2570 | defaults "^1.0.3"
2571 |
2572 | webidl-conversions@^3.0.0:
2573 | version "3.0.1"
2574 | resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871"
2575 | integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==
2576 |
2577 | whatwg-url@^5.0.0:
2578 | version "5.0.0"
2579 | resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d"
2580 | integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==
2581 | dependencies:
2582 | tr46 "~0.0.3"
2583 | webidl-conversions "^3.0.0"
2584 |
2585 | which-boxed-primitive@^1.0.2:
2586 | version "1.0.2"
2587 | resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6"
2588 | integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==
2589 | dependencies:
2590 | is-bigint "^1.0.1"
2591 | is-boolean-object "^1.1.0"
2592 | is-number-object "^1.0.4"
2593 | is-string "^1.0.5"
2594 | is-symbol "^1.0.3"
2595 |
2596 | which-module@^2.0.0:
2597 | version "2.0.1"
2598 | resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.1.tgz#776b1fe35d90aebe99e8ac15eb24093389a4a409"
2599 | integrity sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==
2600 |
2601 | which-pm@2.0.0:
2602 | version "2.0.0"
2603 | resolved "https://registry.yarnpkg.com/which-pm/-/which-pm-2.0.0.tgz#8245609ecfe64bf751d0eef2f376d83bf1ddb7ae"
2604 | integrity sha512-Lhs9Pmyph0p5n5Z3mVnN0yWcbQYUAD7rbQUiMsQxOJ3T57k7RFe35SUwWMf7dsbDZks1uOmw4AecB/JMDj3v/w==
2605 | dependencies:
2606 | load-yaml-file "^0.2.0"
2607 | path-exists "^4.0.0"
2608 |
2609 | which-typed-array@^1.1.10, which-typed-array@^1.1.11:
2610 | version "1.1.11"
2611 | resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.11.tgz#99d691f23c72aab6768680805a271b69761ed61a"
2612 | integrity sha512-qe9UWWpkeG5yzZ0tNYxDmd7vo58HDBc39mZ0xWWpolAGADdFOzkfamWLDxkOWcvHQKVmdTyQdLD4NOfjLWTKew==
2613 | dependencies:
2614 | available-typed-arrays "^1.0.5"
2615 | call-bind "^1.0.2"
2616 | for-each "^0.3.3"
2617 | gopd "^1.0.1"
2618 | has-tostringtag "^1.0.0"
2619 |
2620 | which@^1.2.9:
2621 | version "1.3.1"
2622 | resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a"
2623 | integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==
2624 | dependencies:
2625 | isexe "^2.0.0"
2626 |
2627 | which@^2.0.1:
2628 | version "2.0.2"
2629 | resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1"
2630 | integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==
2631 | dependencies:
2632 | isexe "^2.0.0"
2633 |
2634 | wrap-ansi@^6.2.0:
2635 | version "6.2.0"
2636 | resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53"
2637 | integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==
2638 | dependencies:
2639 | ansi-styles "^4.0.0"
2640 | string-width "^4.1.0"
2641 | strip-ansi "^6.0.0"
2642 |
2643 | wrap-ansi@^7.0.0:
2644 | version "7.0.0"
2645 | resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43"
2646 | integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==
2647 | dependencies:
2648 | ansi-styles "^4.0.0"
2649 | string-width "^4.1.0"
2650 | strip-ansi "^6.0.0"
2651 |
2652 | y18n@^4.0.0:
2653 | version "4.0.3"
2654 | resolved "https://registry.yarnpkg.com/y18n/-/y18n-4.0.3.tgz#b5f259c82cd6e336921efd7bfd8bf560de9eeedf"
2655 | integrity sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==
2656 |
2657 | y18n@^5.0.5:
2658 | version "5.0.8"
2659 | resolved "https://registry.yarnpkg.com/y18n/-/y18n-5.0.8.tgz#7f4934d0f7ca8c56f95314939ddcd2dd91ce1d55"
2660 | integrity sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==
2661 |
2662 | yallist@^2.1.2:
2663 | version "2.1.2"
2664 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52"
2665 | integrity sha512-ncTzHV7NvsQZkYe1DW7cbDLm0YpzHmZF5r/iyP3ZnQtMiJ+pjzisCiMNI+Sj+xQF5pXhSHxSB3uDbsBTzY/c2A==
2666 |
2667 | yallist@^4.0.0:
2668 | version "4.0.0"
2669 | resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72"
2670 | integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==
2671 |
2672 | yargs-parser@^18.1.2, yargs-parser@^18.1.3:
2673 | version "18.1.3"
2674 | resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-18.1.3.tgz#be68c4975c6b2abf469236b0c870362fab09a7b0"
2675 | integrity sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==
2676 | dependencies:
2677 | camelcase "^5.0.0"
2678 | decamelize "^1.2.0"
2679 |
2680 | yargs-parser@^20.2.3:
2681 | version "20.2.9"
2682 | resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-20.2.9.tgz#2eb7dc3b0289718fc295f362753845c41a0c94ee"
2683 | integrity sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==
2684 |
2685 | yargs-parser@^21.1.1:
2686 | version "21.1.1"
2687 | resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-21.1.1.tgz#9096bceebf990d21bb31fa9516e0ede294a77d35"
2688 | integrity sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==
2689 |
2690 | yargs@^15.1.0:
2691 | version "15.4.1"
2692 | resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.4.1.tgz#0d87a16de01aee9d8bec2bfbf74f67851730f4f8"
2693 | integrity sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==
2694 | dependencies:
2695 | cliui "^6.0.0"
2696 | decamelize "^1.2.0"
2697 | find-up "^4.1.0"
2698 | get-caller-file "^2.0.1"
2699 | require-directory "^2.1.1"
2700 | require-main-filename "^2.0.0"
2701 | set-blocking "^2.0.0"
2702 | string-width "^4.2.0"
2703 | which-module "^2.0.0"
2704 | y18n "^4.0.0"
2705 | yargs-parser "^18.1.2"
2706 |
2707 | yargs@^17.0.0, yargs@^17.7.1:
2708 | version "17.7.2"
2709 | resolved "https://registry.yarnpkg.com/yargs/-/yargs-17.7.2.tgz#991df39aca675a192b816e1e0363f9d75d2aa269"
2710 | integrity sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==
2711 | dependencies:
2712 | cliui "^8.0.1"
2713 | escalade "^3.1.1"
2714 | get-caller-file "^2.0.5"
2715 | require-directory "^2.1.1"
2716 | string-width "^4.2.3"
2717 | y18n "^5.0.5"
2718 | yargs-parser "^21.1.1"
2719 |
2720 | yn@3.1.1:
2721 | version "3.1.1"
2722 | resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50"
2723 | integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q==
2724 |
2725 | yocto-queue@^0.1.0:
2726 | version "0.1.0"
2727 | resolved "https://registry.yarnpkg.com/yocto-queue/-/yocto-queue-0.1.0.tgz#0294eb3dee05028d31ee1a5fa2c556a6aaf10a1b"
2728 | integrity sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==
2729 |
--------------------------------------------------------------------------------