From d4c408c3b074c2fe7d0cb7c228d4108ab138c3f4 Mon Sep 17 00:00:00 2001 From: Marcin Maciaszczyk Date: Wed, 4 Dec 2024 13:35:55 +0100 Subject: [PATCH 01/37] remove stack commands --- cmd/command/plural/plural.go | 2 - cmd/command/stack/stacks.go | 84 ------------------------------------ pkg/bundle/stack.go | 37 ---------------- 3 files changed, 123 deletions(-) delete mode 100644 cmd/command/stack/stacks.go delete mode 100644 pkg/bundle/stack.go diff --git a/cmd/command/plural/plural.go b/cmd/command/plural/plural.go index 948814fce..5fe0eed64 100644 --- a/cmd/command/plural/plural.go +++ b/cmd/command/plural/plural.go @@ -26,7 +26,6 @@ import ( "github.com/pluralsh/plural-cli/cmd/command/proxy" "github.com/pluralsh/plural-cli/cmd/command/push" "github.com/pluralsh/plural-cli/cmd/command/repo" - "github.com/pluralsh/plural-cli/cmd/command/stack" "github.com/pluralsh/plural-cli/cmd/command/up" "github.com/pluralsh/plural-cli/cmd/command/upgrade" "github.com/pluralsh/plural-cli/cmd/command/version" @@ -244,7 +243,6 @@ func CreateNewApp(plural *Plural) *cli.App { push.Command(plural.Plural), repo.Command(plural.Plural), repo.APICommand(plural.Plural), - stack.Command(plural.Plural), log.Command(plural.Plural), info.Command(plural.Plural), cmdinit.Command(plural.Plural), diff --git a/cmd/command/stack/stacks.go b/cmd/command/stack/stacks.go deleted file mode 100644 index 99c80727d..000000000 --- a/cmd/command/stack/stacks.go +++ /dev/null @@ -1,84 +0,0 @@ -package stack - -import ( - "fmt" - - "github.com/pluralsh/plural-cli/pkg/client" - "github.com/pluralsh/plural-cli/pkg/common" - - "github.com/urfave/cli" - - "github.com/pluralsh/plural-cli/pkg/api" - "github.com/pluralsh/plural-cli/pkg/bundle" - "github.com/pluralsh/plural-cli/pkg/manifest" - "github.com/pluralsh/plural-cli/pkg/utils" -) - -type Plural struct { - client.Plural -} - -func Command(clients client.Plural) cli.Command { - p := Plural{ - Plural: clients, - } - return cli.Command{ - Name: "stack", - Usage: "Commands for installing and discovering plural stacks", - Subcommands: p.stackCommands(), - } -} - -func (p *Plural) stackCommands() []cli.Command { - return []cli.Command{ - { - Name: "install", - Usage: "installs a plural stack for your current provider", - ArgsUsage: "{stack-name}", - Flags: []cli.Flag{ - cli.BoolFlag{ - Name: "refresh", - Usage: "re-enter the configuration for all bundles", - }, - }, - Action: common.Tracked(common.LatestVersion(common.Rooted(common.RequireArgs(p.stackInstall, []string{"{stack-name}"}))), "stack.install"), - }, - { - Name: "list", - Usage: "lists stacks to potentially install", - Flags: []cli.Flag{ - cli.BoolTFlag{ - Name: "account", - Usage: "only list stacks within your account", - }, - }, - Action: common.LatestVersion(common.Rooted(p.stackList)), - }, - } -} - -func (p *Plural) stackInstall(c *cli.Context) (err error) { - name := c.Args().Get(0) - man, err := manifest.FetchProject() - if err != nil { - return - } - - p.InitPluralClient() - err = bundle.Stack(p.Client, name, man.Provider, c.Bool("refresh")) - utils.Note("To edit the configuration you've just entered, edit the context.yaml file at the root of your repo, or run with the --refresh flag\n") - return -} - -func (p *Plural) stackList(c *cli.Context) (err error) { - p.InitPluralClient() - stacks, err := p.ListStacks(c.Bool("account")) - if err != nil { - return api.GetErrorResponse(err, "ListStacks") - } - - headers := []string{"Name", "Description", "Featured"} - return utils.PrintTable(stacks, headers, func(s *api.Stack) ([]string, error) { - return []string{s.Name, s.Description, fmt.Sprintf("%v", s.Featured)}, nil - }) -} diff --git a/pkg/bundle/stack.go b/pkg/bundle/stack.go deleted file mode 100644 index 7bb148399..000000000 --- a/pkg/bundle/stack.go +++ /dev/null @@ -1,37 +0,0 @@ -package bundle - -import ( - "fmt" - "strings" - - "github.com/pluralsh/plural-cli/pkg/api" - "github.com/pluralsh/plural-cli/pkg/utils" -) - -func Stack(client api.Client, name, provider string, refresh bool) error { - s, err := client.GetStack(name, provider) - if err != nil { - return api.GetErrorResponse(err, "GetStack") - } - - utils.Highlight("You're attempting to install stack: %s\n>> ", s.Name) - fmt.Println(s.Description) - fmt.Println() - - repos := make([]string, 0) - for _, r := range s.Bundles { - repos = append(repos, r.Repository.Name) - } - - if !utils.Confirm(fmt.Sprintf("This will install all of {%s}, do you want to proceed?", strings.Join(repos, ", "))) { - return nil - } - - for _, recipe := range s.Bundles { - if err := doInstall(client, recipe, recipe.Repository.Name, provider, refresh); err != nil { - return err - } - } - - return nil -} From 13bbc847a07de48c5cbdf3cf7b49c132851242e7 Mon Sep 17 00:00:00 2001 From: Marcin Maciaszczyk Date: Wed, 4 Dec 2024 13:44:57 +0100 Subject: [PATCH 02/37] remove deploy and destroy commands --- cmd/command/deploy/deploy.go | 53 ----------- cmd/command/destroy/destroy.go | 163 --------------------------------- cmd/command/plural/plural.go | 4 - 3 files changed, 220 deletions(-) delete mode 100644 cmd/command/deploy/deploy.go delete mode 100644 cmd/command/destroy/destroy.go diff --git a/cmd/command/deploy/deploy.go b/cmd/command/deploy/deploy.go deleted file mode 100644 index 964a366a3..000000000 --- a/cmd/command/deploy/deploy.go +++ /dev/null @@ -1,53 +0,0 @@ -package deploy - -import ( - "github.com/pluralsh/plural-cli/pkg/client" - "github.com/pluralsh/plural-cli/pkg/common" - "github.com/urfave/cli" -) - -type Plural struct { - client.Plural -} - -func Command(clients client.Plural) cli.Command { - p := Plural{ - Plural: clients, - } - return cli.Command{ - Name: "deploy", - Aliases: []string{"d"}, - Usage: "Deploys the current workspace. This command will first sniff out git diffs in workspaces, topsort them, then apply all changes.", - Flags: []cli.Flag{ - cli.BoolFlag{ - Name: "silence", - Usage: "don't display notes for deployed apps", - }, - cli.BoolFlag{ - Name: "verbose", - Usage: "show all command output during execution", - }, - cli.BoolFlag{ - Name: "ignore-console", - Usage: "don't deploy the plural console", - }, - cli.BoolFlag{ - Name: "all", - Usage: "deploy all repos irregardless of changes", - }, - cli.StringFlag{ - Name: "commit", - Usage: "commits your changes with this message", - }, - cli.StringSliceFlag{ - Name: "from", - Usage: "deploys only this application and its dependencies", - }, - cli.BoolFlag{ - Name: "force", - Usage: "use force push when pushing to git", - }, - }, - Action: common.Tracked(common.LatestVersion(common.Owned(common.Rooted(p.Deploy))), "cli.deploy"), - } -} diff --git a/cmd/command/destroy/destroy.go b/cmd/command/destroy/destroy.go deleted file mode 100644 index 35ea9962d..000000000 --- a/cmd/command/destroy/destroy.go +++ /dev/null @@ -1,163 +0,0 @@ -package destroy - -import ( - "fmt" - "os" - - "github.com/pluralsh/plural-cli/pkg/api" - "github.com/pluralsh/plural-cli/pkg/client" - "github.com/pluralsh/plural-cli/pkg/common" - "github.com/pluralsh/plural-cli/pkg/manifest" - "github.com/pluralsh/plural-cli/pkg/utils" - "github.com/pluralsh/plural-cli/pkg/utils/git" - "github.com/pluralsh/plural-cli/pkg/wkspace" - "github.com/urfave/cli" -) - -type Plural struct { - Plural client.Plural -} - -func Command(clients client.Plural) cli.Command { - p := Plural{ - Plural: clients, - } - return cli.Command{ - Name: "destroy", - Aliases: []string{"d"}, - Usage: "iterates through all installations in reverse topological order, deleting helm installations and terraform", - ArgsUsage: "{app}", - Flags: []cli.Flag{ - cli.StringFlag{ - Name: "from", - Usage: "where to start your deploy command (useful when restarting interrupted destroys)", - }, - cli.StringFlag{ - Name: "commit", - Usage: "commits your changes with this message", - }, - cli.BoolFlag{ - Name: "force", - Usage: "use force push when pushing to git", - }, - cli.BoolFlag{ - Name: "all", - Usage: "tear down the entire cluster gracefully in one go", - }, - }, - Action: common.Tracked(common.LatestVersion(common.Owned(common.UpstreamSynced(p.destroy))), "cli.destroy"), - } -} - -func (p *Plural) destroy(c *cli.Context) error { - p.Plural.InitPluralClient() - repoName := c.Args().Get(0) - repoRoot, err := git.Root() - if err != nil { - return err - } - force := c.Bool("force") - all := c.Bool("all") - - infix := "this workspace" - if repoName != "" { - infix = repoName - } else if !all { - return fmt.Errorf("you must either specify an individual application or `--all` to destroy the entire workspace") - } - - if !force && !common.Confirm(fmt.Sprintf("Are you sure you want to destroy %s?", infix), "PLURAL_DESTROY_CONFIRM") { - return nil - } - - delete := force || common.Affirm("Do you want to uninstall your applications from the plural api as well?", "PLURAL_DESTROY_AFFIRM_UNINSTALL_APPS") - - if repoName != "" { - installation, err := p.Plural.GetInstallation(repoName) - if err != nil { - return api.GetErrorResponse(err, "GetInstallation") - } - - if installation == nil { - return fmt.Errorf("No installation for app %s to destroy, if the app is still in your repo, you can always run cd %s/terraform && terraform destroy", repoName, repoName) - } - - return p.doDestroy(repoRoot, installation, delete) - } - - installations, err := client.GetSortedInstallations(p.Plural, repoName) - if err != nil { - return err - } - - from := c.String("from") - started := from == "" - for i := len(installations) - 1; i >= 0; i-- { - installation := installations[i] - if installation.Repository.Name == from { - started = true - } - - if !started { - continue - } - - if err := p.doDestroy(repoRoot, installation, delete); err != nil { - return err - } - } - - man, _ := manifest.FetchProject() - if err := p.Plural.DeleteEabCredential(man.Cluster, man.Provider); err != nil { - fmt.Printf("no eab key to delete %s\n", err) - } - - if repoName == "" { - utils.Success("Finished destroying workspace\n") - utils.Note("if you want to recreate this workspace, be sure to rename the cluster to ensure a clean redeploy") - man, err := manifest.FetchProject() - if err != nil { - return err - } - if err := p.Plural.DestroyCluster(man.Network.Subdomain, man.Cluster, man.Provider); err != nil { - return api.GetErrorResponse(err, "DestroyCluster") - } - } - - utils.Highlight("\n==> Commit and push your changes to record your workspace changes\n\n") - - if commit := common.CommitMsg(c); commit != "" { - utils.Highlight("Pushing upstream...\n") - return git.Sync(repoRoot, commit, force) - } - - return nil -} - -func (p *Plural) doDestroy(repoRoot string, installation *api.Installation, delete bool) error { - p.Plural.InitPluralClient() - if err := os.Chdir(repoRoot); err != nil { - return err - } - repo := installation.Repository.Name - if ctx, err := manifest.FetchContext(); err == nil && ctx.Protected(repo) { - return fmt.Errorf("This app is protected, you cannot plural destroy without updating context.yaml") - } - - utils.Error("\nDestroying application %s\n", repo) - workspace, err := wkspace.New(p.Plural.Client, installation) - if err != nil { - return err - } - - if err := workspace.Destroy(); err != nil { - return err - } - - if delete { - utils.Highlight("Uninstalling %s from the plural api as well...\n", repo) - return p.Plural.Client.DeleteInstallation(installation.Id) - } - - return nil -} diff --git a/cmd/command/plural/plural.go b/cmd/command/plural/plural.go index 5fe0eed64..7917c31c5 100644 --- a/cmd/command/plural/plural.go +++ b/cmd/command/plural/plural.go @@ -12,8 +12,6 @@ import ( "github.com/pluralsh/plural-cli/cmd/command/clusters" "github.com/pluralsh/plural-cli/cmd/command/config" cryptocmd "github.com/pluralsh/plural-cli/cmd/command/crypto" - "github.com/pluralsh/plural-cli/cmd/command/deploy" - "github.com/pluralsh/plural-cli/cmd/command/destroy" "github.com/pluralsh/plural-cli/cmd/command/down" "github.com/pluralsh/plural-cli/cmd/command/info" cmdinit "github.com/pluralsh/plural-cli/cmd/command/init" @@ -232,8 +230,6 @@ func CreateNewApp(plural *Plural) *cli.App { cryptocmd.Command(plural.Plural), clusters.Command(plural.Plural), clone.Command(), - deploy.Command(plural.Plural), - destroy.Command(plural.Plural), down.Command(), output.Command(), ops.Command(plural.Plural), From 9234e05a04fc618f7deaa1ad29d47b119edac5d5 Mon Sep 17 00:00:00 2001 From: Marcin Maciaszczyk Date: Wed, 4 Dec 2024 13:49:45 +0100 Subject: [PATCH 03/37] remove build, bundle and bounce commands --- cmd/command/bounce/bounce.go | 77 -------------- cmd/command/buildcmd/build.go | 70 ------------ cmd/command/bundle/bundle.go | 106 ------------------ cmd/command/bundle/bundle_test.go | 171 ------------------------------ cmd/command/plural/plural.go | 6 -- pkg/client/build.go | 19 ---- 6 files changed, 449 deletions(-) delete mode 100644 cmd/command/bounce/bounce.go delete mode 100644 cmd/command/buildcmd/build.go delete mode 100644 cmd/command/bundle/bundle.go delete mode 100644 cmd/command/bundle/bundle_test.go diff --git a/cmd/command/bounce/bounce.go b/cmd/command/bounce/bounce.go deleted file mode 100644 index 84ca08c72..000000000 --- a/cmd/command/bounce/bounce.go +++ /dev/null @@ -1,77 +0,0 @@ -package bounce - -import ( - "os" - "path/filepath" - - "github.com/pluralsh/plural-cli/pkg/utils/git" - "github.com/pluralsh/plural-cli/pkg/utils/pathing" - "github.com/pluralsh/plural-cli/pkg/wkspace" - - "github.com/pluralsh/plural-cli/pkg/api" - "github.com/pluralsh/plural-cli/pkg/client" - "github.com/pluralsh/plural-cli/pkg/common" - "github.com/pluralsh/plural-cli/pkg/utils" - "github.com/urfave/cli" -) - -type Plural struct { - Plural client.Plural -} - -func Command(clients client.Plural) cli.Command { - p := Plural{ - Plural: clients, - } - return cli.Command{ - Name: "bounce", - Aliases: []string{"b"}, - Usage: "redeploys the charts in a workspace", - ArgsUsage: "{app}", - Action: common.LatestVersion(common.RequireArgs(common.InitKubeconfig(common.Owned(p.bounce)), []string{"{app}"})), - } -} - -func (p *Plural) bounce(c *cli.Context) error { - p.Plural.InitPluralClient() - repoRoot, err := git.Root() - if err != nil { - return err - } - repoName := c.Args().Get(0) - - if repoName != "" { - installation, err := p.Plural.GetInstallation(repoName) - if err != nil { - return api.GetErrorResponse(err, "GetInstallation") - } - return p.doBounce(repoRoot, installation) - } - - installations, err := client.GetSortedInstallations(p.Plural, repoName) - if err != nil { - return err - } - - for _, installation := range installations { - if err := p.doBounce(repoRoot, installation); err != nil { - return err - } - } - return nil -} - -func (p *Plural) doBounce(repoRoot string, installation *api.Installation) error { - p.Plural.InitPluralClient() - repoName := installation.Repository.Name - utils.Warn("bouncing deployments in %s\n", repoName) - workspace, err := wkspace.New(p.Plural.Client, installation) - if err != nil { - return err - } - - if err := os.Chdir(pathing.SanitizeFilepath(filepath.Join(repoRoot, repoName))); err != nil { - return err - } - return workspace.Bounce() -} diff --git a/cmd/command/buildcmd/build.go b/cmd/command/buildcmd/build.go deleted file mode 100644 index 72e1c29d5..000000000 --- a/cmd/command/buildcmd/build.go +++ /dev/null @@ -1,70 +0,0 @@ -package buildcmd - -import ( - "fmt" - - "github.com/pluralsh/plural-cli/cmd/command/crypto" - "github.com/pluralsh/plural-cli/pkg/api" - "github.com/pluralsh/plural-cli/pkg/client" - "github.com/pluralsh/plural-cli/pkg/common" - "github.com/pluralsh/plural-cli/pkg/utils" - "github.com/pluralsh/plural-cli/pkg/utils/errors" - "github.com/urfave/cli" -) - -type Plural struct { - Plural client.Plural -} - -func Command(clients client.Plural) cli.Command { - p := Plural{ - Plural: clients, - } - return cli.Command{ - Name: "build", - Aliases: []string{"bld"}, - Usage: "builds your workspace", - Flags: []cli.Flag{ - cli.StringFlag{ - Name: "only", - Usage: "repository to (re)build", - }, - cli.BoolFlag{ - Name: "force", - Usage: "force workspace to build even if remote is out of sync", - }, - }, - Action: common.Tracked(common.Rooted(common.LatestVersion(common.Owned(common.UpstreamSynced(p.build)))), "cli.build"), - } -} - -func (p *Plural) build(c *cli.Context) error { - p.Plural.InitPluralClient() - force := c.Bool("force") - if err := crypto.CheckGitCrypt(c); err != nil { - return errors.ErrorWrap(common.ErrNoGit, "Failed to scan your repo for secrets to encrypt them") - } - - if c.IsSet("only") { - installation, err := p.Plural.GetInstallation(c.String("only")) - if err != nil { - return api.GetErrorResponse(err, "GetInstallation") - } else if installation == nil { - return utils.HighlightError(fmt.Errorf("%s is not installed. Please install it with `plural bundle install`", c.String("only"))) - } - - return common.DoBuild(p.Plural.Client, installation, force) - } - - installations, err := client.GetSortedInstallations(p.Plural, "") - if err != nil { - return err - } - - for _, installation := range installations { - if err := common.DoBuild(p.Plural.Client, installation, force); err != nil { - return err - } - } - return nil -} diff --git a/cmd/command/bundle/bundle.go b/cmd/command/bundle/bundle.go deleted file mode 100644 index df0d1737a..000000000 --- a/cmd/command/bundle/bundle.go +++ /dev/null @@ -1,106 +0,0 @@ -package bundle - -import ( - "fmt" - - "github.com/pluralsh/plural-cli/pkg/client" - "github.com/pluralsh/plural-cli/pkg/common" - "github.com/urfave/cli" - - "github.com/pluralsh/plural-cli/pkg/api" - "github.com/pluralsh/plural-cli/pkg/bundle" - "github.com/pluralsh/plural-cli/pkg/manifest" - "github.com/pluralsh/plural-cli/pkg/utils" -) - -type Plural struct { - client.Plural -} - -func Command(clients client.Plural) cli.Command { - p := Plural{ - Plural: clients, - } - return cli.Command{ - Name: "bundle", - Usage: "Commands for installing and discovering installation bundles", - Subcommands: p.bundleCommands(), - } -} - -func (p *Plural) bundleCommands() []cli.Command { - return []cli.Command{ - { - Name: "list", - Usage: "lists bundles for a repository", - ArgsUsage: "{repo}", - Action: common.LatestVersion(common.Rooted(common.RequireArgs(p.bundleList, []string{"{repo}"}))), - }, - { - Name: "install", - Usage: "installs a bundle and writes the configuration to this installation's context", - ArgsUsage: "{repo} {bundle}", - Flags: []cli.Flag{ - cli.BoolFlag{ - Name: "refresh", - Usage: "re-enter the configuration for this bundle", - }, - }, - Action: common.Tracked(common.LatestVersion(common.Rooted(p.bundleInstall)), "bundle.install"), - }, - } -} - -func (p *Plural) bundleList(c *cli.Context) error { - repo := c.Args().Get(0) - p.InitPluralClient() - recipes, err := p.listRecipes(repo) - if err != nil { - return api.GetErrorResponse(err, "ListRecipes") - } - - headers := []string{"Name", "Description", "Provider", "Install Command"} - return utils.PrintTable(recipes, headers, func(recipe *api.Recipe) ([]string, error) { - return []string{recipe.Name, recipe.Description, recipe.Provider, fmt.Sprintf("plural bundle install %s %s", repo, recipe.Name)}, nil - }) -} - -func (p *Plural) bundleInstall(c *cli.Context) (err error) { - args := c.Args() - p.InitPluralClient() - repo := args.Get(0) - if repo == "" { - return fmt.Errorf("REPO argument required, try running `plural bundle install REPO` for the app you want to install") - } - - bdl := args.Get(1) - if bdl == "" { - recipes, err := p.listRecipes(args.Get(0)) - if err != nil { - return err - } - for _, recipe := range recipes { - if recipe.Primary { - bdl = recipe.Name - break - } - } - - if bdl == "" { - return fmt.Errorf("you need to specify a bundle name, run `plural bundle list %s` to find eligible bundles then `plural bundle install %s ` to install", repo, repo) - } - } - - err = bundle.Install(p.Client, repo, bdl, c.Bool("refresh")) - utils.Note("To edit the configuration you've just entered, edit the context.yaml file at the root of your repo, or run with the --refresh flag\n") - return -} - -func (p *Plural) listRecipes(repo string) (res []*api.Recipe, err error) { - man, err := manifest.FetchProject() - if err != nil { - return - } - res, err = p.ListRecipes(repo, man.Provider) - return -} diff --git a/cmd/command/bundle/bundle_test.go b/cmd/command/bundle/bundle_test.go deleted file mode 100644 index 3984f7bff..000000000 --- a/cmd/command/bundle/bundle_test.go +++ /dev/null @@ -1,171 +0,0 @@ -package bundle_test - -import ( - "os" - "testing" - - "github.com/pluralsh/plural-cli/pkg/manifest" - - pluralclient "github.com/pluralsh/plural-cli/pkg/client" - "github.com/pluralsh/plural-cli/pkg/common" - - "github.com/pluralsh/plural-cli/cmd/command/plural" - "github.com/pluralsh/plural-cli/pkg/api" - "github.com/pluralsh/plural-cli/pkg/test/mocks" - "github.com/pluralsh/plural-cli/pkg/utils/git" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/mock" - "gopkg.in/yaml.v2" -) - -func TestBundleList(t *testing.T) { - tests := []struct { - name string - args []string - recipe []*api.Recipe - expectedResponse string - }{ - { - name: `test "bundle list"`, - args: []string{plural.ApplicationName, "bundle", "list", "test"}, - recipe: []*api.Recipe{ - { - Id: "123", - Name: "test", - Provider: "aws", - Description: "test application", - }, - }, - expectedResponse: `+------+------------------+----------+--------------------------------+ -| NAME | DESCRIPTION | PROVIDER | INSTALL COMMAND | -+------+------------------+----------+--------------------------------+ -| test | test application | aws | plural bundle install test | -| | | | test | -+------+------------------+----------+--------------------------------+ -`, - }, - } - for _, test := range tests { - t.Run(test.name, func(t *testing.T) { - currentDir, err := os.Getwd() - assert.NoError(t, err) - dir, err := os.MkdirTemp("", "config") - assert.NoError(t, err) - defer func(path, currentDir string) { - _ = os.RemoveAll(path) - _ = os.Chdir(currentDir) - }(dir, currentDir) - err = os.Chdir(dir) - assert.NoError(t, err) - _, err = git.Init() - assert.NoError(t, err) - - data, err := yaml.Marshal(manifest.ProjectManifest{ - Cluster: "test", - Bucket: "test", - Project: "test", - Provider: "test", - Region: "test", - }) - assert.NoError(t, err) - err = os.WriteFile("workspace.yaml", data, os.FileMode(0755)) - assert.NoError(t, err) - - client := mocks.NewClient(t) - client.On("ListRecipes", mock.AnythingOfType("string"), mock.AnythingOfType("string")).Return(test.recipe, nil) - app := plural.CreateNewApp(&plural.Plural{Plural: pluralclient.Plural{Client: client}}) - app.HelpName = plural.ApplicationName - os.Args = test.args - res, err := common.CaptureStdout(app, os.Args) - assert.NoError(t, err) - - assert.Equal(t, test.expectedResponse, res) - }) - } -} - -func TestBundleInstallNoGitRootDirectory(t *testing.T) { - tests := []struct { - name string - args []string - expectedResponse string - }{ - { - name: `test "bundle install" when no root directory`, - args: []string{plural.ApplicationName, "bundle", "install", "repo-test", "bundle-test"}, - expectedResponse: `You must run this command at the root of your git repository`, - }, - } - for _, test := range tests { - t.Run(test.name, func(t *testing.T) { - client := mocks.NewClient(t) - app := plural.CreateNewApp(&plural.Plural{Plural: pluralclient.Plural{Client: client}}) - app.HelpName = plural.ApplicationName - os.Args = test.args - _, err := common.CaptureStdout(app, os.Args) - - assert.Error(t, err) - assert.Equal(t, test.expectedResponse, err.Error()) - }) - } -} - -func TestBundleInstall(t *testing.T) { - tests := []struct { - name string - args []string - recipe *api.Recipe - expectedResponse string - }{ - { - name: `test "bundle install"`, - args: []string{plural.ApplicationName, "bundle", "install", "repo-test", "bundle-test"}, - recipe: &api.Recipe{ - Id: "123", - Name: "test", - Provider: "aws", - Description: "test application", - RecipeSections: []*api.RecipeSection{ - { - Id: "456", - Repository: &api.Repository{ - Id: "", - Name: "bootstrap", - Description: "test bootstrap repo", - }, - RecipeItems: nil, - Configuration: nil, - }, - }, - }, - expectedResponse: "\x1b[2J\x1b[H test bootstrap repo\n", - }, - } - for _, test := range tests { - t.Run(test.name, func(t *testing.T) { - // create temp environment - currentDir, err := os.Getwd() - assert.NoError(t, err) - dir, err := os.MkdirTemp("", "config") - assert.NoError(t, err) - defer func(path, currentDir string) { - _ = os.RemoveAll(path) - _ = os.Chdir(currentDir) - }(dir, currentDir) - err = os.Chdir(dir) - assert.NoError(t, err) - _, err = git.Init() - assert.NoError(t, err) - - client := mocks.NewClient(t) - client.On("GetRecipe", mock.AnythingOfType("string"), mock.AnythingOfType("string")).Return(test.recipe, nil) - client.On("InstallRecipe", mock.AnythingOfType("string")).Return(nil) - app := plural.CreateNewApp(&plural.Plural{Plural: pluralclient.Plural{Client: client}}) - app.HelpName = plural.ApplicationName - os.Args = test.args - res, err := common.CaptureStdout(app, os.Args) - assert.NoError(t, err) - assert.Equal(t, test.expectedResponse, res) - }) - } -} diff --git a/cmd/command/plural/plural.go b/cmd/command/plural/plural.go index 7917c31c5..cf0b6d84a 100644 --- a/cmd/command/plural/plural.go +++ b/cmd/command/plural/plural.go @@ -4,9 +4,6 @@ import ( "github.com/pluralsh/plural-cli/cmd/command/ai" "github.com/pluralsh/plural-cli/cmd/command/api" "github.com/pluralsh/plural-cli/cmd/command/auth" - "github.com/pluralsh/plural-cli/cmd/command/bounce" - "github.com/pluralsh/plural-cli/cmd/command/buildcmd" - "github.com/pluralsh/plural-cli/cmd/command/bundle" "github.com/pluralsh/plural-cli/cmd/command/cd" "github.com/pluralsh/plural-cli/cmd/command/clone" "github.com/pluralsh/plural-cli/cmd/command/clusters" @@ -222,9 +219,6 @@ func CreateNewApp(plural *Plural) *cli.App { api.Command(plural.Plural), auth.Command(plural.Plural), ai.Command(plural.Plural), - bounce.Command(plural.Plural), - bundle.Command(plural.Plural), - buildcmd.Command(plural.Plural), cd.Command(plural.Plural, plural.HelmConfiguration), config.Command(), cryptocmd.Command(plural.Plural), diff --git a/pkg/client/build.go b/pkg/client/build.go index fc294a1ef..e38be2e4c 100644 --- a/pkg/client/build.go +++ b/pkg/client/build.go @@ -24,25 +24,6 @@ import ( const Bootstrap = "bootstrap" -func GetSortedInstallations(client Plural, repo string) ([]*api.Installation, error) { - client.InitPluralClient() - installations, err := client.GetInstallations() - if err != nil { - return installations, api.GetErrorResponse(err, "GetInstallations") - } - - if len(installations) == 0 { - return installations, fmt.Errorf("no installations present, run `plural bundle install ` to install your first app") - } - - sorted, err := wkspace.UntilRepo(client.Client, repo, installations) - if err != nil { - sorted = installations // we don't know all the dependencies yet - } - - return sorted, nil -} - func (p *Plural) Deploy(c *cli.Context) error { p.InitPluralClient() verbose := c.Bool("verbose") From 79056b0178e89e033a22d8da3e5c1418496b7396 Mon Sep 17 00:00:00 2001 From: Marcin Maciaszczyk Date: Wed, 4 Dec 2024 14:02:18 +0100 Subject: [PATCH 04/37] remove push and repos commands --- cmd/command/plural/plural.go | 5 - cmd/command/push/push.go | 186 --------------------------- cmd/command/repo/repos.go | 222 --------------------------------- cmd/command/repo/repos_test.go | 102 --------------- 4 files changed, 515 deletions(-) delete mode 100644 cmd/command/push/push.go delete mode 100644 cmd/command/repo/repos.go delete mode 100644 cmd/command/repo/repos_test.go diff --git a/cmd/command/plural/plural.go b/cmd/command/plural/plural.go index cf0b6d84a..8fab304d8 100644 --- a/cmd/command/plural/plural.go +++ b/cmd/command/plural/plural.go @@ -19,8 +19,6 @@ import ( "github.com/pluralsh/plural-cli/cmd/command/pr" "github.com/pluralsh/plural-cli/cmd/command/profile" "github.com/pluralsh/plural-cli/cmd/command/proxy" - "github.com/pluralsh/plural-cli/cmd/command/push" - "github.com/pluralsh/plural-cli/cmd/command/repo" "github.com/pluralsh/plural-cli/cmd/command/up" "github.com/pluralsh/plural-cli/cmd/command/upgrade" "github.com/pluralsh/plural-cli/cmd/command/version" @@ -230,9 +228,6 @@ func CreateNewApp(plural *Plural) *cli.App { profile.Command(), pr.Command(plural.Plural), proxy.Command(plural.Plural), - push.Command(plural.Plural), - repo.Command(plural.Plural), - repo.APICommand(plural.Plural), log.Command(plural.Plural), info.Command(plural.Plural), cmdinit.Command(plural.Plural), diff --git a/cmd/command/push/push.go b/cmd/command/push/push.go deleted file mode 100644 index 7533a880b..000000000 --- a/cmd/command/push/push.go +++ /dev/null @@ -1,186 +0,0 @@ -package push - -import ( - "fmt" - "os" - "path/filepath" - - "github.com/pluralsh/plural-cli/pkg/client" - - "github.com/pluralsh/plural-cli/pkg/common" - - "github.com/pluralsh/plural-cli/pkg/api" - "github.com/pluralsh/plural-cli/pkg/config" - "github.com/pluralsh/plural-cli/pkg/helm" - scftmpl "github.com/pluralsh/plural-cli/pkg/scaffold/template" - "github.com/pluralsh/plural-cli/pkg/utils" - "github.com/pluralsh/plural-cli/pkg/utils/pathing" - "github.com/urfave/cli" - "sigs.k8s.io/yaml" -) - -type Plural struct { - client.Plural -} - -func Command(clients client.Plural) cli.Command { - p := Plural{ - Plural: clients, - } - return cli.Command{ - Name: "push", - Usage: "utilities for pushing tf or helm packages", - Subcommands: p.pushCommands(), - Category: "Publishing", - } -} - -func (p *Plural) pushCommands() []cli.Command { - return []cli.Command{ - { - Name: "terraform", - Usage: "pushes a terraform module", - ArgsUsage: "{path-to-module} {repo}", - Action: common.LatestVersion(p.handleTerraformUpload), - }, - { - Name: "helm", - Usage: "pushes a helm chart", - ArgsUsage: "{path-to-chart} {repo}", - Action: common.LatestVersion(handleHelmUpload), - }, - { - Name: "recipe", - Usage: "pushes a recipe", - ArgsUsage: "{path-to-recipe} {repo}", - Action: common.LatestVersion(p.handleRecipeUpload), - }, - { - Name: "artifact", - Usage: "creates an artifact for the repo", - ArgsUsage: "{path-to-def} {repo}", - Action: common.LatestVersion(p.handleArtifact), - Flags: []cli.Flag{ - cli.StringFlag{ - Name: "platform", - Value: "mac", - Usage: "name of the OS this binary is built for", - }, - cli.StringFlag{ - Name: "arch", - Value: "amd64", - Usage: "machine architecture the binary is compatible with", - }, - }, - }, - { - Name: "crd", - Usage: "registers a new crd for a chart", - ArgsUsage: "{path-to-def} {repo} {chart}", - Action: common.LatestVersion(p.createCrd), - }, - } -} - -func (p *Plural) handleTerraformUpload(c *cli.Context) error { - p.InitPluralClient() - _, err := p.UploadTerraform(c.Args().Get(0), c.Args().Get(1)) - return api.GetErrorResponse(err, "UploadTerraform") -} - -func handleHelmUpload(c *cli.Context) error { - conf := config.Read() - pth, repo := c.Args().Get(0), c.Args().Get(1) - - f, err := buildValuesFromTemplate(pth) - if err != nil { - return err - } - defer func(name string) { - _ = os.Remove(name) - - }(f.Name()) - - utils.Highlight("linting helm: ") - values, err := getValues(f.Name()) - if err != nil { - return err - } - if err := helm.Lint(pth, "default", values); err != nil { - return err - } - - cmUrl := fmt.Sprintf("%s/cm/%s", conf.BaseUrl(), repo) - return helm.Push(pth, cmUrl) -} - -func buildValuesFromTemplate(pth string) (f *os.File, err error) { - templatePath := pathing.SanitizeFilepath(filepath.Join(pth, "values.yaml.tpl")) - _, err = utils.ReadFile(templatePath) - if os.IsNotExist(err) { - templatePath = pathing.SanitizeFilepath(filepath.Join(pth, "values.yaml.lua")) - _, err := utils.ReadFile(templatePath) - if err != nil { - return nil, err - } - - } - - return scftmpl.TmpValuesFile(templatePath) -} - -func (p *Plural) handleRecipeUpload(c *cli.Context) error { - p.InitPluralClient() - fullPath, _ := filepath.Abs(c.Args().Get(0)) - contents, err := os.ReadFile(fullPath) - if err != nil { - return err - } - - recipeInput, err := api.ConstructRecipe(contents) - if err != nil { - return err - } - - _, err = p.CreateRecipe(c.Args().Get(1), recipeInput) - return api.GetErrorResponse(err, "CreateRecipe") -} - -func (p *Plural) handleArtifact(c *cli.Context) error { - p.InitPluralClient() - fullPath, _ := filepath.Abs(c.Args().Get(0)) - contents, err := os.ReadFile(fullPath) - if err != nil { - return err - } - - input, err := api.ConstructArtifactAttributes(contents) - if err != nil { - return err - } - input.Platform = c.String("platform") - input.Arch = c.String("arch") - _, err = p.CreateArtifact(c.Args().Get(1), input) - return api.GetErrorResponse(err, "CreateArtifact") -} - -func (p *Plural) createCrd(c *cli.Context) error { - p.InitPluralClient() - fullPath, _ := filepath.Abs(c.Args().Get(0)) - repo := c.Args().Get(1) - chart := c.Args().Get(2) - err := p.CreateCrd(repo, chart, fullPath) - return api.GetErrorResponse(err, "CreateCrd") -} - -func getValues(path string) (map[string]interface{}, error) { - values := make(map[string]interface{}) - valsContent, err := os.ReadFile(path) - if err != nil { - return nil, err - } - if err := yaml.Unmarshal(valsContent, &values); err != nil { - return nil, err - } - return values, nil -} diff --git a/cmd/command/repo/repos.go b/cmd/command/repo/repos.go deleted file mode 100644 index b34b52b77..000000000 --- a/cmd/command/repo/repos.go +++ /dev/null @@ -1,222 +0,0 @@ -package repo - -import ( - "fmt" - "strings" - - "github.com/pluralsh/plural-cli/pkg/client" - - "github.com/pluralsh/plural-cli/pkg/common" - - "github.com/urfave/cli" - - "github.com/pluralsh/plural-cli/pkg/api" - "github.com/pluralsh/plural-cli/pkg/bundle" - "github.com/pluralsh/plural-cli/pkg/config" - "github.com/pluralsh/plural-cli/pkg/format" - "github.com/pluralsh/plural-cli/pkg/manifest" - "github.com/pluralsh/plural-cli/pkg/utils" -) - -type Plural struct { - client.Plural -} - -func Command(clients client.Plural) cli.Command { - p := Plural{ - Plural: clients, - } - return cli.Command{ - Name: "repos", - Usage: "view and manage plural repositories", - Subcommands: p.reposCommands(), - Category: "API", - } -} - -func APICommand(clients client.Plural) cli.Command { - p := Plural{ - Plural: clients, - } - return cli.Command{ - Name: "apps", - Usage: "view and manage plural repositories", - Subcommands: p.reposCommands(), - Category: "API", - } -} - -func (p *Plural) reposCommands() []cli.Command { - return []cli.Command{ - { - Name: "unlock", - Usage: "unlocks installations in a repo that have breaking changes", - ArgsUsage: "{app}", - Action: common.LatestVersion(common.RequireArgs(p.handleUnlockRepo, []string{"{app}"})), - }, - { - Name: "release", - Usage: "tags the installations in the current cluster with the given release channels", - ArgsUsage: "{app}", - Flags: []cli.Flag{ - cli.StringSliceFlag{ - Name: "tag", - Usage: "tag name for a given release channel, eg stable, warm, dev, prod", - }, - }, - Action: common.LatestVersion(common.RequireArgs(p.handleRelease, []string{"{app}"})), - }, - { - Name: "reinstall", - Usage: "reinstalls all bundles from a previous installation", - Flags: []cli.Flag{ - cli.BoolFlag{ - Name: "refresh", - Usage: "re-enter the configuration for all bundles", - }, - }, - Action: p.handleReinstall, - }, - { - Name: "reset", - Usage: "eliminates your current plural installation set, to change cloud provider or eject from plural", - Action: common.LatestVersion(p.handleResetInstallations), - }, - { - Name: "synced", - Usage: "marks installations in this repo as being synced", - Action: p.handleMarkSynced, - }, - { - Name: "uninstall", - Usage: "uninstall an app from the plural api", - ArgsUsage: "{app}", - Action: common.LatestVersion(common.RequireArgs(p.handleUninstall, []string{"{app}"})), - }, - { - Name: "list", - Usage: "list available repositories to install", - Flags: []cli.Flag{ - cli.StringFlag{ - Name: "query", - Usage: "string to search by", - }, - cli.StringFlag{ - Name: "format", - Usage: "format to print the repositories out, eg csv or default is table", - }, - }, - Action: common.LatestVersion(p.handleListRepositories), - }, - } -} - -func (p *Plural) handleRelease(c *cli.Context) error { - p.InitPluralClient() - app := c.Args().First() - tags := c.StringSlice("tag") - err := p.Release(c.Args().First(), c.StringSlice("tag")) - if err != nil { - return api.GetErrorResponse(err, "Release") - } - - utils.Success("Published release for %s to channels [%s]\n", app, strings.Join(tags, ", ")) - return nil -} - -func (p *Plural) handleUnlockRepo(c *cli.Context) error { - p.InitPluralClient() - err := p.UnlockRepository(c.Args().First()) - return api.GetErrorResponse(err, "UnlockRepository") -} - -func (p *Plural) handleUninstall(c *cli.Context) error { - p.InitPluralClient() - inst, err := p.GetInstallation(c.Args().First()) - if err != nil { - return api.GetErrorResponse(err, "GetInstallation") - } - - if inst == nil { - return fmt.Errorf("%s already uninstalled", c.Args().First()) - } - err = p.DeleteInstallation(inst.Id) - return api.GetErrorResponse(err, "DeleteInstallation") -} - -func (p *Plural) handleListRepositories(c *cli.Context) error { - p.InitPluralClient() - repos, err := p.ListRepositories(c.String("query")) - if err != nil { - return api.GetErrorResponse(err, "ListRepositories") - } - - addIcon := c.String("format") == "csv" - - formatter := format.New(format.FormatType(c.String("format"))) - header := []string{"Repo", "Description", "Publisher", "Bundles"} - if addIcon { - header = append(header, "Icon") - } - - formatter.Header(header) - for _, repo := range repos { - recipeNames := utils.Map(repo.Recipes, func(recipe *api.Recipe) string { - return recipe.Name - }) - - line := []string{repo.Name, repo.Description, repo.Publisher.Name, strings.Join(recipeNames, ", ")} - if addIcon { - line = append(line, repo.Icon) - } - if err := formatter.Write(line); err != nil { - return err - } - } - - if err := formatter.Flush(); err != nil { - return err - } - return nil -} - -func (p *Plural) handleReinstall(c *cli.Context) error { - p.InitPluralClient() - ctx, err := manifest.FetchContext() - if err != nil { - return err - } - - for _, b := range ctx.Bundles { - if err := bundle.Install(p.Client, b.Repository, b.Name, c.Bool("refresh")); err != nil { - return err - } - - fmt.Println("Moving to the next bundle....") - } - - return nil -} - -func (p *Plural) handleMarkSynced(c *cli.Context) error { - p.InitPluralClient() - return p.MarkSynced(c.Args().Get(0)) -} - -func (p *Plural) handleResetInstallations(c *cli.Context) error { - p.InitPluralClient() - conf := config.Read() - if !common.Confirm(fmt.Sprintf("Are you sure you want to reset installations for %s? This will also wipe all oidc providers and any other associated state in the plural api", conf.Email), "PLURAL_REPOS_RESET_CONFIRM") { - return nil - } - - count, err := p.ResetInstallations() - if err != nil { - return api.GetErrorResponse(err, "ResetInstallations") - } - - fmt.Printf("Deleted %d installations in app.plural.sh\n", count) - fmt.Println("(you can recreate these at any time and any running infrastructure is not affected, plural will simply no longer deliver upgrades)") - utils.Note("Now run `plural bundle install ` to install a new app \n") - return nil -} diff --git a/cmd/command/repo/repos_test.go b/cmd/command/repo/repos_test.go deleted file mode 100644 index c2dfa965e..000000000 --- a/cmd/command/repo/repos_test.go +++ /dev/null @@ -1,102 +0,0 @@ -package repo_test - -import ( - "os" - "testing" - - clientcmd "github.com/pluralsh/plural-cli/pkg/client" - - "github.com/pluralsh/plural-cli/pkg/common" - - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/mock" - - "github.com/pluralsh/plural-cli/cmd/command/plural" - "github.com/pluralsh/plural-cli/pkg/api" - "github.com/pluralsh/plural-cli/pkg/test/mocks" -) - -func TestListRepositories(t *testing.T) { - tests := []struct { - name string - args []string - repos []*api.Repository - expectedResponse string - }{ - { - name: `test "repos list"`, - args: []string{plural.ApplicationName, "repos", "list"}, - repos: []*api.Repository{ - { - Id: "123", - Name: "test", - Description: "test application", - Publisher: &api.Publisher{ - Id: "456", - Name: "test", - }, - Recipes: []*api.Recipe{ - { - Id: "789", - Name: "r1", - }, - { - Id: "101", - Name: "r2", - }, - }, - }, - }, - expectedResponse: `+------+------------------+-----------+---------+ -| REPO | DESCRIPTION | PUBLISHER | BUNDLES | -+------+------------------+-----------+---------+ -| test | test application | test | r1, r2 | -+------+------------------+-----------+---------+ -`, - }, - } - for _, test := range tests { - t.Run(test.name, func(t *testing.T) { - client := mocks.NewClient(t) - client.On("ListRepositories", mock.AnythingOfType("string")).Return(test.repos, nil) - app := plural.CreateNewApp(&plural.Plural{Plural: clientcmd.Plural{ - Client: client, - }}) - app.HelpName = plural.ApplicationName - os.Args = test.args - res, err := common.CaptureStdout(app, os.Args) - assert.NoError(t, err) - assert.Equal(t, test.expectedResponse, res) - }) - } -} - -// func TestResetRepositories(t *testing.T) { -// tests := []struct { -// name string -// args []string -// count int -// expectedResponse string -// }{ -// { -// name: `test "repos reset"`, -// args: []string{plural.ApplicationName, "repos", "reset"}, -// count: 5, -// expectedResponse: `Deleted 5 installations in app.plural.sh -// (you can recreate these at any time and any running infrastructure is not affected, plural will simply no longer deliver upgrades) -// `, -// }, -// } -// for _, test := range tests { -// t.Run(test.name, func(t *testing.T) { -// client := mocks.NewClient(t) -// client.On("ResetInstallations").Return(test.count, nil) -// app := plural.CreateNewApp(&plural.Plural{Client: client}) -// app.HelpName = plural.ApplicationName -// os.Args = test.args -// res, err := captureStdout(app, os.Args) -// assert.NoError(t, err) -// assert.Equal(t, test.expectedResponse, res) -// }) -// } -// } From f1d80ffa0ab9dd3dfe6c2d8cb692b86e6865a7fa Mon Sep 17 00:00:00 2001 From: Marcin Maciaszczyk Date: Wed, 4 Dec 2024 14:06:12 +0100 Subject: [PATCH 05/37] remove link, output, packages commands --- cmd/command/link/link.go | 80 ------------- cmd/command/output/output.go | 55 --------- cmd/command/packages/packages.go | 200 ------------------------------- cmd/command/plural/plural.go | 5 - 4 files changed, 340 deletions(-) delete mode 100644 cmd/command/link/link.go delete mode 100644 cmd/command/output/output.go delete mode 100644 cmd/command/packages/packages.go diff --git a/cmd/command/link/link.go b/cmd/command/link/link.go deleted file mode 100644 index 09688848a..000000000 --- a/cmd/command/link/link.go +++ /dev/null @@ -1,80 +0,0 @@ -package link - -import ( - "path/filepath" - - "github.com/pluralsh/plural-cli/pkg/manifest" - "github.com/urfave/cli" -) - -func Commands() []cli.Command { - return []cli.Command{ - { - Name: "link", - Usage: "links a local package into an installation repo", - ArgsUsage: "{tool} {repo}", - Action: handleLink, - Flags: []cli.Flag{ - cli.StringFlag{ - Name: "name, n", - Usage: "the name of the artifact to link", - }, - cli.StringFlag{ - Name: "path, f", - Usage: "local path to that artifact (can be relative)", - }, - }, - }, - { - Name: "unlink", - Usage: "unlinks a linked package", - ArgsUsage: "{repo} {tool} {name}", - Action: handleUnlink, - }, - } -} - -func handleLink(c *cli.Context) error { - tool, repo := c.Args().Get(0), c.Args().Get(1) - name, path := c.String("name"), c.String("path") - - if name == "" { - name = filepath.Base(path) - } - - manPath, err := manifest.ManifestPath(repo) - if err != nil { - return err - } - - man, err := manifest.Read(manPath) - if err != nil { - return err - } - - man.AddLink(tool, name, path) - - return man.Write(manPath) -} - -func handleUnlink(c *cli.Context) error { - repo, tool := c.Args().Get(0), c.Args().Get(1) - - manPath, err := manifest.ManifestPath(repo) - if err != nil { - return err - } - - man, err := manifest.Read(manPath) - if err != nil { - return err - } - - if tool == "all" { - man.UnlinkAll() - } else { - man.Unlink(tool, c.Args().Get(2)) - } - - return man.Write(manPath) -} diff --git a/cmd/command/output/output.go b/cmd/command/output/output.go deleted file mode 100644 index 3b6c543b9..000000000 --- a/cmd/command/output/output.go +++ /dev/null @@ -1,55 +0,0 @@ -package output - -import ( - "path/filepath" - - "github.com/pluralsh/plural-cli/pkg/common" - - "github.com/pluralsh/plural-cli/pkg/output" - "github.com/pluralsh/plural-cli/pkg/utils" - "github.com/pluralsh/plural-cli/pkg/utils/pathing" - "github.com/urfave/cli" -) - -func Command() cli.Command { - return cli.Command{ - Name: "output", - Usage: "Commands for generating outputs from supported tools", - Subcommands: outputCommands(), - Category: "Workspace", - } -} - -func outputCommands() []cli.Command { - return []cli.Command{ - { - Name: "terraform", - Usage: "generates terraform output", - ArgsUsage: "{repo}", - Action: common.LatestVersion(common.RequireArgs(handleTerraformOutput, []string{"{repo}"})), - }, - } -} - -func outputPath(root, app string) string { - return pathing.SanitizeFilepath(filepath.Join(root, app, "output.yaml")) -} - -func handleTerraformOutput(c *cli.Context) (err error) { - root, _ := utils.ProjectRoot() - app := c.Args().Get(0) - path := outputPath(root, app) - out, err := output.Read(path) - if err != nil { - out = output.New() - } - - tfOut, err := output.TerraformOutput(pathing.SanitizeFilepath(filepath.Join(root, app, "terraform"))) - if err != nil { - return - } - - out.Terraform = tfOut - err = out.Save(app, path) - return -} diff --git a/cmd/command/packages/packages.go b/cmd/command/packages/packages.go deleted file mode 100644 index e39a13f64..000000000 --- a/cmd/command/packages/packages.go +++ /dev/null @@ -1,200 +0,0 @@ -package packages - -import ( - "fmt" - "os" - - "github.com/pluralsh/plural-cli/pkg/client" - - "github.com/pluralsh/plural-cli/pkg/common" - - "github.com/pluralsh/plural-cli/pkg/api" - - "github.com/olekukonko/tablewriter" - "github.com/urfave/cli" - - "github.com/pluralsh/plural-cli/pkg/utils" - "github.com/pluralsh/plural-cli/pkg/wkspace" -) - -type Plural struct { - client.Plural -} - -func Command(clients client.Plural) cli.Command { - p := Plural{ - Plural: clients, - } - return cli.Command{ - Name: "packages", - Usage: "Commands for managing your installed packages", - Subcommands: p.packagesCommands(), - } -} - -func (p *Plural) packagesCommands() []cli.Command { - return []cli.Command{ - { - Name: "install", - Usage: "installs a package at a specific version", - ArgsUsage: "{helm|terraform} {repo} {name} {version}", - Action: common.Affirmed(common.RequireArgs(p.installPackage, []string{"{type}", "{repo}", "{name}", "{version}"}), "Are you sure you want to install this package?", "PLURAL_PACKAGES_INSTALL"), - }, - { - Name: "uninstall", - Usage: "uninstall a helm or terraform package", - ArgsUsage: "{helm|terraform} {repo} {name}", - Action: common.LatestVersion(common.Affirmed(common.RequireArgs(common.Rooted(p.uninstallPackage), []string{"{type}", "{repo}", "{name}"}), "Are you sure you want to uninstall this package?", "PLURAL_PACKAGES_UNINSTALL")), - }, - { - Name: "list", - Usage: "lists the packages installed for a given repo", - ArgsUsage: "{repo}", - Action: common.LatestVersion(common.RequireArgs(common.Rooted(p.listPackages), []string{"{repo}"})), - }, - { - Name: "show", - Usage: "shows version information for packages within a plural repo", - Subcommands: p.showCommands(), - }, - } -} - -func (p *Plural) showCommands() []cli.Command { - return []cli.Command{ - { - Name: "helm", - Usage: "list versions for a helm chart", - ArgsUsage: "{repo} {name}", - Action: common.RequireArgs(p.showHelm, []string{"{repo}", "{name}"}), - }, - { - Name: "terraform", - Usage: "list versions for a terraform module", - ArgsUsage: "{repo} {name}", - Action: common.RequireArgs(p.showTerraform, []string{"{repo}", "{name}"}), - }, - } -} - -func (p *Plural) installPackage(c *cli.Context) error { - p.InitPluralClient() - tp, repo, name, vsn := c.Args().Get(0), c.Args().Get(1), c.Args().Get(2), c.Args().Get(3) - if err := p.Client.InstallVersion(tp, repo, name, vsn); err != nil { - return err - } - - utils.Success("Successfully installed %s %s version %s in %s\n", tp, name, vsn, repo) - utils.Highlight("To apply the module in your cluster, you'll need to run `plural build --only %s && plural deploy", repo) - return nil -} - -func (p *Plural) showHelm(c *cli.Context) error { - p.InitPluralClient() - repo, name := c.Args().Get(0), c.Args().Get(1) - chart, err := api.FindChart(p.Client, repo, name) - if err != nil { - return err - } - - vsns, err := p.Client.GetVersions(chart.Id) - if err != nil { - return err - } - - header := []string{"Name", "Version", "App Version", "Created"} - return utils.PrintTable(vsns, header, func(vsn *api.Version) ([]string, error) { - appVsn := "" - if app, ok := vsn.Helm["appVersion"]; ok { - if v, ok := app.(string); ok { - appVsn = v - } - } - return []string{chart.Name, vsn.Version, appVsn, vsn.InsertedAt}, nil - }) -} - -func (p *Plural) showTerraform(c *cli.Context) error { - p.InitPluralClient() - repo, name := c.Args().Get(0), c.Args().Get(1) - chart, err := api.FindTerraform(p.Client, repo, name) - if err != nil { - return err - } - - vsns, err := p.Client.GetTerraformVersions(chart.Id) - if err != nil { - return err - } - - header := []string{"Name", "Version", "Created"} - return utils.PrintTable(vsns, header, func(vsn *api.Version) ([]string, error) { - return []string{chart.Name, vsn.Version, vsn.InsertedAt}, nil - }) -} - -func (p *Plural) listPackages(c *cli.Context) error { - p.InitPluralClient() - repo := c.Args().Get(0) - space, err := p.getWorkspace(repo) - if err != nil { - return err - } - - table := tablewriter.NewWriter(os.Stdout) - table.SetHeader([]string{"Type", "Name", "Version"}) - for _, inst := range space.Terraform { - table.Append([]string{"terraform", inst.Terraform.Name, inst.Version.Version}) - } - - for _, inst := range space.Charts { - table.Append([]string{"helm", inst.Chart.Name, inst.Version.Version}) - } - - table.Render() - return nil -} - -func (p *Plural) uninstallPackage(c *cli.Context) error { - p.InitPluralClient() - args := c.Args() - t, repo, name := args.Get(0), args.Get(1), args.Get(2) - - space, err := p.getWorkspace(repo) - if err != nil { - return err - } - - if t == "terraform" { - for _, inst := range space.Terraform { - if inst.Terraform.Name == name { - return api.GetErrorResponse(p.Client.UninstallTerraform(inst.Id), "UninstallTerraform") - } - } - } - - if t == "helm" { - for _, inst := range space.Charts { - if inst.Chart.Name == name { - return api.GetErrorResponse(p.Client.UninstallChart(inst.Id), "UninstallChart") - } - } - } - - utils.Warn("Could not find %s package %s in %s", t, name, repo) - return nil -} - -func (p *Plural) getWorkspace(repo string) (*wkspace.Workspace, error) { - p.InitPluralClient() - inst, err := p.Client.GetInstallation(repo) - if err != nil { - return nil, api.GetErrorResponse(err, "GetInstallation") - } - - if inst == nil { - return nil, fmt.Errorf("no installation found for package: %s", repo) - } - - return wkspace.New(p.Client, inst) -} diff --git a/cmd/command/plural/plural.go b/cmd/command/plural/plural.go index 8fab304d8..6542b7b10 100644 --- a/cmd/command/plural/plural.go +++ b/cmd/command/plural/plural.go @@ -12,10 +12,8 @@ import ( "github.com/pluralsh/plural-cli/cmd/command/down" "github.com/pluralsh/plural-cli/cmd/command/info" cmdinit "github.com/pluralsh/plural-cli/cmd/command/init" - "github.com/pluralsh/plural-cli/cmd/command/link" "github.com/pluralsh/plural-cli/cmd/command/log" "github.com/pluralsh/plural-cli/cmd/command/ops" - "github.com/pluralsh/plural-cli/cmd/command/output" "github.com/pluralsh/plural-cli/cmd/command/pr" "github.com/pluralsh/plural-cli/cmd/command/profile" "github.com/pluralsh/plural-cli/cmd/command/proxy" @@ -223,7 +221,6 @@ func CreateNewApp(plural *Plural) *cli.App { clusters.Command(plural.Plural), clone.Command(), down.Command(), - output.Command(), ops.Command(plural.Plural), profile.Command(), pr.Command(plural.Plural), @@ -239,8 +236,6 @@ func CreateNewApp(plural *Plural) *cli.App { } commands = append(commands, plural.getCommands()...) app.Commands = commands - links := link.Commands() - app.Commands = append(app.Commands, links...) return app } From 765c830d354e13038358c1aace5042cc0d084029 Mon Sep 17 00:00:00 2001 From: Marcin Maciaszczyk Date: Wed, 4 Dec 2024 14:13:59 +0100 Subject: [PATCH 06/37] remove info and upgrade commands --- cmd/command/info/info.go | 40 ---------------------- cmd/command/plural/plural.go | 4 --- cmd/command/upgrade/upgrade.go | 61 ---------------------------------- 3 files changed, 105 deletions(-) delete mode 100644 cmd/command/info/info.go delete mode 100644 cmd/command/upgrade/upgrade.go diff --git a/cmd/command/info/info.go b/cmd/command/info/info.go deleted file mode 100644 index f3b30926b..000000000 --- a/cmd/command/info/info.go +++ /dev/null @@ -1,40 +0,0 @@ -package info - -import ( - "fmt" - - "github.com/pluralsh/plural-cli/pkg/api" - "github.com/pluralsh/plural-cli/pkg/client" - "github.com/pluralsh/plural-cli/pkg/common" - "github.com/pluralsh/plural-cli/pkg/scaffold" - "github.com/urfave/cli" -) - -type Plural struct { - client.Plural -} - -func Command(clients client.Plural) cli.Command { - p := Plural{ - Plural: clients, - } - return cli.Command{ - Name: "info", - Usage: "Get information for your installation of APP", - ArgsUsage: "{app}", - Action: common.LatestVersion(common.RequireArgs(common.Owned(common.Rooted(p.info)), []string{"{app}"})), - } -} -func (p *Plural) info(c *cli.Context) error { - p.InitPluralClient() - repo := c.Args().Get(0) - installation, err := p.GetInstallation(repo) - if err != nil { - return api.GetErrorResponse(err, "GetInstallation") - } - if installation == nil { - return fmt.Errorf("You have not installed %s", repo) - } - - return scaffold.Notes(installation) -} diff --git a/cmd/command/plural/plural.go b/cmd/command/plural/plural.go index 6542b7b10..0673fb4ad 100644 --- a/cmd/command/plural/plural.go +++ b/cmd/command/plural/plural.go @@ -10,7 +10,6 @@ import ( "github.com/pluralsh/plural-cli/cmd/command/config" cryptocmd "github.com/pluralsh/plural-cli/cmd/command/crypto" "github.com/pluralsh/plural-cli/cmd/command/down" - "github.com/pluralsh/plural-cli/cmd/command/info" cmdinit "github.com/pluralsh/plural-cli/cmd/command/init" "github.com/pluralsh/plural-cli/cmd/command/log" "github.com/pluralsh/plural-cli/cmd/command/ops" @@ -18,7 +17,6 @@ import ( "github.com/pluralsh/plural-cli/cmd/command/profile" "github.com/pluralsh/plural-cli/cmd/command/proxy" "github.com/pluralsh/plural-cli/cmd/command/up" - "github.com/pluralsh/plural-cli/cmd/command/upgrade" "github.com/pluralsh/plural-cli/cmd/command/version" "github.com/pluralsh/plural-cli/cmd/command/vpn" "github.com/pluralsh/plural-cli/cmd/command/workspace" @@ -226,10 +224,8 @@ func CreateNewApp(plural *Plural) *cli.App { pr.Command(plural.Plural), proxy.Command(plural.Plural), log.Command(plural.Plural), - info.Command(plural.Plural), cmdinit.Command(plural.Plural), up.Command(plural.Plural), - upgrade.Command(plural.Plural), workspace.Command(plural.Plural, plural.HelmConfiguration), vpn.Command(plural.Plural), version.Command(), diff --git a/cmd/command/upgrade/upgrade.go b/cmd/command/upgrade/upgrade.go deleted file mode 100644 index 5ea5c7d5e..000000000 --- a/cmd/command/upgrade/upgrade.go +++ /dev/null @@ -1,61 +0,0 @@ -package upgrade - -import ( - "io" - "os" - - "github.com/pluralsh/plural-cli/pkg/client" - "github.com/pluralsh/plural-cli/pkg/common" - - "github.com/pluralsh/plural-cli/pkg/api" - "github.com/urfave/cli" -) - -type Plural struct { - client.Plural -} - -func Command(clients client.Plural) cli.Command { - p := Plural{ - Plural: clients, - } - return cli.Command{ - Name: "upgrade", - Usage: "creates an upgrade in the upgrade queue QUEUE for application REPO", - ArgsUsage: "{queue} {repo}", - Flags: []cli.Flag{ - cli.StringFlag{ - Name: "f", - Usage: "file containing upgrade contents, use - for stdin", - }, - }, - Action: common.LatestVersion(common.RequireArgs(p.handleUpgrade, []string{"{queue}", "{repo}"})), - } -} - -func (p *Plural) handleUpgrade(c *cli.Context) (err error) { - p.InitPluralClient() - queue, repo := c.Args().Get(0), c.Args().Get(1) - f := os.Stdin - fname := c.String("f") - if fname != "-" && fname != "" { - f, err = os.Open(fname) - if err != nil { - return - } - defer f.Close() - } - - contents, err := io.ReadAll(f) - if err != nil { - return - } - - attrs, err := api.ConstructUpgradeAttributes(contents) - if err != nil { - return - } - - err = p.CreateUpgrade(queue, repo, attrs) - return api.GetErrorResponse(err, "CreateUpgrade") -} From 293af745490599deca9318dd00bff87fe0951c62 Mon Sep 17 00:00:00 2001 From: Marcin Maciaszczyk Date: Wed, 4 Dec 2024 14:16:43 +0100 Subject: [PATCH 07/37] remove log and proxy commands --- cmd/command/log/logs.go | 66 ------------------------------ cmd/command/log/logs_test.go | 58 -------------------------- cmd/command/plural/plural.go | 2 - cmd/command/proxy/proxy.go | 66 ------------------------------ cmd/command/proxy/proxy_test.go | 72 --------------------------------- 5 files changed, 264 deletions(-) delete mode 100644 cmd/command/log/logs.go delete mode 100644 cmd/command/log/logs_test.go delete mode 100644 cmd/command/proxy/proxy.go delete mode 100644 cmd/command/proxy/proxy_test.go diff --git a/cmd/command/log/logs.go b/cmd/command/log/logs.go deleted file mode 100644 index 03f12bdd6..000000000 --- a/cmd/command/log/logs.go +++ /dev/null @@ -1,66 +0,0 @@ -package log - -import ( - "github.com/pluralsh/plural-cli/pkg/client" - "github.com/pluralsh/plural-cli/pkg/common" - "github.com/pluralsh/plural-cli/pkg/config" - "github.com/pluralsh/plural-cli/pkg/logs" - "github.com/urfave/cli" -) - -type Plural struct { - client.Plural -} - -func Command(clients client.Plural) cli.Command { - p := Plural{ - Plural: clients, - } - return cli.Command{ - Name: "logs", - Usage: "Commands for tailing logs for specific apps", - Subcommands: p.logsCommands(), - Category: "Debugging", - } -} - -func (p *Plural) logsCommands() []cli.Command { - return []cli.Command{ - { - Name: "list", - Usage: "lists log tails for a repo", - ArgsUsage: "{repo}", - Action: common.LatestVersion(common.InitKubeconfig(common.RequireArgs(p.handleLogsList, []string{"{repo}"}))), - }, - { - Name: "tail", - Usage: "execs the specific logtail", - ArgsUsage: "{repo} {name}", - Action: common.LatestVersion(common.InitKubeconfig(common.RequireArgs(p.handleLogTail, []string{"{repo}", "{name}"}))), - }, - } -} - -func (p *Plural) handleLogsList(c *cli.Context) error { - repo := c.Args().Get(0) - conf := config.Read() - if err := p.InitKube(); err != nil { - return err - } - tails, err := logs.List(p.Kube, conf.Namespace(repo)) - if err != nil { - return err - } - - return logs.Print(tails) -} - -func (p *Plural) handleLogTail(c *cli.Context) error { - repo := c.Args().Get(0) - name := c.Args().Get(1) - conf := config.Read() - if err := p.InitKube(); err != nil { - return err - } - return logs.Tail(p.Kube, conf.Namespace(repo), name) -} diff --git a/cmd/command/log/logs_test.go b/cmd/command/log/logs_test.go deleted file mode 100644 index 4ef6cde22..000000000 --- a/cmd/command/log/logs_test.go +++ /dev/null @@ -1,58 +0,0 @@ -package log_test - -import ( - "os" - "testing" - - pluralclient "github.com/pluralsh/plural-cli/pkg/client" - "github.com/pluralsh/plural-cli/pkg/common" - - "github.com/pluralsh/plural-cli/cmd/command/plural" - "github.com/pluralsh/plural-cli/pkg/test/mocks" - "github.com/pluralsh/plural-operator/apis/platform/v1alpha1" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/mock" -) - -func TestLogsList(t *testing.T) { - tests := []struct { - name string - args []string - expectedError string - }{ - { - name: `test "logs list" without repo name`, - args: []string{plural.ApplicationName, "logs", "list"}, - expectedError: "Not enough arguments provided: needs {repo}. Try running --help to see usage.", - }, - { - name: `test "logs list" with repo name`, - args: []string{plural.ApplicationName, "logs", "list", "test"}, - }, - } - for _, test := range tests { - t.Run(test.name, func(t *testing.T) { - client := mocks.NewClient(t) - kube := mocks.NewKube(t) - if test.expectedError == "" { - kube.On("LogTailList", mock.AnythingOfType("string")).Return(&v1alpha1.LogTailList{Items: []v1alpha1.LogTail{}}, nil) - } - app := plural.CreateNewApp(&plural.Plural{ - Plural: pluralclient.Plural{ - Client: client, - Kube: kube, - }, - }) - app.HelpName = plural.ApplicationName - os.Args = test.args - _, err := common.CaptureStdout(app, os.Args) - if test.expectedError != "" { - assert.Equal(t, test.expectedError, err.Error()) - } else { - assert.NoError(t, err) - kube.AssertCalled(t, "LogTailList", mock.AnythingOfType("string")) - } - - }) - } -} diff --git a/cmd/command/plural/plural.go b/cmd/command/plural/plural.go index 0673fb4ad..ca6f63a0e 100644 --- a/cmd/command/plural/plural.go +++ b/cmd/command/plural/plural.go @@ -222,8 +222,6 @@ func CreateNewApp(plural *Plural) *cli.App { ops.Command(plural.Plural), profile.Command(), pr.Command(plural.Plural), - proxy.Command(plural.Plural), - log.Command(plural.Plural), cmdinit.Command(plural.Plural), up.Command(plural.Plural), workspace.Command(plural.Plural, plural.HelmConfiguration), diff --git a/cmd/command/proxy/proxy.go b/cmd/command/proxy/proxy.go deleted file mode 100644 index 9b03c7804..000000000 --- a/cmd/command/proxy/proxy.go +++ /dev/null @@ -1,66 +0,0 @@ -package proxy - -import ( - "github.com/pluralsh/plural-cli/pkg/client" - "github.com/pluralsh/plural-cli/pkg/common" - "github.com/pluralsh/plural-cli/pkg/config" - "github.com/pluralsh/plural-cli/pkg/proxy" - "github.com/urfave/cli" -) - -type Plural struct { - client.Plural -} - -func Command(clients client.Plural) cli.Command { - p := Plural{ - Plural: clients, - } - return cli.Command{ - Name: "proxy", - Usage: "proxies into running processes in your cluster", - Subcommands: p.proxyCommands(), - Category: "Debugging", - } -} - -func (p *Plural) proxyCommands() []cli.Command { - return []cli.Command{ - { - Name: "list", - Usage: "lists proxy plugins for a repo", - ArgsUsage: "{repo}", - Action: common.LatestVersion(common.InitKubeconfig(common.RequireArgs(p.handleProxyList, []string{"{repo}"}))), - }, - { - Name: "connect", - Usage: "connects to a named proxy for a repo", - ArgsUsage: "{repo} {name}", - Action: common.LatestVersion(common.InitKubeconfig(common.RequireArgs(p.handleProxyConnect, []string{"{repo}", "{name}"}))), - }, - } -} - -func (p *Plural) handleProxyList(c *cli.Context) error { - repo := c.Args().Get(0) - conf := config.Read() - if err := p.InitKube(); err != nil { - return err - } - proxies, err := proxy.List(p.Kube, conf.Namespace(repo)) - if err != nil { - return err - } - - return proxy.Print(proxies) -} - -func (p *Plural) handleProxyConnect(c *cli.Context) error { - repo := c.Args().Get(0) - name := c.Args().Get(1) - conf := config.Read() - if err := p.InitKube(); err != nil { - return err - } - return proxy.Exec(p.Kube, conf.Namespace(repo), name) -} diff --git a/cmd/command/proxy/proxy_test.go b/cmd/command/proxy/proxy_test.go deleted file mode 100644 index 1a10d7853..000000000 --- a/cmd/command/proxy/proxy_test.go +++ /dev/null @@ -1,72 +0,0 @@ -package proxy_test - -import ( - "os" - "testing" - - clientcmd "github.com/pluralsh/plural-cli/pkg/client" - - "github.com/pluralsh/plural-cli/pkg/common" - - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - - "github.com/pluralsh/plural-operator/apis/platform/v1alpha1" - "github.com/stretchr/testify/mock" - - "github.com/pluralsh/plural-cli/cmd/command/plural" - "github.com/pluralsh/plural-cli/pkg/test/mocks" - "github.com/stretchr/testify/assert" -) - -func TestProxyList(t *testing.T) { - tests := []struct { - name string - args []string - proxyList *v1alpha1.ProxyList - expectedResponse string - }{ - { - name: `test "proxy list"`, - args: []string{plural.ApplicationName, "proxy", "list", "test"}, - proxyList: &v1alpha1.ProxyList{ - TypeMeta: metav1.TypeMeta{}, - Items: []v1alpha1.Proxy{ - { - ObjectMeta: metav1.ObjectMeta{Name: "proxy-1"}, - Spec: v1alpha1.ProxySpec{Type: v1alpha1.Sh, Target: "test-1"}, - }, - { - ObjectMeta: metav1.ObjectMeta{Name: "proxy-1"}, - Spec: v1alpha1.ProxySpec{Type: v1alpha1.Web, Target: "test-2"}, - }, - }, - }, - expectedResponse: `+---------+------+--------+ -| NAME | TYPE | TARGET | -+---------+------+--------+ -| proxy-1 | sh | test-1 | -| proxy-1 | web | test-2 | -+---------+------+--------+ -`, - }, - } - for _, test := range tests { - t.Run(test.name, func(t *testing.T) { - client := mocks.NewClient(t) - kube := mocks.NewKube(t) - kube.On("ProxyList", mock.AnythingOfType("string"), mock.AnythingOfType("string")).Return(test.proxyList, nil) - app := plural.CreateNewApp(&plural.Plural{ - Plural: clientcmd.Plural{ - Client: client, - Kube: kube, - }, - }) - app.HelpName = plural.ApplicationName - os.Args = test.args - res, err := common.CaptureStdout(app, os.Args) - assert.NoError(t, err) - - assert.Equal(t, test.expectedResponse, res) - }) - } -} From f8354502380d5e637c15b7156370abda4ef41595 Mon Sep 17 00:00:00 2001 From: Marcin Maciaszczyk Date: Wed, 4 Dec 2024 14:21:20 +0100 Subject: [PATCH 08/37] remove most of api commands --- cmd/command/api/api.go | 161 ------------- cmd/command/api/api_test.go | 436 ----------------------------------- cmd/command/plural/plural.go | 2 - 3 files changed, 599 deletions(-) delete mode 100644 cmd/command/api/api_test.go diff --git a/cmd/command/api/api.go b/cmd/command/api/api.go index 004c6d11c..f0946c416 100644 --- a/cmd/command/api/api.go +++ b/cmd/command/api/api.go @@ -4,8 +4,6 @@ import ( "github.com/pluralsh/plural-cli/pkg/api" "github.com/pluralsh/plural-cli/pkg/client" "github.com/pluralsh/plural-cli/pkg/common" - "github.com/pluralsh/plural-cli/pkg/utils" - "github.com/pluralsh/polly/algorithms" "github.com/urfave/cli" ) @@ -27,55 +25,6 @@ func Command(clients client.Plural) cli.Command { func (p *Plural) apiCommands() []cli.Command { return []cli.Command{ - { - Name: "list", - Usage: "lists plural resources", - Subcommands: []cli.Command{ - { - Name: "installations", - Usage: "lists your installations", - Action: common.LatestVersion(p.handleInstallations), - }, - { - Name: "charts", - Usage: "lists charts for a repository", - ArgsUsage: "{repository-id}", - Action: common.LatestVersion(common.RequireArgs(p.handleCharts, []string{"{repository-id}"})), - }, - { - Name: "terraform", - Usage: "lists terraform modules for a repository", - ArgsUsage: "{repository-id}", - Action: common.LatestVersion(common.RequireArgs(p.handleTerraforma, []string{"{repository-id}"})), - }, - { - Name: "versions", - Usage: "lists versions of a chart", - ArgsUsage: "{chart-id}", - Action: common.LatestVersion(common.RequireArgs(p.handleVersions, []string{"{chart-id}"})), - }, - { - Name: "chartinstallations", - Aliases: []string{"ci"}, - Usage: "lists chart installations for a repository", - ArgsUsage: "{repository-id}", - Action: common.LatestVersion(common.RequireArgs(p.handleChartInstallations, []string{"{repository-id}"})), - }, - { - Name: "terraforminstallations", - Aliases: []string{"ti"}, - Usage: "lists terraform installations for a repository", - ArgsUsage: "{repository-id}", - Action: common.LatestVersion(common.RequireArgs(p.handleTerraformInstallations, []string{"{repository-id}"})), - }, - { - Name: "artifacts", - Usage: "Lists artifacts for a repository", - ArgsUsage: "{repository-id}", - Action: common.LatestVersion(common.RequireArgs(p.handleArtifacts, []string{"{repository-id}"})), - }, - }, - }, { Name: "create", Usage: "creates plural resources", @@ -91,116 +40,6 @@ func (p *Plural) apiCommands() []cli.Command { } } -func (p *Plural) handleInstallations(c *cli.Context) error { - p.InitPluralClient() - installations, err := p.GetInstallations() - if err != nil { - return api.GetErrorResponse(err, "GetInstallations") - } - - installations = algorithms.Filter(installations, func(v *api.Installation) bool { - return v.Repository != nil - }) - - headers := []string{"Repository", "Repository Id", "Publisher"} - return utils.PrintTable(installations, headers, func(inst *api.Installation) ([]string, error) { - repo := inst.Repository - publisherName := "" - if repo.Publisher != nil { - publisherName = repo.Publisher.Name - } - return []string{repo.Name, repo.Id, publisherName}, nil - }) -} - -func (p *Plural) handleCharts(c *cli.Context) error { - p.InitPluralClient() - charts, err := p.GetCharts(c.Args().First()) - if err != nil { - return api.GetErrorResponse(err, "GetCharts") - } - - headers := []string{"Id", "Name", "Description", "Latest Version"} - return utils.PrintTable(charts, headers, func(c *api.Chart) ([]string, error) { - return []string{c.Id, c.Name, c.Description, c.LatestVersion}, nil - }) -} - -func (p *Plural) handleTerraforma(c *cli.Context) error { - p.InitPluralClient() - tfs, err := p.GetTerraform(c.Args().First()) - if err != nil { - return api.GetErrorResponse(err, "GetTerraforma") - } - - headers := []string{"Id", "Name", "Description"} - return utils.PrintTable(tfs, headers, func(tf *api.Terraform) ([]string, error) { - return []string{tf.Id, tf.Name, tf.Description}, nil - }) -} - -func (p *Plural) handleVersions(c *cli.Context) error { - p.InitPluralClient() - versions, err := p.GetVersions(c.Args().First()) - if err != nil { - return api.GetErrorResponse(err, "GetVersions") - } - - headers := []string{"Id", "Version"} - return utils.PrintTable(versions, headers, func(v *api.Version) ([]string, error) { - return []string{v.Id, v.Version}, nil - }) -} - -func (p *Plural) handleChartInstallations(c *cli.Context) error { - p.InitPluralClient() - chartInstallations, err := p.GetChartInstallations(c.Args().First()) - if err != nil { - return api.GetErrorResponse(err, "GetChartInstallations") - } - - cis := algorithms.Filter(chartInstallations, func(ci *api.ChartInstallation) bool { - return ci.Chart != nil && ci.Version != nil - }) - - row := func(ci *api.ChartInstallation) ([]string, error) { - return []string{ci.Id, ci.Chart.Id, ci.Chart.Name, ci.Version.Version}, nil - } - headers := []string{"Id", "Chart Id", "Chart Name", "Version"} - return utils.PrintTable(cis, headers, row) -} - -func (p *Plural) handleTerraformInstallations(c *cli.Context) error { - p.InitPluralClient() - terraformInstallations, err := p.GetTerraformInstallations(c.Args().First()) - if err != nil { - return api.GetErrorResponse(err, "GetTerraformInstallations") - } - - tis := algorithms.Filter(terraformInstallations, func(ti *api.TerraformInstallation) bool { - return ti != nil - }) - - headers := []string{"Id", "Terraform Id", "Name"} - return utils.PrintTable(tis, headers, func(ti *api.TerraformInstallation) ([]string, error) { - tf := ti.Terraform - return []string{ti.Id, tf.Id, tf.Name}, nil - }) -} - -func (p *Plural) handleArtifacts(c *cli.Context) error { - p.InitPluralClient() - artifacts, err := p.ListArtifacts(c.Args().First()) - if err != nil { - return api.GetErrorResponse(err, "ListArtifacts") - } - - headers := []string{"Id", "Name", "Platform", "Blob", "Sha"} - return utils.PrintTable(artifacts, headers, func(art api.Artifact) ([]string, error) { - return []string{art.Id, art.Name, art.Platform, art.Blob, art.Sha}, nil - }) -} - func (p *Plural) handleCreateDomain(c *cli.Context) error { p.InitPluralClient() err := p.CreateDomain(c.Args().First()) diff --git a/cmd/command/api/api_test.go b/cmd/command/api/api_test.go deleted file mode 100644 index e940e3d6a..000000000 --- a/cmd/command/api/api_test.go +++ /dev/null @@ -1,436 +0,0 @@ -package api_test - -import ( - "os" - "testing" - - "github.com/pluralsh/plural-cli/cmd/command/plural" - "github.com/pluralsh/plural-cli/pkg/api" - pluralclient "github.com/pluralsh/plural-cli/pkg/client" - "github.com/pluralsh/plural-cli/pkg/common" - "github.com/pluralsh/plural-cli/pkg/test/mocks" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/mock" -) - -func TestListArtifacts(t *testing.T) { - tests := []struct { - name string - args []string - artifacts []api.Artifact - expectedResponse string - expectedError string - }{ - { - name: `test "api list artifacts" with single response`, - args: []string{plural.ApplicationName, "api", "list", "artifacts", "test"}, - artifacts: []api.Artifact{{ - Id: "abc", - Name: "test", - Blob: "test", - Sha: "xyz", - Platform: "aws", - }}, - expectedResponse: `+-----+------+----------+------+-----+ -| ID | NAME | PLATFORM | BLOB | SHA | -+-----+------+----------+------+-----+ -| abc | test | aws | test | xyz | -+-----+------+----------+------+-----+ -`, - }, - { - name: `test "api list artifacts" without {repository-id} parameter`, - args: []string{plural.ApplicationName, "api", "list", "artifacts"}, - expectedError: "Not enough arguments provided: needs {repository-id}. Try running --help to see usage.", - artifacts: []api.Artifact{}, - }, - } - for _, test := range tests { - t.Run(test.name, func(t *testing.T) { - client := mocks.NewClient(t) - if test.expectedError == "" { - client.On("ListArtifacts", mock.AnythingOfType("string")).Return(test.artifacts, nil) - } - app := plural.CreateNewApp(&plural.Plural{Plural: pluralclient.Plural{ - Client: client, - }}) - app.HelpName = plural.ApplicationName - os.Args = test.args - res, err := common.CaptureStdout(app, os.Args) - if test.expectedError != "" { - assert.Equal(t, err.Error(), test.expectedError) - } else { - assert.NoError(t, err) - assert.Equal(t, test.expectedResponse, res) - } - - }) - } -} - -func TestGetInstallations(t *testing.T) { - tests := []struct { - name string - args []string - installations []*api.Installation - expectedResponse string - }{ - { - name: `test "api list installations"`, - args: []string{plural.ApplicationName, "api", "list", "installations"}, - installations: []*api.Installation{ - {Id: "123", Repository: &api.Repository{Id: "abc", Name: "test-1", Publisher: &api.Publisher{Name: "Plural"}}}, - {Id: "456", Repository: &api.Repository{Id: "def", Name: "test-2", Publisher: &api.Publisher{Name: "Plural"}}}, - }, - expectedResponse: `+------------+---------------+-----------+ -| REPOSITORY | REPOSITORY ID | PUBLISHER | -+------------+---------------+-----------+ -| test-1 | abc | Plural | -| test-2 | def | Plural | -+------------+---------------+-----------+ -`, - }, - { - name: `test "api list installations" when Repository is nil`, - args: []string{plural.ApplicationName, "api", "list", "installations"}, - installations: []*api.Installation{{Id: "abc"}}, - expectedResponse: `+------------+---------------+-----------+ -| REPOSITORY | REPOSITORY ID | PUBLISHER | -+------------+---------------+-----------+ -+------------+---------------+-----------+ -`, - }, - { - name: `test "api list installations" when Publisher is nil`, - args: []string{plural.ApplicationName, "api", "list", "installations"}, - installations: []*api.Installation{{Id: "abc", Repository: &api.Repository{Id: "abc", Name: "test"}}}, - expectedResponse: `+------------+---------------+-----------+ -| REPOSITORY | REPOSITORY ID | PUBLISHER | -+------------+---------------+-----------+ -| test | abc | | -+------------+---------------+-----------+ -`, - }, - } - for _, test := range tests { - t.Run(test.name, func(t *testing.T) { - client := mocks.NewClient(t) - client.On("GetInstallations").Return(test.installations, nil) - app := plural.CreateNewApp(&plural.Plural{Plural: pluralclient.Plural{ - Client: client, - }}) - app.HelpName = plural.ApplicationName - os.Args = test.args - res, err := common.CaptureStdout(app, os.Args) - assert.NoError(t, err) - - assert.Equal(t, test.expectedResponse, res) - }) - } -} - -func TestGetCharts(t *testing.T) { - tests := []struct { - name string - args []string - charts []*api.Chart - expectedResponse string - expectedError string - }{ - { - name: `test "api list charts" with single response`, - args: []string{plural.ApplicationName, "api", "list", "charts", "test"}, - charts: []*api.Chart{{ - Id: "123", - Name: "test", - Description: "test chart", - LatestVersion: "0.1.0", - }}, - expectedResponse: `+-----+------+-------------+----------------+ -| ID | NAME | DESCRIPTION | LATEST VERSION | -+-----+------+-------------+----------------+ -| 123 | test | test chart | 0.1.0 | -+-----+------+-------------+----------------+ -`, - }, - { - name: `test "api list charts" without {repository-id} parameter`, - args: []string{plural.ApplicationName, "api", "list", "charts"}, - charts: []*api.Chart{}, - expectedError: "Not enough arguments provided: needs {repository-id}. Try running --help to see usage.", - }, - } - for _, test := range tests { - t.Run(test.name, func(t *testing.T) { - client := mocks.NewClient(t) - if test.expectedError == "" { - client.On("GetCharts", mock.AnythingOfType("string")).Return(test.charts, nil) - } - app := plural.CreateNewApp(&plural.Plural{Plural: pluralclient.Plural{ - Client: client, - }}) - app.HelpName = plural.ApplicationName - os.Args = test.args - res, err := common.CaptureStdout(app, os.Args) - if test.expectedError != "" { - assert.Equal(t, err.Error(), test.expectedError) - } else { - assert.NoError(t, err) - assert.Equal(t, test.expectedResponse, res) - } - }) - } -} - -func TestGetTerraform(t *testing.T) { - tests := []struct { - name string - args []string - terraform []*api.Terraform - expectedResponse string - expectedError string - }{ - { - name: `test "api list terraform"`, - args: []string{plural.ApplicationName, "api", "list", "terraform", "test"}, - terraform: []*api.Terraform{ - { - Id: "123", - Name: "test-1", - Description: "test terraform", - }, - { - Id: "456", - Name: "test-2", - Description: "test terraform", - }, - }, - expectedResponse: `+-----+--------+----------------+ -| ID | NAME | DESCRIPTION | -+-----+--------+----------------+ -| 123 | test-1 | test terraform | -| 456 | test-2 | test terraform | -+-----+--------+----------------+ -`, - }, - { - name: `test "api list terraform" without {repository-id} parameter`, - args: []string{plural.ApplicationName, "api", "list", "terraform"}, - terraform: []*api.Terraform{}, - expectedError: "Not enough arguments provided: needs {repository-id}. Try running --help to see usage.", - }, - } - for _, test := range tests { - t.Run(test.name, func(t *testing.T) { - client := mocks.NewClient(t) - if test.expectedError == "" { - client.On("GetTerraform", mock.AnythingOfType("string")).Return(test.terraform, nil) - } - - app := plural.CreateNewApp(&plural.Plural{Plural: pluralclient.Plural{ - Client: client, - }}) - app.HelpName = plural.ApplicationName - os.Args = test.args - res, err := common.CaptureStdout(app, os.Args) - if test.expectedError != "" { - assert.Equal(t, err.Error(), test.expectedError) - } else { - assert.NoError(t, err) - assert.Equal(t, test.expectedResponse, res) - } - }) - } -} - -func TestGetVersons(t *testing.T) { - tests := []struct { - name string - args []string - versions []*api.Version - expectedResponse string - expectedError string - }{ - { - name: `test "api list versions"`, - args: []string{plural.ApplicationName, "api", "list", "versions", "abc"}, - versions: []*api.Version{ - { - Id: "abc", - Version: "1", - }, - { - Id: "abc", - Version: "2", - }, - }, - expectedResponse: `+-----+---------+ -| ID | VERSION | -+-----+---------+ -| abc | 1 | -| abc | 2 | -+-----+---------+ -`, - }, - { - name: `test "api list versions" without {chart-id} parameter`, - args: []string{plural.ApplicationName, "api", "list", "versions"}, - versions: []*api.Version{}, - expectedError: "Not enough arguments provided: needs {chart-id}. Try running --help to see usage.", - }, - } - for _, test := range tests { - t.Run(test.name, func(t *testing.T) { - client := mocks.NewClient(t) - if test.expectedError == "" { - client.On("GetVersions", mock.AnythingOfType("string")).Return(test.versions, nil) - } - app := plural.CreateNewApp(&plural.Plural{Plural: pluralclient.Plural{ - Client: client, - }}) - app.HelpName = plural.ApplicationName - os.Args = test.args - res, err := common.CaptureStdout(app, os.Args) - if test.expectedError != "" { - assert.Equal(t, err.Error(), test.expectedError) - } else { - assert.NoError(t, err) - assert.Equal(t, test.expectedResponse, res) - } - }) - } -} - -func TestGetChartInstallations(t *testing.T) { - tests := []struct { - name string - args []string - chartInstallations []*api.ChartInstallation - expectedResponse string - expectedError string - }{ - { - name: `test "api list chartinstallations"`, - args: []string{plural.ApplicationName, "api", "list", "chartinstallations", "abc"}, - chartInstallations: []*api.ChartInstallation{ - { - Id: "abc", - Chart: &api.Chart{ - Id: "abc", - Name: "test-1", - }, - Version: &api.Version{ - Version: "1", - }, - }, - { - Id: "abc", - Chart: &api.Chart{ - Id: "abc", - Name: "test-2", - }, - Version: &api.Version{ - Version: "2", - }, - }, - }, - expectedResponse: `+-----+----------+------------+---------+ -| ID | CHART ID | CHART NAME | VERSION | -+-----+----------+------------+---------+ -| abc | abc | test-1 | 1 | -| abc | abc | test-2 | 2 | -+-----+----------+------------+---------+ -`, - }, - { - name: `test "api list chartinstallations" without {repository-id} parameter`, - args: []string{plural.ApplicationName, "api", "list", "chartinstallations"}, - chartInstallations: []*api.ChartInstallation{}, - expectedError: "Not enough arguments provided: needs {repository-id}. Try running --help to see usage.", - }, - } - for _, test := range tests { - t.Run(test.name, func(t *testing.T) { - client := mocks.NewClient(t) - if test.expectedError == "" { - client.On("GetChartInstallations", mock.AnythingOfType("string")).Return(test.chartInstallations, nil) - } - app := plural.CreateNewApp(&plural.Plural{Plural: pluralclient.Plural{ - Client: client, - }}) - app.HelpName = plural.ApplicationName - os.Args = test.args - res, err := common.CaptureStdout(app, os.Args) - if test.expectedError != "" { - assert.Equal(t, err.Error(), test.expectedError) - } else { - assert.NoError(t, err) - assert.Equal(t, test.expectedResponse, res) - } - }) - } -} - -func TestGetTerraformInstallations(t *testing.T) { - tests := []struct { - name string - args []string - terraformInstallations []*api.TerraformInstallation - expectedResponse string - expectedError string - }{ - { - name: `test "api list terraforminstallations"`, - args: []string{plural.ApplicationName, "api", "list", "terraforminstallations", "abc"}, - terraformInstallations: []*api.TerraformInstallation{ - { - Id: "abc", - Terraform: &api.Terraform{ - Id: "cde", - Name: "tf-1", - }, - }, - { - Id: "abc", - Terraform: &api.Terraform{ - Id: "fgh", - Name: "tf-2", - }, - }, - }, - expectedResponse: `+-----+--------------+------+ -| ID | TERRAFORM ID | NAME | -+-----+--------------+------+ -| abc | cde | tf-1 | -| abc | fgh | tf-2 | -+-----+--------------+------+ -`, - }, - { - name: `test "api list terraforminstallations" without {repository-id} parameter`, - args: []string{plural.ApplicationName, "api", "list", "terraforminstallations"}, - terraformInstallations: []*api.TerraformInstallation{}, - expectedError: "Not enough arguments provided: needs {repository-id}. Try running --help to see usage.", - }, - } - for _, test := range tests { - t.Run(test.name, func(t *testing.T) { - client := mocks.NewClient(t) - if test.expectedError == "" { - client.On("GetTerraformInstallations", mock.AnythingOfType("string")).Return(test.terraformInstallations, nil) - } - app := plural.CreateNewApp(&plural.Plural{Plural: pluralclient.Plural{ - Client: client, - }}) - app.HelpName = plural.ApplicationName - os.Args = test.args - res, err := common.CaptureStdout(app, os.Args) - if test.expectedError != "" { - assert.Equal(t, err.Error(), test.expectedError) - } else { - assert.NoError(t, err) - assert.Equal(t, test.expectedResponse, res) - } - }) - } -} diff --git a/cmd/command/plural/plural.go b/cmd/command/plural/plural.go index ca6f63a0e..434fc7cc8 100644 --- a/cmd/command/plural/plural.go +++ b/cmd/command/plural/plural.go @@ -11,11 +11,9 @@ import ( cryptocmd "github.com/pluralsh/plural-cli/cmd/command/crypto" "github.com/pluralsh/plural-cli/cmd/command/down" cmdinit "github.com/pluralsh/plural-cli/cmd/command/init" - "github.com/pluralsh/plural-cli/cmd/command/log" "github.com/pluralsh/plural-cli/cmd/command/ops" "github.com/pluralsh/plural-cli/cmd/command/pr" "github.com/pluralsh/plural-cli/cmd/command/profile" - "github.com/pluralsh/plural-cli/cmd/command/proxy" "github.com/pluralsh/plural-cli/cmd/command/up" "github.com/pluralsh/plural-cli/cmd/command/version" "github.com/pluralsh/plural-cli/cmd/command/vpn" From 82eaadd47db19d49b883e99b8d8762fe3e1abd86 Mon Sep 17 00:00:00 2001 From: Marcin Maciaszczyk Date: Wed, 4 Dec 2024 14:32:09 +0100 Subject: [PATCH 09/37] remove some of common commands --- cmd/command/plural/plural.go | 34 ------------------ cmd/command/vpn/vpn.go | 7 ++-- pkg/common/app.go | 35 ------------------- pkg/proxy/database.go | 67 ------------------------------------ pkg/proxy/proxy.go | 47 ------------------------- pkg/proxy/secret.go | 55 ----------------------------- pkg/proxy/shell.go | 18 ---------- pkg/proxy/web.go | 56 ------------------------------ 8 files changed, 3 insertions(+), 316 deletions(-) delete mode 100644 pkg/proxy/database.go delete mode 100644 pkg/proxy/proxy.go delete mode 100644 pkg/proxy/secret.go delete mode 100644 pkg/proxy/shell.go delete mode 100644 pkg/proxy/web.go diff --git a/cmd/command/plural/plural.go b/cmd/command/plural/plural.go index 434fc7cc8..51a8e7cc1 100644 --- a/cmd/command/plural/plural.go +++ b/cmd/command/plural/plural.go @@ -54,40 +54,6 @@ func (p *Plural) getCommands() []cli.Command { Action: common.LatestVersion(common.HandleScaffold), Category: "Workspace", }, - { - Name: "watch", - Usage: "watches applications until they become ready", - ArgsUsage: "REPO", - Action: common.LatestVersion(common.InitKubeconfig(common.RequireArgs(common.HandleWatch, []string{"REPO"}))), - Category: "Debugging", - }, - { - Name: "wait", - Usage: "waits on applications until they become ready", - ArgsUsage: "REPO", - Action: common.LatestVersion(common.RequireArgs(common.HandleWait, []string{"REPO"})), - Category: "Debugging", - }, - { - Name: "info", - Usage: "generates a console dashboard for the namespace of this repo", - ArgsUsage: "REPO", - Action: common.LatestVersion(common.RequireArgs(common.HandleInfo, []string{"REPO"})), - Category: "Debugging", - }, - { - Name: "apply", - Usage: "applys the current pluralfile", - Flags: []cli.Flag{ - cli.StringFlag{ - Name: "file, f", - Usage: "pluralfile to use", - }, - }, - Action: common.LatestVersion(common.Apply), - Category: "Publishing", - }, - { Name: "readme", Aliases: []string{"b"}, diff --git a/cmd/command/vpn/vpn.go b/cmd/command/vpn/vpn.go index b7599593f..1c9bef2b6 100644 --- a/cmd/command/vpn/vpn.go +++ b/cmd/command/vpn/vpn.go @@ -23,10 +23,9 @@ import ( ) const ( - wireguardAppName = "wireguard" - wireguardNamespace = "wireguard" - wireguardServerName = "wireguard" - wireguardNotInstalledError = "wireguard is not installed. run `plural bundle list wireguard` to find the bundle to install" + wireguardAppName = "wireguard" + wireguardNamespace = "wireguard" + wireguardServerName = "wireguard" ) type Plural struct { diff --git a/pkg/common/app.go b/pkg/common/app.go index 127dbb67f..77287f691 100644 --- a/pkg/common/app.go +++ b/pkg/common/app.go @@ -7,47 +7,12 @@ import ( "github.com/pluralsh/plural-cli/pkg/up" - tm "github.com/buger/goterm" "github.com/urfave/cli" - "github.com/pluralsh/plural-cli/pkg/application" "github.com/pluralsh/plural-cli/pkg/config" - "github.com/pluralsh/plural-cli/pkg/kubernetes" "github.com/pluralsh/plural-cli/pkg/utils" - - "sigs.k8s.io/application/api/v1beta1" ) -func HandleWatch(c *cli.Context) error { - repo := c.Args().Get(0) - kubeConf, err := kubernetes.KubeConfig() - if err != nil { - return err - } - kube, err := kubernetes.Kubernetes() - if err != nil { - return err - } - - timeout := func() error { return nil } - return application.Waiter(kubeConf, repo, func(app *v1beta1.Application) (bool, error) { - tm.MoveCursor(1, 1) - application.Print(kube.GetClient(), app) - application.Flush() - return false, nil - }, timeout) -} - -func HandleWait(c *cli.Context) error { - repo := c.Args().Get(0) - kubeConf, err := kubernetes.KubeConfig() - if err != nil { - return err - } - - return application.Wait(kubeConf, repo) -} - func HandleInfo(c *cli.Context) error { repo := c.Args().Get(0) conf := config.Read() diff --git a/pkg/proxy/database.go b/pkg/proxy/database.go deleted file mode 100644 index e018640fd..000000000 --- a/pkg/proxy/database.go +++ /dev/null @@ -1,67 +0,0 @@ -package proxy - -import ( - "fmt" - "os" - "os/exec" - "time" - - "github.com/pluralsh/plural-cli/pkg/kubernetes/portforward" - "github.com/pluralsh/plural-cli/pkg/utils" - "github.com/pluralsh/plural-operator/apis/platform/v1alpha1" -) - -type postgres struct { - Proxy *v1alpha1.Proxy - Pwd string -} - -type dbConnection interface { - Connect(namespace string) error -} - -func buildConnection(secret string, proxy *v1alpha1.Proxy) (dbConnection, error) { - switch proxy.Spec.DbConfig.Engine { - case "postgres": - return &postgres{Pwd: secret, Proxy: proxy}, nil - default: - return nil, fmt.Errorf("Unsupported engine %s", proxy.Spec.DbConfig.Engine) - } -} - -func (pg *postgres) Connect(namespace string) error { - err := portForward(namespace, pg.Proxy, pg.Proxy.Spec.DbConfig.Port) - if err != nil { - return err - } - - utils.Highlight("Wait a bit while the port-forward boots up\n") - time.Sleep(5 * time.Second) - cmd := exec.Command("psql", fmt.Sprintf("host=127.0.0.1 sslmode=allow user=%s dbname=%s", pg.Proxy.Spec.Credentials.User, pg.Proxy.Spec.DbConfig.Name)) - cmd.Env = os.Environ() - cmd.Env = append(cmd.Env, fmt.Sprintf("PGPASSWORD=%s", pg.Pwd)) - cmd.Stdout = os.Stdout - cmd.Stderr = os.Stderr - cmd.Stdin = os.Stdin - return cmd.Run() -} - -func portForward(namespace string, proxy *v1alpha1.Proxy, port int32) error { - errorChan := make(chan error, 1) - stopChan, readyChan := make(chan struct{}, 1), make(chan struct{}) - var err error - go func() { - err = portforward.PortForward(namespace, proxy.Spec.Target, []string{fmt.Sprint(port)}, stopChan, readyChan) - errorChan <- err - }() - - select { - case <-readyChan: - break - case <-errorChan: - close(stopChan) - close(errorChan) - break - } - return err -} diff --git a/pkg/proxy/proxy.go b/pkg/proxy/proxy.go deleted file mode 100644 index 18582c1b0..000000000 --- a/pkg/proxy/proxy.go +++ /dev/null @@ -1,47 +0,0 @@ -package proxy - -import ( - "fmt" - - "github.com/pluralsh/plural-cli/pkg/kubernetes" - "github.com/pluralsh/plural-cli/pkg/utils" - "github.com/pluralsh/plural-operator/apis/platform/v1alpha1" -) - -func List(kube kubernetes.Kube, namespace string) (*v1alpha1.ProxyList, error) { - return kube.ProxyList(namespace) -} - -func Print(l *v1alpha1.ProxyList) error { - headers := []string{"Name", "Type", "Target"} - return utils.PrintTable[v1alpha1.Proxy](l.Items, headers, func(p v1alpha1.Proxy) ([]string, error) { - return []string{p.Name, string(p.Spec.Type), p.Spec.Target}, nil - }) -} - -func Exec(kube kubernetes.Kube, namespace string, name string) error { - proxy, err := kube.Proxy(namespace, name) - if err != nil { - return err - } - - t := proxy.Spec.Type - switch t { - case v1alpha1.Db: - secret, err := fetchSecret(namespace, kube, proxy.Spec.Credentials) - if err != nil { - return err - } - conn, err := buildConnection(secret, proxy) - if err != nil { - return err - } - return conn.Connect(namespace) - case v1alpha1.Sh: - return execShell(namespace, proxy) - case v1alpha1.Web: - return execWeb(namespace, proxy, kube) - default: - return fmt.Errorf("Unhandled proxy type %s", t) - } -} diff --git a/pkg/proxy/secret.go b/pkg/proxy/secret.go deleted file mode 100644 index 40289ec6a..000000000 --- a/pkg/proxy/secret.go +++ /dev/null @@ -1,55 +0,0 @@ -package proxy - -import ( - "fmt" - - "github.com/pluralsh/plural-cli/pkg/kubernetes" - "github.com/pluralsh/plural-operator/apis/platform/v1alpha1" - - v1 "k8s.io/api/core/v1" -) - -type UserCredentials struct { - User string - Password string -} - -func fetchSecret(namespace string, k kubernetes.Kube, creds *v1alpha1.Credentials) (string, error) { - secret, err := k.Secret(namespace, creds.Secret) - if err != nil { - return "", err - } - - val, ok := secret.Data[creds.Key] - if !ok { - return "", fmt.Errorf("Could not find credential key") - } - - return string(val), nil -} - -func fetchUserPassword(secret *v1.Secret, creds *v1alpha1.Credentials) (user *UserCredentials, err error) { - pwd, ok := secret.Data[creds.Key] - if !ok { - err = fmt.Errorf("Could not find password key") - return - } - - username := creds.User - if creds.UserKey != "" { - uname, ok := secret.Data[creds.UserKey] - if !ok { - err = fmt.Errorf("Could not find password key") - return - } - username = string(uname) - } - - if username == "" { - err = fmt.Errorf("No username found") - return - } - - user = &UserCredentials{User: username, Password: string(pwd)} - return -} diff --git a/pkg/proxy/shell.go b/pkg/proxy/shell.go deleted file mode 100644 index 6941446f9..000000000 --- a/pkg/proxy/shell.go +++ /dev/null @@ -1,18 +0,0 @@ -package proxy - -import ( - "github.com/pluralsh/plural-cli/pkg/kubernetes/exec" - "github.com/pluralsh/plural-operator/apis/platform/v1alpha1" -) - -func execShell(namespace string, proxy *v1alpha1.Proxy) error { - shell := proxy.Spec.ShConfig - var rest []string - if len(shell.Command) > 0 { - rest = append([]string{shell.Command}, shell.Args...) - } else { - rest = []string{"/bin/sh"} - } - - return exec.Exec(namespace, proxy.Spec.Target, rest) -} diff --git a/pkg/proxy/web.go b/pkg/proxy/web.go deleted file mode 100644 index 1cb2ebc45..000000000 --- a/pkg/proxy/web.go +++ /dev/null @@ -1,56 +0,0 @@ -package proxy - -import ( - "fmt" - "time" - - "github.com/pluralsh/plural-cli/pkg/kubernetes" - "github.com/pluralsh/plural-cli/pkg/utils" - "github.com/pluralsh/plural-operator/apis/platform/v1alpha1" -) - -func execWeb(namespace string, proxy *v1alpha1.Proxy, kube kubernetes.Kube) error { - config := proxy.Spec.WebConfig - err := portForward(namespace, proxy, config.Port) - if err != nil { - return err - } - - utils.Highlight("Wait a bit while the port-forward boots up\n\n") - time.Sleep(5 * time.Second) - - if err := printCredentials(proxy, namespace, kube); err != nil { - return err - } - fmt.Printf("\nVisit http://localhost:%d%s\n", config.Port, config.Path) - if _, err := utils.ReadLine("Press enter to close the proxy"); err != nil { - return err - } - return nil -} - -func printCredentials(proxy *v1alpha1.Proxy, namespace string, kube kubernetes.Kube) error { - creds := proxy.Spec.Credentials - if creds == nil { - return nil - } - - secret, err := kube.Secret(namespace, creds.Secret) - if err != nil { - return err - } - user, err := fetchUserPassword(secret, creds) - if err != nil { - return err - } - - highlightedEntry("Username", user.User) - highlightedEntry("Password", user.Password) - - return nil -} - -func highlightedEntry(label, value string) { - utils.Highlight(label + ": ") - fmt.Println(value) -} From c3302bb820bea11241ce2edf091d31d7ae8662c3 Mon Sep 17 00:00:00 2001 From: Marcin Maciaszczyk Date: Wed, 4 Dec 2024 15:01:31 +0100 Subject: [PATCH 10/37] remove unused code --- cmd/command/clusters/clusters.go | 207 -------------- cmd/command/plural/plural.go | 21 -- cmd/command/workspace/workspace.go | 12 - pkg/bundle/installer.go | 117 -------- pkg/client/build.go | 149 ---------- pkg/common/app.go | 23 -- pkg/common/apply.go | 33 --- pkg/common/common.go | 51 ---- pkg/common/diff.go | 75 ----- pkg/common/scaffold.go | 12 - pkg/common/validation.go | 93 ------- pkg/common/version.go | 10 - pkg/helm/helm.go | 19 -- pkg/logs/api.go | 33 --- pkg/output/terraform.go | 32 --- pkg/scaffold/application.go | 66 ----- pkg/scaffold/application_test.go | 74 ----- pkg/scaffold/constants.go | 116 -------- pkg/scaffold/crd.go | 52 ---- pkg/scaffold/creator.go | 102 ------- pkg/scaffold/default.go | 59 ---- pkg/scaffold/helm.go | 431 ----------------------------- pkg/scaffold/helm_test.go | 214 -------------- pkg/scaffold/readme.go | 186 ------------- pkg/scaffold/scaffold.go | 166 ----------- pkg/scaffold/secrets.go | 20 -- pkg/scaffold/template/template.go | 40 --- pkg/scaffold/terraform.go | 283 ------------------- pkg/wkspace/actions.go | 172 ------------ pkg/wkspace/builder.go | 266 +----------------- pkg/wkspace/builder_test.go | 59 ---- pkg/wkspace/graph.go | 113 -------- pkg/wkspace/manifest.go | 82 ------ pkg/wkspace/notes.go | 1 - pkg/wkspace/validator.go | 16 -- 35 files changed, 3 insertions(+), 3402 deletions(-) delete mode 100644 cmd/command/clusters/clusters.go delete mode 100644 pkg/bundle/installer.go delete mode 100644 pkg/client/build.go delete mode 100644 pkg/common/apply.go delete mode 100644 pkg/common/diff.go delete mode 100644 pkg/common/scaffold.go delete mode 100644 pkg/logs/api.go delete mode 100644 pkg/output/terraform.go delete mode 100644 pkg/scaffold/application.go delete mode 100644 pkg/scaffold/application_test.go delete mode 100644 pkg/scaffold/constants.go delete mode 100644 pkg/scaffold/crd.go delete mode 100644 pkg/scaffold/creator.go delete mode 100644 pkg/scaffold/default.go delete mode 100644 pkg/scaffold/helm.go delete mode 100644 pkg/scaffold/helm_test.go delete mode 100644 pkg/scaffold/readme.go delete mode 100644 pkg/scaffold/scaffold.go delete mode 100644 pkg/scaffold/secrets.go delete mode 100644 pkg/scaffold/terraform.go delete mode 100644 pkg/wkspace/actions.go delete mode 100644 pkg/wkspace/builder_test.go delete mode 100644 pkg/wkspace/graph.go delete mode 100644 pkg/wkspace/manifest.go delete mode 100644 pkg/wkspace/notes.go diff --git a/cmd/command/clusters/clusters.go b/cmd/command/clusters/clusters.go deleted file mode 100644 index 7c3623d08..000000000 --- a/cmd/command/clusters/clusters.go +++ /dev/null @@ -1,207 +0,0 @@ -package clusters - -import ( - "fmt" - - "github.com/pluralsh/plural-cli/pkg/api" - "github.com/pluralsh/plural-cli/pkg/client" - "github.com/pluralsh/plural-cli/pkg/common" - "github.com/pluralsh/plural-cli/pkg/config" - "github.com/pluralsh/plural-cli/pkg/manifest" - "github.com/pluralsh/plural-cli/pkg/utils" - "github.com/urfave/cli" -) - -type Plural struct { - client.Plural -} - -func Command(clients client.Plural) cli.Command { - p := Plural{ - Plural: clients, - } - return cli.Command{ - Name: "clusters", - Usage: "commands related to managing plural clusters", - Subcommands: p.clusterCommands(), - } -} - -func (p *Plural) clusterCommands() []cli.Command { - return []cli.Command{ - { - Name: "list", - Usage: "lists clusters accessible to your user", - Action: common.LatestVersion(p.listClusters), - }, - { - Name: "transfer", - Usage: "transfers ownership of the current cluster to another", - Action: common.LatestVersion(common.Rooted(p.transferOwnership)), - Flags: []cli.Flag{ - cli.StringFlag{ - Name: "email", - Usage: "the email of the new owner", - }, - }, - }, - { - Name: "view", - Usage: "shows info for a cluster", - Flags: []cli.Flag{ - cli.StringFlag{ - Name: "id", - Usage: "the id of the source cluster", - }, - }, - Action: common.LatestVersion(p.showCluster), - }, - { - Name: "depend", - Usage: "have a cluster wait for promotion on another cluster", - Flags: []cli.Flag{ - cli.StringFlag{ - Name: "source-id", - Usage: "the id of the source cluster", - }, - cli.StringFlag{ - Name: "dest-id", - Usage: "the id of the cluster waiting for promotion", - }, - }, - Action: common.LatestVersion(p.dependCluster), - }, - { - Name: "promote", - Usage: "promote pending upgrades to your cluster", - Action: common.LatestVersion(p.promoteCluster), - }, - } -} - -func (p *Plural) listClusters(c *cli.Context) error { - p.InitPluralClient() - clusters, err := p.Client.Clusters() - if err != nil { - return err - } - - headers := []string{"ID", "Name", "Provider", "Git Url", "Owner"} - return utils.PrintTable(clusters, headers, func(c *api.Cluster) ([]string, error) { - return []string{c.Id, c.Name, c.Provider, c.GitUrl, c.Owner.Email}, nil - }) -} - -func (p *Plural) transferOwnership(c *cli.Context) error { - p.InitPluralClient() - email := c.String("email") - man, err := manifest.FetchProject() - if err != nil { - return err - } - - if err := p.TransferOwnership(man.Cluster, email); err != nil { - return api.GetErrorResponse(err, "TransferOwnership") - } - - man.Owner.Email = email - if err := man.Flush(); err != nil { - return err - } - - if err := p.AssumeServiceAccount(config.Read(), man); err != nil { - return err - } - - utils.Highlight("rebuilding bootstrap and console to sync your cluster with the new owner:\n") - - for _, app := range []string{"bootstrap", "console"} { - installation, err := p.GetInstallation(app) - if err != nil { - return api.GetErrorResponse(err, "GetInstallation") - } else if installation == nil { - continue - } - - if err := common.DoBuild(p.Client, installation, false); err != nil { - return err - } - } - - utils.Highlight("deploying rebuilt applications\n") - if err := p.Deploy(c); err != nil { - return err - } - - utils.Success("Ownership successfully transferred to %s", email) - return nil -} - -func (p *Plural) showCluster(c *cli.Context) error { - p.InitPluralClient() - id := c.String("id") - if id == "" { - clusters, err := p.Client.Clusters() - if err != nil { - return err - } - - project, err := manifest.FetchProject() - if err != nil { - return err - } - for _, cluster := range clusters { - if cluster.Name == project.Cluster && cluster.Owner.Email == project.Owner.Email { - id = cluster.Id - break - } - } - } - cluster, err := p.Client.Cluster(id) - if err != nil { - return err - } - - fmt.Printf("Cluster %s:\n\n", cluster.Id) - - utils.PrintAttributes(map[string]string{ - "Id": cluster.Id, - "Name": cluster.Name, - "Provider": cluster.Provider, - "Git Url": cluster.GitUrl, - "Owner": cluster.Owner.Email, - }) - - fmt.Println("") - if len(cluster.UpgradeInfo) > 0 { - fmt.Printf("Pending Upgrades:\n\n") - headers := []string{"Repository", "Count"} - return utils.PrintTable(cluster.UpgradeInfo, headers, func(c *api.UpgradeInfo) ([]string, error) { - return []string{c.Installation.Repository.Name, fmt.Sprintf("%d", c.Count)}, nil - }) - } - - fmt.Println("No pending upgrades") - return nil -} - -func (p *Plural) dependCluster(c *cli.Context) error { - p.InitPluralClient() - source, dest := c.String("source-id"), c.String("dest-id") - if err := p.Client.CreateDependency(source, dest); err != nil { - return err - } - - utils.Highlight("Cluster %s will now delegate upgrades to %s", dest, source) - return nil -} - -func (p *Plural) promoteCluster(c *cli.Context) error { - p.InitPluralClient() - if err := p.Client.PromoteCluster(); err != nil { - return err - } - - utils.Success("Upgrades promoted!") - return nil -} diff --git a/cmd/command/plural/plural.go b/cmd/command/plural/plural.go index 51a8e7cc1..474011f7e 100644 --- a/cmd/command/plural/plural.go +++ b/cmd/command/plural/plural.go @@ -6,7 +6,6 @@ import ( "github.com/pluralsh/plural-cli/cmd/command/auth" "github.com/pluralsh/plural-cli/cmd/command/cd" "github.com/pluralsh/plural-cli/cmd/command/clone" - "github.com/pluralsh/plural-cli/cmd/command/clusters" "github.com/pluralsh/plural-cli/cmd/command/config" cryptocmd "github.com/pluralsh/plural-cli/cmd/command/crypto" "github.com/pluralsh/plural-cli/cmd/command/down" @@ -41,19 +40,6 @@ type Plural struct { func (p *Plural) getCommands() []cli.Command { return []cli.Command{ - { - Name: "diff", - Aliases: []string{"df"}, - Usage: "diffs the state of the current workspace with the deployed version and dumps results to diffs/", - ArgsUsage: "APP", - Action: common.LatestVersion(common.HandleDiff), - }, - { - Name: "create", - Usage: "scaffolds the resources needed to create a new plural repository", - Action: common.LatestVersion(common.HandleScaffold), - Category: "Workspace", - }, { Name: "readme", Aliases: []string{"b"}, @@ -126,12 +112,6 @@ func (p *Plural) getCommands() []cli.Command { Action: common.LatestVersion(common.HandleHelmTemplate), Category: "Publishing", }, - { - Name: "changed", - Usage: "shows repos with pending changes", - Action: common.LatestVersion(common.Diffed), - Category: "Workspace", - }, } } @@ -180,7 +160,6 @@ func CreateNewApp(plural *Plural) *cli.App { cd.Command(plural.Plural, plural.HelmConfiguration), config.Command(), cryptocmd.Command(plural.Plural), - clusters.Command(plural.Plural), clone.Command(), down.Command(), ops.Command(plural.Plural), diff --git a/cmd/command/workspace/workspace.go b/cmd/command/workspace/workspace.go index d54fbb0ff..0d7214f2f 100644 --- a/cmd/command/workspace/workspace.go +++ b/cmd/command/workspace/workspace.go @@ -42,18 +42,6 @@ func (p *Plural) workspaceCommands() []cli.Command { Usage: "generates kubernetes credentials for this subworkspace", Action: common.LatestVersion(kubeInit), }, - { - Name: "readme", - Usage: "generate chart readme for an app", - ArgsUsage: "{app}", - Flags: []cli.Flag{ - cli.BoolFlag{ - Name: "dry-run", - Usage: "output to stdout instead of to a file", - }, - }, - Action: common.LatestVersion(func(c *cli.Context) error { return common.AppReadme(c.Args().Get(0), c.Bool("dry-run")) }), - }, { Name: "helm", Usage: "upgrade/installs the helm chart for this subworkspace", diff --git a/pkg/bundle/installer.go b/pkg/bundle/installer.go deleted file mode 100644 index 1c5e2ceb3..000000000 --- a/pkg/bundle/installer.go +++ /dev/null @@ -1,117 +0,0 @@ -package bundle - -import ( - "fmt" - "os" - - "github.com/inancgumus/screen" - - "github.com/pluralsh/plural-cli/pkg/api" - "github.com/pluralsh/plural-cli/pkg/bundle/tests" - "github.com/pluralsh/plural-cli/pkg/manifest" - "github.com/pluralsh/plural-cli/pkg/utils" -) - -func Install(client api.Client, repo, name string, refresh bool) error { - recipe, err := client.GetRecipe(repo, name) - if err != nil { - return api.GetErrorResponse(err, "GetRecipe") - } - - return doInstall(client, recipe, repo, name, refresh) -} - -func doInstall(client api.Client, recipe *api.Recipe, repo, name string, refresh bool) error { - if recipe.Restricted && os.Getenv("CLOUD_SHELL") == "1" { - return fmt.Errorf("Cannot install this bundle for %s in cloud shell, this is often because it requires a file locally available on your machine like a git ssh key", repo) - } - - path := manifest.ContextPath() - context, err := manifest.ReadContext(path) - if err != nil { - context = manifest.NewContext() - } - - context.AddBundle(repo, name) - - for _, section := range recipe.RecipeSections { - screen.Clear() - screen.MoveTopLeft() - utils.Highlight(section.Repository.Name) - fmt.Printf(" %s\n", section.Repository.Description) - - ctx, ok := context.Configuration[section.Repository.Name] - if !ok { - ctx = map[string]interface{}{} - } - - seen := make(map[string]bool) - - for _, configItem := range section.Configuration { - if seen[configItem.Name] { - continue - } - - if _, ok := ctx[configItem.Name]; ok && !refresh { - continue - } - - seen[configItem.Name] = true - if err := Configure(ctx, configItem, context, repo); err != nil { - context.Configuration[section.Repository.Name] = ctx - if err := context.Write(path); err != nil { - return err - } - return err - } - } - - context.Configuration[section.Repository.Name] = ctx - } - - err = context.Write(path) - if err != nil { - return err - } - - if err := performTests(context, recipe); err != nil { - return err - } - - if err := client.InstallRecipe(recipe.Id); err != nil { - return fmt.Errorf("Install failed, does your plural user have install permissions? error: %w", api.GetErrorResponse(err, "InstallRecipe")) - } - - if recipe.OidcSettings == nil { - return nil - } - - confirm := false - if err := ConfigureOidc(repo, client, recipe, context.Configuration[repo], &confirm); err != nil { - return err - } - - for _, r := range recipe.RecipeDependencies { - repo := r.Repository.Name - if err := ConfigureOidc(repo, client, r, context.Configuration[repo], &confirm); err != nil { - return err - } - } - - return nil -} - -func performTests(ctx *manifest.Context, recipe *api.Recipe) error { - if len(recipe.Tests) == 0 { - return nil - } - - utils.Highlight("Found %d tests to run...\n", len(recipe.Tests)) - for _, test := range recipe.Tests { - if err := tests.Perform(ctx, test); err != nil { - return err - } - } - - return nil -} diff --git a/pkg/client/build.go b/pkg/client/build.go deleted file mode 100644 index e38be2e4c..000000000 --- a/pkg/client/build.go +++ /dev/null @@ -1,149 +0,0 @@ -package client - -import ( - "fmt" - "path/filepath" - "strings" - - "github.com/pluralsh/plural-cli/pkg/application" - "github.com/pluralsh/plural-cli/pkg/common" - "github.com/pluralsh/plural-cli/pkg/executor" - "github.com/pluralsh/plural-cli/pkg/kubernetes" - "github.com/pluralsh/plural-cli/pkg/manifest" - "github.com/pluralsh/plural-cli/pkg/scaffold" - "github.com/pluralsh/plural-cli/pkg/utils" - "github.com/pluralsh/plural-cli/pkg/utils/git" - "github.com/pluralsh/plural-cli/pkg/utils/pathing" - "github.com/pluralsh/polly/algorithms" - "github.com/pluralsh/polly/containers" - "github.com/urfave/cli" - - "github.com/pluralsh/plural-cli/pkg/api" - "github.com/pluralsh/plural-cli/pkg/wkspace" -) - -const Bootstrap = "bootstrap" - -func (p *Plural) Deploy(c *cli.Context) error { - p.InitPluralClient() - verbose := c.Bool("verbose") - repoRoot, err := git.Root() - if err != nil { - return err - } - - // project, err := manifest.FetchProject() - // if err != nil { - // return err - // } - - var sorted []string - switch { - case len(c.StringSlice("from")) > 0: - sorted, err = wkspace.AllDependencies(c.StringSlice("from")) - case c.Bool("all"): - sorted, err = p.allSortedRepos() - default: - sorted, err = getSortedNames(true) - } - if err != nil { - return err - } - - fmt.Printf("Deploying applications [%s] in topological order\n\n", strings.Join(sorted, ", ")) - - ignoreConsole := c.Bool("ignore-console") - for _, repo := range sorted { - if ignoreConsole && (repo == "console" || repo == Bootstrap) { - continue - } - - execution, err := executor.GetExecution(pathing.SanitizeFilepath(filepath.Join(repoRoot, repo)), "deploy") - if err != nil { - return err - } - - if err := execution.Execute("deploying", verbose); err != nil { - utils.Note("It looks like your deployment failed. This may be a transient issue and rerunning the `plural deploy` command may resolve it. Or, feel free to reach out to us on discord (https://discord.gg/bEBAMXV64s) or Intercom and we should be able to help you out\n") - return err - } - - fmt.Printf("\n") - - installation, err := p.GetInstallation(repo) - if err != nil { - return api.GetErrorResponse(err, "GetInstallation") - } - if installation == nil { - return fmt.Errorf("The %s was unistalled, run `plural bundle install %s ` ", repo, repo) - } - - if err := p.Client.MarkSynced(repo); err != nil { - utils.Warn("failed to mark %s as synced, this is not a critical error but might drift state in our api, you can run `plural repos synced %s` to mark it manually", repo, repo) - } - - if c.Bool("silence") { - continue - } - - if man, err := fetchManifest(repo); err == nil && man.Wait { - if kubeConf, err := kubernetes.KubeConfig(); err == nil { - fmt.Printf("Waiting for %s to become ready...\n", repo) - if err := application.SilentWait(kubeConf, repo); err != nil { - return err - } - fmt.Println("") - } - } - - if err := scaffold.Notes(installation); err != nil { - return err - } - } - - utils.Highlight("\n==> Commit and push your changes to record your deployment\n\n") - - if commit := common.CommitMsg(c); commit != "" { - utils.Highlight("Pushing upstream...\n") - return git.Sync(repoRoot, commit, c.Bool("force")) - } - - return nil -} - -func (p *Plural) allSortedRepos() ([]string, error) { - p.InitPluralClient() - insts, err := p.GetInstallations() - if err != nil { - return nil, api.GetErrorResponse(err, "GetInstallations") - } - - return wkspace.SortAndFilter(insts) -} -func getSortedNames(filter bool) ([]string, error) { - diffed, err := wkspace.DiffedRepos() - if err != nil { - return nil, err - } - - sorted, err := wkspace.TopSortNames(diffed) - if err != nil { - return nil, err - } - - if filter { - repos := containers.ToSet(diffed) - return algorithms.Filter(sorted, repos.Has), nil - } - - return sorted, nil -} - -func fetchManifest(repo string) (*manifest.Manifest, error) { - p, err := manifest.ManifestPath(repo) - if err != nil { - return nil, err - } - - return manifest.Read(p) -} diff --git a/pkg/common/app.go b/pkg/common/app.go index 77287f691..9e76c239b 100644 --- a/pkg/common/app.go +++ b/pkg/common/app.go @@ -2,35 +2,12 @@ package common import ( "fmt" - "os/exec" - "strings" "github.com/pluralsh/plural-cli/pkg/up" "github.com/urfave/cli" - - "github.com/pluralsh/plural-cli/pkg/config" - "github.com/pluralsh/plural-cli/pkg/utils" ) -func HandleInfo(c *cli.Context) error { - repo := c.Args().Get(0) - conf := config.Read() - - _, err := exec.LookPath("k9s") - if err != nil { - utils.LogError().Println(err) - if strings.Contains(err.Error(), exec.ErrNotFound.Error()) { - utils.Error("Application k9s not installed.\n") - fmt.Println("Please install it first from here: https://k9scli.io/topics/install/ and try again") - return nil - } - } - - cmd := exec.Command("k9s", "-n", conf.Namespace(repo)) - return cmd.Run() -} - func HandleDown(_ *cli.Context) error { if !Affirm(AffirmDown, "PLURAL_DOWN_AFFIRM_DESTROY") { return fmt.Errorf("cancelled destroy") diff --git a/pkg/common/apply.go b/pkg/common/apply.go deleted file mode 100644 index 82362e5a8..000000000 --- a/pkg/common/apply.go +++ /dev/null @@ -1,33 +0,0 @@ -package common - -import ( - "os" - "path/filepath" - - "github.com/pluralsh/plural-cli/pkg/pluralfile" - "github.com/pluralsh/plural-cli/pkg/utils/pathing" - "github.com/urfave/cli" -) - -func Apply(c *cli.Context) error { - path, _ := os.Getwd() - var file = pathing.SanitizeFilepath(filepath.Join(path, "Pluralfile")) - if c.IsSet("file") { - file, _ = filepath.Abs(c.String("file")) - } - - if err := os.Chdir(filepath.Dir(file)); err != nil { - return err - } - - plrl, err := pluralfile.Parse(file) - if err != nil { - return err - } - - lock, err := plrl.Lock(file) - if err != nil { - return err - } - return plrl.Execute(file, lock) -} diff --git a/pkg/common/common.go b/pkg/common/common.go index e147e3e22..cf705a70c 100644 --- a/pkg/common/common.go +++ b/pkg/common/common.go @@ -19,7 +19,6 @@ import ( "github.com/pluralsh/plural-cli/pkg/wkspace" "github.com/urfave/cli" - "github.com/pluralsh/plural-cli/pkg/scaffold" "github.com/pluralsh/plural-cli/pkg/utils/git" ) @@ -27,56 +26,6 @@ var ( loggedIn = false ) -func AppReadme(name string, dryRun bool) error { - repoRoot, err := git.Root() - if err != nil { - return err - } - - dir := filepath.Join(repoRoot, name, "helm", name) - return scaffold.Readme(dir, dryRun) -} - -func DoBuild(client api.Client, installation *api.Installation, force bool) error { - repoName := installation.Repository.Name - fmt.Printf("Building workspace for %s\n", repoName) - - if !wkspace.Configured(repoName) { - fmt.Printf("You have not locally configured %s but have it registered as an installation in our api, ", repoName) - fmt.Printf("either delete it with `plural apps uninstall %s` or install it locally via a bundle in `plural bundle list %s`\n", repoName, repoName) - return nil - } - - workspace, err := wkspace.New(client, installation) - if err != nil { - return err - } - - vsn, ok := workspace.RequiredCliVsn() - if ok && !VersionValid(vsn) { - return fmt.Errorf("Your cli version is not sufficient to complete this build, please update to at least %s", vsn) - } - - if err := workspace.Prepare(); err != nil { - return err - } - - build, err := scaffold.Scaffolds(workspace) - if err != nil { - return err - } - - err = build.Execute(workspace, force) - if err == nil { - utils.Success("Finished building %s\n\n", repoName) - } - - workspace.PrintLinks() - - AppReadme(repoName, false) // nolint:errcheck - return err -} - func HandleLogin(c *cli.Context) error { if loggedIn { return nil diff --git a/pkg/common/diff.go b/pkg/common/diff.go deleted file mode 100644 index e611c8706..000000000 --- a/pkg/common/diff.go +++ /dev/null @@ -1,75 +0,0 @@ -package common - -import ( - "fmt" - "path/filepath" - "strings" - - "github.com/pluralsh/plural-cli/pkg/diff" - "github.com/pluralsh/plural-cli/pkg/utils/git" - "github.com/pluralsh/plural-cli/pkg/utils/pathing" - "github.com/pluralsh/plural-cli/pkg/wkspace" - "github.com/pluralsh/polly/algorithms" - "github.com/pluralsh/polly/containers" - "github.com/urfave/cli" -) - -func Diffed(_ *cli.Context) error { - diffed, err := wkspace.DiffedRepos() - if err != nil { - return err - } - - for _, d := range diffed { - fmt.Println(d) - } - - return nil -} - -func getSortedNames(filter bool) ([]string, error) { - diffed, err := wkspace.DiffedRepos() - if err != nil { - return nil, err - } - - sorted, err := wkspace.TopSortNames(diffed) - if err != nil { - return nil, err - } - - if filter { - repos := containers.ToSet(diffed) - return algorithms.Filter(sorted, repos.Has), nil - } - - return sorted, nil -} - -func HandleDiff(_ *cli.Context) error { - repoRoot, err := git.Root() - if err != nil { - return err - } - - sorted, err := getSortedNames(true) - if err != nil { - return err - } - - fmt.Printf("Diffing applications [%s] in topological order\n\n", strings.Join(sorted, ", ")) - - for _, repo := range sorted { - d, err := diff.GetDiff(pathing.SanitizeFilepath(filepath.Join(repoRoot, repo)), "diff") - if err != nil { - return err - } - - if err := d.Execute(); err != nil { - return err - } - - fmt.Printf("\n") - } - return nil -} diff --git a/pkg/common/scaffold.go b/pkg/common/scaffold.go deleted file mode 100644 index 1d09c4de0..000000000 --- a/pkg/common/scaffold.go +++ /dev/null @@ -1,12 +0,0 @@ -package common - -import ( - "github.com/pluralsh/plural-cli/pkg/api" - "github.com/pluralsh/plural-cli/pkg/scaffold" - "github.com/urfave/cli" -) - -func HandleScaffold(c *cli.Context) error { - client := api.NewClient() - return scaffold.ApplicationScaffold(client) -} diff --git a/pkg/common/validation.go b/pkg/common/validation.go index a72cb88e4..9070cb6e5 100644 --- a/pkg/common/validation.go +++ b/pkg/common/validation.go @@ -5,17 +5,13 @@ import ( "os" "github.com/pluralsh/plural-cli/pkg/provider" - "github.com/pluralsh/plural-cli/pkg/utils/errors" "github.com/pluralsh/polly/algorithms" "github.com/AlecAivazis/survey/v2" "github.com/pluralsh/plural-cli/pkg/api" "github.com/pluralsh/plural-cli/pkg/config" "github.com/pluralsh/plural-cli/pkg/executor" - "github.com/pluralsh/plural-cli/pkg/manifest" "github.com/pluralsh/plural-cli/pkg/utils" - "github.com/pluralsh/plural-cli/pkg/utils/git" - "github.com/pluralsh/plural-cli/pkg/utils/pathing" "github.com/urfave/cli" ) @@ -40,26 +36,6 @@ func RequireArgs(fn func(*cli.Context) error, args []string) func(*cli.Context) } } -func Rooted(fn func(*cli.Context) error) func(*cli.Context) error { - return func(c *cli.Context) error { - if err := RepoRoot(); err != nil { - return err - } - - return fn(c) - } -} - -func Owned(fn func(*cli.Context) error) func(*cli.Context) error { - return func(c *cli.Context) error { - if err := ValidateOwner(); err != nil { - return err - } - - return fn(c) - } -} - func Affirmed(fn func(*cli.Context) error, msg string, envKey string) func(*cli.Context) error { return func(c *cli.Context) error { if !Affirm(msg, envKey) { @@ -100,27 +76,6 @@ func Tracked(fn func(*cli.Context) error, event string) func(*cli.Context) error } } -func ValidateOwner() error { - path := manifest.ProjectManifestPath() - project, err := manifest.ReadProject(path) - if err != nil { - return fmt.Errorf("Your workspace hasn't been configured. Try running `plural init`.") - } - - if owner := project.Owner; owner != nil { - conf := config.Read() - if owner.Endpoint != conf.Endpoint { - return fmt.Errorf( - "The owner of this project is actually %s; plural environment = %s", - owner.Email, - config.PluralUrl(owner.Endpoint), - ) - } - } - - return nil -} - func Confirm(msg string, envKey string) bool { res := true conf, ok := utils.GetEnvBoolValue(envKey) @@ -147,26 +102,6 @@ func Affirm(msg string, envKey string) bool { return res } -func RepoRoot() error { - dir, err := os.Getwd() - if err != nil { - return err - } - // santiize the filepath, respecting the OS - dir = pathing.SanitizeFilepath(dir) - - root, err := git.Root() - if err != nil { - return err - } - - if root != dir { - return fmt.Errorf("You must run this command at the root of your git repository") - } - - return nil -} - func LatestVersion(fn func(*cli.Context) error) func(*cli.Context) error { return func(c *cli.Context) error { if os.Getenv("PLURAL_CONSOLE") != "1" && os.Getenv("CLOUD_SHELL") != "1" && algorithms.Coinflip(1, 5) { @@ -200,17 +135,6 @@ func InitKubeconfig(fn func(*cli.Context) error) func(*cli.Context) error { } } -func RequireKind(fn func(*cli.Context) error) func(*cli.Context) error { - return func(c *cli.Context) error { - exists, _ := utils.Which("kind") - if !exists { - return fmt.Errorf("The kind CLI is not installed") - } - - return fn(c) - } -} - func CommitMsg(c *cli.Context) string { if commit := c.String("commit"); commit != "" { return commit @@ -226,20 +150,3 @@ func CommitMsg(c *cli.Context) string { return "" } - -func UpstreamSynced(fn func(*cli.Context) error) func(*cli.Context) error { - return func(c *cli.Context) error { - changed, sha, err := git.HasUpstreamChanges() - if err != nil { - utils.LogError().Println(err) - return errors.ErrorWrap(ErrNoGit, "Failed to get git information") - } - - force := c.Bool("force") - if !changed && !force { - return errors.ErrorWrap(ErrRemoteDiff, fmt.Sprintf("Expecting HEAD at commit=%s", sha)) - } - - return fn(c) - } -} diff --git a/pkg/common/version.go b/pkg/common/version.go index 100e23967..015802add 100644 --- a/pkg/common/version.go +++ b/pkg/common/version.go @@ -6,8 +6,6 @@ import ( "runtime" "strings" - "golang.org/x/mod/semver" - "github.com/pluralsh/plural-cli/pkg/utils" "github.com/urfave/cli" ) @@ -22,14 +20,6 @@ var ( Date = "" ) -func VersionValid(vsn string) bool { - current := Version - if !strings.HasPrefix(current, "v") { - current = fmt.Sprintf("v%s", current) - } - return semver.Compare(vsn, current) <= 0 -} - func checkRecency() error { if os.Getenv("CLOUD_SHELL") == "1" || os.Getenv("PLURAL_CONSOLE") == "1" { return nil diff --git a/pkg/helm/helm.go b/pkg/helm/helm.go index 807fcc72b..01c9543a3 100644 --- a/pkg/helm/helm.go +++ b/pkg/helm/helm.go @@ -72,25 +72,6 @@ func Template(conf *action.Configuration, name, namespace, path string, isUpgrad return manifests.Bytes(), nil } -func Lint(path, namespace string, values map[string]interface{}) error { - client := action.NewLint() - client.Namespace = namespace - result := client.Run([]string{path}, values) - // All the Errors that are generated by a chart - // that failed a lint will be included in the - // results.Messages so we only need to print - // the Errors if there are no Messages. - if len(result.Messages) == 0 { - for _, err := range result.Errors { - fmt.Printf("Error %s\n", err) - } - } - if len(result.Errors) != 0 { - return fmt.Errorf("failed") - } - return nil -} - func AddRepo(repoName, repoUrl string) error { repoFile := getEnvVar("HELM_REPOSITORY_CONFIG", helmpath.ConfigPath("repositories.yaml")) err := os.MkdirAll(filepath.Dir(repoFile), os.ModePerm) diff --git a/pkg/logs/api.go b/pkg/logs/api.go deleted file mode 100644 index 1f3bbaa06..000000000 --- a/pkg/logs/api.go +++ /dev/null @@ -1,33 +0,0 @@ -package logs - -import ( - "github.com/pluralsh/plural-cli/pkg/kubernetes" - "github.com/pluralsh/plural-cli/pkg/kubernetes/logs" - "github.com/pluralsh/plural-cli/pkg/utils" - "github.com/pluralsh/plural-operator/apis/platform/v1alpha1" -) - -func List(kube kubernetes.Kube, namespace string) (*v1alpha1.LogTailList, error) { - return kube.LogTailList(namespace) -} - -func Print(tails *v1alpha1.LogTailList) error { - headers := []string{"Name", "Follow", "Target"} - return utils.PrintTable[v1alpha1.LogTail](tails.Items, headers, func(log v1alpha1.LogTail) ([]string, error) { - follow := "False" - if log.Spec.Follow { - follow = "True" - } - - return []string{log.Name, follow, log.Spec.Target}, nil - }) -} - -func Tail(kube kubernetes.Kube, namespace string, name string) error { - tail, err := kube.LogTail(namespace, name) - if err != nil { - return err - } - - return logs.Logs(namespace, tail.Spec.Target, int64(tail.Spec.Limit)) -} diff --git a/pkg/output/terraform.go b/pkg/output/terraform.go deleted file mode 100644 index 1dd00521d..000000000 --- a/pkg/output/terraform.go +++ /dev/null @@ -1,32 +0,0 @@ -package output - -import ( - "encoding/json" - "os/exec" -) - -type TerraformOutputItem struct { - Value interface{} - Type interface{} -} - -func TerraformOutput(path string) (out map[string]interface{}, err error) { - cmd := exec.Command("terraform", "output", "-json") - cmd.Dir = path - res, err := cmd.Output() - if err != nil { - return - } - - outType := make(map[string]TerraformOutputItem) - err = json.Unmarshal(res, &outType) - if err != nil { - return - } - - out = make(map[string]interface{}) - for key, val := range outType { - out[key] = val.Value - } - return -} diff --git a/pkg/scaffold/application.go b/pkg/scaffold/application.go deleted file mode 100644 index f85597eb8..000000000 --- a/pkg/scaffold/application.go +++ /dev/null @@ -1,66 +0,0 @@ -package scaffold - -import ( - "os" - "path/filepath" - - "github.com/imdario/mergo" - "github.com/pluralsh/plural-cli/pkg/output" - "github.com/pluralsh/plural-cli/pkg/utils" - "github.com/pluralsh/plural-cli/pkg/utils/git" - "github.com/pluralsh/plural-cli/pkg/utils/pathing" - "sigs.k8s.io/yaml" -) - -type Applications struct { - Root string -} - -func BuildApplications(root string) *Applications { - return &Applications{Root: root} -} - -func NewApplications() (*Applications, error) { - root, err := git.Root() - if err != nil { - return nil, err - } - - return BuildApplications(root), nil -} - -func (apps *Applications) HelmValues(app string) (map[string]interface{}, error) { - valuesFile := pathing.SanitizeFilepath(filepath.Join(apps.Root, app, "helm", app, "values.yaml")) - vals := make(map[string]interface{}) - valsContent, err := os.ReadFile(valuesFile) - if err != nil { - return nil, err - } - if err := yaml.Unmarshal(valsContent, &vals); err != nil { - return nil, err - } - - defaultValuesFile := pathing.SanitizeFilepath(filepath.Join(apps.Root, app, "helm", app, "default-values.yaml")) - defaultVals := make(map[string]interface{}) - if utils.Exists(defaultValuesFile) { - defaultValsContent, err := os.ReadFile(defaultValuesFile) - if err != nil { - return nil, err - } - if err := yaml.Unmarshal(defaultValsContent, &defaultVals); err != nil { - return nil, err - } - } - - err = mergo.Merge(&defaultVals, vals, mergo.WithOverride) - if err != nil { - return nil, err - } - - return defaultVals, err -} - -func (apps *Applications) TerraformValues(app string) (map[string]interface{}, error) { - out, err := output.Read(pathing.SanitizeFilepath(filepath.Join(apps.Root, app, "output.yaml"))) - return out.Terraform, err -} diff --git a/pkg/scaffold/application_test.go b/pkg/scaffold/application_test.go deleted file mode 100644 index d5c56fb8b..000000000 --- a/pkg/scaffold/application_test.go +++ /dev/null @@ -1,74 +0,0 @@ -package scaffold_test - -import ( - "os" - "path/filepath" - "testing" - - "github.com/pluralsh/plural-cli/pkg/scaffold" - "github.com/stretchr/testify/assert" -) - -const values_file = `console: - ingress: - console_dns: console.onplural.sh -` - -const defaultValues_file = `console: - enabled: true - ingress: - annotations: - external-dns.alpha.kubernetes.io/target: 127.0.0.1 - console_dns: console.onplural.sh - license: abc - provider: kind -` - -func TestListRepositories(t *testing.T) { - tests := []struct { - name string - appName string - expectedResponse map[string]interface{} - }{ - { - name: `test HelmValues`, - appName: "test", - expectedResponse: map[string]interface{}{ - "console": map[string]interface{}{ - "enabled": true, - "ingress": map[string]interface{}{ - "annotations": map[string]interface{}{ - "external-dns.alpha.kubernetes.io/target": "127.0.0.1", - }, - "console_dns": "console.onplural.sh", - }, - "license": "abc", - "provider": "kind", - }, - }, - }, - } - for _, test := range tests { - t.Run(test.name, func(t *testing.T) { - dir, err := os.MkdirTemp("", "config") - assert.NoError(t, err) - defer os.RemoveAll(dir) - - dirPath := filepath.Join(dir, test.appName, "helm", test.appName) - err = os.MkdirAll(dirPath, os.ModePerm) - assert.NoError(t, err) - err = os.WriteFile(filepath.Join(dirPath, "default-values.yaml"), []byte(defaultValues_file), 0644) - assert.NoError(t, err) - err = os.WriteFile(filepath.Join(dirPath, "values.yaml"), []byte(values_file), 0644) - assert.NoError(t, err) - - application := scaffold.Applications{ - Root: dir, - } - res, err := application.HelmValues("test") - - assert.NoError(t, err) - assert.Equal(t, test.expectedResponse, res) - }) - } -} diff --git a/pkg/scaffold/constants.go b/pkg/scaffold/constants.go deleted file mode 100644 index aa3401772..000000000 --- a/pkg/scaffold/constants.go +++ /dev/null @@ -1,116 +0,0 @@ -package scaffold - -import ( - "path/filepath" -) - -const ( - defaultNotes = `Your {{ .Release.Name }} installation` - sep = string(filepath.Separator) - - defaultIgnore = `# Patterns to ignore when building packages. -# This supports shell glob matching, relative path matching, and -# negation (prefixed with !). Only one pattern per line. -.DS_Store -# Common VCS dirs -.git/ -.gitignore -.bzr/ -.bzrignore -.hg/ -.hgignore -.svn/ -# Common backup files -*.swp -*.bak -*.tmp -*~ -# Various IDEs -.project -.idea/ -*.tmproj -.vscode/ -` - defaultApplication = `apiVersion: app.k8s.io/v1beta1 -kind: Application -metadata: - name: {{ .Name }} -spec: - selector: - matchLabels: {} - componentKinds: - - group: v1 - kind: Service - - group: networking.k8s.io - kind: Ingress - - group: cert-manager.io - kind: Certificate - - group: apps - kind: StatefulSet - - group: apps - kind: Deployment - - group: batch - kind: CronJob - - group: batch - kind: Job - descriptor: - type: {{ .Name }} - version: "{{ .Version }}" - description: {{ .Description }} - icons: - - src: {{ .Icon }} - {{ if .DarkIcon }} - - src: {{ .DarkIcon }} - {{ end }} -` - - appTemplate = ` - {{- if .Values.global }} - {{- if .Values.global.application }} - {{- if .Values.global.application.links }} - links: - {{ toYaml .Values.global.application.links | nindent 6 }} - {{- end }} - {{- if .Values.global.application.info }} - info: - {{ toYaml .Values.global.application.info | nindent 4 }} - {{- end }} - {{- end }} - {{- end }} -` - - licenseSecret = `apiVersion: v1 -kind: Secret -metadata: - name: plural-license-secret -stringData: - license: {{ .Values.plrl.license }} -` - - license = `apiVersion: platform.plural.sh/v1alpha1 -kind: License -metadata: - name: %s -spec: - secretRef: - name: plural-license-secret - key: license -` - - // ChartfileName is the default Chart file name. - ChartfileName = "Chart.yaml" - // ValuesfileName is the default values file name. - TemplatesDir = "templates" - // ChartsDir is the relative directory name for charts dependencies. - ChartsDir = "charts" - // IgnorefileName is the name of the Helm ignore file. - IgnorefileName = ".helmignore" - // NotesName is the name of the example NOTES.txt file. - NotesName = TemplatesDir + sep + "NOTES.txt" - // file to put the default application resource in - ApplicationName = TemplatesDir + sep + "application.yaml" - // file to put the license secret in - LicenseSecretName = TemplatesDir + sep + "secret.yaml" - // file to put the license crd in - LicenseCrdName = TemplatesDir + sep + "license.yaml" -) diff --git a/pkg/scaffold/crd.go b/pkg/scaffold/crd.go deleted file mode 100644 index 3a4ed6e8b..000000000 --- a/pkg/scaffold/crd.go +++ /dev/null @@ -1,52 +0,0 @@ -package scaffold - -import ( - "fmt" - "io" - "net/http" - "os" - "path/filepath" - - "github.com/pluralsh/plural-cli/pkg/api" - "github.com/pluralsh/plural-cli/pkg/utils" - "github.com/pluralsh/plural-cli/pkg/utils/pathing" - "github.com/pluralsh/plural-cli/pkg/wkspace" -) - -func (s *Scaffold) buildCrds(wk *wkspace.Workspace) error { - utils.Highlight("syncing crds") - if err := os.RemoveAll(s.Root); err != nil { - return err - } - - if err := os.MkdirAll(s.Root, os.ModePerm); err != nil { - return err - } - - for _, chartInst := range wk.Charts { - for _, crd := range chartInst.Version.Crds { - utils.Highlight(".") - if err := writeCrd(s.Root, &crd); err != nil { - fmt.Print("\n") - return err - } - } - } - - utils.Success("\u2713\n") - return nil -} - -func writeCrd(path string, crd *api.Crd) error { - resp, err := http.Get(crd.Blob) - if err != nil { - return err - } - - contents, err := io.ReadAll(resp.Body) - if err != nil { - return err - } - - return os.WriteFile(pathing.SanitizeFilepath(filepath.Join(path, crd.Name)), contents, 0644) -} diff --git a/pkg/scaffold/creator.go b/pkg/scaffold/creator.go deleted file mode 100644 index cdfde92ae..000000000 --- a/pkg/scaffold/creator.go +++ /dev/null @@ -1,102 +0,0 @@ -package scaffold - -import ( - "os" - "path/filepath" - - "github.com/AlecAivazis/survey/v2" - "github.com/pluralsh/plural-cli/pkg/api" - "github.com/pluralsh/plural-cli/pkg/utils" - "github.com/pluralsh/plural-cli/pkg/utils/pathing" - "helm.sh/helm/v3/pkg/chartutil" -) - -var categories = []string{ - "data", - "productivity", - "devops", - "database", - "messaging", - "security", - "network", -} - -var scaffoldSurvey = []*survey.Question{ - { - Name: "application", - Prompt: &survey.Input{Message: "Enter the name of your application:"}, - Validate: utils.ValidateAlphaNumeric, - }, - { - Name: "publisher", - Prompt: &survey.Input{Message: "Enter the name of your publisher:"}, - Validate: survey.Required, - }, - { - Name: "category", - Prompt: &survey.Select{ - Message: "Enter the category for your application:", - Options: categories, - }, - Validate: survey.Required, - }, - { - Name: "postgres", - Prompt: &survey.Confirm{Message: "Will your application need a postgres database?"}, - Validate: survey.Required, - }, - { - Name: "ingress", - Prompt: &survey.Confirm{Message: "Does your application need an ingress?"}, - Validate: survey.Required, - }, -} - -func ApplicationScaffold(client api.Client) error { - input := api.ScaffoldInputs{} - if err := survey.Ask(scaffoldSurvey, &input); err != nil { - return err - } - - scaffolds, err := client.Scaffolds(&input) - if err != nil { - return api.GetErrorResponse(err, "Scaffolds") - } - - app := input.Application - helmPath := pathing.SanitizeFilepath(filepath.Join(app, "helm")) - pwd, err := os.Getwd() - if err != nil { - return err - } - - if err := os.MkdirAll(helmPath, 0755); err != nil { - return err - } - - if err := os.Chdir(helmPath); err != nil { - return err - } - - if err := createHelm(app); err != nil { - return err - } - - if err := os.Chdir(pathing.SanitizeFilepath(filepath.Join(pwd, app))); err != nil { - return err - } - - for _, scaffold := range scaffolds { - if err := utils.WriteFile(scaffold.Path, []byte(scaffold.Content)); err != nil { - return err - } - } - - return nil -} - -func createHelm(name string) error { - chartname := filepath.Base(name) - _, err := chartutil.Create(chartname, filepath.Dir(name)) - return err -} diff --git a/pkg/scaffold/default.go b/pkg/scaffold/default.go deleted file mode 100644 index b52b41abc..000000000 --- a/pkg/scaffold/default.go +++ /dev/null @@ -1,59 +0,0 @@ -package scaffold - -import ( - "os" - "path/filepath" - - "github.com/hashicorp/hcl" - "github.com/pluralsh/plural-cli/pkg/executor" - "github.com/pluralsh/plural-cli/pkg/utils/pathing" - "github.com/pluralsh/plural-cli/pkg/wkspace" -) - -func Read(path string) (*Build, error) { - fullpath := pathing.SanitizeFilepath(filepath.Join(path, "build.hcl")) - contents, err := os.ReadFile(fullpath) - build := Build{} - if err != nil { - return &build, err - } - - err = hcl.Decode(&build, string(contents)) - if err != nil { - return &build, err - } - - return &build, nil -} - -func Default(w *wkspace.Workspace, name string) (b *Build) { - return &Build{ - Metadata: &Metadata{Name: name}, - Scaffolds: []*Scaffold{ - { - Name: "terraform", - Path: "terraform", - Type: TF, - }, - { - Name: "crds", - Type: CRD, - Path: "crds", - }, - { - Name: "helm", - Type: HELM, - Path: pathing.SanitizeFilepath(filepath.Join("helm", name)), - Preflight: []*executor.Step{ - { - Name: "update-deps", - Command: "plural", - Args: []string{"wkspace", "helm-deps"}, - Target: "Chart.yaml", - Sha: "", - }, - }, - }, - }, - } -} diff --git a/pkg/scaffold/helm.go b/pkg/scaffold/helm.go deleted file mode 100644 index 26204d60c..000000000 --- a/pkg/scaffold/helm.go +++ /dev/null @@ -1,431 +0,0 @@ -package scaffold - -import ( - "bytes" - "fmt" - "os" - "path/filepath" - "sort" - "strings" - ttpl "text/template" - - "gopkg.in/yaml.v2" - - "github.com/pluralsh/plural-cli/pkg/api" - "github.com/pluralsh/plural-cli/pkg/config" - "github.com/pluralsh/plural-cli/pkg/manifest" - "github.com/pluralsh/plural-cli/pkg/provider" - scftmpl "github.com/pluralsh/plural-cli/pkg/scaffold/template" - "github.com/pluralsh/plural-cli/pkg/template" - "github.com/pluralsh/plural-cli/pkg/utils" - "github.com/pluralsh/plural-cli/pkg/utils/errors" - "github.com/pluralsh/plural-cli/pkg/utils/git" - "github.com/pluralsh/plural-cli/pkg/utils/pathing" - "github.com/pluralsh/plural-cli/pkg/wkspace" -) - -type dependency struct { - Name string - Version string - Repository string - Condition string -} - -type chart struct { - ApiVersion string `yaml:"apiVersion"` - Name string - Description string - Version string - AppVersion string `yaml:"appVersion"` - Dependencies []dependency -} - -func (s *Scaffold) handleHelm(wk *wkspace.Workspace) error { - if err := s.createChart(wk); err != nil { - return err - } - - if err := s.buildChartValues(wk); err != nil { - return err - } - - return nil -} - -func (s *Scaffold) chartDependencies(w *wkspace.Workspace) []dependency { - dependencies := make([]dependency, len(w.Charts)) - repo := w.Installation.Repository - for i, chartInstallation := range w.Charts { - dependencies[i] = dependency{ - chartInstallation.Chart.Name, - chartInstallation.Version.Version, - repoUrl(w, repo.Name, chartInstallation.Chart.Name), - fmt.Sprintf("%s.enabled", chartInstallation.Chart.Name), - } - } - sort.SliceStable(dependencies, func(i, j int) bool { - return dependencies[i].Name < dependencies[j].Name - }) - return dependencies -} - -func Notes(installation *api.Installation) error { - repoRoot, err := git.Root() - if err != nil { - return err - } - - if installation.Repository != nil && installation.Repository.Notes == "" { - return nil - } - - context, err := manifest.ReadContext(manifest.ContextPath()) - if err != nil { - return err - } - - prov, err := provider.GetProvider() - if err != nil { - return err - } - - repo := installation.Repository.Name - ctx, _ := context.Repo(installation.Repository.Name) - - vals := map[string]interface{}{ - "Values": ctx, - "Configuration": context.Configuration, - "License": installation.LicenseKey, - "OIDC": installation.OIDCProvider, - "Region": prov.Region(), - "Project": prov.Project(), - "Cluster": prov.Cluster(), - "Config": config.Read(), - "Provider": prov.Name(), - "Context": prov.Context(), - "Applications": BuildApplications(repoRoot), - } - - if context.Globals != nil { - vals["Globals"] = context.Globals - } - - if context.SMTP != nil { - vals["SMTP"] = context.SMTP.Configuration() - } - - if installation.AcmeKeyId != "" { - vals["Acme"] = map[string]string{ - "KeyId": installation.AcmeKeyId, - "Secret": installation.AcmeSecret, - } - } - - apps := &Applications{Root: repoRoot} - values, err := apps.HelmValues(repo) - if err != nil { - return err - } - - for k, v := range values { - vals[k] = v - } - - tmpl, err := template.MakeTemplate(installation.Repository.Notes) - if err != nil { - return err - } - - var buf bytes.Buffer - buf.Grow(5 * 1024) - if err := tmpl.Execute(&buf, vals); err != nil { - return err - } - - fmt.Println(buf.String()) - return nil -} - -func (s *Scaffold) buildChartValues(w *wkspace.Workspace) error { - ctx, _ := w.Context.Repo(w.Installation.Repository.Name) - valuesFile := pathing.SanitizeFilepath(filepath.Join(s.Root, "values.yaml")) - defaultValuesFile := pathing.SanitizeFilepath(filepath.Join(s.Root, "default-values.yaml")) - defaultPrevVals, _ := prevValues(defaultValuesFile) - prevVals, _ := prevValues(valuesFile) - - if !utils.Exists(valuesFile) { - if err := os.WriteFile(valuesFile, []byte("{}\n"), 0644); err != nil { - return err - } - } - - conf := config.Read() - - apps, err := NewApplications() - if err != nil { - return err - } - - proj, err := manifest.FetchProject() - if err != nil { - return err - } - - vals := map[string]interface{}{ - "Values": ctx, - "Configuration": w.Context.Configuration, - "License": w.Installation.LicenseKey, - "OIDC": w.Installation.OIDCProvider, - "Region": w.Provider.Region(), - "Project": w.Provider.Project(), - "Cluster": w.Provider.Cluster(), - "Config": conf, - "Provider": w.Provider.Name(), - "Context": w.Provider.Context(), - "Network": proj.Network, - "Applications": apps, - } - - if proj.AvailabilityZones != nil { - vals["AvailabilityZones"] = proj.AvailabilityZones - } - - if w.Context.SMTP != nil { - vals["SMTP"] = w.Context.SMTP.Configuration() - } - - if w.Context.Globals != nil { - vals["Globals"] = w.Context.Globals - } - - if w.Installation.AcmeKeyId != "" { - vals["Acme"] = map[string]string{ - "KeyId": w.Installation.AcmeKeyId, - "Secret": w.Installation.AcmeSecret, - } - } - - // get previous values from default-values.yaml if exists otherwise from values.yaml - if utils.Exists(defaultValuesFile) { - for k, v := range defaultPrevVals { - vals[k] = v - } - } else { - for k, v := range prevVals { - vals[k] = v - } - } - defaultValues, err := scftmpl.BuildValuesFromTemplate(vals, w) - if err != nil { - return err - } - - io, err := yaml.Marshal(defaultValues) - if err != nil { - return err - } - - // TODO: Remove this after testing. It is deprecated as values.yaml migration should not longer be required. - // mapValues, err := getValues(valuesFile) - // if err != nil { - // return err - // } - // patchValues, err := utils.PatchInterfaceMap(defaultValues, mapValues) - // if err != nil { - // return err - // } - // - // values, err := yaml.Marshal(patchValues) - // if err != nil { - // return err - // } - // if err := utils.WriteFile(valuesFile, values); err != nil { - // return err - // } - - return utils.WriteFile(defaultValuesFile, io) -} - -//nolint:golint,unused -func getValues(path string) (map[string]map[string]interface{}, error) { - values := map[string]map[string]interface{}{} - valuesFromFile, err := os.ReadFile(path) - if err != nil { - return nil, err - } - if err := yaml.Unmarshal(valuesFromFile, &values); err != nil { - return nil, err - } - return values, nil -} - -func prevValues(filename string) (map[string]map[string]interface{}, error) { - vals := make(map[string]map[interface{}]interface{}) - parsed := make(map[string]map[string]interface{}) - if !utils.Exists(filename) { - return parsed, nil - } - - contents, err := os.ReadFile(filename) - if err != nil { - return parsed, err - } - if err := yaml.Unmarshal(contents, &vals); err != nil { - return parsed, err - } - - for k, v := range vals { - parsed[k] = utils.CleanUpInterfaceMap(v) - } - - return parsed, nil -} - -func (s *Scaffold) createChart(w *wkspace.Workspace) error { - repo := w.Installation.Repository - if len(w.Charts) == 0 { - return utils.HighlightError(fmt.Errorf("No charts installed for this repository. You might need to run `plural bundle install %s `.", repo.Name)) - } - - version := "0.1.0" - filename := pathing.SanitizeFilepath(filepath.Join(s.Root, ChartfileName)) - - if utils.Exists(filename) { - content, err := os.ReadFile(filename) - if err != nil { - return errors.ErrorWrap(err, "Failed to read existing Chart.yaml") - } - - chart := chart{} - if err := yaml.Unmarshal(content, &chart); err != nil { - return errors.ErrorWrap(err, "Existing Chart.yaml has invalid yaml formatting") - } - - version = chart.Version - } - - appVersion := appVersion(w.Charts) - chart := &chart{ - ApiVersion: "v2", - Name: repo.Name, - Description: fmt.Sprintf("A helm chart for %s", repo.Name), - Version: version, - AppVersion: appVersion, - Dependencies: s.chartDependencies(w), - } - - chartFile, err := yaml.Marshal(chart) - if err != nil { - return err - } - - if err := utils.WriteFile(filename, chartFile); err != nil { - return err - } - - files := []struct { - path string - content []byte - force bool - }{ - { - // .helmignore - path: pathing.SanitizeFilepath(filepath.Join(s.Root, IgnorefileName)), - content: []byte(defaultIgnore), - }, - { - // NOTES.txt - path: pathing.SanitizeFilepath(filepath.Join(s.Root, NotesName)), - content: []byte(defaultNotes), - force: true, - }, - { - // templates/secret.yaml - path: pathing.SanitizeFilepath(filepath.Join(s.Root, LicenseSecretName)), - content: []byte(licenseSecret), - force: true, - }, - { - // templates/licnse.yaml - path: pathing.SanitizeFilepath(filepath.Join(s.Root, LicenseCrdName)), - content: []byte(fmt.Sprintf(license, repo.Name)), - force: true, - }, - } - - for _, file := range files { - if !file.force { - if _, err := os.Stat(file.path); err == nil { - // File exists and is okay. Skip it. - continue - } - } - if err := utils.WriteFile(file.path, file.content); err != nil { - return err - } - } - - // remove old requirements.yaml files to fully migrate to helm v3 - reqsFile := pathing.SanitizeFilepath(filepath.Join(s.Root, "requirements.yaml")) - if utils.Exists(reqsFile) { - if err := os.Remove(reqsFile); err != nil { - return err - } - } - - tpl, err := ttpl.New("gotpl").Parse(defaultApplication) - if err != nil { - return err - } - - var appBuffer bytes.Buffer - vars := map[string]string{ - "Name": repo.Name, - "Version": appVersion, - "Description": repo.Description, - "Icon": repo.Icon, - "DarkIcon": repo.DarkIcon, - } - if err := tpl.Execute(&appBuffer, vars); err != nil { - return err - } - appBuffer.WriteString(appTemplate) - - if err := utils.WriteFile(pathing.SanitizeFilepath(filepath.Join(s.Root, ApplicationName)), appBuffer.Bytes()); err != nil { - return err - } - - // Need to add the ChartsDir explicitly as it does not contain any file OOTB - if err := os.MkdirAll(pathing.SanitizeFilepath(filepath.Join(s.Root, ChartsDir)), 0755); err != nil { - return err - } - - return nil -} - -func repoUrl(w *wkspace.Workspace, repo string, chart string) string { - if w.Links != nil { - if path, ok := w.Links.Helm[chart]; ok { - return fmt.Sprintf("file://%s", path) - } - } - url := strings.ReplaceAll(w.Config.BaseUrl(), "https", "cm") - return fmt.Sprintf("%s/cm/%s", url, repo) -} - -func appVersion(charts []*api.ChartInstallation) string { - for _, inst := range charts { - if inst.Chart.Dependencies.Application { - if inst.Version.Helm != nil { - if vsn, ok := inst.Version.Helm["appVersion"]; ok { - if v, ok := vsn.(string); ok { - return v - } - } - } - return inst.Version.Version - } - } - - return "0.1.0" -} diff --git a/pkg/scaffold/helm_test.go b/pkg/scaffold/helm_test.go deleted file mode 100644 index 3ba426b9d..000000000 --- a/pkg/scaffold/helm_test.go +++ /dev/null @@ -1,214 +0,0 @@ -package scaffold - -import ( - "os" - "path/filepath" - "testing" - - "github.com/stretchr/testify/assert" - "gopkg.in/yaml.v2" - - "github.com/pluralsh/plural-cli/pkg/api" - "github.com/pluralsh/plural-cli/pkg/config" - "github.com/pluralsh/plural-cli/pkg/manifest" - "github.com/pluralsh/plural-cli/pkg/provider" - pluraltest "github.com/pluralsh/plural-cli/pkg/test" - "github.com/pluralsh/plural-cli/pkg/utils/git" - "github.com/pluralsh/plural-cli/pkg/wkspace" -) - -func TestBuildChartValues(t *testing.T) { - tests := []struct { - name string - workspace *wkspace.Workspace - existingValues string - expectedDefaultValues string - expectedValues string - man *manifest.ProjectManifest - expectError bool - }{ - { - name: `test build values first time`, - expectedDefaultValues: `plrl: - license: abc -test: - extraEnv: - - name: ARM_USE_MSI - value: "true" -`, - expectedValues: "", - man: &manifest.ProjectManifest{ - Cluster: "test", - Bucket: "test", - Project: "test", - Provider: "kind", - Region: "test", - }, - workspace: &wkspace.Workspace{ - Installation: &api.Installation{ - Id: "123", - Repository: &api.Repository{ - Name: "test", - }, - LicenseKey: "abc", - }, - Charts: []*api.ChartInstallation{ - { - Id: "123", - Chart: &api.Chart{ - Id: "123", - Name: "test", - }, - Version: &api.Version{ - ValuesTemplate: `output = { - extraEnv={ - { - name="ARM_USE_MSI", - value = 'true' - - }, - } -}`, - TemplateType: "LUA", - }, - }, - }, - Context: &manifest.Context{ - Configuration: map[string]map[string]interface{}{ - "test": {}, - }, - }, - }, - }, - { - name: `test build values when values.yaml exists, add and override variables`, - expectedDefaultValues: `plrl: - license: abc -test: - extraEnv: - - name: ARM_USE_MSI - value: "true" -`, - expectedValues: `plrl: - license: abc -test: - enabled: false - extraEnv: - - name: TEST - value: "false" -`, - existingValues: `plrl: - license: abc -test: - enabled: false - extraEnv: - - name: TEST - value: "false" -`, - man: &manifest.ProjectManifest{ - Cluster: "test", - Bucket: "test", - Project: "test", - Provider: "kind", - Region: "test", - }, - workspace: &wkspace.Workspace{ - Installation: &api.Installation{ - Id: "123", - Repository: &api.Repository{ - Name: "test", - }, - LicenseKey: "abc", - }, - Charts: []*api.ChartInstallation{ - { - Id: "123", - Chart: &api.Chart{ - Id: "123", - Name: "test", - }, - Version: &api.Version{ - ValuesTemplate: `output = { - extraEnv={ - { - name="ARM_USE_MSI", - value = 'true' - - }, - } -}`, - TemplateType: "LUA", - }, - }, - }, - Context: &manifest.Context{ - Configuration: map[string]map[string]interface{}{ - "test": {}, - }, - }, - }, - }, - } - for _, test := range tests { - t.Run(test.name, func(t *testing.T) { - dir, err := os.MkdirTemp("", "config") - assert.NoError(t, err) - defer os.RemoveAll(dir) - - os.Setenv("HOME", dir) - defer os.Unsetenv("HOME") - - err = os.Chdir(dir) - assert.NoError(t, err) - - data, err := yaml.Marshal(test.man) - assert.NoError(t, err) - err = os.WriteFile("workspace.yaml", data, os.FileMode(0755)) - assert.NoError(t, err) - - err = os.WriteFile("values.yaml", []byte(test.existingValues), os.FileMode(0755)) - assert.NoError(t, err) - - defaultConfig := pluraltest.GenDefaultConfig() - err = defaultConfig.Save(config.ConfigName) - assert.NoError(t, err) - - _, err = git.Init() - assert.NoError(t, err) - _, err = git.GitRaw("config", "--global", "user.email", "test@plural.com") - assert.NoError(t, err) - _, err = git.GitRaw("config", "--global", "user.name", "test") - assert.NoError(t, err) - _, err = git.GitRaw("add", "-A") - assert.NoError(t, err) - _, err = git.GitRaw("commit", "-m", "init") - assert.NoError(t, err) - _, err = git.GitRaw("remote", "add", "origin", "git@git.test.com:portfolio/space.space_name.git") - assert.NoError(t, err) - - provider, err := provider.FromManifest(test.man) - if err != nil { - t.Fatal(err) - } - test.workspace.Provider = provider - scaffold := Scaffold{ - Name: "test", - Root: dir, - } - - err = scaffold.buildChartValues(test.workspace) - if test.expectError { - assert.Error(t, err) - return - } - assert.NoError(t, err) - defaultValues, err := os.ReadFile(filepath.Join(dir, "default-values.yaml")) - assert.NoError(t, err) - assert.Equal(t, test.expectedDefaultValues, string(defaultValues)) - - values, err := os.ReadFile(filepath.Join(dir, "values.yaml")) - assert.NoError(t, err) - assert.Equal(t, test.expectedValues, string(values)) - }) - } -} diff --git a/pkg/scaffold/readme.go b/pkg/scaffold/readme.go deleted file mode 100644 index e16ede9a3..000000000 --- a/pkg/scaffold/readme.go +++ /dev/null @@ -1,186 +0,0 @@ -package scaffold - -import ( - "fmt" - "os" - "path" - "path/filepath" - "reflect" - "regexp" - "runtime" - "strings" - "sync" - - log "github.com/sirupsen/logrus" - - "github.com/norwoodj/helm-docs/pkg/document" - "github.com/norwoodj/helm-docs/pkg/helm" - "github.com/spf13/viper" -) - -// parallelProcessIterable runs the visitFn function on each element of the iterable, using -// parallelism number of worker goroutines. The iterable may be a slice or a map. In the case of a -// map, the argument passed to visitFn will be the key. -func parallelProcessIterable(iterable interface{}, parallelism int, visitFn func(elem interface{})) { - workChan := make(chan interface{}) - - wg := &sync.WaitGroup{} - wg.Add(parallelism) - - for i := 0; i < parallelism; i++ { - go func() { - defer wg.Done() - for elem := range workChan { - visitFn(elem) - } - }() - } - - iterableValue := reflect.ValueOf(iterable) - - if iterableValue.Kind() == reflect.Map { - for _, key := range iterableValue.MapKeys() { - workChan <- key.Interface() - } - } else { - sliceLen := iterableValue.Len() - for i := 0; i < sliceLen; i++ { - workChan <- iterableValue.Index(i).Interface() - } - } - - close(workChan) - wg.Wait() -} - -func getDocumentationParsingConfigFromArgs() (helm.ChartValuesDocumentationParsingConfig, error) { - var regexps []*regexp.Regexp - regexpStrings := []string{".*service\\.type", ".*image\\.repository", ".*image\\.tag"} - for _, item := range regexpStrings { - regex, err := regexp.Compile(item) - if err != nil { - return helm.ChartValuesDocumentationParsingConfig{}, err - } - regexps = append(regexps, regex) - } - return helm.ChartValuesDocumentationParsingConfig{ - StrictMode: false, - AllowedMissingValuePaths: []string{}, - AllowedMissingValueRegexps: regexps, - }, nil -} - -func readDocumentationInfoByChartPath(chartSearchRoot string, parallelism int) (map[string]helm.ChartDocumentationInfo, error) { - var fullChartSearchRoot string - - if path.IsAbs(chartSearchRoot) { - fullChartSearchRoot = chartSearchRoot - } else { - cwd, err := os.Getwd() - if err != nil { - return nil, fmt.Errorf("error getting working directory: %w", err) - } - - fullChartSearchRoot = filepath.Join(cwd, chartSearchRoot) - } - - chartDirs, err := helm.FindChartDirectories(fullChartSearchRoot) - if err != nil { - return nil, fmt.Errorf("error finding chart directories: %w", err) - } - - log.Infof("Found Chart directories [%s]", strings.Join(chartDirs, ", ")) - - templateFiles := []string{"README.md.gotmpl"} - log.Debugf("Rendering from optional template files [%s]", strings.Join(templateFiles, ", ")) - - documentationInfoByChartPath := make(map[string]helm.ChartDocumentationInfo, len(chartDirs)) - documentationInfoByChartPathMu := &sync.Mutex{} - documentationParsingConfig, err := getDocumentationParsingConfigFromArgs() - if err != nil { - return nil, fmt.Errorf("error parsing the linting config%w", err) - } - - parallelProcessIterable(chartDirs, parallelism, func(elem interface{}) { - chartDir := elem.(string) - info, err := helm.ParseChartInformation(filepath.Join(chartSearchRoot, chartDir), documentationParsingConfig) - if err != nil { - log.Warnf("Error parsing information for chart %s, skipping: %s", chartDir, err) - return - } - documentationInfoByChartPathMu.Lock() - documentationInfoByChartPath[info.ChartDirectory] = info - documentationInfoByChartPathMu.Unlock() - }) - - return documentationInfoByChartPath, nil -} - -func getChartToGenerate(documentationInfoByChartPath map[string]helm.ChartDocumentationInfo) map[string]helm.ChartDocumentationInfo { - generateDirectories := []string{} - if len(generateDirectories) == 0 { - return documentationInfoByChartPath - } - documentationInfoToGenerate := make(map[string]helm.ChartDocumentationInfo, len(generateDirectories)) - var skipped = false - for _, chartDirectory := range generateDirectories { - if info, ok := documentationInfoByChartPath[chartDirectory]; ok { - documentationInfoToGenerate[chartDirectory] = info - } else { - log.Warnf("Couldn't find documentation Info for <%s> - skipping", chartDirectory) - skipped = true - } - } - if skipped { - possibleCharts := []string{} - for path := range documentationInfoByChartPath { - possibleCharts = append(possibleCharts, path) - } - log.Warnf("Some charts listed in `chart-to-generate` wasn't found. List of charts to choose: [%s]", strings.Join(possibleCharts, ", ")) - } - return documentationInfoToGenerate -} - -func writeDocumentation(chartSearchRoot string, documentationInfoByChartPath map[string]helm.ChartDocumentationInfo, dryRun bool, parallelism int) { - templateFiles := []string{"README.md.gotmpl"} - badgeStyle := "flat-square" - - log.Debugf("Rendering from optional template files [%s]", strings.Join(templateFiles, ", ")) - - documentDependencyValues := true - documentationInfoToGenerate := getChartToGenerate(documentationInfoByChartPath) - - parallelProcessIterable(documentationInfoToGenerate, parallelism, func(elem interface{}) { - info := documentationInfoByChartPath[elem.(string)] - var err error - var dependencyValues []document.DependencyValues - if documentDependencyValues { - dependencyValues, err = document.GetDependencyValues(info, documentationInfoByChartPath) - if err != nil { - log.Warnf("Error evaluating dependency values for chart %s, skipping: %v", info.ChartDirectory, err) - return - } - } - document.PrintDocumentation(info, chartSearchRoot, templateFiles, dryRun, "v1.11.0", badgeStyle, dependencyValues) - }) -} - -func Readme(chartSearchRoot string, dryRun bool) error { - parallelism := runtime.NumCPU() * 2 - log.SetLevel(log.FatalLevel) - viper.Set("values-file", "values.yaml") - viper.Set("output-file", "README.md") - - // On dry runs all output goes to stdout, and so as to not jumble things, generate serially. - if dryRun { - parallelism = 1 - } - - documentationInfoByChartPath, err := readDocumentationInfoByChartPath(chartSearchRoot, parallelism) - if err != nil { - return err - } - - writeDocumentation(chartSearchRoot, documentationInfoByChartPath, dryRun, parallelism) - return nil -} diff --git a/pkg/scaffold/scaffold.go b/pkg/scaffold/scaffold.go deleted file mode 100644 index 287f0addc..000000000 --- a/pkg/scaffold/scaffold.go +++ /dev/null @@ -1,166 +0,0 @@ -package scaffold - -import ( - "os" - "path/filepath" - - "github.com/pluralsh/plural-cli/pkg/executor" - "github.com/pluralsh/plural-cli/pkg/utils/git" - "github.com/pluralsh/plural-cli/pkg/utils/pathing" - "github.com/pluralsh/plural-cli/pkg/wkspace" - "github.com/pluralsh/polly/algorithms" - "github.com/pluralsh/polly/containers" - "github.com/rodaine/hclencoder" -) - -type Scaffold struct { - Name string `hcl:",key"` - Path string `hcl:"path"` - Type string `hcl:"type"` - Root string `hcle:"omit"` - - Preflight []*executor.Step `hcl:"preflight"` -} - -type Metadata struct { - Name string `hcl:"name"` -} - -type Build struct { - Metadata *Metadata `hcl:"metadata"` - Scaffolds []*Scaffold `hcl:"scaffold"` -} - -const ( - TF = "terraform" - HELM = "helm" - CRD = "crd" -) - -func Scaffolds(wk *wkspace.Workspace) (*Build, error) { - repoRoot, err := git.Root() - if err != nil { - return &Build{}, err - } - - name := wk.Installation.Repository.Name - wkspaceRoot := pathing.SanitizeFilepath(filepath.Join(repoRoot, name)) - - build, err := Read(wkspaceRoot) - def := Default(wk, name) - if err != nil { - return def, nil - } - - return merge(build, def), nil -} - -func merge(build *Build, base *Build) *Build { - byName := make(map[string]*Scaffold) - for _, scaffold := range build.Scaffolds { - byName[scaffold.Name] = scaffold - } - for _, scaffold := range base.Scaffolds { - if prev, ok := byName[scaffold.Name]; ok { - mergePreflights(scaffold, prev) - } - byName[scaffold.Name] = scaffold - } - - // to handle helm v3 transition - delete(byName, "add-repo") - - graph := containers.NewGraph[string]() - for i := 0; i < len(build.Scaffolds)-1; i++ { - graph.AddEdge(build.Scaffolds[i].Name, build.Scaffolds[i+1].Name) - } - - for i := 0; i < len(base.Scaffolds)-1; i++ { - graph.AddEdge(base.Scaffolds[i].Name, base.Scaffolds[i+1].Name) - } - - sorted, _ := algorithms.TopsortGraph(graph) - build.Scaffolds = algorithms.Map(sorted, func(n string) *Scaffold { return byName[n] }) - return build -} - -func mergePreflights(new, old *Scaffold) { - byName := make(map[string]*executor.Step) - for _, preflight := range old.Preflight { - byName[preflight.Name] = preflight - } - - for _, preflight := range new.Preflight { - if prev, ok := byName[preflight.Name]; ok { - preflight.Sha = prev.Sha - } - } -} - -func (b *Build) Flush(root string) error { - io, err := hclencoder.Encode(&b) - if err != nil { - return err - } - - path, _ := filepath.Abs(pathing.SanitizeFilepath(filepath.Join(root, b.Metadata.Name, "build.hcl"))) - return os.WriteFile(path, io, 0644) -} - -func (s *Scaffold) Execute(wk *wkspace.Workspace, force bool) error { - os.Setenv("HELM_REPO_ACCESS_TOKEN", wk.Config.Token) - err := s.executeType(wk) - if err != nil { - return err - } - - ignore := []string{} - for _, preflight := range s.Preflight { - if force { - preflight.Sha = "" - } - - sha, err := preflight.Execute(s.Root, ignore) - if err != nil { - return err - } - preflight.Sha = sha - } - - return nil -} - -func (s *Scaffold) executeType(wk *wkspace.Workspace) error { - switch s.Type { - case TF: - return s.handleTerraform(wk) - case HELM: - return s.handleHelm(wk) - case CRD: - return s.buildCrds(wk) - default: - return nil - } -} - -func (b *Build) Execute(wk *wkspace.Workspace, force bool) error { - root, err := git.Root() - if err != nil { - return err - } - - for _, s := range b.Scaffolds { - path := pathing.SanitizeFilepath(filepath.Join(root, b.Metadata.Name, s.Path)) - if err := os.MkdirAll(path, os.ModePerm); err != nil { - b.Flush(root) - return err - } - s.Root = path - if err := s.Execute(wk, force); err != nil { - b.Flush(root) - return err - } - } - - return b.Flush(root) -} diff --git a/pkg/scaffold/secrets.go b/pkg/scaffold/secrets.go deleted file mode 100644 index 6837ec540..000000000 --- a/pkg/scaffold/secrets.go +++ /dev/null @@ -1,20 +0,0 @@ -package scaffold - -import ( - "bytes" - "fmt" - - "github.com/pluralsh/plural-cli/pkg/utils" -) - -const filterTmpl = "%s filter=plural-crypt diff=plural-crypt\n" - -func buildSecrets(file string, secrets []string) error { - var b bytes.Buffer - b.Grow(32) - for _, secret := range secrets { - fmt.Fprintf(&b, filterTmpl, secret) - } - - return utils.WriteFile(file, b.Bytes()) -} diff --git a/pkg/scaffold/template/template.go b/pkg/scaffold/template/template.go index f59f65de1..1e5098cd1 100644 --- a/pkg/scaffold/template/template.go +++ b/pkg/scaffold/template/template.go @@ -36,46 +36,6 @@ func templateInfo(path string) (t gqlclient.TemplateType, contents string, err e return } -func BuildValuesFromTemplate(vals map[string]interface{}, w *wkspace.Workspace) (map[string]map[string]interface{}, error) { - globals := map[string]interface{}{} - output := make(map[string]map[string]interface{}) - for _, chartInst := range w.Charts { - chartName := chartInst.Chart.Name - tplate := chartInst.Version.ValuesTemplate - templateType := chartInst.Version.TemplateType - - if w.Links != nil { - if path, ok := w.Links.Helm[chartName]; ok { - var err error - templateType, tplate, err = templateInfo(path) - if err != nil { - return nil, err - } - } - } - - switch templateType { - case gqlclient.TemplateTypeGotemplate: - if err := FromGoTemplate(vals, globals, output, chartName, tplate); err != nil { - return nil, err - } - case gqlclient.TemplateTypeLua: - if err := FromLuaTemplate(vals, globals, output, chartName, tplate); err != nil { - return nil, err - } - } - } - - if len(globals) > 0 { - output["global"] = globals - } - - output["plrl"] = map[string]interface{}{ - "license": w.Installation.LicenseKey, - } - return output, nil -} - func TmpValuesFile(path string) (f *os.File, err error) { conf := config.Read() if strings.HasSuffix(path, "lua") { diff --git a/pkg/scaffold/terraform.go b/pkg/scaffold/terraform.go deleted file mode 100644 index 1efbff6d6..000000000 --- a/pkg/scaffold/terraform.go +++ /dev/null @@ -1,283 +0,0 @@ -package scaffold - -import ( - "bytes" - "fmt" - "net/http" - "os" - "path/filepath" - "regexp" - "sort" - "strings" - - "golang.org/x/exp/maps" - - "golang.org/x/mod/semver" - - "github.com/pluralsh/plural-cli/pkg/api" - "github.com/pluralsh/plural-cli/pkg/config" - "github.com/pluralsh/plural-cli/pkg/template" - "github.com/pluralsh/plural-cli/pkg/utils" - "github.com/pluralsh/plural-cli/pkg/utils/pathing" - "github.com/pluralsh/plural-cli/pkg/wkspace" -) - -const moduleTemplate = `module "{{ .Values.name }}" { - source = "{{ .Values.path }}" - -### BEGIN MANUAL SECTION <<{{ .Values.name }}>> -{{ .Values.Manual }} -### END MANUAL SECTION <<{{ .Values.name }}>> - -{{ .Values.conf | nindent 2 }} -{{ range $key, $val := .Values.deps }} - {{ $key }} = module.{{ $val }} -{{- end }} -} -` - -const outputTemplate = `output "{{ .Name }}" { - value = module.{{ .Module }}.{{ .Value }} - sensitive = true -} -` - -const helpDoc = ` -############## Helpful Hints ################### - -# Any configuration updates should be done in this file in a manual section. You can also create files alongside this one, -# and plural build will preserve them. That's the ideal strategy if you want to add additional resources like a sql instance -# or vpn gateway. - -# The submodule folders within this directory are generated by plural build and we cannot guarantee a change in -# them will be merged properly. - -################################################# - -` - -func (scaffold *Scaffold) handleTerraform(wk *wkspace.Workspace) error { - repo := wk.Installation.Repository - providerCtx := buildContext(wk, repo.Name, wk.Terraform) - - var providerVersions semver.ByVersion - - if len(wk.Terraform) == 0 { - return nil - } - - for i := range wk.Terraform { - providerVersions = append(providerVersions, wk.Terraform[i].Terraform.Dependencies.ProviderVsn) - } - - semver.Sort(providerVersions) - - // use the latest version of the TF template for the provider - backend, err := wk.Provider.CreateBackend(repo.Name, providerVersions[providerVersions.Len()-1], providerCtx) - if err != nil { - return err - } - - apps, err := NewApplications() - if err != nil { - return err - } - - if err := scaffold.untarModules(wk); err != nil { - return err - } - - mainFile := pathing.SanitizeFilepath(filepath.Join(scaffold.Root, "main.tf")) - contents, err := utils.ReadFile(mainFile) - if err != nil { - contents = "" - } - - var modules = make([]string, len(wk.Terraform)+1) - modules[0] = helpDoc + backend - ctx, _ := wk.Context.Repo(repo.Name) - links := wk.Links - for i, tfInst := range wk.Terraform { - tf := tfInst.Terraform - linkPath := "" - if links != nil { - if path, ok := links.Terraform[tf.Name]; ok { - linkPath = path - } - } - - var buf bytes.Buffer - buf.Grow(5 * 1024) - plate := tfInst.Version.ValuesTemplate - if linkPath != "" { - var err error - plate, err = utils.ReadFile(pathing.SanitizeFilepath(filepath.Join(linkPath, "terraform.tfvars"))) - if err != nil { - return err - } - } - - tmpl, err := template.MakeTemplate(plate) - if err != nil { - return err - } - values := map[string]interface{}{ - "Values": ctx, - "Configuration": wk.Context.Configuration, - "Cluster": wk.Provider.Cluster(), - "Project": wk.Provider.Project(), - "Namespace": wk.Config.Namespace(repo.Name), - "Region": wk.Provider.Region(), - "Context": wk.Provider.Context(), - "Config": config.Read(), - "Applications": apps, - } - if err := tmpl.Execute(&buf, values); err != nil { - return err - } - - module := make(map[string]interface{}) - module["name"] = tf.Name - if linkPath != "" { - module["path"] = linkPath - } else { - module["path"] = "./" + tf.Name - } - - module["conf"] = buf.String() - if tf.Dependencies != nil && tf.Dependencies.Wirings != nil { - module["deps"] = tf.Dependencies.Wirings.Terraform - } else { - module["deps"] = map[string]interface{}{} - } - module["Manual"] = manualSection(contents, tf.Name) - - var moduleBuf bytes.Buffer - moduleBuf.Grow(1024) - if err := template.RenderTemplate(&moduleBuf, moduleTemplate, module); err != nil { - return err - } - - modules[i+1] = moduleBuf.String() - - valuesFile := pathing.SanitizeFilepath(filepath.Join(scaffold.Root, tf.Name, "terraform.tfvars")) - os.Remove(valuesFile) - - moduleBuf.Reset() - buf.Reset() - } - - if err := utils.WriteFile(mainFile, []byte(strings.Join(modules, "\n\n"))); err != nil { - return err - } - - if err := scaffold.buildOutputs(wk); err != nil { - return err - } - - secrets := buildTfSecrets(wk.Terraform) - if err := buildSecrets(pathing.SanitizeFilepath(filepath.Join(scaffold.Root, ".gitattributes")), secrets); err != nil { - return err - } - - return nil -} - -// TODO: move to some sort of scaffold util? -func (scaffold *Scaffold) untarModules(wk *wkspace.Workspace) error { - length := len(wk.Terraform) - utils.Highlight("unpacking %d %s", len(wk.Terraform), utils.Pluralize("module", "modules", length)) - for _, tfInst := range wk.Terraform { - tf := tfInst.Terraform - v := tfInst.Version - path := pathing.SanitizeFilepath(filepath.Join(scaffold.Root, tf.Name)) - if err := os.MkdirAll(path, os.ModePerm); err != nil { - fmt.Print("\n") - return err - } - - if err := untar(v, tf, path); err != nil { - fmt.Print("\n") - return err - } - fmt.Print(".") - } - - utils.Success("\u2713\n") - return nil -} - -func (scaffold *Scaffold) buildOutputs(wk *wkspace.Workspace) error { - var buf bytes.Buffer - buf.Grow(5 * 1024) - - tmp, err := template.MakeTemplate(outputTemplate) - if err != nil { - return err - } - - sort.SliceStable(wk.Terraform, func(i, j int) bool { - return wk.Terraform[i].Terraform.Name < wk.Terraform[j].Terraform.Name - }) - for _, tfInst := range wk.Terraform { - tfName := tfInst.Terraform.Name - outs := tfInst.Version.Dependencies.Outputs - outputs := maps.Keys(outs) - sort.Strings(outputs) - for _, name := range outputs { - value := outs[name] - err = tmp.Execute(&buf, map[string]interface{}{"Name": name, "Value": value, "Module": tfName}) - if err != nil { - return err - } - buf.WriteString("\n\n") - } - } - - outputFile := pathing.SanitizeFilepath(filepath.Join(scaffold.Root, "outputs.tf")) - return utils.WriteFile(outputFile, buf.Bytes()) -} - -func untar(v *api.Version, tf *api.Terraform, dir string) error { - resp, err := http.Get(v.Package) - if err != nil { - return err - } - - return utils.Untar(resp.Body, dir, tf.Name) -} - -func manualSection(contents, name string) string { - re := regexp.MustCompile(fmt.Sprintf(`(?s)### BEGIN MANUAL SECTION <<%s>>(.*)### END MANUAL SECTION <<%s>>`, name, name)) - matches := re.FindStringSubmatch(contents) - if len(matches) > 0 { - return strings.TrimSpace(matches[1]) - } - - return "" -} - -func buildTfSecrets(installations []*api.TerraformInstallation) []string { - res := []string{} - for _, inst := range installations { - res = append(res, inst.Version.Dependencies.Secrets...) - } - return res -} - -func buildContext(wk *wkspace.Workspace, repo string, installations []*api.TerraformInstallation) map[string]interface{} { - ctx := map[string]interface{}{ - "Namespace": wk.Config.Namespace(repo), - } - - for _, inst := range installations { - for k, v := range inst.Version.Dependencies.ProviderWirings { - if k == "cluster" { - ctx["Cluster"] = v - } - ctx[k] = v - } - } - - return ctx -} diff --git a/pkg/wkspace/actions.go b/pkg/wkspace/actions.go deleted file mode 100644 index 040238f37..000000000 --- a/pkg/wkspace/actions.go +++ /dev/null @@ -1,172 +0,0 @@ -package wkspace - -import ( - "fmt" - "os" - "path/filepath" - "strings" - "time" - - "go.mercari.io/hcledit" - "helm.sh/helm/v3/pkg/action" - - "github.com/pluralsh/plural-cli/pkg/executor" - "github.com/pluralsh/plural-cli/pkg/helm" - "github.com/pluralsh/plural-cli/pkg/kubernetes" - "github.com/pluralsh/plural-cli/pkg/utils" - "github.com/pluralsh/plural-cli/pkg/utils/git" - "github.com/pluralsh/plural-cli/pkg/utils/pathing" -) - -type checker func(s string) bool - -var alwaysErr checker = func(s string) bool { return false } - -func (c checker) execSuppressed(command string, args ...string) (err error) { - for retry := 2; retry >= 0; retry-- { - utils.Highlight("%s %s ~> ", command, strings.Join(args, " ")) - cmd, out := executor.SuppressedCommand(command, args...) - err = executor.RunCommand(cmd, out) - if err == nil || c(out.Format()) { - break - } - fmt.Printf("retrying command, number of retries remaining: %d\n", retry) - } - - return -} - -func (w *Workspace) DestroyHelm() error { - // ensure current kubeconfig is correct before destroying stuff - if err := w.Provider.KubeConfig(); err != nil { - return err - } - - name := w.Installation.Repository.Name - namespace := w.Config.Namespace(name) - var err error - for retry := 2; retry >= 0; retry-- { - err = uninstallHelm(name, namespace) - if err == nil { - break - } - fmt.Printf("retrying command, number of retries remaining: %d\n", retry) - } - - return err - -} - -func (w *Workspace) Bounce() error { - return w.ToMinimal().BounceHelm(false, nil, nil, nil) -} - -func (w *Workspace) HelmDiff() error { - return w.ToMinimal().DiffHelm() -} - -func (w *Workspace) Destroy() error { - if err := w.DestroyHelm(); err != nil { - return err - } - - if err := w.DestroyTerraform(); err != nil { - return err - } - - return w.Reset() -} - -func (w *Workspace) Reset() error { - repo := w.Installation.Repository - repoRoot, err := git.Root() - if err != nil { - return err - } - - deployFile := pathing.SanitizeFilepath(filepath.Join(repoRoot, repo.Name, "deploy.hcl")) - editor, err := hcledit.ReadFile(deployFile) - if err != nil { - return err - } - if err := editor.Update("step.*.sha", ""); err != nil { - return err - } - if err := editor.OverWriteFile(); err != nil { - return err - } - - return nil -} - -func (w *Workspace) DestroyTerraform() error { - repo := w.Installation.Repository - repoRoot, err := git.Root() - if err != nil { - return err - } - path, err := filepath.Abs(pathing.SanitizeFilepath(filepath.Join(repoRoot, repo.Name, "terraform"))) - if err != nil { - return err - } - - time.AfterFunc(1*time.Minute, func() { - kube, err := kubernetes.Kubernetes() - if err != nil { - fmt.Printf("Could not set up k8s client due to %s\n", err) - return - } - - ns := w.Config.Namespace(repo.Name) - if err := kube.FinalizeNamespace(ns); err != nil { - return - } - }) - - if err := os.Chdir(path); err != nil { - return err - } - if err := alwaysErr.execSuppressed("terraform", "init", "-upgrade"); err != nil { - return err - } - - return alwaysErr.execSuppressed("terraform", "destroy", "-auto-approve") -} - -func uninstallHelm(name, namespace string) error { - exists, err := isReleaseAvailable(name, namespace) - if err != nil { - return err - } - if exists { - actionConfig, err := helm.GetActionConfig(namespace) - if err != nil { - return err - } - client := action.NewUninstall(actionConfig) - - _, err = client.Run(name) - if err != nil { - return err - } - } - return nil -} - -func isReleaseAvailable(name, namespace string) (bool, error) { - actionConfig, err := helm.GetActionConfig(namespace) - if err != nil { - return false, err - } - client := action.NewList(actionConfig) - resp, err := client.Run() - if err != nil { - return false, err - } - for _, rel := range resp { - if rel.Name == name { - return true, nil - } - } - return false, nil -} diff --git a/pkg/wkspace/builder.go b/pkg/wkspace/builder.go index 417dbce3e..4e8b00afc 100644 --- a/pkg/wkspace/builder.go +++ b/pkg/wkspace/builder.go @@ -1,273 +1,13 @@ package wkspace import ( - "fmt" - "os" - "path/filepath" - "strings" - - "golang.org/x/mod/semver" - - "github.com/pluralsh/plural-cli/pkg/api" "github.com/pluralsh/plural-cli/pkg/config" - "github.com/pluralsh/plural-cli/pkg/crypto" - "github.com/pluralsh/plural-cli/pkg/diff" - "github.com/pluralsh/plural-cli/pkg/executor" "github.com/pluralsh/plural-cli/pkg/manifest" "github.com/pluralsh/plural-cli/pkg/provider" - "github.com/pluralsh/plural-cli/pkg/utils" - "github.com/pluralsh/plural-cli/pkg/utils/git" - "github.com/pluralsh/plural-cli/pkg/utils/pathing" - - "github.com/pluralsh/polly/algorithms" ) type Workspace struct { - Provider provider.Provider - Installation *api.Installation - Charts []*api.ChartInstallation - Terraform []*api.TerraformInstallation - Config *config.Config - Manifest *manifest.ProjectManifest - Context *manifest.Context - Links *manifest.Links -} - -func New(client api.Client, inst *api.Installation) (*Workspace, error) { - ci, ti, err := client.GetPackageInstallations(inst.Repository.Id) - if err != nil { - return nil, api.GetErrorResponse(err, "GetPackageInstallations") - } - - projPath, _ := filepath.Abs("workspace.yaml") - project, err := manifest.ReadProject(projPath) - if err != nil { - return nil, err - } - - prov, err := provider.FromManifest(project) - if err != nil { - return nil, err - } - - conf := config.Read() - ctx, err := manifest.ReadContext(manifest.ContextPath()) - if err != nil { - return nil, err - } - - manifestPath := manifestPath(inst.Repository.Name) - man, err := manifest.Read(manifestPath) - var links *manifest.Links - if err == nil { - links = man.Links - } - - wk := &Workspace{ - Provider: prov, - Installation: inst, - Charts: ci, - Terraform: ti, - Config: &conf, - Context: ctx, - Manifest: project, - Links: links, - } - return wk, nil -} - -func Configured(repo string) bool { - ctx, err := manifest.ReadContext(manifest.ContextPath()) - if err != nil { - return false - } - - _, ok := ctx.Configuration[repo] - return ok -} - -func (wk *Workspace) PrintLinks() { - if wk.Links == nil { - return - } - - fmt.Printf("\n") - doPrintLinks("helm", wk.Links.Helm) - doPrintLinks("terraform", wk.Links.Terraform) -} - -func (wk *Workspace) RequiredCliVsn() (vsn string, ok bool) { - cVsns := algorithms.Map(wk.Charts, func(c *api.ChartInstallation) string { return c.Version.Dependencies.CliVsn }) - tVsns := algorithms.Map(wk.Terraform, func(t *api.TerraformInstallation) string { return t.Version.Dependencies.CliVsn }) - vsns := algorithms.Filter(append(cVsns, tVsns...), func(v string) bool { return v != "" }) - vsns = algorithms.Map(vsns, func(v string) string { - if strings.HasPrefix(v, "v") { - return v - } - return fmt.Sprintf("v%s", v) - }) - vsns = algorithms.Filter(vsns, semver.IsValid) - if len(vsns) == 0 { - return - } - - semver.Sort(vsns) - return vsns[len(vsns)-1], true -} - -func doPrintLinks(name string, links map[string]string) { - if len(links) == 0 { - return - } - - utils.Highlight("configured %s links:\n", name) - for name, path := range links { - fmt.Printf("\t%s ==> %s\n", name, path) - } - - fmt.Printf("\n") -} - -func (wk *Workspace) ToMinimal() *MinimalWorkspace { - return &MinimalWorkspace{ - Name: wk.Installation.Repository.Name, - Provider: wk.Provider, - Config: wk.Config, - Manifest: wk.Manifest, - } -} - -func (wk *Workspace) Prepare() error { - repo := wk.Installation.Repository - repoRoot, err := git.Root() - if err != nil { - return err - } - - if err := mkdir(pathing.SanitizeFilepath(filepath.Join(repoRoot, repo.Name))); err != nil { - return err - } - - path, _ := manifest.ManifestPath(repo.Name) - prev, err := manifest.Read(path) - if err != nil { - prev = &manifest.Manifest{} - } - - man := wk.BuildManifest(prev) - if err := man.Write(path); err != nil { - return err - } - - if err := wk.buildExecution(repoRoot); err != nil { - return err - } - - if err := wk.buildDiff(repoRoot); err != nil { - return err - } - - return nil -} - -func (wk *Workspace) requiresWait() bool { - for _, ci := range wk.Charts { - if ci.Version.Dependencies.Wait { - return true - } - } - - for _, ti := range wk.Terraform { - if ti.Version.Dependencies.Wait { - return true - } - } - return false -} - -func (wk *Workspace) buildExecution(repoRoot string) error { - name := wk.Installation.Repository.Name - wkspaceRoot := filepath.Join(repoRoot, name) - - if err := mkdir(pathing.SanitizeFilepath(filepath.Join(wkspaceRoot, ".plural"))); err != nil { - return err - } - - onceFile := pathing.SanitizeFilepath(filepath.Join(wkspaceRoot, ".plural", "ONCE")) - if err := os.WriteFile(onceFile, []byte("once"), 0644); err != nil { - return err - } - - nonceFile := pathing.SanitizeFilepath(filepath.Join(wkspaceRoot, ".plural", "NONCE")) - if err := os.WriteFile(nonceFile, []byte(crypto.RandString(32)), 0644); err != nil { - return err - } - - if err := executor.Ignore(wkspaceRoot); err != nil { - return err - } - - exec, _ := executor.GetExecution(pathing.SanitizeFilepath(wkspaceRoot), "deploy") - - return executor.DefaultExecution(name, exec).Flush(repoRoot) -} - -func (wk *Workspace) buildDiff(repoRoot string) error { - name := wk.Installation.Repository.Name - wkspaceRoot := pathing.SanitizeFilepath(filepath.Join(repoRoot, name)) - - d, _ := diff.GetDiff(pathing.SanitizeFilepath(wkspaceRoot), "diff") - - return diff.DefaultDiff(name, d).Flush(repoRoot) -} - -func DiffedRepos() ([]string, error) { - files, err := git.Modified() - repos := make(map[string]bool) - if err != nil { - return nil, err - } - - for _, file := range files { - // we don't want to respect the OS separators here, it is always a forwards slash on git - parts := strings.Split(file, "/") - if len(parts) <= 1 { - continue - } - - maybeRepo := parts[0] - if utils.Exists(manifestPath(maybeRepo)) && file != manifestPath(maybeRepo) { - repos[maybeRepo] = true - } - } - - result := make([]string, len(repos)) - count := 0 - for repo := range repos { - result[count] = repo - count++ - } - - return result, nil -} - -func isRepo(name string) bool { - repoRoot, err := git.Root() - if err != nil { - return false - } - - return utils.Exists(pathing.SanitizeFilepath(filepath.Join(repoRoot, name, "manifest.yaml"))) -} - -func mkdir(path string) error { - if err := os.MkdirAll(path, os.ModePerm); err != nil { - return err - } - return nil -} - -func manifestPath(repo string) string { - path, _ := filepath.Abs(pathing.SanitizeFilepath(filepath.Join(repo, "manifest.yaml"))) - return path + Provider provider.Provider + Config *config.Config + Context *manifest.Context } diff --git a/pkg/wkspace/builder_test.go b/pkg/wkspace/builder_test.go deleted file mode 100644 index 44f79719a..000000000 --- a/pkg/wkspace/builder_test.go +++ /dev/null @@ -1,59 +0,0 @@ -package wkspace - -import ( - "testing" - - "github.com/pluralsh/plural-cli/pkg/api" - "github.com/stretchr/testify/assert" -) - -func TestRequiredCliVersion(t *testing.T) { - w := &Workspace{ - Charts: []*api.ChartInstallation{ - { - Version: &api.Version{ - Dependencies: &api.Dependencies{ - CliVsn: "0.1.0", - }, - }, - }, - }, - Terraform: []*api.TerraformInstallation{ - { - Version: &api.Version{ - Dependencies: &api.Dependencies{ - CliVsn: "0.2.0", - }, - }, - }, - }, - } - vsn, ok := w.RequiredCliVsn() - assert.True(t, ok) - assert.Equal(t, "v0.2.0", vsn) -} - -func TestRequiredCliVersionEmpty(t *testing.T) { - w := &Workspace{ - Charts: []*api.ChartInstallation{ - { - Version: &api.Version{ - Dependencies: &api.Dependencies{ - CliVsn: "bogus", - }, - }, - }, - }, - Terraform: []*api.TerraformInstallation{ - { - Version: &api.Version{ - Dependencies: &api.Dependencies{ - CliVsn: "", - }, - }, - }, - }, - } - _, ok := w.RequiredCliVsn() - assert.False(t, ok) -} diff --git a/pkg/wkspace/graph.go b/pkg/wkspace/graph.go deleted file mode 100644 index 20af16f73..000000000 --- a/pkg/wkspace/graph.go +++ /dev/null @@ -1,113 +0,0 @@ -package wkspace - -import ( - "github.com/pluralsh/plural-cli/pkg/api" - "github.com/pluralsh/plural-cli/pkg/manifest" - "github.com/pluralsh/polly/algorithms" - "github.com/pluralsh/polly/containers" - "github.com/samber/lo" -) - -func SortAndFilter(installations []*api.Installation) ([]string, error) { - names := lo.FilterMap(installations, func(i *api.Installation, ind int) (string, bool) { - name := i.Repository.Name - return name, isRepo(name) - }) - return TopSortNames(names) -} - -func TopSort(client api.Client, installations []*api.Installation) ([]*api.Installation, error) { - repoMap := map[string]*api.Installation{} - g := containers.NewGraph[string]() - for _, installation := range installations { - repo := installation.Repository.Name - repoMap[repo] = installation - g.AddNode(repo) - - ci, tf, err := client.GetPackageInstallations(installation.Repository.Id) - if err != nil { - return nil, api.GetErrorResponse(err, "GetPackageInstallations") - } - deps := algorithms.Map(buildDependencies(repo, ci, tf), func(d *manifest.Dependency) string { return d.Repo }) - for _, d := range deps { - g.AddEdge(d, repo) - } - } - - names, err := algorithms.TopsortGraph(g) - if err != nil { - return nil, err - } - - insts := lo.FilterMap(names, func(r string, ind int) (i *api.Installation, ok bool) { - i, ok = repoMap[r] - return - }) - return insts, nil -} - -func TopSortNames(repos []string) ([]string, error) { - g := containers.NewGraph[string]() - for _, r := range repos { - g.AddNode(r) - deps, err := findDependencies(r) - if err != nil { - return nil, err - } - - for _, dep := range deps { - g.AddEdge(dep, r) - } - } - - return algorithms.TopsortGraph(g) -} - -func findDependencies(repo string) ([]string, error) { - man, err := manifest.Read(manifestPath(repo)) - if err != nil { - return nil, err - } - - return lo.FilterMap(man.Dependencies, func(d *manifest.Dependency, ind int) (string, bool) { return d.Repo, isRepo(d.Repo) }), nil -} - -func AllDependencies(repos []string) ([]string, error) { - deps := []string{} - visit := func(r string) error { - deps = append(deps, r) - return nil - } - for _, repo := range repos { - if err := algorithms.DFS(repo, findDependencies, visit); err != nil { - return deps, err - } - } - - return TopSortNames(lo.Uniq(deps)) -} - -func Dependencies(repo string) ([]string, error) { - // dfs from the repo to find all dependencies - deps := []string{} - visit := func(r string) error { - deps = append(deps, r) - return nil - } - if err := algorithms.DFS(repo, findDependencies, visit); err != nil { - return nil, err - } - - // topsort only those to find correct ordering - return TopSortNames(deps) -} - -func UntilRepo(client api.Client, repo string, installations []*api.Installation) ([]*api.Installation, error) { - topsorted, err := TopSort(client, installations) - if err != nil || repo == "" { - return topsorted, err - } - - ind := algorithms.Index(topsorted, func(i *api.Installation) bool { return i.Repository.Name == repo }) - return topsorted[:(ind + 1)], err -} diff --git a/pkg/wkspace/manifest.go b/pkg/wkspace/manifest.go deleted file mode 100644 index 0bcd2668e..000000000 --- a/pkg/wkspace/manifest.go +++ /dev/null @@ -1,82 +0,0 @@ -package wkspace - -import ( - "github.com/pluralsh/plural-cli/pkg/api" - "github.com/pluralsh/plural-cli/pkg/manifest" -) - -func (wk *Workspace) BuildManifest(prev *manifest.Manifest) *manifest.Manifest { - repository := wk.Installation.Repository - charts := make([]*manifest.ChartManifest, len(wk.Charts)) - terraform := make([]*manifest.TerraformManifest, len(wk.Terraform)) - - for i, ci := range wk.Charts { - charts[i] = buildChartManifest(ci) - } - for i, ti := range wk.Terraform { - terraform[i] = buildTerraformManifest(ti) - } - - return &manifest.Manifest{ - Id: repository.Id, - Name: repository.Name, - Cluster: wk.Provider.Cluster(), - Project: wk.Provider.Project(), - Bucket: wk.Provider.Bucket(), - Provider: wk.Provider.Name(), - Region: wk.Provider.Region(), - License: wk.Installation.LicenseKey, - Wait: wk.requiresWait(), - Charts: charts, - Terraform: terraform, - Dependencies: buildDependencies(repository.Name, wk.Charts, wk.Terraform), - Context: wk.Provider.Context(), - Links: prev.Links, - } -} - -func buildDependencies(repo string, charts []*api.ChartInstallation, tfs []*api.TerraformInstallation) []*manifest.Dependency { - var deps []*manifest.Dependency - var seen = make(map[string]bool) - - for _, chart := range charts { - for _, dep := range chart.Chart.Dependencies.Dependencies { - _, ok := seen[dep.Repo] - if ok { - continue - } - - if dep.Repo != repo { - deps = append(deps, &manifest.Dependency{Repo: dep.Repo}) - seen[dep.Repo] = true - } - } - } - - for _, tf := range tfs { - for _, dep := range tf.Terraform.Dependencies.Dependencies { - _, ok := seen[dep.Repo] - if ok { - continue - } - - if dep.Repo != repo { - deps = append(deps, &manifest.Dependency{Repo: dep.Repo}) - seen[dep.Repo] = true - } - } - } - - return deps -} - -func buildChartManifest(chartInstallation *api.ChartInstallation) *manifest.ChartManifest { - chart := chartInstallation.Chart - version := chartInstallation.Version - return &manifest.ChartManifest{Id: chart.Id, Name: chart.Name, VersionId: version.Id, Version: version.Version} -} - -func buildTerraformManifest(tfInstallation *api.TerraformInstallation) *manifest.TerraformManifest { - terraform := tfInstallation.Terraform - return &manifest.TerraformManifest{Id: terraform.Id, Name: terraform.Name} -} diff --git a/pkg/wkspace/notes.go b/pkg/wkspace/notes.go deleted file mode 100644 index 25c18bd27..000000000 --- a/pkg/wkspace/notes.go +++ /dev/null @@ -1 +0,0 @@ -package wkspace diff --git a/pkg/wkspace/validator.go b/pkg/wkspace/validator.go index 92cd81487..b75b186da 100644 --- a/pkg/wkspace/validator.go +++ b/pkg/wkspace/validator.go @@ -34,22 +34,6 @@ func Preflight() (bool, error) { return true, nil } -func (wk *Workspace) Validate() error { - for _, tf := range wk.Terraform { - if err := wk.providersValid(tf.Terraform.Dependencies.Providers); err != nil { - return err - } - } - - for _, chart := range wk.Charts { - if err := wk.providersValid(chart.Chart.Dependencies.Providers); err != nil { - return err - } - } - - return nil -} - func (wk *Workspace) providersValid(providers []string) error { if len(providers) == 0 { return nil From ab99a780ddd8f7cb3444c553ba07ab4d7947cf52 Mon Sep 17 00:00:00 2001 From: Marcin Maciaszczyk Date: Wed, 4 Dec 2024 15:40:34 +0100 Subject: [PATCH 11/37] replace ops and workspace commands with mgmt --- cmd/command/ops/ops.go | 80 --------- cmd/command/ops/ops_test.go | 140 --------------- cmd/command/plural/plural.go | 6 +- cmd/command/workspace/workspace.go | 227 ------------------------ cmd/command/workspace/workspace_test.go | 141 --------------- pkg/provider/provider.go | 7 +- 6 files changed, 4 insertions(+), 597 deletions(-) delete mode 100644 cmd/command/ops/ops.go delete mode 100644 cmd/command/ops/ops_test.go delete mode 100644 cmd/command/workspace/workspace.go delete mode 100644 cmd/command/workspace/workspace_test.go diff --git a/cmd/command/ops/ops.go b/cmd/command/ops/ops.go deleted file mode 100644 index c6fdc6860..000000000 --- a/cmd/command/ops/ops.go +++ /dev/null @@ -1,80 +0,0 @@ -package ops - -import ( - "fmt" - - "github.com/pluralsh/plural-cli/pkg/client" - "github.com/pluralsh/plural-cli/pkg/common" - "github.com/pluralsh/plural-cli/pkg/provider" - "github.com/pluralsh/plural-cli/pkg/utils" - "github.com/urfave/cli" -) - -type Plural struct { - client.Plural -} - -func Command(clients client.Plural) cli.Command { - p := Plural{ - Plural: clients, - } - return cli.Command{ - Name: "ops", - Usage: "Commands for simplifying cluster operations", - Subcommands: p.opsCommands(), - Category: "Debugging", - } -} - -func (p *Plural) opsCommands() []cli.Command { - return []cli.Command{ - { - Name: "terminate", - Usage: "terminates a worker node in your cluster", - ArgsUsage: "{name}", - Action: common.LatestVersion(common.RequireArgs(common.InitKubeconfig(p.handleTerminateNode), []string{"{name}"})), - }, - { - Name: "cluster", - Usage: "list the nodes in your cluster", - Action: common.LatestVersion(common.InitKubeconfig(p.handleListNodes)), - }, - } -} - -func (p *Plural) handleListNodes(c *cli.Context) error { - if err := p.InitKube(); err != nil { - return err - } - nodes, err := p.Nodes() - if err != nil { - return err - } - return common.PrintListNodes(nodes) -} - -func (p *Plural) handleTerminateNode(c *cli.Context) error { - name := c.Args().Get(0) - provider, err := getProvider() - if err != nil { - return err - } - if err := p.InitKube(); err != nil { - return err - } - node, err := p.Node(name) - if err != nil { - return err - } - - return provider.Decommision(node) -} - -func getProvider() (provider.Provider, error) { - _, found := utils.ProjectRoot() - if !found { - return nil, fmt.Errorf("project not initialized, run `plural init` to set up a workspace") - } - - return provider.GetProvider() -} diff --git a/cmd/command/ops/ops_test.go b/cmd/command/ops/ops_test.go deleted file mode 100644 index 22e8642d3..000000000 --- a/cmd/command/ops/ops_test.go +++ /dev/null @@ -1,140 +0,0 @@ -package ops_test - -import ( - "os" - "testing" - - "github.com/pluralsh/plural-cli/pkg/common" - - "github.com/pluralsh/plural-cli/cmd/command/plural" - clientcmd "github.com/pluralsh/plural-cli/pkg/client" - "github.com/pluralsh/plural-cli/pkg/manifest" - "github.com/pluralsh/plural-cli/pkg/test/mocks" - "github.com/pluralsh/plural-cli/pkg/utils/git" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/mock" - "gopkg.in/yaml.v2" - - v1 "k8s.io/api/core/v1" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" -) - -func TestListNodes(t *testing.T) { - tests := []struct { - name string - args []string - nodes *v1.NodeList - expectedResponse string - }{ - { - name: `test "ops cluster"`, - args: []string{plural.ApplicationName, "ops", "cluster"}, - nodes: &v1.NodeList{ - Items: []v1.Node{ - { - ObjectMeta: metav1.ObjectMeta{Name: "cluster-1"}, - Spec: v1.NodeSpec{}, - Status: v1.NodeStatus{}, - }, - { - ObjectMeta: metav1.ObjectMeta{Name: "cluster-2"}, - Spec: v1.NodeSpec{}, - Status: v1.NodeStatus{}, - }, - }, - }, - expectedResponse: `+-----------+-----+--------+--------+------+ -| NAME | CPU | MEMORY | REGION | ZONE | -+-----------+-----+--------+--------+------+ -| cluster-1 | 0 | 0 | | | -| cluster-2 | 0 | 0 | | | -+-----------+-----+--------+--------+------+ -`, - }, - } - for _, test := range tests { - t.Run(test.name, func(t *testing.T) { - client := mocks.NewClient(t) - kube := mocks.NewKube(t) - kube.On("Nodes").Return(test.nodes, nil) - app := plural.CreateNewApp(&plural.Plural{ - Plural: clientcmd.Plural{ - Client: client, - Kube: kube, - }, - }) - app.HelpName = plural.ApplicationName - os.Args = test.args - res, err := common.CaptureStdout(app, os.Args) - assert.NoError(t, err) - - assert.Equal(t, test.expectedResponse, res) - }) - } -} - -func TestTerminate(t *testing.T) { - tests := []struct { - name string - args []string - node *v1.Node - pm manifest.ProjectManifest - expectedResponse string - }{ - { - name: `test "ops terminate"`, - args: []string{plural.ApplicationName, "ops", "terminate", "cluster-1"}, - node: &v1.Node{ - - ObjectMeta: metav1.ObjectMeta{Name: "cluster-1"}, - Spec: v1.NodeSpec{}, - Status: v1.NodeStatus{}, - }, - pm: manifest.ProjectManifest{ - Cluster: "test", - Bucket: "test", - Project: "test", - Provider: "test", - Region: "test", - }, - expectedResponse: ``, - }, - } - for _, test := range tests { - t.Run(test.name, func(t *testing.T) { - // create temp environment - currentDir, err := os.Getwd() - assert.NoError(t, err) - dir, err := os.MkdirTemp("", "config") - assert.NoError(t, err) - defer func(path, currentDir string) { - _ = os.RemoveAll(path) - _ = os.Chdir(currentDir) - }(dir, currentDir) - err = os.Chdir(dir) - assert.NoError(t, err) - _, err = git.Init() - assert.NoError(t, err) - data, err := yaml.Marshal(test.pm) - assert.NoError(t, err) - err = os.WriteFile("workspace.yaml", data, os.FileMode(0755)) - assert.NoError(t, err) - - client := mocks.NewClient(t) - kube := mocks.NewKube(t) - kube.On("Node", mock.AnythingOfType("string")).Return(test.node, nil) - app := plural.CreateNewApp(&plural.Plural{ - Plural: clientcmd.Plural{ - Client: client, - Kube: kube, - }, - }) - app.HelpName = plural.ApplicationName - os.Args = test.args - res, err := common.CaptureStdout(app, os.Args) - assert.NoError(t, err) - - assert.Equal(t, test.expectedResponse, res) - }) - } -} diff --git a/cmd/command/plural/plural.go b/cmd/command/plural/plural.go index 474011f7e..9ba36a50e 100644 --- a/cmd/command/plural/plural.go +++ b/cmd/command/plural/plural.go @@ -10,13 +10,12 @@ import ( cryptocmd "github.com/pluralsh/plural-cli/cmd/command/crypto" "github.com/pluralsh/plural-cli/cmd/command/down" cmdinit "github.com/pluralsh/plural-cli/cmd/command/init" - "github.com/pluralsh/plural-cli/cmd/command/ops" + "github.com/pluralsh/plural-cli/cmd/command/mgmt" "github.com/pluralsh/plural-cli/cmd/command/pr" "github.com/pluralsh/plural-cli/cmd/command/profile" "github.com/pluralsh/plural-cli/cmd/command/up" "github.com/pluralsh/plural-cli/cmd/command/version" "github.com/pluralsh/plural-cli/cmd/command/vpn" - "github.com/pluralsh/plural-cli/cmd/command/workspace" "github.com/pluralsh/plural-cli/pkg/client" "github.com/pluralsh/plural-cli/pkg/common" conf "github.com/pluralsh/plural-cli/pkg/config" @@ -162,12 +161,11 @@ func CreateNewApp(plural *Plural) *cli.App { cryptocmd.Command(plural.Plural), clone.Command(), down.Command(), - ops.Command(plural.Plural), + mgmt.Command(plural.Plural), profile.Command(), pr.Command(plural.Plural), cmdinit.Command(plural.Plural), up.Command(plural.Plural), - workspace.Command(plural.Plural, plural.HelmConfiguration), vpn.Command(plural.Plural), version.Command(), } diff --git a/cmd/command/workspace/workspace.go b/cmd/command/workspace/workspace.go deleted file mode 100644 index 0d7214f2f..000000000 --- a/cmd/command/workspace/workspace.go +++ /dev/null @@ -1,227 +0,0 @@ -package workspace - -import ( - "fmt" - "os" - "path/filepath" - "strings" - - "github.com/pluralsh/plural-cli/pkg/client" - "github.com/pluralsh/plural-cli/pkg/common" - "github.com/pluralsh/plural-cli/pkg/helm" - "github.com/pluralsh/plural-cli/pkg/provider" - "github.com/pluralsh/plural-cli/pkg/utils" - "github.com/pluralsh/plural-cli/pkg/wkspace" - "github.com/urfave/cli" - "helm.sh/helm/v3/pkg/action" -) - -type Plural struct { - client.Plural - HelmConfiguration *action.Configuration -} - -func Command(clients client.Plural, helmConfiguration *action.Configuration) cli.Command { - p := Plural{ - Plural: clients, - HelmConfiguration: helmConfiguration, - } - return cli.Command{ - Name: "workspace", - Aliases: []string{"wkspace"}, - Usage: "Commands for managing installations in your workspace", - Subcommands: p.workspaceCommands(), - Category: "Workspace", - } -} - -func (p *Plural) workspaceCommands() []cli.Command { - return []cli.Command{ - { - Name: "kube-init", - Usage: "generates kubernetes credentials for this subworkspace", - Action: common.LatestVersion(kubeInit), - }, - { - Name: "helm", - Usage: "upgrade/installs the helm chart for this subworkspace", - ArgsUsage: "{name}", - Flags: []cli.Flag{ - cli.StringSliceFlag{ - Name: "skip", - Usage: "helm sub-chart to skip. can be passed multiple times", - }, - cli.StringSliceFlag{ - Name: "set", - Usage: "helm value to set. can be passed multiple times", - }, - cli.StringSliceFlag{ - Name: "setJSON", - Usage: "JSON helm value to set. can be passed multiple times", - }, - cli.BoolFlag{ - Name: "wait", - Usage: "have helm wait until all pods are in ready state", - }, - }, - Action: common.LatestVersion(common.InitKubeconfig(p.bounceHelm)), - }, - { - Name: "helm-diff", - Usage: "diffs the helm release for this subworkspace", - ArgsUsage: "{name}", - Action: common.LatestVersion(p.diffHelm), - }, - { - Name: "helm-deps", - Usage: "updates the helm dependencies for this workspace", - ArgsUsage: "{path}", - Action: common.LatestVersion(updateDeps), - }, - { - Name: "terraform-diff", - Usage: "diffs the helm release for this subworkspace", - ArgsUsage: "{name}", - Action: common.LatestVersion(p.diffTerraform), - }, - { - Name: "crds", - Usage: "installs the crds for this repo", - ArgsUsage: "{name}", - Action: common.LatestVersion(common.InitKubeconfig(p.createCrds)), - }, - { - Name: "helm-template", - Usage: "templates the helm values to stdout", - ArgsUsage: "{name}", - Action: common.LatestVersion(common.RequireArgs(p.templateHelm, []string{"{name}"})), - }, - { - Name: "helm-mapkubeapis", - Usage: "updates in-place Helm release metadata that contains deprecated or removed Kubernetes APIs to a new instance with supported Kubernetes APIs", - ArgsUsage: "{name}", - Action: common.LatestVersion(common.RequireArgs(p.mapkubeapis, []string{"{name}"})), - }, - } -} - -func kubeInit(_ *cli.Context) error { - _, found := utils.ProjectRoot() - if !found { - return fmt.Errorf("Project not initialized, run `plural init` to set up a workspace") - } - - prov, err := provider.GetProvider() - if err != nil { - return err - } - - return prov.KubeConfig() -} - -func (p *Plural) bounceHelm(c *cli.Context) error { - name := c.Args().Get(0) - minimal, err := wkspace.Minimal(name, p.HelmConfiguration) - if err != nil { - return err - } - - var skipArgs []string - if c.IsSet("skip") { - for _, skipChart := range c.StringSlice("skip") { - skipString := fmt.Sprintf("%s.enabled=false", skipChart) - skipArgs = append(skipArgs, skipString) - } - } - var setArgs []string - if c.IsSet("set") { - setArgs = append(setArgs, c.StringSlice("set")...) - } - - var setJSONArgs []string - if c.IsSet("setJSON") { - setJSONArgs = append(setJSONArgs, c.StringSlice("setJSON")...) - } - - return minimal.BounceHelm(c.IsSet("wait"), skipArgs, setArgs, setJSONArgs) -} - -func (p *Plural) diffHelm(c *cli.Context) error { - name := c.Args().Get(0) - minimal, err := wkspace.Minimal(name, p.HelmConfiguration) - if err != nil { - return err - } - - return minimal.DiffHelm() -} - -func (p *Plural) diffTerraform(c *cli.Context) error { - name := c.Args().Get(0) - minimal, err := wkspace.Minimal(name, p.HelmConfiguration) - if err != nil { - return err - } - - return minimal.DiffTerraform() -} - -func (p *Plural) createCrds(_ *cli.Context) error { - err := p.InitKube() - if err != nil { - return err - } - if empty, err := utils.IsEmpty("crds"); err != nil || empty { - return nil - } - - return filepath.Walk("crds", func(path string, info os.FileInfo, err error) error { - if err != nil { - return err - } - - if info.IsDir() { - return nil - } - - err = p.Kube.Apply(path, true) - if err != nil { - errStr := fmt.Sprint(err) - if strings.Contains(errStr, "invalid apiVersion \"client.authentication.k8s.io/v1alpha1\"") { - return fmt.Errorf("failed with %s, this is usually due to your aws cli version being out of date", errStr) - } - return err - } - - return nil - }) -} - -func updateDeps(c *cli.Context) error { - path := c.Args().Get(0) - if path == "" { - path = "." - } - - return helm.UpdateDependencies(path) -} - -func (p *Plural) templateHelm(c *cli.Context) error { - name := c.Args().Get(0) - minimal, err := wkspace.Minimal(name, p.HelmConfiguration) - if err != nil { - return err - } - - return minimal.TemplateHelm() -} - -func (p *Plural) mapkubeapis(c *cli.Context) error { - name := c.Args().Get(0) - minimal, err := wkspace.Minimal(name, p.HelmConfiguration) - if err != nil { - return err - } - - return minimal.MapKubeApis() -} diff --git a/cmd/command/workspace/workspace_test.go b/cmd/command/workspace/workspace_test.go deleted file mode 100644 index 316deb844..000000000 --- a/cmd/command/workspace/workspace_test.go +++ /dev/null @@ -1,141 +0,0 @@ -package workspace_test - -import ( - "io" - "os" - "path/filepath" - "testing" - - "github.com/pluralsh/plural-cli/pkg/common" - - "github.com/pluralsh/plural-cli/cmd/command/plural" - "github.com/pluralsh/plural-cli/pkg/manifest" - "github.com/pluralsh/plural-cli/pkg/utils" - "github.com/pluralsh/plural-cli/pkg/utils/git" - "github.com/stretchr/testify/assert" - "gopkg.in/yaml.v2" - "helm.sh/helm/v3/pkg/action" - "helm.sh/helm/v3/pkg/chart" - "helm.sh/helm/v3/pkg/chartutil" - kubefake "helm.sh/helm/v3/pkg/kube/fake" - "helm.sh/helm/v3/pkg/release" - "helm.sh/helm/v3/pkg/storage" - "helm.sh/helm/v3/pkg/storage/driver" -) - -const subchart = "subchart" - -func TestHelmCommands(t *testing.T) { - // create temp environment - currentDir, err := os.Getwd() - assert.NoError(t, err) - dir, err := os.MkdirTemp("", "config") - assert.NoError(t, err) - defer func(path, currentDir string) { - _ = os.RemoveAll(path) - _ = os.Chdir(currentDir) - }(dir, currentDir) - tFiles, err := filepath.Abs("../../../pkg/test/helm") - assert.NoError(t, err) - err = utils.CopyDir(tFiles, filepath.Join(dir, subchart)) - assert.NoError(t, err) - err = os.Chdir(dir) - assert.NoError(t, err) - _, err = git.Init() - assert.NoError(t, err) - data, err := yaml.Marshal(manifest.ProjectManifest{ - Cluster: "test", - Bucket: "test", - Project: "test", - Provider: "test", - Region: "test", - }) - assert.NoError(t, err) - err = os.WriteFile("workspace.yaml", data, os.FileMode(0755)) - assert.NoError(t, err) - - tests := []struct { - name string - args []string - expectedOutput string - store *storage.Storage - directory string - }{ - { - name: `test helm-template`, - args: []string{plural.ApplicationName, "workspace", "helm-template", subchart}, - expectedOutput: "subchart/helm/output/template.txt", - store: storageFixture(), - directory: dir, - }, - { - name: `test helm install`, - args: []string{plural.ApplicationName, "workspace", "helm", subchart}, - store: storageFixture(), - directory: filepath.Join(dir, subchart), - }, - { - name: `test helm upgrade`, - args: []string{plural.ApplicationName, "workspace", "helm", subchart}, - store: storageReleaseDeployed(t), - directory: filepath.Join(dir, subchart), - }, - { - name: `test helm-diff`, - args: []string{plural.ApplicationName, "workspace", "helm-diff", subchart}, - expectedOutput: "subchart/helm/output/diff.txt", - store: storageReleaseDeployed(t), - directory: dir, - }, - } - for _, test := range tests { - t.Run(test.name, func(t *testing.T) { - actionConfig := &action.Configuration{ - Releases: test.store, - KubeClient: &kubefake.PrintingKubeClient{Out: io.Discard}, - Capabilities: chartutil.DefaultCapabilities, - Log: func(format string, v ...interface{}) {}, - } - err = os.Chdir(test.directory) - assert.NoError(t, err) - defer func() { - err := os.Chdir(dir) - assert.NoError(t, err) - }() - - app := plural.CreateNewApp(&plural.Plural{HelmConfiguration: actionConfig}) - app.HelpName = plural.ApplicationName - os.Args = test.args - output, err := common.CaptureStdout(app, os.Args) - assert.NoError(t, err) - if test.expectedOutput != "" { - expected, err := utils.ReadFile(test.expectedOutput) - assert.NoError(t, err) - assert.Equal(t, expected, output) - } - }) - } -} - -func storageFixture() *storage.Storage { - return storage.Init(driver.NewMemory()) -} - -func storageReleaseDeployed(t *testing.T) *storage.Storage { - fixture := storageFixture() - err := fixture.Create(&release.Release{ - Name: "subchart", - Info: &release.Info{Status: release.StatusDeployed}, - Chart: &chart.Chart{ - Metadata: &chart.Metadata{ - Name: "Myrelease-Chart", - Version: "1.2.3", - }, - }, - Version: 1, - }) - if err != nil { - t.Fatal("can't create storage") - } - return fixture -} diff --git a/pkg/provider/provider.go b/pkg/provider/provider.go index 96d4905ba..f87e80dfb 100644 --- a/pkg/provider/provider.go +++ b/pkg/provider/provider.go @@ -5,15 +5,13 @@ import ( "strings" "github.com/AlecAivazis/survey/v2" - "github.com/pluralsh/polly/algorithms" - "github.com/pluralsh/polly/containers" - v1 "k8s.io/api/core/v1" - "github.com/pluralsh/plural-cli/pkg/api" "github.com/pluralsh/plural-cli/pkg/config" "github.com/pluralsh/plural-cli/pkg/manifest" "github.com/pluralsh/plural-cli/pkg/provider/permissions" "github.com/pluralsh/plural-cli/pkg/utils" + "github.com/pluralsh/polly/algorithms" + "github.com/pluralsh/polly/containers" ) var cloudFlag bool @@ -30,7 +28,6 @@ type Provider interface { CreateBackend(prefix string, version string, ctx map[string]interface{}) (string, error) CreateBucket() error Context() map[string]interface{} - Decommision(node *v1.Node) error Preflights() []*Preflight Permissions() (permissions.Checker, error) Flush() error From e96a3eab71011ecece697895857cd5de0d16b08c Mon Sep 17 00:00:00 2001 From: Marcin Maciaszczyk Date: Wed, 4 Dec 2024 15:43:04 +0100 Subject: [PATCH 12/37] remove ai commands --- cmd/command/plural/plural.go | 2 -- 1 file changed, 2 deletions(-) diff --git a/cmd/command/plural/plural.go b/cmd/command/plural/plural.go index 9ba36a50e..6a0589baa 100644 --- a/cmd/command/plural/plural.go +++ b/cmd/command/plural/plural.go @@ -1,7 +1,6 @@ package plural import ( - "github.com/pluralsh/plural-cli/cmd/command/ai" "github.com/pluralsh/plural-cli/cmd/command/api" "github.com/pluralsh/plural-cli/cmd/command/auth" "github.com/pluralsh/plural-cli/cmd/command/cd" @@ -155,7 +154,6 @@ func CreateNewApp(plural *Plural) *cli.App { commands := []cli.Command{ api.Command(plural.Plural), auth.Command(plural.Plural), - ai.Command(plural.Plural), cd.Command(plural.Plural, plural.HelmConfiguration), config.Command(), cryptocmd.Command(plural.Plural), From b390fb35722c14eb580cc367126cf23635153886 Mon Sep 17 00:00:00 2001 From: Marcin Maciaszczyk Date: Wed, 4 Dec 2024 17:01:55 +0100 Subject: [PATCH 13/37] remove unused code --- cmd/command/up/backfill.go | 3 +- pkg/api/artifacts.go | 93 ------ pkg/api/charts.go | 18 -- pkg/api/client.go | 61 ---- pkg/api/installations.go | 9 - pkg/api/models.go | 76 ----- pkg/api/recipes.go | 410 --------------------------- pkg/api/recipes_test.go | 39 --- pkg/api/repos_test.go | 77 ----- pkg/api/terraform.go | 65 ----- pkg/bundle/oidc.go | 42 --- pkg/console/describe.go | 126 ++++---- pkg/format/csv.go | 33 --- pkg/format/formatter.go | 24 -- pkg/format/table.go | 37 --- pkg/pluralfile/artifact.go | 71 ----- pkg/pluralfile/attrs.go | 86 ------ pkg/pluralfile/command.go | 29 -- pkg/pluralfile/crd.go | 49 ---- pkg/pluralfile/helm.go | 32 --- pkg/pluralfile/integration.go | 32 --- pkg/pluralfile/parse.go | 206 -------------- pkg/pluralfile/recipe.go | 32 --- pkg/pluralfile/resourcedefinition.go | 32 --- pkg/pluralfile/stack.go | 50 ---- pkg/pluralfile/tags.go | 82 ------ pkg/pluralfile/terraform.go | 38 --- pkg/provider/provider.go | 4 - pkg/template/funcs.go | 28 +- pkg/template/template.go | 1 - pkg/ui/client.go | 49 +--- 31 files changed, 67 insertions(+), 1867 deletions(-) delete mode 100644 pkg/api/artifacts.go delete mode 100644 pkg/api/recipes_test.go delete mode 100644 pkg/api/repos_test.go delete mode 100644 pkg/format/csv.go delete mode 100644 pkg/format/formatter.go delete mode 100644 pkg/format/table.go delete mode 100644 pkg/pluralfile/artifact.go delete mode 100644 pkg/pluralfile/attrs.go delete mode 100644 pkg/pluralfile/command.go delete mode 100644 pkg/pluralfile/crd.go delete mode 100644 pkg/pluralfile/helm.go delete mode 100644 pkg/pluralfile/integration.go delete mode 100644 pkg/pluralfile/parse.go delete mode 100644 pkg/pluralfile/recipe.go delete mode 100644 pkg/pluralfile/resourcedefinition.go delete mode 100644 pkg/pluralfile/stack.go delete mode 100644 pkg/pluralfile/tags.go delete mode 100644 pkg/pluralfile/terraform.go diff --git a/cmd/command/up/backfill.go b/cmd/command/up/backfill.go index f56a297f4..954ea7048 100644 --- a/cmd/command/up/backfill.go +++ b/cmd/command/up/backfill.go @@ -1,11 +1,10 @@ package up import ( + "encoding/base64" "fmt" "strings" - "encoding/base64" - "github.com/pluralsh/gqlclient" "github.com/pluralsh/plural-cli/pkg/console" "github.com/pluralsh/plural-cli/pkg/crypto" diff --git a/pkg/api/artifacts.go b/pkg/api/artifacts.go deleted file mode 100644 index 493b10895..000000000 --- a/pkg/api/artifacts.go +++ /dev/null @@ -1,93 +0,0 @@ -package api - -import ( - "context" - "os" - "path/filepath" - - "github.com/pluralsh/gqlclient" - - "github.com/pluralsh/gqlclient/pkg/utils" - file "github.com/pluralsh/plural-cli/pkg/utils" - "sigs.k8s.io/yaml" -) - -type ArtifactAttributes struct { - Name string - Readme string - Type string - Platform string - Blob string - Arch string -} - -func (client *client) ListArtifacts(repo string) ([]Artifact, error) { - - result := make([]Artifact, 0) - - resp, err := client.pluralClient.ListArtifacts(client.ctx, repo) - if err != nil { - return result, err - } - for _, artifact := range resp.Repository.Artifacts { - ar := Artifact{ - Id: utils.ConvertStringPointer(artifact.ID), - Name: utils.ConvertStringPointer(artifact.Name), - Readme: utils.ConvertStringPointer(artifact.Readme), - Blob: utils.ConvertStringPointer(artifact.Blob), - Sha: utils.ConvertStringPointer(artifact.Sha), - Arch: utils.ConvertStringPointer(artifact.Arch), - } - if artifact.Platform != nil { - ar.Platform = string(*artifact.Platform) - } - if artifact.Filesize != nil { - ar.Filesize = int(*artifact.Filesize) - } - result = append(result, ar) - } - return result, nil -} - -func (client *client) CreateArtifact(repo string, attrs ArtifactAttributes) (Artifact, error) { - var artifact Artifact - fullPath, _ := filepath.Abs(attrs.Blob) - rf, err := os.Open(fullPath) - if err != nil { - return artifact, err - } - defer rf.Close() - - readmePath, _ := filepath.Abs(attrs.Readme) - readme, err := file.ReadFile(readmePath) - if err != nil { - return artifact, err - } - - client.pluralClient.Client.CustomDo = gqlclient.WithFiles([]gqlclient.Upload{{ - Field: "blob", - Name: attrs.Blob, - R: rf, - }}, client.httpClient) - createArtifact, err := client.pluralClient.CreateArtifact(context.Background(), repo, attrs.Name, readme, attrs.Type, attrs.Platform, "blob", &attrs.Arch) - if err != nil { - return artifact, err - } - artifact.Id = utils.ConvertStringPointer(createArtifact.CreateArtifact.ID) - artifact.Name = utils.ConvertStringPointer(createArtifact.CreateArtifact.Name) - artifact.Readme = utils.ConvertStringPointer(createArtifact.CreateArtifact.Readme) - artifact.Arch = utils.ConvertStringPointer(createArtifact.CreateArtifact.Arch) - artifact.Sha = utils.ConvertStringPointer(createArtifact.CreateArtifact.Sha) - if createArtifact.CreateArtifact.Platform != nil { - platform := createArtifact.CreateArtifact.Platform - artifact.Platform = string(*platform) - } - - return artifact, err -} - -func ConstructArtifactAttributes(marshalled []byte) (ArtifactAttributes, error) { - var attrs ArtifactAttributes - err := yaml.Unmarshal(marshalled, &attrs) - return attrs, err -} diff --git a/pkg/api/charts.go b/pkg/api/charts.go index d61a4b6d2..6f4bb0e11 100644 --- a/pkg/api/charts.go +++ b/pkg/api/charts.go @@ -16,24 +16,6 @@ type packageCacheEntry struct { var packageCache = make(map[string]*packageCacheEntry) -func (client *client) GetCharts(repoId string) ([]*Chart, error) { - charts := make([]*Chart, 0) - resp, err := client.pluralClient.GetCharts(client.ctx, repoId) - if err != nil { - return nil, err - } - for _, edge := range resp.Charts.Edges { - charts = append(charts, &Chart{ - Id: utils.ConvertStringPointer(edge.Node.ID), - Name: edge.Node.Name, - Description: utils.ConvertStringPointer(edge.Node.Description), - LatestVersion: utils.ConvertStringPointer(edge.Node.LatestVersion), - }) - } - - return charts, err -} - func (client *client) GetVersions(chartId string) ([]*Version, error) { versions := make([]*Version, 0) resp, err := client.pluralClient.GetVersions(client.ctx, chartId) diff --git a/pkg/api/client.go b/pkg/api/client.go index 234e0417a..657a1ab03 100644 --- a/pkg/api/client.go +++ b/pkg/api/client.go @@ -3,15 +3,12 @@ package api import ( "context" "encoding/json" - "fmt" "net/http" rawclient "github.com/Yamashou/gqlgenc/clientv2" "github.com/pkg/errors" "github.com/pluralsh/gqlclient" - "github.com/samber/lo" - "github.com/pluralsh/plural-cli/pkg/config" "github.com/pluralsh/plural-cli/pkg/utils" ) @@ -27,8 +24,6 @@ func (t *authedTransport) RoundTrip(req *http.Request) (*http.Response, error) { } type Client interface { - ListArtifacts(repo string) ([]Artifact, error) - CreateArtifact(repo string, attrs ArtifactAttributes) (Artifact, error) Me() (*Me, error) LoginMethod(email string) (*LoginMethod, error) PollLoginToken(token string) (string, error) @@ -52,35 +47,15 @@ type Client interface { ListRepositories(query string) ([]*Repository, error) Scaffolds(in *ScaffoldInputs) ([]*ScaffoldFile, error) UpdateVersion(spec *VersionSpec, tags []string) error - GetCharts(repoId string) ([]*Chart, error) - GetVersions(chartId string) ([]*Version, error) - GetTerraformVersions(id string) ([]*Version, error) - GetChartInstallations(repoId string) ([]*ChartInstallation, error) - GetPackageInstallations(repoId string) (charts []*ChartInstallation, tfs []*TerraformInstallation, err error) CreateCrd(repo string, chart string, file string) error CreateDomain(name string) error CreateInstallation(id string) (string, error) GetInstallation(name string) (*Installation, error) - GetInstallationById(id string) (*Installation, error) GetInstallations() ([]*Installation, error) - DeleteInstallation(id string) error OIDCProvider(id string, attributes *OidcProviderAttributes) error - ResetInstallations() (int, error) - CreateRecipe(repoName string, attrs gqlclient.RecipeAttributes) (string, error) - GetRecipe(repo string, name string) (*Recipe, error) - GetRecipeByID(id string) (*Recipe, error) - ListRecipes(repo string, provider string) ([]*Recipe, error) - InstallRecipe(id string) error GetShell() (CloudShell, error) DeleteShell() error GetTerraform(repoId string) ([]*Terraform, error) - GetTerraformInstallations(repoId string) ([]*TerraformInstallation, error) - UploadTerraform(dir string, repoName string) (Terraform, error) - GetStack(name, provider string) (*Stack, error) - CreateStack(attributes gqlclient.StackAttributes) (string, error) - ListStacks(featured bool) ([]*Stack, error) - UninstallChart(id string) error - UninstallTerraform(id string) error CreateKeyBackup(attrs KeyBackupAttributes) error GetKeyBackup(name string) (*KeyBackup, error) ListKeyBackups() ([]*KeyBackup, error) @@ -157,39 +132,3 @@ func GetErrorResponse(err error, methodName string) error { return errList } - -func FindChart(client Client, repo, name string) (*Chart, error) { - r, err := client.GetRepository(repo) - if err != nil { - return nil, err - } - - charts, err := client.GetCharts(r.Id) - if err != nil { - return nil, err - } - - chart, ok := lo.Find(charts, func(c *Chart) bool { return c.Name == name }) - if !ok { - return nil, fmt.Errorf("No chart found for repo %s and name %s", repo, name) - } - return chart, nil -} - -func FindTerraform(client Client, repo, name string) (*Terraform, error) { - r, err := client.GetRepository(repo) - if err != nil { - return nil, err - } - - tfs, err := client.GetTerraform(r.Id) - if err != nil { - return nil, err - } - - tf, ok := lo.Find(tfs, func(c *Terraform) bool { return c.Name == name }) - if !ok { - return nil, fmt.Errorf("No terraform module found for repo %s and name %s", repo, name) - } - return tf, nil -} diff --git a/pkg/api/installations.go b/pkg/api/installations.go index 96c8054c3..249db43d7 100644 --- a/pkg/api/installations.go +++ b/pkg/api/installations.go @@ -153,15 +153,6 @@ func (client *client) OIDCProvider(id string, attributes *OidcProviderAttributes return err } -func (client *client) ResetInstallations() (int, error) { - resp, err := client.pluralClient.ResetInstallations(client.ctx) - if err != nil { - return 0, err - } - - return int(*resp.ResetInstallations), err -} - func (client *client) MarkSynced(repo string) error { _, err := client.pluralClient.MarkSynced(client.ctx, repo) return err diff --git a/pkg/api/models.go b/pkg/api/models.go index ea3a6f95a..6e2ba454e 100644 --- a/pkg/api/models.go +++ b/pkg/api/models.go @@ -1,8 +1,6 @@ package api import ( - "fmt" - "github.com/pluralsh/gqlclient" ) @@ -357,77 +355,3 @@ type ChatMessage struct { Content string Role string } - -const CrdFragment = ` - fragment CrdFragment on Crd { - id - name - blob - } -` - -const DependenciesFragment = ` - fragment DependenciesFragment on Dependencies { - dependencies { - type - name - repo - } - wait - application - providers - secrets - wirings { terraform helm } - providerWirings - outputs - providerVsn - } -` - -var VersionFragment = fmt.Sprintf(` - fragment VersionFragment on Version { - id - readme - version - valuesTemplate - package - crds { ...CrdFragment } - dependencies { ...DependenciesFragment } - } - %s -`, CrdFragment) - -var TerraformFragment = fmt.Sprintf(` - fragment TerraformFragment on Terraform { - id - name - package - description - dependencies { ...DependenciesFragment } - valuesTemplate - } - %s -`, DependenciesFragment) - -var TerraformInstallationFragment = fmt.Sprintf(` - fragment TerraformInstallationFragment on TerraformInstallation { - id - terraform { ...TerraformFragment } - version { ...VersionFragment } - } - %s - %s -`, TerraformFragment, VersionFragment) - -const ArtifactFragment = ` - fragment ArtifactFragment on Artifact { - id - name - readme - platform - arch - blob - sha - filesize - } -` diff --git a/pkg/api/recipes.go b/pkg/api/recipes.go index b90ca3e0c..2cdd5d95a 100644 --- a/pkg/api/recipes.go +++ b/pkg/api/recipes.go @@ -1,14 +1,5 @@ package api -import ( - "fmt" - - "github.com/pluralsh/gqlclient" - "github.com/pluralsh/gqlclient/pkg/utils" - - "sigs.k8s.io/yaml" -) - type RecipeInput struct { Name string Description string @@ -78,404 +69,3 @@ type ConfigurationItemInput struct { type RecipeEdge struct { Node *Recipe } - -func (client *client) CreateRecipe(repoName string, attrs gqlclient.RecipeAttributes) (string, error) { - if len(attrs.Tests) == 0 { - attrs.Tests = make([]*gqlclient.RecipeTestAttributes, 0) - } - resp, err := client.pluralClient.CreateRecipe(client.ctx, repoName, attrs) - if err != nil { - return "", err - } - - return resp.CreateRecipe.ID, err -} - -func (client *client) GetRecipe(repo, name string) (*Recipe, error) { - resp, err := client.pluralClient.GetRecipe(client.ctx, &repo, &name) - if err != nil { - return nil, err - } - - r := &Recipe{ - Id: resp.Recipe.ID, - Name: resp.Recipe.Name, - Primary: resp.Recipe.Primary != nil && *resp.Recipe.Primary, - Restricted: resp.Recipe.Restricted != nil && *resp.Recipe.Restricted, - Provider: string(*resp.Recipe.Provider), - Description: utils.ConvertStringPointer(resp.Recipe.Description), - Tests: []*RecipeTest{}, - RecipeSections: []*RecipeSection{}, - RecipeDependencies: []*Recipe{}, - } - if resp.Recipe.OidcSettings != nil { - r.OidcSettings = &OIDCSettings{ - DomainKey: utils.ConvertStringPointer(resp.Recipe.OidcSettings.DomainKey), - UriFormat: utils.ConvertStringPointer(resp.Recipe.OidcSettings.URIFormat), - UriFormats: utils.ConvertStringArrayPointer(resp.Recipe.OidcSettings.URIFormats), - AuthMethod: string(resp.Recipe.OidcSettings.AuthMethod), - } - if resp.Recipe.OidcSettings.Subdomain != nil { - r.OidcSettings.Subdomain = *resp.Recipe.OidcSettings.Subdomain - } - } - if resp.Recipe.Repository != nil { - r.Repository = &Repository{ - Id: resp.Recipe.Repository.ID, - Name: resp.Recipe.Repository.Name, - } - } - - for _, dep := range resp.Recipe.RecipeDependencies { - r.RecipeDependencies = append(r.RecipeDependencies, convertRecipe(dep)) - } - - for _, section := range resp.Recipe.RecipeSections { - rs := &RecipeSection{ - Id: fmt.Sprint(section.Index), - Repository: &Repository{ - Id: section.Repository.ID, - Name: section.Repository.Name, - Description: utils.ConvertStringPointer(section.Repository.Description), - Icon: utils.ConvertStringPointer(section.Repository.Icon), - DarkIcon: utils.ConvertStringPointer(section.Repository.DarkIcon), - Notes: utils.ConvertStringPointer(section.Repository.Notes), - }, - RecipeItems: []*RecipeItem{}, - Configuration: []*ConfigurationItem{}, - } - for _, conf := range section.Configuration { - rs.Configuration = append(rs.Configuration, convertConfigurationItem(conf)) - } - for _, recipeItem := range section.RecipeItems { - rs.RecipeItems = append(rs.RecipeItems, convertRecipeItem(recipeItem)) - } - - r.RecipeSections = append(r.RecipeSections, rs) - - } - - for _, test := range resp.Recipe.Tests { - t := &RecipeTest{ - Name: test.Name, - Type: string(test.Type), - Message: utils.ConvertStringPointer(test.Message), - Args: []*TestArgument{}, - } - for _, arg := range test.Args { - t.Args = append(t.Args, &TestArgument{ - Name: arg.Name, - Repo: arg.Repo, - Key: arg.Key, - }) - } - - r.Tests = append(r.Tests, t) - } - - return r, nil -} - -func (client *client) GetRecipeByID(id string) (*Recipe, error) { - resp, err := client.pluralClient.GetRecipeByID(client.ctx, &id) - if err != nil { - return nil, err - } - - r := &Recipe{ - Id: resp.Recipe.ID, - Name: resp.Recipe.Name, - Provider: string(*resp.Recipe.Provider), - Description: utils.ConvertStringPointer(resp.Recipe.Description), - Tests: []*RecipeTest{}, - RecipeSections: []*RecipeSection{}, - RecipeDependencies: []*Recipe{}, - } - if resp.Recipe.OidcSettings != nil { - r.OidcSettings = &OIDCSettings{ - DomainKey: utils.ConvertStringPointer(resp.Recipe.OidcSettings.DomainKey), - UriFormat: utils.ConvertStringPointer(resp.Recipe.OidcSettings.URIFormat), - UriFormats: utils.ConvertStringArrayPointer(resp.Recipe.OidcSettings.URIFormats), - AuthMethod: string(resp.Recipe.OidcSettings.AuthMethod), - } - if resp.Recipe.OidcSettings.Subdomain != nil { - r.OidcSettings.Subdomain = *resp.Recipe.OidcSettings.Subdomain - } - } - if resp.Recipe.Repository != nil { - r.Repository = &Repository{ - Id: resp.Recipe.Repository.ID, - Name: resp.Recipe.Repository.Name, - } - } - if resp.Recipe.Restricted != nil { - r.Restricted = *resp.Recipe.Restricted - } - - for _, dep := range resp.Recipe.RecipeDependencies { - r.RecipeDependencies = append(r.RecipeDependencies, convertRecipe(dep)) - } - - for _, section := range resp.Recipe.RecipeSections { - rs := &RecipeSection{ - Id: fmt.Sprint(section.Index), - Repository: &Repository{ - Id: section.Repository.ID, - Name: section.Repository.Name, - Description: utils.ConvertStringPointer(section.Repository.Description), - Icon: utils.ConvertStringPointer(section.Repository.Icon), - DarkIcon: utils.ConvertStringPointer(section.Repository.DarkIcon), - Notes: utils.ConvertStringPointer(section.Repository.Notes), - }, - RecipeItems: []*RecipeItem{}, - Configuration: []*ConfigurationItem{}, - } - for _, conf := range section.Configuration { - rs.Configuration = append(rs.Configuration, convertConfigurationItem(conf)) - } - for _, recipeItem := range section.RecipeItems { - rs.RecipeItems = append(rs.RecipeItems, convertRecipeItem(recipeItem)) - } - - r.RecipeSections = append(r.RecipeSections, rs) - - } - - for _, test := range resp.Recipe.Tests { - t := &RecipeTest{ - Name: test.Name, - Type: string(test.Type), - Message: utils.ConvertStringPointer(test.Message), - Args: []*TestArgument{}, - } - for _, arg := range test.Args { - t.Args = append(t.Args, &TestArgument{ - Name: arg.Name, - Repo: arg.Repo, - Key: arg.Key, - }) - } - - r.Tests = append(r.Tests, t) - } - - return r, nil -} - -func convertRecipeItem(item *gqlclient.RecipeItemFragment) *RecipeItem { - ri := &RecipeItem{ - Id: utils.ConvertStringPointer(item.ID), - Terraform: convertTerraform(item.Terraform), - } - for _, conf := range item.Configuration { - ri.Configuration = append(ri.Configuration, convertConfigurationItem(conf)) - } - if item.Chart != nil { - ri.Chart = &Chart{ - Id: utils.ConvertStringPointer(item.Chart.ID), - Name: item.Chart.Name, - Description: utils.ConvertStringPointer(item.Chart.Description), - LatestVersion: utils.ConvertStringPointer(item.Chart.LatestVersion), - } - } - - return ri -} - -func convertConfigurationItem(conf *gqlclient.RecipeConfigurationFragment) *ConfigurationItem { - confItem := &ConfigurationItem{ - Name: utils.ConvertStringPointer(conf.Name), - Default: utils.ConvertStringPointer(conf.Default), - Documentation: utils.ConvertStringPointer(conf.Documentation), - Placeholder: utils.ConvertStringPointer(conf.Placeholder), - FunctionName: utils.ConvertStringPointer(conf.FunctionName), - } - if conf.Optional != nil { - confItem.Optional = *conf.Optional - } - if conf.Type != nil { - confItem.Type = string(*conf.Type) - } - if conf.Condition != nil { - confItem.Condition = &Condition{ - Field: conf.Condition.Field, - Value: utils.ConvertStringPointer(conf.Condition.Value), - Operation: string(conf.Condition.Operation), - } - } - if conf.Validation != nil { - confItem.Validation = &Validation{ - Type: string(conf.Validation.Type), - Regex: utils.ConvertStringPointer(conf.Validation.Regex), - Message: conf.Validation.Message, - } - } - - return confItem -} - -func convertRecipe(rcp *gqlclient.RecipeFragment) *Recipe { - r := &Recipe{ - Id: rcp.ID, - Name: rcp.Name, - Primary: rcp.Primary != nil && *rcp.Primary, - Restricted: rcp.Restricted != nil && *rcp.Restricted, - Description: utils.ConvertStringPointer(rcp.Description), - Tests: []*RecipeTest{}, - RecipeSections: []*RecipeSection{}, - RecipeDependencies: []*Recipe{}, - } - if rcp.Repository != nil { - r.Repository = &Repository{ - Id: rcp.Repository.ID, - Name: rcp.Repository.Name, - } - } - if rcp.OidcSettings != nil { - r.OidcSettings = &OIDCSettings{ - DomainKey: utils.ConvertStringPointer(rcp.OidcSettings.DomainKey), - UriFormat: utils.ConvertStringPointer(rcp.OidcSettings.URIFormat), - UriFormats: utils.ConvertStringArrayPointer(rcp.OidcSettings.URIFormats), - AuthMethod: string(rcp.OidcSettings.AuthMethod), - } - } - - if rcp.Provider != nil { - provider := *rcp.Provider - r.Provider = string(provider) - } - - for _, test := range rcp.Tests { - t := &RecipeTest{ - Name: test.Name, - Type: string(test.Type), - Message: utils.ConvertStringPointer(test.Message), - Args: []*TestArgument{}, - } - for _, arg := range test.Args { - t.Args = append(t.Args, &TestArgument{ - Name: arg.Name, - Repo: arg.Repo, - Key: arg.Key, - }) - } - r.Tests = append(r.Tests, t) - } - - for _, section := range rcp.RecipeSections { - rs := &RecipeSection{ - Id: fmt.Sprint(section.Index), - Repository: &Repository{ - Id: section.Repository.ID, - Name: section.Repository.Name, - Description: utils.ConvertStringPointer(section.Repository.Description), - Icon: utils.ConvertStringPointer(section.Repository.Icon), - DarkIcon: utils.ConvertStringPointer(section.Repository.DarkIcon), - Notes: utils.ConvertStringPointer(section.Repository.Notes), - }, - RecipeItems: []*RecipeItem{}, - Configuration: []*ConfigurationItem{}, - } - for _, conf := range section.Configuration { - rs.Configuration = append(rs.Configuration, convertConfigurationItem(conf)) - } - for _, recipeItem := range section.RecipeItems { - rs.RecipeItems = append(rs.RecipeItems, convertRecipeItem(recipeItem)) - } - - r.RecipeSections = append(r.RecipeSections, rs) - - } - - return r -} - -func convertStack(st *gqlclient.StackFragment) *Stack { - return &Stack{ - Name: st.Name, - Description: utils.ConvertStringPointer(st.Description), - Featured: *st.Featured, - } -} - -func (client *client) ListRecipes(repo, provider string) ([]*Recipe, error) { - recipes := make([]*Recipe, 0) - - if provider != "" { - p := gqlclient.Provider(ToGQLClientProvider(provider)) - resp, err := client.pluralClient.ListRecipes(client.ctx, &repo, &p) - if err != nil { - return nil, err - } - for _, edge := range resp.Recipes.Edges { - recipes = append(recipes, convertRecipe(edge.Node)) - } - } else { - resp, err := client.pluralClient.ListAllRecipes(client.ctx, &repo) - if err != nil { - return nil, err - } - for _, edge := range resp.Recipes.Edges { - recipes = append(recipes, convertRecipe(edge.Node)) - } - } - - return recipes, nil -} - -func (client *client) InstallRecipe(id string) error { - _, err := client.pluralClient.InstallRecipe(client.ctx, id) - if err != nil { - return err - } - return nil -} - -func (client *client) GetStack(name, provider string) (*Stack, error) { - p := gqlclient.Provider(ToGQLClientProvider(provider)) - resp, err := client.pluralClient.GetStack(client.ctx, name, p) - if err != nil { - return nil, err - } - - s := convertStack(resp.Stack) - s.Bundles = make([]*Recipe, 0) - for _, r := range resp.Stack.Bundles { - s.Bundles = append(s.Bundles, convertRecipe(r)) - } - - return s, nil -} - -func (client *client) ListStacks(featured bool) ([]*Stack, error) { - resp, err := client.pluralClient.ListStacks(client.ctx, &featured, nil) - if err != nil { - return nil, err - } - - stacks := make([]*Stack, 0) - for _, edge := range resp.Stacks.Edges { - stacks = append(stacks, convertStack(edge.Node)) - } - - return stacks, nil -} - -func (client *client) CreateStack(attributes gqlclient.StackAttributes) (string, error) { - resp, err := client.pluralClient.CreateStack(client.ctx, attributes) - if err != nil { - return "", err - } - - return resp.CreateStack.ID, err -} - -func ConstructStack(marshalled []byte) (stack gqlclient.StackAttributes, err error) { - err = yaml.Unmarshal(marshalled, &stack) - return -} - -func ConstructRecipe(marshalled []byte) (recipe gqlclient.RecipeAttributes, err error) { - err = yaml.Unmarshal(marshalled, &recipe) - return -} diff --git a/pkg/api/recipes_test.go b/pkg/api/recipes_test.go deleted file mode 100644 index 309e94371..000000000 --- a/pkg/api/recipes_test.go +++ /dev/null @@ -1,39 +0,0 @@ -package api_test - -import ( - "testing" - - "github.com/pluralsh/gqlclient" - "github.com/pluralsh/plural-cli/pkg/api" - - "github.com/stretchr/testify/assert" -) - -func TestConstructRecipe(t *testing.T) { - key := "key" - tests := []struct { - name string - input string - expected gqlclient.RecipeAttributes - }{ - { - name: `test ConstructRecipe method`, - expected: gqlclient.RecipeAttributes{ - OidcSettings: &gqlclient.OidcSettingsAttributes{ - DomainKey: &key, - }, - }, - input: ` -oidcSettings: - domainKey: "key" -`, - }, - } - for _, test := range tests { - t.Run(test.name, func(t *testing.T) { - repositoryAttributes, err := api.ConstructRecipe([]byte(test.input)) - assert.NoError(t, err) - assert.Equal(t, test.expected, repositoryAttributes) - }) - } -} diff --git a/pkg/api/repos_test.go b/pkg/api/repos_test.go deleted file mode 100644 index 16a27172b..000000000 --- a/pkg/api/repos_test.go +++ /dev/null @@ -1,77 +0,0 @@ -package api_test - -import ( - "testing" - - "github.com/pluralsh/gqlclient" - "github.com/pluralsh/plural-cli/pkg/api" - "github.com/samber/lo" - - "github.com/stretchr/testify/assert" -) - -func TestConstructGqlClientRepositoryInput(t *testing.T) { - devopsCategory := gqlclient.CategoryDevops - testDescription := "test" - privateFlag := true - icon := "plural/icons/test.png" - notes := "plural/notes.tpl" - name := "test" - emptyString := "" - - tests := []struct { - name string - input string - expected *gqlclient.RepositoryAttributes - }{ - { - name: `test repository.yaml conversion`, - expected: &gqlclient.RepositoryAttributes{ - Category: &devopsCategory, - DarkIcon: &emptyString, - Description: &testDescription, - GitURL: &emptyString, - Homepage: &emptyString, - Contributors: lo.ToSlicePtr([]string{"someone@email.com"}), - Icon: &icon, - Name: &name, - Notes: ¬es, - Docs: &emptyString, - OauthSettings: &gqlclient.OauthSettingsAttributes{ - AuthMethod: "POST", - URIFormat: "https://{domain}/oauth2/callback", - }, - Private: &privateFlag, - Readme: nil, - Secrets: nil, - Tags: []*gqlclient.TagAttributes{ - { - Tag: "data-science", - }, - }, - Verified: nil, - }, - input: `name: test -description: test -category: DEVOPS -private: true -icon: plural/icons/test.png -notes: plural/notes.tpl -contributors: -- someone@email.com -oauthSettings: - uriFormat: https://{domain}/oauth2/callback - authMethod: POST -tags: -- tag: data-science -`, - }, - } - for _, test := range tests { - t.Run(test.name, func(t *testing.T) { - repositoryAttributes, err := api.ConstructGqlClientRepositoryInput([]byte(test.input)) - assert.NoError(t, err) - assert.Equal(t, test.expected, repositoryAttributes) - }) - } -} diff --git a/pkg/api/terraform.go b/pkg/api/terraform.go index 0b7aa2146..94e7812a0 100644 --- a/pkg/api/terraform.go +++ b/pkg/api/terraform.go @@ -2,14 +2,11 @@ package api import ( "os" - "path" "path/filepath" "github.com/pluralsh/gqlclient" "github.com/pluralsh/gqlclient/pkg/utils" - "github.com/samber/lo" - tarutils "github.com/pluralsh/plural-cli/pkg/utils" "github.com/pluralsh/plural-cli/pkg/utils/pathing" ) @@ -42,28 +39,6 @@ func (client *client) GetTerraformVersions(id string) ([]*Version, error) { return versions, nil } -func (client *client) GetTerraformInstallations(repoId string) ([]*TerraformInstallation, error) { - resp, err := client.pluralClient.GetTerraformInstallations(client.ctx, repoId) - if err != nil { - return nil, err - } - - inst := make([]*TerraformInstallation, 0) - for _, edge := range resp.TerraformInstallations.Edges { - inst = append(inst, &TerraformInstallation{ - Id: utils.ConvertStringPointer(edge.Node.ID), - Terraform: convertTerraform(edge.Node.Terraform), - Version: convertVersion(edge.Node.Version), - }) - } - return inst, err -} - -func (client *client) UninstallTerraform(id string) (err error) { - _, err = client.pluralClient.UninstallTerraform(client.ctx, id) - return -} - func tarDir(name, dir, regex string) (res string, err error) { fullPath, err := filepath.Abs(dir) if err != nil { @@ -82,46 +57,6 @@ func tarDir(name, dir, regex string) (res string, err error) { return } -func (client *client) UploadTerraform(dir, repoName string) (Terraform, error) { - tf := Terraform{} - name := path.Base(dir) - tarFile, err := tarDir(name, dir, "\\.terraform") - if err != nil { - return tf, err - } - - rf, err := os.Open(tarFile) - if err != nil { - return tf, err - } - defer rf.Close() - defer os.Remove(tarFile) - - client.pluralClient.Client.CustomDo = gqlclient.WithFiles([]gqlclient.Upload{ - { - Field: "package", - Name: tarFile, - R: rf, - }, - }, client.httpClient) - resp, err := client.pluralClient.UploadTerraform(client.ctx, repoName, name, "package") - if err != nil { - return tf, err - } - - upload := resp.UploadTerraform - tf.Name = lo.FromPtr(upload.Name) - tf.Id = lo.FromPtr(upload.ID) - tf.Description = lo.FromPtr(upload.Description) - tf.ValuesTemplate = lo.FromPtr(upload.ValuesTemplate) - tf.Package = lo.FromPtr(upload.Package) - if upload.Dependencies != nil { - tf.Dependencies = convertDependencies(upload.Dependencies) - } - - return tf, err -} - func convertTerraform(ter *gqlclient.TerraformFragment) *Terraform { if ter == nil { return nil diff --git a/pkg/bundle/oidc.go b/pkg/bundle/oidc.go index 936caf07b..cbd7d39b3 100644 --- a/pkg/bundle/oidc.go +++ b/pkg/bundle/oidc.go @@ -13,48 +13,6 @@ import ( var oidcConfirmed bool -func ConfigureOidc(repo string, client api.Client, recipe *api.Recipe, ctx map[string]interface{}, confirm *bool) error { - if recipe.OidcSettings == nil { - return nil - } - - ok, err := confirmOidc(confirm) - if err != nil { - return err - } - - if !ok { - return nil - } - - settings := recipe.OidcSettings - redirectUris, err := formatRedirectUris(settings, ctx) - if err != nil { - return err - } - - inst, err := client.GetInstallation(repo) - if err != nil { - return api.GetErrorResponse(err, "GetInstallation") - } - - me, err := client.Me() - if err != nil { - return api.GetErrorResponse(err, "Me") - } - - oidcSettings := &api.OidcProviderAttributes{ - RedirectUris: redirectUris, - AuthMethod: settings.AuthMethod, - Bindings: []api.Binding{ - {UserId: me.Id}, - }, - } - mergeOidcAttributes(inst, oidcSettings) - err = client.OIDCProvider(inst.Id, oidcSettings) - return api.GetErrorResponse(err, "OIDCProvider") -} - func SetupOIDC(repo string, client api.Client, redirectUris []string, authMethod string) error { inst, err := client.GetInstallation(repo) if err != nil { diff --git a/pkg/console/describe.go b/pkg/console/describe.go index ba9b99391..3dbe49c62 100644 --- a/pkg/console/describe.go +++ b/pkg/console/describe.go @@ -15,22 +15,20 @@ import ( // Each level has 2 spaces for PrefixWriter const ( - LEVEL_0 = iota - LEVEL_1 - LEVEL_2 - LEVEL_3 - LEVEL_4 + Level0 = iota + Level1 + Level2 ) func DescribeServiceContext(sc *consoleclient.ServiceContextFragment) (string, error) { return tabbedString(func(out io.Writer) error { w := NewPrefixWriter(out) - w.Write(LEVEL_0, "Id:\t%s\n", sc.ID) - w.Write(LEVEL_0, "Configuration:\n \tName\tContext\n") - w.Write(LEVEL_1, "\t----\t------\n") + w.Write(Level0, "Id:\t%s\n", sc.ID) + w.Write(Level0, "Configuration:\n \tName\tContext\n") + w.Write(Level1, "\t----\t------\n") for name, value := range sc.Configuration { configurationJson, _ := json.Marshal(value) - w.Write(LEVEL_1, "\t%v \t%v\n", name, string(configurationJson)) + w.Write(Level1, "\t%v \t%v\n", name, string(configurationJson)) } return nil }) @@ -39,43 +37,43 @@ func DescribeServiceContext(sc *consoleclient.ServiceContextFragment) (string, e func DescribeCluster(cluster *consoleclient.ClusterFragment) (string, error) { return tabbedString(func(out io.Writer) error { w := NewPrefixWriter(out) - w.Write(LEVEL_0, "Id:\t%s\n", cluster.ID) - w.Write(LEVEL_0, "Name:\t%s\n", cluster.Name) + w.Write(Level0, "Id:\t%s\n", cluster.ID) + w.Write(Level0, "Name:\t%s\n", cluster.Name) if cluster.Handle != nil { - w.Write(LEVEL_0, "Handle:\t@%s\n", *cluster.Handle) + w.Write(Level0, "Handle:\t@%s\n", *cluster.Handle) } if cluster.Version != nil { - w.Write(LEVEL_0, "Version:\t%s\n", *cluster.Version) + w.Write(Level0, "Version:\t%s\n", *cluster.Version) } if cluster.CurrentVersion != nil { - w.Write(LEVEL_0, "Current Version:\t%s\n", *cluster.CurrentVersion) + w.Write(Level0, "Current Version:\t%s\n", *cluster.CurrentVersion) } if cluster.PingedAt != nil { - w.Write(LEVEL_0, "Pinged At:\t%s\n", *cluster.PingedAt) + w.Write(Level0, "Pinged At:\t%s\n", *cluster.PingedAt) } if cluster.Self != nil { - w.Write(LEVEL_0, "Self:\t%v\n", *cluster.Self) + w.Write(Level0, "Self:\t%v\n", *cluster.Self) } if cluster.Provider != nil { - w.Write(LEVEL_0, "Provider:\n") - w.Write(LEVEL_1, "Id:\t%s\n", cluster.Provider.ID) - w.Write(LEVEL_1, "Name:\t%s\n", cluster.Provider.Name) - w.Write(LEVEL_1, "Namespace:\t%s\n", cluster.Provider.Namespace) - w.Write(LEVEL_1, "Editable:\t%v\n", *cluster.Provider.Editable) - w.Write(LEVEL_1, "Cloud:\t%v\n", cluster.Provider.Cloud) + w.Write(Level0, "Provider:\n") + w.Write(Level1, "Id:\t%s\n", cluster.Provider.ID) + w.Write(Level1, "Name:\t%s\n", cluster.Provider.Name) + w.Write(Level1, "Namespace:\t%s\n", cluster.Provider.Namespace) + w.Write(Level1, "Editable:\t%v\n", *cluster.Provider.Editable) + w.Write(Level1, "Cloud:\t%v\n", cluster.Provider.Cloud) if cluster.Provider.Repository != nil { - w.Write(LEVEL_1, "Git:\n") - w.Write(LEVEL_2, "Id:\t%s\n", cluster.Provider.Repository.ID) - w.Write(LEVEL_2, "Url:\t%s\n", cluster.Provider.Repository.URL) + w.Write(Level1, "Git:\n") + w.Write(Level2, "Id:\t%s\n", cluster.Provider.Repository.ID) + w.Write(Level2, "Url:\t%s\n", cluster.Provider.Repository.URL) if cluster.Provider.Repository.AuthMethod != nil { - w.Write(LEVEL_2, "Auth Method:\t%v\n", *cluster.Provider.Repository.AuthMethod) + w.Write(Level2, "Auth Method:\t%v\n", *cluster.Provider.Repository.AuthMethod) } if cluster.Provider.Repository.Health != nil { - w.Write(LEVEL_2, "Health:\t%v\n", *cluster.Provider.Repository.Health) + w.Write(Level2, "Health:\t%v\n", *cluster.Provider.Repository.Health) } if cluster.Provider.Repository.Error != nil { - w.Write(LEVEL_2, "Error:\t%s\n", *cluster.Provider.Repository.Error) + w.Write(Level2, "Error:\t%s\n", *cluster.Provider.Repository.Error) } } } @@ -87,17 +85,17 @@ func DescribeCluster(cluster *consoleclient.ClusterFragment) (string, error) { func DescribeService(service *consoleclient.ServiceDeploymentExtended) (string, error) { return tabbedString(func(out io.Writer) error { w := NewPrefixWriter(out) - w.Write(LEVEL_0, "Id:\t%s\n", service.ID) - w.Write(LEVEL_0, "Name:\t%s\n", service.Name) - w.Write(LEVEL_0, "Namespace:\t%s\n", service.Namespace) - w.Write(LEVEL_0, "Version:\t%s\n", service.Version) + w.Write(Level0, "Id:\t%s\n", service.ID) + w.Write(Level0, "Name:\t%s\n", service.Name) + w.Write(Level0, "Namespace:\t%s\n", service.Namespace) + w.Write(Level0, "Version:\t%s\n", service.Version) if service.Tarball != nil { - w.Write(LEVEL_0, "Tarball:\t%s\n", *service.Tarball) + w.Write(Level0, "Tarball:\t%s\n", *service.Tarball) } else { - w.Write(LEVEL_0, "Tarball:\t%s\n", "") + w.Write(Level0, "Tarball:\t%s\n", "") } if service.DeletedAt != nil { - w.Write(LEVEL_0, "Status:\tTerminating (lasts %s)\n", *service.DeletedAt) + w.Write(Level0, "Status:\tTerminating (lasts %s)\n", *service.DeletedAt) } dryRun := false if service.DryRun != nil { @@ -107,33 +105,33 @@ func DescribeService(service *consoleclient.ServiceDeploymentExtended) (string, if service.Templated != nil { templated = *service.Templated } - w.Write(LEVEL_0, "Dry run:\t%v\n", dryRun) - w.Write(LEVEL_0, "Templated:\t%v\n", templated) - w.Write(LEVEL_0, "Git:\t\n") - w.Write(LEVEL_1, "Ref:\t%s\n", service.Git.Ref) - w.Write(LEVEL_1, "Folder:\t%s\n", service.Git.Folder) + w.Write(Level0, "Dry run:\t%v\n", dryRun) + w.Write(Level0, "Templated:\t%v\n", templated) + w.Write(Level0, "Git:\t\n") + w.Write(Level1, "Ref:\t%s\n", service.Git.Ref) + w.Write(Level1, "Folder:\t%s\n", service.Git.Folder) if service.Revision != nil { - w.Write(LEVEL_1, "Revision:\t\n") - w.Write(LEVEL_2, "Id:\t%s\n", service.Revision.ID) + w.Write(Level1, "Revision:\t\n") + w.Write(Level2, "Id:\t%s\n", service.Revision.ID) } if service.Kustomize != nil { - w.Write(LEVEL_0, "Kustomize:\t\n") - w.Write(LEVEL_1, "Path:\t%s\n", service.Kustomize.Path) + w.Write(Level0, "Kustomize:\t\n") + w.Write(Level1, "Path:\t%s\n", service.Kustomize.Path) } if service.Repository != nil { - w.Write(LEVEL_0, "Repository:\t\n") - w.Write(LEVEL_1, "Id:\t%s\n", service.Repository.ID) - w.Write(LEVEL_1, "Url:\t%s\n", service.Repository.URL) + w.Write(Level0, "Repository:\t\n") + w.Write(Level1, "Id:\t%s\n", service.Repository.ID) + w.Write(Level1, "Url:\t%s\n", service.Repository.URL) if service.Repository.AuthMethod != nil { - w.Write(LEVEL_1, "AuthMethod:\t%s\n", *service.Repository.AuthMethod) + w.Write(Level1, "AuthMethod:\t%s\n", *service.Repository.AuthMethod) } - w.Write(LEVEL_1, "Status:\t\n") + w.Write(Level1, "Status:\t\n") if service.Repository.Health != nil { - w.Write(LEVEL_2, "Health:\t%s\n", *service.Repository.Health) + w.Write(Level2, "Health:\t%s\n", *service.Repository.Health) } if service.Repository.Error != nil { - w.Write(LEVEL_2, "Error:\t%s\n", *service.Repository.Error) + w.Write(Level2, "Error:\t%s\n", *service.Repository.Error) } configMap := map[string]string{} for _, conf := range service.Configuration { @@ -141,8 +139,8 @@ func DescribeService(service *consoleclient.ServiceDeploymentExtended) (string, } printConfigMultiline(w, "Configuration", configMap) if len(service.Components) > 0 { - w.Write(LEVEL_0, "Components:\n Id\tName\tNamespace\tKind\tVersion\tState\tSynced\n") - w.Write(LEVEL_1, "----\t------\t------\t------\t------\t------\t------\n") + w.Write(Level0, "Components:\n Id\tName\tNamespace\tKind\tVersion\tState\tSynced\n") + w.Write(Level1, "----\t------\t------\t------\t------\t------\t------\n") for _, c := range service.Components { namespace := "-" version := "-" @@ -157,20 +155,20 @@ func DescribeService(service *consoleclient.ServiceDeploymentExtended) (string, state = string(*c.State) } - w.Write(LEVEL_1, "%v \t%v\t%v\t%v\t%v\t%v\t%v\n", c.ID, c.Name, namespace, c.Kind, version, state, c.Synced) + w.Write(Level1, "%v \t%v\t%v\t%v\t%v\t%v\t%v\n", c.ID, c.Name, namespace, c.Kind, version, state, c.Synced) } } else { - w.Write(LEVEL_0, "Components: %s\n", "") + w.Write(Level0, "Components: %s\n", "") } if len(service.Errors) > 0 { - w.Write(LEVEL_0, "Errors:\n Source\tMessage\n") - w.Write(LEVEL_1, "----\t------\n") + w.Write(Level0, "Errors:\n Source\tMessage\n") + w.Write(Level1, "----\t------\n") for _, c := range service.Errors { - w.Write(LEVEL_1, "%v \t%v\n", c.Source, c.Message) + w.Write(Level1, "%v \t%v\n", c.Source, c.Message) } } else { - w.Write(LEVEL_0, "Errors: %s\n", "") + w.Write(Level0, "Errors: %s\n", "") } } @@ -181,7 +179,7 @@ func DescribeService(service *consoleclient.ServiceDeploymentExtended) (string, var maxConfigLen = 140 func printConfigMultiline(w PrefixWriter, title string, configurations map[string]string) { - w.Write(LEVEL_0, "%s:\t", title) + w.Write(Level0, "%s:\t", title) // to print labels in the sorted order keys := make([]string, 0, len(configurations)) @@ -196,16 +194,16 @@ func printConfigMultiline(w PrefixWriter, title string, configurations map[strin indent := "\t" for i, key := range keys { if i != 0 { - w.Write(LEVEL_0, indent) + w.Write(Level0, indent) } value := strings.TrimSuffix(configurations[key], "\n") if (len(value)+len(key)+2) > maxConfigLen || strings.Contains(value, "\n") { - w.Write(LEVEL_0, "%s:\n", key) + w.Write(Level0, "%s:\n", key) for _, s := range strings.Split(value, "\n") { - w.Write(LEVEL_0, "%s %s\n", indent, shorten(s, maxConfigLen-2)) + w.Write(Level0, "%s %s\n", indent, shorten(s, maxConfigLen-2)) } } else { - w.Write(LEVEL_0, "%s: %s\n", key, value) + w.Write(Level0, "%s: %s\n", key, value) } } } diff --git a/pkg/format/csv.go b/pkg/format/csv.go deleted file mode 100644 index c87161be1..000000000 --- a/pkg/format/csv.go +++ /dev/null @@ -1,33 +0,0 @@ -package format - -import ( - "encoding/csv" - "os" -) - -type csvFormatter struct { - writer *csv.Writer -} - -func NewCsvFormatter() *csvFormatter { - return &csvFormatter{writer: csv.NewWriter(os.Stdout)} -} - -func (csv *csvFormatter) Write(line []string) error { - return csv.writer.Write(line) -} - -func (csv *csvFormatter) Dump(lines [][]string) error { - return csv.writer.WriteAll(lines) -} - -func (csv *csvFormatter) Flush() error { - csv.writer.Flush() - return nil -} - -func (csv *csvFormatter) Header(line []string) { - if err := csv.writer.Write(line); err != nil { - return - } -} diff --git a/pkg/format/formatter.go b/pkg/format/formatter.go deleted file mode 100644 index 6240ac807..000000000 --- a/pkg/format/formatter.go +++ /dev/null @@ -1,24 +0,0 @@ -package format - -type Formatter interface { - Header(line []string) - Write(line []string) error - Dump(lines [][]string) error - Flush() error -} - -type FormatType string - -const ( - CsvFormat FormatType = "csv" - TableFormat FormatType = "table" -) - -func New(format FormatType) Formatter { - switch format { - case CsvFormat: - return NewCsvFormatter() - default: - return NewTableFormatter() - } -} diff --git a/pkg/format/table.go b/pkg/format/table.go deleted file mode 100644 index 4eafc626f..000000000 --- a/pkg/format/table.go +++ /dev/null @@ -1,37 +0,0 @@ -package format - -import ( - "os" - - "github.com/olekukonko/tablewriter" -) - -type tableFormatter struct { - writer *tablewriter.Table -} - -func NewTableFormatter() *tableFormatter { - return &tableFormatter{writer: tablewriter.NewWriter(os.Stdout)} -} - -func (f *tableFormatter) Write(line []string) error { - f.writer.Append(line) - return nil -} - -func (f *tableFormatter) Dump(lines [][]string) error { - for _, line := range lines { - f.writer.Append(line) - } - - return nil -} - -func (f *tableFormatter) Flush() error { - f.writer.Render() - return nil -} - -func (f *tableFormatter) Header(line []string) { - f.writer.SetHeader(line) -} diff --git a/pkg/pluralfile/artifact.go b/pkg/pluralfile/artifact.go deleted file mode 100644 index c0927bae3..000000000 --- a/pkg/pluralfile/artifact.go +++ /dev/null @@ -1,71 +0,0 @@ -package pluralfile - -import ( - "fmt" - "os" - "os/exec" - "path/filepath" - - "github.com/pluralsh/plural-cli/pkg/api" - "github.com/pluralsh/plural-cli/pkg/utils" -) - -type Artifact struct { - File string - Platform string - Arch string -} - -func (a *Artifact) Type() ComponentName { - return ARTIFACT -} - -func (a *Artifact) Key() string { - return fmt.Sprintf("%s_%s_%s", a.File, a.Platform, a.Arch) -} - -func (a *Artifact) Push(repo string, sha string) (string, error) { - newsha, err := mkSha(a.File) - if err != nil || newsha == sha { - utils.Highlight("No change for %s\n", a.File) - return sha, err - } - - utils.Highlight("pushing artifact %s\n [plat=%s,arch=%s]", a.File, a.Platform, a.Arch) - cmd := exec.Command("plural", "push", "artifact", a.File, repo, "--platform", a.Platform, "--arch", a.Arch) - cmd.Stdout = os.Stdout - cmd.Stderr = os.Stderr - err = cmd.Run() - return newsha, err -} - -func mkSha(file string) (sha string, err error) { - fullPath, _ := filepath.Abs(file) - base, err := utils.Sha256(fullPath) - if err != nil { - return - } - - contents, err := os.ReadFile(fullPath) - if err != nil { - return - } - - input, err := api.ConstructArtifactAttributes(contents) - if err != nil { - return - } - - readme, err := fileSha(input.Readme) - if err != nil { - return - } - - blob, err := fileSha(input.Blob) - if err != nil { - return - } - - sha = utils.Sha([]byte(fmt.Sprintf("%s:%s:%s", base, readme, blob))) - return -} diff --git a/pkg/pluralfile/attrs.go b/pkg/pluralfile/attrs.go deleted file mode 100644 index 84670c5f5..000000000 --- a/pkg/pluralfile/attrs.go +++ /dev/null @@ -1,86 +0,0 @@ -package pluralfile - -import ( - "fmt" - "os" - "path/filepath" - - "github.com/pluralsh/plural-cli/pkg/api" - "github.com/pluralsh/plural-cli/pkg/executor" - "github.com/pluralsh/plural-cli/pkg/utils" -) - -type RepoAttrs struct { - File string - Publisher string -} - -func (a *RepoAttrs) Type() ComponentName { - return REPO_ATTRS -} - -func (a *RepoAttrs) Key() string { - return fmt.Sprintf("%s_%s", a.File, a.Publisher) -} - -func (a *RepoAttrs) Push(repo string, sha string) (string, error) { - fullPath, _ := filepath.Abs(a.File) - contents, err := os.ReadFile(fullPath) - if err != nil { - return "", err - } - - input, err := api.ConstructRepositoryInput(contents) - if err != nil { - return "", err - } - - newsha, err := a.mkSha(fullPath, input) - if err != nil || newsha == sha { - utils.Highlight("No change for %s\n", a.File) - return sha, err - } - - utils.Highlight("Setting attributes for %s\n", repo) - client := api.NewClient() - repositoryAttributes, err := api.ConstructGqlClientRepositoryInput(contents) - if err != nil { - return "", err - } - err = client.CreateRepository(repo, a.Publisher, repositoryAttributes) - return newsha, api.GetErrorResponse(err, "CreateRepository") -} - -func (a *RepoAttrs) mkSha(fullPath string, input *api.RepositoryInput) (sha string, err error) { - base, err := utils.Sha256(fullPath) - if err != nil { - return - } - - iconSha, _ := fileSha(input.Icon) - darkIconSha, _ := fileSha(input.DarkIcon) - - notesSha, err := fileSha(input.Notes) - if err != nil { - return - } - docssha := "" - if input.Docs != "" { - fpath, _ := filepath.Abs(input.Docs) - docssha, err = executor.MkHash(fpath, []string{}) - if err != nil { - return - } - } - - sha = utils.Sha([]byte(fmt.Sprintf("%s:%s:%s:%s%s", base, iconSha, darkIconSha, notesSha, docssha))) - return -} - -func fileSha(path string) (string, error) { - if path == "" { - return "", nil - } - fpath, _ := filepath.Abs(path) - return utils.Sha256(fpath) -} diff --git a/pkg/pluralfile/command.go b/pkg/pluralfile/command.go deleted file mode 100644 index 9a650cdb1..000000000 --- a/pkg/pluralfile/command.go +++ /dev/null @@ -1,29 +0,0 @@ -package pluralfile - -import ( - "fmt" - "os" - "os/exec" - "strings" -) - -type Command struct { - Command string - Args []string -} - -func (c *Command) Type() ComponentName { - return COMMAND -} - -func (c *Command) Key() string { - return "" -} - -func (c *Command) Push(repo string, sha string) (string, error) { - fmt.Println("") - cmd := exec.Command("/bin/sh", "-c", fmt.Sprintf("%s %s", c.Command, strings.Join(c.Args, " "))) - cmd.Stdout = os.Stdout - cmd.Stderr = os.Stderr - return "", cmd.Run() -} diff --git a/pkg/pluralfile/crd.go b/pkg/pluralfile/crd.go deleted file mode 100644 index acfba65dc..000000000 --- a/pkg/pluralfile/crd.go +++ /dev/null @@ -1,49 +0,0 @@ -package pluralfile - -import ( - "fmt" - "os" - "os/exec" - "path/filepath" - - "github.com/pluralsh/plural-cli/pkg/executor" - "github.com/pluralsh/plural-cli/pkg/utils" -) - -type Crd struct { - File string - Chart string -} - -func (a *Crd) Type() ComponentName { - return CRD -} - -func (a *Crd) Key() string { - return a.File -} - -func (c *Crd) Push(repo string, sha string) (string, error) { - crdSha, err := executor.MkHash(c.File, []string{}) - if err != nil { - return sha, err - } - - chartSha, err := executor.MkHash(c.Chart, []string{}) - if err != nil { - return sha, err - } - - newsha := fmt.Sprintf("%s:%s", crdSha, chartSha) - if newsha == sha { - utils.Highlight("No change for %s\n", c.File) - return sha, nil - } - - chart := filepath.Base(c.Chart) - utils.Highlight("pushing crd %s for %s\n", c.File, chart) - cmd := exec.Command("plural", "push", "crd", c.File, repo, chart) - cmd.Stdout = os.Stdout - cmd.Stderr = os.Stderr - return newsha, cmd.Run() -} diff --git a/pkg/pluralfile/helm.go b/pkg/pluralfile/helm.go deleted file mode 100644 index 16c6f21ce..000000000 --- a/pkg/pluralfile/helm.go +++ /dev/null @@ -1,32 +0,0 @@ -package pluralfile - -import ( - "github.com/pluralsh/plural-cli/pkg/executor" - "github.com/pluralsh/plural-cli/pkg/utils" -) - -type Helm struct { - File string -} - -func (a *Helm) Type() ComponentName { - return HELM -} - -func (a *Helm) Key() string { - return a.File -} - -func (a *Helm) Push(repo string, sha string) (string, error) { - newsha, err := executor.MkHash(a.File, []string{}) - if err != nil || newsha == sha { - utils.Highlight("No change for %s\n", a.File) - return sha, nil - } - - utils.Highlight("pushing helm %s", a.File) - cmd, output := executor.SuppressedCommand("plural", "push", "helm", a.File, repo) - - err = executor.RunCommand(cmd, output) - return newsha, err -} diff --git a/pkg/pluralfile/integration.go b/pkg/pluralfile/integration.go deleted file mode 100644 index 5bcb5f574..000000000 --- a/pkg/pluralfile/integration.go +++ /dev/null @@ -1,32 +0,0 @@ -package pluralfile - -import ( - "github.com/pluralsh/plural-cli/pkg/executor" - "github.com/pluralsh/plural-cli/pkg/utils" -) - -type Integration struct { - File string -} - -func (a *Integration) Type() ComponentName { - return INTEGRATION -} - -func (a *Integration) Key() string { - return a.File -} - -func (a *Integration) Push(repo string, sha string) (string, error) { - newsha, err := executor.MkHash(a.File, []string{}) - if err != nil || newsha == sha { - utils.Highlight("No change for %s\n", a.File) - return sha, err - } - - utils.Highlight("pushing integration %s", a.File) - cmd, output := executor.SuppressedCommand("plural", "push", "integration", a.File, repo) - - err = executor.RunCommand(cmd, output) - return newsha, err -} diff --git a/pkg/pluralfile/parse.go b/pkg/pluralfile/parse.go deleted file mode 100644 index cb9714103..000000000 --- a/pkg/pluralfile/parse.go +++ /dev/null @@ -1,206 +0,0 @@ -package pluralfile - -import ( - "bufio" - "os" - "path/filepath" - "regexp" - "strings" - - "github.com/google/shlex" -) - -type Pluralfile struct { - Components []Component - Repo string -} - -type ComponentName string - -const ( - ARTIFACT ComponentName = "artificat" - TERRAFORM ComponentName = "tf" - HELM ComponentName = "helm" - RECIPE ComponentName = "recipe" - INTEGRATION ComponentName = "integration" - CRD ComponentName = "crd" - IRD ComponentName = "ird" - COMMAND ComponentName = "run" - TAG ComponentName = "tag" - REPO_ATTRS ComponentName = "attrs" - STACK ComponentName = "stack" -) - -type Component interface { - Type() ComponentName - Key() string - Push(repo string, sha string) (string, error) -} - -func (plrl *Pluralfile) Execute(f string, lock *Lockfile) (err error) { - defer func(plrl *Pluralfile, lock *Lockfile) { - _ = plrl.Flush(lock) - }(plrl, lock) - for _, component := range plrl.Components { - key := component.Key() - t := component.Type() - sha := lock.getSha(t, key) - newsha, err := component.Push(plrl.Repo, sha) - if err != nil { - return err - } - lock.addSha(t, key, newsha) - } - - return -} - -func Parse(f string) (*Pluralfile, error) { - pluralfile, err := os.Open(f) - if err != nil { - return nil, err - } - plrl := &Pluralfile{} - if err != nil { - return plrl, err - } - defer func(pluralfile *os.File) { - _ = pluralfile.Close() - }(pluralfile) - - scanner := bufio.NewScanner(pluralfile) - r := regexp.MustCompile(`^\s*$`) - for scanner.Scan() { - line := scanner.Text() - ignore := r.MatchString(line) - - if ignore { - continue - } - - splitline, err := shlex.Split(line) - if err != nil { - return plrl, err - } - - switch strings.ToLower(splitline[0]) { - case "repo": - plrl.Repo = splitline[1] - case "helm": - helms, err := expandGlob(splitline[1], func(targ string) Component { - return &Helm{File: targ} - }) - - if err != nil { - return plrl, err - } - - plrl.Components = append(plrl.Components, helms...) - case "tf": - tfs, err := expandGlob(splitline[1], func(targ string) Component { - return &Terraform{File: targ} - }) - - if err != nil { - return plrl, err - } - - plrl.Components = append(plrl.Components, tfs...) - case "artifact": - arts, err := expandGlob(splitline[1], func(targ string) Component { - return &Artifact{File: targ, Platform: splitline[2], Arch: splitline[3]} - }) - - if err != nil { - return plrl, err - } - - plrl.Components = append(plrl.Components, arts...) - case "ird": - irds, err := expandGlob(splitline[1], func(targ string) Component { - return &ResourceDefinition{File: targ} - }) - - if err != nil { - return plrl, err - } - - plrl.Components = append(plrl.Components, irds...) - case "recipe": - recipes, err := expandGlob(splitline[1], func(targ string) Component { - return &Recipe{File: targ} - }) - - if err != nil { - return plrl, err - } - - plrl.Components = append(plrl.Components, recipes...) - case "stack": - stacks, err := expandGlob(splitline[1], func(targ string) Component { - return &Stack{File: targ} - }) - - if err != nil { - return plrl, err - } - - plrl.Components = append(plrl.Components, stacks...) - case "integration": - integs, err := expandGlob(splitline[1], func(targ string) Component { - return &Integration{File: targ} - }) - - if err != nil { - return plrl, err - } - - plrl.Components = append(plrl.Components, integs...) - case "crd": - chart := splitline[2] - crds, err := expandGlob(splitline[1], func(targ string) Component { - return &Crd{Chart: chart, File: targ} - }) - - if err != nil { - return plrl, err - } - plrl.Components = append(plrl.Components, crds...) - case "run": - simpleSplit := strings.Split(line, " ") - cmd, args := simpleSplit[1], simpleSplit[2:] - plrl.Components = append(plrl.Components, &Command{Command: cmd, Args: args}) - case "tag": - tags, err := expandGlob(splitline[1], func(tag string) Component { - return &Tags{File: tag} - }) - - if err != nil { - return plrl, err - } - plrl.Components = append(plrl.Components, tags...) - case "attributes": - pub, file := splitline[1], splitline[2] - - plrl.Components = append(plrl.Components, &RepoAttrs{File: file, Publisher: pub}) - default: - continue - } - } - - return plrl, nil -} - -func expandGlob(relpath string, toComponent func(path string) Component) ([]Component, error) { - var comps []Component - paths, err := filepath.Glob(relpath) - if err != nil { - return comps, err - } - - for _, p := range paths { - comps = append(comps, toComponent(p)) - } - - return comps, nil -} diff --git a/pkg/pluralfile/recipe.go b/pkg/pluralfile/recipe.go deleted file mode 100644 index 007368432..000000000 --- a/pkg/pluralfile/recipe.go +++ /dev/null @@ -1,32 +0,0 @@ -package pluralfile - -import ( - "github.com/pluralsh/plural-cli/pkg/executor" - "github.com/pluralsh/plural-cli/pkg/utils" -) - -type Recipe struct { - File string -} - -func (a *Recipe) Type() ComponentName { - return RECIPE -} - -func (a *Recipe) Key() string { - return a.File -} - -func (a *Recipe) Push(repo string, sha string) (string, error) { - newsha, err := executor.MkHash(a.File, []string{}) - if err != nil || newsha == sha { - utils.Highlight("No change for %s\n", a.File) - return sha, err - } - - utils.Highlight("pushing recipe %s", a.File) - cmd, output := executor.SuppressedCommand("plural", "push", "recipe", a.File, repo) - - err = executor.RunCommand(cmd, output) - return newsha, err -} diff --git a/pkg/pluralfile/resourcedefinition.go b/pkg/pluralfile/resourcedefinition.go deleted file mode 100644 index 3017a06ce..000000000 --- a/pkg/pluralfile/resourcedefinition.go +++ /dev/null @@ -1,32 +0,0 @@ -package pluralfile - -import ( - "github.com/pluralsh/plural-cli/pkg/executor" - "github.com/pluralsh/plural-cli/pkg/utils" -) - -type ResourceDefinition struct { - File string -} - -func (a *ResourceDefinition) Type() ComponentName { - return IRD -} - -func (a *ResourceDefinition) Key() string { - return a.File -} - -func (a *ResourceDefinition) Push(repo string, sha string) (string, error) { - newsha, err := executor.MkHash(a.File, []string{}) - if err != nil || newsha == sha { - utils.Highlight("No change for %s\n", a.File) - return sha, err - } - - utils.Highlight("pushing integration definition %s", a.File) - cmd, output := executor.SuppressedCommand("plural", "push", "resourcedefinition", a.File, repo) - - err = executor.RunCommand(cmd, output) - return newsha, err -} diff --git a/pkg/pluralfile/stack.go b/pkg/pluralfile/stack.go deleted file mode 100644 index 82c16710b..000000000 --- a/pkg/pluralfile/stack.go +++ /dev/null @@ -1,50 +0,0 @@ -package pluralfile - -import ( - "os" - "path/filepath" - - "github.com/pluralsh/plural-cli/pkg/api" - "github.com/pluralsh/plural-cli/pkg/executor" - "github.com/pluralsh/plural-cli/pkg/utils" -) - -type Stack struct { - File string -} - -func (a *Stack) Type() ComponentName { - return STACK -} - -func (a *Stack) Key() string { - return a.File -} - -func (a *Stack) Push(repo string, sha string) (string, error) { - newsha, err := executor.MkHash(a.File, []string{}) - if err != nil || newsha == sha { - utils.Highlight("No change for %s\n", a.File) - return sha, err - } - - fullPath, _ := filepath.Abs(a.File) - contents, err := os.ReadFile(fullPath) - if err != nil { - return "", err - } - - utils.Highlight("pushing stack %s", a.File) - client := api.NewClient() - attrs, err := api.ConstructStack(contents) - if err != nil { - return "", err - } - - _, err = client.CreateStack(attrs) - if err == nil { - utils.Success("\u2713\n") - } - - return newsha, api.GetErrorResponse(err, "CreateStack") -} diff --git a/pkg/pluralfile/tags.go b/pkg/pluralfile/tags.go deleted file mode 100644 index f5882eb00..000000000 --- a/pkg/pluralfile/tags.go +++ /dev/null @@ -1,82 +0,0 @@ -package pluralfile - -import ( - "errors" - "fmt" - "io" - "os" - - "github.com/pluralsh/plural-cli/pkg/api" - "github.com/pluralsh/plural-cli/pkg/executor" - "github.com/pluralsh/plural-cli/pkg/utils" - "gopkg.in/yaml.v2" -) - -type VersionSpec struct { - Chart *string - Terraform *string - Version string -} - -type VersionTags struct { - Spec *VersionSpec - Tags []string -} - -type Tags struct { - File string -} - -func (a *Tags) Type() ComponentName { - return TAG -} - -func (a *Tags) Key() string { - return a.File -} - -func (t *Tags) Push(repo string, sha string) (string, error) { - newsha, err := executor.MkHash(t.File, []string{}) - if err != nil || newsha == sha { - if err == nil { - utils.Highlight("No change for %s\n", t.File) - } - return sha, err - } - - f, err := os.Open(t.File) - if err != nil { - return sha, err - } - - utils.Highlight("updating tags for %s", t.File) - client := api.NewClient() - d := yaml.NewDecoder(f) - for { - tagSpec := &VersionTags{} - err = d.Decode(tagSpec) - if errors.Is(err, io.EOF) { - break - } - if err != nil { - fmt.Println("") - return sha, err - } - - vspec := &api.VersionSpec{ - Repository: repo, - Chart: tagSpec.Spec.Chart, - Terraform: tagSpec.Spec.Terraform, - Version: tagSpec.Spec.Version, - } - if err := client.UpdateVersion(vspec, tagSpec.Tags); err != nil { - fmt.Println("") - return sha, api.GetErrorResponse(err, "UpdateVersion") - } - - utils.Highlight(".") - } - - utils.Success("\u2713\n") - return newsha, nil -} diff --git a/pkg/pluralfile/terraform.go b/pkg/pluralfile/terraform.go deleted file mode 100644 index 75783df85..000000000 --- a/pkg/pluralfile/terraform.go +++ /dev/null @@ -1,38 +0,0 @@ -package pluralfile - -import ( - "os" - "os/exec" - - "github.com/pluralsh/plural-cli/pkg/executor" - "github.com/pluralsh/plural-cli/pkg/utils" -) - -type Terraform struct { - File string -} - -func (a *Terraform) Type() ComponentName { - return TERRAFORM -} - -func (a *Terraform) Key() string { - return a.File -} - -func (a *Terraform) Push(repo string, sha string) (string, error) { - newsha, err := executor.MkHash(a.File, []string{}) - if err != nil || newsha == sha { - if err == nil { - utils.Highlight("No change for %s\n", a.File) - } - return sha, err - } - - utils.Highlight("pushing terraform %s\n", a.File) - cmd := exec.Command("plural", "push", "terraform", a.File, repo) - cmd.Stdout = os.Stdout - cmd.Stderr = os.Stderr - err = cmd.Run() - return newsha, err -} diff --git a/pkg/provider/provider.go b/pkg/provider/provider.go index f87e80dfb..08754fea5 100644 --- a/pkg/provider/provider.go +++ b/pkg/provider/provider.go @@ -59,10 +59,6 @@ var ( filterProviders = containers.ToSet([]string{"GENERIC", "KIND", "LINODE"}) ) -func IgnoreProviders(prov []string) { - filterProviders = containers.ToSet([]string{"GENERIC", "KIND"}) -} - func GetProviderScaffold(provider, version string) (string, error) { if providers.Scaffolds == nil { providers.Scaffolds = make(map[string]string) diff --git a/pkg/template/funcs.go b/pkg/template/funcs.go index 70a206773..5ed8b5d68 100644 --- a/pkg/template/funcs.go +++ b/pkg/template/funcs.go @@ -97,12 +97,12 @@ func homeDir(parts ...string) (string, error) { } func knownHosts() (string, error) { - known_hosts, err := homeDir(".ssh", "known_hosts") + knownHostsPath, err := homeDir(".ssh", "known_hosts") if err != nil { return "", err } - res, _ := utils.ReadFile(known_hosts) + res, _ := utils.ReadFile(knownHostsPath) return res, nil } @@ -161,30 +161,6 @@ func importValue(tool, path string) string { return fmt.Sprintf(`"{{ .Import.%s.%s }}"`, tool, path) } -func chartInstalled(name, repoName string) (bool, error) { - client := api.NewClient() - - repo, err := client.GetRepository(repoName) - if err != nil { - fmt.Printf("error: %s\n", err) - return false, nil - } - - chartInstallations, err := client.GetChartInstallations(repo.Id) - if err != nil { - fmt.Printf("error: %s\n", err) - return false, nil - } - - for _, chartInstallation := range chartInstallations { - if chartInstallation.Chart.Name == name { - return true, nil - } - } - - return false, nil -} - func toYaml(val interface{}) (string, error) { res, err := yaml.Marshal(val) return string(res), err diff --git a/pkg/template/template.go b/pkg/template/template.go index 732e814b6..d0a7e7f07 100644 --- a/pkg/template/template.go +++ b/pkg/template/template.go @@ -34,7 +34,6 @@ func GetFuncMap() template.FuncMap { funcs["fileExists"] = fileExists funcs["pathJoin"] = pathJoin funcs["eabCredential"] = eabCredential - funcs["chartInstalled"] = chartInstalled return funcs } diff --git a/pkg/ui/client.go b/pkg/ui/client.go index af262383c..552b48c4f 100644 --- a/pkg/ui/client.go +++ b/pkg/ui/client.go @@ -6,14 +6,11 @@ import ( "encoding/json" "fmt" - "github.com/pluralsh/polly/algorithms" - "github.com/urfave/cli" - "golang.org/x/exp/maps" - "github.com/pluralsh/plural-cli/pkg/api" - "github.com/pluralsh/plural-cli/pkg/bundle" "github.com/pluralsh/plural-cli/pkg/config" "github.com/pluralsh/plural-cli/pkg/manifest" + "github.com/pluralsh/polly/algorithms" + "github.com/urfave/cli" ) type Application struct { @@ -130,48 +127,6 @@ func (this *Client) Install(applications []Application, domains, buckets []strin return err } -func (this *Client) doInstall(application Application, context *manifest.Context) error { - recipeID := application.Data["id"].(string) - oidc := application.Data["oidc"].(bool) - configuration := application.Data["context"].(map[string]interface{}) - repoName := application.Label - mergedConfiguration, exists := context.Configuration[repoName] - if !exists { - mergedConfiguration = map[string]interface{}{} - } - - recipe, err := this.client.GetRecipeByID(recipeID) - if err != nil { - return api.GetErrorResponse(err, "GetRecipeByID") - } - - // Merge incoming configuration with existing one and update context - maps.Copy(mergedConfiguration, configuration) - context.Configuration[repoName] = mergedConfiguration - - // Non-dependency apps need some additional handling - if !application.IsDependency { - // Add installed app to the context - context.AddBundle(repoName, recipe.Name) - - // Install app recipe - if err := this.client.InstallRecipe(recipeID); err != nil { - return fmt.Errorf("error: %w", api.GetErrorResponse(err, "InstallRecipe")) - } - } - - // Configure OIDC if enabled - if oidc { - confirm := true - err = bundle.ConfigureOidc(repoName, this.client, recipe, configuration, &confirm) - if err != nil { - return err - } - } - - return nil -} - func (this *Client) addDomains(context *manifest.Context, domains []string) { for _, domain := range domains { if !context.HasDomain(domain) { From f774be1fe515067936477e8a4860e91182b77100 Mon Sep 17 00:00:00 2001 From: Marcin Maciaszczyk Date: Wed, 4 Dec 2024 17:11:10 +0100 Subject: [PATCH 14/37] remove unused client methods --- cmd/command/shell/shell.go | 92 -------------------------------------- pkg/api/charts.go | 29 ------------ pkg/api/client.go | 12 ----- pkg/api/cluster.go | 25 ----------- pkg/api/installations.go | 5 --- pkg/api/repos.go | 21 --------- pkg/api/shell.go | 28 ------------ pkg/api/terraform.go | 14 ------ pkg/api/upgrades.go | 17 ------- 9 files changed, 243 deletions(-) delete mode 100644 cmd/command/shell/shell.go delete mode 100644 pkg/api/shell.go delete mode 100644 pkg/api/upgrades.go diff --git a/cmd/command/shell/shell.go b/cmd/command/shell/shell.go deleted file mode 100644 index 162f1fe9e..000000000 --- a/cmd/command/shell/shell.go +++ /dev/null @@ -1,92 +0,0 @@ -package shell - -import ( - "os" - - "github.com/pluralsh/plural-cli/pkg/api" - "github.com/pluralsh/plural-cli/pkg/common" - "github.com/pluralsh/plural-cli/pkg/config" - pkgcrypto "github.com/pluralsh/plural-cli/pkg/crypto" - "github.com/pluralsh/plural-cli/pkg/utils" - "github.com/pluralsh/plural-cli/pkg/utils/git" - "github.com/urfave/cli" -) - -func Command() cli.Command { - return cli.Command{ - Name: "shell", - Usage: "manages your cloud shell", - Subcommands: shellCommands(), - Category: "Workspace", - } -} - -func shellCommands() []cli.Command { - return []cli.Command{ - { - Name: "sync", - Usage: "syncs the setup in your cloud shell locally", - Action: common.LatestVersion(handleShellSync), - Flags: []cli.Flag{ - cli.StringFlag{ - Name: "endpoint", - Usage: "the endpoint for the plural installation you're working with", - }, - cli.StringFlag{ - Name: "service-account", - Usage: "email for the service account you'd like to use for this workspace", - }, - }, - }, - { - Name: "purge", - Usage: "deletes your cloud shell", - Action: common.LatestVersion(handleShellPurge), - }, - } -} - -func handleShellSync(c *cli.Context) error { - if !config.Exists() { - if err := common.HandleLogin(c); err != nil { - return err - } - } - client := api.NewClient() - - shell, err := client.GetShell() - if err != nil { - return api.GetErrorResponse(err, "GetShell") - } - - if err := pkgcrypto.Setup(shell.AesKey); err != nil { - return err - } - - utils.Highlight("Cloning your workspace repo locally:\n") - if err := utils.Exec("git", "clone", shell.GitUrl); err != nil { - return err - } - - dir := git.RepoName(shell.GitUrl) - if err := os.Chdir(dir); err != nil { - return err - } - if err := common.CryptoInit(c); err != nil { - return err - } - - return common.HandleUnlock(c) -} - -var destoryShellConfirm = "Are you sure you want to destroy your cloud shell (you should either `plural destroy` anything deployed or `plural shell sync` to sync the contents locally)?" - -func handleShellPurge(c *cli.Context) error { - if ok := common.Confirm(destoryShellConfirm, "PLURAL_SHELL_PURGE_CONFIRM"); !ok { - return nil - } - - client := api.NewClient() - err := client.DeleteShell() - return api.GetErrorResponse(err, "DeleteShell") -} diff --git a/pkg/api/charts.go b/pkg/api/charts.go index 6f4bb0e11..12f83b559 100644 --- a/pkg/api/charts.go +++ b/pkg/api/charts.go @@ -1,10 +1,6 @@ package api import ( - "context" - "os" - "path" - "github.com/pluralsh/gqlclient" "github.com/pluralsh/gqlclient/pkg/utils" ) @@ -87,31 +83,6 @@ func (client *client) GetPackageInstallations(repoId string) (charts []*ChartIns return } -func (client *client) CreateCrd(repo string, chart string, file string) error { - name := path.Base(file) - - rf, err := os.Open(file) - if err != nil { - return err - } - defer func(rf *os.File) { - _ = rf.Close() - }(rf) - - upload := gqlclient.Upload{ - R: rf, - Name: file, - Field: "blob", - } - client.pluralClient.Client.CustomDo = gqlclient.WithFiles([]gqlclient.Upload{upload}, client.httpClient) - _, err = client.pluralClient.CreateCrd(context.Background(), gqlclient.ChartName{ - Chart: &chart, - Repo: &repo, - }, name, "blob") - - return err -} - func (client *client) UninstallChart(id string) (err error) { _, err = client.pluralClient.UninstallChart(client.ctx, id) return diff --git a/pkg/api/client.go b/pkg/api/client.go index 657a1ab03..3e608082b 100644 --- a/pkg/api/client.go +++ b/pkg/api/client.go @@ -43,37 +43,25 @@ type Client interface { CreateRepository(name string, publisher string, input *gqlclient.RepositoryAttributes) error AcquireLock(repo string) (*ApplyLock, error) ReleaseLock(repo string, lock string) (*ApplyLock, error) - UnlockRepository(name string) error ListRepositories(query string) ([]*Repository, error) Scaffolds(in *ScaffoldInputs) ([]*ScaffoldFile, error) UpdateVersion(spec *VersionSpec, tags []string) error - CreateCrd(repo string, chart string, file string) error CreateDomain(name string) error CreateInstallation(id string) (string, error) GetInstallation(name string) (*Installation, error) GetInstallations() ([]*Installation, error) OIDCProvider(id string, attributes *OidcProviderAttributes) error - GetShell() (CloudShell, error) - DeleteShell() error - GetTerraform(repoId string) ([]*Terraform, error) CreateKeyBackup(attrs KeyBackupAttributes) error GetKeyBackup(name string) (*KeyBackup, error) ListKeyBackups() ([]*KeyBackup, error) GetHelp(prompt string) (string, error) - DestroyCluster(domain, name, provider string) error - CreateDependency(source, dest string) error - PromoteCluster() error Clusters() ([]*Cluster, error) Cluster(id string) (*Cluster, error) - CreateUpgrade(queue, repository string, attrs gqlclient.UpgradeAttributes) error - TransferOwnership(name, email string) error Release(name string, tags []string) error Chat(history []*ChatMessage) (*ChatMessage, error) - InstallVersion(tp, repo, pkg, vsn string) error CreateTrust(issuer, trust string) error DeleteTrust(id string) error OidcToken(provider gqlclient.ExternalOidcProvider, token, email string) (string, error) - MarkSynced(repo string) error GetConsoleInstances() ([]*gqlclient.ConsoleInstanceFragment, error) UpdateConsoleInstance(id string, attrs gqlclient.ConsoleInstanceUpdateAttributes) error } diff --git a/pkg/api/cluster.go b/pkg/api/cluster.go index 5e560937f..244340846 100644 --- a/pkg/api/cluster.go +++ b/pkg/api/cluster.go @@ -1,34 +1,9 @@ package api import ( - "github.com/pluralsh/gqlclient" "github.com/samber/lo" ) -func (client *client) DestroyCluster(domain, name, provider string) error { - _, err := client.pluralClient.DestroyCluster(client.ctx, domain, name, gqlclient.Provider(ToGQLClientProvider(provider))) - if err != nil { - return err - } - - return nil -} - -func (client *client) CreateDependency(source, dest string) error { - _, err := client.pluralClient.CreateDependency(client.ctx, source, dest) - return err -} - -func (client *client) PromoteCluster() error { - _, err := client.pluralClient.PromoteCluster(client.ctx) - return err -} - -func (client *client) TransferOwnership(name, email string) error { - _, err := client.pluralClient.TransferOwnership(client.ctx, name, email) - return err -} - func (client *client) Clusters() ([]*Cluster, error) { resp, err := client.pluralClient.Clusters(client.ctx, nil) if err != nil { diff --git a/pkg/api/installations.go b/pkg/api/installations.go index 249db43d7..c80201c2f 100644 --- a/pkg/api/installations.go +++ b/pkg/api/installations.go @@ -153,11 +153,6 @@ func (client *client) OIDCProvider(id string, attributes *OidcProviderAttributes return err } -func (client *client) MarkSynced(repo string) error { - _, err := client.pluralClient.MarkSynced(client.ctx, repo) - return err -} - func convertRedirectUris(uris []string) []*string { res := make([]*string, len(uris)) for i := range uris { diff --git a/pkg/api/repos.go b/pkg/api/repos.go index 38e281e24..96c1d23de 100644 --- a/pkg/api/repos.go +++ b/pkg/api/repos.go @@ -2,7 +2,6 @@ package api import ( "context" - "fmt" "os" "path/filepath" "strings" @@ -172,15 +171,6 @@ func (client *client) ReleaseLock(repo, lock string) (*ApplyLock, error) { }, nil } -func (client *client) UnlockRepository(name string) error { - _, err := client.pluralClient.UnlockRepository(client.ctx, name) - if err != nil { - return err - } - - return nil -} - func (client *client) ListRepositories(query string) ([]*Repository, error) { resp, err := client.pluralClient.ListRepositories(client.ctx, &query) if err != nil { @@ -210,17 +200,6 @@ func (client *client) ListRepositories(query string) ([]*Repository, error) { return res, err } -func (client *client) InstallVersion(tp, repo, name, vsn string) error { - tp = strings.ToUpper(tp) - dt := gqlclient.DependencyType(tp) - if !dt.IsValid() { - return fmt.Errorf("invalid package type %s", tp) - } - - _, err := client.pluralClient.InstallVersion(context.Background(), dt, repo, name, vsn) - return err -} - func (client *client) Release(name string, tags []string) error { _, err := client.pluralClient.Release(context.Background(), name, tags) return err diff --git a/pkg/api/shell.go b/pkg/api/shell.go deleted file mode 100644 index 51f96a7cf..000000000 --- a/pkg/api/shell.go +++ /dev/null @@ -1,28 +0,0 @@ -package api - -import "fmt" - -func (client *client) GetShell() (CloudShell, error) { - resp, err := client.pluralClient.GetShell(client.ctx) - if err != nil { - return CloudShell{}, err - } - - if resp.Shell != nil { - return CloudShell{ - Id: resp.Shell.ID, - AesKey: resp.Shell.AesKey, - GitUrl: resp.Shell.GitURL, - }, nil - } - return CloudShell{}, fmt.Errorf("Could not find a cloud shell for this user") -} - -func (client *client) DeleteShell() error { - _, err := client.pluralClient.DeleteShell(client.ctx) - if err != nil { - return err - } - - return nil -} diff --git a/pkg/api/terraform.go b/pkg/api/terraform.go index 94e7812a0..5c708c934 100644 --- a/pkg/api/terraform.go +++ b/pkg/api/terraform.go @@ -11,20 +11,6 @@ import ( "github.com/pluralsh/plural-cli/pkg/utils/pathing" ) -func (client *client) GetTerraform(repoId string) ([]*Terraform, error) { - - terraformResponse, err := client.pluralClient.GetTerraform(client.ctx, repoId) - if err != nil { - return nil, err - } - - terraform := make([]*Terraform, 0) - for _, edge := range terraformResponse.Terraform.Edges { - terraform = append(terraform, convertTerraform(edge.Node)) - } - return terraform, err -} - func (client *client) GetTerraformVersions(id string) ([]*Version, error) { resp, err := client.pluralClient.GetTerraformVersions(client.ctx, id) if err != nil { diff --git a/pkg/api/upgrades.go b/pkg/api/upgrades.go deleted file mode 100644 index d348fee04..000000000 --- a/pkg/api/upgrades.go +++ /dev/null @@ -1,17 +0,0 @@ -package api - -import ( - "github.com/pluralsh/gqlclient" - "sigs.k8s.io/yaml" -) - -func (client *client) CreateUpgrade(queue, repository string, attrs gqlclient.UpgradeAttributes) error { - _, err := client.pluralClient.CreateUpgrade(client.ctx, queue, repository, attrs) - return err -} - -func ConstructUpgradeAttributes(marshalled []byte) (gqlclient.UpgradeAttributes, error) { - var attrs gqlclient.UpgradeAttributes - err := yaml.Unmarshal(marshalled, &attrs) - return attrs, err -} From f4cee4072b18458a8d9cc6c30d14498d6a0c67da Mon Sep 17 00:00:00 2001 From: Marcin Maciaszczyk Date: Wed, 4 Dec 2024 17:16:56 +0100 Subject: [PATCH 15/37] remove plrlctl --- .goreleaser.yaml | 89 ---------------------------------- Makefile | 19 -------- cmd/command/plural/plural.go | 2 +- cmd/plrlctl/main.go | 87 --------------------------------- dockerfiles/plrlctl/Dockerfile | 47 ------------------ 5 files changed, 1 insertion(+), 243 deletions(-) delete mode 100644 cmd/plrlctl/main.go delete mode 100644 dockerfiles/plrlctl/Dockerfile diff --git a/.goreleaser.yaml b/.goreleaser.yaml index 4ca582528..d610b163d 100644 --- a/.goreleaser.yaml +++ b/.goreleaser.yaml @@ -27,33 +27,11 @@ builds: - -X "github.com/pluralsh/plural-cli/pkg/common.Date={{.Date}}" - -X "github.com/pluralsh/plural-cli/pkg/scm.GitlabClientSecret={{.Env.GITLAB_CLIENT_SECRET}}" binary: plural - - id: plrlctl - main: ./cmd/plrlctl - targets: - - linux_amd64 - - linux_arm64 - - windows_amd64 - - windows_arm64 - - darwin_amd64 - - darwin_arm64 - env: - - CGO_ENABLED=0 - ldflags: - - -s - - -w - - -X "github.com/pluralsh/plural-cli/pkg/common.Version={{.Version}}" - - -X "github.com/pluralsh/plural-cli/pkg/common.Commit={{.Commit}}" - - -X "github.com/pluralsh/plural-cli/pkg/common.Date={{.Date}}" - - -X "github.com/pluralsh/plural-cli/pkg/scm.GitlabClientSecret={{.Env.GITLAB_CLIENT_SECRET}}" - binary: pluralctl archives: - id: plural-cli builds: [plural-cli] name_template: '{{ .ProjectName }}_{{ .Version }}_{{- title .Os -}}_{{- if eq .Arch "386" -}}i386{{- else -}}{{ .Arch }}{{- end -}}' - - id: plrlctl - builds: [plrlctl] - name_template: '{{ .Binary }}_{{ .Version }}_{{- title .Os -}}_{{- if eq .Arch "386" -}}i386{{- else -}}{{ .Arch }}{{- end -}}' checksum: name_template: 'checksums.txt' @@ -160,70 +138,3 @@ brews: test: | system "#{bin}/plural", "--help" - - - name: plrlctl - ids: [plrlctl] - repository: - owner: pluralsh - name: homebrew-plural - - # Optionally a branch can be provided. - # Defaults to the default repository branch. - branch: main - - # Optionally a token can be provided, if it differs from the token provided to GoReleaser - token: "{{ .Env.HOMEBREW_TAP_GITHUB_TOKEN }}" - - # Template for the url which is determined by the given Token (github, gitlab or gitea) - # - # Default depends on the client. - url_template: "https://github.com/pluralsh/plural-cli/releases/download/{{ .Tag }}/{{ .ArtifactName }}" - - # Allows you to set a custom download strategy. Note that you'll need - # to implement the strategy and add it to your tap repository. - # Example: https://docs.brew.sh/Formula-Cookbook#specifying-the-download-strategy-explicitly - # Default is empty. - download_strategy: CurlDownloadStrategy - - # Git author used to commit to the repository. - # Defaults are shown. - commit_author: - name: plural-bot - email: gh-bot@plural.sh - - # The project name and current git tag are used in the format string. - commit_msg_template: "Brew formula update for {{ .ProjectName }} version {{ .Tag }}" - - # Folder inside the repository to put the formula. - # Default is the root folder. - directory: Formula - - # Your app's homepage. - # Default is empty. - homepage: "https://docs.plural.sh" - - # Template of your app's description. - # Default is empty. - description: "CLI to manage and operate a fleet of clusters" - - # SPDX identifier of your app's license. - # Default is empty. - license: "MIT" - - # Setting this will prevent goreleaser to actually try to commit the updated - # formula - instead, the formula file will be stored on the dist folder only, - # leaving the responsibility of publishing it to the user. - # If set to auto, the release will not be uploaded to the homebrew tap - # in case there is an indicator for prerelease in the tag e.g. v1.0.0-rc1 - # Default is false. - skip_upload: "auto" - - # Custom block for brew. - # Can be used to specify alternate downloads for devel or head releases. - # Default is empty. - custom_block: | - head "https://github.com/pluralsh/plural-cli.git" - - test: | - system "#{bin}/plrlctl", "--help" - diff --git a/Makefile b/Makefile index 680418326..1060b3235 100644 --- a/Makefile +++ b/Makefile @@ -6,7 +6,6 @@ include $(ROOT_DIRECTORY)/hack/include/build.mk GCP_PROJECT ?= pluralsh APP_NAME ?= plural-cli -APP_CTL_NAME ?= plrlctl APP_VSN ?= $(shell git describe --tags --always --dirty) APP_DATE ?= $(shell date -u +"%Y-%m-%dT%H:%M:%S%z") BUILD ?= $(shell git rev-parse --short HEAD) @@ -27,7 +26,6 @@ WAILS_BINDINGS_TAGS ?= bindings,generate WAILS_BINDINGS_BINARY_NAME ?= wailsbindings TAGS ?= $(WAILS_TAGS) OUTFILE ?= plural.o -OUTCTLFILE ?= plrlctl.o GOBIN ?= go env GOBIN # Targets to run before other targets @@ -42,16 +40,11 @@ git-push: .PHONY: install install: go build -ldflags '$(LDFLAGS)' -o $(GOBIN)/plural ./cmd/plural - go build -ldflags '$(LDFLAGS)' -o $(GOBIN)/plrlctl ./cmd/plrlctl .PHONY: build-cli build-cli: ## Build a CLI binary for the host architecture without embedded UI go build -ldflags='$(LDFLAGS)' -o $(OUTFILE) ./cmd/plural -.PHONY: build-ctl -build-ctl: ## Build a CLI binary for the fleet management - go build -ldflags='$(LDFLAGS)' -o $(OUTCTLFILE) ./cmd/plrlctl - .PHONY: build-cli-ui build-cli-ui: $(PRE) generate-bindings ## Build a CLI binary for the host architecture with embedded UI CGO_LDFLAGS=$(CGO_LDFLAGS) go build -tags $(WAILS_TAGS) -ldflags='$(LDFLAGS)' -o $(OUTFILE) ./cmd/plural @@ -78,7 +71,6 @@ generate-bindings: build-web ## Generate backend bindings for the embedded UI .PHONY: release release: GOOS=$(GOOS) GOARCH=$(GOARCH) go build -ldflags='$(LDFLAGS)' -o $(OUTFILE) ./cmd/plural - GOOS=$(GOOS) GOARCH=$(GOARCH) go build -ldflags='$(LDFLAGS)' -o $(OUTCTLFILE) ./cmd/plrlctl .PHONY: goreleaser goreleaser: @@ -103,17 +95,6 @@ build: ## Build the Docker image -t gcr.io/$(GCP_PROJECT)/$(APP_NAME):$(APP_VSN) \ -t $(DKR_HOST)/plural/$(APP_NAME):$(APP_VSN) . -.PHONY: build-ctl -build-ctl: ## Build the plrctl Docker image - docker build --build-arg APP_NAME=$(APP_CTL_NAME) \ - --build-arg APP_VSN=$(APP_VSN) \ - --build-arg APP_DATE=$(APP_DATE) \ - --build-arg APP_COMMIT=$(BUILD) \ - -t $(APP_CTL_NAME):$(APP_VSN) \ - -t $(APP_CTL_NAME):latest \ - -t gcr.io/$(GCP_PROJECT)/$(APP_CTL_NAME):$(APP_VSN) \ - -t $(DKR_HOST)/plural/$(APP_CTL_NAME):$(APP_VSN) -f dockerfiles/plrlctl/Dockerfile . - .PHONY: build-cloud build-cloud: ## build the cloud docker image docker build --build-arg APP_NAME=$(APP_NAME) \ diff --git a/cmd/command/plural/plural.go b/cmd/command/plural/plural.go index 6a0589baa..122f1486c 100644 --- a/cmd/command/plural/plural.go +++ b/cmd/command/plural/plural.go @@ -136,7 +136,7 @@ func globalFlags() []cli.Flag { cli.BoolFlag{ Name: "bootstrap", Usage: "enable bootstrap mode", - Destination: &common.BootstrapMode, + Destination: &common.BootstrapMode, // TODO Remove Hidden: !exp.IsFeatureEnabled(exp.EXP_PLURAL_CAPI), }, } diff --git a/cmd/plrlctl/main.go b/cmd/plrlctl/main.go deleted file mode 100644 index f2ef09363..000000000 --- a/cmd/plrlctl/main.go +++ /dev/null @@ -1,87 +0,0 @@ -package main - -import ( - "log" - "os" - - "github.com/pluralsh/plural-cli/cmd/command/cd" - - "github.com/fatih/color" - "github.com/urfave/cli" - "helm.sh/helm/v3/pkg/action" - - "github.com/pluralsh/plural-cli/cmd/command/clone" - cryptocmd "github.com/pluralsh/plural-cli/cmd/command/crypto" - "github.com/pluralsh/plural-cli/cmd/command/down" - cmdinit "github.com/pluralsh/plural-cli/cmd/command/init" - "github.com/pluralsh/plural-cli/cmd/command/mgmt" - "github.com/pluralsh/plural-cli/cmd/command/pr" - "github.com/pluralsh/plural-cli/cmd/command/profile" - "github.com/pluralsh/plural-cli/cmd/command/up" - "github.com/pluralsh/plural-cli/cmd/command/version" - "github.com/pluralsh/plural-cli/pkg/client" - conf "github.com/pluralsh/plural-cli/pkg/config" - "github.com/pluralsh/plural-cli/pkg/crypto" - "github.com/pluralsh/plural-cli/pkg/utils" -) - -const ApplicationName = "plrlctl" - -type Plural struct { - client.Plural - HelmConfiguration *action.Configuration -} - -func globalFlags() []cli.Flag { - return []cli.Flag{ - cli.StringFlag{ - Name: "profile-file", - Usage: "configure your config.yml profile `FILE`", - EnvVar: "PLURAL_PROFILE_FILE", - Destination: &conf.ProfileFile, - }, - cli.StringFlag{ - Name: "encryption-key-file", - Usage: "configure your encryption key `FILE`", - EnvVar: "PLURAL_ENCRYPTION_KEY_FILE", - Destination: &crypto.EncryptionKeyFile, - }, - cli.BoolFlag{ - Name: "debug", - Usage: "enable debug mode", - EnvVar: "PLURAL_DEBUG_ENABLE", - Destination: &utils.EnableDebug, - }, - } -} - -func main() { - - plural := &Plural{} - - app := cli.NewApp() - app.Name = ApplicationName - app.Usage = "Tooling to manage and operate a fleet of clusters" - app.EnableBashCompletion = true - app.Flags = globalFlags() - commands := []cli.Command{ - cryptocmd.Command(plural.Plural), - clone.Command(), - cd.Command(plural.Plural, plural.HelmConfiguration), - up.Command(plural.Plural), - down.Command(), - pr.Command(plural.Plural), - cmdinit.Command(plural.Plural), - mgmt.Command(plural.Plural), - profile.Command(), - version.Command(), - } - app.Commands = commands - if os.Getenv("ENABLE_COLOR") != "" { - color.NoColor = false - } - err := app.Run(os.Args) - if err != nil { - log.Fatal(err) - } -} diff --git a/dockerfiles/plrlctl/Dockerfile b/dockerfiles/plrlctl/Dockerfile deleted file mode 100644 index 7fe58ad8e..000000000 --- a/dockerfiles/plrlctl/Dockerfile +++ /dev/null @@ -1,47 +0,0 @@ -FROM ubuntu:22.10 AS user - -# Create a nonroot user for final image -RUN useradd -u 10001 nonroot - -FROM golang:1.22-alpine3.19 AS builder - -WORKDIR /workspace - -# Copy the Go Modules manifests -COPY go.mod go.mod -COPY go.sum go.sum -# cache deps before building and copying source so that we don't need to re-download as much -# and so that source changes don't invalidate our downloaded layer -RUN go mod download - -# Copy the go source -COPY cmd/ cmd/ -COPY pkg/ pkg/ - -# Build -ARG APP_VSN -ARG APP_COMMIT -ARG APP_DATE -ARG TARGETARCH - -RUN CGO_ENABLED=0 GOOS=linux GOARCH=${TARGETARCH} \ - go build -ldflags '-s -w \ - -X "github.com/pluralsh/plural-cli/pkg/common.Version=${APP_VSN}" \ - -X "github.com/pluralsh/plural-cli/pkg/common.Commit=${APP_COMMIT}" \ - -X "github.com/pluralsh/plural-cli/pkg/common.Date=${APP_DATE}"' \ - -o plrlctl ./cmd/plrlctl - -FROM golang:1.22-alpine3.19 AS final - -WORKDIR / - -RUN apk update && apk add --no-cache git build-base - -# Copy nonroot user and switch to it -COPY --from=user /etc/passwd /etc/passwd -USER nonroot - -COPY --chown=nonroot --from=builder /workspace/plrlctl /go/bin/ -RUN chmod a+x /go/bin/plrlctl - -ENTRYPOINT ["/go/bin/plrlctl"] From b44c90821499e352ca3d7d033f47b2d18dafd50e Mon Sep 17 00:00:00 2001 From: Marcin Maciaszczyk Date: Wed, 4 Dec 2024 17:26:51 +0100 Subject: [PATCH 16/37] remove unused code and old diagrams --- pkg/manifest/context.go | 52 ------ pkg/pluralfile/lock.go | 163 ------------------- pkg/utils/map.go | 53 ------ plural_bootstrap_procedure.drawio | 221 -------------------------- plural_bootstrap_procedure.drawio.png | Bin 835023 -> 0 bytes 5 files changed, 489 deletions(-) delete mode 100644 pkg/pluralfile/lock.go delete mode 100644 plural_bootstrap_procedure.drawio delete mode 100644 plural_bootstrap_procedure.drawio.png diff --git a/pkg/manifest/context.go b/pkg/manifest/context.go index 846efcaf9..9902c6580 100644 --- a/pkg/manifest/context.go +++ b/pkg/manifest/context.go @@ -1,14 +1,11 @@ package manifest import ( - "fmt" "os" "path/filepath" jsoniter "github.com/json-iterator/go" "gopkg.in/yaml.v2" - - "github.com/pluralsh/plural-cli/pkg/api" ) type Bundle struct { @@ -73,18 +70,6 @@ func ContextPath() string { return path } -func BuildContext(path string, insts []*api.Installation) error { - ctx := &Context{ - Configuration: make(map[string]map[string]interface{}), - } - - for _, inst := range insts { - ctx.Configuration[inst.Repository.Name] = inst.Context - } - - return ctx.Write(path) -} - func FetchContext() (*Context, error) { return ReadContext(ContextPath()) } @@ -109,21 +94,6 @@ func NewContext() *Context { } } -func (c *Context) Repo(name string) (res map[string]interface{}, ok bool) { - res, ok = c.Configuration[name] - return -} - -func (c *Context) AddBundle(repo, name string) { - for _, b := range c.Bundles { - if b.Name == name && b.Repository == repo { - return - } - } - - c.Bundles = append(c.Bundles, &Bundle{Repository: repo, Name: name}) -} - func (c *Context) AddBucket(bucket string) { c.Buckets = append(c.Buckets, bucket) } @@ -142,16 +112,6 @@ func (c *Context) AddDomain(domain string) { c.Domains = append(c.Domains, domain) } -func (c *Context) Protected(name string) bool { - for _, r := range c.Protect { - if r == name { - return true - } - } - - return false -} - func (c *Context) HasDomain(domain string) bool { // Exclusion for empty string. // There are some cases where an empty string for the hostname is used. @@ -182,18 +142,6 @@ func (c *Context) Write(path string) error { return os.WriteFile(path, io, 0644) } -func (c *Context) ContainsString(str, msg, ignoreRepo, ignoreKey string) error { - for r, section := range c.Configuration { - for k, val := range section { - if v, ok := val.(string); ok && v == str && (r != ignoreRepo || k != ignoreKey) { - return fmt.Errorf(msg) - } - } - } - - return nil -} - func (smtp *SMTP) GetServer() string { if smtp.Service != "" { if val, ok := smtpConfig[smtp.Service]; ok { diff --git a/pkg/pluralfile/lock.go b/pkg/pluralfile/lock.go deleted file mode 100644 index 6c02db395..000000000 --- a/pkg/pluralfile/lock.go +++ /dev/null @@ -1,163 +0,0 @@ -package pluralfile - -import ( - "fmt" - "os" - "path/filepath" - - "github.com/pluralsh/plural-cli/pkg/api" - "github.com/pluralsh/plural-cli/pkg/config" - "github.com/pluralsh/plural-cli/pkg/utils/pathing" - "gopkg.in/yaml.v2" -) - -type Lockfile struct { - Artifact map[string]string - Terraform map[string]string - Helm map[string]string - Recipe map[string]string - Integration map[string]string - Crd map[string]string - Ird map[string]string - Tag map[string]string - Attrs map[string]string -} - -func lock() *Lockfile { - return &Lockfile{ - Artifact: map[string]string{}, - Terraform: map[string]string{}, - Helm: map[string]string{}, - Recipe: map[string]string{}, - Integration: map[string]string{}, - Crd: map[string]string{}, - Ird: map[string]string{}, - Tag: map[string]string{}, - Attrs: map[string]string{}, - } -} - -func (plrl *Pluralfile) Lock(path string) (*Lockfile, error) { - client := api.NewClient() - applyLock, err := client.AcquireLock(plrl.Repo) - if err != nil { - return lock(), nil - } - - if applyLock == nil { - return nil, fmt.Errorf("Could not fetch apply lock, do you have publish permissions for this repo?") - } - - if applyLock.Lock == "" { - return Lock(path) - } - - lock := lock() - if err := yaml.Unmarshal([]byte(applyLock.Lock), lock); err != nil { - return nil, err - } - return lock, nil -} - -func (plrl *Pluralfile) Flush(lock *Lockfile) error { - client := api.NewClient() - io, err := yaml.Marshal(lock) - if err != nil { - return err - } - - _, err = client.ReleaseLock(plrl.Repo, string(io)) - return api.GetErrorResponse(err, "ReleaseLock") -} - -func Lock(path string) (*Lockfile, error) { - conf := config.Read() - lock := lock() - lockfile := lockPath(path, conf.LockProfile) - content, err := os.ReadFile(lockfile) - if err != nil { - return lock, nil - } - - if err := yaml.Unmarshal(content, lock); err != nil { - return nil, err - } - return lock, nil -} - -func lockPath(path string, profile string) string { - if profile == "" { - return pathing.SanitizeFilepath(filepath.Join(filepath.Dir(path), "plural.lock")) - } - - return pathing.SanitizeFilepath(filepath.Join(filepath.Dir(path), fmt.Sprintf("plural.%s.lock", profile))) -} - -func (lock *Lockfile) Flush(path string) error { - conf := config.Read() - io, err := yaml.Marshal(lock) - if err != nil { - return err - } - return os.WriteFile(lockPath(path, conf.LockProfile), io, 0644) -} - -func (lock *Lockfile) getSha(name ComponentName, key string) string { - switch name { - case HELM: - sha := lock.Helm[key] - return sha - case TERRAFORM: - sha := lock.Terraform[key] - return sha - case RECIPE: - sha := lock.Recipe[key] - return sha - case ARTIFACT: - sha := lock.Artifact[key] - return sha - case INTEGRATION: - sha := lock.Integration[key] - return sha - case CRD: - sha := lock.Crd[key] - return sha - case IRD: - sha := lock.Ird[key] - return sha - case TAG: - sha := lock.Tag[key] - return sha - case REPO_ATTRS: - sha := lock.Attrs[key] - return sha - default: - return "" - } -} - -func (lock *Lockfile) addSha(name ComponentName, key string, sha string) { - switch name { - case HELM: - lock.Helm[key] = sha - return - case TERRAFORM: - lock.Terraform[key] = sha - case RECIPE: - lock.Recipe[key] = sha - case ARTIFACT: - lock.Artifact[key] = sha - case INTEGRATION: - lock.Integration[key] = sha - case CRD: - lock.Crd[key] = sha - case IRD: - lock.Ird[key] = sha - case TAG: - lock.Tag[key] = sha - case REPO_ATTRS: - lock.Attrs[key] = sha - default: - return - } -} diff --git a/pkg/utils/map.go b/pkg/utils/map.go index 3e33f5e2b..35a3ac272 100644 --- a/pkg/utils/map.go +++ b/pkg/utils/map.go @@ -5,9 +5,7 @@ import ( "reflect" jsonpatch "github.com/evanphx/json-patch" - "github.com/google/go-cmp/cmp" jsoniter "github.com/json-iterator/go" - "golang.org/x/exp/maps" "k8s.io/apimachinery/pkg/util/sets" ) @@ -81,57 +79,6 @@ func PatchInterfaceMap(defaultValues, values map[string]map[string]interface{}) return patch, nil } -type DiffCondition func(key string, value, diffValue any) bool - -var ( - equalDiffCondition DiffCondition = func(_ string, value, diffValue any) bool { - return cmp.Equal(value, diffValue) - } -) - -// DiffMap removes keys from the base map based on provided DiffCondition match against the same keys in provided -// diff map. It always uses an equal comparison for the values, but specific keys can use extended comparison -// if needed by passing custom DiffCondition function. -// -// Example: -// -// A: {a: 1, b: 1, c: 2} -// B: {a: 1, d: 2, c: 3} -// Result: {b: 1, c: 2} -// -// Note: It does not remove null value keys by default. -func DiffMap(base, diff map[string]interface{}, conditions ...DiffCondition) map[string]interface{} { - result := make(map[string]interface{}) - maps.Copy(result, base) - - if diff == nil { - diff = make(map[string]interface{}) - } - - for k, v := range base { - switch t := v.(type) { - case map[string]interface{}: - dValue, _ := diff[k].(map[string]interface{}) - if dMap := DiffMap(t, dValue, conditions...); len(dMap) > 0 { - result[k] = dMap - break - } - - delete(result, k) - default: - diffV := diff[k] - for _, condition := range append(conditions, equalDiffCondition) { - if condition(k, v, diffV) { - delete(result, k) - break - } - } - } - } - - return result -} - func cleanUpInterfaceArray(in []interface{}) []interface{} { result := make([]interface{}, len(in)) for i, v := range in { diff --git a/plural_bootstrap_procedure.drawio b/plural_bootstrap_procedure.drawio deleted file mode 100644 index fc5d6a65d..000000000 --- a/plural_bootstrap_procedure.drawio +++ /dev/null @@ -1,221 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/plural_bootstrap_procedure.drawio.png b/plural_bootstrap_procedure.drawio.png deleted file mode 100644 index a200ff5368a695b30f46185d56b81f413ab46a78..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 835023 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 EiJGxj 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 Hu-a4abDO-MLZj-O6LteX-+edoq$g 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�*|M`)BX)j+n)^Y6fX(BBX$KXtZA&5F(!2 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
  • a@^UrtGuCOSAo3|XJVPH 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 iwbx(G?auyhH~yTC3~4X+U*HxDk04u2ZLG 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 diff --git a/pkg/ui/web/public/fonts/ABCMonumentGroteskSemi-Mono-Heavy.woff b/pkg/ui/web/public/fonts/ABCMonumentGroteskSemi-Mono-Heavy.woff deleted file mode 100644 index 883f47a4a8c024cceeab0334790aa1bad5dfed15..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 75136 zcmZTtb8siV)2?x~jjMgNZTD)s{nWOvw)v@T+qQMJZJY1?zW=_Nd1kVkXS11|O=gq0 zDTs?JsHiA_fRg_KK>z^(0pscg0RsX3*ZY4>L|mL01mwpc2uK|!2*|sgNAKpQxVVZO z2q;nJKQjLRkeFZ%A|Wa!4g%7#@lRIz2Wxm5xGss`3d$fL3os1wLh=m{^QfKT!T(t_yznDQlK$HI2ss4k3-m6NEv5lcU2ne(_2ne_k2na+R zj7UU*xv8PaKi)rE5cdB8e*&Y){Gall&itSJ^B>4y3?SRgZJgczt*;dX1oEHXAH|ln z!7(<5?*HZkjrzxd`X9i`e}mW>+L->+UHs$ufPld7nkI9G*xNZd|Ffz6$3goC;_p@v z=KmrC1|md9W67nD#QO*W2Y&Kz3}k~Z`hPw_HbF(NzFxlCAf3TS{)sUEV)``pgq2TTq zG1suZtQR)=pWo;pn{e<#|5o9i*`?NFhcAZi`#dqNn@I%=#?2}epDgu^D-jWp1aNhGvOR3uGF3K;=Ehqp}EG*95M*?YQ4TA~?o9id~gS_3D)o`7u z4@T0twr&U5^1AQhxZh$y(WU zsx1-d3u0<^L1?%g^MP_X8`xxw-4U3^oEL+{>vTGQ}2eETB`px zyUUzK?{jP)Oqk;9&?^0T*Sm|$NArDh17@S<9g20jKmLrElV5aJg1Bta@>VoZa%y== z5Sm)5>2-1gyenA4Ld+?edMp3uJMb;(-otY7+x`XY5%&;mpiO)qI6$st>3wdG^HMf| zp=EoqfJx3;3_H!24~j4rmy6i+g0VPYEt?=7hw2Qx+Tj`G94??5*q~s=c);kU#kMp4 z8<>)evN*yq^z!3|d8-54Y-L8eMp$hidy~s>^L?dDiYIQ)9i0xnAvBKhA*hK}8lvlAV#bFj5PYbR&J6y$-hVM7%(}tjV zv*0mdW+b%)OqB?GCr@q)h-UixMQ*=k&>!@ASZMjaIdF&+cJ`LRF0yF}8g?T}xv24{ zAs@B~HKvTP?gZ$#wZMLmb@Ld`%QB&AazW^?mYc@Yl!8SbVal>8G_UNXGrB7IhQF5E zU~So-Kvd_Cn3F1Q&u=GI!kbq!?*^mpxe>*aS+@2Vp4DNFLOl0ne{f!1-k(by2O>Su zEx~LRe*;4L_k|(|OIafmG|*8_bULn@YJxfXA6=21I}A(CE1E55n$tK=+4MhCW(b2=C==~L(|^%8iMyHNngX4HT_jHl@GRkJ#V^jv+A{F$ zVDZKltgL{{O&#sTY@%A%1qJaD%paehZS7dozZ+dcf-$gHf6>T~ zI;Vft+J7VCa;djx(yl+m!Lwdc9gzMi&uQ}NL={}OU-70SU4_=h3g#L8Im2r=l^=Fq z+f;GFWNpp}vk?^?5G@%7XGsswxk0VJ7Ui)fQ=m|Zam$lEQLBss$3v>q9aE=}XZ4(U z@o*(MYcoLB_ zc$oLP!G_ktK!`bmWLzxg&YkzjxlzsMs6>Zj-PMe;4O8qwsQ-38vymxBcD#&Rm)2X+ z>G=G9HCm_9w&(2XYJ7lknPetuN|r^1MAoRWj_go~I2xTFV1iyDNUR>J=uJk^FInJL zKGHo6{znm2beAjwn$|p!d17&N!8WMTAPHyV+@1J0?+BNg4pw_mqTPB31mck;@Wk z<4ze!%v`#w6iJ1c=uCDA(^1;5za55RzUeEa)YDB@*>%vXr^B!Wko;)Tdrkk6Y>+$D zZ#`6qKDjB~#W095&a0o-zFw#V(+B#nRRfv~m zPL_G~$jOPRk!KP24Dm6f8^#Wyhv@5Xh;_nLt@5Qa&$8N@T=O*hI^z0%loN9%m|1Mb zNpY(o$HJ6Lq*6&CM#*Q=m+9N8q$3%*C4*NF-i)%mOyYrL_RM1_jvcdX%Ijn%QtLF8 zdbH!GQ8a;}#Cq7&ZCkl@v}4nn^0dZ?%U#y8?tY9j<%>>mS>nPE@an?RG^%m(?Bk(M zy_%8tL96E_cc)I-8UMbuzBB(V{}_J??9yw2?d^4aLfWvZ7zIjp(i99lOqno5alfej z6N)KK2#2z#1o?~ikjRSe_ox0txSq$XD<0T^nbY{28I4CGKHkBjo*f#Zp8U4x=M{z2 zp7qa`?;*EX>c6~Wcx!R5^&}^1(($|)4^~AQ(v2zO+|&zN3>fwNoE1q3?fmpJl3B4W zW3FY-9Z*vQ^|Y@jQms&grwXw01W;d#-_(<)xTtD^4 zG+(u*$2iE+$wERN?3~^Nequk`1#q*+8^W7GNa>8J>P)dknV^s9OqdVH^=k|>WuK?@ ziax#}1hpyp9PcDZ@fu()K+pxjszy;{}v z$9*ONh)!)e(C%?MNAV-xn6+_YbO2ZxP4Vutj!cY7mA^y)HY@ia36Cf+{r##=X@U-S znPl7I@UHS_enk5)H7)aktN~~HAo&XHOX_k^Z$b2g&iLgAKb zVs-M}DJ?~j2)C=sgW?v7!E1kUBp##fQV#JC$bQ{$n$A15pH?@Y_+KG3kk?(_fKL;q?ckic(koG9#ng&AEx=-I!zCdnIG2SeiK zW|MErYs4REz(WIk#S2uiF9PN%U({@hlbT-{LJVjE{0WE(XtfmI$kPkuJ<9O-Q3jOU!;65P($ zKG3eT>9L8iNx#XriPVnOuJ3H;eC=`w$OHy!5;TMWqNlXdT^P@emKG{=R*4%>0LD`k z8Ib969Fa^i>@pnM=FOAVRhrGKm<=QiT>x?bh4yu_&cDB7rsXq;jE zeZ+mmeT)6n;hN~@sF`Rxj}VTV6mNoVP`jCyJ)Ya?PCS9I=L5={?hh6I2!$QxSC0== zUxb_qyM4D?@(-ymFu$yx0l%4^o$b5DjmeGqjp2>0&Zf2k4>u={`@AFL$&xha3<+RK z+6vSG!$PzLs7~r`>DCq1S|;C61-$-*Wv5i>jxlOslqKTszMR&F(26;D%Z*H+(XL?~-z%G>g|_Uir_1yI~pxsgyh zZz1oHgQDUu7P&QkvcHAnay&2bxY(FU%-eII-d-UGM<5|fmwiF=m_ToL`wWGoK>wQe z^p0}&`~i7j0aexL0TC#~&DGodYh?gQh<1vFRjS9=r~qxzEAr_Y=lNKgkERmrVSWMe zPf>(fs0Xdmz}$pOkgJql{;#hH)C#6HvbT3$6g>9-`zu7H0Q~dQNcd(uw{^C*H~04= zx1=$L3V5K(Ti%&V+^|+D6qKru#q7?kMPNm^e1-VmShuTke_Ih%oX|4$sxdk6&yezc zc;yu|`icgZo3W>qR+^{lIRsbm*qwpcSQdbO2cx>7k78()Z z5f%}a=KZit5x%lqPvo#!s;wT)A@(D;v=3p0o`fnAT{A8L1~NJ}F6I%IHmE9zE?b-1 zC9hTyYKfjiLE-+*Hn!^Y?U_r|uwy6Ga4GLd#WE999*XjQ@HC)>(D% zvkz`=*S~@s7|yPXf@TP%(OJ5gDzoZ7T@BhjrLzvo#viBwsDIBnA9=#hTyzY~f6M;1 zHn%n+52)dEZ*`ab-9b^IZtZxnIHm}m#kQ00-@TiMG9Cp5nLAc4x5;hMD+R90I;#r4 z$+}Ys8XeN`6wnX|)i}dxmE*8f%4wyN$wo7ci(wWW(I8$_6Di>>TNu%9L2v8Bwo~o@ z^~2u&q#QIkD6qhFxu^julXX@M9Al<2TQ~DRPq-)7SZHWKY)o|g5|Ud*nlRWb+C&M8qGl5i&6dN~}Y3b;`@7X`{U_e_B^wZtQzn zXC;$=_%aUvVr1?8MaN3Q$x6b?z=h67IQ=_KAN@(;M?}msTx9Q}oWG$^T^$WG8^tIR zg7VNONpT2d*#%A5c!}^znH41hr+M#xVJP%xz&-hwJGj50_YUSb=$Ik@%Vtk?L!LD>)ebh5du-h5)t(SqLXiO#=z{z_f_@V4esM2^a79~!zgEX- zGywdHx#{%v1+9wNX^d<|n`(bI#3$I{9{#*>ayn)T_ed#K57NmiMzs%yeV0ZG}oQ58WiWSq?W zP(-D~)nHUpd9c!c7=x-H)-ecj{c4A}CA!J%nJq9ys=*G)$T<+yZ{Z58*y^yiQo*t+ z$m*ap5=3DRGB}Z77+j?EmcxujIIwTOTr-gF~!LI8|YK=gO!1k7_~~zW}dN#TvnNY5AOM-|E6gFTAq zqC>hm_F}$O&Cp^HMy1~z<&zn%p_1;ZPR^Z5;RSF%?$x=em2=r4-@aRfFl45nQl!rB$CRt`Oof|ig4xFLVx=dxXwc1;{{6> zNU4UOM|k8OsRbf3!7`zgvr)x>kUG@g(eXn)G71WTlQPw)Y$PWzQC-36+L()C^mVJI zd0`yoYvBK&mko!)i1yK4L{i;z=o>rJkq90dv5e3US79H9q#a9GQj1n)BaK3egp2+m zv*fwhS@wzyjhv1gktgZ#8@$T*4^5${m)uBsZ8@NEGlERW=KG}hXrOf`VnZmS2-iJY z!l6&PIImglXL7V^SNZ98$?kSmqk2V-pZD{ev0UZfgpZeh!FA|kQzDyk`#As7*S+D1 zS58)eE6TgQy}cYExKS2jDt`)AHMG>$ku>qH)ECWN(sL=XKrRl%rB#(OF0xWo8pLgt zacQBMD3_#dqSQj8*o`QVIAao07BObiuciqnaV0lUBTgS4qNc|PLsdwE*NYyY31I5| zRoo9NA&(SM+Btw<30`dcNm7uYnsQ0N!{u7cyz4&V@w>(QaaUo_>mKA z7V#NuY*MuTG!`)9J`Lt3Y&7GcMF78XB~E{!o;WIE!&w-6SV~m&G4A zDr?jU9GgTR4%HofVfKv@U`d8Gxl1zuFencq18^I%KLf_h=7Dmu>>XjclanT}XcL2s z_p9WSjuhczrtFN`X*iP%0BGgO3qx1t4&czF-Vt#_?CK1@K@4MP+JG!<;t;;6G|+g` z;fTyBfZ8C1`8aK166c7{DSOOti8&Sc3n(+GdPIBlqamPec*CTcg(Iy7Xb04uv^l~9 z@Z1wP<+KfKm=ZERr$tX%9zh?W+^4-}d-Piavg>75O)nf>Av+RuhpGX~wN|Sx7oO~a zQzi{72-fTw14s3EtGupg9l*_gThsehn+wo?%V> z^2+%I!jsh#g;!+Pl<$D=gzw0f;WhI_8rucm6aV`kpHY4zqK54Tfm(%?k_(n6i6iv; zIG^dS!EOUTfS;kCseXM=UCqk!1>Td}6a72%d(3B|&kPuCgXx7nohd`@;RW=Q-4oFf z$$b>;9(K$jr~C-e!E?G7hbx=q7-Bl0;lPr~ViIf88i2?Wt2sJpglSJP9Z@mmGpy-E zq8^&aiC4{_9$PWPwu9>!-8#diO_88E_+aWzkqv8#3WT7D2nXz?nNS2b>|X#+WwFtE z*^bif<=Ox`PSudh306Z*M{D*rZLT_A)!@tV=Yw3emz)ySEXRW`yX}sfoMzL(V+ZX{ ze686!zp6QwL!A!a9BnIU*Hc}L-yJ?V-KGQ2XApLv90ObXHjr(pIHK^Tqjz|LHXD-D zk$6MVN5l5UZ4MjmwqP9b8G{~9iEY%GNXHYe4qrMTSfh{*eH$taL2!q~4hwCJ44IKT zByCg->5;oeZJZRD;X8Y65Df7$dkJmmwos|#QwQ^{nmXJZ85sjpher`vOPRXY4F z(d*L~_Q5(RErGO0u8tk8n;V3-zgl9~X9#u>9Yb3ObYR_rc*Y6#W1J{km9EI#B6y~< zcBdVWTkkg@uSlNB-NN4^Iwo~@s~wkH&o>aRtga~BB0Hvh27D%bMmBe^9G_d?H^8rc zK8JZt`pkUx^6h3j&a@J>9d9UXz+IVLVO^XIr`aOw+gg9?7Pv~5loGG%BtDCP_vYO-<|ISHq zn&?6i!Q4y%P#9I3ok1zOD}6Ji!ZA!%P;FK3oR=y zOC9GrExIgmowlE}pS7Q6x-hg~wG*~yx9hcUwexeU>*{A^ROd|V9_O9c;N{|#;uYdW zp^BEQ;p!TIlwa##_%gr?T<77{z%AG;>CSgCv84OhE=^fCt*ZL4_;hzqG7j0Vo3mCQ z(tA+yr{@eD-*rq~PR;^6xRN1|Z%VYXp%&}VCUYC&mE*YT=Pbg4;K z^~mJ_wSZu5TbFPAj|$7* zMSZJKNO;^F@OG`WhH3*{(Z%fPbLKt;GCAwM-M9BX&5t(Ft8eR9O+J8Qqhr(OEFax> zyl5|WM9a>~+rJci=|OBKgwG5A<-6=<;;H3T`&QH9V@9{D&#!jiM&{;G z`=(2vuj{AyQ^vw|rx)LI_SM%F*HtVpJmDr^vB$-^-QOOs?=EmpL>PiNzMXadBXBQ- zO!hDWXOCJ=_tBlIz-jPs5r z8>3UCem9nf7+0#yIqbu9aZts}PsdlvoUgL&aHXxC(H z(m$kW+MYkNx?GcOgI> z&Ic2~;QbbSjs+Pxi8Vyu-qt#>_h`bo+Ee(7`b{pAnndT()VMm2BBPv=tqss(H(6~v zluM1(?{*4)jp)UoRCm?)uvZ;X4X((pv29*6d(2}?vHDo%)y1oQ8fxc1U#j-1^L=^S z#A#x|G?|?ooty%;G{9?Gv9H)sP1~kt0gaRQa~fF9WNbe-{M)$N{A{i39bUyp@zPT> z-AosDr*xgEuU>&w@-%a3(ePSzK-vYm)mxJ^`AbV`m-$tI(-iTjR9Sd9B{r2CO^(GU8x?Z zGF7m3TTAWDc5}pZBP8d_@>_W5+#a@f8v-vzHys>DrU+&tSND#F=p$+_E*kDvs{K2v zud>@pp0X$T{4TO;TTJvHe0#v7ktVr*JMX;sTS5Es3L^Qs)_(WhLW>{)2zmW(o<*7v zxd?IHs4iwNM9vX0@VPxt?((2ReR(zx>}PjB1_V+XsbJ}(Xjhf*J|s6u8)7>-x!=qe z6&+cRR|@w(VCxp!os}%~P9qa9<%csny=m^8dlo1aQnSjOiVty8S+dO%rs)KnUU>ao z>-idue+lZtfN^BW+Klr~DEQp43hTFt2IM+=;hHci`k~o~7^HRb&*9<*P!fO|4_@!0 zPbRX9;QB+HNx{gih%P+rA=nq)lVOXG%o>U>2(}R)%yMk6mpp+ z3t#dQeW+`sZTzX7dp=Y6<1^+!xQpKe{G^-I^Y+K5E%1RyD(`42e9M`g(ok7=^<=P9 z^xQiwU;w8BiSCC1?JTgPvJmK~U%HLCxw5yXmGg;CXaJAIrt!(_z-bhyugqBGEd70VtGg&llwlJu6 zwG(!2+LNCdl>H;=20w(aWecX?jraq;pMVjIqd1UWq zrHjy8CL{~&uPgb~^%SH8->w@3##}uAAcAw5 z6g=tA$o%->3of{M7`yg_9|&5M$mZm+U^3_MH@Q$JUxb-M)pxMwIwAmCBEZEvpc6cIBt#H zcFYO7(lAodS$L9e5(D63R)FSyVy3V(o=$RBL%b^mrIp7C8;^{hr{LL7tYNe%uKEfR ziDX-%^kobBkE=w6new*MS%t#^;aa6~jG*fVkj-o;vRQ{4qG@TP0owwy8r%hm1QU~m zm_KC%B{Ule8d5rno7~aZb1xTAmi2TkJ`eVKbG}#dIK=v-%?JBg%_|aDp;23fiOfac zbHkg8sv9|MAiByb=0pify}*2J6WBETf3ZoJz7X121}v%|+wn5drDLNo|BU8v2^Bo) zlUTG^S_^$vk04`OoypK)20m zt#uZ0wwUmQJ@;_Q3GU@7hC)+S{*#z(SRVH8_6u zfuGgPtq=JGTEvB!@?AQ6&`;c*EC-=!7evWQk3TGmz9op?@a=+LOtS+v(irmj|DI=>q3H>_h&@(>|;#I zEaDY+q|`$}DM$rNe171U7nDC?*7x>n@TIunyUHc=z+H=ME?{cB7F$Eh@4W{->03j@ zb@33dvKdMxJ>j#Eyo)zJZoU?9vrrBz*^FDU5V4Vi^?-FGbT-^&xmm!N@IcjJnZ<0p z1>tsNAeacuF=PwU>GQCzC>1HW!!Mxbz%Y)5UhFGNu5{~@JOcw)Oodi5yFuR`&#RY5 z)z4maJi&fV`R{ebg{CP(Ro(jCYp$}>kw5S5aYgSBxJ0f#mf|IMSN;L@K_m= z&+xb00AF#v#*;}&Nuc{96Da~nMc80@sW$c!pPDQttxX~j0W*Uvk4rxLn3>|m)vb(43<&Kk|GUIka;c;^mZY}B~E!Q9B9cf%H+%q zR&~EDeGFt2vizBbNrNK^UfZ$-x;4ibf*87W$|&`rglQPlxFz{yyXM}QhLy9)?_q-V zib7w%(9%em*Cn-(eQ)7J*h%^b_wSqQhL=m0eK<}K6&-h}8Xdnrv+B^%YJ?28Tcfgy9F!h#S19h?ZuBHA?_*!r-7RpO-Ax`!a)@={ zRj!vgjIIIugMoS~*V%acdLw#i!G?+@c^X5W$e)zoSZw24Z|JgpFT2qIP8>N#yzw~? z-Sy^g&exbw*F{^7riP*s0r!5K2gMyQ7gu3*p1YNI=V$Ni7)ZMdpJtP<*`LZsvGq<8 zuHzkPLK7w8x0_}29^fG_GXw@^o(Vq?9kEUZk3?XGD^$vw4B8cP19gz_SCwvp!x>ef zIjo7HD&xx}VT#0GGK*K{I+3!WZjzs+O5lr3zANPnwTr8sC_ckSE^g-*_DO^RF_a$~ zffjH_6)%=}wS$?D%)_*=UK#8G7JTExaDO+Txa(7UC7`+3-Fwj17P3~J*qrHRhNG4q z*fF@3A|ZMOK{s;~AJyR10XK23{tSB#?%<-9v|$qKutw5eLb63j2*v;2o6#PE5W+7M zZ$N(qKQZH3-{oiYmP{tT%_1zqvHvCt=C{!R${T+OZDr2t@W2!ol~MWMhg&oK5Ud$o zF~+7Z$@B`ImX$B)K4cmWcM_&lNbkCCx1oL{ur1{CvxjoiUQqXdHO&scFodr))wMYx zfp3G$i(?>OjGU%m%!r|cD1oa%wtthEjJ|&;#(?mgSVv`B-Do+bN;8nu>&JlkV{H#W zGEC7&^l?E3fcs%f?dBgx{<^0{z^T^URF~WTHLp9HrSr$=vwUw-0%v|vvbF2YjB8%ezAUrOF9u;hk_IZNNE#80GmYyEKZPz^Qnuz|)yNB1!6g)qtY5J()rmx0{5VB96Fqx)kw!Uqeb!S-`Um4K_oy765~$&7g|x@fT(8RpGG3F*T6*4K7Uj>hZ24no-8?$eUr0+C4Er#cdC6^pGUxl8U}iUY z**lcuciXdKXLMoLnGlLsBuVGQieRZ3=8U?K3vDVdI@w?dRZhe((N;fV7N9?mofhHU zO8wB*R#9ZXh6WmG+yC$|aD4$y1XlGsU*X#%pF)0J_65#he!`!K)6Xbl31`)w*^@Rh z^`RP*aE5fo@GwCS_`3;Sz{qav|2rz(=sm_4a>+g|ql$7mgal-pBAAqH1Gngg)rhh- z28uHb+EagQ9+HM%pxgwaNTa(0X}I8uD?HL#krFt_v}zcv7_Q<)7^Osg(xi1x`MR)^ z57LjA?Px3qH~1_R66|iO?PKLh85I>_1x;Ax-(SwdFVgEtxnKSci!o*`p_>{41FI+H zVJ#I+yc5R=Fws7v_7(}s)?e$c&EfqOAGi>5{Y1dpU;=za6rZ*xg?+<+I%(Moio^T) zYYG0y`}$qY;ZueZgnqL;25!?1S4;xNP!FoJLh_22^)X!xU3}>&(Az=kx6EQLbwk0WO?eF$e}cva8&V>TsuQ^4W-p2` z%VA=j_*Gsq%Povo+Q<*{gC5+*gs~{!ic1+2*MK;0v-TcaIO~+F%Yu~vs+lu^H7ipjRLVd*Tij-Dmo=qlnAIEa;%^_u zt5q3gW9}Ekqy=1;g(eNQc6UevvB47e51Ei%;y#!&P(q_RZ%jRDK1c`sUqYEn+Q{(5?!;O?l?mt z%Tcdr3JM(&tKxy7eu7A{?CqaY=WE4DG6`wSR^oRboO@z>u?biQi{+bm>}Dp%m17cO z)3>CTqc?4RW3ZhTiZq^QV6}#Bw3cpss%P4P$pmQ`KWW!zqg@1-c~F%bQ5c0~lg|wa zaU4vPzJ5nlA#|`7%e(F=uI+~cW_zE0aMjtYQ|rm%SfeW&l9gAa<|(|AT9{jo$?zz( z8_ht`fg~;;A5}6CA4^qpoC*$4!bykAWW=*_AXb4Zn?yeM@`AxNBR8z@Gip(qjSdt^ zQEtHDhq0Uzu~>|^jxm8FU#1J>F20vuN1qTeZX~E%6kNgd}_~{Bc`Ow^~rRC3#=F@^OY)`;|*bbLflR(ndf5Z zi&ov}UPY2x@3SFR*yb!Xe%T!!i7R71f==Z0f;D%xj64*=6z^Oh_Sp-ROAEWs_SohHo91+cE!SU5X5y62D#dH&?xck>50`<$~U<6rv_#;ws!Xz<*=OsJB49 z40$D{h}wkTi!5T5M$JL!ubF^fapp*?je6{>uR>ZBfSX=A;T_q{*q?RKX zsbS2GH%K)}Ib=p~``H&@!B*czhf+*#RCQdI_+8tl;0rk(8GZs<2NAfP3`xBx-znTc zO8y62BGE=6w|j%AK`v^>m~lvKh6RGOFp?&iTQfZEd+M@W_%nn24NBICKmhWwKl^XT?#ems4j1K1OWSqmkHcdz1iyI=*21@*zRG zh~w5=U^8?;Wu4W3iXXn;Ae4tWk#Rs}L4|w4DAegQLZyepkjAV$CmfN7sQu?(JvJ0j zT_{Z&H1u2IPLwC#2h9K^-3bMIHk<6c-~>iI_oqjmk(+48mw0oZKO%*3|GI)WP2=^IAh*P`v|!DF@}o09@A+WnP)O+o=NimSxJqgS^W-*V zmM}I$SS0Dbfws^@=GGy*8l;9dfWM1nM#)*WF@3HgfCF)E~# z)@j0ubfsPE+ElwOM=opw!{%;mC|~-uOvM=6oukB>DjI*2wm2p&m@O;J&cGGv;+M}K zxCGXxj#E|k={*?)Fh4sj3T(MAVhXU>91o&HHl-axiyhD;tca+BAP}o3qlgyc!=?;# zuoY*r;8l~9&b@;1Bhxw_RcHL|)*?izCH^^Tau)6H*}PpjcWV417V;2jfpv7fLut(R z=eEDi8wbjgHejv*vOU&twv%|yQ*ITV3B0?071H>@XbeIKUqBIAh62_oq{Tp59U)Ga za(ij4<-ip6k$i#ou|XLiE2EI!MBZdS4duJ$fh)-WK|N$k*EPj3}``lPMAunk?8n z;iZ;jtkTIM#v-ftGQ68E;a>n*z{2E@6;{PJjo*j@p;yX3Gx3iltbP zy4V=S`N%JN>soia)^!ZQqGZ-E_W>YNw$2ZStgav1QU)K`Z}mkUfKjJ4&L)Q%2ETdC z)(w%aCC_#jx36XFsk)|H?Ie_kH-w(57dXt3CP1-HzpO0k=#}H_KsI@elEK%3n-|_clgttD`@fgklL#PoK2sTXBY3E(U2^>fKUOY+){!?S>m~n~R;&z+1j92kmYM zNk3$nh>d)%*s_NmFscwQBMhlU_yi*L7(6tc0Bn1I=cJ{T!kk^iE% zD61?b>r%VjHZMTCd9|aDPMhu;30uN#dZvyF9!XB8KPPvWg`OJ`$5zSy)u%j|gDZzu z%8}M39rq2<<-+egvNuYw?F@;w7Df9ogmd|mUnbQrm@&Nb$}f%mt$Ck12jKvQdM!yg zO6e<}OY|-<)%|XkLtlUh9+AUbS*)PFJsvzo-q+@a~0Rj$?f{q)YSY!c)eT z`50{+6cr%5f!mkq|Bs>ds&3EpZTgjs>KKo;UAUl4 zTbS2jR6j;o@1eVO)WnncG@Lq^3A+uH43L!7a#X@4YG)$0bL6+frSpTVT1nh-gwka_HF&cas(M!-z8KrgxCnV~sk`g`6oj@@lT;2SZz)7JJoGu0aNIw58|nOn z`pkqKEAtN`N>y=xehSe&zCetxELBy05x9G>cox_Fy+jfWy2%vDv1t$P#G|a<`riAf zo%RA={I#czte8o`B=yvb&WlcP$Lc&Pqm(kOlODp(q?@~^NiEALm!eMj?+)1jp^T~F zD)~u%>HsAR*^ilR4JN=&`NMTzfWNP)^n8a)vu7PDP#Pq`ubFF)+ z?~YlIdt)A2221bj0>i#$b)>f&Tn#$%V5X32H(9gMAcEWgfsnW!8FtDgjru7mZrzsZ z*ftH1qvX*-okm!FZ5Bp)1BdC=n)CCZKi|R6 zSC1F5a>~Wb)<^yMDCl>S&j2(oZMOvPgk*6NDann=a6!ek>t0l>Jbv zt}=lP)fpfOv_X?PtJl=Dz{9km;Bn`a9r?Fs&Z_Int%>n4?KG0w08C#$DM$PEI+gTz z!>9*;Vu!5uQw3U-c%xNnrXf_xnQl#uyBT=RfL*GEayCLekd4DkfHdhd`m!#&$Bn(} z@Od~_GohOx_EtOkP~oW~lSfV@2{D?lqpdbM`q{rNpzAzv)jud_Y$La*=Nt2S&Zi+~ z(}!twLU|*YP*4`F$jj!oc!2#p#G4#twACi&#mr%MU{N-=2+h#*$3dWOIT!Zr4+ZzA z{{*VWb~hZi!6u;+{PAbIa?BmaCgX^gA-jj`90pIl+iSCnW(5ngnyn~Nt1UNoQyE;r zg7R@;(UiiVWYyZ8?hS9=NZ;M$!#zD#({hMX-!k&$$odQz6U;8WstXG{~x<(R>>hptC$df9f@PpgTe z$%od~#w1DY+py1v7^vG)yZAgRJ2laVD4cj#MKXth`2k)Gv$Irg9c*y?-ECd|+tCq0Jcacpvh{Q!dX=8t&9G*Y$_`NAq-`nBE#> zsx^In`J|bBF{fb8Z|fg^XBrci&1|k1+hgpekz^;5+zNrXzRL-Lo#5O>uhjPdN-81# zB!~-a8R11_JTx|17@7GT_z9<_$}!T;kJr$u?}24T5Rr@sn2nejUw9 z&NdbiRSYv?lo^<5OCi@CthwPhsfT*B`;KxjVKS-P*=Vu%M=rx1n}sdu}K*9Eiw zAEcbK{89{8;U;FI8pwc`J4PBMaWsqF5k3d`WZ%YY?y5ydrJ-m0c55M1SI9CVOv%}4 zsuZ7}D%W0AbfwxvwPH;{*Ih}Uu?oD|xn}~Ok%)U$(qLHTV!H5qaAyi7lIXAAt}PqgSe8;ajZVpz z2z!Zkd0BlAv_b@B(ZR(Sob_(K5}Ud0fo~!~+vDMlqNOYIFU283su#9lEeEz#u>|I_ zcpP?%QDuoj-tD>lX$-$G1|$C^0!?$l$|iMDbc|r#-xV~jFx0XQ%y`P3KdG<+-lL^! z1g|D7c`G(;H)n~P=(noQ==$UIjnuw>lsiX-{trDs!oQ+H80+k59G$0@utAt%T7x|# zKn&)IO=yVSkL3kYVpRCd01`;T)+ZLk?3}0Wgsi@@b>~KPCu9#Pn6)vA-#Tse5aLey z&l?gG!dHELUkw>m@^DM;T|-9eDjd##Wwep-MPz@tQqNuP|6#4P;$I`%hZBx82Y~Zg zaB))x2al2PN=+HXx8XJ333?$ zzS5iCSME`5K}VoSxlC6UCan_6gXmY%Y5~5mSyQz+at9})a(_e~j3OR^1@h3sgXC<@!!K1x^3k$9sc=`NT`(Sh4RE9eWYpC_`%)y+CT%;;^vPTj0?EPwzA zq}}pq1G^s2=@f0d&R4o>IDT%CbI);e#wgo$ne$NBFo}kKAVCYTvEC0O|6w|%Gyky8 z=?uLDjssyRZ39Eaql`R6wvxnT=2GsNW8@JJ`i{407uu&|FWShqd=ZS4ml{uODLipx zbM%x6(_<#v;wx!X%Es&@{nC+`L8C(=#@mU*NqTDGQJ)Hd!!Z&_fHFtZbzm=_QEqy#+C$ zk02hc*h=}okvfi~)(Yp!E&lHW&VY5lTmK=kmx1^4ZE2k#?qEtz>tPAqr;s|3jX?CjY&tc zCF%bmTX_A^^-8*vzPoqNtAgf{bhs=Zld=S8YqmiUi(F9u36;4AHPD2$=iz_*W zKB>S{9xUGf@dPZW0D^Tk^4J=>{Rus3Pw0ih=pu%@mW`3eNZEoo-8DzR+gz;cPti2m zK-wsXJ6&lhttaIPrbX4cL`ziY-QagiO(hzDw=`!|LWD0FPErq(pULSJ`!?jQ&(2x3 zm6VbV!K=M^7`k1b2nOee)REAEq!ned>*-c0Ul9M=R{2uZmeMt3 z1YL`Aic&GVfGV?FJW$&H$$p_K#||{~qvv0%tSUV)vDkvV7GPq5yuP8eKk9c8dEAYf zUV+7YN5@N&@iJhdtxDq*fZCyERr zGmev=$f*^3vNx~K&RtVLz9Ko^q$3$OKX67IU%i=hqlW3%+*jIs3f8J-f2t78{#21- z@jDdjhCCEfSYc4saMFv6pBC%Mi|1YM7{zm^YHU2AgR9zmk{#r)rDEY)`S;aZP@n8) zqpoSZ_*6g5-&OR)Xs@_AOy)ac>N1*iK=zwqV*dbVa0z84+J~Aor`>5U(6z##)B}v~ zQ0iT&{!iM=?v%1om8xu1#gODxv$AGvoVSl$B%Z5HOy)Xv5cyb)u5-m96|z%#*(Qdc2-hiOmuqSVx@u-FYd%g zgUTODyZ${+#Zw|#s@J?EuMT!^^(v*oQ5`)XM*LS(ry86(V-I9 zl&4Y~BiyEwvB|U{6$Ch`?p}L?GfdXWPvlT(;I*-1^}buiW)3H`4?(dJ+MNu{8MVWQ zpE&W_;FBlyhhxsnysVr;1;aZ6-N@CX^PyOzU!grD^3|$+*~%W@s%H>C{;R_<-# z2(<03y~ub^)ro;Qw9wPG<@J>9t{Qu^>amM|Z_)l)bBh+TsMp`tM)8mTd52cnpB2mg z_Z`~G4cbZ`?<<8oQ&Gq>RqmO#FBcUSYgF)Gf{8^-d!Yl@zl;*r4==!EgzkSEYgFjf zar-=&D#NxT+-_c(2{6#1Y^3t?ZG0KCl<#Song@KGy&S2`UTS>)#BZ&kp}Mm15`Hb4 zBkdK$cZ-tJlA|%Hd$~`5ryu5gl95ZlwuJ`&Nq7nwxF+A1_6wL#9T4#Lpa6^LTr3yb zAET{pF}HFdL(+UAr$ok1Chj~8PuDNLv^DzxDIi%3)~2mZBS|EICv$0?IK5b`a37*@ zAF6P_vx<8f`VOS35m?K!FqE0YaPeJP*A|i}&sjL@i&-R*q^%>lq_A-7-p%|{LZ_5@ z(p;kC(hxv)Ktnx-T2HbA6X@DRKPG;%;;@F7PQOOBk*&*eSMudX`L#M^{MrjJ_Ea*G z|D6A!JwU*mX9Om9@@@R~p7c+Ae7O;IJ#Ewc0XWyT6w{C^1IF4Id9Xm2Hl{M|4% z-dpAM~23Tw+3)s&AWZzYi}sXobj4qvG}%qwqDUn@6xNvNYa#{Zn`RhCgI&+p3hK6Sd6 zH{D6YI=teXm-{7x6=+@SEbzi=)1A74>mg{;`;NHX6<*4tr08Ql`JOnOT0NUnXXj!KcW{m3uQct;^0{y@j08(xx%yhu6D_KTeumQG4n?A@?wU5=9ZohP}Ia0p}P1trJL zsyNP8b8!#7x4O8;!3*)7yr68UbWD)lJ}gxi^yDvUChZrnD<orMho>^I8dj&6+PJ!`sQJxPXe{`}sc0yw-WI*hsDdW6j1`wC(bA{g%ewiUO zE@m3>A;V5hyGFKGxX=^xf5!@Nw(7p)$;|a+BiX(s|4hO4?IkC2ZmEY5=S+#MID~jz zJ%sos{_ccR{3pbyn68GlKKzqQ)!TUYebH|Q|sWaH22 z9)kFbYxT*-U+f3`hqYa*Ue;tSAzfxQ1x-n>)X;?VeF~>3IVC~PKvf=x|v zKgH(rbof@&T+OBDvw6b5I0f(s}s{G;u*JxU-u=R_=*2@}fy;Rwv z_pe_B+av$^*~ETubb8XIg0%?O%HK{z+9N|g_Q=o_S7bfoKTggYz(Gq_LXc zLs+_Y>qRDn#E#^}rNIAc6xY6OYZRBBGKz$H8N}6N zMUtAyO<7#IJS;(7C<3s#D2?67R0T3yL9Gd~>b3U|B9t7r%`G+Di7$rHaUYS>Vw^gfJ1|EpKVF>0%rQ!dS-Gg1hUJ}adjEnktN#S4 zCiy$6&rrF(12fP^{6a35E_;MyG>9+IRopo({MK9hRz(m}zGr;_ypdyH>aFDM|1d|> z88JltaS<(}?e3P_8^owyw4FhG0)q|zE($P8%zLXBpUqjAjxi#E%u-YQg01^D^J2&| zbu;W+19GT+uj(B45lrBu>Z9Cfj9UDQVXDq_$1&QW?il97G_yxw(_OYSV9BPehuxx! z4Pp}0Sy>r-;|k;d!xfe)^O37JA5|WFMd?v3X(h5Na;B4%L>QW=4)8GzmBcqS#aglS z_fTG@$WD$=b-xd^K8+t)sQt$T%1S`Df1Pqi^3`Y7gKAfaC%CpIo={itr_PcXYOft+4|S#E z4b->%g(O=V#lRJGqd^?KLX}x(GL(fU9CAJ*OjEUIK_7zT%#IXmj8 z9FME6%a}3e95G`;RLnU85+&zRG7S=xoJB;UIblv1*PL@&^P05|+j#F+eTL|I@B4n= z|35y$aOQMXb#+yDRd-c&nNqpX&3B2B3vr5cisC|OTY1r%UBN}+9JIW85E^O3Y-L4) znQnS2&oblRih(#8ozNX4wJN(S{4B|=Mt7@X@yoYM2VjpZ;e>8$m-$6>GOf?z@6YPi zh5PKd$Z!wLOoJXhpYnf~N;3Ih^3%YFurxNg@%LK7Nflp)tHHVoP`ZGA!~I|$#17XO!key}Ah?q5#z%A$oZTx6C?i_G5$wLA^(R{4=Q#7h3881+3==&Gv911LX` zo+g7SfBzy(q77jj`3oA#2jYY}9--)HJ1xOtW}v%7+22xP9s1ID1^&x1v;?mx%9l8V zT+u{=&!le}9Rod)JMQJ_2K*=V!yd8je<@L^qmfWZxrnPEgZ~hE&~DHT-`*?XKr3~( zI9lMv$5EH}kS828qCF@sdfP86_%CFI)MGVjK@+%mj=0@GA^nvFLN|hG`=DdL2mEfh z$wnldHo0Clx;t$m)`BJ|f<^m8Q-LqMC^<*V(K)&?UU@I-!cLuU)KRI9MXKK6lC)Mz zBz(YfEEqYWJ!A^F_?Y9$q+Wz*KfyS(33TZc&tP&zM#ZyF0!)T+xD=~%SpS~8fu)=N zXEqS0p;!QU2|YrO z5H20WsbTbN0%K?zwrp|@e@rl$Mrh|7M@fes?2)KXJMjgKQW#aNm z@0hBxPj##Mv=`0wQ>yj!oY;2pu6$z4*C zzBPZxmaLQHAy?XqWn{*duzoFI$HZ^2eGq?NgO{wdt1rR z(o*xXwfI)9;znNf7NZQbUE;M#-VttOIY;j)?R@>5jQoi3 z6S^4|4u-3J*q)PUC*Bl5O|Me55?gdHdtSBGUjbj|xl{yH+=DVSIQ}B%4@aWe&``m@ zMZ@FXc2&st=*n=A3S_$7&Wb~edvH(O7h6{EbuQO*U6oAr!xwZvsuc{F_N=5#*9`FP@ALO6Xk)k-Q89YZnoQ&D;n6NSo_ZV(fp$v zU#O)%w5brjDJmm2IW{R}eHQxeNda*_ao&-x;Wo?{rI)Cwu*S`2jSHDWytWdkMNUQS zNX(2)PKwDO`$^&=(wZYvgO>U_bJf$3aaF64iChLdadk7RT-`wS-I66H|J@6h;OdFV zfA>*UPnx=g(_uy4R1%~}Q=ubWAn+-ZReZr$C7(A1&F!fwKFLC*K36fpRZoUaV)Nqa zax%QN6&caqCWzTv+nar=#C~f3>X9So`cBmF-}REq9giItp6el1ul2sNC>NybqaG6Wr=Eq1e`Z4SzAs?#o@sFgt-+|eH5pa0^)V5xv;PHy z{x?}=CFP0Us97~~z2AyGr8qAB%NNwC8cE-~X`d|||Mo0?cTT1DmD19_9Kpe;%1lGg zSo}rW1?Ru8^V9RF)_>sV3)K-aYp^=X=VD#mUd#>jd9!GlfEZq1ti+((cd3r!IlR)@ zemBte%cCa+MDbcmT|356b9Z?HdL^nwfY$o&I4N%CjbUXXQ^oMuVx12|Z)@#jhIA7?{POOCfQdFOnHCA!a9 z;yj5|%W{vVT|hYux@x(Z=5l_Qwq_g!3!>1lAPR>#4#{8vnY*;BqJK+aVc zlpiE>lVnj0py!!{e5sO<8p3f4?!#>+5ikF%L~zwaqJVnd*5v}Qx&wx+?m$janS*sJHESd;z=ZD|IuMb#sP> z_YSJaEZBwiOlRuF@ReMVGOd|0KE+qUw}g2X&2Y__LR%ZtChzG|1u@$x{KaRh?h zQXQ|4Cu6XE1ztObx6oyu#NH!$7fa@BVC3*Q}?7sCZZ8#(Xo80Zq>O1MR? z>$ho;Yt57uB^TIMtFG!og6{aF9mN?2I}Qu*Yl#tx%52bmXD9rXj zasASc`5wz+F)L60A6DC7Vi5p!piX7@K$ZzavdyMklUylWwJNeTLW=&~W>OJ1v&;n4 zWl9zhkllO+{@HxE5}(bijQPBWmLT?F=uMb(bEp*c8Ha`=vhxMA1wX-Hv>vNd^%CDl zYP!CFhVR-{1tWCU?NNE?wJWpvN%TQEvdfYUS&j~o-GF!HRwUbe;uZXBv?6cR+`f8) zoVyc>W@U9M-byBA^?-^ZIFDxKB^AFr)J=B)Uvyb@ntl^_J0zzNsj)?3?5b!fx%}h` zBgN+KgZmCh%Qtvk>Ly&#r2vd%DF7Ol17LL7pd$2tW3s2CqnF1j4PP4Z{d^62&a;R> zBxlCWJ9nm)Q?y?X&WQVkiw6&#ESYs^%-C5o%{7w`&iunj7ai!WJy&MSSarZ;1~Wid z%!qd8PlI;hD6W^MRq!`jzN>T*yZEYG(;0NXlK(?*28(vUz7=Rc z)Y$JsTUW2*7_3?~7~O8w`qF*;7jdr6E|GE(CX|g30?b3k1X*x_ihwhL=T{%%W26IJAL&gJAJU=#TE@nQ9U9FRy$L5~@|nVLM?`p`1>- zoifAkp~AqLN%$9-#EZ_j@c&DS+k>ZNmxcK_<>(UfZ!M^Tb_9Cq*coA91Wm(gmx6KBUk&&e^O%r(xIiW zB|j@YC7G)%H2@9ErqLGAQkh1!hvzbIPOd8*-90%vgbpC|chMQawV=s3Kr847S60FD zH8jQbt9?L>;Z|`~nW@;0-zhqXB|*BwD7ktr@#3+?tz zP8&;RlG)njs}|WiF9$&ui8ZgMJLHGDZ~ zMU1aod?nY&x$G^+@-5Cf-eUQ!H&14OQu2#~=6bp=Wq$G2%aUIVdS2HT9!C?lTSbI* zk$FXg^-q$$n3F5zdliYEmEP?;=H326C$jV}vx@YuB7YS>{fG3ge=>(f=>H@J+%7{@ z;=De%Dqs(Ix`D-n+h(My@ar_3G8R@+oKZpXw`v0YXof$sSMgonVP?ln?0*MX!E$w*?$IYo|A$$qqnDICZ?pu;5tFl zq@YbB+MES#$_3x@piPf;zEaR;3ur|=FTA!j&KY)+kk$#WumwQsq7MSiLgd zRr?R`_5a$HtM0~e2>2X2-+DvP0Xe4POZBSu*L~Tx>%JP!h?eaF1mFt%k=1HJNB9-` zBp)uQhGJ{}8Mc3NxpEh_K(}jK>3z_#($@S3srcDOwx9p9M8!X=+P3Y?8XVKv;gSJP zYe`1{A9Tf8=&$rTwmBxXDL;Xz9;YbHgJGkC!ZbvlU#GK`Tk? zsk%(T7LKYDAbocDBLm7T_Z`wXl;UUSP+P(|Xd#_Lse6gnq($k9SeMTLk!2WHMQSg^ zRh7@!J&h@(x{tb}cvmtc&%k|tA-L-d$czdDa^Yom04kng%+qJgJ1hmjvE=XlXz%IY zyLIQb3}!PM?*Q6(vk#3iMH>%IybGF(1}+{cS=p({nOR9*j!xd5P8v1sgO*N9urj<< zeuf!^?6nfA9YbbZQSl4Q4C3#XFt)GY6Do4MiQXVbexKO1YC1v#A5qrzPQMXn4tr41tbU3kLMcYoX zgU`Kg`VplaWf02FZi2s?mv$sHxYS&pQnpv1E65kPDp!9dU?h%)R)!g1MonPrHQ0*3 z%=l-eqs2zTRTY1Y>Qf`w3N2Wo0*b(O^juDjndP z#M&?D z3MEyS%mIZ_O{1})R7DUao8?NTqLtEL^`lkCOmk+_rHEEiBEovKQzWbG09s{pXQSmm zN5!YiRs9t38fjN9?|%S1NwRJXxukEjkIsx(A(J^#(Usg_g&yU z&u-2?LauY5?sS@VGNMn=UY;!;fZB?EIUWmU*?Z5_pnt+j7Vaxilu$lWu%HRlHdh#S)%HThO-)~k+o*PKyW;BRR zJ9E{rKuvwsbhA1QmV>eWE^&uUybsF-FfQ9cjg@Mgf!Xt&rF~?j3#8}Y`>^M@PK(H| zk#2@i4|RMT+G5dPPl4D58iLiw_l4q0u1cMR&zk^{V z>Op&$Yhht?8AJG7wM(=Iq&j-``mJG713mDwrPE?3a4=!O5s;M?imNi1(bON2O6i2a76DvQlXKHxq_te4_lAiiM zfk{sdlcCl{kUfN2mtn$XsKw9MgOg&K00vVp_v~&liW*Smk#R4Ko*lz4HRxL7S8^h% zOUF_JBBx*JP=VcM5R()YzdkCSY$lO5WCF1YTNU6H?B^foOKeF{9y!DDnMX=HQ4?V- znZMLywEM;RJH`{Phs9_rr-~zEpKH#My*twWNEx$t8G6A_j$Z+N4H!(h+}ntH&~-wP zuYaJA4iwr*;o0kwqT<#^#*(Et!-W+ z7bDq=R$-0--YB=MB!80rpR8C+ia1cXty23+Px8dwGFXgH?x;l5Mt5-?=*Oy;pv7q} z!yn&S1)}mtzq3cb!vn!pr7rW*l~koErN7IlVWaX&9A(k0s_QVgj>hnM_(lIRwEGL% zv0D4r1^Dgka~%B66JF5YXw!*ZX=mE=WN$Figu^ewqJW)GG~_@;QEYlla@@K!vYSLN zBi+fY5UVwA0bW{vcXV0?i0!`VLpJa-v9-8PfMVKKNvG2yLTiH+Awz*D=t2^B^|dIHkHL5?KrMzwL)wNapV!pt%f6N`DiU z5j(A$I~R8wCZpF>iykM-(a~<`B9BW>k4_<6UZ$s|mAkW*y<0}UhW_p&U)%BS^v{F? z<;~MyK210=NTcot*S~~`n) zPcvO?R}eF<$Mq?Iz;2v)YD7*uY?+?P>e$Pmp-`0I;o#)!ZfWI{mZjO0m|AGWf1>*g zmU?F8ZBEJBz9ZSmPGjTcw8Ti=2YGb<13DyzS6QTphBkpF$fI?ohXu+{9n`DS8S|%_ zEo4i4dQoUUS34`>M0^s0H*>U!r#!CT8MXllP0u`pAsXml_L%-^#EaD4z}79Ja93JN zQC_OEmB!l5$=XOgj51+fhr;+6j3r?#r1}-Y*k!_VCX8m?XcyY!L@!AgRl;KbosTu- zU_>Dk#`txqOc8uZQe$7q|4FK`~>Tza_><<+X%clKK)h6FZ8#V z=g0~UHB|EECqlL*W@d2oFp6Cpl)3~^>OUui)gS#iEBn10J2^*gbo7#MXExz zmpqiJP_-f>X83pJ;CCn zSAr_s_(FLJs>{d8bB-KwluA$yScUqy0}N$i_xl3uqivLQ22)2BnmA+#7!q=;Eki7jHZC# zT&a&4UY1rKPD~#QP#?YJ5uNT%ll1Y{>93#0pBRk#NcEXMp8sfgr@B5~2J0$)%#-xd zyHX#`_jj$-$BtL}ROsWIiD#b}fdwI(_`8WaKe@eD)Ss>ECMVV?F4`^f5iXknE|hj|(y_cYB~d&ZyAG z$vEM1H%>k=B4_N2W^Aa?$HGK+2PYqQt8#rzlk~Az(#PDC4XBUKwiWt_JUago_=4>=N8_T=M*nkelTC z`V$-S({nb(?Ih<&-r~3+98AlXyFZ(EcKkLj6J)d&`i_@;hRgjTwBf$t9KSX358O6zDS?KO|n4L!HzoH+H};oEl;XnC^My^Vav( zei%aB3{y-0purH#-za@3x(eoG3)so|Y&wuw(mQhhaUo*@%-F{78UO44C%D;gmyRd% z=smgr)Buw;?3=)o!6(+-;a0#MI)ogghldl=;Te870Sn1qxGv}O)}LQ@IhutztsAl4 zB*vWEOK-sf?9BD8;QWD*SG`I6Mzw~De_skkmfD@RS~%%CT)FEa#m)10Xasp?Bd39Fgj0e z55IP~LEE4+D$;(WR~K8_lADMt#iv7xu+>CMw49TY7iV=irPxHp*Tej1g1>q=vHIcs_>jX+mD69bfy{w z*imZ;BP5dgf{PsL#(dhA4z0PX?}sb+w?TQ@P2QQ@XN7tXfv(~%v^LZ%Xly2&5WM@% zo-`nkBWUFt-6Ei*MnlNys*hjkL_+BDesc*`J}4$;@`_J%4s;@NFeT9X@pc%&sZSF0 zYV|nI0(m(1_@Ip(|55LJ&h|s(2CIchKyO@e-*oOiRgUsj&bh4MpX*V@ zCwM+^3-tTK#Eo|cX>GQM&CzM{5ns`A_oI+aZ!r&NxA(~DHY$=1kCamnlA6Qk2~rS-;=U?|o^=^#{o{mp(j87;ZohW+wY{Hhl8rrk$7sWT&F6>t1WCpIZ za`9iGu~ev`wfHN#*>0eCWB3sipneCV-tpdG!>);le)fj$?f8sFE8%G)=%pm7VcWv8 zxV4HXyBM1&G>8u5(gqL7W@sRfOpVzRxe>n#a|&BdJUH6>9j*ecm5$Uv9^@9_5NyMR zDuVI?HwCA24q$-FN9f1@x1Ac%BlztIR~Y%?`s<1!elK-J{NMxdv@X<(M2V{lb*TX~ z;ET2BSL+J;?Pmr3yaPN{w6?CIpKqD1z!z`MEichGb-yv`LdMPwEHBZQl(ezDM4z1z zUmRt_O7xw`Rph5vmgsY@DA5<*{nT{OCtu0A18Bn(J8fN(#Hq!NL2pO8!iX2q?`&Vg z;7@DZ3?EBX2H_~KaCJZ(RgKQr6W}Ta3jL-}vM@mpo{1%7$FBfh78oRUBFA>bJn2rKZt#s z6WEsnHPXvEN4O1%e$Fnw9(Ec&Tk2jmb}ui(&)(6?Q>s9i60w`3hQ6$O({$ZCNbXDB zOUCYb1ir&@nEH12y9edt@TPnm-a`F9!I1I(PI*zs{d)J1_Zi50wT}0L%eo1;imq|@ z;9@W13`^e8jl_!jgVIeNo0uA%Ot?+y-ZmP(_|bhF^Nr=Wyx%Q;2O}9PAA;dss0$@J zRI!i11=-iPf_;DL*q0Wcmwx%@>ODs~V^YN4Vry0!a&5r_{4s&CJuc;;inmIkBgDcR+Qx1*PsKuPh z5$gE{lGq5L?X7?}I$Bohp#hyOTsr(_2BfgEnj>foX#p05jFxM0l%y(?g(ekMCd=|@ zlEA8K`h>+M#wD$ns%yrl#3fg&u36fhcBr78-*KdZ{4BH`D#<5VYDks*d^NR+)$k2WyjAwd~9)I7;5|0MRb znHjtLVrMwknTn1aJNHn7JsEDq=hx`T=JKAPAu4(YKAY$YrcdrZy$RekRuBADIfp+& z-4>vD4DuFGmnrcrR*6DV;>XD2kVBz`@#$$C&1AJ%Ytt+yvz}#^IF)XFqT-8BKgAzg z+ksMe#{Qxy27jW4q?cn0f9vry;inq1mtmDZ(P52Atk9F9T-1}Iv67x7GCfJ8qfk$9 zguNKfytwUYshi18?vmNwP8}xAA8kaIrmx)Y$?NDQ2`w^Mub zat3Zg2JUY@*UhnlfuAo{V_@+SiGlIRK))Ic+}|8Ywe-r!*_517v?a;aL1XXjy2429 zoZ%|Qmh16XUDaRy8azcx#bNXpC4b9J#Xqa8`KyH1NT4+DXv+80o}r;O7P`S`H~oat zwlatp;{_TtRgFjLs&*yRz_MHhemH5 zx!NVemDLC8ArrYqAS%gbQV_N|&1J)?bXN|&Dzvnh(nyG;_>a(~*rtIzH8mwYH6zTP zSP^@UmMSH3#z0pX>!!aE$q~o0RJ%AD2C;M{VKad|9jVE5vk$i9h4!u~85wVt01d)uiI<$e@ z!^6|f!!uV+v?? zeZ$|z!7xltHil-0=A^l0tx9+2Aeu(YB{;1O|E<5BWy3~m_1Im0dw+NU3AZ%((+rh9%c{a(8$ceyyI=Q)VG>S&a)tLm^>WgEc zwJb@TgTU}vx?7fWhMQf4Ww?Df+KZ9ES|fo73L&ngNTB0d#|Q`abf+vgWJNSYOK@82 zA7X{iBgC@;8zZ@^tFyD4OT^~zqVOCp5_%&Q#)JZVBS=|0IxJYeia3Nigr=uuWu>QM zN0B+|aBrM(T+tL;@1~y)<}jKiXlYoeO;h)GmbtBM3+E+i%lBbRLu z#fyi8Q6};w8|Ng>AhaE!9J~I+m`qNcmbZ{I9dXU{k1O(>jt9Jt5NJ;TXLeTqzr_96 z%01kr>+-Vx)LXcB=KM{gbdnmJ;?L2sbh_L>H8_K0aFE+*fZ5o=My|vy%40nT6JVBn zy<3zkapu(b%g;>XOFPM6Jv%cE`EFj?Nq1(N%+5@glh1HPuD&4V!2pz?x#$tjl|e{H zp_H9esbFsD*0P7+w<^_19if#NgJPC1o|TEOI||T>zEZ+;uqGeq1egIg*bS>?M^VHC zS*t{hRtwUq2B9u@eX~7zc*JRdS?Y*Z!Sz4_RF#+=t6oK>ypQ%WXAd z$SkWxGZr15&T?v6P8is}&FLZEGzm~&uy;z?x@AM!CQUxccHCs=u+q`R78RE0#NXIBL{=(D80jDu)(p+%}`V)dPLq1o)kz(ARyn8`^64(_)Nr zZ+zx%qim897#Ga(n8>E z7POUc>L6$iooE~M|CP`Y9SG&YntvJ|7K8bAS{MYc1-^y$g^F*feW~JGYr`Dkla3&7s?JB>U9ro&H>ya*4m$8n+;hcC{w7gmL%^%fuO_?!sGDwI|2%!C%si6>#Vyw3GbZWgr8y8vgEuhk|I>N*SUQw z#^QR7TJ5+k;A zRPHAaA9!@mTk?t=--G_nF4ug^M2Q+Oehe2Sw#9saj*M%F{e3xhAJI}kyU~?&VwQ{9 z2SQF46Y_X2Dv_U@HlcokAMqi6Ve1oO6V}CZNtyE4C?yC zp59|P-b1asVDR||EL-4}U`w3VczJW{&p<~)p3)#ub=b`k=TEdf)Ex|2k5G zqxtYcSV|l`yqzL0C1>T4G!my>>%@Idl55Y+-8PJHt<1;L-)Y?wW8S?xaN@?z*@wny z`0q!S(-DHRSK6jcDJdJX6TR&$DctpEZmcQlWSh7-+&@3s!-Jmo;Q(M9#Y8=!Eq#NvJMSHe?uC z5^5jd73i}%(3?m%f)i*Xc88Y4%`ii}!zYN{8o^ZfKrP@4okQqU`VlPXXE|^A9@+@* zTRpbAZ{cSCRs39@zBO%o+P2hXX^T@WxkK&ebd!5nx-Iiqj#`vh+Djk*%ivR@0A{#0 zb%cpvMmsRp%mNmb%>)xd7m0IVt~gl^ zn;NkilNI0K$A#h?d3j5MEu*j@%qg2p7naSzuVIlmlg}+k_7)H5wVc*t1#eZuDPhFX5v~Z4LcC!qV4wUg$pt*#*!$3i@aWLq7q| zLSINLn^tyB2{I9Jdkms|=y6kpdIjzE;?8SW`cZ!?=pO~W3m}t;o(S%f3fI@6!e^Db zwL~_WE&XKTJpATM<)anQS0<{Yn?LEx5GB;5n&Y$?p~wo8sk9k->l!XZsiuvn>EA>3 zLC)@JDi(JMUsdecn7@bU!+0>2JudAjd{e2fqczo4A8k?WkV&op1iYXt^@26*>I&+~ zZd##4seU89R#;k3R@xo#wXWam(XLAM!;I2a`e~&tWnxKbKY`k?e_%t=<_BwPMXjkd zD5wEgfhAZ{OHhIVK4Jf?%Kx~|**_|VGz z5eF|E;@>q9KZ#?7;GE#hH3c3Qd^bDhSZ`mPwLHcp#x>HK%ptZ~Cr3vIr=|WbTTuU+--y6yZDe4C zTe3$Qi6sfKF|k}^v^?5BHZT_dj*D8qj)aDVlF%ThKzrgw+#+0~96A1-uznWW=C-DgGsaySTA*wGg<=FVm4MAt7_a7Big0 zH_R_g8;v!=rV%CP?KN1^}w!SEZOIt55NQy67mlwSuDKmXzN@{du zMnqgh42eYVF+F5s;KqPlkIgn*nsc;g+~T+;ksi^D*UgKWOFTGNC0R_|LmY#bhWRpD ziD$SU=co*g4vPwl#Q!m&(Oht9V0Lf;b~mxCK6na9$y&0O#B102;UK?n5=7R7ga(I( zgoTjc;I%;!!7SuGI5=R9Z-Qqs;UX1L;ZYH5Be4CfF#pgHd@(ePgp!bm;D`|7M^>-K z9|6$;F+uBs4;-8RMocoW!Y_xDp3O47{ z^k{9GBf%}yV}Nb-5Hfy`pzZXk!Nx~F0j{e!@FV!;CU8wxdcfLbrwaevrQ+lDE>Vqy zXOouUS*}Gq_#)z2Q5_FH`UxIg+0GyFSernZE*B=ARl~nZ&2$Ws5Lhz=))Io1)e%_# z6ag#CjNsAylFBmIt&XKRG|&~WU#Tl#pQ6PXeuEB`iG<38p=vG-hqgMZ=08KlLcbA} zA53wsjztev=|aC#^_*#;1ie7&hz;wAjnom_8YA-4j{Jw=eks*l#^JW3!vFJVvwRYS zJq)gP|Fe5d+IvZbeU%6hu7X;DJnBwkb)Aq{WW!iw^G_Dp=vX9Gul=tIz*5xcFS=S- z*P4sh+Y0dDXYPv%QQjItG=qH0vy*~Mm z1HC8;;#juo(x`Y9ZyA-K;ul9Hs`!{A@GI>mVcd|xFfPtOjEkcf#>GdfVZ=v@|Bv@O zPm!u64D)8?lUOn9>HHDxRQzf9g?&<~)Qj=eFEAKi{XhT~!rS7Li>6crQfjCb3)IbhdsDP!zFxOd?Sv`(TU@Eu3L{kfJ!zqO3u+a- z%@?3v)sy-vb?LRAEUr~h;5f?7G-TdY?ceVtp*IBI4#rjsjL_XVxXl~diKC#segVvdacl?kmbU;F@6b0klj~|bgzXK+;utX2 z&qJn-VJSD~5cGuCI?!FABb`JicS8pdLBB=N<27JxFw(sQdTGf0$m7X{iFp|bMdS)e zMbOi9M(>T}HiM z(*`g`1FZ~3d7NaM(Dx#bB^M;*X2chgOC)s)pGLgNBC%F`Hm zSTdUPY2;DV@zi_{r_*nOkFy&x#*KJI`NeYZ8*GqAxDqGgNV*43cC-HJV3aNpYVyD4 z*l0}A9?=a!GD!%D4dSRk6Dm+k1H|FH{4YT_Ca&eEjUY#k{)rQD(2dy7#)@4?P-A#% z4xMHcohs-?D5)GXPm|?gDTp~;H+~#6rC$Zzkhu}>C|{}5n=3F&1NyU}WbCdndNoH@ zGlotQbOV?~;w8-WX{-)&nr?VmpZ^kcBkE4PB3YjsLzWJ+qi(!8^)Oa@b{!(ES?GS96fNhVH1BrQ?IeM55qwU3LXirmY2J6EbRt9fK=`ews zD7^YiwW9jibRag3$EL@~{>0qP>=bMWZ7YUATiQ~oPGTn$Jy1xBak6WUR6{0o5;kNN zX6(y>M)z+XBhZ)wO{e>`7d7wMnzk~6Sx)kx^9je#lVXx?i*D7pd5-;OQlnmd1_jbd zoOpm;T2}$}C`<+o8wLh7Gpitd&t_9`%E9kl9?(v7LLUk0WCk_y_&J1{W=j^4 z@$(!9&Y(?u_a79*pyuhIwinx@E|s9pG-F#7nb01g=BMq+fx36E9U<^5%0%~jv^_QL z*OoRnf{7BXN6+GHg;1A}3G*EX&7!~d88{?}j_1U5Xs=KwdE*q=3kRS%Xbg*BDs;ky zZWykNUqpLRDe&TnoGk}YyP-krtF!~5JxHs;S{6k+ZIwLabjHpS!tKdiwP5m6-{qPK zw7r7=azn9Wr~8yCmJV|?(}>m9h&vpex=J2Ro4@P=qX?LgZ?{;f9&&%-=@FZlwzPoW zh`$B=Zny^~KnEB{`@GrvO*6d@yYj1GWl0-UF# zVKnUxbFa`?Bve>u9Ta6cnK-QhBANstR2O#J9?9E@Eh4?Uf};{@S$Aqy;)`B-Xr z(TuiL@SmpLyu4X#1-m>;KM@^lOh~J-fXGy?)$%pF%nsMar;!|Ug30Y{E z)P=UVf6T@C6p7%mfIbWrV-G*t)nj0AN!gL+#B^$9|CB#vPz zI;h1AYI;F>5kg&51yu#D^x*}V$i#J!D2RiowUQ>3wI*~R93w3F+ytSiZnDETIlYG< zS0TvM?37K38Qi|B3}k* zslY=qLTgtxl}s;d2*YjUsag5SMT9%N)qdPWyJcn?3$k)Y*jbKFa+1f;4xliBu7rb$ zFW=+p(zp3Fs;@y&YXj4DNVdUPFlCH3KqTgf#MYimK_t5*B&K8rA{nGZvIUWBLnO9K z&8Do}aZW>V*w^9QWncmw5X0C%B@C^uHP@glwZJ*Q)m@x|_psD6wnb9CQ@Df2I2x?1et7SJ2e7oWj?!yQ%S1T+W8zzl4@EF zxJ^6abZ9$(cB8Iz)EPPyT)^T1aL`Z#Mm=9p!H9orMjs2~+=~yK%-KfFm`%iA#eiA!st{LxSHNi;jh4ytm^wWn1uuPUG zq6vCKfnZvXq89#i4hPE=>%is$lGTN+3q8v=GiAUQ{q>#0B04nHEl75PWGqMIaq)#EYD+S+kwDAx3V~; zdZRb;VJuqjouIK{0ZgNVaGvZ46Yw_+M0XHt3;f#?S$htUTilnykLXxBc2J*|Mr6p2 zIj2`~{HGp{%O{i09Q_SsLtq&6gF2U>wGnx-@=O;gO`#_&6^?9hm^r0YO2QEcI8AiFu&poBp?siReGkh8ww!)r(IzT60=0C zgTx%m+I5iJ;69r?rZ{p#dbctnL$}W^aYADH*dsArINJ2v5EuyE;g`#Rq`t5@-F+jY zr86uOj%V70N=2XutMoW8GC>+Xkn76=r<*ZrG1-mtSGja|yTILu`w#_R!nV)<7RF1WU zW{SP_BqOGq>;m)O(bR2;qcj;wnMcRNc>W8Vl}yipXj|2zO`dgv-!)gs!Mwa9A+({x z=uu=QaVrcufK!*PJc-tMVgj8}?N{DJuDWQTuNjz8XCqz=q0fa0E?Z8W&no)kY}(w} zn#uNy%#Eb=Q-Sg^2bHr3rDV8ttM*95dXkx)(}o~cHEsI1Gc-o5hw}0chth`jqen8V zMGUK{4PveRzyxr9fMqvySo=&utacLC7s7a#t*8FT+VaQwv^ldhlkFCoGa)bn8M<}T zan;_5Lofs;vzuTLYYDUaCJ&``X>Hp0QCAQ&SIEKKT*PWqr}UBK_sw z2xx~`7hOZqcF;gib6otbB&-jGi7rJY*w=GXU#HkFo@}J<9QYMHzUtqBCQqS>4Aun- zQ1`@rBtJLv*=Lr4S#pCQ(U{_O5`-PP+E(#`AA#p@Xr_pY}HeD~Me-S3cd z_5TE3276(rU_~5Odw6iMSE`2=*9Z%>vGJ;ikFD=3U)%fYoR@_ATp1tRHt^MlHz!{( zZd8Pwet~_k?H^I1KZd-Ht%wqpfk9Q2=vx*f3Jp|hS|5kx-bcfSQgGpK{G*3(PXIFo z4vnFTf3&tDsPGHDs8qKJeD?Oq-KQ)LyDBR36MP15RQ-yu%t?DY)(Fe|R1uYVVaDeg zQJHUR1ZDcMn8J7#Q}{_2li4cp^~vWSUmM9NhcF^gEgY zk{_3vA79Uj6Y{R@-y+doRW6&WB&x<`P| z>HwXjv+&33EJEIc)`$8`(kp`>A90 zth|-3ehcmU{v&}PFP&4jgbdV_>#q%O>oN}_%eBP-N%;uh#9)Dcotu)8D``t{JJOkq zlhPp6r~^ewNm(paK+1%$*YM9)qQZR4V~GM4c@Y0h6gYc;JYWj5Whqk_c>M-a&=5wA zk%_g%al()B=AaM81uN4`06p{$e(o7s9n`GN<3MqQJ4QqptYn? z8Ms#ZqW2eP0iW|pT%&2-;J7;D{0mq)T{-lSxeGw zcA#eMo5M6~Dr(kD)T~3OS;tVb(m4KxF>sP*x%hgbW~F47Yu4>@&BC6aeDU$s52{r< zgQ?c2L48h4lT<4nRcmOuYQ+aMV{qy#Hk`B{R3&OU?~ zGAMLyIf0K5oSK1&{a#BzjC| zp}E);Uo3(-4w5A@#0};mHB0dArAQGAk`VlqWSNWG9BYn$HhjiBOVXWC^$Qc`7!M|& z??gizj?T@IM~`w^G?^?QZX0nv+g7-7cLB$rKE8WX9=XI7A{%~%`Bj{R`4R`gxoRZA zS*RFGGvF(0S^%#rY9aeJ_>NT6Vo-A`(-pOt%jzloTknci4;r&_`JV+^e_=Q@L!k+$ zztehqmg2-&Z&_dZ%eUbusCQ|duh#~kTV%LRt`-yBU;(z)*VF2Km5J8kcY*3H4~II< zv2ESv+pLX2&w50g$CIyox!m$$$;kImt3a+U#-(lmG^UNwf|D~uXj64y`LBBX?ovas zSQtVwp#$wqTxf@mRUi8jH`?qW@uYJ0>9>bO?nDQm*|-q~ydk=eSuo%>K}8=-l0klp z$oUKO{#xNPwyE8U$e9!0ADSS(X4UZ~h_CtGA|T#j5;9|ktSiZ=_&AWb(q{LF7nS!X z?(7rd?GMI?tp7_=`SAwgZDzvoUYGD*UMqZLc-tUeTF3bBCi;KE44K%Qf>AC z{Y!R-w6V}qrEX&kjd96q0uk)4jP5XkjzD{MGdva_3JX>Iheay><^H(MTgX*T_ii-4 zyB1v|w75q}w(n;6SgH`9k;xuvV8m}-j186`Cb=;*D^;-ze(J#(ItKRfm&9Ji0yM+* zk19%4%)(GWQw9FD?_Z4-)f(J@Vrq&$#U)X0Ed1S=yej|p5lY5VfRdWZN;|Uns5&fW>Hz#D#Z1YJ*`v8^ z`=E|7i^tGM0Yzv>5K!!T?Ig6eZ4 z{K2A{>aa*B1GbI0PyARO=~TNa(#f7hI$42pd7Rc=7N^DHu4JN&snuC@m#W8Uc@Dw} zfW>K98<&S^?WzjX@-wa$r8NLHKo>MC-pfQ&z)7bIeNVe6)sO|9_0g&P7mMr75}-5v z7wwFXmsNYbtn%@H0Fn+H!B~H{xSiD|+Q@1XZI@~jv8P+b-7@j6?&)sn>GGI1H;T|{E0$fEek>8&gG_pKtD_?PXaReq4iH^_MhGM$At{WIhCdLpWU6mDA@x&U z*Z5vX)e;M~1hhfUI54tMY;*)&f=8vZafnfQ=q8>U5+~W2D8g2Hzwy zQmdhHR90u=;t!&={y8w;%PQSOeGqI_;DeH5r&32B5})bsgw^|DwG8qO;UehX?&7

    az&7b#mD*w%R#n> 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 diff --git a/pkg/ui/web/public/fonts/ABCMonumentGroteskSemi-Mono-Medium.woff b/pkg/ui/web/public/fonts/ABCMonumentGroteskSemi-Mono-Medium.woff deleted file mode 100644 index 5e7f079148e50af23bf2cbddea641ecf0c76611e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 65432 zcmZU4V{~Rs6K!nUnb^j}wv8vo#I|kQHYc`i+nLxlZ{F|zySG>Gbxv3B>Q$>w|ES%) zj;p+wn7oRLJP^=#8W21X5D@U?A`l1=@Xy=-*M!ByegOf&qyYittpfoa@o&0-35bcQ z$N~YqLH&^N{zGDd<)^ras2C7XrPI$?=?7MD)UaLR3i8T8Ky5cbKmr&){xRrdM#JLD zszN`!Q6L}$3Lqd!T8ZA=1$ku#=AR&ve*9E_pszEo=xbzcUJX4Xz_Kk<d5SmgE_^6Lp43AFHM2=$Z8|24NPBYk6i{jZmr zM1TLKcmDSt+bR$^0c7J|R(zn;9tfBJu@rznezN-?*CfLDqrZ2&w{LL>t*^It7d{_* zA1eyW84D||bxlJfEp0U|&EMeyPNH{iY%RFYU+~{=)P@INqY%_dLhK3u{zO5CD7~~N zMoOT3%Ac=5ewk_{%1Cp9nzbM+p;QIyVVsnx zXxHS`^m^swl}1N{q)s`Ct4$c_?^Ynp*52?Qe-?@$4!;+Q-Co=6m_&|G6ovRD4_}sh zKA(G&ZBL?ti6;Isu_Zk@RPDmZCI;TW3*qZC1T(WjpS-cSPIX^_BeG|co#(f-I%%)d z`>0NpxBep(=FPXsBXsSHFAMw14}g2`*yEGOqf&z0zs_>aynMp8%{gvfDcfeBd$*h! z*7C;F3tE?u=)>|2pIswtqh9~)@n4KC3YN_bUbwGE|KV6K5x8lWvNRF$=Hw$<_PB56 zRePM-ClW0CKDwnWn>LP6oD`<#^6*JIM$hor%(?7q#mdiZOu-V&D3)Tod$oVnzDAFj znl(9Z?KeEgojb8wYj`o##*wjd=2h%-Jk+Ugh_Dry-;yx<7lDJ zlvDKt&(o$Plwha?Q_W#_h=#EVM8S{L^2_sTZn8(*Kr4Y8v!e1gUXHNzfV+d95r)A( zI8VVxEmj?K;Lo=MpAoEu#P$_y6{fC)`{#|8=dCycvhvVVP{ms@c^oFQE(m$nvR~?R#&l#{;ZNgtG^u9K`kW}b}3*A1V1HM ziqA&b1a?9Kro+SAeyUkbn74mX(#AVwWssrSvvB!j6R^|%o^JPmhKNNkgZ1^z)HZ{e zze|&HyTlhIn)`R2O?#T4n@MM+0}St<<}j*}ce>EY^Nma0QDgh8f*Xj$oOd#2_?QTK z@Yj;1;I)MpukM-X+?~Uw9)ha8b836n62)Jq6Oc(Q-Y9$fg^Ug%27xEV4}#TOyI@>r>L@Ac>>A0iAjuOUsh}i>WC?1 ze{d?3c2o)MWYU~?tyWbs0+0v3KOnuI}K}JLL4&nu7t|XgE(5& zEy^R38tVK8&sG${4Tn`B1`>C~D;sFvIN==k^$cO?6=PHNIg-^`eWX`xOmNJ2tn6M* zEW1`6vJ@|k2!?3BX0@SfyT5*=)EG8mFG=`)^2O&~F|X}cOs-R=`RS(yL$0TMw@9~t z>R#aWhY0F)be5##2^lNfrG|B-ydI^Ab&F$zKcE^w1nGkG;sc~;!Qq$PljxL%@{m$d4$5VdNg7G^<)R5g*A!!=OBL>)@gu;CqL>HMgwfL@fn1RkRUbOWz!XO}qM8#8BIzL zuYx=*b27|pM~;q6jogbkX9$lW-B7mhJ%nFNAyx@fwaS-H+$(D9vdz=%8weZwQI5=6 zAf~aICnc>0zZa&QBb7>v&`Up)zW%(eNjQ*_SqC~_K)!=$11z#-`UyFBcKVZj*+KeCrLra#gGm| z5c7@NKOvve1hX%HN|3vF4~eYoet+segzb6EzT$=+m^qEVnbCM8e;0x>?vrA zeqNPN?b-Nj`5tnOrCQ<{!(ESittUQFlZxj-f3PgpkZMdB=b~Bw(4*J$aa1P3xAW1> zNMy&hjJcFQcR)ozXWg})W*h2nBJ(S;vu%% za1!Z_X}$uc$9|J$kcNaj*gC%P6Jb5t25_;*8^D=@NotR&YEQ968KaG9PnZqI^=k|> z<(#MWiafr-2em1BAMYke;hY*XhG(W#P0t*d*!)woA?d#~W=iI6O*A)l#N?DQg>Yp_ z^lVkv8~2_xL2zu#g>;M4K8hdl!l;cCr8R+;))ebL>&QZ{QduH2VY74#5_gXR(c7=? zl)~?DlTNlN3Gb?S=0mUxQv;Y4W)C>o1mziPp(=r?eDD!r!hb4~m&92Cpw+i$6x&rX1oOkTTqG{F$d>IZSJ;i#aY%5VCMf z|NSS4bVTRiU5s~7{Emv3S+-({OtqfrZ;{GPRgy${`w7|OS)|o58_sH<+?jje*1R~$ z^$oq}izdb>^YR3-Catua+})pY+7DE$u=|4l)g?dm4p88?7IqX?Ef5fGKk(U4trF!4 zu8ltN{BpGoz-XmDH}nR-Py<8L5~u@3)uI9}E~3Zs!w-yxiSYA_2;0)2q;}!Cr($<8 z$~v5S?E1c-FW!0i<~zx8G&P;hO6O!VH8Gc}E-}ln*}a%I(zjC($&*)byPn;(%dIUR z@B;bNim%^Q1NH9wBmtqy$Tu6WJAhGjNTzQaPSREnXIpfml6y@pIn#^DXh$15RwI&+ zsF2EG+fhlpVLz~E8VTT|WHTwJP9jrHwUB7ayC{oMaUD;_5r8igQ${VPQUODkrYlKN zwk(5RB)6bx3S5`RFP2jTUxYscevI-E_AcmNK(m%oFSML}Ji%zh--^GIL@WuNyLxb2 zkIWI0FNA-f^&p5oVSC`>3ZE`=or65xcjEK*@0QysCY+x+Re#`qgN1+Ci3(x*Q^B;9 zjuVBx5N6)j_@|xeGo2`ko5laupoDn=3zQ{NbFj*Uoe^7xy&;ry5YJSO$uwPh68?zb zKFz(a(}<5{M>VPpS_ssKb8o(xDW(0bJ%vj=JMnL-jo-A+aXIXw=;_g^+KJjZiZibBhI3oHa{GNd zZu@(CYP(^IVN(^hR(AE&dabOcRx{{%|I?qX)wv7O~ zP4ZBg>C6vvCF8rX!O?U(w$|Y+(3L>kVRy&;O)DF!)IsZ`C%ch0*iGvzs%L*1Ce=(p z+A@>1p@r$0@%oBW>#6aAnX++)Vf&C%%PG-<*Ft7Vtc+f|4=Xs!`sAVvV*`_=`SNyE zWP0TqQiGyNj!B;hM1#8tv`M+inn~!CT)GZ(hw0PcMc|se<8o)aJLtXI(dCrRWJl@X00p8Be zFz8$A5f3+aqzc`;hSHA*`XS*!-u|w`(#rX!SP<>QZtsIqOHTY;he=g~5pm$Z%xr|O zYaIdTJ1~tcGGppKPxPgGS}~Ffv&++Rz)#-PIB%+X-aNcQpQGR1|Gt2?`M&NNYWn~7 zfV_=Ad>)$W1+)2rKhRy5+wy-?eNu8Oi1O$|axId8Q z8;e>Qp*n9z?q5UpzCyY~*#{nZ4`O2O05t@Lnm@ulu?^|3UXm)baglYJ`|WL?Rv9vF z9|Q^(e7UdKxMNNspBM#=7=>P_^kb-3PU1!W(ceNIQDu`ZB8P+|NyT9bexBgUAuvu( z;5a(|G4bN8IzBN}dSjY1EY+e#;mO%$rbBOmwA3MFm`Hwo!u@j zm*~5cpq|{|t26@ijn^l?Kuz1)x};-~d|h`GVkHOzKb%tEnMUPZZGCeUav8rFg|US) z8l5jsxB!1~==de$v#YDKK`zi|6@jPyzXaza-rSIrlOyr0(RcIwTwu&-fUe1lrEyheW=du3C=;8 zmklDdL&dh?tRNr`&OwuxDsE<0OVn%X&>AHYH2Q0CXGNas27w)HjE$Rmkn8_;7t+Up zPhODDPYU@bXgKItg!_2Xq3P*nZwa$n*C2H_4H5l3@mAkjnP4ZZvwxS@hse8xtZV$E z{5vu6 zQ0G;HT%hUK06~H`DhvEXOf5hV7Fg*haN}h7+gQ+iML5IUlNblaPEp`z`>Xg>f+S^F zTcgja0VBY~y*V~DHK__{flFjPp3PRKil5gqZZs3rL(!B~9l!wcQ^v2E$5MQg&tmSx zQf$CgX+r{N-fDIeh7=grdPmEA&;9gk{Qe2Qhf48Z9+Y~Uak99emvtFFCCxi5b}urI z4<*~ZkD*c|`l5aoiwoG5{f>vJpBCh+1|?6_^B<%X1Eb_GeGh_2^}kUK;NPuY_R}w=OYbcSx1|8vG`~hK{8RF_t;jhn#;94A(F1uW~_1wUjF8 zM)hmR;7hSc#pB1PJgQ17PKA2lhFN0!MdD6!o072;F5!2vBXQu3k^;Mj?Osb!orJ=k zUI=p!3b`XC35q-l@hy>Xn;x|CTRdZWeb8u9xK?}s6t+~-A4=tvA4`-(5}8N=t?)AsCLpWeM`A*z-%^)lXaSsZMLCYDV0|XlXdD8bNx-e z(Ph5E#NRtcec+ZNFL+RYIhc>rpnrzGBj0{?RRLfgVhVyxM0%4*tnQ&=X)}=>lA-UX zMD&OKfqp4Y&{k5Uq79mC?2kC;Azk}LqYVrQ6$^nFBPNFCx#gIf?+8<HL}=Kkzso)n;ClJzbJMg>MadfXz|&pFDyd+VW0EmZ{TZA? z99|jtse9mZwa-YBgUf={J<$0y@5&s^IhE8jbSneCdeA>~CCvf1Un_b&ooXdbhUC7V zj}zxNW646mqW^r}Kef>3|y|G+XuTMAF3LT9kCZ zq~m{~JW*C9L5lx*qYM^GzKKC!8hs-=#Jo60Mmsgqq7bP zZn>fZ|04*-_7aNfi}Fi0F4|GRFIt9wGGvgFFF)Rxa+;pkYP{Zxz1W;R^NuGoI>Gdv zUp1lLigieVT1wWOlCHS$gAz5OP=<uTcqZAV)K#{vLRi7D6niEQp9i57Sk{+>%NB$q1z#AV zOi~t~#LX6gBO9GRth8Tty9j1M+!dE0;;xXB#BeBEte9BdrotXvMzzT0f!vfHQOK@1 z_F(7%%@!%9f`u+MRk~k(sDhR(WSz%chP^0f!JRC8S>mG5QAV~%a0b+rx-NcM8lwPN zF1%=9!J90dofo4tQkJ-APaO%6%FdTlEG_psqiu=@2-zWShnGbYt?B1c>(mRFUMJbBV58iLUIuiUvgmbZ{6c5U8 z*q>SS1$qkZi^6YYpAkN?J^4HH*C)>pkZ&ZP;a@Vo`H`nJ55M2IKLa5EMbaldW-{4@ z(GT)(wr_+Le$)kCSP}WyA&N{EVgqK__yf%3a3g8VCQ+Q|!gK{D%8q63i$c^XfZmgI zY8llM9HYJ)8D}wl+H@Ql*%A!p%<_Sc$npsd#lA(u@pQv-sPSB8g?JSxwrH5rg7VWS zHX~u#Vh~D(5(4F1^IleC9H!`Wav9|k?1ii!F=7m0s!nH*qFYF@8Czv~iUM7TF`waJ z#!rh;L0Jetopds2XWmM?ibCC=Y@L;BWVsZ2*7soK#a1uDT*y2fc=+@7BW8dn1x%1w z((DVH8HLmGCmBsRSOT!eT3HIy<|eUBXjx*gXJqurnG>-PhZAoNJFy8(nD-}Mn7$^_ zOsG+N!I%YQ7*YFWjD*q|$+KXJ0@9$!6POqkWms9V)B7fkO_-QuXi-NdO^z5H)7>Y% zOn@8WGzV!-QW(R+O;eaB(hetKOvoA{G^a=zEz_DNxya)s4VPJP(~M0>68npo%_qsp zv&ZzA)2AjeOlT5^tc>c@FJ%xK0@uba3|&|})4C@4O!yuBI7jge5m?02w2vqqqd2Ft z^yQe{C#jBD6KApvrkRh^K#q7E{o6*h4e43b(<&#~j<_5HUjy65HVti9T+=!xd5`3e z`0o9vj0u=y(?%vykErgW+^5l)7}8QFX^zBZ%E{^D+QsUsimIxr%9>?v zs?N!I^(spWODaoBOKMAspVF%8e~RnX*2>Pxf7D?aP6bXmPGv^fk5((ss05S&Dgfnx z%JniURclojYR}}ritLK6am6M7$zM!q@ZtHH0>uleCnS?9LhGVz;?96aP1*AE@{MxO za`6h+%1Bmxwota;jn<8)>!9r^?M&^IIw4no5mqrSxSseTWxZqzWT(?MS^Bc*e&@g* z*0%~>1)iEMU@eF&g#JhtnyIJEY!({Unm^maUOBITd+Vd;$;e0cH^n!gPod8`Y6Mje zRZZ1Hh2);f=JGRDXT_xfRen`vb?IuCigi#}?#OD4RJ!gPi*B~-nVCI?+t}BcrE}G5 z4c_ARx;K6yOM|+bRfnQOg9&c7PK(J3`sbMyJ%cmOiD%EPWNPv+=@S=ypxzVLh z6Nx25jgCfWB}?;kC)e{gTkBuhtykyR#ZUb|Mt^F@>q@FJH83@N>&p!nwoU4%P%?Gc zTh5oNSDLn?J$BAlDtb!3Iv|>GTG^m%<7V}JL5&7X;5~oKSf~`wg^5+-^4eT1b96~I zk?&`ISXt~W7M`}3JZIo!F4-I{T8TN{A8k*mv+nE^xJTY#WNK-fpRO^t9X6?vS3@-3 z*(R@?{juzROk1|p>ak?$Pid~U+?aFeyu{n6Za%ikUH7rv=&_E^Ubl(R3D`pStoC;G z)O#m=M?{FkYv$0lQ19AGbJ4t%T6eW2T=+^b0u^T%ks0aXa&wh9yD2w%jJf3YaE-ct z>0U^Zo8bQA;<4baaIBi`*pcRny)ZOO)+Q~Oy7xD_-NQv^)meR|z(#Eg!a4HFr89HY z+wgf!j+%nMG+AyWdz*X3_39e$>LYd{oIoXZnYZ5q@4EbKt+CW|MwAz^ZP~?pmFBOy z8iSGT%(m^D#)IbUv4UPnjn)pY_w_^NoUKBS>gUzt^`fug_ayKVqzED{xbgkz= zH==2%Dk~ z-0B^o@2{`t5-|BkxH9B8G&`@9ZsvG+_YXybby1bsi5wITUI;c9tTiA4L6ha5* zjD^O*S+#uN{JQ+M{8VAW;3c?BToU$XSy>>R@^OXlcPyr6ZkAP$K@|9RhjFwWF~c^DI>_iFYIHqRD4&uX^xK5 z3+M**nd!_=AGv2vnq%!8OK#V`&BFW1qu1$)Og+o53h)xxBl=$0OH4VPwC0=lg6>Fm z`er~@{ehlz2_0w00nu4R0&)yugm1mm$$XnMB3)PQr1e_%A!y2R^+~JYUBnvAyc(Xy z?XlFB)Oqr!I>cWYEq9Z{1=Yz4KxLM?tX7lp(!T0<)m8htqw~R8Q)O)RSHdi#fqQ>S z&^`3dij0P%O|?h$#QJQL>vH*Wljd=w%_!H5^Y(ecGM#RV>(-|T`5bedWr3@qilLVw zVDD@2J{%E+pS(N)K=vqylZlpvR-dEEZ}T|?&+;3Mf?;RWCacAMYdDumjmn_BVzH?_ zZn$Jg$}(k{ZHjJ+#@ZVow;tZ8o>^gY)@uGxaw034d1dX9D_7hi{VXppx0C+G^Qk44 z9A$#d%e=`_Vlrq54cW#|`68j7h zRVpEm2y^@(9zN7=+1#L^&XzX9gJm!_ol8v*WB^C~0eq?~s9#I@K<5b>+n*NiK3p<0 z!%?{XJpC9$sDAJ!b-6Kw8>XLwg^`5yt?RT?4%*j|u!~tkcjs?BZ3Un{@CwIBt4JWj zPYS>Clp*WyQ8hNze;Ws?LyZ5)=SRT&J2{>m6Oz}xU-FPWaF*}0`E%E>>f(7sm*%lS zeEu3+uy?!@`Lf7yf*>lSxP5so5Z!8R`+FXIVOhhw;8~i+$8Zx`n>1`mDl3zya7f;C zO0h0^7rWs-gl)Zr$MSM`Niw{Wy&%wR%6Jjgoem}{o6lA4;=^q4u47L`+9*`YcniIL z1bR)&Vn!ozCI|wv&jh-q@ zL*%U|)>kn?Tk_is!+qv49M(89pgd%zt?j#?>LJ7X+yR;;?RA)|M`i&XM;?dJygIMUFO$iWZo6FS@>vL-Y28k8pc`u<6MGhhS280uV$gu_>at>YOa6eRv*OC z-Lm1C{t&qv)N=(QB&?6Zy&R~{#u=AUC$B_#z8j7?sXMwB_BOuXse}z|ZxW*(g2I#B z=sX@|t9Bln7=oyAmqTl@EUOg0pY`!9{s>tt8|{P`L*yJ#jq#C(H6l2;*2V0P>T zy|W26NX!I;LCZ=5wo)EBKPA2sz&v6(oY~djO8Po^p?GoMSZM&+hO1@hq_gSZPr9J5N@ za7w_3+!Bh-dk$DWUc?6Ac2#bQ2Q|$Kvi~uz;Q~ z&FDD44V^@CT$6l4ssu|ah=LDvLye^}Ty#4Yz06-WK*=C$H1|Z(A-jkM*1DK`V^oM) zrew)_-5}@)Zt%byFeS zLaY5{*FY zo>f4tD3^;s3>wbzvA)0!^8_c^*2n_7U+(P#+XV!2roUYkKodDoJFXx*C3>%1L)!#v zJzMYe!#u8X^7-OSV7kKGV@CiQR_}C7&43?!wgTGKPLg-p5U^>#31As@TH6O)Zxr}z zy1hT1v+MX;yq}$Ex>s8jw}KKOcMedkKFsW4WN?vtkl;bmLF=9D8jbU2llFJm_g`#b zqmyQ}=c*tWMU;}n^a}%cZ$!-c{NYpl3S1eHaFR~9QQL&PZOZMNi~Lu};Nf7iWLRhA zWf*6FZ1-PyRzn6hFCx7O$?vARPiQvI@7@l+n`!AvG?jAm56|_z9lp69&V&Q zz|ZNB*`PJ`OBZ%j%Q=k%qRHe_!Pu%AatuN{SjGVckW8nRTa_0a_g2ZczFYszZ zEQWW^ofJwy0r}$QO+zyK+zXQ;)PgzF$G;HX;0;5aaye0RpZEU#D13j;FNJ!@zTV?X zXmYTwhqBaQjGd=#OK`a?E>ccZ^gX!3J-OtzQn@i+OwBIZ*9#;gP$uBePh1iBUOVTa zZACmw#YpG3@q^*=wbs}?f&HeGqebHlPQm*gJw;kiZFi@b$hE_%*_R*mp1X^s;(2JF zjaa}$g2%prj{y>gb5AfkxK6f9spiD{C5QB~V$JcX`2gL?*LO36;fpd+3-K@&4&{w% z3WDKwJDH+G5e_A&zWFN}iX!K00shD`yy!PXCfbQXbdC(yX=n0KVEEbX-u^};pv6IR zbGjWHZUqOkq7Rk>|NHXle&{jtSz~b%@Xhhmkam~O2i2qkR2M*3`i<(1f$3Fp9sk#{ zcpgOh1}Mc00QF)BQB_ydv{;T&5pf+9yN-LZ_)rzTF;ZhMjIU7ID)_Yz+9f95PTX9s z)&uPw%rwM!L8Bw$B*J5}map`;`SC>m+L7m z1fjrq-!PK^b;8e&VSr5kQk2ARw`Gl$D;D{kMy`lT_&I}2Zk@hiDPImcr8~zKiAa1y5hT2UB_v{LksQWr7oyw37PdF^la7~pfgWO10rFzr(olNy_!WQ5^MHtM zAd5QeGSyu}D)yE9>PS7h?$N)q8v7&N!!vnY9-uR<(A){%s~V&9EA#}lt#mL3 z(bWR7!)x*@1bXu#&yiQ`u4o+!+|Q#?{KVIFF?Ps^Nmz3dsG?atX3*B*FFK&89B_EK zaG-R8i?^IHc>I4sOTSCPhUm*=$#bFlMl|wCo;A0^7p^Jpv!0+$yh;dBpe0k5XBSZB z{pR9xs~7Z1qx!Aq?a(dpl*vg2ENwCAhXIpLfL-Hgs_HLKA=3EzXgyjf?%hHu9DzC@ zACcaS{kjAB;7kKwJWva5{9%p5d=lvQd5y0d%Mt!7m+oRtN2+sl5cEh?CbEYMml;(S zZ-d1>N>;dNS?G1lR{kTz2M}J#&TMbH^D7c_%&=o#w5FxVshqS`)FxrM1|4DY+BZjI zQqA077Y##%#$)ONOCE#9VSCOe#7^YP^{^w6I?${c{w=f73xu(sq&9D6b%AMWAwh^E z{uCwuY^r9n_pdqaKP*kj_crNfA&)e|*X3d2JXp{>v^nfar1sCM`xHEG};92k(o)Z^_A5!BTEkhPX%pUgi6_`uT&((k{mR(sZwN z2iF+@GU5%27}apcPwis!J|*UAzRv$|@L(l>eea0O?r zYCaV!L~d(6Ko%-wJV$Hns_rhuq3>MPPCXF?6AhKwXVPOIZEng=npJHr=mn`3(}ka_ z#e-4pmZeAONg)cR0r$VAxl%SJ$j2dEg-CiJdGw;N-$6MFk#1o%ttn#s3{Pue5_RV+ zk&gP?erbJ*0?mrXj&UT!FQgAgFJ0aoK2mxyh$kbr@3#r*LcVf6Oi$?x_>?{ff$$hD zW8H~lz%z!m2Z;Ti_R)+$@QCTmDZ!7cDkI`38v?z3=j~N>rKQ@$2C~(^bMv~`R@Zz6 znyO%;WP{3XdNoiC?%MEqW&($CvH{+#-k#$}*0=}-zbQQ#`?(f78tvzzLK$h6j+MMAcZ$Zp@^vgQs~wZY+yJ{ zE3&zM7y_#&?Bct7C2bxk6J3o#DH)TQ^Uhwox)UcAw0Kp5;_zNnFs-lcDL4E#m&e-T zp)xcodEqdp#QK>6gmcU|_XG*TdYWi=%VLky`o)sWDDw0sf8(+hJy8Sp7Vr`)E-e@kz_tdEca z_+nvSxvRO9^mg47g(8WBLo)pJG^av#)i{W{OO2c<*oxlYWyenn&{tj~i=%+!@=ma_ zJ~A`b9aOb7w@Z3LrjT9;O^~l5Z*-XfHC5FV>|=Mt zG`MvY1zv}@qT223XhhD!$J`3i%_TWPX{f~6xhboSr(6sUoFK3B0~w%4hD>9l^CT~A zNbP-*q+E<@uD#iNrL0P5)7^AXpg5t7; zPNrgxV7fcLdBE}wfD;2%`>XbKfd?QWpRKNB!-$Fp4#5+f`2=;dW(*jjLSd4lTJBHW z{-fvO8;@NGl_Us8w#21%iD3G$c`<|T3iodin08~gr(_u!`q8LCIt9_~eES!hQ&q5& z!%N5y>S8K=vMU)#}EGXNDJJ9SjnvbZPK{$Kx?)JxH(|^1taBB z)1jhzP(2AWu78}Zi0R#DC-dC0!&gO=KRZH=nmPGI){|`imncnY zHz3>~s;q5H@1O<3)BA!3si?ZF@zZmo(BF2ibXlI(z;g96wO$w(nDS69%u0w_mu{DG zXmoxjhjT$u*(V^CBeKRjiv*3-qr^T12Q159A64(cvrvX!WQp zSQ!kbqx6Xj*?8v;ghAseGT3Q|qYg7e~R-Yqa#LRXJq=)sdf6nCK{<(uyrk$F8>K` z`S!_ZE4HcSZ2a}GiZMze?>lH zr|i)Da?keyAT&OHeXb5tT}Q8(X_7J^GJ4IHvCoa{3YQ+)PH>8ZxrNK$$4!n4EqwQ3TRqc^y?j%XNoAQA z=!CNKp@jzQl%XvnSU(K3F)NUVNH(U25$*Q9%KfeYEDV zofx_INx5PjhKCUi`)FkwfKKFA!fcFK4rUSAL5sVqph+_u!x{XW=(^I-GS^d>i)BHcJRO$elm9G!XY~#OcHqA{FI*5zv|HRhJ2#Yf zbDg~;0?JGFWQiicl;=p(B4Ty99L?b-AY~}nr~hR!1}?<<(%wDbpS0t*SLn|f8IVKn z_rNxAc++nB3PwI|mk+MZ%7*>>GE%$w)yVPU##VMunCouWYj~`vU*pwv;c_^^^hHR~ zs=Y^~uVoc8We2$#^Wy4=0=w#;QzgS~dE)m-x?I=5TvB0QjiEOhpw&YY0#JDO7Pg8$ zXSWTq)Zz~@^Z(|yJ%2lxGW+ehIQH- zeg-^>Ot(xinDyMFAd+EOPWc1xR1=WKa z+Vl4J&CO2e#=jJg4b8F&2NZtUz;e}In_3`L?bti5kOy8Tg+Vb?md60P-AdVAEBh8m zSgo?y!e#6CX6mMlSn25D-fkbIzF=vRFunBWA)0A7eW-#rNF-Z%OKC~n)(*Q@=k)Cf zCwp5KH_#)h!&?T90{e$G!Sl^0`dNfn=I9Lr3<%jt=KQf6SMm?Ya8pQ&CpVdWGtpqQ z1xD(dvq*0p7*LK;cG4(?kl|0ZoS9c$6ACq4Kabm82X$x{4bGpuYyD&+Adu!*#p1IC zv{0%R3-h5hB*W{#fX@tQv|~H`hMhSubBYyKmBQ3g7C zv(D>&d`-MaXZ7w_8aSKyo7dExe`U$xG=+1iBPrBb^jHq9dBQA}9i|=s{NZ;}rr7}J zC=})y-*n39#7k3PG&TnzSP=u~rqS!-Y&M@YRSs_(`kZg`7LheN(1WHEl-FcOMvdUQ+P@B!+*rJnmO; zsYLJw7tf#rQ7NYPoX%()EKc~Da(aa|@=4Ae(Apq|>(ZSY^2k8^kmqu-wefAZDVKQq zO<}GDk^TEqQlQrKHE$#AXCEJ)_a=cds*Z;y`qU!rwDgt-(4|PZ;wYr-L)cB$ve8Fe zJS@{te|iU?i$k3N=47;oTN!@#ZkZ===-f0r2l#&Su`%(bx3xX!AC7xwWmX?k1Zf#!AcHIXn}7zPGnt5~h}{A<2kFR@twb zRi3l?PGm}GVXlhIa)pAtW~aDnI;{=_(*<^kF_XAbSrI6-AaEqaQ{5>zZAvyR)d`upAMUko5xSfcUmD+jYC}~l~lJZ4MUG5$=A6ob1d|?la zQ<>T#FQUSjNHOM578Cd}tllqQNFffrLSNd<;($>UfZSfdhH`Qm5Rs5uOC8C2zQ38F z#q5_~AXDnBFnNAD}v2L*^q0lj!N;3hSXQj zkB?!XW}QA?gnIHhrJY{5n<4O;JIl?RVSHkVdX>p4ODd_U_K*xRf`^2U;tp=wWZ>L( zIHa6-BtHs&l)`|~QW!o2un8&q_Gj683P z<0GN#F2$KTX{f2DX(eJp8P5IXsH5rd%D-4HeO7fm{iTI(UNBKVay|4mu8o<{raLe4 z!s{#Zr7~D7PdCA!B@Dk0PPFPNv>5lD#k{S;`DZf_Yucrbw?sx?`khaMz3|T`Kc?0= zY6iXh$rMcDedpvJ8d9L+7!v1-Z#YjTIBu&yzdGz#vbYnNOtGSE{H1J&*PW2D3khT? z?QaJH{*{!arvM8>owpdXVq(R658#zSHaqyTxfX`S-n*S8AAPD%gNe%2;@|VRVu(=* z^E={EK|FP2WV%8yrrLhCu;qAO4Kg$nYN&-eIkgyc6RBk*zFsv9dN~o#^Yck+zoZA$ zY2lG)JcS~OP&b+gJx;QdPeLoPL7i8hL?P{hbs2I6ENPgK)EAQH<0l!2SW<(EdMA_3 z`u;J~ZI9j#&1XIAN+m9$C_CifL>2YO;-w*X{G%>i&%dWg`znW)A>~qsXBSf4ix~z8 znI4W7Op#;R$V$ZaTPxY4(^Sph1rOa(A*Ua|&aVwsi_fotFBx<~G{CB9VzczA$js@iwm+W@(dHU_ zmb^VSMAXVI+_lBZzc-y;@s@Wy!m+aOd0=<6CYyZrSHmhJFN!1D5|62}eA2I1n@-%% z9_KG#m!AXwkP( zdgG@lQux^Rga#n)L^m`$UYLCiiIZOO1^4L-)G5gwu_5cfzjgR<7J54XR(q9 z&0#MRmZz9E2wAYj*9B^r?;ak{U~g<3=(3-!Ey}Hp-hWmMPT3%xo-yPc@Ldg8fO95B z6W)g!8nEwC+{~2b=@xQ0JuUcnEe4An6#VO!)cOrdAuq?p=yXDg=xX^KNMKsk8`An+ zhP3vHtJGp8DLdA9bL&~6zF}`6hTzsnktRIVHC*PG0q`) zUI!8%4m^3&)J8kJa8+xR+}?H5rQXh-)0iyV4&*P<#qP_geJhY-znmPudJK+Opk=N^ z-7#$B!Y_epiVwLu5+_U(ga^cv*o=Z%>3P{ymdaSG^^}D4WGApK(e%P)cq75=3MQ{p zd&m``Rf48|wEk+%FXaBItEPbUg|+=`%B^%Y-ug|Ve*pWsbAu>EL#uGI|Q!gOUpn`-W8Cj{Dvx%&|ML7cz z)}R4#^1)WwX+ycSC_8n?hyx^=EPNEx-e|8#w*J`d5~m9$dn-567@0Nrz@|CwWxf+a;(hGC@Ognf00gGa(#&bbgq~agc_&zia;APUHTXP~Iounua>Er&U3nQdYNdm^Sv1IAJ>+^-<9DjddNOW`n8O5Cw92ESVU(UkIN-W&G<5V6;l*cUFC^#k-3MV-d z4CN7XM4jTm3(uB9lkF4!iL{3M3_C5CpCGlYl#33V!63KRWaw1xKk+Y;7>jC{_* zm_@ND0?k^B(ooj+tbG|Qo=Y}YbrGKT(+w=q85jTy(HT4-A8E!#c=(}_$o*j8c`}6J z43xTj!wMFEDiH*UebUpHUoSLtlDfh*ONVfS64#SH_fr3%)8#r66V1+;mxXdzSfc~l zB_9h`u4s77;qOUd)NUz^+DjeL z{>tYKs+3XwUL4*CYo%FvT)r2SE~kkN!(K(Lu?90%!CW^2-Pvff{mR#RSY%q8-_PkZqPZ zuA#d?b|2-OTm?&slLDy@E#4K*aF>kFD>I{vVOhy{;Vk#YxT}H(c>r?Um0x!C?%enC z%Xi`=(&8M4bKL~8($jVSb`wwD@Rwb<6Bqoa>v*hwzkD6#%k#yDj=i@?gX%DgSPv~| zkN+5!&+m*AEyMxB)T3iE1`vl`-L5fihr7IK1y!vtq7$2?s~|yfy}*PBoQV!PHy8Mw zPA9bd#yAuZHEZfZcA~CeS?)G;g?(wG!{dz41Vea8tRJ#PAq5C@EWaZTohLD5*2c`N z!~^IR%5*|a(7@PnVS()bH;qwtd*wi3CunT3v(o*QgJMQW6~fA8>4M6^ez=~F-`NT3 zVV&-O-DwHx37mN17HLta<9FalW14iYr95YJ?U|G^3L_@yo9J1RAUwmF4m$YfXM&V1 z5?5CW{)h!Cjs515+QrabHa*AjlJcNW+*>);Ebk&uwl_ucX7;{fZ@v*z@qQ|rxpC1J zww-oamx~^M5Zh`XhNo?%9uJ`96bUya^B-NZV&%9>xQ_4?&__`TxaZWrApRJ#+Z(iJ0RR=cCY zVH3ws7#qpe%~8X#GQ`PmTg?gF1(}R|B72U zYf%geMKji-bdvf#1Jlu-J zqmq{lla(0SyGi-R|I?kQ%J*4iyY%mOT8~mqF*xg@BulQx!wr%0J6!|yyPLi!s|cjDk25!T!2OzyHGMx#7opK44$MQ_b+qdBG=pax5U;7iLDr!t=Qk$l0;i!>MWS&m9q6P z4i?H1o`<(eOuUnrcv#K^PC0U-_|$LrkWE27gpl}!kxx!#*O5Qj5EdTWNGv?cbKn*k z4-4e&rQdidK9O6-%-JEJzEH}}qck{G(oNtWO+q=TNjsLaxw-+1#!NxI+2)`w)?L8y z5|bY$5hfqGl`>g=<@vsp6ED5?%>R%xZYwzcqm&o7HZ~W^?md$VmF`1pEAGt68N15& z=Dxz;gvMpkq2x4O@b}U?bd@g9eI3r}U&;);`p^u<%el2|IpOzFd?Uy?G#&rGAtiZTX<|A9;LtI!uUVP9Qz3@=d<`rbO(Ur2L*!+8?`@BMNM)^g)K4@6*G{Qu6 z=_>pCLdgRZ%6{N|za9kbbklf(w93|j>D5gKtg=w%;`H#0uw}v09XFz-a9W4XEzb8o zz?P-sPnYF$<;49t=qeo_JzK)@f2`y9XID7>9OC$k@tnP_oWoZ();G%bTk;P49N0oTziki zwe?2|74#mILC}r_ma94Ddkoz^B%+A`M!SbHZq$7<7TEd4+zw9#RMQBR8_=id-I`&Uo994QX za~f54H!~#e<rFyofzwKikQ(A~l3S^52Eb%FIGC zDG8j|$A|>}*x*@Xdv%*t@!7!bu22u!=YD=;C4E<*)4wMhrH{YgLxoWJrYZ5IrDKM0 zY$-_BO{Kf0-*KpXITdP&&4iXOjeT|F42B6-1{Aq0Y6ZL4Mw7W<%c9KqAMxi;pl_^r zSXcUOgKQ^Czi%LlIz_P)g~Uz_FdBvb^nHW;0YoXIWjA3<6Hf!=#8a-4EW3C5oCY_= zHqs5)!?NvsCS~OCy2-PFg_5_l*n2B3)%5H-gu4E zPcJ2@+^n^D2&M;Rs(*`F((T0makCcwg`^9(8vdt`(ID`D6LYM5eIXqfNFQK;hrF>6 zNB=}Zd#>yru6)=hU&ReAJM4P}T1{8%EZxgpA+vKuB4a^ldoFZH&>vl@Z z8*fPTl)4g83yC7xwoA3e(mTF<@j#p`@ZU=LvLbaQlAuv)DKux3L0(vPd^@_vzQ^i@ zI{q7>E=tsE5^n8DSl?11e)0S8(|mFn>70w=3W3ii(RyKduzs#ISg)tkuR`CUBUr&9 z`AZZMT-Q;)MiFZge+E{#4z|+idl0d2M=JR$SCfG!wMyv|yd7yI)s#N3M*pRQXUM+&_=LcNv6W zHXesi%R+>3Z0CWf{(}n$cWX{c;4IR-wbT7_z$slaC_CFsk)7Xqt~FUr>3f!)jvPOs z16Q6vlrqC*xx-^{Q_h2A;l)x~uy72=9~(=&YN@RK@{!CtX*nK~4qiExekt?LiIBeQ z)PVy(vf|e`{$<`NEt+DO<+qU4uP&3gk>Y-^E&WbtH`xntgq8c^G0MO6h0 zqFTehN1GNsUT}k5rrk7ZyG!b17N#2OY8FiL3+RvH(9HO`OWDS{b&Iwx%8+htT}LO< zva_?dZ#;sovL(HVKPR&|qzKG^Q9Vsq%y0LjOH)cH@3 z39_1tV&dm4WgT>hi#IJwMY$+vZA$W{jj3DEc@|1^=>O8T}CP7_ajM~Rv{X!-ZVAs5~xQRVBhY;)ORxvt_ft$ZT< zw>XHmyv>DIoS6TI)ODhGL%1VVyu$@l_>;v?T+1Ni!5Rjl8D8UzQu_w*-Mn3 zk1*=B{Eor8nK|S4I+IFf%MN zHW2kdVP_C<=;G?!)T|8|o7QEc8z^1=(q_QiafTq4{|*gcgb<&xe0x&n`pnJiccbkn zJ$6HAV#La+O9Lx?TSgp7<;UDF_(W^ zupe^d!>n1@UEmK-Bn6W={+0))KUZpSDn4j?Dp{OUO0R#%m3`Irw-f2-?>N%YPp8tJ zwiyo)zbNffY|E_HFCR3Jc~`rg)h(?VVd8#pbQ4a(pO@X`d`Tv}P|M_i&@>yOkndZu0=Dimg`5FNK z?E=w*?nLRF2<}|=DTZ?XUHNN_w@@f25&2^2JjatX@FKW(Ielq|RJntfqE^`#c_ z)65`UKxP4LHnCO{w%amMhVxzO?5f_hy3YCTK6<`;P!_ z#Ca-C@IpS+L+|v71fl}8#;XXHBOfhjz@7<>JK9siJr=rAjk*=6FpE{~yOiS;85*#6 z(Oq|T?66t~`-G*=6q`L-U4>0Q@Op2+#F~Ts_s5SiX=rC)QZVcPky-1#)=!PtxlZBx zR1gKN^YlC3uW^5#_7j>4FT`HU3;|N-4=;EW@m3`FYT;0-@4h#JC&C$? zduJr>L|6``!qxbaA)!WjEG>}olTBh>j*>K>6rPV=dWi^sc%>aq=ry- zEw7_U)uIB7o>BtrGhq1+yPC61x{oeyd2mOK>~u4JaFnUXqCd8)@-ce|Pl#rfhtB61 zR3$%07gswnT^O{iT6jN;I#%uD*K9adN6$J$^sMZ=iqBX_v1bwFb_BP5HEQbLOS^dJ z+_Q6ssJ~fBEg#>h*48s;9I`&I%Bf%F*<0o5tI~cuRGX4J)N6N1ob*nW1ck07YGD_c>c{L6csh5fnG-dUE zfuZ#H^3`Oz4ImOduynqG?EB)e? z-laNdcZE=LKLy3peWKd&_2Ry0Y^5`IKp3xI?cdV<&}q6be$ynMsoryFf`#Lo&$wS= zE#L_@MZ@tEMq}kUY4cq2#QV74K9BqC451xviin^?sdp8KsccKox7Mo;Z|SCfZ(Rp|lcn!^&&kC4+MMHg&TAJt z6V_uEO~>mQZwHTYo2*$s{l#8WUrJ)%NJzIopS&M|NkI^kBRI`~uHnZ1G=_X?it{RHV*>mgku>IR@kEc)C30rl2G zQ#H}?D`0z#11$F{;hUDPm4Sfn(9k3V;!bt60`3xve^gamDfOJ9p{0-~h8IDq?l!-& zrY$`aBX&?DsnDqAKo{;21l158fT;v*Nfme|p65b_uAnvuvR;WP5NyTeYR)$mzZMPC z&h%#k#tJ2^FS8w<<82Nmmx+1>$$ASNE|3)n$HsGZiVcH6+>l^CJ!!Z3v1<70%^ zEAXrj!r+%Mq1;Dpa$Xog25<;@n@6B|E{^tUC-;?JvspE6iR+VA@6lhn`i$2+2hC#S zMSeC1u>PHyc)vvd1aux9h)PaNPL0?Za-2OQGzB?AFWaLSXuyP?Oo=&$W%{wvK;dL6wK%Gf2e?zjIQ|X$70aU2Eu%z4#R;thSFvQ_x>)S1eq8WM;xx zG#f4Ov|YE@QElTll?BO0MtgC4I(0ceo|uK=H;1o}T#weF#cZ2(%x`Oktwe26o1z6z z(LHowd*-o8{XB*#@#&^WX*M_b0iSz_*OzO(oefo56d7r8O9 z$}h53&;^w*G44Xp)(Kr<@vwhJVbtzBwJrXGd*%rX;b+l)gHAYwdTHiZ?4ll?nPd)6 ztfI!vqMDj|)h-ZKUfWQiHy^*~iD`nneec5^U2W`BZ>w->?B5ohk}lveyp<)hFk?o{ zWa@L(skYD6Uk0D6RcANU^0~UDzPPNe&sAD2pR0uLe6GSx(Rj_gwf5?@t2}Iw4YH4L zPNov9W`fu1J+4mZPt|JYQ7NTnY8g?j|JE3iseIKC&H8W6F#2ga4xyW=Uo>ZAs6ZQBIW` zk$w`TUR0yWTQ`p$Aqg|86fiRF&ioceCs4zLOf)bFbc9qXbQE94uDTv{Ca&7#uiBHP z`s;pi9=Ki^ zSu(88USzn$Q-xINJo27{GJf#{r& z2xG7n&jsBixGoV~1`mbdGA>cC2C($J$V@p>xLKti--3Ib9~`XZLpg@1!hS>(ZcY^8 z4mCcM&5tOQ`iRyKa8U|VYPQytXV7Qim0A)Z=%f%!&p(2{SqeIYgDWkWGTkd4pFz+` z7)mA(87dco%1tuKV$=ZQ@*s|=HKyG2%C16vzDU8{!wuR)TsigAB}?HWg)+Q$!0f#` z0ka*%fZ2&_=l%D9*{FE8{}3>{)92+_XQ9V4lP|zPPmpm(1mwe~p

    $zZbm}g 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ℑ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 G0001PV}@h^ diff --git a/pkg/ui/web/public/fonts/monument-regular-italic.woff b/pkg/ui/web/public/fonts/monument-regular-italic.woff deleted file mode 100644 index c7a7e77bb186f89df68e7989dc9bbd825e623fb4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 67540 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 diff --git a/pkg/ui/web/public/fonts/monument-regular.otf b/pkg/ui/web/public/fonts/monument-regular.otf deleted file mode 100644 index ea7d8858b495f6cbe0b4025b04237ec7f8f32a7c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 95076 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 diff --git a/pkg/ui/web/public/logos/plural-full-logo-black.svg b/pkg/ui/web/public/logos/plural-full-logo-black.svg deleted file mode 100644 index 3e5be0a69..000000000 --- a/pkg/ui/web/public/logos/plural-full-logo-black.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/pkg/ui/web/public/logos/plural-full-logo-white.svg b/pkg/ui/web/public/logos/plural-full-logo-white.svg deleted file mode 100644 index 8f5e8dcb0..000000000 --- a/pkg/ui/web/public/logos/plural-full-logo-white.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/pkg/ui/web/public/logos/plural-logomark-only-black.svg b/pkg/ui/web/public/logos/plural-logomark-only-black.svg deleted file mode 100644 index 3b37f74c4..000000000 --- a/pkg/ui/web/public/logos/plural-logomark-only-black.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/pkg/ui/web/public/logos/plural-logomark-only-white.svg b/pkg/ui/web/public/logos/plural-logomark-only-white.svg deleted file mode 100644 index b48e74798..000000000 --- a/pkg/ui/web/public/logos/plural-logomark-only-white.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/pkg/ui/web/public/logos/plural-logotype-only-black.svg b/pkg/ui/web/public/logos/plural-logotype-only-black.svg deleted file mode 100644 index 53f8f47b6..000000000 --- a/pkg/ui/web/public/logos/plural-logotype-only-black.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/pkg/ui/web/public/logos/plural-logotype-only-white.svg b/pkg/ui/web/public/logos/plural-logotype-only-white.svg deleted file mode 100644 index 68fb8f717..000000000 --- a/pkg/ui/web/public/logos/plural-logotype-only-white.svg +++ /dev/null @@ -1 +0,0 @@ - \ No newline at end of file diff --git a/pkg/ui/web/schema/schema.graphql b/pkg/ui/web/schema/schema.graphql deleted file mode 100644 index 691d635d6..000000000 --- a/pkg/ui/web/schema/schema.graphql +++ /dev/null @@ -1,3144 +0,0 @@ -# This file was generated based on ".graphqlconfig". Do not edit manually. - -schema { - query: RootQueryType - mutation: RootMutationType - subscription: RootSubscriptionType -} - -type Account { - availableFeatures: PlanFeatures - backgroundColor: String - billingAddress: Address - billingCustomerId: String - clusterCount: String - delinquentAt: DateTime - domainMappings: [DomainMapping] - grandfatheredUntil: DateTime - icon: String - id: ID! - insertedAt: DateTime - name: String - rootUser: User - subscription: PlatformSubscription - updatedAt: DateTime - userCount: String - workosConnectionId: String -} - -type ActionItem { - link: String! - type: ActionItemType! -} - -type Address { - city: String - country: String - line1: String - line2: String - name: String - state: String - zip: String -} - -type ApplyLock { - id: ID! - insertedAt: DateTime - lock: String - owner: User - repository: Repository - updatedAt: DateTime -} - -type Artifact { - arch: String - blob: String - filesize: Int - id: ID - insertedAt: DateTime - name: String - platform: ArtifactPlatform - readme: String - sha: String - type: ArtifactType - updatedAt: DateTime -} - -type Audit { - action: String! - actor: User - city: String - country: String - group: Group - id: ID! - image: DockerImage - insertedAt: DateTime - integrationWebhook: IntegrationWebhook - ip: String - latitude: String - longitude: String - repository: Repository - role: Role - updatedAt: DateTime - user: User - version: Version -} - -type AuditConnection { - edges: [AuditEdge] - pageInfo: PageInfo! -} - -type AuditEdge { - cursor: String - node: Audit -} - -type AuthorizationUrl { - provider: ScmProvider! - url: String! -} - -type Card { - brand: String! - expMonth: Int! - expYear: Int! - id: ID! - last4: String! - name: String -} - -type CardConnection { - edges: [CardEdge] - pageInfo: PageInfo! -} - -type CardEdge { - cursor: String - node: Card -} - -type CategoryInfo { - category: Category - count: Int - tags(after: String, before: String, first: Int, last: Int, q: String): GroupedTagConnection -} - -type ChangeInstructions { - instructions: String - script: String -} - -type Chart { - dependencies: Dependencies - description: String - id: ID - insertedAt: DateTime - installation: ChartInstallation - latestVersion: String - name: String! - repository: Repository - tags: [VersionTag] - updatedAt: DateTime -} - -type ChartConnection { - edges: [ChartEdge] - pageInfo: PageInfo! -} - -type ChartEdge { - cursor: String - node: Chart -} - -type ChartInstallation { - chart: Chart - id: ID - insertedAt: DateTime - installation: Installation - updatedAt: DateTime - version: Version -} - -type ChartInstallationConnection { - edges: [ChartInstallationEdge] - pageInfo: PageInfo! -} - -type ChartInstallationEdge { - cursor: String - node: ChartInstallation -} - -type ClosureItem { - dep: Dependency - helm: Chart - terraform: Terraform -} - -type CloudShell { - aesKey: String! - alive: Boolean! - cluster: String! - gitUrl: String! - id: ID! - insertedAt: DateTime - missing: [String] - provider: Provider! - region: String! - status: ShellStatus - subdomain: String! - updatedAt: DateTime -} - -"A Kubernetes cluster that can be used to deploy applications on with Plural." -type Cluster { - "The account that the cluster belongs to." - account: Account - "The URL of the console running on the cluster." - consoleUrl: String - "The domain name used for applications deployed on the cluster." - domain: String - "The git repository URL for the cluster." - gitUrl: String - "The ID of the cluster." - id: ID! - insertedAt: DateTime - "The name of the cluster." - name: String! - "The user that owns the cluster." - owner: User - "The last time the cluster was pinged." - pingedAt: DateTime - "The cluster's cloud provider." - provider: Provider! - "The upgrade queue for applications running on the cluster." - queue: UpgradeQueue - "The source of the cluster." - source: Source - updatedAt: DateTime - "pending upgrades for each installed app" - upgradeInfo: [UpgradeInfo] -} - -type ClusterConnection { - edges: [ClusterEdge] - pageInfo: PageInfo! -} - -"A dependncy reference between clusters" -type ClusterDependency { - "the cluster holding this dependency" - cluster: Cluster - "the source cluster of this dependency" - dependency: Cluster - id: ID! - insertedAt: DateTime - updatedAt: DateTime -} - -type ClusterEdge { - cursor: String - node: Cluster -} - -type ClusterInformation { - gitCommit: String - id: ID! - insertedAt: DateTime - platform: String - updatedAt: DateTime - version: String -} - -type Community { - discord: String - gitUrl: String - homepage: String - slack: String - twitter: String - videos: [String] -} - -type ConsentRequest { - requestedScope: [String] - skip: Boolean -} - -type Crd { - blob: String - id: ID! - insertedAt: DateTime - name: String! - updatedAt: DateTime -} - -type Cvss { - attackComplexity: VulnGrade - attackVector: VulnVector - availability: VulnGrade - confidentiality: VulnGrade - integrity: VulnGrade - privilegesRequired: VulnGrade - userInteraction: VulnRequirement -} - -type DeferredReason { - message: String - package: String - repository: String -} - -type DeferredUpdate { - attempts: Int - chartInstallation: ChartInstallation - dequeueAt: DateTime - id: ID! - insertedAt: DateTime - messages: [DeferredReason] - pending: Boolean - terraformInstallation: TerraformInstallation - updatedAt: DateTime - version: Version -} - -type DeferredUpdateConnection { - edges: [DeferredUpdateEdge] - pageInfo: PageInfo! -} - -type DeferredUpdateEdge { - cursor: String - node: DeferredUpdate -} - -type DemoProject { - credentials: String - id: ID! - insertedAt: DateTime - projectId: String! - ready: Boolean - state: DemoProjectState - updatedAt: DateTime -} - -type Dependencies { - application: Boolean - breaking: Boolean - cliVsn: String - dependencies: [Dependency] - instructions: ChangeInstructions - outputs: Map - providerVsn: String - providerWirings: Map - providers: [Provider] - secrets: [String] - wait: Boolean - wirings: Wirings -} - -type Dependency { - name: String - optional: Boolean - repo: String - type: DependencyType - version: String -} - -type DeviceLogin { - deviceToken: String! - loginUrl: String! -} - -type DnsAccessPolicy { - bindings: [PolicyBinding] - id: ID! - insertedAt: DateTime - updatedAt: DateTime -} - -type DnsDomain { - accessPolicy: DnsAccessPolicy - account: Account - creator: User - dnsRecords(after: String, before: String, first: Int, last: Int): DnsRecordConnection - id: ID! - insertedAt: DateTime - name: String! - updatedAt: DateTime -} - -type DnsDomainConnection { - edges: [DnsDomainEdge] - pageInfo: PageInfo! -} - -type DnsDomainEdge { - cursor: String - node: DnsDomain -} - -type DnsRecord { - cluster: String! - creator: User - domain: DnsDomain - id: ID! - insertedAt: DateTime - name: String! - provider: Provider! - records: [String] - type: DnsRecordType! - updatedAt: DateTime -} - -type DnsRecordConnection { - edges: [DnsRecordEdge] - pageInfo: PageInfo! -} - -type DnsRecordEdge { - cursor: String - node: DnsRecord -} - -type DockerImage { - digest: String! - dockerRepository: DockerRepository - grade: ImageGrade - id: ID! - insertedAt: DateTime - scanCompletedAt: DateTime - scannedAt: DateTime - tag: String - updatedAt: DateTime - vulnerabilities: [Vulnerability] -} - -type DockerImageConnection { - edges: [DockerImageEdge] - pageInfo: PageInfo! -} - -type DockerImageEdge { - cursor: String - node: DockerImage -} - -type DockerRepository { - id: ID! - insertedAt: DateTime - metrics(offset: String, precision: String, tag: String): [Metric] - name: String! - public: Boolean - repository: Repository - updatedAt: DateTime -} - -type DockerRepositoryConnection { - edges: [DockerRepositoryEdge] - pageInfo: PageInfo! -} - -type DockerRepositoryEdge { - cursor: String - node: DockerRepository -} - -type DomainMapping { - account: Account - domain: String! - enableSso: Boolean - id: ID! - insertedAt: DateTime - updatedAt: DateTime -} - -type EabCredential { - cluster: String! - hmacKey: String! - id: ID! - insertedAt: DateTime - keyId: String! - provider: Provider! - updatedAt: DateTime -} - -type File { - blob: String! - contentType: String - filename: String - filesize: Int - height: Int - id: ID! - insertedAt: DateTime - mediaType: MediaType - message: IncidentMessage! - updatedAt: DateTime - width: Int -} - -type FileConnection { - edges: [FileEdge] - pageInfo: PageInfo! -} - -type FileContent { - content: String! - path: String! -} - -type FileEdge { - cursor: String - node: File -} - -type Follower { - id: ID! - incident: Incident - insertedAt: DateTime - preferences: NotificationPreferences - updatedAt: DateTime - user: User! -} - -type FollowerConnection { - edges: [FollowerEdge] - pageInfo: PageInfo! -} - -type FollowerEdge { - cursor: String - node: Follower -} - -type GeoMetric { - count: Int - country: String -} - -type GitConfiguration { - branch: String - name: String - root: String - url: String -} - -type Group { - description: String - global: Boolean - id: ID! - insertedAt: DateTime - name: String! - updatedAt: DateTime -} - -type GroupConnection { - edges: [GroupEdge] - pageInfo: PageInfo! -} - -type GroupEdge { - cursor: String - node: Group -} - -type GroupMember { - group: Group - id: ID! - insertedAt: DateTime - updatedAt: DateTime - user: User -} - -type GroupMemberConnection { - edges: [GroupMemberEdge] - pageInfo: PageInfo! -} - -type GroupMemberEdge { - cursor: String - node: GroupMember -} - -type GroupedTag { - count: Int! - tag: String! -} - -type GroupedTagConnection { - edges: [GroupedTagEdge] - pageInfo: PageInfo! -} - -type GroupedTagEdge { - cursor: String - node: GroupedTag -} - -type ImageDependency { - id: ID! - image: DockerImage! - insertedAt: DateTime - updatedAt: DateTime - version: Version! -} - -type ImageLayer { - diffId: String - digest: String -} - -type ImpersonationPolicy { - bindings: [ImpersonationPolicyBinding] - id: ID! - insertedAt: DateTime - updatedAt: DateTime -} - -type ImpersonationPolicyBinding { - group: Group - id: ID! - insertedAt: DateTime - updatedAt: DateTime - user: User -} - -type Incident { - clusterInformation: ClusterInformation - creator: User! - description: String - files(after: String, before: String, first: Int, last: Int): FileConnection - follower: Follower - followers(after: String, before: String, first: Int, last: Int): FollowerConnection - history(after: String, before: String, first: Int, last: Int): IncidentHistoryConnection - id: ID! - insertedAt: DateTime - messages(after: String, before: String, first: Int, last: Int): IncidentMessageConnection - nextResponseAt: DateTime - notificationCount: Int - owner: User - postmortem: Postmortem - repository: Repository! - severity: Int! - status: IncidentStatus! - subscription: SlimSubscription - tags: [Tag] - title: String! - updatedAt: DateTime -} - -type IncidentChange { - key: String! - next: String - prev: String -} - -type IncidentConnection { - edges: [IncidentEdge] - pageInfo: PageInfo! -} - -type IncidentDelta { - delta: Delta - payload: Incident -} - -type IncidentEdge { - cursor: String - node: Incident -} - -type IncidentHistory { - action: IncidentAction! - actor: User! - changes: [IncidentChange] - id: ID! - incident: Incident! - insertedAt: DateTime - updatedAt: DateTime -} - -type IncidentHistoryConnection { - edges: [IncidentHistoryEdge] - pageInfo: PageInfo! -} - -type IncidentHistoryEdge { - cursor: String - node: IncidentHistory -} - -type IncidentMessage { - creator: User! - entities: [MessageEntity] - file: File - id: ID! - incident: Incident! - insertedAt: DateTime - reactions: [Reaction] - text: String! - updatedAt: DateTime -} - -type IncidentMessageConnection { - edges: [IncidentMessageEdge] - pageInfo: PageInfo! -} - -type IncidentMessageDelta { - delta: Delta - payload: IncidentMessage -} - -type IncidentMessageEdge { - cursor: String - node: IncidentMessage -} - -"An installation of an application." -type Installation { - acmeKeyId: String - acmeSecret: String - "Whether the application should auto upgrade." - autoUpgrade: Boolean - "A YAML object of context." - context: Map - "The installation's ID." - id: ID! - insertedAt: DateTime - license: String - "The license key for the application." - licenseKey: String - "The OIDC provider for the application." - oidcProvider: OidcProvider - "The last ping time of an installed application." - pingedAt: DateTime - "The application that was installed." - repository: Repository - "The subscription for the application." - subscription: RepositorySubscription - "The tag to track for auto upgrades." - trackTag: String! - updatedAt: DateTime - "The user that installed the application." - user: User -} - -type InstallationConnection { - edges: [InstallationEdge] - pageInfo: PageInfo! -} - -type InstallationEdge { - cursor: String - node: Installation -} - -type Integration { - description: String - icon: String - id: ID! - insertedAt: DateTime - name: String! - publisher: Publisher - repository: Repository - sourceUrl: String - spec: Map - tags: [Tag] - type: String - updatedAt: DateTime -} - -type IntegrationConnection { - edges: [IntegrationEdge] - pageInfo: PageInfo! -} - -type IntegrationEdge { - cursor: String - node: Integration -} - -type IntegrationWebhook { - account: Account - actions: [String] - id: ID! - insertedAt: DateTime - logs(after: String, before: String, first: Int, last: Int): WebhookLogConnection - name: String! - secret: String! - updatedAt: DateTime - url: String! -} - -type IntegrationWebhookConnection { - edges: [IntegrationWebhookEdge] - pageInfo: PageInfo! -} - -type IntegrationWebhookEdge { - cursor: String - node: IntegrationWebhook -} - -type Invite { - account: Account - email: String - existing: Boolean! - expiresAt: DateTime - id: ID! - insertedAt: DateTime - secureId: String - updatedAt: DateTime - user: User -} - -type InviteConnection { - edges: [InviteEdge] - pageInfo: PageInfo! -} - -type InviteEdge { - cursor: String - node: Invite -} - -type Invoice { - amountDue: Int! - amountPaid: Int! - createdAt: DateTime - currency: String! - hostedInvoiceUrl: String - lines: [InvoiceItem] - number: String! - status: String -} - -type InvoiceConnection { - edges: [InvoiceEdge] - pageInfo: PageInfo! -} - -type InvoiceEdge { - cursor: String - node: Invoice -} - -type InvoiceItem { - amount: Int! - currency: String! - description: String -} - -type KeyBackup { - digest: String! - id: ID! - insertedAt: DateTime - name: String! - repositories: [String!] - updatedAt: DateTime - user: User! - value: String! -} - -type KeyBackupConnection { - edges: [KeyBackupEdge] - pageInfo: PageInfo! -} - -type KeyBackupEdge { - cursor: String - node: KeyBackup -} - -type License { - name: String - url: String -} - -type Limit { - dimension: String! - quantity: Int! -} - -type LineItem { - cost: Int! - dimension: String! - name: String! - period: String - type: PlanType -} - -type LoginMethodResponse { - authorizeUrl: String - loginMethod: LoginMethod! - token: String -} - -type LoginRequest { - requestedScope: [String] - subject: String -} - -type MessageEntity { - endIndex: Int - id: ID! - insertedAt: DateTime - startIndex: Int - text: String - type: MessageEntityType! - updatedAt: DateTime - user: User -} - -type Metric { - name: String! - tags: [MetricTag] - values: [MetricValue] -} - -type MetricTag { - name: String! - value: String! -} - -type MetricValue { - time: DateTime - value: Int -} - -type NetworkConfiguration { - pluralDns: Boolean - subdomain: String -} - -type Notification { - actor: User! - id: ID! - incident: Incident - insertedAt: DateTime - message: IncidentMessage - msg: String - repository: Repository - type: NotificationType! - updatedAt: DateTime - user: User! -} - -type NotificationConnection { - edges: [NotificationEdge] - pageInfo: PageInfo! -} - -type NotificationEdge { - cursor: String - node: Notification -} - -type NotificationPreferences { - incidentUpdate: Boolean - mention: Boolean - message: Boolean -} - -type OauthInfo { - authorizeUrl: String! - provider: OauthProvider! -} - -type OauthIntegration { - account: Account - id: ID! - insertedAt: DateTime - service: OauthService! - updatedAt: DateTime -} - -type OauthResponse { - redirectTo: String! -} - -type OauthSettings { - authMethod: OidcAuthMethod! - uriFormat: String! -} - -type OidcLogin { - city: String - country: String - id: ID! - insertedAt: DateTime - ip: String - latitude: String - longitude: String - owner: User - repository: Repository - updatedAt: DateTime - user: User -} - -type OidcLoginConnection { - edges: [OidcLoginEdge] - pageInfo: PageInfo! -} - -type OidcLoginEdge { - cursor: String - node: OidcLogin -} - -type OidcProvider { - authMethod: OidcAuthMethod! - bindings: [OidcProviderBinding] - clientId: String! - clientSecret: String! - configuration: OuathConfiguration - consent: ConsentRequest - id: ID! - insertedAt: DateTime - redirectUris: [String] - updatedAt: DateTime -} - -type OidcProviderBinding { - group: Group - id: ID! - insertedAt: DateTime - updatedAt: DateTime - user: User -} - -type OidcSettings { - authMethod: OidcAuthMethod! - domainKey: String - subdomain: Boolean - uriFormat: String - uriFormats: [String] -} - -type OidcStepResponse { - consent: ConsentRequest - login: LoginRequest - repository: Repository -} - -type OnboardingChecklist { - dismissed: Boolean - status: OnboardingChecklistState -} - -type OuathConfiguration { - authorizationEndpoint: String - issuer: String - jwksUri: String - tokenEndpoint: String - userinfoEndpoint: String -} - -type PackageScan { - errors: [ScanError] - grade: ImageGrade - id: ID! - insertedAt: DateTime - updatedAt: DateTime - violations: [ScanViolation] -} - -type PageInfo { - "When paginating forwards, the cursor to continue." - endCursor: String - "When paginating forwards, are there more items?" - hasNextPage: Boolean! - "When paginating backwards, are there more items?" - hasPreviousPage: Boolean! - "When paginating backwards, the cursor to continue." - startCursor: String -} - -type PersistedToken { - audits(after: String, before: String, first: Int, last: Int): PersistedTokenAuditConnection - id: ID - insertedAt: DateTime - metrics: [GeoMetric] - token: String - updatedAt: DateTime -} - -type PersistedTokenAudit { - city: String - count: Int - country: String - id: ID - insertedAt: DateTime - ip: String - latitude: String - longitude: String - timestamp: DateTime - updatedAt: DateTime -} - -type PersistedTokenAuditConnection { - edges: [PersistedTokenAuditEdge] - pageInfo: PageInfo! -} - -type PersistedTokenAuditEdge { - cursor: String - node: PersistedTokenAudit -} - -type PersistedTokenConnection { - edges: [PersistedTokenEdge] - pageInfo: PageInfo! -} - -type PersistedTokenEdge { - cursor: String - node: PersistedToken -} - -type Plan { - cost: Int! - default: Boolean - id: ID! - insertedAt: DateTime - lineItems: PlanLineItems - metadata: PlanMetadata - name: String! - period: String - serviceLevels: [ServiceLevel] - updatedAt: DateTime - visible: Boolean! -} - -type PlanFeature { - description: String! - name: String! -} - -type PlanFeatures { - audit: Boolean - userManagement: Boolean - vpn: Boolean -} - -type PlanLineItems { - included: [Limit] - items: [LineItem] -} - -type PlanMetadata { - features: [PlanFeature] - freeform: Map -} - -type PlatformMetrics { - clusters: Int - publishers: Int - repositories: Int - rollouts: Int -} - -type PlatformPlan { - cost: Int! - enterprise: Boolean - features: PlanFeatures - id: ID! - insertedAt: DateTime - lineItems: [PlatformPlanItem] - name: String! - period: PaymentPeriod! - updatedAt: DateTime - visible: Boolean! -} - -type PlatformPlanItem { - cost: Int! - dimension: LineItemDimension! - externalId: String - name: String! - period: PaymentPeriod! -} - -type PlatformSubscription { - externalId: String - id: ID! - lineItems: [PlatformSubscriptionLineItems] - plan: PlatformPlan -} - -type PlatformSubscriptionLineItems { - dimension: LineItemDimension! - externalId: String - quantity: Int! -} - -type PluralConfiguration { - gitCommit: String - registry: String - stripeConnectId: String - stripePublishableKey: String -} - -type PolicyBinding { - group: Group - id: ID! - insertedAt: DateTime - updatedAt: DateTime - user: User -} - -type Postmortem { - actionItems: [ActionItem] - content: String! - creator: User! - id: ID! - insertedAt: DateTime - updatedAt: DateTime -} - -type PublicKey { - content: String! - digest: String! - id: ID! - insertedAt: DateTime - name: String! - updatedAt: DateTime - user: User! -} - -type PublicKeyConnection { - edges: [PublicKeyEdge] - pageInfo: PageInfo! -} - -type PublicKeyEdge { - cursor: String - node: PublicKey -} - -type Publisher { - address: Address - avatar: String - backgroundColor: String - billingAccountId: String - community: Community - description: String - id: ID - insertedAt: DateTime - name: String! - owner: User - phone: String - repositories: [Repository] - updatedAt: DateTime -} - -type PublisherConnection { - edges: [PublisherEdge] - pageInfo: PageInfo! -} - -type PublisherEdge { - cursor: String - node: Publisher -} - -type Reaction { - creator: User! - insertedAt: DateTime - message: IncidentMessage! - name: String! - updatedAt: DateTime -} - -type Recipe { - description: String - id: ID! - insertedAt: DateTime - name: String! - oidcEnabled: Boolean - oidcSettings: OidcSettings - primary: Boolean - private: Boolean - provider: Provider - recipeDependencies: [Recipe] - recipeSections: [RecipeSection] - repository: Repository - restricted: Boolean - tests: [RecipeTest] - updatedAt: DateTime -} - -type RecipeCondition { - field: String! - operation: Operation! - value: String -} - -type RecipeConfiguration { - args: [String] - condition: RecipeCondition - default: String - documentation: String - functionName: String - longform: String - name: String - optional: Boolean - placeholder: String - type: Datatype - validation: RecipeValidation -} - -type RecipeConnection { - edges: [RecipeEdge] - pageInfo: PageInfo! -} - -type RecipeEdge { - cursor: String - node: Recipe -} - -type RecipeItem { - chart: Chart - configuration: [RecipeConfiguration] - id: ID - insertedAt: DateTime - recipeSection: RecipeSection - terraform: Terraform - updatedAt: DateTime -} - -type RecipeSection { - configuration: [RecipeConfiguration] - id: ID - index: Int - insertedAt: DateTime - recipe: Recipe - recipeItems: [RecipeItem] - repository: Repository - updatedAt: DateTime -} - -type RecipeTest { - args: [TestArgument] - message: String - name: String! - type: TestType! -} - -type RecipeValidation { - message: String! - regex: String - type: ValidationType! -} - -"Container for all resources to create an application." -type Repository { - "The artifacts of the application." - artifacts: [Artifact] - "The category of the application." - category: Category - "The community links of the application." - community: Community - darkIcon: String - "The default tag to deploy." - defaultTag: String - "The description of the application." - description: String - "The documentation of the application." - docs: [FileContent] - "The documentation of the application." - documentation: String - "If the application can be edited by the current user." - editable: Boolean - "The git URL of the application." - gitUrl: String - "The homepage of the application." - homepage: String - icon: String - "The application's ID." - id: ID! - insertedAt: DateTime - "The installation of the application by a user." - installation: Installation - "The license of the application." - license: License - "The main branch of the application." - mainBranch: String - "The name of the application." - name: String! - "Notes about the application rendered after deploying and displayed to the user." - notes: String - "The OAuth settings for the application." - oauthSettings: OauthSettings - "The available plans for the application." - plans: [Plan] - "Whether the application is private." - private: Boolean - "The application's public key." - publicKey: String - "The application publisher." - publisher: Publisher - "The README of the application." - readme: String - "The recipes used to install the application." - recipes: [Recipe] - "A map of secrets of the application." - secrets: Map - "The tags of the application." - tags: [Tag] - "Whether the application is trending." - trending: Boolean - updatedAt: DateTime - "Whether the application is verified." - verified: Boolean -} - -type RepositoryConnection { - edges: [RepositoryEdge] - pageInfo: PageInfo! -} - -type RepositoryEdge { - cursor: String - node: Repository -} - -type RepositorySubscription { - customerId: String - externalId: String - id: ID! - installation: Installation - invoices(after: String, before: String, first: Int, last: Int): InvoiceConnection - lineItems: SubscriptionLineItems - plan: Plan -} - -type RepositorySubscriptionConnection { - edges: [RepositorySubscriptionEdge] - pageInfo: PageInfo! -} - -type RepositorySubscriptionEdge { - cursor: String - node: RepositorySubscription -} - -type ResetToken { - email: String! - externalId: ID! - id: ID! - insertedAt: DateTime - type: ResetTokenType! - updatedAt: DateTime - user: User! -} - -type Role { - account: Account - description: String - id: ID! - insertedAt: DateTime - name: String! - permissions: [Permission] - repositories: [String] - roleBindings: [RoleBinding] - updatedAt: DateTime -} - -type RoleBinding { - group: Group - id: ID! - insertedAt: DateTime - updatedAt: DateTime - user: User -} - -type RoleConnection { - edges: [RoleEdge] - pageInfo: PageInfo! -} - -type RoleEdge { - cursor: String - node: Role -} - -type Roles { - admin: Boolean -} - -type Rollout { - count: Int - cursor: ID - event: String - heartbeat: DateTime - id: ID! - insertedAt: DateTime - repository: Repository - status: RolloutStatus! - updatedAt: DateTime -} - -type RolloutConnection { - edges: [RolloutEdge] - pageInfo: PageInfo! -} - -type RolloutDelta { - delta: Delta - payload: Rollout -} - -type RolloutEdge { - cursor: String - node: Rollout -} - -type RootMutationType { - acceptIncident(id: ID!): Incident - acceptLogin(challenge: String!): OauthResponse - acquireLock(repository: String!): ApplyLock - cancelPlatformSubscription: PlatformSubscription - completeIncident(id: ID!, postmortem: PostmortemAttributes!): Incident - createArtifact(attributes: ArtifactAttributes!, repositoryId: ID, repositoryName: String): Artifact - createCard(address: AddressAttributes, source: String!): Account - "Create a new cluster." - createCluster( - "The input attributes for the cluster that will be created." - attributes: ClusterAttributes! - ): Cluster - "adds a dependency for this cluster to gate future upgrades" - createClusterDependency(destId: ID!, sourceId: ID!): ClusterDependency - createCrd(attributes: CrdAttributes!, chartId: ID, chartName: ChartName): Crd - createDemoProject: DemoProject - createDnsRecord(attributes: DnsRecordAttributes!, cluster: String!, provider: Provider!): DnsRecord - createDomain(attributes: DnsDomainAttributes!): DnsDomain - createGroup(attributes: GroupAttributes!): Group - createGroupMember(groupId: ID!, userId: ID!): GroupMember - createIncident(attributes: IncidentAttributes!, repository: String, repositoryId: ID): Incident - createInstallation(repositoryId: ID!): Installation - createIntegration(attributes: IntegrationAttributes!, repositoryName: String!): Integration - createIntegrationWebhook(attributes: IntegrationWebhookAttributes!): IntegrationWebhook - createInvite(attributes: InviteAttributes!): Invite - createKeyBackup(attributes: KeyBackupAttributes!): KeyBackup - createMessage(attributes: IncidentMessageAttributes!, incidentId: ID!): IncidentMessage - createOauthIntegration(attributes: OauthAttributes!): OauthIntegration - createOidcProvider( - attributes: OidcAttributes!, - "The installation ID" - installationId: ID! - ): OidcProvider - createPlan(attributes: PlanAttributes!, repositoryId: ID!): Plan - createPlatformSubscription(planId: ID!): PlatformSubscription - createPublicKey(attributes: PublicKeyAttributes!): PublicKey - createPublisher(attributes: PublisherAttributes!): Publisher - createQueue(attributes: UpgradeQueueAttributes!): UpgradeQueue - createReaction(messageId: ID!, name: String!): IncidentMessage - createRecipe(attributes: RecipeAttributes!, repositoryId: String, repositoryName: String): Recipe - createRepository(attributes: RepositoryAttributes!, id: ID): Repository - createResetToken(attributes: ResetTokenAttributes!): Boolean - createRole(attributes: RoleAttributes!): Role - createServiceAccount(attributes: ServiceAccountAttributes!): User - createShell(attributes: CloudShellAttributes!): CloudShell - createStack(attributes: StackAttributes!): Stack - createSubscription(attributes: SubscriptionAttributes, installationId: ID!, planId: ID!): RepositorySubscription - createTerraform(attributes: TerraformAttributes!, repositoryId: ID!): Terraform - createTest(attributes: TestAttributes!, name: String, repositoryId: ID): Test - createToken: PersistedToken - createUserEvent(attributes: UserEventAttributes!): Boolean - createWebhook(attributes: WebhookAttributes!): Webhook - createZoom(attributes: MeetingAttributes!): ZoomMeeting - deleteCard(id: ID!): Account - deleteChartInstallation(id: ID!): ChartInstallation - "Delete a cluster." - deleteCluster( - "The name of the cluster." - name: String!, - "The cluster's cloud provider." - provider: Provider! - ): Cluster - deleteDemoProject: DemoProject - deleteDnsRecord(name: String!, type: DnsRecordType!): DnsRecord - deleteDomain(id: ID!): DnsDomain - deleteEabKey(cluster: String, id: ID, provider: Provider): EabCredential - deleteGroup(groupId: ID!): Group - deleteGroupMember(groupId: ID!, userId: ID!): GroupMember - deleteIncident(id: ID!): Incident - deleteInstallation(id: ID!): Installation - deleteIntegrationWebhook(id: ID!): IntegrationWebhook - deleteInvite(id: ID, secureId: String): Invite - deleteKeyBackup(name: String!): KeyBackup - deleteMessage(id: ID!): IncidentMessage - deletePlatformSubscription: Account - deletePublicKey(id: ID!): PublicKey - deleteReaction(messageId: ID!, name: String!): IncidentMessage - deleteRecipe(id: ID!): Recipe - deleteRepository(repositoryId: ID!): Repository - deleteRole(id: ID!): Role - deleteShell: CloudShell - deleteStack(name: String!): Stack - deleteTerraform(id: ID!): Terraform - deleteToken(id: ID!): PersistedToken - deleteUser(id: ID!): User - destroyCluster(domain: String!, name: String!, provider: Provider!): Boolean - deviceLogin: DeviceLogin - externalToken: String - followIncident(attributes: FollowerAttributes!, id: ID!): Follower - impersonateServiceAccount(email: String, id: ID): User - installBundle(context: ContextAttributes!, name: String!, oidc: Boolean!, repo: String!): [Installation] - installChart(attributes: ChartInstallationAttributes!, installationId: ID!): ChartInstallation - installRecipe(context: Map!, recipeId: ID!): [Installation] - installStack(name: String!, provider: Provider!): [Recipe] - installStackShell(context: ContextAttributes!, name: String!, oidc: Boolean!): [Recipe] - installTerraform(attributes: TerraformInstallationAttributes!, installationId: ID!): TerraformInstallation - linkPublisher(token: String!): Publisher - login(deviceToken: String, email: String!, password: String!): User - loginToken(deviceToken: String, token: String!): User - oauthCallback(code: String!, deviceToken: String, host: String, provider: OauthProvider!): User - oauthConsent(challenge: String!, scopes: [String]): OauthResponse - passwordlessLogin(token: String!): User - pingWebhook(id: ID!, message: String, repo: String!): WebhookResponse - "moves up the upgrade waterline for a user" - promote: User - provisionDomain(name: String!): DnsDomain - publishLogs(id: ID!, logs: String!): TestStep - quickStack(provider: Provider!, repositoryIds: [ID]): Stack - readNotifications(incidentId: ID): Int - realizeInvite(id: String!): User - realizeResetToken(attributes: ResetTokenRealization!, id: ID!): Boolean - rebootShell: CloudShell - releaseLock(attributes: LockAttributes!, repository: String!): ApplyLock - resetInstallations: Int - restartShell: Boolean - setupShell: CloudShell - signup(account: AccountAttributes, attributes: UserAttributes!, deviceToken: String, inviteId: String): User - ssoCallback(code: String!, deviceToken: String): User - stopShell: Boolean - transferDemoProject(organizationId: String!): DemoProject - unfollowIncident(id: ID!): Follower - uninstallTerraform(id: ID!): TerraformInstallation - unlockRepository(name: String!): Int - updateAccount(attributes: AccountAttributes!): Account - updateChart(attributes: ChartAttributes!, id: ID!): Chart - updateChartInstallation(attributes: ChartInstallationAttributes!, chartInstallationId: ID!): ChartInstallation - updateDockerRepository(attributes: DockerRepositoryAttributes!, id: ID!): DockerRepository - updateDomain(attributes: DnsDomainAttributes!, id: ID!): DnsDomain - updateGroup(attributes: GroupAttributes!, groupId: ID!): Group - updateIncident(attributes: IncidentAttributes!, id: ID!): Incident - updateInstallation(attributes: InstallationAttributes!, id: ID!): Installation - updateIntegrationWebhook(attributes: IntegrationWebhookAttributes!, id: ID!): IntegrationWebhook - updateLineItem(attributes: LimitAttributes!, subscriptionId: ID!): RepositorySubscription - updateMessage(attributes: IncidentMessageAttributes!, id: ID!): IncidentMessage - updateOidcProvider(attributes: OidcAttributes!, installationId: ID!): OidcProvider - updatePlan(planId: ID!, subscriptionId: ID!): RepositorySubscription - updatePlanAttributes(attributes: UpdatablePlanAttributes!, id: ID!): Plan - updatePlatformPlan(planId: ID!): PlatformSubscription - updatePublisher(attributes: PublisherAttributes!): Publisher - updateRepository(attributes: RepositoryAttributes!, repositoryId: ID, repositoryName: String): Repository - updateRole(attributes: RoleAttributes!, id: ID!): Role - updateServiceAccount(attributes: ServiceAccountAttributes!, id: ID!): User - updateShell(attributes: CloudShellAttributes!): CloudShell - updateShellConfiguration(context: Map!): Boolean - updateStep(attributes: TestStepAttributes!, id: ID!): TestStep - updateTerraform(attributes: TerraformAttributes!, id: ID!): Terraform - updateTest(attributes: TestAttributes!, id: ID!): Test - updateUser(attributes: UserAttributes!, id: ID): User - updateVersion(attributes: VersionAttributes!, id: ID, spec: VersionSpec): Version - uploadTerraform(attributes: TerraformAttributes!, name: String!, repositoryName: String!): Terraform - upsertOidcProvider(attributes: OidcAttributes!, installationId: ID!): OidcProvider - upsertRepository(attributes: RepositoryAttributes!, name: String!, publisher: String!): Repository -} - -type RootQueryType { - account: Account - auditMetrics: [GeoMetric] - audits(after: String, before: String, first: Int, last: Int): AuditConnection - categories: [CategoryInfo] - category(name: Category!): CategoryInfo - chart(id: ID!): Chart - chartInstallations(after: String, before: String, first: Int, last: Int, repositoryId: ID!): ChartInstallationConnection - charts(after: String, before: String, first: Int, last: Int, repositoryId: ID!): ChartConnection - closure(id: ID!, type: DependencyType!): [ClosureItem] - "Get a cluster by its ID." - cluster( - "The ID of the cluster." - id: ID! - ): Cluster - "Get a list of clusters owned by the current account." - clusters(after: String, before: String, first: Int, last: Int): ClusterConnection - configuration: PluralConfiguration - deferredUpdates(after: String, before: String, chartInstallationId: ID, first: Int, last: Int, terraformInstallationId: ID): DeferredUpdateConnection - demoProject(id: ID): DemoProject - dnsDomain(id: ID!): DnsDomain - dnsDomains(after: String, before: String, first: Int, last: Int, q: String): DnsDomainConnection - dnsRecords(after: String, before: String, cluster: String, domainId: ID, first: Int, last: Int, provider: Provider): DnsRecordConnection - dockerImage(id: ID!): DockerImage - dockerImages(after: String, before: String, dockerRepositoryId: ID!, first: Int, last: Int, q: String): DockerImageConnection - dockerRepositories(after: String, before: String, first: Int, last: Int, repositoryId: ID!): DockerRepositoryConnection - eabCredential(cluster: String!, provider: Provider!): EabCredential - eabCredentials: [EabCredential] - groupMembers(after: String, before: String, first: Int, groupId: ID!, last: Int): GroupMemberConnection - groups(after: String, before: String, first: Int, last: Int, q: String): GroupConnection - helpQuestion(prompt: String!): String - incident(id: ID!): Incident - incidents(after: String, before: String, filters: [IncidentFilter], first: Int, last: Int, order: Order, q: String, repositoryId: ID, sort: IncidentSort, supports: Boolean): IncidentConnection - installation(id: ID, name: String): Installation - installations(after: String, before: String, first: Int, last: Int): InstallationConnection - integrationWebhook(id: ID!): IntegrationWebhook - integrationWebhooks(after: String, before: String, first: Int, last: Int): IntegrationWebhookConnection - integrations(after: String, before: String, first: Int, last: Int, repositoryId: ID, repositoryName: String, tag: String, type: String): IntegrationConnection - invite(id: String!): Invite - invites(after: String, before: String, first: Int, last: Int): InviteConnection - invoices(after: String, before: String, first: Int, last: Int): InvoiceConnection - keyBackup(name: String!): KeyBackup - keyBackups(after: String, before: String, first: Int, last: Int): KeyBackupConnection - loginMethod(email: String!, host: String): LoginMethodResponse - loginMetrics: [GeoMetric] - me: User - notifications(after: String, before: String, cli: Boolean, first: Int, incidentId: ID, last: Int): NotificationConnection - oauthConsent(challenge: String!): Repository - oauthIntegrations: [OauthIntegration] - oauthLogin(challenge: String!): Repository - oauthUrls(host: String): [OauthInfo] - oidcConsent(challenge: String!): OidcStepResponse - oidcLogin(challenge: String!): OidcStepResponse - oidcLogins(after: String, before: String, first: Int, last: Int): OidcLoginConnection - platformMetrics: PlatformMetrics - platformPlans: [PlatformPlan] - platformSubscription: PlatformSubscription - publicKeys(after: String, before: String, emails: [String], first: Int, last: Int): PublicKeyConnection - publisher(id: ID): Publisher - publishers(accountId: ID, after: String, before: String, first: Int, last: Int, publishable: Boolean): PublisherConnection - recipe(id: ID, name: String, repo: String): Recipe - recipes(after: String, before: String, first: Int, last: Int, provider: Provider, repositoryId: ID, repositoryName: String): RecipeConnection - repositories(after: String, before: String, categories: [Category], category: Category, first: Int, installed: Boolean, last: Int, provider: Provider, publisherId: ID, publishers: [ID], q: String, supports: Boolean, tag: String, tags: [String]): RepositoryConnection - "Get an application by its ID or name." - repository( - "The ID of the application." - id: ID, - "The name of the application." - name: String - ): Repository - repositorySubscription(id: ID!): RepositorySubscription - resetToken(id: ID!): ResetToken - role(id: ID!): Role - roles(after: String, before: String, first: Int, last: Int, q: String, userId: ID): RoleConnection - rollouts(after: String, before: String, first: Int, last: Int, repositoryId: ID!): RolloutConnection - scaffold(application: String!, category: Category!, ingress: Boolean, postgres: Boolean, publisher: String!): [ScaffoldFile] - scmAuthorization: [AuthorizationUrl] - scmToken(code: String!, provider: ScmProvider!): String - searchRepositories(after: String, before: String, first: Int, last: Int, query: String!): RepositoryConnection - searchUsers(after: String, before: String, first: Int, incidentId: ID!, last: Int, q: String!): UserConnection - shell: CloudShell - shellConfiguration: ShellConfiguration - stack(name: String!, provider: Provider!): Stack - stacks(after: String, before: String, featured: Boolean, first: Int, last: Int): StackConnection - subscriptions(after: String, before: String, first: Int, last: Int): RepositorySubscriptionConnection - tags(after: String, before: String, first: Int, id: ID, last: Int, q: String, type: TagGroup!): GroupedTagConnection - terraform(after: String, before: String, first: Int, last: Int, repositoryId: ID!): TerraformConnection - terraformInstallations(after: String, before: String, first: Int, last: Int, repositoryId: ID!): TerraformInstallationConnection - terraformModule(id: ID!): Terraform - terraformProvider(name: Provider!, vsn: String): TerraformProvider - terraformProviders: [Provider] - test(id: ID!): Test - testLogs(id: ID!, step: ID!): String - tests(after: String, before: String, first: Int, last: Int, repositoryId: ID, versionId: ID): TestConnection - token(id: ID!): PersistedToken - tokens(after: String, before: String, first: Int, last: Int): PersistedTokenConnection - upgradeQueue(id: ID): UpgradeQueue - upgradeQueues: [UpgradeQueue] - users(after: String, all: Boolean, before: String, first: Int, last: Int, q: String, serviceAccount: Boolean): UserConnection - versions(after: String, before: String, chartId: ID, first: Int, last: Int, terraformId: ID): VersionConnection - webhooks(after: String, before: String, first: Int, last: Int): WebhookConnection -} - -type RootSubscriptionType { - incidentDelta(incidentId: ID, repositoryId: ID): IncidentDelta - incidentMessageDelta(incidentId: ID): IncidentMessageDelta - notification: Notification - rolloutDelta(repositoryId: ID!): RolloutDelta - testDelta(repositoryId: ID!): TestDelta - testLogs(testId: ID!): StepLogs - upgrade(id: ID): Upgrade - upgradeQueueDelta: UpgradeQueueDelta -} - -type ScaffoldFile { - content: String - path: String -} - -type ScanError { - message: String -} - -type ScanViolation { - category: String - description: String - file: String - insertedAt: DateTime - line: Int - resourceName: String - resourceType: String - ruleId: String - ruleName: String - severity: VulnGrade - updatedAt: DateTime -} - -type ServiceLevel { - maxSeverity: Int - minSeverity: Int - responseTime: Int -} - -type ShellConfiguration { - buckets: [String] - contextConfiguration: Map - domains: [String] - git: GitConfiguration - workspace: ShellWorkspace -} - -type ShellStatus { - containersReady: Boolean - initialized: Boolean - podScheduled: Boolean - ready: Boolean -} - -type ShellWorkspace { - bucketPrefix: String - cluster: String - network: NetworkConfiguration - region: String -} - -type SlimSubscription { - id: ID! - lineItems: SubscriptionLineItems - plan: Plan -} - -type Stack { - bundles: [Recipe] - collections: [StackCollection] - community: Community - creator: User - description: String - displayName: String - featured: Boolean - id: ID! - insertedAt: DateTime - name: String! - sections: [RecipeSection] - updatedAt: DateTime -} - -type StackCollection { - bundles: [StackRecipe] - id: ID! - insertedAt: DateTime - provider: Provider! - updatedAt: DateTime -} - -type StackConnection { - edges: [StackEdge] - pageInfo: PageInfo! -} - -type StackEdge { - cursor: String - node: Stack -} - -type StackRecipe { - id: ID! - insertedAt: DateTime - recipe: Recipe! - updatedAt: DateTime -} - -type StepLogs { - logs: [String] - step: TestStep -} - -type SubscriptionLineItems { - items: [Limit] -} - -type Tag { - id: ID! - tag: String! -} - -type Terraform { - dependencies: Dependencies - description: String - editable: Boolean - id: ID - insertedAt: DateTime - installation: TerraformInstallation - latestVersion: String - name: String - package: String - readme: String - repository: Repository - updatedAt: DateTime - valuesTemplate: String -} - -type TerraformConnection { - edges: [TerraformEdge] - pageInfo: PageInfo! -} - -type TerraformEdge { - cursor: String - node: Terraform -} - -type TerraformInstallation { - id: ID - insertedAt: DateTime - installation: Installation - terraform: Terraform - updatedAt: DateTime - version: Version -} - -type TerraformInstallationConnection { - edges: [TerraformInstallationEdge] - pageInfo: PageInfo! -} - -type TerraformInstallationEdge { - cursor: String - node: TerraformInstallation -} - -type TerraformProvider { - content: String - name: Provider -} - -type Test { - creator: User - id: ID! - insertedAt: DateTime - name: String - promoteTag: String! - repository: Repository - sourceTag: String! - status: TestStatus! - steps: [TestStep] - tags: [String!] - updatedAt: DateTime -} - -type TestArgument { - key: String! - name: String! - repo: String! -} - -type TestConnection { - edges: [TestEdge] - pageInfo: PageInfo! -} - -type TestDelta { - delta: Delta - payload: Test -} - -type TestEdge { - cursor: String - node: Test -} - -type TestStep { - description: String! - hasLogs: Boolean - id: ID! - insertedAt: DateTime - name: String! - status: TestStatus! - updatedAt: DateTime -} - -type Upgrade { - id: ID! - insertedAt: DateTime - message: String - repository: Repository - type: UpgradeType - updatedAt: DateTime -} - -type UpgradeConnection { - edges: [UpgradeEdge] - pageInfo: PageInfo! -} - -type UpgradeEdge { - cursor: String - node: Upgrade -} - -"The pending upgrades for a repository" -type UpgradeInfo { - count: Int - installation: Installation -} - -type UpgradeQueue { - acked: ID - domain: String - git: String - id: ID! - insertedAt: DateTime - name: String - pingedAt: DateTime - provider: Provider - updatedAt: DateTime - upgrades(after: String, before: String, first: Int, last: Int): UpgradeConnection - user: User! -} - -type UpgradeQueueDelta { - delta: Delta - payload: UpgradeQueue -} - -type User { - account: Account! - address: Address - avatar: String - backgroundColor: String - boundRoles: [Role] - cards(after: String, before: String, first: Int, last: Int): CardConnection - defaultQueueId: ID - "If a user has reached the demo project usage limit." - demoed: Boolean - demoing: Boolean - email: String! - emailConfirmBy: DateTime - emailConfirmed: Boolean - hasInstallations: Boolean - id: ID! - impersonationPolicy: ImpersonationPolicy - insertedAt: DateTime - jwt: String - loginMethod: LoginMethod - name: String! - onboarding: OnboardingState - onboardingChecklist: OnboardingChecklist - phone: String - provider: Provider - publisher: Publisher - roles: Roles - serviceAccount: Boolean - updatedAt: DateTime -} - -type UserConnection { - edges: [UserEdge] - pageInfo: PageInfo! -} - -type UserEdge { - cursor: String - node: User -} - -"The version of a package." -type Version { - chart: Chart - crds: [Crd] - dependencies: Dependencies - helm: Map - id: ID! - imageDependencies: [ImageDependency] - insertedAt: DateTime - package: String - readme: String - scan: PackageScan - tags: [VersionTag] - "The template engine used to render the valuesTemplate." - templateType: TemplateType - terraform: Terraform - updatedAt: DateTime - valuesTemplate: String - version: String! -} - -type VersionConnection { - edges: [VersionEdge] - pageInfo: PageInfo! -} - -type VersionEdge { - cursor: String - node: Version -} - -type VersionTag { - chart: Chart - id: ID! - insertedAt: DateTime - tag: String! - updatedAt: DateTime - version: Version -} - -type Vulnerability { - cvss: Cvss - description: String - fixedVersion: String - id: ID! - insertedAt: DateTime - installedVersion: String - layer: ImageLayer - package: String - score: Float - severity: VulnGrade - source: String - title: String - updatedAt: DateTime - url: String - vulnerabilityId: String -} - -type Webhook { - id: ID - insertedAt: DateTime - secret: String - updatedAt: DateTime - url: String - user: User -} - -type WebhookConnection { - edges: [WebhookEdge] - pageInfo: PageInfo! -} - -type WebhookEdge { - cursor: String - node: Webhook -} - -type WebhookLog { - id: ID! - insertedAt: DateTime - payload: Map - response: String - state: WebhookLogState! - status: Int - updatedAt: DateTime - webhook: IntegrationWebhook -} - -type WebhookLogConnection { - edges: [WebhookLogEdge] - pageInfo: PageInfo! -} - -type WebhookLogEdge { - cursor: String - node: WebhookLog -} - -type WebhookResponse { - body: String - headers: Map - statusCode: Int! -} - -type Wirings { - helm: Map - terraform: Map -} - -type ZoomMeeting { - joinUrl: String! - password: String -} - -enum ActionItemType { - BLOG - ISSUE - PULL -} - -enum ArtifactPlatform { - ANDROID - FREEBSD - LINUX - MAC - OPENBSD - SOLARIS - WINDOWS -} - -enum ArtifactType { - CLI - DESKTOP - MOBILE -} - -"Application categories." -enum Category { - DATA - DATABASE - DEVOPS - MESSAGING - NETWORK - PRODUCTIVITY - SECURITY - STORAGE -} - -enum Datatype { - BOOL - BUCKET - DOMAIN - FILE - FUNCTION - INT - PASSWORD - STRING -} - -enum Delta { - CREATE - DELETE - UPDATE -} - -enum DemoProjectState { - CREATED - ENABLED - READY -} - -enum DependencyType { - HELM - TERRAFORM -} - -enum DnsRecordType { - A - AAAA - CNAME - TXT -} - -enum ImageGrade { - A - B - C - D - F -} - -enum IncidentAction { - ACCEPT - COMPLETE - CREATE - EDIT - SEVERITY - STATUS -} - -enum IncidentFilterType { - FOLLOWING - NOTIFICATIONS - STATUS - TAG -} - -enum IncidentSort { - INSERTED_AT - SEVERITY - STATUS - TITLE -} - -enum IncidentStatus { - COMPLETE - IN_PROGRESS - OPEN - RESOLVED -} - -enum LineItemDimension { - CLUSTER - USER -} - -enum LoginMethod { - GITHUB - GOOGLE - PASSWORD - PASSWORDLESS - SSO -} - -enum MediaType { - AUDIO - IMAGE - OTHER - PDF - VIDEO -} - -enum MessageEntityType { - EMOJI - MENTION -} - -enum NotificationType { - INCIDENT_UPDATE - LOCKED - MENTION - MESSAGE -} - -enum OauthProvider { - GITHUB - GITLAB - GOOGLE -} - -enum OauthService { - ZOOM -} - -"Supported OIDC authentication methods." -enum OidcAuthMethod { - BASIC - POST -} - -enum OnboardingChecklistState { - CONFIGURED - CONSOLE_INSTALLED - FINISHED - NEW -} - -enum OnboardingState { - ACTIVE - INSTALLED - NEW - ONBOARDED -} - -enum Operation { - EQ - GT - GTE - LT - LTE - NOT - PREFIX - SUFFIX -} - -enum Order { - ASC - DESC -} - -enum PaymentPeriod { - MONTHLY - YEARLY -} - -enum Permission { - BILLING - INSTALL - INTEGRATIONS - PUBLISH - SUPPORT - USERS -} - -enum PlanType { - LICENSED - METERED -} - -enum Provider { - AWS - AZURE - CUSTOM - EQUINIX - GCP - GENERIC - KIND - KUBERNETES -} - -enum RecipeItemType { - HELM - TERRAFORM -} - -enum ResetTokenType { - EMAIL - PASSWORD -} - -enum RolloutStatus { - FINISHED - QUEUED - RUNNING -} - -enum ScmProvider { - DEMO - GITHUB - GITLAB - MANUAL -} - -"Possible cluster sources." -enum Source { - DEFAULT - DEMO - SHELL -} - -enum SpecDatatype { - BOOL - FLOAT - INT - LIST - OBJECT - STRING -} - -enum TagGroup { - INTEGRATIONS - REPOSITORIES -} - -"Template engines that can be used at build time." -enum TemplateType { - GOTEMPLATE - JAVASCRIPT - LUA -} - -enum TestStatus { - FAILED - QUEUED - RUNNING - SUCCEEDED -} - -enum TestType { - GIT -} - -enum UpgradeType { - APPROVAL - BOUNCE - DEDICATED - DEPLOY -} - -enum UserEventStatus { - ERROR - OK -} - -enum ValidationType { - REGEX -} - -enum VulnGrade { - CRITICAL - HIGH - LOW - MEDIUM - NONE -} - -enum VulnRequirement { - NONE - REQUIRED -} - -enum VulnVector { - ADJACENT - LOCAL - NETWORK - PHYSICAL -} - -enum WebhookLogState { - DELIVERED - FAILED - SENDING -} - -""" - -The `DateTime` scalar type represents a date and time in the UTC -timezone. The DateTime appears in a JSON response as an ISO8601 formatted -string, including UTC timezone ("Z"). The parsed date and time string will -be converted to UTC if there is an offset. -""" -scalar DateTime - -scalar Map - -scalar UploadOrUrl - -scalar Yaml - -input AccountAttributes { - billingAddress: AddressAttributes - domainMappings: [DomainMappingInput] - icon: UploadOrUrl - name: String -} - -input ActionItemAttributes { - link: String! - type: ActionItemType! -} - -input AddressAttributes { - city: String! - country: String! - line1: String! - line2: String! - name: String - state: String! - zip: String! -} - -input ArtifactAttributes { - arch: String - blob: UploadOrUrl - name: String! - platform: String! - readme: String! - type: String! -} - -input AwsShellCredentialsAttributes { - accessKeyId: String! - secretAccessKey: String! -} - -input AzureShellCredentialsAttributes { - clientId: String! - clientSecret: String! - storageAccount: String! - subscriptionId: String! - tenantId: String! -} - -input BindingAttributes { - groupId: ID - id: ID - userId: ID -} - -input ChartAttributes { - tags: [VersionTagAttributes] -} - -input ChartInstallationAttributes { - chartId: ID - versionId: ID -} - -input ChartName { - chart: String - repo: String -} - -input CloudShellAttributes { - credentials: ShellCredentialsAttributes! - demoId: ID - provider: Provider - scm: ScmAttributes - workspace: WorkspaceAttributes! -} - -"Input for creating or updating a cluster." -input ClusterAttributes { - "The URL of the console running on the cluster." - consoleUrl: String - "The domain name used for applications deployed on the cluster." - domain: String - "The git repository URL for the cluster." - gitUrl: String - "The name of the cluster." - name: String! - "The cluster's cloud provider." - provider: Provider! - "The source of the cluster." - source: Source -} - -input ClusterInformationAttributes { - gitCommit: String - platform: String - version: String -} - -"Input for creating or updating the community links of an application." -input CommunityAttributes { - "The application's Discord server." - discord: String - "The application's git URL." - gitUrl: String - "The application's homepage." - homepage: String - "The application's Slack channel." - slack: String - "The application's Twitter account." - twitter: String - "The videos of the application." - videos: [String] -} - -input ContextAttributes { - buckets: [String] - configuration: Map! - domains: [String] -} - -input CrdAttributes { - blob: UploadOrUrl - name: String! -} - -input DnsAccessPolicyAttributes { - bindings: [BindingAttributes] - id: ID -} - -input DnsDomainAttributes { - accessPolicy: DnsAccessPolicyAttributes - name: String -} - -input DnsRecordAttributes { - name: String! - records: [String] - type: DnsRecordType! -} - -input DockerRepositoryAttributes { - public: Boolean! -} - -input DomainMappingInput { - domain: String - enableSso: Boolean - id: ID -} - -input EntityAttributes { - endIndex: Int - startIndex: Int - text: String - type: MessageEntityType! - userId: ID -} - -input FileAttributes { - blob: UploadOrUrl -} - -input FollowerAttributes { - preferences: NotificationPreferencesAttributes -} - -input GcpShellCredentialsAttributes { - applicationCredentials: String! -} - -input GroupAttributes { - description: String - global: Boolean - name: String! -} - -input ImpersonationPolicyAttributes { - bindings: [ImpersonationPolicyBindingAttributes] - id: ID -} - -input ImpersonationPolicyBindingAttributes { - groupId: ID - id: ID - userId: ID -} - -input IncidentAttributes { - clusterInformation: ClusterInformationAttributes - description: String - severity: Int - status: IncidentStatus - tags: [TagAttributes] - title: String -} - -input IncidentFilter { - statuses: [IncidentStatus] - type: IncidentFilterType! - value: String -} - -input IncidentMessageAttributes { - entities: [EntityAttributes] - file: FileAttributes - text: String! -} - -"Input for creating or updating the tag attributes of an application installation." -input InstallationAttributes { - "Whether the application should auto upgrade." - autoUpgrade: Boolean - "A YAML object of context." - context: Yaml - "The tag to track for auto upgrades." - trackTag: String -} - -input IntegrationAttributes { - description: String - icon: UploadOrUrl - name: String! - sourceUrl: String - spec: Yaml - tags: [TagAttributes] - type: String -} - -input IntegrationWebhookAttributes { - actions: [String] - name: String! - url: String! -} - -input InviteAttributes { - email: String -} - -input KeyBackupAttributes { - key: String! - name: String! - repositories: [String] -} - -input LimitAttributes { - dimension: String! - quantity: Int! -} - -input LineItemAttributes { - cost: Int! - dimension: String! - name: String! - period: String! - type: PlanType -} - -input LockAttributes { - lock: String! -} - -input MeetingAttributes { - incidentId: ID - topic: String! -} - -input NotificationPreferencesAttributes { - incidentUpdate: Boolean! - mention: Boolean! - message: Boolean! -} - -input OauthAttributes { - code: String - redirectUri: String - service: OauthService -} - -"Input for the application's OAuth settings." -input OauthSettingsAttributes { - "The authentication method for the OAuth provider." - authMethod: OidcAuthMethod! - "The URI format for the OAuth provider." - uriFormat: String! -} - -"Input for creating or updating the OIDC attributes of an application installation." -input OidcAttributes { - "The authentication method for the OIDC provider." - authMethod: OidcAuthMethod! - "The users or groups that can login through the OIDC provider." - bindings: [BindingAttributes] - "The redirect URIs for the OIDC provider." - redirectUris: [String] -} - -input OidcSettingsAttributes { - authMethod: OidcAuthMethod! - domainKey: String - subdomain: Boolean - uriFormat: String - uriFormats: [String] -} - -input OnboardingChecklistAttributes { - dismissed: Boolean - status: OnboardingChecklistState -} - -input PlanAttributes { - cost: Int! - default: Boolean - lineItems: PlanLineItemAttributes - metadata: PlanMetadataAttributes - name: String! - period: String! - serviceLevels: [ServiceLevelAttributes] -} - -input PlanFeatureAttributes { - description: String! - name: String! -} - -input PlanLineItemAttributes { - included: [LimitAttributes] - items: [LineItemAttributes] -} - -input PlanMetadataAttributes { - features: [PlanFeatureAttributes] - freeform: Yaml -} - -input PostmortemAttributes { - actionItems: [ActionItemAttributes] - content: String! -} - -input PublicKeyAttributes { - content: String! - name: String! -} - -input PublisherAttributes { - address: AddressAttributes - avatar: UploadOrUrl - community: CommunityAttributes - description: String - name: String - phone: String -} - -input RecipeAttributes { - dependencies: [RecipeReference] - description: String - name: String! - oidcSettings: OidcSettingsAttributes - primary: Boolean - private: Boolean - provider: Provider - restricted: Boolean - sections: [RecipeSectionAttributes] - tests: [RecipeTestAttributes] -} - -input RecipeConditionAttributes { - field: String! - operation: Operation! - value: String -} - -input RecipeConfigurationAttributes { - condition: RecipeConditionAttributes - default: String - documentation: String - functionName: String - longform: String - name: String! - optional: Boolean - placeholder: String - type: Datatype! - validation: RecipeValidationAttributes -} - -input RecipeItemAttributes { - configuration: [RecipeConfigurationAttributes] - name: String! - type: RecipeItemType! -} - -input RecipeReference { - name: String! - repo: String! -} - -input RecipeSectionAttributes { - configuration: [RecipeConfigurationAttributes] - items: [RecipeItemAttributes] - name: String! -} - -input RecipeTestAttributes { - args: [TestArgumentAttributes] - message: String - name: String! - type: TestType! -} - -input RecipeValidationAttributes { - message: String! - regex: String - type: ValidationType! -} - -"Input for creating or updating an application's attributes." -input RepositoryAttributes { - "The category of the application." - category: Category - "The application's community links." - community: CommunityAttributes - "The application's dark icon." - darkIcon: UploadOrUrl - "The default tag to use when deploying the application." - defaultTag: String - "A short description of the application." - description: String - "The application's documentation." - docs: UploadOrUrl - "A link to the application's documentation." - documentation: String - "The application's git URL." - gitUrl: String - "The application's homepage." - homepage: String - "The application's icon." - icon: UploadOrUrl - "The application's integration resource definition." - integrationResourceDefinition: ResourceDefinitionAttributes - "The name of the application." - name: String - "Notes about the application rendered after deploying and displayed to the user." - notes: String - "The application's OAuth settings." - oauthSettings: OauthSettingsAttributes - "Whether the application is private." - private: Boolean - "The application's README." - readme: String - "A YAML object of secrets." - secrets: Yaml - "The application's tags." - tags: [TagAttributes] - "Whether the application is trending." - trending: Boolean - "Whether the application is verified." - verified: Boolean -} - -input ResetTokenAttributes { - email: String - type: ResetTokenType! -} - -input ResetTokenRealization { - password: String -} - -input ResourceDefinitionAttributes { - name: String! - spec: [SpecificationAttributes] -} - -input RoleAttributes { - description: String - name: String - permissions: [Permission] - repositories: [String] - roleBindings: [BindingAttributes] -} - -input RolesAttributes { - admin: Boolean -} - -input ScmAttributes { - gitUrl: String - name: String - org: String - privateKey: String - provider: ScmProvider - publicKey: String - token: String -} - -input ServiceAccountAttributes { - email: String - impersonationPolicy: ImpersonationPolicyAttributes - name: String -} - -input ServiceLevelAttributes { - maxSeverity: Int - minSeverity: Int - responseTime: Int -} - -input ShellCredentialsAttributes { - aws: AwsShellCredentialsAttributes - azure: AzureShellCredentialsAttributes - gcp: GcpShellCredentialsAttributes -} - -input SpecificationAttributes { - inner: SpecDatatype - name: String! - required: Boolean - spec: [SpecificationAttributes] - type: SpecDatatype! -} - -input StackAttributes { - collections: [StackCollectionAttributes] - community: CommunityAttributes - description: String - displayName: String - featured: Boolean - name: String! -} - -input StackCollectionAttributes { - bundles: [RecipeReference] - provider: Provider! -} - -input SubscriptionAttributes { - lineItems: SubscriptionLineItemAttributes -} - -input SubscriptionLineItemAttributes { - items: [LimitAttributes] -} - -input TagAttributes { - tag: String! -} - -input TerraformAttributes { - dependencies: Yaml - description: String - name: String - package: UploadOrUrl - version: String -} - -input TerraformInstallationAttributes { - terraformId: ID - versionId: ID -} - -input TestArgumentAttributes { - key: String! - name: String! - repo: String! -} - -input TestAttributes { - name: String - promoteTag: String - status: TestStatus - steps: [TestStepAttributes] - tags: [String] -} - -input TestStepAttributes { - description: String - id: ID - logs: UploadOrUrl - name: String - status: TestStatus -} - -input UpdatablePlanAttributes { - default: Boolean - serviceLevels: [ServiceLevelAttributes] -} - -input UpgradeQueueAttributes { - domain: String - git: String - name: String! - provider: Provider -} - -input UserAttributes { - avatar: UploadOrUrl - confirm: String - email: String - loginMethod: LoginMethod - name: String - onboarding: OnboardingState - onboardingChecklist: OnboardingChecklistAttributes - password: String - roles: RolesAttributes -} - -input UserEventAttributes { - data: String - event: String! - status: UserEventStatus -} - -input VersionAttributes { - tags: [VersionTagAttributes] -} - -input VersionSpec { - chart: String - repository: String - terraform: String - version: String -} - -input VersionTagAttributes { - tag: String! - versionId: ID -} - -input WebhookAttributes { - url: String! -} - -input WorkspaceAttributes { - bucketPrefix: String! - cluster: String! - project: String - region: String! - subdomain: String! -} diff --git a/pkg/ui/web/src/Plural.tsx b/pkg/ui/web/src/Plural.tsx deleted file mode 100644 index c655a27a6..000000000 --- a/pkg/ui/web/src/Plural.tsx +++ /dev/null @@ -1,54 +0,0 @@ -import { theme as honorableTheme } from '@pluralsh/design-system' -import { Grommet } from 'grommet' -import { ThemeProvider as HonorableThemeProvider } from 'honorable' -import React, { useMemo } from 'react' -import { RouterProvider } from 'react-router-dom' -import { ThemeProvider } from 'styled-components' - -import Loader from './components/loader/Loader' -import { WailsContext, WailsContextProps } from './context/wails' -import { Provider } from './graphql/generated/graphql' -import { grommetTheme } from './grommet/theme' -import { useWailsQuery } from './hooks/useWails' -import { router } from './routes/router' -import { Binding } from './services/wails' -import { FontStyles } from './styled/fonts' -import { GlobalStyles } from './styled/global' -import { ScrollbarStyles } from './styled/scrollbar' -import { styledTheme } from './styled/theme' -import { PluralProject } from './types/client' - -function Plural(): React.ReactElement { - const { data: context } = useWailsQuery(Binding.Context) - const { data: project = {} as PluralProject } = useWailsQuery(Binding.Project) - const { data: provider } = useWailsQuery(Binding.Provider) - const { data: token } = useWailsQuery(Binding.Token) - - const isReady = useMemo(() => !!context && !!project && !!token, [context, project, token]) - const wailsContext = useMemo(() => ({ - context, - project: { ...project, provider }, - token, - } as WailsContextProps), [context, project, provider, token]) - - return ( - - - - - - - - {isReady && } - {!isReady && } - - - - - ) -} - -export default Plural diff --git a/pkg/ui/web/src/components/loader/Loader.tsx b/pkg/ui/web/src/components/loader/Loader.tsx deleted file mode 100644 index 73c909c42..000000000 --- a/pkg/ui/web/src/components/loader/Loader.tsx +++ /dev/null @@ -1,20 +0,0 @@ -import { LoopingLogo } from '@pluralsh/design-system' -import React from 'react' -import styled from 'styled-components' - -const Loader = styled(LoaderUnstyled)(() => ({ - height: '100%', - display: 'flex', - justifyContent: 'center', - alignItems: 'center', -})) - -function LoaderUnstyled({ ...props }): React.ReactElement { - return ( -

    - ) -} - -export default Loader diff --git a/pkg/ui/web/src/context/wails.ts b/pkg/ui/web/src/context/wails.ts deleted file mode 100644 index aa965284f..000000000 --- a/pkg/ui/web/src/context/wails.ts +++ /dev/null @@ -1,17 +0,0 @@ -import { createContext } from 'react' - -import { PluralContext, PluralProject } from '../types/client' - -interface WailsContextProps { - token: string; - project: PluralProject - context: PluralContext -} - -const WailsContext = createContext({ - project: {}, - context: {}, -} as WailsContextProps) - -export type { WailsContextProps, PluralContext } -export { WailsContext } diff --git a/pkg/ui/web/src/graphql/account.graphql b/pkg/ui/web/src/graphql/account.graphql deleted file mode 100644 index 837185b06..000000000 --- a/pkg/ui/web/src/graphql/account.graphql +++ /dev/null @@ -1,64 +0,0 @@ -fragment Audit on Audit { - id - action - ip - country - city - latitude - longitude - actor { ...User } - repository { ...Repo } - group { ...Group } - integrationWebhook { ...IntegrationWebhook } - role { ...Role } - version { ...Version } - image { id tag dockerRepository { name } } - insertedAt -} - -fragment PolicyBinding on PolicyBinding { - id - group { id name } - user { id name email } -} - -fragment DnsDomain on DnsDomain { - id - name - creator { ...User } - accessPolicy { - id - bindings { ...PolicyBinding } - } - insertedAt -} - -fragment Invite on Invite { - id - secureId - email - insertedAt -} - -fragment OidcLogin on OidcLogin { - ip - country - city - latitude - longitude - user { ...User } - owner { ...User } - repository { ...Repo } - insertedAt -} - -mutation UpdateAccount($attributes: AccountAttributes!) { - updateAccount(attributes: $attributes) { - ...Account - domainMappings { - id - domain - enableSso - } - } -} diff --git a/pkg/ui/web/src/graphql/artifacts.graphql b/pkg/ui/web/src/graphql/artifacts.graphql deleted file mode 100644 index da767f75d..000000000 --- a/pkg/ui/web/src/graphql/artifacts.graphql +++ /dev/null @@ -1,32 +0,0 @@ -fragment Artifact on Artifact { - id - name - blob - type - platform - arch - filesize - sha - readme - insertedAt - updatedAt -} - -query ListArtifacts($id: ID!) { - repository(id: $id) { - artifacts { ...Artifact } - } -} - -mutation CreateArtifact($repoName: String!, $name: String!, $readme: String!, $artifactType: String!, $platform: String!, $blob: UploadOrUrl!, $arch: String) { - createArtifact(repositoryName: $repoName, attributes: { - name: $name, - blob: $blob, - readme: $readme, - type: $artifactType, - platform: $platform, - arch: $arch - }) { - ...Artifact - } -} diff --git a/pkg/ui/web/src/graphql/charts.graphql b/pkg/ui/web/src/graphql/charts.graphql deleted file mode 100644 index 4b1fa61c6..000000000 --- a/pkg/ui/web/src/graphql/charts.graphql +++ /dev/null @@ -1,91 +0,0 @@ -fragment Chart on Chart { - id - name - description - latestVersion - dependencies { ...Dependencies } - insertedAt -} - -fragment Crd on Crd { - id - name - blob -} - -fragment ChartInstallation on ChartInstallation { - id - chart { - ...Chart - dependencies { ...Dependencies } - } - version { ...Version } -} - -fragment ScanViolation on ScanViolation { - ruleName - description - ruleId - severity - category - resourceName - resourceType - file - line -} - -fragment ScanError on ScanError { - message -} - -fragment PackageScan on PackageScan { - id - grade - violations { ...ScanViolation } - errors { ...ScanError } -} - -query GetCharts($id: ID!) { - charts(repositoryId: $id, first: 100) { - edges { - node { - ...Chart - } - } - } -} - -query GetVersions($id: ID!) { - versions(chartId: $id, first: 100) { - edges { - node { - ...Version - } - } - } -} - -query GetChartInstallations($id: ID!) { - chartInstallations(repositoryId: $id, first: 100) { - edges { node { ...ChartInstallation } } - } -} - -query GetPackageInstallations($id: ID!) { - chartInstallations(repositoryId: $id, first: 100) { - edges { node { ...ChartInstallation } } - } - terraformInstallations(repositoryId: $id, first: 100) { - edges { node { ...TerraformInstallation } } - } -} - -mutation CreateCrd($chartName: ChartName!, $name: String!, $blob: UploadOrUrl!) { - createCrd(chartName: $chartName, attributes: {name:$name, blob:$blob}) { - id - } -} - -mutation UninstallChart($id: ID!) { - deleteChartInstallation(id: $id) { id } -} diff --git a/pkg/ui/web/src/graphql/dns.graphql b/pkg/ui/web/src/graphql/dns.graphql deleted file mode 100644 index 08953c5e1..000000000 --- a/pkg/ui/web/src/graphql/dns.graphql +++ /dev/null @@ -1,28 +0,0 @@ -fragment DnsRecord on DnsRecord { - id - name - type - records - cluster - provider - creator { ...User } - insertedAt -} - -query GetDnsRecords($cluster: String!, $provider: Provider!) { - dnsRecords(cluster: $cluster, provider: $provider, first: 500) { - edges { node { ...DnsRecord } } - } -} - -mutation CreateDnsRecord($cluster: String!, $provider: Provider!, $attributes: DnsRecordAttributes!) { - createDnsRecord(cluster: $cluster, provider: $provider, attributes: $attributes) { - ...DnsRecord - } -} - -mutation DeleteDnsRecord($name: String!, $type: DnsRecordType!) { - deleteDnsRecord(name: $name, type: $type) { - ...DnsRecord - } -} diff --git a/pkg/ui/web/src/graphql/docker.graphql b/pkg/ui/web/src/graphql/docker.graphql deleted file mode 100644 index 5ccb13696..000000000 --- a/pkg/ui/web/src/graphql/docker.graphql +++ /dev/null @@ -1,44 +0,0 @@ -fragment DockerRepo on DockerRepository { - id - name - public - repository { id name } - insertedAt - updatedAt -} - -fragment DockerRepository on DockerRepository { - id - name - public - repository { id name editable } - insertedAt - updatedAt -} - -fragment DockerImage on DockerImage { - id - tag - digest - scannedAt - grade - insertedAt - updatedAt -} - - -fragment Vulnerability on Vulnerability { - id - title - description - vulnerabilityId - package - installedVersion - fixedVersion - source - url - severity - score - cvss { attackVector attackComplexity privilegesRequired userInteraction confidentiality integrity availability } - layer { digest diffId } -} diff --git a/pkg/ui/web/src/graphql/domains.graphql b/pkg/ui/web/src/graphql/domains.graphql deleted file mode 100644 index 9f002762a..000000000 --- a/pkg/ui/web/src/graphql/domains.graphql +++ /dev/null @@ -1,5 +0,0 @@ -mutation CreateDomain($name: String!) { - provisionDomain(name: $name) { - ...DnsDomain - } -} diff --git a/pkg/ui/web/src/graphql/generated/graphql.ts b/pkg/ui/web/src/graphql/generated/graphql.ts deleted file mode 100644 index 625a3aaf9..000000000 --- a/pkg/ui/web/src/graphql/generated/graphql.ts +++ /dev/null @@ -1,9949 +0,0 @@ -/* eslint-disable */ -import { gql } from '@apollo/client'; -import * as Apollo from '@apollo/client'; -export type Maybe = T | null; -export type InputMaybe = Maybe; -export type Exact = { [K in keyof T]: T[K] }; -export type MakeOptional = Omit & { [SubKey in K]?: Maybe }; -export type MakeMaybe = Omit & { [SubKey in K]: Maybe }; -const defaultOptions = {} as const; -/** All built-in and custom scalars, mapped to their actual values */ -export type Scalars = { - ID: string; - String: string; - Boolean: boolean; - Int: number; - Float: number; - /** - * The `DateTime` scalar type represents a date and time in the UTC - * timezone. The DateTime appears in a JSON response as an ISO8601 formatted - * string, including UTC timezone ("Z"). The parsed date and time string will - * be converted to UTC if there is an offset. - */ - DateTime: Date; - Map: Map; - UploadOrUrl: string; - Yaml: unknown; -}; - -export type RootQueryType = { - __typename?: 'RootQueryType'; - account?: Maybe; - auditMetrics?: Maybe>>; - audits?: Maybe; - categories?: Maybe>>; - category?: Maybe; - chart?: Maybe; - chartInstallations?: Maybe; - charts?: Maybe; - closure?: Maybe>>; - /** Get a cluster by its ID. */ - cluster?: Maybe; - /** Get a list of clusters owned by the current account. */ - clusters?: Maybe; - configuration?: Maybe; - deferredUpdates?: Maybe; - demoProject?: Maybe; - dnsDomain?: Maybe; - dnsDomains?: Maybe; - dnsRecords?: Maybe; - dockerImage?: Maybe; - dockerImages?: Maybe; - dockerRepositories?: Maybe; - eabCredential?: Maybe; - eabCredentials?: Maybe>>; - groupMembers?: Maybe; - groups?: Maybe; - helpQuestion?: Maybe; - incident?: Maybe; - incidents?: Maybe; - installation?: Maybe; - installations?: Maybe; - integrations?: Maybe; - integrationWebhook?: Maybe; - integrationWebhooks?: Maybe; - invite?: Maybe; - invites?: Maybe; - invoices?: Maybe; - keyBackup?: Maybe; - keyBackups?: Maybe; - loginMethod?: Maybe; - loginMetrics?: Maybe>>; - me?: Maybe; - notifications?: Maybe; - oauthConsent?: Maybe; - oauthIntegrations?: Maybe>>; - oauthLogin?: Maybe; - oauthUrls?: Maybe>>; - oidcConsent?: Maybe; - oidcLogin?: Maybe; - oidcLogins?: Maybe; - platformMetrics?: Maybe; - platformPlans?: Maybe>>; - platformSubscription?: Maybe; - publicKeys?: Maybe; - publisher?: Maybe; - publishers?: Maybe; - recipe?: Maybe; - recipes?: Maybe; - repositories?: Maybe; - /** Get an application by its ID or name. */ - repository?: Maybe; - repositorySubscription?: Maybe; - resetToken?: Maybe; - role?: Maybe; - roles?: Maybe; - rollouts?: Maybe; - scaffold?: Maybe>>; - scmAuthorization?: Maybe>>; - scmToken?: Maybe; - searchRepositories?: Maybe; - searchUsers?: Maybe; - shell?: Maybe; - shellConfiguration?: Maybe; - stack?: Maybe; - stacks?: Maybe; - subscriptions?: Maybe; - tags?: Maybe; - terraform?: Maybe; - terraformInstallations?: Maybe; - terraformModule?: Maybe; - terraformProvider?: Maybe; - terraformProviders?: Maybe>>; - test?: Maybe; - testLogs?: Maybe; - tests?: Maybe; - token?: Maybe; - tokens?: Maybe; - upgradeQueue?: Maybe; - upgradeQueues?: Maybe>>; - users?: Maybe; - versions?: Maybe; - webhooks?: Maybe; -}; - - -export type RootQueryTypeAuditsArgs = { - after?: InputMaybe; - before?: InputMaybe; - first?: InputMaybe; - last?: InputMaybe; -}; - - -export type RootQueryTypeCategoryArgs = { - name: Category; -}; - - -export type RootQueryTypeChartArgs = { - id: Scalars['ID']; -}; - - -export type RootQueryTypeChartInstallationsArgs = { - after?: InputMaybe; - before?: InputMaybe; - first?: InputMaybe; - last?: InputMaybe; - repositoryId: Scalars['ID']; -}; - - -export type RootQueryTypeChartsArgs = { - after?: InputMaybe; - before?: InputMaybe; - first?: InputMaybe; - last?: InputMaybe; - repositoryId: Scalars['ID']; -}; - - -export type RootQueryTypeClosureArgs = { - id: Scalars['ID']; - type: DependencyType; -}; - - -export type RootQueryTypeClusterArgs = { - id: Scalars['ID']; -}; - - -export type RootQueryTypeClustersArgs = { - after?: InputMaybe; - before?: InputMaybe; - first?: InputMaybe; - last?: InputMaybe; -}; - - -export type RootQueryTypeDeferredUpdatesArgs = { - after?: InputMaybe; - before?: InputMaybe; - chartInstallationId?: InputMaybe; - first?: InputMaybe; - last?: InputMaybe; - terraformInstallationId?: InputMaybe; -}; - - -export type RootQueryTypeDemoProjectArgs = { - id?: InputMaybe; -}; - - -export type RootQueryTypeDnsDomainArgs = { - id: Scalars['ID']; -}; - - -export type RootQueryTypeDnsDomainsArgs = { - after?: InputMaybe; - before?: InputMaybe; - first?: InputMaybe; - last?: InputMaybe; - q?: InputMaybe; -}; - - -export type RootQueryTypeDnsRecordsArgs = { - after?: InputMaybe; - before?: InputMaybe; - cluster?: InputMaybe; - domainId?: InputMaybe; - first?: InputMaybe; - last?: InputMaybe; - provider?: InputMaybe; -}; - - -export type RootQueryTypeDockerImageArgs = { - id: Scalars['ID']; -}; - - -export type RootQueryTypeDockerImagesArgs = { - after?: InputMaybe; - before?: InputMaybe; - dockerRepositoryId: Scalars['ID']; - first?: InputMaybe; - last?: InputMaybe; - q?: InputMaybe; -}; - - -export type RootQueryTypeDockerRepositoriesArgs = { - after?: InputMaybe; - before?: InputMaybe; - first?: InputMaybe; - last?: InputMaybe; - repositoryId: Scalars['ID']; -}; - - -export type RootQueryTypeEabCredentialArgs = { - cluster: Scalars['String']; - provider: Provider; -}; - - -export type RootQueryTypeGroupMembersArgs = { - after?: InputMaybe; - before?: InputMaybe; - first?: InputMaybe; - groupId: Scalars['ID']; - last?: InputMaybe; -}; - - -export type RootQueryTypeGroupsArgs = { - after?: InputMaybe; - before?: InputMaybe; - first?: InputMaybe; - last?: InputMaybe; - q?: InputMaybe; -}; - - -export type RootQueryTypeHelpQuestionArgs = { - prompt: Scalars['String']; -}; - - -export type RootQueryTypeIncidentArgs = { - id: Scalars['ID']; -}; - - -export type RootQueryTypeIncidentsArgs = { - after?: InputMaybe; - before?: InputMaybe; - filters?: InputMaybe>>; - first?: InputMaybe; - last?: InputMaybe; - order?: InputMaybe; - q?: InputMaybe; - repositoryId?: InputMaybe; - sort?: InputMaybe; - supports?: InputMaybe; -}; - - -export type RootQueryTypeInstallationArgs = { - id?: InputMaybe; - name?: InputMaybe; -}; - - -export type RootQueryTypeInstallationsArgs = { - after?: InputMaybe; - before?: InputMaybe; - first?: InputMaybe; - last?: InputMaybe; -}; - - -export type RootQueryTypeIntegrationsArgs = { - after?: InputMaybe; - before?: InputMaybe; - first?: InputMaybe; - last?: InputMaybe; - repositoryId?: InputMaybe; - repositoryName?: InputMaybe; - tag?: InputMaybe; - type?: InputMaybe; -}; - - -export type RootQueryTypeIntegrationWebhookArgs = { - id: Scalars['ID']; -}; - - -export type RootQueryTypeIntegrationWebhooksArgs = { - after?: InputMaybe; - before?: InputMaybe; - first?: InputMaybe; - last?: InputMaybe; -}; - - -export type RootQueryTypeInviteArgs = { - id: Scalars['String']; -}; - - -export type RootQueryTypeInvitesArgs = { - after?: InputMaybe; - before?: InputMaybe; - first?: InputMaybe; - last?: InputMaybe; -}; - - -export type RootQueryTypeInvoicesArgs = { - after?: InputMaybe; - before?: InputMaybe; - first?: InputMaybe; - last?: InputMaybe; -}; - - -export type RootQueryTypeKeyBackupArgs = { - name: Scalars['String']; -}; - - -export type RootQueryTypeKeyBackupsArgs = { - after?: InputMaybe; - before?: InputMaybe; - first?: InputMaybe; - last?: InputMaybe; -}; - - -export type RootQueryTypeLoginMethodArgs = { - email: Scalars['String']; - host?: InputMaybe; -}; - - -export type RootQueryTypeNotificationsArgs = { - after?: InputMaybe; - before?: InputMaybe; - cli?: InputMaybe; - first?: InputMaybe; - incidentId?: InputMaybe; - last?: InputMaybe; -}; - - -export type RootQueryTypeOauthConsentArgs = { - challenge: Scalars['String']; -}; - - -export type RootQueryTypeOauthLoginArgs = { - challenge: Scalars['String']; -}; - - -export type RootQueryTypeOauthUrlsArgs = { - host?: InputMaybe; -}; - - -export type RootQueryTypeOidcConsentArgs = { - challenge: Scalars['String']; -}; - - -export type RootQueryTypeOidcLoginArgs = { - challenge: Scalars['String']; -}; - - -export type RootQueryTypeOidcLoginsArgs = { - after?: InputMaybe; - before?: InputMaybe; - first?: InputMaybe; - last?: InputMaybe; -}; - - -export type RootQueryTypePublicKeysArgs = { - after?: InputMaybe; - before?: InputMaybe; - emails?: InputMaybe>>; - first?: InputMaybe; - last?: InputMaybe; -}; - - -export type RootQueryTypePublisherArgs = { - id?: InputMaybe; -}; - - -export type RootQueryTypePublishersArgs = { - accountId?: InputMaybe; - after?: InputMaybe; - before?: InputMaybe; - first?: InputMaybe; - last?: InputMaybe; - publishable?: InputMaybe; -}; - - -export type RootQueryTypeRecipeArgs = { - id?: InputMaybe; - name?: InputMaybe; - repo?: InputMaybe; -}; - - -export type RootQueryTypeRecipesArgs = { - after?: InputMaybe; - before?: InputMaybe; - first?: InputMaybe; - last?: InputMaybe; - provider?: InputMaybe; - repositoryId?: InputMaybe; - repositoryName?: InputMaybe; -}; - - -export type RootQueryTypeRepositoriesArgs = { - after?: InputMaybe; - before?: InputMaybe; - categories?: InputMaybe>>; - category?: InputMaybe; - first?: InputMaybe; - installed?: InputMaybe; - last?: InputMaybe; - provider?: InputMaybe; - publisherId?: InputMaybe; - publishers?: InputMaybe>>; - q?: InputMaybe; - supports?: InputMaybe; - tag?: InputMaybe; - tags?: InputMaybe>>; -}; - - -export type RootQueryTypeRepositoryArgs = { - id?: InputMaybe; - name?: InputMaybe; -}; - - -export type RootQueryTypeRepositorySubscriptionArgs = { - id: Scalars['ID']; -}; - - -export type RootQueryTypeResetTokenArgs = { - id: Scalars['ID']; -}; - - -export type RootQueryTypeRoleArgs = { - id: Scalars['ID']; -}; - - -export type RootQueryTypeRolesArgs = { - after?: InputMaybe; - before?: InputMaybe; - first?: InputMaybe; - last?: InputMaybe; - q?: InputMaybe; - userId?: InputMaybe; -}; - - -export type RootQueryTypeRolloutsArgs = { - after?: InputMaybe; - before?: InputMaybe; - first?: InputMaybe; - last?: InputMaybe; - repositoryId: Scalars['ID']; -}; - - -export type RootQueryTypeScaffoldArgs = { - application: Scalars['String']; - category: Category; - ingress?: InputMaybe; - postgres?: InputMaybe; - publisher: Scalars['String']; -}; - - -export type RootQueryTypeScmTokenArgs = { - code: Scalars['String']; - provider: ScmProvider; -}; - - -export type RootQueryTypeSearchRepositoriesArgs = { - after?: InputMaybe; - before?: InputMaybe; - first?: InputMaybe; - last?: InputMaybe; - query: Scalars['String']; -}; - - -export type RootQueryTypeSearchUsersArgs = { - after?: InputMaybe; - before?: InputMaybe; - first?: InputMaybe; - incidentId: Scalars['ID']; - last?: InputMaybe; - q: Scalars['String']; -}; - - -export type RootQueryTypeStackArgs = { - name: Scalars['String']; - provider: Provider; -}; - - -export type RootQueryTypeStacksArgs = { - after?: InputMaybe; - before?: InputMaybe; - featured?: InputMaybe; - first?: InputMaybe; - last?: InputMaybe; -}; - - -export type RootQueryTypeSubscriptionsArgs = { - after?: InputMaybe; - before?: InputMaybe; - first?: InputMaybe; - last?: InputMaybe; -}; - - -export type RootQueryTypeTagsArgs = { - after?: InputMaybe; - before?: InputMaybe; - first?: InputMaybe; - id?: InputMaybe; - last?: InputMaybe; - q?: InputMaybe; - type: TagGroup; -}; - - -export type RootQueryTypeTerraformArgs = { - after?: InputMaybe; - before?: InputMaybe; - first?: InputMaybe; - last?: InputMaybe; - repositoryId: Scalars['ID']; -}; - - -export type RootQueryTypeTerraformInstallationsArgs = { - after?: InputMaybe; - before?: InputMaybe; - first?: InputMaybe; - last?: InputMaybe; - repositoryId: Scalars['ID']; -}; - - -export type RootQueryTypeTerraformModuleArgs = { - id: Scalars['ID']; -}; - - -export type RootQueryTypeTerraformProviderArgs = { - name: Provider; - vsn?: InputMaybe; -}; - - -export type RootQueryTypeTestArgs = { - id: Scalars['ID']; -}; - - -export type RootQueryTypeTestLogsArgs = { - id: Scalars['ID']; - step: Scalars['ID']; -}; - - -export type RootQueryTypeTestsArgs = { - after?: InputMaybe; - before?: InputMaybe; - first?: InputMaybe; - last?: InputMaybe; - repositoryId?: InputMaybe; - versionId?: InputMaybe; -}; - - -export type RootQueryTypeTokenArgs = { - id: Scalars['ID']; -}; - - -export type RootQueryTypeTokensArgs = { - after?: InputMaybe; - before?: InputMaybe; - first?: InputMaybe; - last?: InputMaybe; -}; - - -export type RootQueryTypeUpgradeQueueArgs = { - id?: InputMaybe; -}; - - -export type RootQueryTypeUsersArgs = { - after?: InputMaybe; - all?: InputMaybe; - before?: InputMaybe; - first?: InputMaybe; - last?: InputMaybe; - q?: InputMaybe; - serviceAccount?: InputMaybe; -}; - - -export type RootQueryTypeVersionsArgs = { - after?: InputMaybe; - before?: InputMaybe; - chartId?: InputMaybe; - first?: InputMaybe; - last?: InputMaybe; - terraformId?: InputMaybe; -}; - - -export type RootQueryTypeWebhooksArgs = { - after?: InputMaybe; - before?: InputMaybe; - first?: InputMaybe; - last?: InputMaybe; -}; - -export type Account = { - __typename?: 'Account'; - availableFeatures?: Maybe; - backgroundColor?: Maybe; - billingAddress?: Maybe
    ; - billingCustomerId?: Maybe; - clusterCount?: Maybe; - delinquentAt?: Maybe; - domainMappings?: Maybe>>; - grandfatheredUntil?: Maybe; - icon?: Maybe; - id: Scalars['ID']; - insertedAt?: Maybe; - name?: Maybe; - rootUser?: Maybe; - subscription?: Maybe; - updatedAt?: Maybe; - userCount?: Maybe; - workosConnectionId?: Maybe; -}; - -export type PlanFeatures = { - __typename?: 'PlanFeatures'; - audit?: Maybe; - userManagement?: Maybe; - vpn?: Maybe; -}; - -export type Address = { - __typename?: 'Address'; - city?: Maybe; - country?: Maybe; - line1?: Maybe; - line2?: Maybe; - name?: Maybe; - state?: Maybe; - zip?: Maybe; -}; - -export type DomainMapping = { - __typename?: 'DomainMapping'; - account?: Maybe; - domain: Scalars['String']; - enableSso?: Maybe; - id: Scalars['ID']; - insertedAt?: Maybe; - updatedAt?: Maybe; -}; - -export type User = { - __typename?: 'User'; - account: Account; - address?: Maybe
    ; - avatar?: Maybe; - backgroundColor?: Maybe; - boundRoles?: Maybe>>; - cards?: Maybe; - defaultQueueId?: Maybe; - /** If a user has reached the demo project usage limit. */ - demoed?: Maybe; - demoing?: Maybe; - email: Scalars['String']; - emailConfirmBy?: Maybe; - emailConfirmed?: Maybe; - hasInstallations?: Maybe; - id: Scalars['ID']; - impersonationPolicy?: Maybe; - insertedAt?: Maybe; - jwt?: Maybe; - loginMethod?: Maybe; - name: Scalars['String']; - onboarding?: Maybe; - onboardingChecklist?: Maybe; - phone?: Maybe; - provider?: Maybe; - publisher?: Maybe; - roles?: Maybe; - serviceAccount?: Maybe; - updatedAt?: Maybe; -}; - - -export type UserCardsArgs = { - after?: InputMaybe; - before?: InputMaybe; - first?: InputMaybe; - last?: InputMaybe; -}; - -export type Role = { - __typename?: 'Role'; - account?: Maybe; - description?: Maybe; - id: Scalars['ID']; - insertedAt?: Maybe; - name: Scalars['String']; - permissions?: Maybe>>; - repositories?: Maybe>>; - roleBindings?: Maybe>>; - updatedAt?: Maybe; -}; - -export enum Permission { - Billing = 'BILLING', - Install = 'INSTALL', - Integrations = 'INTEGRATIONS', - Publish = 'PUBLISH', - Support = 'SUPPORT', - Users = 'USERS' -} - -export type RoleBinding = { - __typename?: 'RoleBinding'; - group?: Maybe; - id: Scalars['ID']; - insertedAt?: Maybe; - updatedAt?: Maybe; - user?: Maybe; -}; - -export type Group = { - __typename?: 'Group'; - description?: Maybe; - global?: Maybe; - id: Scalars['ID']; - insertedAt?: Maybe; - name: Scalars['String']; - updatedAt?: Maybe; -}; - -export type CardConnection = { - __typename?: 'CardConnection'; - edges?: Maybe>>; - pageInfo: PageInfo; -}; - -export type CardEdge = { - __typename?: 'CardEdge'; - cursor?: Maybe; - node?: Maybe; -}; - -export type Card = { - __typename?: 'Card'; - brand: Scalars['String']; - expMonth: Scalars['Int']; - expYear: Scalars['Int']; - id: Scalars['ID']; - last4: Scalars['String']; - name?: Maybe; -}; - -export type PageInfo = { - __typename?: 'PageInfo'; - /** When paginating forwards, the cursor to continue. */ - endCursor?: Maybe; - /** When paginating forwards, are there more items? */ - hasNextPage: Scalars['Boolean']; - /** When paginating backwards, are there more items? */ - hasPreviousPage: Scalars['Boolean']; - /** When paginating backwards, the cursor to continue. */ - startCursor?: Maybe; -}; - -export type ImpersonationPolicy = { - __typename?: 'ImpersonationPolicy'; - bindings?: Maybe>>; - id: Scalars['ID']; - insertedAt?: Maybe; - updatedAt?: Maybe; -}; - -export type ImpersonationPolicyBinding = { - __typename?: 'ImpersonationPolicyBinding'; - group?: Maybe; - id: Scalars['ID']; - insertedAt?: Maybe; - updatedAt?: Maybe; - user?: Maybe; -}; - -export enum LoginMethod { - Github = 'GITHUB', - Google = 'GOOGLE', - Password = 'PASSWORD', - Passwordless = 'PASSWORDLESS', - Sso = 'SSO' -} - -export enum OnboardingState { - Active = 'ACTIVE', - Installed = 'INSTALLED', - New = 'NEW', - Onboarded = 'ONBOARDED' -} - -export type OnboardingChecklist = { - __typename?: 'OnboardingChecklist'; - dismissed?: Maybe; - status?: Maybe; -}; - -export enum OnboardingChecklistState { - Configured = 'CONFIGURED', - ConsoleInstalled = 'CONSOLE_INSTALLED', - Finished = 'FINISHED', - New = 'NEW' -} - -export enum Provider { - Aws = 'AWS', - Azure = 'AZURE', - Custom = 'CUSTOM', - Equinix = 'EQUINIX', - Gcp = 'GCP', - Generic = 'GENERIC', - Kind = 'KIND', - Kubernetes = 'KUBERNETES' -} - -export type Publisher = { - __typename?: 'Publisher'; - address?: Maybe
    ; - avatar?: Maybe; - backgroundColor?: Maybe; - billingAccountId?: Maybe; - community?: Maybe; - description?: Maybe; - id?: Maybe; - insertedAt?: Maybe; - name: Scalars['String']; - owner?: Maybe; - phone?: Maybe; - repositories?: Maybe>>; - updatedAt?: Maybe; -}; - -export type Community = { - __typename?: 'Community'; - discord?: Maybe; - gitUrl?: Maybe; - homepage?: Maybe; - slack?: Maybe; - twitter?: Maybe; - videos?: Maybe>>; -}; - -/** Container for all resources to create an application. */ -export type Repository = { - __typename?: 'Repository'; - /** The artifacts of the application. */ - artifacts?: Maybe>>; - /** The category of the application. */ - category?: Maybe; - /** The community links of the application. */ - community?: Maybe; - darkIcon?: Maybe; - /** The default tag to deploy. */ - defaultTag?: Maybe; - /** The description of the application. */ - description?: Maybe; - /** The documentation of the application. */ - docs?: Maybe>>; - /** The documentation of the application. */ - documentation?: Maybe; - /** If the application can be edited by the current user. */ - editable?: Maybe; - /** The git URL of the application. */ - gitUrl?: Maybe; - /** The homepage of the application. */ - homepage?: Maybe; - icon?: Maybe; - /** The application's ID. */ - id: Scalars['ID']; - insertedAt?: Maybe; - /** The installation of the application by a user. */ - installation?: Maybe; - /** The license of the application. */ - license?: Maybe; - /** The main branch of the application. */ - mainBranch?: Maybe; - /** The name of the application. */ - name: Scalars['String']; - /** Notes about the application rendered after deploying and displayed to the user. */ - notes?: Maybe; - /** The OAuth settings for the application. */ - oauthSettings?: Maybe; - /** The available plans for the application. */ - plans?: Maybe>>; - /** Whether the application is private. */ - private?: Maybe; - /** The application's public key. */ - publicKey?: Maybe; - /** The application publisher. */ - publisher?: Maybe; - /** The README of the application. */ - readme?: Maybe; - /** The recipes used to install the application. */ - recipes?: Maybe>>; - /** A map of secrets of the application. */ - secrets?: Maybe; - /** The tags of the application. */ - tags?: Maybe>>; - /** Whether the application is trending. */ - trending?: Maybe; - updatedAt?: Maybe; - /** Whether the application is verified. */ - verified?: Maybe; -}; - -export type Artifact = { - __typename?: 'Artifact'; - arch?: Maybe; - blob?: Maybe; - filesize?: Maybe; - id?: Maybe; - insertedAt?: Maybe; - name?: Maybe; - platform?: Maybe; - readme?: Maybe; - sha?: Maybe; - type?: Maybe; - updatedAt?: Maybe; -}; - -export enum ArtifactPlatform { - Android = 'ANDROID', - Freebsd = 'FREEBSD', - Linux = 'LINUX', - Mac = 'MAC', - Openbsd = 'OPENBSD', - Solaris = 'SOLARIS', - Windows = 'WINDOWS' -} - -export enum ArtifactType { - Cli = 'CLI', - Desktop = 'DESKTOP', - Mobile = 'MOBILE' -} - -/** Application categories. */ -export enum Category { - Data = 'DATA', - Database = 'DATABASE', - Devops = 'DEVOPS', - Messaging = 'MESSAGING', - Network = 'NETWORK', - Productivity = 'PRODUCTIVITY', - Security = 'SECURITY', - Storage = 'STORAGE' -} - -export type FileContent = { - __typename?: 'FileContent'; - content: Scalars['String']; - path: Scalars['String']; -}; - -/** An installation of an application. */ -export type Installation = { - __typename?: 'Installation'; - acmeKeyId?: Maybe; - acmeSecret?: Maybe; - /** Whether the application should auto upgrade. */ - autoUpgrade?: Maybe; - /** A YAML object of context. */ - context?: Maybe; - /** The installation's ID. */ - id: Scalars['ID']; - insertedAt?: Maybe; - license?: Maybe; - /** The license key for the application. */ - licenseKey?: Maybe; - /** The OIDC provider for the application. */ - oidcProvider?: Maybe; - /** The last ping time of an installed application. */ - pingedAt?: Maybe; - /** The application that was installed. */ - repository?: Maybe; - /** The subscription for the application. */ - subscription?: Maybe; - /** The tag to track for auto upgrades. */ - trackTag: Scalars['String']; - updatedAt?: Maybe; - /** The user that installed the application. */ - user?: Maybe; -}; - -export type OidcProvider = { - __typename?: 'OidcProvider'; - authMethod: OidcAuthMethod; - bindings?: Maybe>>; - clientId: Scalars['String']; - clientSecret: Scalars['String']; - configuration?: Maybe; - consent?: Maybe; - id: Scalars['ID']; - insertedAt?: Maybe; - redirectUris?: Maybe>>; - updatedAt?: Maybe; -}; - -/** Supported OIDC authentication methods. */ -export enum OidcAuthMethod { - Basic = 'BASIC', - Post = 'POST' -} - -export type OidcProviderBinding = { - __typename?: 'OidcProviderBinding'; - group?: Maybe; - id: Scalars['ID']; - insertedAt?: Maybe; - updatedAt?: Maybe; - user?: Maybe; -}; - -export type OuathConfiguration = { - __typename?: 'OuathConfiguration'; - authorizationEndpoint?: Maybe; - issuer?: Maybe; - jwksUri?: Maybe; - tokenEndpoint?: Maybe; - userinfoEndpoint?: Maybe; -}; - -export type ConsentRequest = { - __typename?: 'ConsentRequest'; - requestedScope?: Maybe>>; - skip?: Maybe; -}; - -export type RepositorySubscription = { - __typename?: 'RepositorySubscription'; - customerId?: Maybe; - externalId?: Maybe; - id: Scalars['ID']; - installation?: Maybe; - invoices?: Maybe; - lineItems?: Maybe; - plan?: Maybe; -}; - - -export type RepositorySubscriptionInvoicesArgs = { - after?: InputMaybe; - before?: InputMaybe; - first?: InputMaybe; - last?: InputMaybe; -}; - -export type InvoiceConnection = { - __typename?: 'InvoiceConnection'; - edges?: Maybe>>; - pageInfo: PageInfo; -}; - -export type InvoiceEdge = { - __typename?: 'InvoiceEdge'; - cursor?: Maybe; - node?: Maybe; -}; - -export type Invoice = { - __typename?: 'Invoice'; - amountDue: Scalars['Int']; - amountPaid: Scalars['Int']; - createdAt?: Maybe; - currency: Scalars['String']; - hostedInvoiceUrl?: Maybe; - lines?: Maybe>>; - number: Scalars['String']; - status?: Maybe; -}; - -export type InvoiceItem = { - __typename?: 'InvoiceItem'; - amount: Scalars['Int']; - currency: Scalars['String']; - description?: Maybe; -}; - -export type SubscriptionLineItems = { - __typename?: 'SubscriptionLineItems'; - items?: Maybe>>; -}; - -export type Limit = { - __typename?: 'Limit'; - dimension: Scalars['String']; - quantity: Scalars['Int']; -}; - -export type Plan = { - __typename?: 'Plan'; - cost: Scalars['Int']; - default?: Maybe; - id: Scalars['ID']; - insertedAt?: Maybe; - lineItems?: Maybe; - metadata?: Maybe; - name: Scalars['String']; - period?: Maybe; - serviceLevels?: Maybe>>; - updatedAt?: Maybe; - visible: Scalars['Boolean']; -}; - -export type PlanLineItems = { - __typename?: 'PlanLineItems'; - included?: Maybe>>; - items?: Maybe>>; -}; - -export type LineItem = { - __typename?: 'LineItem'; - cost: Scalars['Int']; - dimension: Scalars['String']; - name: Scalars['String']; - period?: Maybe; - type?: Maybe; -}; - -export enum PlanType { - Licensed = 'LICENSED', - Metered = 'METERED' -} - -export type PlanMetadata = { - __typename?: 'PlanMetadata'; - features?: Maybe>>; - freeform?: Maybe; -}; - -export type PlanFeature = { - __typename?: 'PlanFeature'; - description: Scalars['String']; - name: Scalars['String']; -}; - -export type ServiceLevel = { - __typename?: 'ServiceLevel'; - maxSeverity?: Maybe; - minSeverity?: Maybe; - responseTime?: Maybe; -}; - -export type License = { - __typename?: 'License'; - name?: Maybe; - url?: Maybe; -}; - -export type OauthSettings = { - __typename?: 'OauthSettings'; - authMethod: OidcAuthMethod; - uriFormat: Scalars['String']; -}; - -export type Recipe = { - __typename?: 'Recipe'; - description?: Maybe; - id: Scalars['ID']; - insertedAt?: Maybe; - name: Scalars['String']; - oidcEnabled?: Maybe; - oidcSettings?: Maybe; - primary?: Maybe; - private?: Maybe; - provider?: Maybe; - recipeDependencies?: Maybe>>; - recipeSections?: Maybe>>; - repository?: Maybe; - restricted?: Maybe; - tests?: Maybe>>; - updatedAt?: Maybe; -}; - -export type OidcSettings = { - __typename?: 'OidcSettings'; - authMethod: OidcAuthMethod; - domainKey?: Maybe; - subdomain?: Maybe; - uriFormat?: Maybe; - uriFormats?: Maybe>>; -}; - -export type RecipeSection = { - __typename?: 'RecipeSection'; - configuration?: Maybe>>; - id?: Maybe; - index?: Maybe; - insertedAt?: Maybe; - recipe?: Maybe; - recipeItems?: Maybe>>; - repository?: Maybe; - updatedAt?: Maybe; -}; - -export type RecipeConfiguration = { - __typename?: 'RecipeConfiguration'; - args?: Maybe>>; - condition?: Maybe; - default?: Maybe; - documentation?: Maybe; - functionName?: Maybe; - longform?: Maybe; - name?: Maybe; - optional?: Maybe; - placeholder?: Maybe; - type?: Maybe; - validation?: Maybe; -}; - -export type RecipeCondition = { - __typename?: 'RecipeCondition'; - field: Scalars['String']; - operation: Operation; - value?: Maybe; -}; - -export enum Operation { - Eq = 'EQ', - Gt = 'GT', - Gte = 'GTE', - Lt = 'LT', - Lte = 'LTE', - Not = 'NOT', - Prefix = 'PREFIX', - Suffix = 'SUFFIX' -} - -export enum Datatype { - Bool = 'BOOL', - Bucket = 'BUCKET', - Domain = 'DOMAIN', - File = 'FILE', - Function = 'FUNCTION', - Int = 'INT', - Password = 'PASSWORD', - String = 'STRING' -} - -export type RecipeValidation = { - __typename?: 'RecipeValidation'; - message: Scalars['String']; - regex?: Maybe; - type: ValidationType; -}; - -export enum ValidationType { - Regex = 'REGEX' -} - -export type RecipeItem = { - __typename?: 'RecipeItem'; - chart?: Maybe; - configuration?: Maybe>>; - id?: Maybe; - insertedAt?: Maybe; - recipeSection?: Maybe; - terraform?: Maybe; - updatedAt?: Maybe; -}; - -export type Chart = { - __typename?: 'Chart'; - dependencies?: Maybe; - description?: Maybe; - id?: Maybe; - insertedAt?: Maybe; - installation?: Maybe; - latestVersion?: Maybe; - name: Scalars['String']; - repository?: Maybe; - tags?: Maybe>>; - updatedAt?: Maybe; -}; - -export type Dependencies = { - __typename?: 'Dependencies'; - application?: Maybe; - breaking?: Maybe; - cliVsn?: Maybe; - dependencies?: Maybe>>; - instructions?: Maybe; - outputs?: Maybe; - providers?: Maybe>>; - providerVsn?: Maybe; - providerWirings?: Maybe; - secrets?: Maybe>>; - wait?: Maybe; - wirings?: Maybe; -}; - -export type Dependency = { - __typename?: 'Dependency'; - name?: Maybe; - optional?: Maybe; - repo?: Maybe; - type?: Maybe; - version?: Maybe; -}; - -export enum DependencyType { - Helm = 'HELM', - Terraform = 'TERRAFORM' -} - -export type ChangeInstructions = { - __typename?: 'ChangeInstructions'; - instructions?: Maybe; - script?: Maybe; -}; - -export type Wirings = { - __typename?: 'Wirings'; - helm?: Maybe; - terraform?: Maybe; -}; - -export type ChartInstallation = { - __typename?: 'ChartInstallation'; - chart?: Maybe; - id?: Maybe; - insertedAt?: Maybe; - installation?: Maybe; - updatedAt?: Maybe; - version?: Maybe; -}; - -/** The version of a package. */ -export type Version = { - __typename?: 'Version'; - chart?: Maybe; - crds?: Maybe>>; - dependencies?: Maybe; - helm?: Maybe; - id: Scalars['ID']; - imageDependencies?: Maybe>>; - insertedAt?: Maybe; - package?: Maybe; - readme?: Maybe; - scan?: Maybe; - tags?: Maybe>>; - /** The template engine used to render the valuesTemplate. */ - templateType?: Maybe; - terraform?: Maybe; - updatedAt?: Maybe; - valuesTemplate?: Maybe; - version: Scalars['String']; -}; - -export type Crd = { - __typename?: 'Crd'; - blob?: Maybe; - id: Scalars['ID']; - insertedAt?: Maybe; - name: Scalars['String']; - updatedAt?: Maybe; -}; - -export type ImageDependency = { - __typename?: 'ImageDependency'; - id: Scalars['ID']; - image: DockerImage; - insertedAt?: Maybe; - updatedAt?: Maybe; - version: Version; -}; - -export type DockerImage = { - __typename?: 'DockerImage'; - digest: Scalars['String']; - dockerRepository?: Maybe; - grade?: Maybe; - id: Scalars['ID']; - insertedAt?: Maybe; - scanCompletedAt?: Maybe; - scannedAt?: Maybe; - tag?: Maybe; - updatedAt?: Maybe; - vulnerabilities?: Maybe>>; -}; - -export type DockerRepository = { - __typename?: 'DockerRepository'; - id: Scalars['ID']; - insertedAt?: Maybe; - metrics?: Maybe>>; - name: Scalars['String']; - public?: Maybe; - repository?: Maybe; - updatedAt?: Maybe; -}; - - -export type DockerRepositoryMetricsArgs = { - offset?: InputMaybe; - precision?: InputMaybe; - tag?: InputMaybe; -}; - -export type Metric = { - __typename?: 'Metric'; - name: Scalars['String']; - tags?: Maybe>>; - values?: Maybe>>; -}; - -export type MetricTag = { - __typename?: 'MetricTag'; - name: Scalars['String']; - value: Scalars['String']; -}; - -export type MetricValue = { - __typename?: 'MetricValue'; - time?: Maybe; - value?: Maybe; -}; - -export enum ImageGrade { - A = 'A', - B = 'B', - C = 'C', - D = 'D', - F = 'F' -} - -export type Vulnerability = { - __typename?: 'Vulnerability'; - cvss?: Maybe; - description?: Maybe; - fixedVersion?: Maybe; - id: Scalars['ID']; - insertedAt?: Maybe; - installedVersion?: Maybe; - layer?: Maybe; - package?: Maybe; - score?: Maybe; - severity?: Maybe; - source?: Maybe; - title?: Maybe; - updatedAt?: Maybe; - url?: Maybe; - vulnerabilityId?: Maybe; -}; - -export type Cvss = { - __typename?: 'Cvss'; - attackComplexity?: Maybe; - attackVector?: Maybe; - availability?: Maybe; - confidentiality?: Maybe; - integrity?: Maybe; - privilegesRequired?: Maybe; - userInteraction?: Maybe; -}; - -export enum VulnGrade { - Critical = 'CRITICAL', - High = 'HIGH', - Low = 'LOW', - Medium = 'MEDIUM', - None = 'NONE' -} - -export enum VulnVector { - Adjacent = 'ADJACENT', - Local = 'LOCAL', - Network = 'NETWORK', - Physical = 'PHYSICAL' -} - -export enum VulnRequirement { - None = 'NONE', - Required = 'REQUIRED' -} - -export type ImageLayer = { - __typename?: 'ImageLayer'; - diffId?: Maybe; - digest?: Maybe; -}; - -export type PackageScan = { - __typename?: 'PackageScan'; - errors?: Maybe>>; - grade?: Maybe; - id: Scalars['ID']; - insertedAt?: Maybe; - updatedAt?: Maybe; - violations?: Maybe>>; -}; - -export type ScanError = { - __typename?: 'ScanError'; - message?: Maybe; -}; - -export type ScanViolation = { - __typename?: 'ScanViolation'; - category?: Maybe; - description?: Maybe; - file?: Maybe; - insertedAt?: Maybe; - line?: Maybe; - resourceName?: Maybe; - resourceType?: Maybe; - ruleId?: Maybe; - ruleName?: Maybe; - severity?: Maybe; - updatedAt?: Maybe; -}; - -export type VersionTag = { - __typename?: 'VersionTag'; - chart?: Maybe; - id: Scalars['ID']; - insertedAt?: Maybe; - tag: Scalars['String']; - updatedAt?: Maybe; - version?: Maybe; -}; - -/** Template engines that can be used at build time. */ -export enum TemplateType { - Gotemplate = 'GOTEMPLATE', - Javascript = 'JAVASCRIPT', - Lua = 'LUA' -} - -export type Terraform = { - __typename?: 'Terraform'; - dependencies?: Maybe; - description?: Maybe; - editable?: Maybe; - id?: Maybe; - insertedAt?: Maybe; - installation?: Maybe; - latestVersion?: Maybe; - name?: Maybe; - package?: Maybe; - readme?: Maybe; - repository?: Maybe; - updatedAt?: Maybe; - valuesTemplate?: Maybe; -}; - -export type TerraformInstallation = { - __typename?: 'TerraformInstallation'; - id?: Maybe; - insertedAt?: Maybe; - installation?: Maybe; - terraform?: Maybe; - updatedAt?: Maybe; - version?: Maybe; -}; - -export type RecipeTest = { - __typename?: 'RecipeTest'; - args?: Maybe>>; - message?: Maybe; - name: Scalars['String']; - type: TestType; -}; - -export type TestArgument = { - __typename?: 'TestArgument'; - key: Scalars['String']; - name: Scalars['String']; - repo: Scalars['String']; -}; - -export enum TestType { - Git = 'GIT' -} - -export type Tag = { - __typename?: 'Tag'; - id: Scalars['ID']; - tag: Scalars['String']; -}; - -export type Roles = { - __typename?: 'Roles'; - admin?: Maybe; -}; - -export type PlatformSubscription = { - __typename?: 'PlatformSubscription'; - externalId?: Maybe; - id: Scalars['ID']; - lineItems?: Maybe>>; - plan?: Maybe; -}; - -export type PlatformSubscriptionLineItems = { - __typename?: 'PlatformSubscriptionLineItems'; - dimension: LineItemDimension; - externalId?: Maybe; - quantity: Scalars['Int']; -}; - -export enum LineItemDimension { - Cluster = 'CLUSTER', - User = 'USER' -} - -export type PlatformPlan = { - __typename?: 'PlatformPlan'; - cost: Scalars['Int']; - enterprise?: Maybe; - features?: Maybe; - id: Scalars['ID']; - insertedAt?: Maybe; - lineItems?: Maybe>>; - name: Scalars['String']; - period: PaymentPeriod; - updatedAt?: Maybe; - visible: Scalars['Boolean']; -}; - -export type PlatformPlanItem = { - __typename?: 'PlatformPlanItem'; - cost: Scalars['Int']; - dimension: LineItemDimension; - externalId?: Maybe; - name: Scalars['String']; - period: PaymentPeriod; -}; - -export enum PaymentPeriod { - Monthly = 'MONTHLY', - Yearly = 'YEARLY' -} - -export type GeoMetric = { - __typename?: 'GeoMetric'; - count?: Maybe; - country?: Maybe; -}; - -export type AuditConnection = { - __typename?: 'AuditConnection'; - edges?: Maybe>>; - pageInfo: PageInfo; -}; - -export type AuditEdge = { - __typename?: 'AuditEdge'; - cursor?: Maybe; - node?: Maybe; -}; - -export type Audit = { - __typename?: 'Audit'; - action: Scalars['String']; - actor?: Maybe; - city?: Maybe; - country?: Maybe; - group?: Maybe; - id: Scalars['ID']; - image?: Maybe; - insertedAt?: Maybe; - integrationWebhook?: Maybe; - ip?: Maybe; - latitude?: Maybe; - longitude?: Maybe; - repository?: Maybe; - role?: Maybe; - updatedAt?: Maybe; - user?: Maybe; - version?: Maybe; -}; - -export type IntegrationWebhook = { - __typename?: 'IntegrationWebhook'; - account?: Maybe; - actions?: Maybe>>; - id: Scalars['ID']; - insertedAt?: Maybe; - logs?: Maybe; - name: Scalars['String']; - secret: Scalars['String']; - updatedAt?: Maybe; - url: Scalars['String']; -}; - - -export type IntegrationWebhookLogsArgs = { - after?: InputMaybe; - before?: InputMaybe; - first?: InputMaybe; - last?: InputMaybe; -}; - -export type WebhookLogConnection = { - __typename?: 'WebhookLogConnection'; - edges?: Maybe>>; - pageInfo: PageInfo; -}; - -export type WebhookLogEdge = { - __typename?: 'WebhookLogEdge'; - cursor?: Maybe; - node?: Maybe; -}; - -export type WebhookLog = { - __typename?: 'WebhookLog'; - id: Scalars['ID']; - insertedAt?: Maybe; - payload?: Maybe; - response?: Maybe; - state: WebhookLogState; - status?: Maybe; - updatedAt?: Maybe; - webhook?: Maybe; -}; - -export enum WebhookLogState { - Delivered = 'DELIVERED', - Failed = 'FAILED', - Sending = 'SENDING' -} - -export type CategoryInfo = { - __typename?: 'CategoryInfo'; - category?: Maybe; - count?: Maybe; - tags?: Maybe; -}; - - -export type CategoryInfoTagsArgs = { - after?: InputMaybe; - before?: InputMaybe; - first?: InputMaybe; - last?: InputMaybe; - q?: InputMaybe; -}; - -export type GroupedTagConnection = { - __typename?: 'GroupedTagConnection'; - edges?: Maybe>>; - pageInfo: PageInfo; -}; - -export type GroupedTagEdge = { - __typename?: 'GroupedTagEdge'; - cursor?: Maybe; - node?: Maybe; -}; - -export type GroupedTag = { - __typename?: 'GroupedTag'; - count: Scalars['Int']; - tag: Scalars['String']; -}; - -export type ChartInstallationConnection = { - __typename?: 'ChartInstallationConnection'; - edges?: Maybe>>; - pageInfo: PageInfo; -}; - -export type ChartInstallationEdge = { - __typename?: 'ChartInstallationEdge'; - cursor?: Maybe; - node?: Maybe; -}; - -export type ChartConnection = { - __typename?: 'ChartConnection'; - edges?: Maybe>>; - pageInfo: PageInfo; -}; - -export type ChartEdge = { - __typename?: 'ChartEdge'; - cursor?: Maybe; - node?: Maybe; -}; - -export type ClosureItem = { - __typename?: 'ClosureItem'; - dep?: Maybe; - helm?: Maybe; - terraform?: Maybe; -}; - -/** A Kubernetes cluster that can be used to deploy applications on with Plural. */ -export type Cluster = { - __typename?: 'Cluster'; - /** The account that the cluster belongs to. */ - account?: Maybe; - /** The URL of the console running on the cluster. */ - consoleUrl?: Maybe; - /** The domain name used for applications deployed on the cluster. */ - domain?: Maybe; - /** The git repository URL for the cluster. */ - gitUrl?: Maybe; - /** The ID of the cluster. */ - id: Scalars['ID']; - insertedAt?: Maybe; - /** The name of the cluster. */ - name: Scalars['String']; - /** The user that owns the cluster. */ - owner?: Maybe; - /** The last time the cluster was pinged. */ - pingedAt?: Maybe; - /** The cluster's cloud provider. */ - provider: Provider; - /** The upgrade queue for applications running on the cluster. */ - queue?: Maybe; - /** The source of the cluster. */ - source?: Maybe; - updatedAt?: Maybe; - /** pending upgrades for each installed app */ - upgradeInfo?: Maybe>>; -}; - -export type UpgradeQueue = { - __typename?: 'UpgradeQueue'; - acked?: Maybe; - domain?: Maybe; - git?: Maybe; - id: Scalars['ID']; - insertedAt?: Maybe; - name?: Maybe; - pingedAt?: Maybe; - provider?: Maybe; - updatedAt?: Maybe; - upgrades?: Maybe; - user: User; -}; - - -export type UpgradeQueueUpgradesArgs = { - after?: InputMaybe; - before?: InputMaybe; - first?: InputMaybe; - last?: InputMaybe; -}; - -export type UpgradeConnection = { - __typename?: 'UpgradeConnection'; - edges?: Maybe>>; - pageInfo: PageInfo; -}; - -export type UpgradeEdge = { - __typename?: 'UpgradeEdge'; - cursor?: Maybe; - node?: Maybe; -}; - -export type Upgrade = { - __typename?: 'Upgrade'; - id: Scalars['ID']; - insertedAt?: Maybe; - message?: Maybe; - repository?: Maybe; - type?: Maybe; - updatedAt?: Maybe; -}; - -export enum UpgradeType { - Approval = 'APPROVAL', - Bounce = 'BOUNCE', - Dedicated = 'DEDICATED', - Deploy = 'DEPLOY' -} - -/** Possible cluster sources. */ -export enum Source { - Default = 'DEFAULT', - Demo = 'DEMO', - Shell = 'SHELL' -} - -/** The pending upgrades for a repository */ -export type UpgradeInfo = { - __typename?: 'UpgradeInfo'; - count?: Maybe; - installation?: Maybe; -}; - -export type ClusterConnection = { - __typename?: 'ClusterConnection'; - edges?: Maybe>>; - pageInfo: PageInfo; -}; - -export type ClusterEdge = { - __typename?: 'ClusterEdge'; - cursor?: Maybe; - node?: Maybe; -}; - -export type PluralConfiguration = { - __typename?: 'PluralConfiguration'; - gitCommit?: Maybe; - registry?: Maybe; - stripeConnectId?: Maybe; - stripePublishableKey?: Maybe; -}; - -export type DeferredUpdateConnection = { - __typename?: 'DeferredUpdateConnection'; - edges?: Maybe>>; - pageInfo: PageInfo; -}; - -export type DeferredUpdateEdge = { - __typename?: 'DeferredUpdateEdge'; - cursor?: Maybe; - node?: Maybe; -}; - -export type DeferredUpdate = { - __typename?: 'DeferredUpdate'; - attempts?: Maybe; - chartInstallation?: Maybe; - dequeueAt?: Maybe; - id: Scalars['ID']; - insertedAt?: Maybe; - messages?: Maybe>>; - pending?: Maybe; - terraformInstallation?: Maybe; - updatedAt?: Maybe; - version?: Maybe; -}; - -export type DeferredReason = { - __typename?: 'DeferredReason'; - message?: Maybe; - package?: Maybe; - repository?: Maybe; -}; - -export type DemoProject = { - __typename?: 'DemoProject'; - credentials?: Maybe; - id: Scalars['ID']; - insertedAt?: Maybe; - projectId: Scalars['String']; - ready?: Maybe; - state?: Maybe; - updatedAt?: Maybe; -}; - -export enum DemoProjectState { - Created = 'CREATED', - Enabled = 'ENABLED', - Ready = 'READY' -} - -export type DnsDomain = { - __typename?: 'DnsDomain'; - accessPolicy?: Maybe; - account?: Maybe; - creator?: Maybe; - dnsRecords?: Maybe; - id: Scalars['ID']; - insertedAt?: Maybe; - name: Scalars['String']; - updatedAt?: Maybe; -}; - - -export type DnsDomainDnsRecordsArgs = { - after?: InputMaybe; - before?: InputMaybe; - first?: InputMaybe; - last?: InputMaybe; -}; - -export type DnsAccessPolicy = { - __typename?: 'DnsAccessPolicy'; - bindings?: Maybe>>; - id: Scalars['ID']; - insertedAt?: Maybe; - updatedAt?: Maybe; -}; - -export type PolicyBinding = { - __typename?: 'PolicyBinding'; - group?: Maybe; - id: Scalars['ID']; - insertedAt?: Maybe; - updatedAt?: Maybe; - user?: Maybe; -}; - -export type DnsRecordConnection = { - __typename?: 'DnsRecordConnection'; - edges?: Maybe>>; - pageInfo: PageInfo; -}; - -export type DnsRecordEdge = { - __typename?: 'DnsRecordEdge'; - cursor?: Maybe; - node?: Maybe; -}; - -export type DnsRecord = { - __typename?: 'DnsRecord'; - cluster: Scalars['String']; - creator?: Maybe; - domain?: Maybe; - id: Scalars['ID']; - insertedAt?: Maybe; - name: Scalars['String']; - provider: Provider; - records?: Maybe>>; - type: DnsRecordType; - updatedAt?: Maybe; -}; - -export enum DnsRecordType { - A = 'A', - Aaaa = 'AAAA', - Cname = 'CNAME', - Txt = 'TXT' -} - -export type DnsDomainConnection = { - __typename?: 'DnsDomainConnection'; - edges?: Maybe>>; - pageInfo: PageInfo; -}; - -export type DnsDomainEdge = { - __typename?: 'DnsDomainEdge'; - cursor?: Maybe; - node?: Maybe; -}; - -export type DockerImageConnection = { - __typename?: 'DockerImageConnection'; - edges?: Maybe>>; - pageInfo: PageInfo; -}; - -export type DockerImageEdge = { - __typename?: 'DockerImageEdge'; - cursor?: Maybe; - node?: Maybe; -}; - -export type DockerRepositoryConnection = { - __typename?: 'DockerRepositoryConnection'; - edges?: Maybe>>; - pageInfo: PageInfo; -}; - -export type DockerRepositoryEdge = { - __typename?: 'DockerRepositoryEdge'; - cursor?: Maybe; - node?: Maybe; -}; - -export type EabCredential = { - __typename?: 'EabCredential'; - cluster: Scalars['String']; - hmacKey: Scalars['String']; - id: Scalars['ID']; - insertedAt?: Maybe; - keyId: Scalars['String']; - provider: Provider; - updatedAt?: Maybe; -}; - -export type GroupMemberConnection = { - __typename?: 'GroupMemberConnection'; - edges?: Maybe>>; - pageInfo: PageInfo; -}; - -export type GroupMemberEdge = { - __typename?: 'GroupMemberEdge'; - cursor?: Maybe; - node?: Maybe; -}; - -export type GroupMember = { - __typename?: 'GroupMember'; - group?: Maybe; - id: Scalars['ID']; - insertedAt?: Maybe; - updatedAt?: Maybe; - user?: Maybe; -}; - -export type GroupConnection = { - __typename?: 'GroupConnection'; - edges?: Maybe>>; - pageInfo: PageInfo; -}; - -export type GroupEdge = { - __typename?: 'GroupEdge'; - cursor?: Maybe; - node?: Maybe; -}; - -export type Incident = { - __typename?: 'Incident'; - clusterInformation?: Maybe; - creator: User; - description?: Maybe; - files?: Maybe; - follower?: Maybe; - followers?: Maybe; - history?: Maybe; - id: Scalars['ID']; - insertedAt?: Maybe; - messages?: Maybe; - nextResponseAt?: Maybe; - notificationCount?: Maybe; - owner?: Maybe; - postmortem?: Maybe; - repository: Repository; - severity: Scalars['Int']; - status: IncidentStatus; - subscription?: Maybe; - tags?: Maybe>>; - title: Scalars['String']; - updatedAt?: Maybe; -}; - - -export type IncidentFilesArgs = { - after?: InputMaybe; - before?: InputMaybe; - first?: InputMaybe; - last?: InputMaybe; -}; - - -export type IncidentFollowersArgs = { - after?: InputMaybe; - before?: InputMaybe; - first?: InputMaybe; - last?: InputMaybe; -}; - - -export type IncidentHistoryArgs = { - after?: InputMaybe; - before?: InputMaybe; - first?: InputMaybe; - last?: InputMaybe; -}; - - -export type IncidentMessagesArgs = { - after?: InputMaybe; - before?: InputMaybe; - first?: InputMaybe; - last?: InputMaybe; -}; - -export type ClusterInformation = { - __typename?: 'ClusterInformation'; - gitCommit?: Maybe; - id: Scalars['ID']; - insertedAt?: Maybe; - platform?: Maybe; - updatedAt?: Maybe; - version?: Maybe; -}; - -export type FileConnection = { - __typename?: 'FileConnection'; - edges?: Maybe>>; - pageInfo: PageInfo; -}; - -export type FileEdge = { - __typename?: 'FileEdge'; - cursor?: Maybe; - node?: Maybe; -}; - -export type File = { - __typename?: 'File'; - blob: Scalars['String']; - contentType?: Maybe; - filename?: Maybe; - filesize?: Maybe; - height?: Maybe; - id: Scalars['ID']; - insertedAt?: Maybe; - mediaType?: Maybe; - message: IncidentMessage; - updatedAt?: Maybe; - width?: Maybe; -}; - -export enum MediaType { - Audio = 'AUDIO', - Image = 'IMAGE', - Other = 'OTHER', - Pdf = 'PDF', - Video = 'VIDEO' -} - -export type IncidentMessage = { - __typename?: 'IncidentMessage'; - creator: User; - entities?: Maybe>>; - file?: Maybe; - id: Scalars['ID']; - incident: Incident; - insertedAt?: Maybe; - reactions?: Maybe>>; - text: Scalars['String']; - updatedAt?: Maybe; -}; - -export type MessageEntity = { - __typename?: 'MessageEntity'; - endIndex?: Maybe; - id: Scalars['ID']; - insertedAt?: Maybe; - startIndex?: Maybe; - text?: Maybe; - type: MessageEntityType; - updatedAt?: Maybe; - user?: Maybe; -}; - -export enum MessageEntityType { - Emoji = 'EMOJI', - Mention = 'MENTION' -} - -export type Reaction = { - __typename?: 'Reaction'; - creator: User; - insertedAt?: Maybe; - message: IncidentMessage; - name: Scalars['String']; - updatedAt?: Maybe; -}; - -export type Follower = { - __typename?: 'Follower'; - id: Scalars['ID']; - incident?: Maybe; - insertedAt?: Maybe; - preferences?: Maybe; - updatedAt?: Maybe; - user: User; -}; - -export type NotificationPreferences = { - __typename?: 'NotificationPreferences'; - incidentUpdate?: Maybe; - mention?: Maybe; - message?: Maybe; -}; - -export type FollowerConnection = { - __typename?: 'FollowerConnection'; - edges?: Maybe>>; - pageInfo: PageInfo; -}; - -export type FollowerEdge = { - __typename?: 'FollowerEdge'; - cursor?: Maybe; - node?: Maybe; -}; - -export type IncidentHistoryConnection = { - __typename?: 'IncidentHistoryConnection'; - edges?: Maybe>>; - pageInfo: PageInfo; -}; - -export type IncidentHistoryEdge = { - __typename?: 'IncidentHistoryEdge'; - cursor?: Maybe; - node?: Maybe; -}; - -export type IncidentHistory = { - __typename?: 'IncidentHistory'; - action: IncidentAction; - actor: User; - changes?: Maybe>>; - id: Scalars['ID']; - incident: Incident; - insertedAt?: Maybe; - updatedAt?: Maybe; -}; - -export enum IncidentAction { - Accept = 'ACCEPT', - Complete = 'COMPLETE', - Create = 'CREATE', - Edit = 'EDIT', - Severity = 'SEVERITY', - Status = 'STATUS' -} - -export type IncidentChange = { - __typename?: 'IncidentChange'; - key: Scalars['String']; - next?: Maybe; - prev?: Maybe; -}; - -export type IncidentMessageConnection = { - __typename?: 'IncidentMessageConnection'; - edges?: Maybe>>; - pageInfo: PageInfo; -}; - -export type IncidentMessageEdge = { - __typename?: 'IncidentMessageEdge'; - cursor?: Maybe; - node?: Maybe; -}; - -export type Postmortem = { - __typename?: 'Postmortem'; - actionItems?: Maybe>>; - content: Scalars['String']; - creator: User; - id: Scalars['ID']; - insertedAt?: Maybe; - updatedAt?: Maybe; -}; - -export type ActionItem = { - __typename?: 'ActionItem'; - link: Scalars['String']; - type: ActionItemType; -}; - -export enum ActionItemType { - Blog = 'BLOG', - Issue = 'ISSUE', - Pull = 'PULL' -} - -export enum IncidentStatus { - Complete = 'COMPLETE', - InProgress = 'IN_PROGRESS', - Open = 'OPEN', - Resolved = 'RESOLVED' -} - -export type SlimSubscription = { - __typename?: 'SlimSubscription'; - id: Scalars['ID']; - lineItems?: Maybe; - plan?: Maybe; -}; - -export type IncidentFilter = { - statuses?: InputMaybe>>; - type: IncidentFilterType; - value?: InputMaybe; -}; - -export enum IncidentFilterType { - Following = 'FOLLOWING', - Notifications = 'NOTIFICATIONS', - Status = 'STATUS', - Tag = 'TAG' -} - -export enum Order { - Asc = 'ASC', - Desc = 'DESC' -} - -export enum IncidentSort { - InsertedAt = 'INSERTED_AT', - Severity = 'SEVERITY', - Status = 'STATUS', - Title = 'TITLE' -} - -export type IncidentConnection = { - __typename?: 'IncidentConnection'; - edges?: Maybe>>; - pageInfo: PageInfo; -}; - -export type IncidentEdge = { - __typename?: 'IncidentEdge'; - cursor?: Maybe; - node?: Maybe; -}; - -export type InstallationConnection = { - __typename?: 'InstallationConnection'; - edges?: Maybe>>; - pageInfo: PageInfo; -}; - -export type InstallationEdge = { - __typename?: 'InstallationEdge'; - cursor?: Maybe; - node?: Maybe; -}; - -export type IntegrationConnection = { - __typename?: 'IntegrationConnection'; - edges?: Maybe>>; - pageInfo: PageInfo; -}; - -export type IntegrationEdge = { - __typename?: 'IntegrationEdge'; - cursor?: Maybe; - node?: Maybe; -}; - -export type Integration = { - __typename?: 'Integration'; - description?: Maybe; - icon?: Maybe; - id: Scalars['ID']; - insertedAt?: Maybe; - name: Scalars['String']; - publisher?: Maybe; - repository?: Maybe; - sourceUrl?: Maybe; - spec?: Maybe; - tags?: Maybe>>; - type?: Maybe; - updatedAt?: Maybe; -}; - -export type IntegrationWebhookConnection = { - __typename?: 'IntegrationWebhookConnection'; - edges?: Maybe>>; - pageInfo: PageInfo; -}; - -export type IntegrationWebhookEdge = { - __typename?: 'IntegrationWebhookEdge'; - cursor?: Maybe; - node?: Maybe; -}; - -export type Invite = { - __typename?: 'Invite'; - account?: Maybe; - email?: Maybe; - existing: Scalars['Boolean']; - expiresAt?: Maybe; - id: Scalars['ID']; - insertedAt?: Maybe; - secureId?: Maybe; - updatedAt?: Maybe; - user?: Maybe; -}; - -export type InviteConnection = { - __typename?: 'InviteConnection'; - edges?: Maybe>>; - pageInfo: PageInfo; -}; - -export type InviteEdge = { - __typename?: 'InviteEdge'; - cursor?: Maybe; - node?: Maybe; -}; - -export type KeyBackup = { - __typename?: 'KeyBackup'; - digest: Scalars['String']; - id: Scalars['ID']; - insertedAt?: Maybe; - name: Scalars['String']; - repositories?: Maybe>; - updatedAt?: Maybe; - user: User; - value: Scalars['String']; -}; - -export type KeyBackupConnection = { - __typename?: 'KeyBackupConnection'; - edges?: Maybe>>; - pageInfo: PageInfo; -}; - -export type KeyBackupEdge = { - __typename?: 'KeyBackupEdge'; - cursor?: Maybe; - node?: Maybe; -}; - -export type LoginMethodResponse = { - __typename?: 'LoginMethodResponse'; - authorizeUrl?: Maybe; - loginMethod: LoginMethod; - token?: Maybe; -}; - -export type NotificationConnection = { - __typename?: 'NotificationConnection'; - edges?: Maybe>>; - pageInfo: PageInfo; -}; - -export type NotificationEdge = { - __typename?: 'NotificationEdge'; - cursor?: Maybe; - node?: Maybe; -}; - -export type Notification = { - __typename?: 'Notification'; - actor: User; - id: Scalars['ID']; - incident?: Maybe; - insertedAt?: Maybe; - message?: Maybe; - msg?: Maybe; - repository?: Maybe; - type: NotificationType; - updatedAt?: Maybe; - user: User; -}; - -export enum NotificationType { - IncidentUpdate = 'INCIDENT_UPDATE', - Locked = 'LOCKED', - Mention = 'MENTION', - Message = 'MESSAGE' -} - -export type OauthIntegration = { - __typename?: 'OauthIntegration'; - account?: Maybe; - id: Scalars['ID']; - insertedAt?: Maybe; - service: OauthService; - updatedAt?: Maybe; -}; - -export enum OauthService { - Zoom = 'ZOOM' -} - -export type OauthInfo = { - __typename?: 'OauthInfo'; - authorizeUrl: Scalars['String']; - provider: OauthProvider; -}; - -export enum OauthProvider { - Github = 'GITHUB', - Gitlab = 'GITLAB', - Google = 'GOOGLE' -} - -export type OidcStepResponse = { - __typename?: 'OidcStepResponse'; - consent?: Maybe; - login?: Maybe; - repository?: Maybe; -}; - -export type LoginRequest = { - __typename?: 'LoginRequest'; - requestedScope?: Maybe>>; - subject?: Maybe; -}; - -export type OidcLoginConnection = { - __typename?: 'OidcLoginConnection'; - edges?: Maybe>>; - pageInfo: PageInfo; -}; - -export type OidcLoginEdge = { - __typename?: 'OidcLoginEdge'; - cursor?: Maybe; - node?: Maybe; -}; - -export type OidcLogin = { - __typename?: 'OidcLogin'; - city?: Maybe; - country?: Maybe; - id: Scalars['ID']; - insertedAt?: Maybe; - ip?: Maybe; - latitude?: Maybe; - longitude?: Maybe; - owner?: Maybe; - repository?: Maybe; - updatedAt?: Maybe; - user?: Maybe; -}; - -export type PlatformMetrics = { - __typename?: 'PlatformMetrics'; - clusters?: Maybe; - publishers?: Maybe; - repositories?: Maybe; - rollouts?: Maybe; -}; - -export type PublicKeyConnection = { - __typename?: 'PublicKeyConnection'; - edges?: Maybe>>; - pageInfo: PageInfo; -}; - -export type PublicKeyEdge = { - __typename?: 'PublicKeyEdge'; - cursor?: Maybe; - node?: Maybe; -}; - -export type PublicKey = { - __typename?: 'PublicKey'; - content: Scalars['String']; - digest: Scalars['String']; - id: Scalars['ID']; - insertedAt?: Maybe; - name: Scalars['String']; - updatedAt?: Maybe; - user: User; -}; - -export type PublisherConnection = { - __typename?: 'PublisherConnection'; - edges?: Maybe>>; - pageInfo: PageInfo; -}; - -export type PublisherEdge = { - __typename?: 'PublisherEdge'; - cursor?: Maybe; - node?: Maybe; -}; - -export type RecipeConnection = { - __typename?: 'RecipeConnection'; - edges?: Maybe>>; - pageInfo: PageInfo; -}; - -export type RecipeEdge = { - __typename?: 'RecipeEdge'; - cursor?: Maybe; - node?: Maybe; -}; - -export type RepositoryConnection = { - __typename?: 'RepositoryConnection'; - edges?: Maybe>>; - pageInfo: PageInfo; -}; - -export type RepositoryEdge = { - __typename?: 'RepositoryEdge'; - cursor?: Maybe; - node?: Maybe; -}; - -export type ResetToken = { - __typename?: 'ResetToken'; - email: Scalars['String']; - externalId: Scalars['ID']; - id: Scalars['ID']; - insertedAt?: Maybe; - type: ResetTokenType; - updatedAt?: Maybe; - user: User; -}; - -export enum ResetTokenType { - Email = 'EMAIL', - Password = 'PASSWORD' -} - -export type RoleConnection = { - __typename?: 'RoleConnection'; - edges?: Maybe>>; - pageInfo: PageInfo; -}; - -export type RoleEdge = { - __typename?: 'RoleEdge'; - cursor?: Maybe; - node?: Maybe; -}; - -export type RolloutConnection = { - __typename?: 'RolloutConnection'; - edges?: Maybe>>; - pageInfo: PageInfo; -}; - -export type RolloutEdge = { - __typename?: 'RolloutEdge'; - cursor?: Maybe; - node?: Maybe; -}; - -export type Rollout = { - __typename?: 'Rollout'; - count?: Maybe; - cursor?: Maybe; - event?: Maybe; - heartbeat?: Maybe; - id: Scalars['ID']; - insertedAt?: Maybe; - repository?: Maybe; - status: RolloutStatus; - updatedAt?: Maybe; -}; - -export enum RolloutStatus { - Finished = 'FINISHED', - Queued = 'QUEUED', - Running = 'RUNNING' -} - -export type ScaffoldFile = { - __typename?: 'ScaffoldFile'; - content?: Maybe; - path?: Maybe; -}; - -export type AuthorizationUrl = { - __typename?: 'AuthorizationUrl'; - provider: ScmProvider; - url: Scalars['String']; -}; - -export enum ScmProvider { - Demo = 'DEMO', - Github = 'GITHUB', - Gitlab = 'GITLAB', - Manual = 'MANUAL' -} - -export type UserConnection = { - __typename?: 'UserConnection'; - edges?: Maybe>>; - pageInfo: PageInfo; -}; - -export type UserEdge = { - __typename?: 'UserEdge'; - cursor?: Maybe; - node?: Maybe; -}; - -export type CloudShell = { - __typename?: 'CloudShell'; - aesKey: Scalars['String']; - alive: Scalars['Boolean']; - cluster: Scalars['String']; - gitUrl: Scalars['String']; - id: Scalars['ID']; - insertedAt?: Maybe; - missing?: Maybe>>; - provider: Provider; - region: Scalars['String']; - status?: Maybe; - subdomain: Scalars['String']; - updatedAt?: Maybe; -}; - -export type ShellStatus = { - __typename?: 'ShellStatus'; - containersReady?: Maybe; - initialized?: Maybe; - podScheduled?: Maybe; - ready?: Maybe; -}; - -export type ShellConfiguration = { - __typename?: 'ShellConfiguration'; - buckets?: Maybe>>; - contextConfiguration?: Maybe; - domains?: Maybe>>; - git?: Maybe; - workspace?: Maybe; -}; - -export type GitConfiguration = { - __typename?: 'GitConfiguration'; - branch?: Maybe; - name?: Maybe; - root?: Maybe; - url?: Maybe; -}; - -export type ShellWorkspace = { - __typename?: 'ShellWorkspace'; - bucketPrefix?: Maybe; - cluster?: Maybe; - network?: Maybe; - region?: Maybe; -}; - -export type NetworkConfiguration = { - __typename?: 'NetworkConfiguration'; - pluralDns?: Maybe; - subdomain?: Maybe; -}; - -export type Stack = { - __typename?: 'Stack'; - bundles?: Maybe>>; - collections?: Maybe>>; - community?: Maybe; - creator?: Maybe; - description?: Maybe; - displayName?: Maybe; - featured?: Maybe; - id: Scalars['ID']; - insertedAt?: Maybe; - name: Scalars['String']; - sections?: Maybe>>; - updatedAt?: Maybe; -}; - -export type StackCollection = { - __typename?: 'StackCollection'; - bundles?: Maybe>>; - id: Scalars['ID']; - insertedAt?: Maybe; - provider: Provider; - updatedAt?: Maybe; -}; - -export type StackRecipe = { - __typename?: 'StackRecipe'; - id: Scalars['ID']; - insertedAt?: Maybe; - recipe: Recipe; - updatedAt?: Maybe; -}; - -export type StackConnection = { - __typename?: 'StackConnection'; - edges?: Maybe>>; - pageInfo: PageInfo; -}; - -export type StackEdge = { - __typename?: 'StackEdge'; - cursor?: Maybe; - node?: Maybe; -}; - -export type RepositorySubscriptionConnection = { - __typename?: 'RepositorySubscriptionConnection'; - edges?: Maybe>>; - pageInfo: PageInfo; -}; - -export type RepositorySubscriptionEdge = { - __typename?: 'RepositorySubscriptionEdge'; - cursor?: Maybe; - node?: Maybe; -}; - -export enum TagGroup { - Integrations = 'INTEGRATIONS', - Repositories = 'REPOSITORIES' -} - -export type TerraformConnection = { - __typename?: 'TerraformConnection'; - edges?: Maybe>>; - pageInfo: PageInfo; -}; - -export type TerraformEdge = { - __typename?: 'TerraformEdge'; - cursor?: Maybe; - node?: Maybe; -}; - -export type TerraformInstallationConnection = { - __typename?: 'TerraformInstallationConnection'; - edges?: Maybe>>; - pageInfo: PageInfo; -}; - -export type TerraformInstallationEdge = { - __typename?: 'TerraformInstallationEdge'; - cursor?: Maybe; - node?: Maybe; -}; - -export type TerraformProvider = { - __typename?: 'TerraformProvider'; - content?: Maybe; - name?: Maybe; -}; - -export type Test = { - __typename?: 'Test'; - creator?: Maybe; - id: Scalars['ID']; - insertedAt?: Maybe; - name?: Maybe; - promoteTag: Scalars['String']; - repository?: Maybe; - sourceTag: Scalars['String']; - status: TestStatus; - steps?: Maybe>>; - tags?: Maybe>; - updatedAt?: Maybe; -}; - -export enum TestStatus { - Failed = 'FAILED', - Queued = 'QUEUED', - Running = 'RUNNING', - Succeeded = 'SUCCEEDED' -} - -export type TestStep = { - __typename?: 'TestStep'; - description: Scalars['String']; - hasLogs?: Maybe; - id: Scalars['ID']; - insertedAt?: Maybe; - name: Scalars['String']; - status: TestStatus; - updatedAt?: Maybe; -}; - -export type TestConnection = { - __typename?: 'TestConnection'; - edges?: Maybe>>; - pageInfo: PageInfo; -}; - -export type TestEdge = { - __typename?: 'TestEdge'; - cursor?: Maybe; - node?: Maybe; -}; - -export type PersistedToken = { - __typename?: 'PersistedToken'; - audits?: Maybe; - id?: Maybe; - insertedAt?: Maybe; - metrics?: Maybe>>; - token?: Maybe; - updatedAt?: Maybe; -}; - - -export type PersistedTokenAuditsArgs = { - after?: InputMaybe; - before?: InputMaybe; - first?: InputMaybe; - last?: InputMaybe; -}; - -export type PersistedTokenAuditConnection = { - __typename?: 'PersistedTokenAuditConnection'; - edges?: Maybe>>; - pageInfo: PageInfo; -}; - -export type PersistedTokenAuditEdge = { - __typename?: 'PersistedTokenAuditEdge'; - cursor?: Maybe; - node?: Maybe; -}; - -export type PersistedTokenAudit = { - __typename?: 'PersistedTokenAudit'; - city?: Maybe; - count?: Maybe; - country?: Maybe; - id?: Maybe; - insertedAt?: Maybe; - ip?: Maybe; - latitude?: Maybe; - longitude?: Maybe; - timestamp?: Maybe; - updatedAt?: Maybe; -}; - -export type PersistedTokenConnection = { - __typename?: 'PersistedTokenConnection'; - edges?: Maybe>>; - pageInfo: PageInfo; -}; - -export type PersistedTokenEdge = { - __typename?: 'PersistedTokenEdge'; - cursor?: Maybe; - node?: Maybe; -}; - -export type VersionConnection = { - __typename?: 'VersionConnection'; - edges?: Maybe>>; - pageInfo: PageInfo; -}; - -export type VersionEdge = { - __typename?: 'VersionEdge'; - cursor?: Maybe; - node?: Maybe; -}; - -export type WebhookConnection = { - __typename?: 'WebhookConnection'; - edges?: Maybe>>; - pageInfo: PageInfo; -}; - -export type WebhookEdge = { - __typename?: 'WebhookEdge'; - cursor?: Maybe; - node?: Maybe; -}; - -export type Webhook = { - __typename?: 'Webhook'; - id?: Maybe; - insertedAt?: Maybe; - secret?: Maybe; - updatedAt?: Maybe; - url?: Maybe; - user?: Maybe; -}; - -export type RootMutationType = { - __typename?: 'RootMutationType'; - acceptIncident?: Maybe; - acceptLogin?: Maybe; - acquireLock?: Maybe; - cancelPlatformSubscription?: Maybe; - completeIncident?: Maybe; - createArtifact?: Maybe; - createCard?: Maybe; - /** Create a new cluster. */ - createCluster?: Maybe; - /** adds a dependency for this cluster to gate future upgrades */ - createClusterDependency?: Maybe; - createCrd?: Maybe; - createDemoProject?: Maybe; - createDnsRecord?: Maybe; - createDomain?: Maybe; - createGroup?: Maybe; - createGroupMember?: Maybe; - createIncident?: Maybe; - createInstallation?: Maybe; - createIntegration?: Maybe; - createIntegrationWebhook?: Maybe; - createInvite?: Maybe; - createKeyBackup?: Maybe; - createMessage?: Maybe; - createOauthIntegration?: Maybe; - createOidcProvider?: Maybe; - createPlan?: Maybe; - createPlatformSubscription?: Maybe; - createPublicKey?: Maybe; - createPublisher?: Maybe; - createQueue?: Maybe; - createReaction?: Maybe; - createRecipe?: Maybe; - createRepository?: Maybe; - createResetToken?: Maybe; - createRole?: Maybe; - createServiceAccount?: Maybe; - createShell?: Maybe; - createStack?: Maybe; - createSubscription?: Maybe; - createTerraform?: Maybe; - createTest?: Maybe; - createToken?: Maybe; - createUserEvent?: Maybe; - createWebhook?: Maybe; - createZoom?: Maybe; - deleteCard?: Maybe; - deleteChartInstallation?: Maybe; - /** Delete a cluster. */ - deleteCluster?: Maybe; - deleteDemoProject?: Maybe; - deleteDnsRecord?: Maybe; - deleteDomain?: Maybe; - deleteEabKey?: Maybe; - deleteGroup?: Maybe; - deleteGroupMember?: Maybe; - deleteIncident?: Maybe; - deleteInstallation?: Maybe; - deleteIntegrationWebhook?: Maybe; - deleteInvite?: Maybe; - deleteKeyBackup?: Maybe; - deleteMessage?: Maybe; - deletePlatformSubscription?: Maybe; - deletePublicKey?: Maybe; - deleteReaction?: Maybe; - deleteRecipe?: Maybe; - deleteRepository?: Maybe; - deleteRole?: Maybe; - deleteShell?: Maybe; - deleteStack?: Maybe; - deleteTerraform?: Maybe; - deleteToken?: Maybe; - deleteUser?: Maybe; - destroyCluster?: Maybe; - deviceLogin?: Maybe; - externalToken?: Maybe; - followIncident?: Maybe; - impersonateServiceAccount?: Maybe; - installBundle?: Maybe>>; - installChart?: Maybe; - installRecipe?: Maybe>>; - installStack?: Maybe>>; - installStackShell?: Maybe>>; - installTerraform?: Maybe; - linkPublisher?: Maybe; - login?: Maybe; - loginToken?: Maybe; - oauthCallback?: Maybe; - oauthConsent?: Maybe; - passwordlessLogin?: Maybe; - pingWebhook?: Maybe; - /** moves up the upgrade waterline for a user */ - promote?: Maybe; - provisionDomain?: Maybe; - publishLogs?: Maybe; - quickStack?: Maybe; - readNotifications?: Maybe; - realizeInvite?: Maybe; - realizeResetToken?: Maybe; - rebootShell?: Maybe; - releaseLock?: Maybe; - resetInstallations?: Maybe; - restartShell?: Maybe; - setupShell?: Maybe; - signup?: Maybe; - ssoCallback?: Maybe; - stopShell?: Maybe; - transferDemoProject?: Maybe; - unfollowIncident?: Maybe; - uninstallTerraform?: Maybe; - unlockRepository?: Maybe; - updateAccount?: Maybe; - updateChart?: Maybe; - updateChartInstallation?: Maybe; - updateDockerRepository?: Maybe; - updateDomain?: Maybe; - updateGroup?: Maybe; - updateIncident?: Maybe; - updateInstallation?: Maybe; - updateIntegrationWebhook?: Maybe; - updateLineItem?: Maybe; - updateMessage?: Maybe; - updateOidcProvider?: Maybe; - updatePlan?: Maybe; - updatePlanAttributes?: Maybe; - updatePlatformPlan?: Maybe; - updatePublisher?: Maybe; - updateRepository?: Maybe; - updateRole?: Maybe; - updateServiceAccount?: Maybe; - updateShell?: Maybe; - updateShellConfiguration?: Maybe; - updateStep?: Maybe; - updateTerraform?: Maybe; - updateTest?: Maybe; - updateUser?: Maybe; - updateVersion?: Maybe; - uploadTerraform?: Maybe; - upsertOidcProvider?: Maybe; - upsertRepository?: Maybe; -}; - - -export type RootMutationTypeAcceptIncidentArgs = { - id: Scalars['ID']; -}; - - -export type RootMutationTypeAcceptLoginArgs = { - challenge: Scalars['String']; -}; - - -export type RootMutationTypeAcquireLockArgs = { - repository: Scalars['String']; -}; - - -export type RootMutationTypeCompleteIncidentArgs = { - id: Scalars['ID']; - postmortem: PostmortemAttributes; -}; - - -export type RootMutationTypeCreateArtifactArgs = { - attributes: ArtifactAttributes; - repositoryId?: InputMaybe; - repositoryName?: InputMaybe; -}; - - -export type RootMutationTypeCreateCardArgs = { - address?: InputMaybe; - source: Scalars['String']; -}; - - -export type RootMutationTypeCreateClusterArgs = { - attributes: ClusterAttributes; -}; - - -export type RootMutationTypeCreateClusterDependencyArgs = { - destId: Scalars['ID']; - sourceId: Scalars['ID']; -}; - - -export type RootMutationTypeCreateCrdArgs = { - attributes: CrdAttributes; - chartId?: InputMaybe; - chartName?: InputMaybe; -}; - - -export type RootMutationTypeCreateDnsRecordArgs = { - attributes: DnsRecordAttributes; - cluster: Scalars['String']; - provider: Provider; -}; - - -export type RootMutationTypeCreateDomainArgs = { - attributes: DnsDomainAttributes; -}; - - -export type RootMutationTypeCreateGroupArgs = { - attributes: GroupAttributes; -}; - - -export type RootMutationTypeCreateGroupMemberArgs = { - groupId: Scalars['ID']; - userId: Scalars['ID']; -}; - - -export type RootMutationTypeCreateIncidentArgs = { - attributes: IncidentAttributes; - repository?: InputMaybe; - repositoryId?: InputMaybe; -}; - - -export type RootMutationTypeCreateInstallationArgs = { - repositoryId: Scalars['ID']; -}; - - -export type RootMutationTypeCreateIntegrationArgs = { - attributes: IntegrationAttributes; - repositoryName: Scalars['String']; -}; - - -export type RootMutationTypeCreateIntegrationWebhookArgs = { - attributes: IntegrationWebhookAttributes; -}; - - -export type RootMutationTypeCreateInviteArgs = { - attributes: InviteAttributes; -}; - - -export type RootMutationTypeCreateKeyBackupArgs = { - attributes: KeyBackupAttributes; -}; - - -export type RootMutationTypeCreateMessageArgs = { - attributes: IncidentMessageAttributes; - incidentId: Scalars['ID']; -}; - - -export type RootMutationTypeCreateOauthIntegrationArgs = { - attributes: OauthAttributes; -}; - - -export type RootMutationTypeCreateOidcProviderArgs = { - attributes: OidcAttributes; - installationId: Scalars['ID']; -}; - - -export type RootMutationTypeCreatePlanArgs = { - attributes: PlanAttributes; - repositoryId: Scalars['ID']; -}; - - -export type RootMutationTypeCreatePlatformSubscriptionArgs = { - planId: Scalars['ID']; -}; - - -export type RootMutationTypeCreatePublicKeyArgs = { - attributes: PublicKeyAttributes; -}; - - -export type RootMutationTypeCreatePublisherArgs = { - attributes: PublisherAttributes; -}; - - -export type RootMutationTypeCreateQueueArgs = { - attributes: UpgradeQueueAttributes; -}; - - -export type RootMutationTypeCreateReactionArgs = { - messageId: Scalars['ID']; - name: Scalars['String']; -}; - - -export type RootMutationTypeCreateRecipeArgs = { - attributes: RecipeAttributes; - repositoryId?: InputMaybe; - repositoryName?: InputMaybe; -}; - - -export type RootMutationTypeCreateRepositoryArgs = { - attributes: RepositoryAttributes; - id?: InputMaybe; -}; - - -export type RootMutationTypeCreateResetTokenArgs = { - attributes: ResetTokenAttributes; -}; - - -export type RootMutationTypeCreateRoleArgs = { - attributes: RoleAttributes; -}; - - -export type RootMutationTypeCreateServiceAccountArgs = { - attributes: ServiceAccountAttributes; -}; - - -export type RootMutationTypeCreateShellArgs = { - attributes: CloudShellAttributes; -}; - - -export type RootMutationTypeCreateStackArgs = { - attributes: StackAttributes; -}; - - -export type RootMutationTypeCreateSubscriptionArgs = { - attributes?: InputMaybe; - installationId: Scalars['ID']; - planId: Scalars['ID']; -}; - - -export type RootMutationTypeCreateTerraformArgs = { - attributes: TerraformAttributes; - repositoryId: Scalars['ID']; -}; - - -export type RootMutationTypeCreateTestArgs = { - attributes: TestAttributes; - name?: InputMaybe; - repositoryId?: InputMaybe; -}; - - -export type RootMutationTypeCreateUserEventArgs = { - attributes: UserEventAttributes; -}; - - -export type RootMutationTypeCreateWebhookArgs = { - attributes: WebhookAttributes; -}; - - -export type RootMutationTypeCreateZoomArgs = { - attributes: MeetingAttributes; -}; - - -export type RootMutationTypeDeleteCardArgs = { - id: Scalars['ID']; -}; - - -export type RootMutationTypeDeleteChartInstallationArgs = { - id: Scalars['ID']; -}; - - -export type RootMutationTypeDeleteClusterArgs = { - name: Scalars['String']; - provider: Provider; -}; - - -export type RootMutationTypeDeleteDnsRecordArgs = { - name: Scalars['String']; - type: DnsRecordType; -}; - - -export type RootMutationTypeDeleteDomainArgs = { - id: Scalars['ID']; -}; - - -export type RootMutationTypeDeleteEabKeyArgs = { - cluster?: InputMaybe; - id?: InputMaybe; - provider?: InputMaybe; -}; - - -export type RootMutationTypeDeleteGroupArgs = { - groupId: Scalars['ID']; -}; - - -export type RootMutationTypeDeleteGroupMemberArgs = { - groupId: Scalars['ID']; - userId: Scalars['ID']; -}; - - -export type RootMutationTypeDeleteIncidentArgs = { - id: Scalars['ID']; -}; - - -export type RootMutationTypeDeleteInstallationArgs = { - id: Scalars['ID']; -}; - - -export type RootMutationTypeDeleteIntegrationWebhookArgs = { - id: Scalars['ID']; -}; - - -export type RootMutationTypeDeleteInviteArgs = { - id?: InputMaybe; - secureId?: InputMaybe; -}; - - -export type RootMutationTypeDeleteKeyBackupArgs = { - name: Scalars['String']; -}; - - -export type RootMutationTypeDeleteMessageArgs = { - id: Scalars['ID']; -}; - - -export type RootMutationTypeDeletePublicKeyArgs = { - id: Scalars['ID']; -}; - - -export type RootMutationTypeDeleteReactionArgs = { - messageId: Scalars['ID']; - name: Scalars['String']; -}; - - -export type RootMutationTypeDeleteRecipeArgs = { - id: Scalars['ID']; -}; - - -export type RootMutationTypeDeleteRepositoryArgs = { - repositoryId: Scalars['ID']; -}; - - -export type RootMutationTypeDeleteRoleArgs = { - id: Scalars['ID']; -}; - - -export type RootMutationTypeDeleteStackArgs = { - name: Scalars['String']; -}; - - -export type RootMutationTypeDeleteTerraformArgs = { - id: Scalars['ID']; -}; - - -export type RootMutationTypeDeleteTokenArgs = { - id: Scalars['ID']; -}; - - -export type RootMutationTypeDeleteUserArgs = { - id: Scalars['ID']; -}; - - -export type RootMutationTypeDestroyClusterArgs = { - domain: Scalars['String']; - name: Scalars['String']; - provider: Provider; -}; - - -export type RootMutationTypeFollowIncidentArgs = { - attributes: FollowerAttributes; - id: Scalars['ID']; -}; - - -export type RootMutationTypeImpersonateServiceAccountArgs = { - email?: InputMaybe; - id?: InputMaybe; -}; - - -export type RootMutationTypeInstallBundleArgs = { - context: ContextAttributes; - name: Scalars['String']; - oidc: Scalars['Boolean']; - repo: Scalars['String']; -}; - - -export type RootMutationTypeInstallChartArgs = { - attributes: ChartInstallationAttributes; - installationId: Scalars['ID']; -}; - - -export type RootMutationTypeInstallRecipeArgs = { - context: Scalars['Map']; - recipeId: Scalars['ID']; -}; - - -export type RootMutationTypeInstallStackArgs = { - name: Scalars['String']; - provider: Provider; -}; - - -export type RootMutationTypeInstallStackShellArgs = { - context: ContextAttributes; - name: Scalars['String']; - oidc: Scalars['Boolean']; -}; - - -export type RootMutationTypeInstallTerraformArgs = { - attributes: TerraformInstallationAttributes; - installationId: Scalars['ID']; -}; - - -export type RootMutationTypeLinkPublisherArgs = { - token: Scalars['String']; -}; - - -export type RootMutationTypeLoginArgs = { - deviceToken?: InputMaybe; - email: Scalars['String']; - password: Scalars['String']; -}; - - -export type RootMutationTypeLoginTokenArgs = { - deviceToken?: InputMaybe; - token: Scalars['String']; -}; - - -export type RootMutationTypeOauthCallbackArgs = { - code: Scalars['String']; - deviceToken?: InputMaybe; - host?: InputMaybe; - provider: OauthProvider; -}; - - -export type RootMutationTypeOauthConsentArgs = { - challenge: Scalars['String']; - scopes?: InputMaybe>>; -}; - - -export type RootMutationTypePasswordlessLoginArgs = { - token: Scalars['String']; -}; - - -export type RootMutationTypePingWebhookArgs = { - id: Scalars['ID']; - message?: InputMaybe; - repo: Scalars['String']; -}; - - -export type RootMutationTypeProvisionDomainArgs = { - name: Scalars['String']; -}; - - -export type RootMutationTypePublishLogsArgs = { - id: Scalars['ID']; - logs: Scalars['String']; -}; - - -export type RootMutationTypeQuickStackArgs = { - provider: Provider; - repositoryIds?: InputMaybe>>; -}; - - -export type RootMutationTypeReadNotificationsArgs = { - incidentId?: InputMaybe; -}; - - -export type RootMutationTypeRealizeInviteArgs = { - id: Scalars['String']; -}; - - -export type RootMutationTypeRealizeResetTokenArgs = { - attributes: ResetTokenRealization; - id: Scalars['ID']; -}; - - -export type RootMutationTypeReleaseLockArgs = { - attributes: LockAttributes; - repository: Scalars['String']; -}; - - -export type RootMutationTypeSignupArgs = { - account?: InputMaybe; - attributes: UserAttributes; - deviceToken?: InputMaybe; - inviteId?: InputMaybe; -}; - - -export type RootMutationTypeSsoCallbackArgs = { - code: Scalars['String']; - deviceToken?: InputMaybe; -}; - - -export type RootMutationTypeTransferDemoProjectArgs = { - organizationId: Scalars['String']; -}; - - -export type RootMutationTypeUnfollowIncidentArgs = { - id: Scalars['ID']; -}; - - -export type RootMutationTypeUninstallTerraformArgs = { - id: Scalars['ID']; -}; - - -export type RootMutationTypeUnlockRepositoryArgs = { - name: Scalars['String']; -}; - - -export type RootMutationTypeUpdateAccountArgs = { - attributes: AccountAttributes; -}; - - -export type RootMutationTypeUpdateChartArgs = { - attributes: ChartAttributes; - id: Scalars['ID']; -}; - - -export type RootMutationTypeUpdateChartInstallationArgs = { - attributes: ChartInstallationAttributes; - chartInstallationId: Scalars['ID']; -}; - - -export type RootMutationTypeUpdateDockerRepositoryArgs = { - attributes: DockerRepositoryAttributes; - id: Scalars['ID']; -}; - - -export type RootMutationTypeUpdateDomainArgs = { - attributes: DnsDomainAttributes; - id: Scalars['ID']; -}; - - -export type RootMutationTypeUpdateGroupArgs = { - attributes: GroupAttributes; - groupId: Scalars['ID']; -}; - - -export type RootMutationTypeUpdateIncidentArgs = { - attributes: IncidentAttributes; - id: Scalars['ID']; -}; - - -export type RootMutationTypeUpdateInstallationArgs = { - attributes: InstallationAttributes; - id: Scalars['ID']; -}; - - -export type RootMutationTypeUpdateIntegrationWebhookArgs = { - attributes: IntegrationWebhookAttributes; - id: Scalars['ID']; -}; - - -export type RootMutationTypeUpdateLineItemArgs = { - attributes: LimitAttributes; - subscriptionId: Scalars['ID']; -}; - - -export type RootMutationTypeUpdateMessageArgs = { - attributes: IncidentMessageAttributes; - id: Scalars['ID']; -}; - - -export type RootMutationTypeUpdateOidcProviderArgs = { - attributes: OidcAttributes; - installationId: Scalars['ID']; -}; - - -export type RootMutationTypeUpdatePlanArgs = { - planId: Scalars['ID']; - subscriptionId: Scalars['ID']; -}; - - -export type RootMutationTypeUpdatePlanAttributesArgs = { - attributes: UpdatablePlanAttributes; - id: Scalars['ID']; -}; - - -export type RootMutationTypeUpdatePlatformPlanArgs = { - planId: Scalars['ID']; -}; - - -export type RootMutationTypeUpdatePublisherArgs = { - attributes: PublisherAttributes; -}; - - -export type RootMutationTypeUpdateRepositoryArgs = { - attributes: RepositoryAttributes; - repositoryId?: InputMaybe; - repositoryName?: InputMaybe; -}; - - -export type RootMutationTypeUpdateRoleArgs = { - attributes: RoleAttributes; - id: Scalars['ID']; -}; - - -export type RootMutationTypeUpdateServiceAccountArgs = { - attributes: ServiceAccountAttributes; - id: Scalars['ID']; -}; - - -export type RootMutationTypeUpdateShellArgs = { - attributes: CloudShellAttributes; -}; - - -export type RootMutationTypeUpdateShellConfigurationArgs = { - context: Scalars['Map']; -}; - - -export type RootMutationTypeUpdateStepArgs = { - attributes: TestStepAttributes; - id: Scalars['ID']; -}; - - -export type RootMutationTypeUpdateTerraformArgs = { - attributes: TerraformAttributes; - id: Scalars['ID']; -}; - - -export type RootMutationTypeUpdateTestArgs = { - attributes: TestAttributes; - id: Scalars['ID']; -}; - - -export type RootMutationTypeUpdateUserArgs = { - attributes: UserAttributes; - id?: InputMaybe; -}; - - -export type RootMutationTypeUpdateVersionArgs = { - attributes: VersionAttributes; - id?: InputMaybe; - spec?: InputMaybe; -}; - - -export type RootMutationTypeUploadTerraformArgs = { - attributes: TerraformAttributes; - name: Scalars['String']; - repositoryName: Scalars['String']; -}; - - -export type RootMutationTypeUpsertOidcProviderArgs = { - attributes: OidcAttributes; - installationId: Scalars['ID']; -}; - - -export type RootMutationTypeUpsertRepositoryArgs = { - attributes: RepositoryAttributes; - name: Scalars['String']; - publisher: Scalars['String']; -}; - -export type OauthResponse = { - __typename?: 'OauthResponse'; - redirectTo: Scalars['String']; -}; - -export type ApplyLock = { - __typename?: 'ApplyLock'; - id: Scalars['ID']; - insertedAt?: Maybe; - lock?: Maybe; - owner?: Maybe; - repository?: Maybe; - updatedAt?: Maybe; -}; - -export type PostmortemAttributes = { - actionItems?: InputMaybe>>; - content: Scalars['String']; -}; - -export type ActionItemAttributes = { - link: Scalars['String']; - type: ActionItemType; -}; - -export type ArtifactAttributes = { - arch?: InputMaybe; - blob?: InputMaybe; - name: Scalars['String']; - platform: Scalars['String']; - readme: Scalars['String']; - type: Scalars['String']; -}; - -export type AddressAttributes = { - city: Scalars['String']; - country: Scalars['String']; - line1: Scalars['String']; - line2: Scalars['String']; - name?: InputMaybe; - state: Scalars['String']; - zip: Scalars['String']; -}; - -/** Input for creating or updating a cluster. */ -export type ClusterAttributes = { - /** The URL of the console running on the cluster. */ - consoleUrl?: InputMaybe; - /** The domain name used for applications deployed on the cluster. */ - domain?: InputMaybe; - /** The git repository URL for the cluster. */ - gitUrl?: InputMaybe; - /** The name of the cluster. */ - name: Scalars['String']; - /** The cluster's cloud provider. */ - provider: Provider; - /** The source of the cluster. */ - source?: InputMaybe; -}; - -/** A dependncy reference between clusters */ -export type ClusterDependency = { - __typename?: 'ClusterDependency'; - /** the cluster holding this dependency */ - cluster?: Maybe; - /** the source cluster of this dependency */ - dependency?: Maybe; - id: Scalars['ID']; - insertedAt?: Maybe; - updatedAt?: Maybe; -}; - -export type CrdAttributes = { - blob?: InputMaybe; - name: Scalars['String']; -}; - -export type ChartName = { - chart?: InputMaybe; - repo?: InputMaybe; -}; - -export type DnsRecordAttributes = { - name: Scalars['String']; - records?: InputMaybe>>; - type: DnsRecordType; -}; - -export type DnsDomainAttributes = { - accessPolicy?: InputMaybe; - name?: InputMaybe; -}; - -export type DnsAccessPolicyAttributes = { - bindings?: InputMaybe>>; - id?: InputMaybe; -}; - -export type BindingAttributes = { - groupId?: InputMaybe; - id?: InputMaybe; - userId?: InputMaybe; -}; - -export type GroupAttributes = { - description?: InputMaybe; - global?: InputMaybe; - name: Scalars['String']; -}; - -export type IncidentAttributes = { - clusterInformation?: InputMaybe; - description?: InputMaybe; - severity?: InputMaybe; - status?: InputMaybe; - tags?: InputMaybe>>; - title?: InputMaybe; -}; - -export type ClusterInformationAttributes = { - gitCommit?: InputMaybe; - platform?: InputMaybe; - version?: InputMaybe; -}; - -export type TagAttributes = { - tag: Scalars['String']; -}; - -export type IntegrationAttributes = { - description?: InputMaybe; - icon?: InputMaybe; - name: Scalars['String']; - sourceUrl?: InputMaybe; - spec?: InputMaybe; - tags?: InputMaybe>>; - type?: InputMaybe; -}; - -export type IntegrationWebhookAttributes = { - actions?: InputMaybe>>; - name: Scalars['String']; - url: Scalars['String']; -}; - -export type InviteAttributes = { - email?: InputMaybe; -}; - -export type KeyBackupAttributes = { - key: Scalars['String']; - name: Scalars['String']; - repositories?: InputMaybe>>; -}; - -export type IncidentMessageAttributes = { - entities?: InputMaybe>>; - file?: InputMaybe; - text: Scalars['String']; -}; - -export type EntityAttributes = { - endIndex?: InputMaybe; - startIndex?: InputMaybe; - text?: InputMaybe; - type: MessageEntityType; - userId?: InputMaybe; -}; - -export type FileAttributes = { - blob?: InputMaybe; -}; - -export type OauthAttributes = { - code?: InputMaybe; - redirectUri?: InputMaybe; - service?: InputMaybe; -}; - -/** Input for creating or updating the OIDC attributes of an application installation. */ -export type OidcAttributes = { - /** The authentication method for the OIDC provider. */ - authMethod: OidcAuthMethod; - /** The users or groups that can login through the OIDC provider. */ - bindings?: InputMaybe>>; - /** The redirect URIs for the OIDC provider. */ - redirectUris?: InputMaybe>>; -}; - -export type PlanAttributes = { - cost: Scalars['Int']; - default?: InputMaybe; - lineItems?: InputMaybe; - metadata?: InputMaybe; - name: Scalars['String']; - period: Scalars['String']; - serviceLevels?: InputMaybe>>; -}; - -export type PlanLineItemAttributes = { - included?: InputMaybe>>; - items?: InputMaybe>>; -}; - -export type LimitAttributes = { - dimension: Scalars['String']; - quantity: Scalars['Int']; -}; - -export type LineItemAttributes = { - cost: Scalars['Int']; - dimension: Scalars['String']; - name: Scalars['String']; - period: Scalars['String']; - type?: InputMaybe; -}; - -export type PlanMetadataAttributes = { - features?: InputMaybe>>; - freeform?: InputMaybe; -}; - -export type PlanFeatureAttributes = { - description: Scalars['String']; - name: Scalars['String']; -}; - -export type ServiceLevelAttributes = { - maxSeverity?: InputMaybe; - minSeverity?: InputMaybe; - responseTime?: InputMaybe; -}; - -export type PublicKeyAttributes = { - content: Scalars['String']; - name: Scalars['String']; -}; - -export type PublisherAttributes = { - address?: InputMaybe; - avatar?: InputMaybe; - community?: InputMaybe; - description?: InputMaybe; - name?: InputMaybe; - phone?: InputMaybe; -}; - -/** Input for creating or updating the community links of an application. */ -export type CommunityAttributes = { - /** The application's Discord server. */ - discord?: InputMaybe; - /** The application's git URL. */ - gitUrl?: InputMaybe; - /** The application's homepage. */ - homepage?: InputMaybe; - /** The application's Slack channel. */ - slack?: InputMaybe; - /** The application's Twitter account. */ - twitter?: InputMaybe; - /** The videos of the application. */ - videos?: InputMaybe>>; -}; - -export type UpgradeQueueAttributes = { - domain?: InputMaybe; - git?: InputMaybe; - name: Scalars['String']; - provider?: InputMaybe; -}; - -export type RecipeAttributes = { - dependencies?: InputMaybe>>; - description?: InputMaybe; - name: Scalars['String']; - oidcSettings?: InputMaybe; - primary?: InputMaybe; - private?: InputMaybe; - provider?: InputMaybe; - restricted?: InputMaybe; - sections?: InputMaybe>>; - tests?: InputMaybe>>; -}; - -export type RecipeReference = { - name: Scalars['String']; - repo: Scalars['String']; -}; - -export type OidcSettingsAttributes = { - authMethod: OidcAuthMethod; - domainKey?: InputMaybe; - subdomain?: InputMaybe; - uriFormat?: InputMaybe; - uriFormats?: InputMaybe>>; -}; - -export type RecipeSectionAttributes = { - configuration?: InputMaybe>>; - items?: InputMaybe>>; - name: Scalars['String']; -}; - -export type RecipeConfigurationAttributes = { - condition?: InputMaybe; - default?: InputMaybe; - documentation?: InputMaybe; - functionName?: InputMaybe; - longform?: InputMaybe; - name: Scalars['String']; - optional?: InputMaybe; - placeholder?: InputMaybe; - type: Datatype; - validation?: InputMaybe; -}; - -export type RecipeConditionAttributes = { - field: Scalars['String']; - operation: Operation; - value?: InputMaybe; -}; - -export type RecipeValidationAttributes = { - message: Scalars['String']; - regex?: InputMaybe; - type: ValidationType; -}; - -export type RecipeItemAttributes = { - configuration?: InputMaybe>>; - name: Scalars['String']; - type: RecipeItemType; -}; - -export enum RecipeItemType { - Helm = 'HELM', - Terraform = 'TERRAFORM' -} - -export type RecipeTestAttributes = { - args?: InputMaybe>>; - message?: InputMaybe; - name: Scalars['String']; - type: TestType; -}; - -export type TestArgumentAttributes = { - key: Scalars['String']; - name: Scalars['String']; - repo: Scalars['String']; -}; - -/** Input for creating or updating an application's attributes. */ -export type RepositoryAttributes = { - /** The category of the application. */ - category?: InputMaybe; - /** The application's community links. */ - community?: InputMaybe; - /** The application's dark icon. */ - darkIcon?: InputMaybe; - /** The default tag to use when deploying the application. */ - defaultTag?: InputMaybe; - /** A short description of the application. */ - description?: InputMaybe; - /** The application's documentation. */ - docs?: InputMaybe; - /** A link to the application's documentation. */ - documentation?: InputMaybe; - /** The application's git URL. */ - gitUrl?: InputMaybe; - /** The application's homepage. */ - homepage?: InputMaybe; - /** The application's icon. */ - icon?: InputMaybe; - /** The application's integration resource definition. */ - integrationResourceDefinition?: InputMaybe; - /** The name of the application. */ - name?: InputMaybe; - /** Notes about the application rendered after deploying and displayed to the user. */ - notes?: InputMaybe; - /** The application's OAuth settings. */ - oauthSettings?: InputMaybe; - /** Whether the application is private. */ - private?: InputMaybe; - /** The application's README. */ - readme?: InputMaybe; - /** A YAML object of secrets. */ - secrets?: InputMaybe; - /** The application's tags. */ - tags?: InputMaybe>>; - /** Whether the application is trending. */ - trending?: InputMaybe; - /** Whether the application is verified. */ - verified?: InputMaybe; -}; - -export type ResourceDefinitionAttributes = { - name: Scalars['String']; - spec?: InputMaybe>>; -}; - -export type SpecificationAttributes = { - inner?: InputMaybe; - name: Scalars['String']; - required?: InputMaybe; - spec?: InputMaybe>>; - type: SpecDatatype; -}; - -export enum SpecDatatype { - Bool = 'BOOL', - Float = 'FLOAT', - Int = 'INT', - List = 'LIST', - Object = 'OBJECT', - String = 'STRING' -} - -/** Input for the application's OAuth settings. */ -export type OauthSettingsAttributes = { - /** The authentication method for the OAuth provider. */ - authMethod: OidcAuthMethod; - /** The URI format for the OAuth provider. */ - uriFormat: Scalars['String']; -}; - -export type ResetTokenAttributes = { - email?: InputMaybe; - type: ResetTokenType; -}; - -export type RoleAttributes = { - description?: InputMaybe; - name?: InputMaybe; - permissions?: InputMaybe>>; - repositories?: InputMaybe>>; - roleBindings?: InputMaybe>>; -}; - -export type ServiceAccountAttributes = { - email?: InputMaybe; - impersonationPolicy?: InputMaybe; - name?: InputMaybe; -}; - -export type ImpersonationPolicyAttributes = { - bindings?: InputMaybe>>; - id?: InputMaybe; -}; - -export type ImpersonationPolicyBindingAttributes = { - groupId?: InputMaybe; - id?: InputMaybe; - userId?: InputMaybe; -}; - -export type CloudShellAttributes = { - credentials: ShellCredentialsAttributes; - demoId?: InputMaybe; - provider?: InputMaybe; - scm?: InputMaybe; - workspace: WorkspaceAttributes; -}; - -export type ShellCredentialsAttributes = { - aws?: InputMaybe; - azure?: InputMaybe; - gcp?: InputMaybe; -}; - -export type AwsShellCredentialsAttributes = { - accessKeyId: Scalars['String']; - secretAccessKey: Scalars['String']; -}; - -export type AzureShellCredentialsAttributes = { - clientId: Scalars['String']; - clientSecret: Scalars['String']; - storageAccount: Scalars['String']; - subscriptionId: Scalars['String']; - tenantId: Scalars['String']; -}; - -export type GcpShellCredentialsAttributes = { - applicationCredentials: Scalars['String']; -}; - -export type ScmAttributes = { - gitUrl?: InputMaybe; - name?: InputMaybe; - org?: InputMaybe; - privateKey?: InputMaybe; - provider?: InputMaybe; - publicKey?: InputMaybe; - token?: InputMaybe; -}; - -export type WorkspaceAttributes = { - bucketPrefix: Scalars['String']; - cluster: Scalars['String']; - project?: InputMaybe; - region: Scalars['String']; - subdomain: Scalars['String']; -}; - -export type StackAttributes = { - collections?: InputMaybe>>; - community?: InputMaybe; - description?: InputMaybe; - displayName?: InputMaybe; - featured?: InputMaybe; - name: Scalars['String']; -}; - -export type StackCollectionAttributes = { - bundles?: InputMaybe>>; - provider: Provider; -}; - -export type SubscriptionAttributes = { - lineItems?: InputMaybe; -}; - -export type SubscriptionLineItemAttributes = { - items?: InputMaybe>>; -}; - -export type TerraformAttributes = { - dependencies?: InputMaybe; - description?: InputMaybe; - name?: InputMaybe; - package?: InputMaybe; - version?: InputMaybe; -}; - -export type TestAttributes = { - name?: InputMaybe; - promoteTag?: InputMaybe; - status?: InputMaybe; - steps?: InputMaybe>>; - tags?: InputMaybe>>; -}; - -export type TestStepAttributes = { - description?: InputMaybe; - id?: InputMaybe; - logs?: InputMaybe; - name?: InputMaybe; - status?: InputMaybe; -}; - -export type UserEventAttributes = { - data?: InputMaybe; - event: Scalars['String']; - status?: InputMaybe; -}; - -export enum UserEventStatus { - Error = 'ERROR', - Ok = 'OK' -} - -export type WebhookAttributes = { - url: Scalars['String']; -}; - -export type MeetingAttributes = { - incidentId?: InputMaybe; - topic: Scalars['String']; -}; - -export type ZoomMeeting = { - __typename?: 'ZoomMeeting'; - joinUrl: Scalars['String']; - password?: Maybe; -}; - -export type DeviceLogin = { - __typename?: 'DeviceLogin'; - deviceToken: Scalars['String']; - loginUrl: Scalars['String']; -}; - -export type FollowerAttributes = { - preferences?: InputMaybe; -}; - -export type NotificationPreferencesAttributes = { - incidentUpdate: Scalars['Boolean']; - mention: Scalars['Boolean']; - message: Scalars['Boolean']; -}; - -export type ContextAttributes = { - buckets?: InputMaybe>>; - configuration: Scalars['Map']; - domains?: InputMaybe>>; -}; - -export type ChartInstallationAttributes = { - chartId?: InputMaybe; - versionId?: InputMaybe; -}; - -export type TerraformInstallationAttributes = { - terraformId?: InputMaybe; - versionId?: InputMaybe; -}; - -export type WebhookResponse = { - __typename?: 'WebhookResponse'; - body?: Maybe; - headers?: Maybe; - statusCode: Scalars['Int']; -}; - -export type ResetTokenRealization = { - password?: InputMaybe; -}; - -export type LockAttributes = { - lock: Scalars['String']; -}; - -export type AccountAttributes = { - billingAddress?: InputMaybe; - domainMappings?: InputMaybe>>; - icon?: InputMaybe; - name?: InputMaybe; -}; - -export type DomainMappingInput = { - domain?: InputMaybe; - enableSso?: InputMaybe; - id?: InputMaybe; -}; - -export type UserAttributes = { - avatar?: InputMaybe; - confirm?: InputMaybe; - email?: InputMaybe; - loginMethod?: InputMaybe; - name?: InputMaybe; - onboarding?: InputMaybe; - onboardingChecklist?: InputMaybe; - password?: InputMaybe; - roles?: InputMaybe; -}; - -export type OnboardingChecklistAttributes = { - dismissed?: InputMaybe; - status?: InputMaybe; -}; - -export type RolesAttributes = { - admin?: InputMaybe; -}; - -export type ChartAttributes = { - tags?: InputMaybe>>; -}; - -export type VersionTagAttributes = { - tag: Scalars['String']; - versionId?: InputMaybe; -}; - -export type DockerRepositoryAttributes = { - public: Scalars['Boolean']; -}; - -/** Input for creating or updating the tag attributes of an application installation. */ -export type InstallationAttributes = { - /** Whether the application should auto upgrade. */ - autoUpgrade?: InputMaybe; - /** A YAML object of context. */ - context?: InputMaybe; - /** The tag to track for auto upgrades. */ - trackTag?: InputMaybe; -}; - -export type UpdatablePlanAttributes = { - default?: InputMaybe; - serviceLevels?: InputMaybe>>; -}; - -export type VersionAttributes = { - tags?: InputMaybe>>; -}; - -export type VersionSpec = { - chart?: InputMaybe; - repository?: InputMaybe; - terraform?: InputMaybe; - version?: InputMaybe; -}; - -export type RootSubscriptionType = { - __typename?: 'RootSubscriptionType'; - incidentDelta?: Maybe; - incidentMessageDelta?: Maybe; - notification?: Maybe; - rolloutDelta?: Maybe; - testDelta?: Maybe; - testLogs?: Maybe; - upgrade?: Maybe; - upgradeQueueDelta?: Maybe; -}; - - -export type RootSubscriptionTypeIncidentDeltaArgs = { - incidentId?: InputMaybe; - repositoryId?: InputMaybe; -}; - - -export type RootSubscriptionTypeIncidentMessageDeltaArgs = { - incidentId?: InputMaybe; -}; - - -export type RootSubscriptionTypeRolloutDeltaArgs = { - repositoryId: Scalars['ID']; -}; - - -export type RootSubscriptionTypeTestDeltaArgs = { - repositoryId: Scalars['ID']; -}; - - -export type RootSubscriptionTypeTestLogsArgs = { - testId: Scalars['ID']; -}; - - -export type RootSubscriptionTypeUpgradeArgs = { - id?: InputMaybe; -}; - -export type IncidentDelta = { - __typename?: 'IncidentDelta'; - delta?: Maybe; - payload?: Maybe; -}; - -export enum Delta { - Create = 'CREATE', - Delete = 'DELETE', - Update = 'UPDATE' -} - -export type IncidentMessageDelta = { - __typename?: 'IncidentMessageDelta'; - delta?: Maybe; - payload?: Maybe; -}; - -export type RolloutDelta = { - __typename?: 'RolloutDelta'; - delta?: Maybe; - payload?: Maybe; -}; - -export type TestDelta = { - __typename?: 'TestDelta'; - delta?: Maybe; - payload?: Maybe; -}; - -export type StepLogs = { - __typename?: 'StepLogs'; - logs?: Maybe>>; - step?: Maybe; -}; - -export type UpgradeQueueDelta = { - __typename?: 'UpgradeQueueDelta'; - delta?: Maybe; - payload?: Maybe; -}; - -export type AuditFragment = { __typename?: 'Audit', id: string, action: string, ip?: string | null, country?: string | null, city?: string | null, latitude?: string | null, longitude?: string | null, insertedAt?: Date | null, actor?: { __typename?: 'User', id: string, name: string, email: string, avatar?: string | null, provider?: Provider | null, demoing?: boolean | null, demoed?: boolean | null, onboarding?: OnboardingState | null, emailConfirmed?: boolean | null, emailConfirmBy?: Date | null, backgroundColor?: string | null, serviceAccount?: boolean | null, onboardingChecklist?: { __typename?: 'OnboardingChecklist', dismissed?: boolean | null, status?: OnboardingChecklistState | null } | null, roles?: { __typename?: 'Roles', admin?: boolean | null } | null } | null, repository?: { __typename?: 'Repository', id: string, name: string, notes?: string | null, description?: string | null, documentation?: string | null, icon?: string | null, darkIcon?: string | null, private?: boolean | null, trending?: boolean | null, verified?: boolean | null, category?: Category | null, oauthSettings?: { __typename?: 'OauthSettings', uriFormat: string, authMethod: OidcAuthMethod } | null, publisher?: { __typename?: 'Publisher', id?: string | null, name: string, phone?: string | null, avatar?: string | null, description?: string | null, backgroundColor?: string | null, owner?: { __typename?: 'User', id: string, name: string, email: string, avatar?: string | null, provider?: Provider | null, demoing?: boolean | null, demoed?: boolean | null, onboarding?: OnboardingState | null, emailConfirmed?: boolean | null, emailConfirmBy?: Date | null, backgroundColor?: string | null, serviceAccount?: boolean | null, onboardingChecklist?: { __typename?: 'OnboardingChecklist', dismissed?: boolean | null, status?: OnboardingChecklistState | null } | null, roles?: { __typename?: 'Roles', admin?: boolean | null } | null } | null, address?: { __typename?: 'Address', line1?: string | null, line2?: string | null, city?: string | null, country?: string | null, state?: string | null, zip?: string | null } | null } | null, recipes?: Array<{ __typename?: 'Recipe', name: string, provider?: Provider | null, description?: string | null } | null> | null } | null, group?: { __typename?: 'Group', id: string, name: string, global?: boolean | null, description?: string | null } | null, integrationWebhook?: { __typename?: 'IntegrationWebhook', id: string, name: string, url: string, secret: string, actions?: Array | null } | null, role?: { __typename?: 'Role', id: string, name: string, description?: string | null, repositories?: Array | null, permissions?: Array | null, roleBindings?: Array<{ __typename?: 'RoleBinding', id: string, user?: { __typename?: 'User', id: string, name: string, email: string, avatar?: string | null, provider?: Provider | null, demoing?: boolean | null, demoed?: boolean | null, onboarding?: OnboardingState | null, emailConfirmed?: boolean | null, emailConfirmBy?: Date | null, backgroundColor?: string | null, serviceAccount?: boolean | null, onboardingChecklist?: { __typename?: 'OnboardingChecklist', dismissed?: boolean | null, status?: OnboardingChecklistState | null } | null, roles?: { __typename?: 'Roles', admin?: boolean | null } | null } | null, group?: { __typename?: 'Group', id: string, name: string, global?: boolean | null, description?: string | null } | null } | null> | null } | null, version?: { __typename?: 'Version', id: string, helm?: Map | null, readme?: string | null, valuesTemplate?: string | null, version: string, insertedAt?: Date | null, package?: string | null, crds?: Array<{ __typename?: 'Crd', id: string, name: string, blob?: string | null } | null> | null, chart?: { __typename?: 'Chart', id?: string | null, name: string, description?: string | null, latestVersion?: string | null, insertedAt?: Date | null, dependencies?: { __typename?: 'Dependencies', wait?: boolean | null, application?: boolean | null, providers?: Array | null, secrets?: Array | null, providerWirings?: Map | null, outputs?: Map | null, dependencies?: Array<{ __typename?: 'Dependency', name?: string | null, repo?: string | null, type?: DependencyType | null, version?: string | null, optional?: boolean | null } | null> | null, wirings?: { __typename?: 'Wirings', terraform?: Map | null, helm?: Map | null } | null } | null } | null, terraform?: { __typename?: 'Terraform', id?: string | null, name?: string | null } | null, dependencies?: { __typename?: 'Dependencies', wait?: boolean | null, application?: boolean | null, providers?: Array | null, secrets?: Array | null, providerWirings?: Map | null, outputs?: Map | null, dependencies?: Array<{ __typename?: 'Dependency', name?: string | null, repo?: string | null, type?: DependencyType | null, version?: string | null, optional?: boolean | null } | null> | null, wirings?: { __typename?: 'Wirings', terraform?: Map | null, helm?: Map | null } | null } | null } | null, image?: { __typename?: 'DockerImage', id: string, tag?: string | null, dockerRepository?: { __typename?: 'DockerRepository', name: string } | null } | null }; - -export type PolicyBindingFragment = { __typename?: 'PolicyBinding', id: string, group?: { __typename?: 'Group', id: string, name: string } | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null }; - -export type DnsDomainFragment = { __typename?: 'DnsDomain', id: string, name: string, insertedAt?: Date | null, creator?: { __typename?: 'User', id: string, name: string, email: string, avatar?: string | null, provider?: Provider | null, demoing?: boolean | null, demoed?: boolean | null, onboarding?: OnboardingState | null, emailConfirmed?: boolean | null, emailConfirmBy?: Date | null, backgroundColor?: string | null, serviceAccount?: boolean | null, onboardingChecklist?: { __typename?: 'OnboardingChecklist', dismissed?: boolean | null, status?: OnboardingChecklistState | null } | null, roles?: { __typename?: 'Roles', admin?: boolean | null } | null } | null, accessPolicy?: { __typename?: 'DnsAccessPolicy', id: string, bindings?: Array<{ __typename?: 'PolicyBinding', id: string, group?: { __typename?: 'Group', id: string, name: string } | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null } | null> | null } | null }; - -export type InviteFragment = { __typename?: 'Invite', id: string, secureId?: string | null, email?: string | null, insertedAt?: Date | null }; - -export type OidcLoginFragment = { __typename?: 'OidcLogin', ip?: string | null, country?: string | null, city?: string | null, latitude?: string | null, longitude?: string | null, insertedAt?: Date | null, user?: { __typename?: 'User', id: string, name: string, email: string, avatar?: string | null, provider?: Provider | null, demoing?: boolean | null, demoed?: boolean | null, onboarding?: OnboardingState | null, emailConfirmed?: boolean | null, emailConfirmBy?: Date | null, backgroundColor?: string | null, serviceAccount?: boolean | null, onboardingChecklist?: { __typename?: 'OnboardingChecklist', dismissed?: boolean | null, status?: OnboardingChecklistState | null } | null, roles?: { __typename?: 'Roles', admin?: boolean | null } | null } | null, owner?: { __typename?: 'User', id: string, name: string, email: string, avatar?: string | null, provider?: Provider | null, demoing?: boolean | null, demoed?: boolean | null, onboarding?: OnboardingState | null, emailConfirmed?: boolean | null, emailConfirmBy?: Date | null, backgroundColor?: string | null, serviceAccount?: boolean | null, onboardingChecklist?: { __typename?: 'OnboardingChecklist', dismissed?: boolean | null, status?: OnboardingChecklistState | null } | null, roles?: { __typename?: 'Roles', admin?: boolean | null } | null } | null, repository?: { __typename?: 'Repository', id: string, name: string, notes?: string | null, description?: string | null, documentation?: string | null, icon?: string | null, darkIcon?: string | null, private?: boolean | null, trending?: boolean | null, verified?: boolean | null, category?: Category | null, oauthSettings?: { __typename?: 'OauthSettings', uriFormat: string, authMethod: OidcAuthMethod } | null, publisher?: { __typename?: 'Publisher', id?: string | null, name: string, phone?: string | null, avatar?: string | null, description?: string | null, backgroundColor?: string | null, owner?: { __typename?: 'User', id: string, name: string, email: string, avatar?: string | null, provider?: Provider | null, demoing?: boolean | null, demoed?: boolean | null, onboarding?: OnboardingState | null, emailConfirmed?: boolean | null, emailConfirmBy?: Date | null, backgroundColor?: string | null, serviceAccount?: boolean | null, onboardingChecklist?: { __typename?: 'OnboardingChecklist', dismissed?: boolean | null, status?: OnboardingChecklistState | null } | null, roles?: { __typename?: 'Roles', admin?: boolean | null } | null } | null, address?: { __typename?: 'Address', line1?: string | null, line2?: string | null, city?: string | null, country?: string | null, state?: string | null, zip?: string | null } | null } | null, recipes?: Array<{ __typename?: 'Recipe', name: string, provider?: Provider | null, description?: string | null } | null> | null } | null }; - -export type UpdateAccountMutationVariables = Exact<{ - attributes: AccountAttributes; -}>; - - -export type UpdateAccountMutation = { __typename?: 'RootMutationType', updateAccount?: { __typename?: 'Account', id: string, name?: string | null, billingCustomerId?: string | null, backgroundColor?: string | null, domainMappings?: Array<{ __typename?: 'DomainMapping', id: string, domain: string, enableSso?: boolean | null } | null> | null } | null }; - -export type ArtifactFragment = { __typename?: 'Artifact', id?: string | null, name?: string | null, blob?: string | null, type?: ArtifactType | null, platform?: ArtifactPlatform | null, arch?: string | null, filesize?: number | null, sha?: string | null, readme?: string | null, insertedAt?: Date | null, updatedAt?: Date | null }; - -export type ListArtifactsQueryVariables = Exact<{ - id: Scalars['ID']; -}>; - - -export type ListArtifactsQuery = { __typename?: 'RootQueryType', repository?: { __typename?: 'Repository', artifacts?: Array<{ __typename?: 'Artifact', id?: string | null, name?: string | null, blob?: string | null, type?: ArtifactType | null, platform?: ArtifactPlatform | null, arch?: string | null, filesize?: number | null, sha?: string | null, readme?: string | null, insertedAt?: Date | null, updatedAt?: Date | null } | null> | null } | null }; - -export type CreateArtifactMutationVariables = Exact<{ - repoName: Scalars['String']; - name: Scalars['String']; - readme: Scalars['String']; - artifactType: Scalars['String']; - platform: Scalars['String']; - blob: Scalars['UploadOrUrl']; - arch?: InputMaybe; -}>; - - -export type CreateArtifactMutation = { __typename?: 'RootMutationType', createArtifact?: { __typename?: 'Artifact', id?: string | null, name?: string | null, blob?: string | null, type?: ArtifactType | null, platform?: ArtifactPlatform | null, arch?: string | null, filesize?: number | null, sha?: string | null, readme?: string | null, insertedAt?: Date | null, updatedAt?: Date | null } | null }; - -export type ChartFragment = { __typename?: 'Chart', id?: string | null, name: string, description?: string | null, latestVersion?: string | null, insertedAt?: Date | null, dependencies?: { __typename?: 'Dependencies', wait?: boolean | null, application?: boolean | null, providers?: Array | null, secrets?: Array | null, providerWirings?: Map | null, outputs?: Map | null, dependencies?: Array<{ __typename?: 'Dependency', name?: string | null, repo?: string | null, type?: DependencyType | null, version?: string | null, optional?: boolean | null } | null> | null, wirings?: { __typename?: 'Wirings', terraform?: Map | null, helm?: Map | null } | null } | null }; - -export type CrdFragment = { __typename?: 'Crd', id: string, name: string, blob?: string | null }; - -export type ChartInstallationFragment = { __typename?: 'ChartInstallation', id?: string | null, chart?: { __typename?: 'Chart', id?: string | null, name: string, description?: string | null, latestVersion?: string | null, insertedAt?: Date | null, dependencies?: { __typename?: 'Dependencies', wait?: boolean | null, application?: boolean | null, providers?: Array | null, secrets?: Array | null, providerWirings?: Map | null, outputs?: Map | null, dependencies?: Array<{ __typename?: 'Dependency', name?: string | null, repo?: string | null, type?: DependencyType | null, version?: string | null, optional?: boolean | null } | null> | null, wirings?: { __typename?: 'Wirings', terraform?: Map | null, helm?: Map | null } | null } | null } | null, version?: { __typename?: 'Version', id: string, helm?: Map | null, readme?: string | null, valuesTemplate?: string | null, version: string, insertedAt?: Date | null, package?: string | null, crds?: Array<{ __typename?: 'Crd', id: string, name: string, blob?: string | null } | null> | null, chart?: { __typename?: 'Chart', id?: string | null, name: string, description?: string | null, latestVersion?: string | null, insertedAt?: Date | null, dependencies?: { __typename?: 'Dependencies', wait?: boolean | null, application?: boolean | null, providers?: Array | null, secrets?: Array | null, providerWirings?: Map | null, outputs?: Map | null, dependencies?: Array<{ __typename?: 'Dependency', name?: string | null, repo?: string | null, type?: DependencyType | null, version?: string | null, optional?: boolean | null } | null> | null, wirings?: { __typename?: 'Wirings', terraform?: Map | null, helm?: Map | null } | null } | null } | null, terraform?: { __typename?: 'Terraform', id?: string | null, name?: string | null } | null, dependencies?: { __typename?: 'Dependencies', wait?: boolean | null, application?: boolean | null, providers?: Array | null, secrets?: Array | null, providerWirings?: Map | null, outputs?: Map | null, dependencies?: Array<{ __typename?: 'Dependency', name?: string | null, repo?: string | null, type?: DependencyType | null, version?: string | null, optional?: boolean | null } | null> | null, wirings?: { __typename?: 'Wirings', terraform?: Map | null, helm?: Map | null } | null } | null } | null }; - -export type ScanViolationFragment = { __typename?: 'ScanViolation', ruleName?: string | null, description?: string | null, ruleId?: string | null, severity?: VulnGrade | null, category?: string | null, resourceName?: string | null, resourceType?: string | null, file?: string | null, line?: number | null }; - -export type ScanErrorFragment = { __typename?: 'ScanError', message?: string | null }; - -export type PackageScanFragment = { __typename?: 'PackageScan', id: string, grade?: ImageGrade | null, violations?: Array<{ __typename?: 'ScanViolation', ruleName?: string | null, description?: string | null, ruleId?: string | null, severity?: VulnGrade | null, category?: string | null, resourceName?: string | null, resourceType?: string | null, file?: string | null, line?: number | null } | null> | null, errors?: Array<{ __typename?: 'ScanError', message?: string | null } | null> | null }; - -export type GetChartsQueryVariables = Exact<{ - id: Scalars['ID']; -}>; - - -export type GetChartsQuery = { __typename?: 'RootQueryType', charts?: { __typename?: 'ChartConnection', edges?: Array<{ __typename?: 'ChartEdge', node?: { __typename?: 'Chart', id?: string | null, name: string, description?: string | null, latestVersion?: string | null, insertedAt?: Date | null, dependencies?: { __typename?: 'Dependencies', wait?: boolean | null, application?: boolean | null, providers?: Array | null, secrets?: Array | null, providerWirings?: Map | null, outputs?: Map | null, dependencies?: Array<{ __typename?: 'Dependency', name?: string | null, repo?: string | null, type?: DependencyType | null, version?: string | null, optional?: boolean | null } | null> | null, wirings?: { __typename?: 'Wirings', terraform?: Map | null, helm?: Map | null } | null } | null } | null } | null> | null } | null }; - -export type GetVersionsQueryVariables = Exact<{ - id: Scalars['ID']; -}>; - - -export type GetVersionsQuery = { __typename?: 'RootQueryType', versions?: { __typename?: 'VersionConnection', edges?: Array<{ __typename?: 'VersionEdge', node?: { __typename?: 'Version', id: string, helm?: Map | null, readme?: string | null, valuesTemplate?: string | null, version: string, insertedAt?: Date | null, package?: string | null, crds?: Array<{ __typename?: 'Crd', id: string, name: string, blob?: string | null } | null> | null, chart?: { __typename?: 'Chart', id?: string | null, name: string, description?: string | null, latestVersion?: string | null, insertedAt?: Date | null, dependencies?: { __typename?: 'Dependencies', wait?: boolean | null, application?: boolean | null, providers?: Array | null, secrets?: Array | null, providerWirings?: Map | null, outputs?: Map | null, dependencies?: Array<{ __typename?: 'Dependency', name?: string | null, repo?: string | null, type?: DependencyType | null, version?: string | null, optional?: boolean | null } | null> | null, wirings?: { __typename?: 'Wirings', terraform?: Map | null, helm?: Map | null } | null } | null } | null, terraform?: { __typename?: 'Terraform', id?: string | null, name?: string | null } | null, dependencies?: { __typename?: 'Dependencies', wait?: boolean | null, application?: boolean | null, providers?: Array | null, secrets?: Array | null, providerWirings?: Map | null, outputs?: Map | null, dependencies?: Array<{ __typename?: 'Dependency', name?: string | null, repo?: string | null, type?: DependencyType | null, version?: string | null, optional?: boolean | null } | null> | null, wirings?: { __typename?: 'Wirings', terraform?: Map | null, helm?: Map | null } | null } | null } | null } | null> | null } | null }; - -export type GetChartInstallationsQueryVariables = Exact<{ - id: Scalars['ID']; -}>; - - -export type GetChartInstallationsQuery = { __typename?: 'RootQueryType', chartInstallations?: { __typename?: 'ChartInstallationConnection', edges?: Array<{ __typename?: 'ChartInstallationEdge', node?: { __typename?: 'ChartInstallation', id?: string | null, chart?: { __typename?: 'Chart', id?: string | null, name: string, description?: string | null, latestVersion?: string | null, insertedAt?: Date | null, dependencies?: { __typename?: 'Dependencies', wait?: boolean | null, application?: boolean | null, providers?: Array | null, secrets?: Array | null, providerWirings?: Map | null, outputs?: Map | null, dependencies?: Array<{ __typename?: 'Dependency', name?: string | null, repo?: string | null, type?: DependencyType | null, version?: string | null, optional?: boolean | null } | null> | null, wirings?: { __typename?: 'Wirings', terraform?: Map | null, helm?: Map | null } | null } | null } | null, version?: { __typename?: 'Version', id: string, helm?: Map | null, readme?: string | null, valuesTemplate?: string | null, version: string, insertedAt?: Date | null, package?: string | null, crds?: Array<{ __typename?: 'Crd', id: string, name: string, blob?: string | null } | null> | null, chart?: { __typename?: 'Chart', id?: string | null, name: string, description?: string | null, latestVersion?: string | null, insertedAt?: Date | null, dependencies?: { __typename?: 'Dependencies', wait?: boolean | null, application?: boolean | null, providers?: Array | null, secrets?: Array | null, providerWirings?: Map | null, outputs?: Map | null, dependencies?: Array<{ __typename?: 'Dependency', name?: string | null, repo?: string | null, type?: DependencyType | null, version?: string | null, optional?: boolean | null } | null> | null, wirings?: { __typename?: 'Wirings', terraform?: Map | null, helm?: Map | null } | null } | null } | null, terraform?: { __typename?: 'Terraform', id?: string | null, name?: string | null } | null, dependencies?: { __typename?: 'Dependencies', wait?: boolean | null, application?: boolean | null, providers?: Array | null, secrets?: Array | null, providerWirings?: Map | null, outputs?: Map | null, dependencies?: Array<{ __typename?: 'Dependency', name?: string | null, repo?: string | null, type?: DependencyType | null, version?: string | null, optional?: boolean | null } | null> | null, wirings?: { __typename?: 'Wirings', terraform?: Map | null, helm?: Map | null } | null } | null } | null } | null } | null> | null } | null }; - -export type GetPackageInstallationsQueryVariables = Exact<{ - id: Scalars['ID']; -}>; - - -export type GetPackageInstallationsQuery = { __typename?: 'RootQueryType', chartInstallations?: { __typename?: 'ChartInstallationConnection', edges?: Array<{ __typename?: 'ChartInstallationEdge', node?: { __typename?: 'ChartInstallation', id?: string | null, chart?: { __typename?: 'Chart', id?: string | null, name: string, description?: string | null, latestVersion?: string | null, insertedAt?: Date | null, dependencies?: { __typename?: 'Dependencies', wait?: boolean | null, application?: boolean | null, providers?: Array | null, secrets?: Array | null, providerWirings?: Map | null, outputs?: Map | null, dependencies?: Array<{ __typename?: 'Dependency', name?: string | null, repo?: string | null, type?: DependencyType | null, version?: string | null, optional?: boolean | null } | null> | null, wirings?: { __typename?: 'Wirings', terraform?: Map | null, helm?: Map | null } | null } | null } | null, version?: { __typename?: 'Version', id: string, helm?: Map | null, readme?: string | null, valuesTemplate?: string | null, version: string, insertedAt?: Date | null, package?: string | null, crds?: Array<{ __typename?: 'Crd', id: string, name: string, blob?: string | null } | null> | null, chart?: { __typename?: 'Chart', id?: string | null, name: string, description?: string | null, latestVersion?: string | null, insertedAt?: Date | null, dependencies?: { __typename?: 'Dependencies', wait?: boolean | null, application?: boolean | null, providers?: Array | null, secrets?: Array | null, providerWirings?: Map | null, outputs?: Map | null, dependencies?: Array<{ __typename?: 'Dependency', name?: string | null, repo?: string | null, type?: DependencyType | null, version?: string | null, optional?: boolean | null } | null> | null, wirings?: { __typename?: 'Wirings', terraform?: Map | null, helm?: Map | null } | null } | null } | null, terraform?: { __typename?: 'Terraform', id?: string | null, name?: string | null } | null, dependencies?: { __typename?: 'Dependencies', wait?: boolean | null, application?: boolean | null, providers?: Array | null, secrets?: Array | null, providerWirings?: Map | null, outputs?: Map | null, dependencies?: Array<{ __typename?: 'Dependency', name?: string | null, repo?: string | null, type?: DependencyType | null, version?: string | null, optional?: boolean | null } | null> | null, wirings?: { __typename?: 'Wirings', terraform?: Map | null, helm?: Map | null } | null } | null } | null } | null } | null> | null } | null, terraformInstallations?: { __typename?: 'TerraformInstallationConnection', edges?: Array<{ __typename?: 'TerraformInstallationEdge', node?: { __typename?: 'TerraformInstallation', id?: string | null, terraform?: { __typename?: 'Terraform', id?: string | null, name?: string | null, readme?: string | null, package?: string | null, description?: string | null, latestVersion?: string | null, valuesTemplate?: string | null, insertedAt?: Date | null, dependencies?: { __typename?: 'Dependencies', wait?: boolean | null, application?: boolean | null, providers?: Array | null, secrets?: Array | null, providerWirings?: Map | null, outputs?: Map | null, dependencies?: Array<{ __typename?: 'Dependency', name?: string | null, repo?: string | null, type?: DependencyType | null, version?: string | null, optional?: boolean | null } | null> | null, wirings?: { __typename?: 'Wirings', terraform?: Map | null, helm?: Map | null } | null } | null } | null, version?: { __typename?: 'Version', id: string, helm?: Map | null, readme?: string | null, valuesTemplate?: string | null, version: string, insertedAt?: Date | null, package?: string | null, crds?: Array<{ __typename?: 'Crd', id: string, name: string, blob?: string | null } | null> | null, chart?: { __typename?: 'Chart', id?: string | null, name: string, description?: string | null, latestVersion?: string | null, insertedAt?: Date | null, dependencies?: { __typename?: 'Dependencies', wait?: boolean | null, application?: boolean | null, providers?: Array | null, secrets?: Array | null, providerWirings?: Map | null, outputs?: Map | null, dependencies?: Array<{ __typename?: 'Dependency', name?: string | null, repo?: string | null, type?: DependencyType | null, version?: string | null, optional?: boolean | null } | null> | null, wirings?: { __typename?: 'Wirings', terraform?: Map | null, helm?: Map | null } | null } | null } | null, terraform?: { __typename?: 'Terraform', id?: string | null, name?: string | null } | null, dependencies?: { __typename?: 'Dependencies', wait?: boolean | null, application?: boolean | null, providers?: Array | null, secrets?: Array | null, providerWirings?: Map | null, outputs?: Map | null, dependencies?: Array<{ __typename?: 'Dependency', name?: string | null, repo?: string | null, type?: DependencyType | null, version?: string | null, optional?: boolean | null } | null> | null, wirings?: { __typename?: 'Wirings', terraform?: Map | null, helm?: Map | null } | null } | null } | null } | null } | null> | null } | null }; - -export type CreateCrdMutationVariables = Exact<{ - chartName: ChartName; - name: Scalars['String']; - blob: Scalars['UploadOrUrl']; -}>; - - -export type CreateCrdMutation = { __typename?: 'RootMutationType', createCrd?: { __typename?: 'Crd', id: string } | null }; - -export type UninstallChartMutationVariables = Exact<{ - id: Scalars['ID']; -}>; - - -export type UninstallChartMutation = { __typename?: 'RootMutationType', deleteChartInstallation?: { __typename?: 'ChartInstallation', id?: string | null } | null }; - -export type DnsRecordFragment = { __typename?: 'DnsRecord', id: string, name: string, type: DnsRecordType, records?: Array | null, cluster: string, provider: Provider, insertedAt?: Date | null, creator?: { __typename?: 'User', id: string, name: string, email: string, avatar?: string | null, provider?: Provider | null, demoing?: boolean | null, demoed?: boolean | null, onboarding?: OnboardingState | null, emailConfirmed?: boolean | null, emailConfirmBy?: Date | null, backgroundColor?: string | null, serviceAccount?: boolean | null, onboardingChecklist?: { __typename?: 'OnboardingChecklist', dismissed?: boolean | null, status?: OnboardingChecklistState | null } | null, roles?: { __typename?: 'Roles', admin?: boolean | null } | null } | null }; - -export type GetDnsRecordsQueryVariables = Exact<{ - cluster: Scalars['String']; - provider: Provider; -}>; - - -export type GetDnsRecordsQuery = { __typename?: 'RootQueryType', dnsRecords?: { __typename?: 'DnsRecordConnection', edges?: Array<{ __typename?: 'DnsRecordEdge', node?: { __typename?: 'DnsRecord', id: string, name: string, type: DnsRecordType, records?: Array | null, cluster: string, provider: Provider, insertedAt?: Date | null, creator?: { __typename?: 'User', id: string, name: string, email: string, avatar?: string | null, provider?: Provider | null, demoing?: boolean | null, demoed?: boolean | null, onboarding?: OnboardingState | null, emailConfirmed?: boolean | null, emailConfirmBy?: Date | null, backgroundColor?: string | null, serviceAccount?: boolean | null, onboardingChecklist?: { __typename?: 'OnboardingChecklist', dismissed?: boolean | null, status?: OnboardingChecklistState | null } | null, roles?: { __typename?: 'Roles', admin?: boolean | null } | null } | null } | null } | null> | null } | null }; - -export type CreateDnsRecordMutationVariables = Exact<{ - cluster: Scalars['String']; - provider: Provider; - attributes: DnsRecordAttributes; -}>; - - -export type CreateDnsRecordMutation = { __typename?: 'RootMutationType', createDnsRecord?: { __typename?: 'DnsRecord', id: string, name: string, type: DnsRecordType, records?: Array | null, cluster: string, provider: Provider, insertedAt?: Date | null, creator?: { __typename?: 'User', id: string, name: string, email: string, avatar?: string | null, provider?: Provider | null, demoing?: boolean | null, demoed?: boolean | null, onboarding?: OnboardingState | null, emailConfirmed?: boolean | null, emailConfirmBy?: Date | null, backgroundColor?: string | null, serviceAccount?: boolean | null, onboardingChecklist?: { __typename?: 'OnboardingChecklist', dismissed?: boolean | null, status?: OnboardingChecklistState | null } | null, roles?: { __typename?: 'Roles', admin?: boolean | null } | null } | null } | null }; - -export type DeleteDnsRecordMutationVariables = Exact<{ - name: Scalars['String']; - type: DnsRecordType; -}>; - - -export type DeleteDnsRecordMutation = { __typename?: 'RootMutationType', deleteDnsRecord?: { __typename?: 'DnsRecord', id: string, name: string, type: DnsRecordType, records?: Array | null, cluster: string, provider: Provider, insertedAt?: Date | null, creator?: { __typename?: 'User', id: string, name: string, email: string, avatar?: string | null, provider?: Provider | null, demoing?: boolean | null, demoed?: boolean | null, onboarding?: OnboardingState | null, emailConfirmed?: boolean | null, emailConfirmBy?: Date | null, backgroundColor?: string | null, serviceAccount?: boolean | null, onboardingChecklist?: { __typename?: 'OnboardingChecklist', dismissed?: boolean | null, status?: OnboardingChecklistState | null } | null, roles?: { __typename?: 'Roles', admin?: boolean | null } | null } | null } | null }; - -export type DockerRepoFragment = { __typename?: 'DockerRepository', id: string, name: string, public?: boolean | null, insertedAt?: Date | null, updatedAt?: Date | null, repository?: { __typename?: 'Repository', id: string, name: string } | null }; - -export type DockerRepositoryFragment = { __typename?: 'DockerRepository', id: string, name: string, public?: boolean | null, insertedAt?: Date | null, updatedAt?: Date | null, repository?: { __typename?: 'Repository', id: string, name: string, editable?: boolean | null } | null }; - -export type DockerImageFragment = { __typename?: 'DockerImage', id: string, tag?: string | null, digest: string, scannedAt?: Date | null, grade?: ImageGrade | null, insertedAt?: Date | null, updatedAt?: Date | null }; - -export type VulnerabilityFragment = { __typename?: 'Vulnerability', id: string, title?: string | null, description?: string | null, vulnerabilityId?: string | null, package?: string | null, installedVersion?: string | null, fixedVersion?: string | null, source?: string | null, url?: string | null, severity?: VulnGrade | null, score?: number | null, cvss?: { __typename?: 'Cvss', attackVector?: VulnVector | null, attackComplexity?: VulnGrade | null, privilegesRequired?: VulnGrade | null, userInteraction?: VulnRequirement | null, confidentiality?: VulnGrade | null, integrity?: VulnGrade | null, availability?: VulnGrade | null } | null, layer?: { __typename?: 'ImageLayer', digest?: string | null, diffId?: string | null } | null }; - -export type CreateDomainMutationVariables = Exact<{ - name: Scalars['String']; -}>; - - -export type CreateDomainMutation = { __typename?: 'RootMutationType', provisionDomain?: { __typename?: 'DnsDomain', id: string, name: string, insertedAt?: Date | null, creator?: { __typename?: 'User', id: string, name: string, email: string, avatar?: string | null, provider?: Provider | null, demoing?: boolean | null, demoed?: boolean | null, onboarding?: OnboardingState | null, emailConfirmed?: boolean | null, emailConfirmBy?: Date | null, backgroundColor?: string | null, serviceAccount?: boolean | null, onboardingChecklist?: { __typename?: 'OnboardingChecklist', dismissed?: boolean | null, status?: OnboardingChecklistState | null } | null, roles?: { __typename?: 'Roles', admin?: boolean | null } | null } | null, accessPolicy?: { __typename?: 'DnsAccessPolicy', id: string, bindings?: Array<{ __typename?: 'PolicyBinding', id: string, group?: { __typename?: 'Group', id: string, name: string } | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null } | null> | null } | null } | null }; - -export type GroupMembersQueryVariables = Exact<{ - cursor?: InputMaybe; - id: Scalars['ID']; -}>; - - -export type GroupMembersQuery = { __typename?: 'RootQueryType', groupMembers?: { __typename?: 'GroupMemberConnection', pageInfo: { __typename?: 'PageInfo', endCursor?: string | null, hasNextPage: boolean }, edges?: Array<{ __typename?: 'GroupMemberEdge', node?: { __typename?: 'GroupMember', id: string, user?: { __typename?: 'User', id: string, name: string, email: string, avatar?: string | null, provider?: Provider | null, demoing?: boolean | null, demoed?: boolean | null, onboarding?: OnboardingState | null, emailConfirmed?: boolean | null, emailConfirmBy?: Date | null, backgroundColor?: string | null, serviceAccount?: boolean | null, onboardingChecklist?: { __typename?: 'OnboardingChecklist', dismissed?: boolean | null, status?: OnboardingChecklistState | null } | null, roles?: { __typename?: 'Roles', admin?: boolean | null } | null } | null } | null } | null> | null } | null }; - -export type CreateGroupMemberMutationVariables = Exact<{ - groupId: Scalars['ID']; - userId: Scalars['ID']; -}>; - - -export type CreateGroupMemberMutation = { __typename?: 'RootMutationType', createGroupMember?: { __typename?: 'GroupMember', id: string, user?: { __typename?: 'User', id: string, name: string, email: string, avatar?: string | null, provider?: Provider | null, demoing?: boolean | null, demoed?: boolean | null, onboarding?: OnboardingState | null, emailConfirmed?: boolean | null, emailConfirmBy?: Date | null, backgroundColor?: string | null, serviceAccount?: boolean | null, onboardingChecklist?: { __typename?: 'OnboardingChecklist', dismissed?: boolean | null, status?: OnboardingChecklistState | null } | null, roles?: { __typename?: 'Roles', admin?: boolean | null } | null } | null } | null }; - -export type DeleteGroupMemberMutationVariables = Exact<{ - groupId: Scalars['ID']; - userId: Scalars['ID']; -}>; - - -export type DeleteGroupMemberMutation = { __typename?: 'RootMutationType', deleteGroupMember?: { __typename?: 'GroupMember', id: string, user?: { __typename?: 'User', id: string, name: string, email: string, avatar?: string | null, provider?: Provider | null, demoing?: boolean | null, demoed?: boolean | null, onboarding?: OnboardingState | null, emailConfirmed?: boolean | null, emailConfirmBy?: Date | null, backgroundColor?: string | null, serviceAccount?: boolean | null, onboardingChecklist?: { __typename?: 'OnboardingChecklist', dismissed?: boolean | null, status?: OnboardingChecklistState | null } | null, roles?: { __typename?: 'Roles', admin?: boolean | null } | null } | null } | null }; - -export type CreateGroupMutationVariables = Exact<{ - attributes: GroupAttributes; -}>; - - -export type CreateGroupMutation = { __typename?: 'RootMutationType', createGroup?: { __typename?: 'Group', id: string, name: string, global?: boolean | null, description?: string | null } | null }; - -export type UpdateGroupMutationVariables = Exact<{ - id: Scalars['ID']; - attributes: GroupAttributes; -}>; - - -export type UpdateGroupMutation = { __typename?: 'RootMutationType', updateGroup?: { __typename?: 'Group', id: string, name: string, global?: boolean | null, description?: string | null } | null }; - -export type DeleteGroupMutationVariables = Exact<{ - id: Scalars['ID']; -}>; - - -export type DeleteGroupMutation = { __typename?: 'RootMutationType', deleteGroup?: { __typename?: 'Group', id: string, name: string, global?: boolean | null, description?: string | null } | null }; - -export type GroupsQueryVariables = Exact<{ - q?: InputMaybe; - cursor?: InputMaybe; -}>; - - -export type GroupsQuery = { __typename?: 'RootQueryType', groups?: { __typename?: 'GroupConnection', pageInfo: { __typename?: 'PageInfo', endCursor?: string | null, hasNextPage: boolean }, edges?: Array<{ __typename?: 'GroupEdge', node?: { __typename?: 'Group', id: string, name: string, global?: boolean | null, description?: string | null } | null } | null> | null } | null }; - -export type PostmortemFragment = { __typename?: 'Postmortem', id: string, content: string, actionItems?: Array<{ __typename?: 'ActionItem', type: ActionItemType, link: string } | null> | null }; - -export type FollowerFragment = { __typename?: 'Follower', id: string, incident?: { __typename?: 'Incident', id: string } | null, user: { __typename?: 'User', id: string, name: string, email: string, avatar?: string | null, provider?: Provider | null, demoing?: boolean | null, demoed?: boolean | null, onboarding?: OnboardingState | null, emailConfirmed?: boolean | null, emailConfirmBy?: Date | null, backgroundColor?: string | null, serviceAccount?: boolean | null, onboardingChecklist?: { __typename?: 'OnboardingChecklist', dismissed?: boolean | null, status?: OnboardingChecklistState | null } | null, roles?: { __typename?: 'Roles', admin?: boolean | null } | null }, preferences?: { __typename?: 'NotificationPreferences', message?: boolean | null, incidentUpdate?: boolean | null, mention?: boolean | null } | null }; - -export type SlimSubscriptionFragment = { __typename?: 'SlimSubscription', id: string, lineItems?: { __typename?: 'SubscriptionLineItems', items?: Array<{ __typename?: 'Limit', dimension: string, quantity: number } | null> | null } | null, plan?: { __typename?: 'Plan', id: string, name: string, cost: number, period?: string | null, serviceLevels?: Array<{ __typename?: 'ServiceLevel', minSeverity?: number | null, maxSeverity?: number | null, responseTime?: number | null } | null> | null, lineItems?: { __typename?: 'PlanLineItems', included?: Array<{ __typename?: 'Limit', dimension: string, quantity: number } | null> | null, items?: Array<{ __typename?: 'LineItem', name: string, dimension: string, cost: number, period?: string | null, type?: PlanType | null } | null> | null } | null, metadata?: { __typename?: 'PlanMetadata', features?: Array<{ __typename?: 'PlanFeature', name: string, description: string } | null> | null } | null } | null }; - -export type ClusterInformationFragment = { __typename?: 'ClusterInformation', version?: string | null, gitCommit?: string | null, platform?: string | null }; - -export type IncidentFragment = { __typename?: 'Incident', id: string, title: string, description?: string | null, severity: number, status: IncidentStatus, notificationCount?: number | null, nextResponseAt?: Date | null, insertedAt?: Date | null, creator: { __typename?: 'User', id: string, name: string, email: string, avatar?: string | null, provider?: Provider | null, demoing?: boolean | null, demoed?: boolean | null, onboarding?: OnboardingState | null, emailConfirmed?: boolean | null, emailConfirmBy?: Date | null, backgroundColor?: string | null, serviceAccount?: boolean | null, onboardingChecklist?: { __typename?: 'OnboardingChecklist', dismissed?: boolean | null, status?: OnboardingChecklistState | null } | null, roles?: { __typename?: 'Roles', admin?: boolean | null } | null }, owner?: { __typename?: 'User', id: string, name: string, email: string, avatar?: string | null, provider?: Provider | null, demoing?: boolean | null, demoed?: boolean | null, onboarding?: OnboardingState | null, emailConfirmed?: boolean | null, emailConfirmBy?: Date | null, backgroundColor?: string | null, serviceAccount?: boolean | null, onboardingChecklist?: { __typename?: 'OnboardingChecklist', dismissed?: boolean | null, status?: OnboardingChecklistState | null } | null, roles?: { __typename?: 'Roles', admin?: boolean | null } | null } | null, repository: { __typename?: 'Repository', id: string, name: string, notes?: string | null, description?: string | null, documentation?: string | null, icon?: string | null, darkIcon?: string | null, private?: boolean | null, trending?: boolean | null, verified?: boolean | null, category?: Category | null, oauthSettings?: { __typename?: 'OauthSettings', uriFormat: string, authMethod: OidcAuthMethod } | null, publisher?: { __typename?: 'Publisher', id?: string | null, name: string, phone?: string | null, avatar?: string | null, description?: string | null, backgroundColor?: string | null, owner?: { __typename?: 'User', id: string, name: string, email: string, avatar?: string | null, provider?: Provider | null, demoing?: boolean | null, demoed?: boolean | null, onboarding?: OnboardingState | null, emailConfirmed?: boolean | null, emailConfirmBy?: Date | null, backgroundColor?: string | null, serviceAccount?: boolean | null, onboardingChecklist?: { __typename?: 'OnboardingChecklist', dismissed?: boolean | null, status?: OnboardingChecklistState | null } | null, roles?: { __typename?: 'Roles', admin?: boolean | null } | null } | null, address?: { __typename?: 'Address', line1?: string | null, line2?: string | null, city?: string | null, country?: string | null, state?: string | null, zip?: string | null } | null } | null, recipes?: Array<{ __typename?: 'Recipe', name: string, provider?: Provider | null, description?: string | null } | null> | null }, subscription?: { __typename?: 'SlimSubscription', id: string, lineItems?: { __typename?: 'SubscriptionLineItems', items?: Array<{ __typename?: 'Limit', dimension: string, quantity: number } | null> | null } | null, plan?: { __typename?: 'Plan', id: string, name: string, cost: number, period?: string | null, serviceLevels?: Array<{ __typename?: 'ServiceLevel', minSeverity?: number | null, maxSeverity?: number | null, responseTime?: number | null } | null> | null, lineItems?: { __typename?: 'PlanLineItems', included?: Array<{ __typename?: 'Limit', dimension: string, quantity: number } | null> | null, items?: Array<{ __typename?: 'LineItem', name: string, dimension: string, cost: number, period?: string | null, type?: PlanType | null } | null> | null } | null, metadata?: { __typename?: 'PlanMetadata', features?: Array<{ __typename?: 'PlanFeature', name: string, description: string } | null> | null } | null } | null } | null, clusterInformation?: { __typename?: 'ClusterInformation', version?: string | null, gitCommit?: string | null, platform?: string | null } | null, tags?: Array<{ __typename?: 'Tag', tag: string } | null> | null }; - -export type IncidentHistoryFragment = { __typename?: 'IncidentHistory', id: string, action: IncidentAction, insertedAt?: Date | null, changes?: Array<{ __typename?: 'IncidentChange', key: string, prev?: string | null, next?: string | null } | null> | null, actor: { __typename?: 'User', id: string, name: string, email: string, avatar?: string | null, provider?: Provider | null, demoing?: boolean | null, demoed?: boolean | null, onboarding?: OnboardingState | null, emailConfirmed?: boolean | null, emailConfirmBy?: Date | null, backgroundColor?: string | null, serviceAccount?: boolean | null, onboardingChecklist?: { __typename?: 'OnboardingChecklist', dismissed?: boolean | null, status?: OnboardingChecklistState | null } | null, roles?: { __typename?: 'Roles', admin?: boolean | null } | null } }; - -export type FileFragment = { __typename?: 'File', id: string, blob: string, mediaType?: MediaType | null, contentType?: string | null, filesize?: number | null, filename?: string | null }; - -export type IncidentMessageFragment = { __typename?: 'IncidentMessage', id: string, text: string, insertedAt?: Date | null, creator: { __typename?: 'User', id: string, name: string, email: string, avatar?: string | null, provider?: Provider | null, demoing?: boolean | null, demoed?: boolean | null, onboarding?: OnboardingState | null, emailConfirmed?: boolean | null, emailConfirmBy?: Date | null, backgroundColor?: string | null, serviceAccount?: boolean | null, onboardingChecklist?: { __typename?: 'OnboardingChecklist', dismissed?: boolean | null, status?: OnboardingChecklistState | null } | null, roles?: { __typename?: 'Roles', admin?: boolean | null } | null }, reactions?: Array<{ __typename?: 'Reaction', name: string, creator: { __typename?: 'User', id: string, email: string } } | null> | null, file?: { __typename?: 'File', id: string, blob: string, mediaType?: MediaType | null, contentType?: string | null, filesize?: number | null, filename?: string | null } | null, entities?: Array<{ __typename?: 'MessageEntity', type: MessageEntityType, text?: string | null, startIndex?: number | null, endIndex?: number | null, user?: { __typename?: 'User', id: string, name: string, email: string, avatar?: string | null, provider?: Provider | null, demoing?: boolean | null, demoed?: boolean | null, onboarding?: OnboardingState | null, emailConfirmed?: boolean | null, emailConfirmBy?: Date | null, backgroundColor?: string | null, serviceAccount?: boolean | null, onboardingChecklist?: { __typename?: 'OnboardingChecklist', dismissed?: boolean | null, status?: OnboardingChecklistState | null } | null, roles?: { __typename?: 'Roles', admin?: boolean | null } | null } | null } | null> | null }; - -export type NotificationFragment = { __typename?: 'Notification', id: string, type: NotificationType, msg?: string | null, insertedAt?: Date | null, actor: { __typename?: 'User', id: string, name: string, email: string, avatar?: string | null, provider?: Provider | null, demoing?: boolean | null, demoed?: boolean | null, onboarding?: OnboardingState | null, emailConfirmed?: boolean | null, emailConfirmBy?: Date | null, backgroundColor?: string | null, serviceAccount?: boolean | null, onboardingChecklist?: { __typename?: 'OnboardingChecklist', dismissed?: boolean | null, status?: OnboardingChecklistState | null } | null, roles?: { __typename?: 'Roles', admin?: boolean | null } | null }, incident?: { __typename?: 'Incident', id: string, title: string, repository: { __typename?: 'Repository', id: string, name: string, icon?: string | null, darkIcon?: string | null } } | null, message?: { __typename?: 'IncidentMessage', text: string } | null, repository?: { __typename?: 'Repository', id: string, name: string, icon?: string | null, darkIcon?: string | null } | null }; - -export type InstallationFragment = { __typename?: 'Installation', id: string, context?: Map | null, license?: string | null, licenseKey?: string | null, acmeKeyId?: string | null, acmeSecret?: string | null, autoUpgrade?: boolean | null, trackTag: string, repository?: { __typename?: 'Repository', id: string, name: string, notes?: string | null, description?: string | null, documentation?: string | null, icon?: string | null, darkIcon?: string | null, private?: boolean | null, trending?: boolean | null, verified?: boolean | null, category?: Category | null, oauthSettings?: { __typename?: 'OauthSettings', uriFormat: string, authMethod: OidcAuthMethod } | null, publisher?: { __typename?: 'Publisher', id?: string | null, name: string, phone?: string | null, avatar?: string | null, description?: string | null, backgroundColor?: string | null, owner?: { __typename?: 'User', id: string, name: string, email: string, avatar?: string | null, provider?: Provider | null, demoing?: boolean | null, demoed?: boolean | null, onboarding?: OnboardingState | null, emailConfirmed?: boolean | null, emailConfirmBy?: Date | null, backgroundColor?: string | null, serviceAccount?: boolean | null, onboardingChecklist?: { __typename?: 'OnboardingChecklist', dismissed?: boolean | null, status?: OnboardingChecklistState | null } | null, roles?: { __typename?: 'Roles', admin?: boolean | null } | null } | null, address?: { __typename?: 'Address', line1?: string | null, line2?: string | null, city?: string | null, country?: string | null, state?: string | null, zip?: string | null } | null } | null, recipes?: Array<{ __typename?: 'Recipe', name: string, provider?: Provider | null, description?: string | null } | null> | null } | null, user?: { __typename?: 'User', id: string, name: string, email: string, avatar?: string | null, provider?: Provider | null, demoing?: boolean | null, demoed?: boolean | null, onboarding?: OnboardingState | null, emailConfirmed?: boolean | null, emailConfirmBy?: Date | null, backgroundColor?: string | null, serviceAccount?: boolean | null, onboardingChecklist?: { __typename?: 'OnboardingChecklist', dismissed?: boolean | null, status?: OnboardingChecklistState | null } | null, roles?: { __typename?: 'Roles', admin?: boolean | null } | null } | null, oidcProvider?: { __typename?: 'OidcProvider', id: string, clientId: string, authMethod: OidcAuthMethod, clientSecret: string, redirectUris?: Array | null, bindings?: Array<{ __typename?: 'OidcProviderBinding', id: string, user?: { __typename?: 'User', id: string, name: string, email: string, avatar?: string | null, provider?: Provider | null, demoing?: boolean | null, demoed?: boolean | null, onboarding?: OnboardingState | null, emailConfirmed?: boolean | null, emailConfirmBy?: Date | null, backgroundColor?: string | null, serviceAccount?: boolean | null, onboardingChecklist?: { __typename?: 'OnboardingChecklist', dismissed?: boolean | null, status?: OnboardingChecklistState | null } | null, roles?: { __typename?: 'Roles', admin?: boolean | null } | null } | null, group?: { __typename?: 'Group', id: string, name: string, global?: boolean | null, description?: string | null } | null } | null> | null, configuration?: { __typename?: 'OuathConfiguration', issuer?: string | null, authorizationEndpoint?: string | null, tokenEndpoint?: string | null, jwksUri?: string | null, userinfoEndpoint?: string | null } | null } | null }; - -export type GetInstallationQueryVariables = Exact<{ - name?: InputMaybe; -}>; - - -export type GetInstallationQuery = { __typename?: 'RootQueryType', installation?: { __typename?: 'Installation', id: string, context?: Map | null, license?: string | null, licenseKey?: string | null, acmeKeyId?: string | null, acmeSecret?: string | null, autoUpgrade?: boolean | null, trackTag: string, repository?: { __typename?: 'Repository', id: string, name: string, notes?: string | null, description?: string | null, documentation?: string | null, icon?: string | null, darkIcon?: string | null, private?: boolean | null, trending?: boolean | null, verified?: boolean | null, category?: Category | null, oauthSettings?: { __typename?: 'OauthSettings', uriFormat: string, authMethod: OidcAuthMethod } | null, publisher?: { __typename?: 'Publisher', id?: string | null, name: string, phone?: string | null, avatar?: string | null, description?: string | null, backgroundColor?: string | null, owner?: { __typename?: 'User', id: string, name: string, email: string, avatar?: string | null, provider?: Provider | null, demoing?: boolean | null, demoed?: boolean | null, onboarding?: OnboardingState | null, emailConfirmed?: boolean | null, emailConfirmBy?: Date | null, backgroundColor?: string | null, serviceAccount?: boolean | null, onboardingChecklist?: { __typename?: 'OnboardingChecklist', dismissed?: boolean | null, status?: OnboardingChecklistState | null } | null, roles?: { __typename?: 'Roles', admin?: boolean | null } | null } | null, address?: { __typename?: 'Address', line1?: string | null, line2?: string | null, city?: string | null, country?: string | null, state?: string | null, zip?: string | null } | null } | null, recipes?: Array<{ __typename?: 'Recipe', name: string, provider?: Provider | null, description?: string | null } | null> | null } | null, user?: { __typename?: 'User', id: string, name: string, email: string, avatar?: string | null, provider?: Provider | null, demoing?: boolean | null, demoed?: boolean | null, onboarding?: OnboardingState | null, emailConfirmed?: boolean | null, emailConfirmBy?: Date | null, backgroundColor?: string | null, serviceAccount?: boolean | null, onboardingChecklist?: { __typename?: 'OnboardingChecklist', dismissed?: boolean | null, status?: OnboardingChecklistState | null } | null, roles?: { __typename?: 'Roles', admin?: boolean | null } | null } | null, oidcProvider?: { __typename?: 'OidcProvider', id: string, clientId: string, authMethod: OidcAuthMethod, clientSecret: string, redirectUris?: Array | null, bindings?: Array<{ __typename?: 'OidcProviderBinding', id: string, user?: { __typename?: 'User', id: string, name: string, email: string, avatar?: string | null, provider?: Provider | null, demoing?: boolean | null, demoed?: boolean | null, onboarding?: OnboardingState | null, emailConfirmed?: boolean | null, emailConfirmBy?: Date | null, backgroundColor?: string | null, serviceAccount?: boolean | null, onboardingChecklist?: { __typename?: 'OnboardingChecklist', dismissed?: boolean | null, status?: OnboardingChecklistState | null } | null, roles?: { __typename?: 'Roles', admin?: boolean | null } | null } | null, group?: { __typename?: 'Group', id: string, name: string, global?: boolean | null, description?: string | null } | null } | null> | null, configuration?: { __typename?: 'OuathConfiguration', issuer?: string | null, authorizationEndpoint?: string | null, tokenEndpoint?: string | null, jwksUri?: string | null, userinfoEndpoint?: string | null } | null } | null } | null }; - -export type GetInstallationByIdQueryVariables = Exact<{ - id?: InputMaybe; -}>; - - -export type GetInstallationByIdQuery = { __typename?: 'RootQueryType', installation?: { __typename?: 'Installation', id: string, context?: Map | null, license?: string | null, licenseKey?: string | null, acmeKeyId?: string | null, acmeSecret?: string | null, autoUpgrade?: boolean | null, trackTag: string, repository?: { __typename?: 'Repository', id: string, name: string, notes?: string | null, description?: string | null, documentation?: string | null, icon?: string | null, darkIcon?: string | null, private?: boolean | null, trending?: boolean | null, verified?: boolean | null, category?: Category | null, oauthSettings?: { __typename?: 'OauthSettings', uriFormat: string, authMethod: OidcAuthMethod } | null, publisher?: { __typename?: 'Publisher', id?: string | null, name: string, phone?: string | null, avatar?: string | null, description?: string | null, backgroundColor?: string | null, owner?: { __typename?: 'User', id: string, name: string, email: string, avatar?: string | null, provider?: Provider | null, demoing?: boolean | null, demoed?: boolean | null, onboarding?: OnboardingState | null, emailConfirmed?: boolean | null, emailConfirmBy?: Date | null, backgroundColor?: string | null, serviceAccount?: boolean | null, onboardingChecklist?: { __typename?: 'OnboardingChecklist', dismissed?: boolean | null, status?: OnboardingChecklistState | null } | null, roles?: { __typename?: 'Roles', admin?: boolean | null } | null } | null, address?: { __typename?: 'Address', line1?: string | null, line2?: string | null, city?: string | null, country?: string | null, state?: string | null, zip?: string | null } | null } | null, recipes?: Array<{ __typename?: 'Recipe', name: string, provider?: Provider | null, description?: string | null } | null> | null } | null, user?: { __typename?: 'User', id: string, name: string, email: string, avatar?: string | null, provider?: Provider | null, demoing?: boolean | null, demoed?: boolean | null, onboarding?: OnboardingState | null, emailConfirmed?: boolean | null, emailConfirmBy?: Date | null, backgroundColor?: string | null, serviceAccount?: boolean | null, onboardingChecklist?: { __typename?: 'OnboardingChecklist', dismissed?: boolean | null, status?: OnboardingChecklistState | null } | null, roles?: { __typename?: 'Roles', admin?: boolean | null } | null } | null, oidcProvider?: { __typename?: 'OidcProvider', id: string, clientId: string, authMethod: OidcAuthMethod, clientSecret: string, redirectUris?: Array | null, bindings?: Array<{ __typename?: 'OidcProviderBinding', id: string, user?: { __typename?: 'User', id: string, name: string, email: string, avatar?: string | null, provider?: Provider | null, demoing?: boolean | null, demoed?: boolean | null, onboarding?: OnboardingState | null, emailConfirmed?: boolean | null, emailConfirmBy?: Date | null, backgroundColor?: string | null, serviceAccount?: boolean | null, onboardingChecklist?: { __typename?: 'OnboardingChecklist', dismissed?: boolean | null, status?: OnboardingChecklistState | null } | null, roles?: { __typename?: 'Roles', admin?: boolean | null } | null } | null, group?: { __typename?: 'Group', id: string, name: string, global?: boolean | null, description?: string | null } | null } | null> | null, configuration?: { __typename?: 'OuathConfiguration', issuer?: string | null, authorizationEndpoint?: string | null, tokenEndpoint?: string | null, jwksUri?: string | null, userinfoEndpoint?: string | null } | null } | null } | null }; - -export type GetInstallationsQueryVariables = Exact<{ - first?: InputMaybe; -}>; - - -export type GetInstallationsQuery = { __typename?: 'RootQueryType', installations?: { __typename?: 'InstallationConnection', edges?: Array<{ __typename?: 'InstallationEdge', node?: { __typename?: 'Installation', id: string, context?: Map | null, license?: string | null, licenseKey?: string | null, acmeKeyId?: string | null, acmeSecret?: string | null, autoUpgrade?: boolean | null, trackTag: string, repository?: { __typename?: 'Repository', id: string, name: string, notes?: string | null, description?: string | null, documentation?: string | null, icon?: string | null, darkIcon?: string | null, private?: boolean | null, trending?: boolean | null, verified?: boolean | null, category?: Category | null, oauthSettings?: { __typename?: 'OauthSettings', uriFormat: string, authMethod: OidcAuthMethod } | null, publisher?: { __typename?: 'Publisher', id?: string | null, name: string, phone?: string | null, avatar?: string | null, description?: string | null, backgroundColor?: string | null, owner?: { __typename?: 'User', id: string, name: string, email: string, avatar?: string | null, provider?: Provider | null, demoing?: boolean | null, demoed?: boolean | null, onboarding?: OnboardingState | null, emailConfirmed?: boolean | null, emailConfirmBy?: Date | null, backgroundColor?: string | null, serviceAccount?: boolean | null, onboardingChecklist?: { __typename?: 'OnboardingChecklist', dismissed?: boolean | null, status?: OnboardingChecklistState | null } | null, roles?: { __typename?: 'Roles', admin?: boolean | null } | null } | null, address?: { __typename?: 'Address', line1?: string | null, line2?: string | null, city?: string | null, country?: string | null, state?: string | null, zip?: string | null } | null } | null, recipes?: Array<{ __typename?: 'Recipe', name: string, provider?: Provider | null, description?: string | null } | null> | null } | null, user?: { __typename?: 'User', id: string, name: string, email: string, avatar?: string | null, provider?: Provider | null, demoing?: boolean | null, demoed?: boolean | null, onboarding?: OnboardingState | null, emailConfirmed?: boolean | null, emailConfirmBy?: Date | null, backgroundColor?: string | null, serviceAccount?: boolean | null, onboardingChecklist?: { __typename?: 'OnboardingChecklist', dismissed?: boolean | null, status?: OnboardingChecklistState | null } | null, roles?: { __typename?: 'Roles', admin?: boolean | null } | null } | null, oidcProvider?: { __typename?: 'OidcProvider', id: string, clientId: string, authMethod: OidcAuthMethod, clientSecret: string, redirectUris?: Array | null, bindings?: Array<{ __typename?: 'OidcProviderBinding', id: string, user?: { __typename?: 'User', id: string, name: string, email: string, avatar?: string | null, provider?: Provider | null, demoing?: boolean | null, demoed?: boolean | null, onboarding?: OnboardingState | null, emailConfirmed?: boolean | null, emailConfirmBy?: Date | null, backgroundColor?: string | null, serviceAccount?: boolean | null, onboardingChecklist?: { __typename?: 'OnboardingChecklist', dismissed?: boolean | null, status?: OnboardingChecklistState | null } | null, roles?: { __typename?: 'Roles', admin?: boolean | null } | null } | null, group?: { __typename?: 'Group', id: string, name: string, global?: boolean | null, description?: string | null } | null } | null> | null, configuration?: { __typename?: 'OuathConfiguration', issuer?: string | null, authorizationEndpoint?: string | null, tokenEndpoint?: string | null, jwksUri?: string | null, userinfoEndpoint?: string | null } | null } | null } | null } | null> | null } | null }; - -export type UpsertOidcProviderMutationVariables = Exact<{ - id: Scalars['ID']; - attributes: OidcAttributes; -}>; - - -export type UpsertOidcProviderMutation = { __typename?: 'RootMutationType', upsertOidcProvider?: { __typename?: 'OidcProvider', id: string } | null }; - -export type IntegrationWebhookFragment = { __typename?: 'IntegrationWebhook', id: string, name: string, url: string, secret: string, actions?: Array | null }; - -export type WebhookLogFragment = { __typename?: 'WebhookLog', id: string, state: WebhookLogState, status?: number | null, payload?: Map | null, response?: string | null, insertedAt?: Date | null }; - -export type OauthIntegrationFragment = { __typename?: 'OauthIntegration', id: string, service: OauthService, insertedAt?: Date | null }; - -export type ZoomMeetingFragment = { __typename?: 'ZoomMeeting', joinUrl: string, password?: string | null }; - -export type SignupInviteMutationVariables = Exact<{ - attributes: UserAttributes; - inviteId: Scalars['String']; -}>; - - -export type SignupInviteMutation = { __typename?: 'RootMutationType', signup?: { __typename?: 'User', jwt?: string | null } | null }; - -export type RealizeInviteMutationVariables = Exact<{ - id: Scalars['String']; -}>; - - -export type RealizeInviteMutation = { __typename?: 'RootMutationType', realizeInvite?: { __typename?: 'User', jwt?: string | null } | null }; - -export type InviteQueryVariables = Exact<{ - id: Scalars['String']; -}>; - - -export type InviteQuery = { __typename?: 'RootQueryType', invite?: { __typename?: 'Invite', id: string, email?: string | null, existing: boolean, account?: { __typename?: 'Account', id: string, name?: string | null, billingCustomerId?: string | null, backgroundColor?: string | null } | null, user?: { __typename?: 'User', id: string, name: string, email: string, avatar?: string | null, provider?: Provider | null, demoing?: boolean | null, demoed?: boolean | null, onboarding?: OnboardingState | null, emailConfirmed?: boolean | null, emailConfirmBy?: Date | null, backgroundColor?: string | null, serviceAccount?: boolean | null, account: { __typename?: 'Account', id: string, name?: string | null, billingCustomerId?: string | null, backgroundColor?: string | null }, onboardingChecklist?: { __typename?: 'OnboardingChecklist', dismissed?: boolean | null, status?: OnboardingChecklistState | null } | null, roles?: { __typename?: 'Roles', admin?: boolean | null } | null } | null } | null }; - -export type MetricFragment = { __typename?: 'Metric', name: string, tags?: Array<{ __typename?: 'MetricTag', name: string, value: string } | null> | null, values?: Array<{ __typename?: 'MetricValue', time?: Date | null, value?: number | null } | null> | null }; - -export type PageInfoFragment = { __typename?: 'PageInfo', endCursor?: string | null, hasNextPage: boolean }; - -export type OidcProviderFragment = { __typename?: 'OidcProvider', id: string, clientId: string, authMethod: OidcAuthMethod, clientSecret: string, redirectUris?: Array | null, bindings?: Array<{ __typename?: 'OidcProviderBinding', id: string, user?: { __typename?: 'User', id: string, name: string, email: string, avatar?: string | null, provider?: Provider | null, demoing?: boolean | null, demoed?: boolean | null, onboarding?: OnboardingState | null, emailConfirmed?: boolean | null, emailConfirmBy?: Date | null, backgroundColor?: string | null, serviceAccount?: boolean | null, onboardingChecklist?: { __typename?: 'OnboardingChecklist', dismissed?: boolean | null, status?: OnboardingChecklistState | null } | null, roles?: { __typename?: 'Roles', admin?: boolean | null } | null } | null, group?: { __typename?: 'Group', id: string, name: string, global?: boolean | null, description?: string | null } | null } | null> | null, configuration?: { __typename?: 'OuathConfiguration', issuer?: string | null, authorizationEndpoint?: string | null, tokenEndpoint?: string | null, jwksUri?: string | null, userinfoEndpoint?: string | null } | null }; - -export type OAuthInfoFragment = { __typename?: 'OauthInfo', provider: OauthProvider, authorizeUrl: string }; - -export type LimitFragment = { __typename?: 'Limit', dimension: string, quantity: number }; - -export type LineItemFragment = { __typename?: 'LineItem', name: string, dimension: string, cost: number, period?: string | null, type?: PlanType | null }; - -export type ServiceLevelFragment = { __typename?: 'ServiceLevel', minSeverity?: number | null, maxSeverity?: number | null, responseTime?: number | null }; - -export type PlanFragment = { __typename?: 'Plan', id: string, name: string, cost: number, period?: string | null, serviceLevels?: Array<{ __typename?: 'ServiceLevel', minSeverity?: number | null, maxSeverity?: number | null, responseTime?: number | null } | null> | null, lineItems?: { __typename?: 'PlanLineItems', included?: Array<{ __typename?: 'Limit', dimension: string, quantity: number } | null> | null, items?: Array<{ __typename?: 'LineItem', name: string, dimension: string, cost: number, period?: string | null, type?: PlanType | null } | null> | null } | null, metadata?: { __typename?: 'PlanMetadata', features?: Array<{ __typename?: 'PlanFeature', name: string, description: string } | null> | null } | null }; - -export type SubscriptionFragment = { __typename?: 'RepositorySubscription', id: string, plan?: { __typename?: 'Plan', id: string, name: string, cost: number, period?: string | null, serviceLevels?: Array<{ __typename?: 'ServiceLevel', minSeverity?: number | null, maxSeverity?: number | null, responseTime?: number | null } | null> | null, lineItems?: { __typename?: 'PlanLineItems', included?: Array<{ __typename?: 'Limit', dimension: string, quantity: number } | null> | null, items?: Array<{ __typename?: 'LineItem', name: string, dimension: string, cost: number, period?: string | null, type?: PlanType | null } | null> | null } | null, metadata?: { __typename?: 'PlanMetadata', features?: Array<{ __typename?: 'PlanFeature', name: string, description: string } | null> | null } | null } | null, lineItems?: { __typename?: 'SubscriptionLineItems', items?: Array<{ __typename?: 'Limit', dimension: string, quantity: number } | null> | null } | null }; - -export type InvoiceItemFragment = { __typename?: 'InvoiceItem', amount: number, currency: string, description?: string | null }; - -export type InvoiceFragment = { __typename?: 'Invoice', number: string, amountDue: number, amountPaid: number, currency: string, status?: string | null, createdAt?: Date | null, hostedInvoiceUrl?: string | null, lines?: Array<{ __typename?: 'InvoiceItem', amount: number, currency: string, description?: string | null } | null> | null }; - -export type CardFragment = { __typename?: 'Card', id: string, last4: string, expMonth: number, expYear: number, name?: string | null, brand: string }; - -export type SubscriptionQueryVariables = Exact<{ [key: string]: never; }>; - - -export type SubscriptionQuery = { __typename?: 'RootQueryType', account?: { __typename?: 'Account', billingCustomerId?: string | null, grandfatheredUntil?: Date | null, delinquentAt?: Date | null, userCount?: string | null, clusterCount?: string | null, availableFeatures?: { __typename?: 'PlanFeatures', userManagement?: boolean | null, audit?: boolean | null } | null, subscription?: { __typename?: 'PlatformSubscription', id: string, plan?: { __typename?: 'PlatformPlan', id: string, period: PaymentPeriod, lineItems?: Array<{ __typename?: 'PlatformPlanItem', dimension: LineItemDimension, cost: number } | null> | null } | null } | null, billingAddress?: { __typename?: 'Address', name?: string | null, line1?: string | null, line2?: string | null, zip?: string | null, state?: string | null, city?: string | null, country?: string | null } | null } | null }; - -export type UpdateAccountBillingMutationVariables = Exact<{ - attributes: AccountAttributes; -}>; - - -export type UpdateAccountBillingMutation = { __typename?: 'RootMutationType', updateAccount?: { __typename?: 'Account', id: string } | null }; - -export type UpgradeToProfessionalPlanMutationVariables = Exact<{ - planId: Scalars['ID']; -}>; - - -export type UpgradeToProfessionalPlanMutation = { __typename?: 'RootMutationType', createPlatformSubscription?: { __typename?: 'PlatformSubscription', id: string } | null }; - -export type DowngradeToFreePlanMutationMutationVariables = Exact<{ [key: string]: never; }>; - - -export type DowngradeToFreePlanMutationMutation = { __typename?: 'RootMutationType', deletePlatformSubscription?: { __typename?: 'Account', id: string } | null }; - -export type CardsQueryVariables = Exact<{ [key: string]: never; }>; - - -export type CardsQuery = { __typename?: 'RootQueryType', me?: { __typename?: 'User', id: string, cards?: { __typename?: 'CardConnection', edges?: Array<{ __typename?: 'CardEdge', node?: { __typename?: 'Card', id: string, last4: string, expMonth: number, expYear: number, name?: string | null, brand: string } | null } | null> | null } | null } | null }; - -export type CreateCardMutationVariables = Exact<{ - source: Scalars['String']; - address?: InputMaybe; -}>; - - -export type CreateCardMutation = { __typename?: 'RootMutationType', createCard?: { __typename?: 'Account', id: string } | null }; - -export type DeleteCardMutationVariables = Exact<{ - id: Scalars['ID']; -}>; - - -export type DeleteCardMutation = { __typename?: 'RootMutationType', deleteCard?: { __typename?: 'Account', id: string } | null }; - -export type RecipeFragment = { __typename?: 'Recipe', id: string, name: string, description?: string | null, restricted?: boolean | null, provider?: Provider | null, tests?: Array<{ __typename?: 'RecipeTest', type: TestType, name: string, message?: string | null, args?: Array<{ __typename?: 'TestArgument', name: string, repo: string, key: string } | null> | null } | null> | null, repository?: { __typename?: 'Repository', id: string, name: string } | null, oidcSettings?: { __typename?: 'OidcSettings', uriFormat?: string | null, uriFormats?: Array | null, authMethod: OidcAuthMethod, domainKey?: string | null, subdomain?: boolean | null } | null, recipeSections?: Array<{ __typename?: 'RecipeSection', index?: number | null, repository?: { __typename?: 'Repository', id: string, name: string, notes?: string | null, description?: string | null, documentation?: string | null, icon?: string | null, darkIcon?: string | null, private?: boolean | null, trending?: boolean | null, verified?: boolean | null, category?: Category | null, installation?: { __typename?: 'Installation', id: string, context?: Map | null, license?: string | null, licenseKey?: string | null, acmeKeyId?: string | null, acmeSecret?: string | null, autoUpgrade?: boolean | null, trackTag: string, repository?: { __typename?: 'Repository', id: string, name: string, notes?: string | null, description?: string | null, documentation?: string | null, icon?: string | null, darkIcon?: string | null, private?: boolean | null, trending?: boolean | null, verified?: boolean | null, category?: Category | null, oauthSettings?: { __typename?: 'OauthSettings', uriFormat: string, authMethod: OidcAuthMethod } | null, publisher?: { __typename?: 'Publisher', id?: string | null, name: string, phone?: string | null, avatar?: string | null, description?: string | null, backgroundColor?: string | null, owner?: { __typename?: 'User', id: string, name: string, email: string, avatar?: string | null, provider?: Provider | null, demoing?: boolean | null, demoed?: boolean | null, onboarding?: OnboardingState | null, emailConfirmed?: boolean | null, emailConfirmBy?: Date | null, backgroundColor?: string | null, serviceAccount?: boolean | null, onboardingChecklist?: { __typename?: 'OnboardingChecklist', dismissed?: boolean | null, status?: OnboardingChecklistState | null } | null, roles?: { __typename?: 'Roles', admin?: boolean | null } | null } | null, address?: { __typename?: 'Address', line1?: string | null, line2?: string | null, city?: string | null, country?: string | null, state?: string | null, zip?: string | null } | null } | null, recipes?: Array<{ __typename?: 'Recipe', name: string, provider?: Provider | null, description?: string | null } | null> | null } | null, user?: { __typename?: 'User', id: string, name: string, email: string, avatar?: string | null, provider?: Provider | null, demoing?: boolean | null, demoed?: boolean | null, onboarding?: OnboardingState | null, emailConfirmed?: boolean | null, emailConfirmBy?: Date | null, backgroundColor?: string | null, serviceAccount?: boolean | null, onboardingChecklist?: { __typename?: 'OnboardingChecklist', dismissed?: boolean | null, status?: OnboardingChecklistState | null } | null, roles?: { __typename?: 'Roles', admin?: boolean | null } | null } | null, oidcProvider?: { __typename?: 'OidcProvider', id: string, clientId: string, authMethod: OidcAuthMethod, clientSecret: string, redirectUris?: Array | null, bindings?: Array<{ __typename?: 'OidcProviderBinding', id: string, user?: { __typename?: 'User', id: string, name: string, email: string, avatar?: string | null, provider?: Provider | null, demoing?: boolean | null, demoed?: boolean | null, onboarding?: OnboardingState | null, emailConfirmed?: boolean | null, emailConfirmBy?: Date | null, backgroundColor?: string | null, serviceAccount?: boolean | null, onboardingChecklist?: { __typename?: 'OnboardingChecklist', dismissed?: boolean | null, status?: OnboardingChecklistState | null } | null, roles?: { __typename?: 'Roles', admin?: boolean | null } | null } | null, group?: { __typename?: 'Group', id: string, name: string, global?: boolean | null, description?: string | null } | null } | null> | null, configuration?: { __typename?: 'OuathConfiguration', issuer?: string | null, authorizationEndpoint?: string | null, tokenEndpoint?: string | null, jwksUri?: string | null, userinfoEndpoint?: string | null } | null } | null } | null, oauthSettings?: { __typename?: 'OauthSettings', uriFormat: string, authMethod: OidcAuthMethod } | null, publisher?: { __typename?: 'Publisher', id?: string | null, name: string, phone?: string | null, avatar?: string | null, description?: string | null, backgroundColor?: string | null, owner?: { __typename?: 'User', id: string, name: string, email: string, avatar?: string | null, provider?: Provider | null, demoing?: boolean | null, demoed?: boolean | null, onboarding?: OnboardingState | null, emailConfirmed?: boolean | null, emailConfirmBy?: Date | null, backgroundColor?: string | null, serviceAccount?: boolean | null, onboardingChecklist?: { __typename?: 'OnboardingChecklist', dismissed?: boolean | null, status?: OnboardingChecklistState | null } | null, roles?: { __typename?: 'Roles', admin?: boolean | null } | null } | null, address?: { __typename?: 'Address', line1?: string | null, line2?: string | null, city?: string | null, country?: string | null, state?: string | null, zip?: string | null } | null } | null, recipes?: Array<{ __typename?: 'Recipe', name: string, provider?: Provider | null, description?: string | null } | null> | null } | null, recipeItems?: Array<{ __typename?: 'RecipeItem', id?: string | null, chart?: { __typename?: 'Chart', id?: string | null, name: string, description?: string | null, latestVersion?: string | null, insertedAt?: Date | null, dependencies?: { __typename?: 'Dependencies', wait?: boolean | null, application?: boolean | null, providers?: Array | null, secrets?: Array | null, providerWirings?: Map | null, outputs?: Map | null, dependencies?: Array<{ __typename?: 'Dependency', name?: string | null, repo?: string | null, type?: DependencyType | null, version?: string | null, optional?: boolean | null } | null> | null, wirings?: { __typename?: 'Wirings', terraform?: Map | null, helm?: Map | null } | null } | null } | null, terraform?: { __typename?: 'Terraform', id?: string | null, name?: string | null, readme?: string | null, package?: string | null, description?: string | null, latestVersion?: string | null, valuesTemplate?: string | null, insertedAt?: Date | null, dependencies?: { __typename?: 'Dependencies', wait?: boolean | null, application?: boolean | null, providers?: Array | null, secrets?: Array | null, providerWirings?: Map | null, outputs?: Map | null, dependencies?: Array<{ __typename?: 'Dependency', name?: string | null, repo?: string | null, type?: DependencyType | null, version?: string | null, optional?: boolean | null } | null> | null, wirings?: { __typename?: 'Wirings', terraform?: Map | null, helm?: Map | null } | null } | null } | null, configuration?: Array<{ __typename?: 'RecipeConfiguration', name?: string | null, type?: Datatype | null, default?: string | null, documentation?: string | null, optional?: boolean | null, placeholder?: string | null, functionName?: string | null, condition?: { __typename?: 'RecipeCondition', field: string, operation: Operation, value?: string | null } | null, validation?: { __typename?: 'RecipeValidation', type: ValidationType, regex?: string | null, message: string } | null } | null> | null } | null> | null, configuration?: Array<{ __typename?: 'RecipeConfiguration', name?: string | null, type?: Datatype | null, default?: string | null, documentation?: string | null, optional?: boolean | null, placeholder?: string | null, functionName?: string | null, condition?: { __typename?: 'RecipeCondition', field: string, operation: Operation, value?: string | null } | null, validation?: { __typename?: 'RecipeValidation', type: ValidationType, regex?: string | null, message: string } | null } | null> | null } | null> | null }; - -export type RecipeItemFragment = { __typename?: 'RecipeItem', id?: string | null, chart?: { __typename?: 'Chart', id?: string | null, name: string, description?: string | null, latestVersion?: string | null, insertedAt?: Date | null, dependencies?: { __typename?: 'Dependencies', wait?: boolean | null, application?: boolean | null, providers?: Array | null, secrets?: Array | null, providerWirings?: Map | null, outputs?: Map | null, dependencies?: Array<{ __typename?: 'Dependency', name?: string | null, repo?: string | null, type?: DependencyType | null, version?: string | null, optional?: boolean | null } | null> | null, wirings?: { __typename?: 'Wirings', terraform?: Map | null, helm?: Map | null } | null } | null } | null, terraform?: { __typename?: 'Terraform', id?: string | null, name?: string | null, readme?: string | null, package?: string | null, description?: string | null, latestVersion?: string | null, valuesTemplate?: string | null, insertedAt?: Date | null, dependencies?: { __typename?: 'Dependencies', wait?: boolean | null, application?: boolean | null, providers?: Array | null, secrets?: Array | null, providerWirings?: Map | null, outputs?: Map | null, dependencies?: Array<{ __typename?: 'Dependency', name?: string | null, repo?: string | null, type?: DependencyType | null, version?: string | null, optional?: boolean | null } | null> | null, wirings?: { __typename?: 'Wirings', terraform?: Map | null, helm?: Map | null } | null } | null } | null, configuration?: Array<{ __typename?: 'RecipeConfiguration', name?: string | null, type?: Datatype | null, default?: string | null, documentation?: string | null, optional?: boolean | null, placeholder?: string | null, functionName?: string | null, condition?: { __typename?: 'RecipeCondition', field: string, operation: Operation, value?: string | null } | null, validation?: { __typename?: 'RecipeValidation', type: ValidationType, regex?: string | null, message: string } | null } | null> | null }; - -export type RecipeSectionFragment = { __typename?: 'RecipeSection', index?: number | null, repository?: { __typename?: 'Repository', id: string, name: string, notes?: string | null, description?: string | null, documentation?: string | null, icon?: string | null, darkIcon?: string | null, private?: boolean | null, trending?: boolean | null, verified?: boolean | null, category?: Category | null, installation?: { __typename?: 'Installation', id: string, context?: Map | null, license?: string | null, licenseKey?: string | null, acmeKeyId?: string | null, acmeSecret?: string | null, autoUpgrade?: boolean | null, trackTag: string, repository?: { __typename?: 'Repository', id: string, name: string, notes?: string | null, description?: string | null, documentation?: string | null, icon?: string | null, darkIcon?: string | null, private?: boolean | null, trending?: boolean | null, verified?: boolean | null, category?: Category | null, oauthSettings?: { __typename?: 'OauthSettings', uriFormat: string, authMethod: OidcAuthMethod } | null, publisher?: { __typename?: 'Publisher', id?: string | null, name: string, phone?: string | null, avatar?: string | null, description?: string | null, backgroundColor?: string | null, owner?: { __typename?: 'User', id: string, name: string, email: string, avatar?: string | null, provider?: Provider | null, demoing?: boolean | null, demoed?: boolean | null, onboarding?: OnboardingState | null, emailConfirmed?: boolean | null, emailConfirmBy?: Date | null, backgroundColor?: string | null, serviceAccount?: boolean | null, onboardingChecklist?: { __typename?: 'OnboardingChecklist', dismissed?: boolean | null, status?: OnboardingChecklistState | null } | null, roles?: { __typename?: 'Roles', admin?: boolean | null } | null } | null, address?: { __typename?: 'Address', line1?: string | null, line2?: string | null, city?: string | null, country?: string | null, state?: string | null, zip?: string | null } | null } | null, recipes?: Array<{ __typename?: 'Recipe', name: string, provider?: Provider | null, description?: string | null } | null> | null } | null, user?: { __typename?: 'User', id: string, name: string, email: string, avatar?: string | null, provider?: Provider | null, demoing?: boolean | null, demoed?: boolean | null, onboarding?: OnboardingState | null, emailConfirmed?: boolean | null, emailConfirmBy?: Date | null, backgroundColor?: string | null, serviceAccount?: boolean | null, onboardingChecklist?: { __typename?: 'OnboardingChecklist', dismissed?: boolean | null, status?: OnboardingChecklistState | null } | null, roles?: { __typename?: 'Roles', admin?: boolean | null } | null } | null, oidcProvider?: { __typename?: 'OidcProvider', id: string, clientId: string, authMethod: OidcAuthMethod, clientSecret: string, redirectUris?: Array | null, bindings?: Array<{ __typename?: 'OidcProviderBinding', id: string, user?: { __typename?: 'User', id: string, name: string, email: string, avatar?: string | null, provider?: Provider | null, demoing?: boolean | null, demoed?: boolean | null, onboarding?: OnboardingState | null, emailConfirmed?: boolean | null, emailConfirmBy?: Date | null, backgroundColor?: string | null, serviceAccount?: boolean | null, onboardingChecklist?: { __typename?: 'OnboardingChecklist', dismissed?: boolean | null, status?: OnboardingChecklistState | null } | null, roles?: { __typename?: 'Roles', admin?: boolean | null } | null } | null, group?: { __typename?: 'Group', id: string, name: string, global?: boolean | null, description?: string | null } | null } | null> | null, configuration?: { __typename?: 'OuathConfiguration', issuer?: string | null, authorizationEndpoint?: string | null, tokenEndpoint?: string | null, jwksUri?: string | null, userinfoEndpoint?: string | null } | null } | null } | null, oauthSettings?: { __typename?: 'OauthSettings', uriFormat: string, authMethod: OidcAuthMethod } | null, publisher?: { __typename?: 'Publisher', id?: string | null, name: string, phone?: string | null, avatar?: string | null, description?: string | null, backgroundColor?: string | null, owner?: { __typename?: 'User', id: string, name: string, email: string, avatar?: string | null, provider?: Provider | null, demoing?: boolean | null, demoed?: boolean | null, onboarding?: OnboardingState | null, emailConfirmed?: boolean | null, emailConfirmBy?: Date | null, backgroundColor?: string | null, serviceAccount?: boolean | null, onboardingChecklist?: { __typename?: 'OnboardingChecklist', dismissed?: boolean | null, status?: OnboardingChecklistState | null } | null, roles?: { __typename?: 'Roles', admin?: boolean | null } | null } | null, address?: { __typename?: 'Address', line1?: string | null, line2?: string | null, city?: string | null, country?: string | null, state?: string | null, zip?: string | null } | null } | null, recipes?: Array<{ __typename?: 'Recipe', name: string, provider?: Provider | null, description?: string | null } | null> | null } | null, recipeItems?: Array<{ __typename?: 'RecipeItem', id?: string | null, chart?: { __typename?: 'Chart', id?: string | null, name: string, description?: string | null, latestVersion?: string | null, insertedAt?: Date | null, dependencies?: { __typename?: 'Dependencies', wait?: boolean | null, application?: boolean | null, providers?: Array | null, secrets?: Array | null, providerWirings?: Map | null, outputs?: Map | null, dependencies?: Array<{ __typename?: 'Dependency', name?: string | null, repo?: string | null, type?: DependencyType | null, version?: string | null, optional?: boolean | null } | null> | null, wirings?: { __typename?: 'Wirings', terraform?: Map | null, helm?: Map | null } | null } | null } | null, terraform?: { __typename?: 'Terraform', id?: string | null, name?: string | null, readme?: string | null, package?: string | null, description?: string | null, latestVersion?: string | null, valuesTemplate?: string | null, insertedAt?: Date | null, dependencies?: { __typename?: 'Dependencies', wait?: boolean | null, application?: boolean | null, providers?: Array | null, secrets?: Array | null, providerWirings?: Map | null, outputs?: Map | null, dependencies?: Array<{ __typename?: 'Dependency', name?: string | null, repo?: string | null, type?: DependencyType | null, version?: string | null, optional?: boolean | null } | null> | null, wirings?: { __typename?: 'Wirings', terraform?: Map | null, helm?: Map | null } | null } | null } | null, configuration?: Array<{ __typename?: 'RecipeConfiguration', name?: string | null, type?: Datatype | null, default?: string | null, documentation?: string | null, optional?: boolean | null, placeholder?: string | null, functionName?: string | null, condition?: { __typename?: 'RecipeCondition', field: string, operation: Operation, value?: string | null } | null, validation?: { __typename?: 'RecipeValidation', type: ValidationType, regex?: string | null, message: string } | null } | null> | null } | null> | null, configuration?: Array<{ __typename?: 'RecipeConfiguration', name?: string | null, type?: Datatype | null, default?: string | null, documentation?: string | null, optional?: boolean | null, placeholder?: string | null, functionName?: string | null, condition?: { __typename?: 'RecipeCondition', field: string, operation: Operation, value?: string | null } | null, validation?: { __typename?: 'RecipeValidation', type: ValidationType, regex?: string | null, message: string } | null } | null> | null }; - -export type RecipeConfigurationFragment = { __typename?: 'RecipeConfiguration', name?: string | null, type?: Datatype | null, default?: string | null, documentation?: string | null, optional?: boolean | null, placeholder?: string | null, functionName?: string | null, condition?: { __typename?: 'RecipeCondition', field: string, operation: Operation, value?: string | null } | null, validation?: { __typename?: 'RecipeValidation', type: ValidationType, regex?: string | null, message: string } | null }; - -export type StackFragment = { __typename?: 'Stack', id: string, name: string, displayName?: string | null, description?: string | null, featured?: boolean | null, creator?: { __typename?: 'User', id: string, name: string } | null, collections?: Array<{ __typename?: 'StackCollection', id: string, provider: Provider, bundles?: Array<{ __typename?: 'StackRecipe', recipe: { __typename?: 'Recipe', repository?: { __typename?: 'Repository', id: string, name: string, notes?: string | null, description?: string | null, documentation?: string | null, icon?: string | null, darkIcon?: string | null, private?: boolean | null, trending?: boolean | null, verified?: boolean | null, category?: Category | null, tags?: Array<{ __typename?: 'Tag', tag: string } | null> | null, oauthSettings?: { __typename?: 'OauthSettings', uriFormat: string, authMethod: OidcAuthMethod } | null, publisher?: { __typename?: 'Publisher', id?: string | null, name: string, phone?: string | null, avatar?: string | null, description?: string | null, backgroundColor?: string | null, owner?: { __typename?: 'User', id: string, name: string, email: string, avatar?: string | null, provider?: Provider | null, demoing?: boolean | null, demoed?: boolean | null, onboarding?: OnboardingState | null, emailConfirmed?: boolean | null, emailConfirmBy?: Date | null, backgroundColor?: string | null, serviceAccount?: boolean | null, onboardingChecklist?: { __typename?: 'OnboardingChecklist', dismissed?: boolean | null, status?: OnboardingChecklistState | null } | null, roles?: { __typename?: 'Roles', admin?: boolean | null } | null } | null, address?: { __typename?: 'Address', line1?: string | null, line2?: string | null, city?: string | null, country?: string | null, state?: string | null, zip?: string | null } | null } | null, recipes?: Array<{ __typename?: 'Recipe', name: string, provider?: Provider | null, description?: string | null } | null> | null } | null } } | null> | null } | null> | null }; - -export type GetRecipeQueryVariables = Exact<{ - repo?: InputMaybe; - name?: InputMaybe; - id?: InputMaybe; -}>; - - -export type GetRecipeQuery = { __typename?: 'RootQueryType', recipe?: { __typename?: 'Recipe', id: string, name: string, description?: string | null, restricted?: boolean | null, provider?: Provider | null, recipeDependencies?: Array<{ __typename?: 'Recipe', id: string, name: string, description?: string | null, restricted?: boolean | null, provider?: Provider | null, tests?: Array<{ __typename?: 'RecipeTest', type: TestType, name: string, message?: string | null, args?: Array<{ __typename?: 'TestArgument', name: string, repo: string, key: string } | null> | null } | null> | null, repository?: { __typename?: 'Repository', id: string, name: string } | null, oidcSettings?: { __typename?: 'OidcSettings', uriFormat?: string | null, uriFormats?: Array | null, authMethod: OidcAuthMethod, domainKey?: string | null, subdomain?: boolean | null } | null, recipeSections?: Array<{ __typename?: 'RecipeSection', index?: number | null, repository?: { __typename?: 'Repository', id: string, name: string, notes?: string | null, description?: string | null, documentation?: string | null, icon?: string | null, darkIcon?: string | null, private?: boolean | null, trending?: boolean | null, verified?: boolean | null, category?: Category | null, installation?: { __typename?: 'Installation', id: string, context?: Map | null, license?: string | null, licenseKey?: string | null, acmeKeyId?: string | null, acmeSecret?: string | null, autoUpgrade?: boolean | null, trackTag: string, repository?: { __typename?: 'Repository', id: string, name: string, notes?: string | null, description?: string | null, documentation?: string | null, icon?: string | null, darkIcon?: string | null, private?: boolean | null, trending?: boolean | null, verified?: boolean | null, category?: Category | null, oauthSettings?: { __typename?: 'OauthSettings', uriFormat: string, authMethod: OidcAuthMethod } | null, publisher?: { __typename?: 'Publisher', id?: string | null, name: string, phone?: string | null, avatar?: string | null, description?: string | null, backgroundColor?: string | null, owner?: { __typename?: 'User', id: string, name: string, email: string, avatar?: string | null, provider?: Provider | null, demoing?: boolean | null, demoed?: boolean | null, onboarding?: OnboardingState | null, emailConfirmed?: boolean | null, emailConfirmBy?: Date | null, backgroundColor?: string | null, serviceAccount?: boolean | null, onboardingChecklist?: { __typename?: 'OnboardingChecklist', dismissed?: boolean | null, status?: OnboardingChecklistState | null } | null, roles?: { __typename?: 'Roles', admin?: boolean | null } | null } | null, address?: { __typename?: 'Address', line1?: string | null, line2?: string | null, city?: string | null, country?: string | null, state?: string | null, zip?: string | null } | null } | null, recipes?: Array<{ __typename?: 'Recipe', name: string, provider?: Provider | null, description?: string | null } | null> | null } | null, user?: { __typename?: 'User', id: string, name: string, email: string, avatar?: string | null, provider?: Provider | null, demoing?: boolean | null, demoed?: boolean | null, onboarding?: OnboardingState | null, emailConfirmed?: boolean | null, emailConfirmBy?: Date | null, backgroundColor?: string | null, serviceAccount?: boolean | null, onboardingChecklist?: { __typename?: 'OnboardingChecklist', dismissed?: boolean | null, status?: OnboardingChecklistState | null } | null, roles?: { __typename?: 'Roles', admin?: boolean | null } | null } | null, oidcProvider?: { __typename?: 'OidcProvider', id: string, clientId: string, authMethod: OidcAuthMethod, clientSecret: string, redirectUris?: Array | null, bindings?: Array<{ __typename?: 'OidcProviderBinding', id: string, user?: { __typename?: 'User', id: string, name: string, email: string, avatar?: string | null, provider?: Provider | null, demoing?: boolean | null, demoed?: boolean | null, onboarding?: OnboardingState | null, emailConfirmed?: boolean | null, emailConfirmBy?: Date | null, backgroundColor?: string | null, serviceAccount?: boolean | null, onboardingChecklist?: { __typename?: 'OnboardingChecklist', dismissed?: boolean | null, status?: OnboardingChecklistState | null } | null, roles?: { __typename?: 'Roles', admin?: boolean | null } | null } | null, group?: { __typename?: 'Group', id: string, name: string, global?: boolean | null, description?: string | null } | null } | null> | null, configuration?: { __typename?: 'OuathConfiguration', issuer?: string | null, authorizationEndpoint?: string | null, tokenEndpoint?: string | null, jwksUri?: string | null, userinfoEndpoint?: string | null } | null } | null } | null, oauthSettings?: { __typename?: 'OauthSettings', uriFormat: string, authMethod: OidcAuthMethod } | null, publisher?: { __typename?: 'Publisher', id?: string | null, name: string, phone?: string | null, avatar?: string | null, description?: string | null, backgroundColor?: string | null, owner?: { __typename?: 'User', id: string, name: string, email: string, avatar?: string | null, provider?: Provider | null, demoing?: boolean | null, demoed?: boolean | null, onboarding?: OnboardingState | null, emailConfirmed?: boolean | null, emailConfirmBy?: Date | null, backgroundColor?: string | null, serviceAccount?: boolean | null, onboardingChecklist?: { __typename?: 'OnboardingChecklist', dismissed?: boolean | null, status?: OnboardingChecklistState | null } | null, roles?: { __typename?: 'Roles', admin?: boolean | null } | null } | null, address?: { __typename?: 'Address', line1?: string | null, line2?: string | null, city?: string | null, country?: string | null, state?: string | null, zip?: string | null } | null } | null, recipes?: Array<{ __typename?: 'Recipe', name: string, provider?: Provider | null, description?: string | null } | null> | null } | null, recipeItems?: Array<{ __typename?: 'RecipeItem', id?: string | null, chart?: { __typename?: 'Chart', id?: string | null, name: string, description?: string | null, latestVersion?: string | null, insertedAt?: Date | null, dependencies?: { __typename?: 'Dependencies', wait?: boolean | null, application?: boolean | null, providers?: Array | null, secrets?: Array | null, providerWirings?: Map | null, outputs?: Map | null, dependencies?: Array<{ __typename?: 'Dependency', name?: string | null, repo?: string | null, type?: DependencyType | null, version?: string | null, optional?: boolean | null } | null> | null, wirings?: { __typename?: 'Wirings', terraform?: Map | null, helm?: Map | null } | null } | null } | null, terraform?: { __typename?: 'Terraform', id?: string | null, name?: string | null, readme?: string | null, package?: string | null, description?: string | null, latestVersion?: string | null, valuesTemplate?: string | null, insertedAt?: Date | null, dependencies?: { __typename?: 'Dependencies', wait?: boolean | null, application?: boolean | null, providers?: Array | null, secrets?: Array | null, providerWirings?: Map | null, outputs?: Map | null, dependencies?: Array<{ __typename?: 'Dependency', name?: string | null, repo?: string | null, type?: DependencyType | null, version?: string | null, optional?: boolean | null } | null> | null, wirings?: { __typename?: 'Wirings', terraform?: Map | null, helm?: Map | null } | null } | null } | null, configuration?: Array<{ __typename?: 'RecipeConfiguration', name?: string | null, type?: Datatype | null, default?: string | null, documentation?: string | null, optional?: boolean | null, placeholder?: string | null, functionName?: string | null, condition?: { __typename?: 'RecipeCondition', field: string, operation: Operation, value?: string | null } | null, validation?: { __typename?: 'RecipeValidation', type: ValidationType, regex?: string | null, message: string } | null } | null> | null } | null> | null, configuration?: Array<{ __typename?: 'RecipeConfiguration', name?: string | null, type?: Datatype | null, default?: string | null, documentation?: string | null, optional?: boolean | null, placeholder?: string | null, functionName?: string | null, condition?: { __typename?: 'RecipeCondition', field: string, operation: Operation, value?: string | null } | null, validation?: { __typename?: 'RecipeValidation', type: ValidationType, regex?: string | null, message: string } | null } | null> | null } | null> | null } | null> | null, tests?: Array<{ __typename?: 'RecipeTest', type: TestType, name: string, message?: string | null, args?: Array<{ __typename?: 'TestArgument', name: string, repo: string, key: string } | null> | null } | null> | null, repository?: { __typename?: 'Repository', id: string, name: string } | null, oidcSettings?: { __typename?: 'OidcSettings', uriFormat?: string | null, uriFormats?: Array | null, authMethod: OidcAuthMethod, domainKey?: string | null, subdomain?: boolean | null } | null, recipeSections?: Array<{ __typename?: 'RecipeSection', index?: number | null, repository?: { __typename?: 'Repository', id: string, name: string, notes?: string | null, description?: string | null, documentation?: string | null, icon?: string | null, darkIcon?: string | null, private?: boolean | null, trending?: boolean | null, verified?: boolean | null, category?: Category | null, installation?: { __typename?: 'Installation', id: string, context?: Map | null, license?: string | null, licenseKey?: string | null, acmeKeyId?: string | null, acmeSecret?: string | null, autoUpgrade?: boolean | null, trackTag: string, repository?: { __typename?: 'Repository', id: string, name: string, notes?: string | null, description?: string | null, documentation?: string | null, icon?: string | null, darkIcon?: string | null, private?: boolean | null, trending?: boolean | null, verified?: boolean | null, category?: Category | null, oauthSettings?: { __typename?: 'OauthSettings', uriFormat: string, authMethod: OidcAuthMethod } | null, publisher?: { __typename?: 'Publisher', id?: string | null, name: string, phone?: string | null, avatar?: string | null, description?: string | null, backgroundColor?: string | null, owner?: { __typename?: 'User', id: string, name: string, email: string, avatar?: string | null, provider?: Provider | null, demoing?: boolean | null, demoed?: boolean | null, onboarding?: OnboardingState | null, emailConfirmed?: boolean | null, emailConfirmBy?: Date | null, backgroundColor?: string | null, serviceAccount?: boolean | null, onboardingChecklist?: { __typename?: 'OnboardingChecklist', dismissed?: boolean | null, status?: OnboardingChecklistState | null } | null, roles?: { __typename?: 'Roles', admin?: boolean | null } | null } | null, address?: { __typename?: 'Address', line1?: string | null, line2?: string | null, city?: string | null, country?: string | null, state?: string | null, zip?: string | null } | null } | null, recipes?: Array<{ __typename?: 'Recipe', name: string, provider?: Provider | null, description?: string | null } | null> | null } | null, user?: { __typename?: 'User', id: string, name: string, email: string, avatar?: string | null, provider?: Provider | null, demoing?: boolean | null, demoed?: boolean | null, onboarding?: OnboardingState | null, emailConfirmed?: boolean | null, emailConfirmBy?: Date | null, backgroundColor?: string | null, serviceAccount?: boolean | null, onboardingChecklist?: { __typename?: 'OnboardingChecklist', dismissed?: boolean | null, status?: OnboardingChecklistState | null } | null, roles?: { __typename?: 'Roles', admin?: boolean | null } | null } | null, oidcProvider?: { __typename?: 'OidcProvider', id: string, clientId: string, authMethod: OidcAuthMethod, clientSecret: string, redirectUris?: Array | null, bindings?: Array<{ __typename?: 'OidcProviderBinding', id: string, user?: { __typename?: 'User', id: string, name: string, email: string, avatar?: string | null, provider?: Provider | null, demoing?: boolean | null, demoed?: boolean | null, onboarding?: OnboardingState | null, emailConfirmed?: boolean | null, emailConfirmBy?: Date | null, backgroundColor?: string | null, serviceAccount?: boolean | null, onboardingChecklist?: { __typename?: 'OnboardingChecklist', dismissed?: boolean | null, status?: OnboardingChecklistState | null } | null, roles?: { __typename?: 'Roles', admin?: boolean | null } | null } | null, group?: { __typename?: 'Group', id: string, name: string, global?: boolean | null, description?: string | null } | null } | null> | null, configuration?: { __typename?: 'OuathConfiguration', issuer?: string | null, authorizationEndpoint?: string | null, tokenEndpoint?: string | null, jwksUri?: string | null, userinfoEndpoint?: string | null } | null } | null } | null, oauthSettings?: { __typename?: 'OauthSettings', uriFormat: string, authMethod: OidcAuthMethod } | null, publisher?: { __typename?: 'Publisher', id?: string | null, name: string, phone?: string | null, avatar?: string | null, description?: string | null, backgroundColor?: string | null, owner?: { __typename?: 'User', id: string, name: string, email: string, avatar?: string | null, provider?: Provider | null, demoing?: boolean | null, demoed?: boolean | null, onboarding?: OnboardingState | null, emailConfirmed?: boolean | null, emailConfirmBy?: Date | null, backgroundColor?: string | null, serviceAccount?: boolean | null, onboardingChecklist?: { __typename?: 'OnboardingChecklist', dismissed?: boolean | null, status?: OnboardingChecklistState | null } | null, roles?: { __typename?: 'Roles', admin?: boolean | null } | null } | null, address?: { __typename?: 'Address', line1?: string | null, line2?: string | null, city?: string | null, country?: string | null, state?: string | null, zip?: string | null } | null } | null, recipes?: Array<{ __typename?: 'Recipe', name: string, provider?: Provider | null, description?: string | null } | null> | null } | null, recipeItems?: Array<{ __typename?: 'RecipeItem', id?: string | null, chart?: { __typename?: 'Chart', id?: string | null, name: string, description?: string | null, latestVersion?: string | null, insertedAt?: Date | null, dependencies?: { __typename?: 'Dependencies', wait?: boolean | null, application?: boolean | null, providers?: Array | null, secrets?: Array | null, providerWirings?: Map | null, outputs?: Map | null, dependencies?: Array<{ __typename?: 'Dependency', name?: string | null, repo?: string | null, type?: DependencyType | null, version?: string | null, optional?: boolean | null } | null> | null, wirings?: { __typename?: 'Wirings', terraform?: Map | null, helm?: Map | null } | null } | null } | null, terraform?: { __typename?: 'Terraform', id?: string | null, name?: string | null, readme?: string | null, package?: string | null, description?: string | null, latestVersion?: string | null, valuesTemplate?: string | null, insertedAt?: Date | null, dependencies?: { __typename?: 'Dependencies', wait?: boolean | null, application?: boolean | null, providers?: Array | null, secrets?: Array | null, providerWirings?: Map | null, outputs?: Map | null, dependencies?: Array<{ __typename?: 'Dependency', name?: string | null, repo?: string | null, type?: DependencyType | null, version?: string | null, optional?: boolean | null } | null> | null, wirings?: { __typename?: 'Wirings', terraform?: Map | null, helm?: Map | null } | null } | null } | null, configuration?: Array<{ __typename?: 'RecipeConfiguration', name?: string | null, type?: Datatype | null, default?: string | null, documentation?: string | null, optional?: boolean | null, placeholder?: string | null, functionName?: string | null, condition?: { __typename?: 'RecipeCondition', field: string, operation: Operation, value?: string | null } | null, validation?: { __typename?: 'RecipeValidation', type: ValidationType, regex?: string | null, message: string } | null } | null> | null } | null> | null, configuration?: Array<{ __typename?: 'RecipeConfiguration', name?: string | null, type?: Datatype | null, default?: string | null, documentation?: string | null, optional?: boolean | null, placeholder?: string | null, functionName?: string | null, condition?: { __typename?: 'RecipeCondition', field: string, operation: Operation, value?: string | null } | null, validation?: { __typename?: 'RecipeValidation', type: ValidationType, regex?: string | null, message: string } | null } | null> | null } | null> | null } | null }; - -export type ListRecipesQueryVariables = Exact<{ - repositoryName?: InputMaybe; - repositoryId?: InputMaybe; - provider?: InputMaybe; -}>; - - -export type ListRecipesQuery = { __typename?: 'RootQueryType', recipes?: { __typename?: 'RecipeConnection', edges?: Array<{ __typename?: 'RecipeEdge', node?: { __typename?: 'Recipe', id: string, name: string, description?: string | null, restricted?: boolean | null, provider?: Provider | null, tests?: Array<{ __typename?: 'RecipeTest', type: TestType, name: string, message?: string | null, args?: Array<{ __typename?: 'TestArgument', name: string, repo: string, key: string } | null> | null } | null> | null, repository?: { __typename?: 'Repository', id: string, name: string } | null, oidcSettings?: { __typename?: 'OidcSettings', uriFormat?: string | null, uriFormats?: Array | null, authMethod: OidcAuthMethod, domainKey?: string | null, subdomain?: boolean | null } | null, recipeSections?: Array<{ __typename?: 'RecipeSection', index?: number | null, repository?: { __typename?: 'Repository', id: string, name: string, notes?: string | null, description?: string | null, documentation?: string | null, icon?: string | null, darkIcon?: string | null, private?: boolean | null, trending?: boolean | null, verified?: boolean | null, category?: Category | null, installation?: { __typename?: 'Installation', id: string, context?: Map | null, license?: string | null, licenseKey?: string | null, acmeKeyId?: string | null, acmeSecret?: string | null, autoUpgrade?: boolean | null, trackTag: string, repository?: { __typename?: 'Repository', id: string, name: string, notes?: string | null, description?: string | null, documentation?: string | null, icon?: string | null, darkIcon?: string | null, private?: boolean | null, trending?: boolean | null, verified?: boolean | null, category?: Category | null, oauthSettings?: { __typename?: 'OauthSettings', uriFormat: string, authMethod: OidcAuthMethod } | null, publisher?: { __typename?: 'Publisher', id?: string | null, name: string, phone?: string | null, avatar?: string | null, description?: string | null, backgroundColor?: string | null, owner?: { __typename?: 'User', id: string, name: string, email: string, avatar?: string | null, provider?: Provider | null, demoing?: boolean | null, demoed?: boolean | null, onboarding?: OnboardingState | null, emailConfirmed?: boolean | null, emailConfirmBy?: Date | null, backgroundColor?: string | null, serviceAccount?: boolean | null, onboardingChecklist?: { __typename?: 'OnboardingChecklist', dismissed?: boolean | null, status?: OnboardingChecklistState | null } | null, roles?: { __typename?: 'Roles', admin?: boolean | null } | null } | null, address?: { __typename?: 'Address', line1?: string | null, line2?: string | null, city?: string | null, country?: string | null, state?: string | null, zip?: string | null } | null } | null, recipes?: Array<{ __typename?: 'Recipe', name: string, provider?: Provider | null, description?: string | null } | null> | null } | null, user?: { __typename?: 'User', id: string, name: string, email: string, avatar?: string | null, provider?: Provider | null, demoing?: boolean | null, demoed?: boolean | null, onboarding?: OnboardingState | null, emailConfirmed?: boolean | null, emailConfirmBy?: Date | null, backgroundColor?: string | null, serviceAccount?: boolean | null, onboardingChecklist?: { __typename?: 'OnboardingChecklist', dismissed?: boolean | null, status?: OnboardingChecklistState | null } | null, roles?: { __typename?: 'Roles', admin?: boolean | null } | null } | null, oidcProvider?: { __typename?: 'OidcProvider', id: string, clientId: string, authMethod: OidcAuthMethod, clientSecret: string, redirectUris?: Array | null, bindings?: Array<{ __typename?: 'OidcProviderBinding', id: string, user?: { __typename?: 'User', id: string, name: string, email: string, avatar?: string | null, provider?: Provider | null, demoing?: boolean | null, demoed?: boolean | null, onboarding?: OnboardingState | null, emailConfirmed?: boolean | null, emailConfirmBy?: Date | null, backgroundColor?: string | null, serviceAccount?: boolean | null, onboardingChecklist?: { __typename?: 'OnboardingChecklist', dismissed?: boolean | null, status?: OnboardingChecklistState | null } | null, roles?: { __typename?: 'Roles', admin?: boolean | null } | null } | null, group?: { __typename?: 'Group', id: string, name: string, global?: boolean | null, description?: string | null } | null } | null> | null, configuration?: { __typename?: 'OuathConfiguration', issuer?: string | null, authorizationEndpoint?: string | null, tokenEndpoint?: string | null, jwksUri?: string | null, userinfoEndpoint?: string | null } | null } | null } | null, oauthSettings?: { __typename?: 'OauthSettings', uriFormat: string, authMethod: OidcAuthMethod } | null, publisher?: { __typename?: 'Publisher', id?: string | null, name: string, phone?: string | null, avatar?: string | null, description?: string | null, backgroundColor?: string | null, owner?: { __typename?: 'User', id: string, name: string, email: string, avatar?: string | null, provider?: Provider | null, demoing?: boolean | null, demoed?: boolean | null, onboarding?: OnboardingState | null, emailConfirmed?: boolean | null, emailConfirmBy?: Date | null, backgroundColor?: string | null, serviceAccount?: boolean | null, onboardingChecklist?: { __typename?: 'OnboardingChecklist', dismissed?: boolean | null, status?: OnboardingChecklistState | null } | null, roles?: { __typename?: 'Roles', admin?: boolean | null } | null } | null, address?: { __typename?: 'Address', line1?: string | null, line2?: string | null, city?: string | null, country?: string | null, state?: string | null, zip?: string | null } | null } | null, recipes?: Array<{ __typename?: 'Recipe', name: string, provider?: Provider | null, description?: string | null } | null> | null } | null, recipeItems?: Array<{ __typename?: 'RecipeItem', id?: string | null, chart?: { __typename?: 'Chart', id?: string | null, name: string, description?: string | null, latestVersion?: string | null, insertedAt?: Date | null, dependencies?: { __typename?: 'Dependencies', wait?: boolean | null, application?: boolean | null, providers?: Array | null, secrets?: Array | null, providerWirings?: Map | null, outputs?: Map | null, dependencies?: Array<{ __typename?: 'Dependency', name?: string | null, repo?: string | null, type?: DependencyType | null, version?: string | null, optional?: boolean | null } | null> | null, wirings?: { __typename?: 'Wirings', terraform?: Map | null, helm?: Map | null } | null } | null } | null, terraform?: { __typename?: 'Terraform', id?: string | null, name?: string | null, readme?: string | null, package?: string | null, description?: string | null, latestVersion?: string | null, valuesTemplate?: string | null, insertedAt?: Date | null, dependencies?: { __typename?: 'Dependencies', wait?: boolean | null, application?: boolean | null, providers?: Array | null, secrets?: Array | null, providerWirings?: Map | null, outputs?: Map | null, dependencies?: Array<{ __typename?: 'Dependency', name?: string | null, repo?: string | null, type?: DependencyType | null, version?: string | null, optional?: boolean | null } | null> | null, wirings?: { __typename?: 'Wirings', terraform?: Map | null, helm?: Map | null } | null } | null } | null, configuration?: Array<{ __typename?: 'RecipeConfiguration', name?: string | null, type?: Datatype | null, default?: string | null, documentation?: string | null, optional?: boolean | null, placeholder?: string | null, functionName?: string | null, condition?: { __typename?: 'RecipeCondition', field: string, operation: Operation, value?: string | null } | null, validation?: { __typename?: 'RecipeValidation', type: ValidationType, regex?: string | null, message: string } | null } | null> | null } | null> | null, configuration?: Array<{ __typename?: 'RecipeConfiguration', name?: string | null, type?: Datatype | null, default?: string | null, documentation?: string | null, optional?: boolean | null, placeholder?: string | null, functionName?: string | null, condition?: { __typename?: 'RecipeCondition', field: string, operation: Operation, value?: string | null } | null, validation?: { __typename?: 'RecipeValidation', type: ValidationType, regex?: string | null, message: string } | null } | null> | null } | null> | null } | null } | null> | null } | null }; - -export type CreateRecipeMutationVariables = Exact<{ - name: Scalars['String']; - attributes: RecipeAttributes; -}>; - - -export type CreateRecipeMutation = { __typename?: 'RootMutationType', createRecipe?: { __typename?: 'Recipe', id: string } | null }; - -export type InstallRecipeMutationVariables = Exact<{ - id: Scalars['ID']; -}>; - - -export type InstallRecipeMutation = { __typename?: 'RootMutationType', installRecipe?: Array<{ __typename?: 'Installation', id: string } | null> | null }; - -export type CreateStackMutationVariables = Exact<{ - attributes: StackAttributes; -}>; - - -export type CreateStackMutation = { __typename?: 'RootMutationType', createStack?: { __typename?: 'Stack', id: string } | null }; - -export type GetStackQueryVariables = Exact<{ - name: Scalars['String']; - provider: Provider; -}>; - - -export type GetStackQuery = { __typename?: 'RootQueryType', stack?: { __typename?: 'Stack', id: string, name: string, displayName?: string | null, description?: string | null, featured?: boolean | null, creator?: { __typename?: 'User', id: string, name: string } | null, collections?: Array<{ __typename?: 'StackCollection', id: string, provider: Provider, bundles?: Array<{ __typename?: 'StackRecipe', recipe: { __typename?: 'Recipe', repository?: { __typename?: 'Repository', id: string, name: string, notes?: string | null, description?: string | null, documentation?: string | null, icon?: string | null, darkIcon?: string | null, private?: boolean | null, trending?: boolean | null, verified?: boolean | null, category?: Category | null, tags?: Array<{ __typename?: 'Tag', tag: string } | null> | null, oauthSettings?: { __typename?: 'OauthSettings', uriFormat: string, authMethod: OidcAuthMethod } | null, publisher?: { __typename?: 'Publisher', id?: string | null, name: string, phone?: string | null, avatar?: string | null, description?: string | null, backgroundColor?: string | null, owner?: { __typename?: 'User', id: string, name: string, email: string, avatar?: string | null, provider?: Provider | null, demoing?: boolean | null, demoed?: boolean | null, onboarding?: OnboardingState | null, emailConfirmed?: boolean | null, emailConfirmBy?: Date | null, backgroundColor?: string | null, serviceAccount?: boolean | null, onboardingChecklist?: { __typename?: 'OnboardingChecklist', dismissed?: boolean | null, status?: OnboardingChecklistState | null } | null, roles?: { __typename?: 'Roles', admin?: boolean | null } | null } | null, address?: { __typename?: 'Address', line1?: string | null, line2?: string | null, city?: string | null, country?: string | null, state?: string | null, zip?: string | null } | null } | null, recipes?: Array<{ __typename?: 'Recipe', name: string, provider?: Provider | null, description?: string | null } | null> | null } | null } } | null> | null } | null> | null } | null }; - -export type ListStacksQueryVariables = Exact<{ - featured?: InputMaybe; - cursor?: InputMaybe; -}>; - - -export type ListStacksQuery = { __typename?: 'RootQueryType', stacks?: { __typename?: 'StackConnection', edges?: Array<{ __typename?: 'StackEdge', node?: { __typename?: 'Stack', id: string, name: string, displayName?: string | null, description?: string | null, featured?: boolean | null, creator?: { __typename?: 'User', id: string, name: string } | null, collections?: Array<{ __typename?: 'StackCollection', id: string, provider: Provider, bundles?: Array<{ __typename?: 'StackRecipe', recipe: { __typename?: 'Recipe', repository?: { __typename?: 'Repository', id: string, name: string, notes?: string | null, description?: string | null, documentation?: string | null, icon?: string | null, darkIcon?: string | null, private?: boolean | null, trending?: boolean | null, verified?: boolean | null, category?: Category | null, tags?: Array<{ __typename?: 'Tag', tag: string } | null> | null, oauthSettings?: { __typename?: 'OauthSettings', uriFormat: string, authMethod: OidcAuthMethod } | null, publisher?: { __typename?: 'Publisher', id?: string | null, name: string, phone?: string | null, avatar?: string | null, description?: string | null, backgroundColor?: string | null, owner?: { __typename?: 'User', id: string, name: string, email: string, avatar?: string | null, provider?: Provider | null, demoing?: boolean | null, demoed?: boolean | null, onboarding?: OnboardingState | null, emailConfirmed?: boolean | null, emailConfirmBy?: Date | null, backgroundColor?: string | null, serviceAccount?: boolean | null, onboardingChecklist?: { __typename?: 'OnboardingChecklist', dismissed?: boolean | null, status?: OnboardingChecklistState | null } | null, roles?: { __typename?: 'Roles', admin?: boolean | null } | null } | null, address?: { __typename?: 'Address', line1?: string | null, line2?: string | null, city?: string | null, country?: string | null, state?: string | null, zip?: string | null } | null } | null, recipes?: Array<{ __typename?: 'Recipe', name: string, provider?: Provider | null, description?: string | null } | null> | null } | null } } | null> | null } | null> | null } | null } | null> | null } | null }; - -export type CreateQuickStackMutationVariables = Exact<{ - applicationIds?: InputMaybe> | InputMaybe>; - provider: Provider; -}>; - - -export type CreateQuickStackMutation = { __typename?: 'RootMutationType', quickStack?: { __typename?: 'Stack', id: string, name: string } | null }; - -export type InstallStackShellMutationVariables = Exact<{ - name: Scalars['String']; - context: ContextAttributes; - oidc: Scalars['Boolean']; -}>; - - -export type InstallStackShellMutation = { __typename?: 'RootMutationType', installStackShell?: Array<{ __typename?: 'Recipe', id: string, name: string } | null> | null }; - -export type ApplyLockFragment = { __typename?: 'ApplyLock', id: string, lock?: string | null }; - -export type CategoryFragment = { __typename?: 'CategoryInfo', category?: Category | null, count?: number | null }; - -export type RepoFragment = { __typename?: 'Repository', id: string, name: string, notes?: string | null, description?: string | null, documentation?: string | null, icon?: string | null, darkIcon?: string | null, private?: boolean | null, trending?: boolean | null, verified?: boolean | null, category?: Category | null, oauthSettings?: { __typename?: 'OauthSettings', uriFormat: string, authMethod: OidcAuthMethod } | null, publisher?: { __typename?: 'Publisher', id?: string | null, name: string, phone?: string | null, avatar?: string | null, description?: string | null, backgroundColor?: string | null, owner?: { __typename?: 'User', id: string, name: string, email: string, avatar?: string | null, provider?: Provider | null, demoing?: boolean | null, demoed?: boolean | null, onboarding?: OnboardingState | null, emailConfirmed?: boolean | null, emailConfirmBy?: Date | null, backgroundColor?: string | null, serviceAccount?: boolean | null, onboardingChecklist?: { __typename?: 'OnboardingChecklist', dismissed?: boolean | null, status?: OnboardingChecklistState | null } | null, roles?: { __typename?: 'Roles', admin?: boolean | null } | null } | null, address?: { __typename?: 'Address', line1?: string | null, line2?: string | null, city?: string | null, country?: string | null, state?: string | null, zip?: string | null } | null } | null, recipes?: Array<{ __typename?: 'Recipe', name: string, provider?: Provider | null, description?: string | null } | null> | null }; - -export type RepositoryFragment = { __typename?: 'Repository', id: string, name: string, notes?: string | null, icon?: string | null, darkIcon?: string | null, description?: string | null, publisher?: { __typename?: 'Publisher', name: string } | null, recipes?: Array<{ __typename?: 'Recipe', name: string } | null> | null }; - -export type DependenciesFragment = { __typename?: 'Dependencies', wait?: boolean | null, application?: boolean | null, providers?: Array | null, secrets?: Array | null, providerWirings?: Map | null, outputs?: Map | null, dependencies?: Array<{ __typename?: 'Dependency', name?: string | null, repo?: string | null, type?: DependencyType | null, version?: string | null, optional?: boolean | null } | null> | null, wirings?: { __typename?: 'Wirings', terraform?: Map | null, helm?: Map | null } | null }; - -export type IntegrationFragment = { __typename?: 'Integration', id: string, name: string, icon?: string | null, sourceUrl?: string | null, description?: string | null, tags?: Array<{ __typename?: 'Tag', tag: string } | null> | null, publisher?: { __typename?: 'Publisher', id?: string | null, name: string, phone?: string | null, avatar?: string | null, description?: string | null, backgroundColor?: string | null, owner?: { __typename?: 'User', id: string, name: string, email: string, avatar?: string | null, provider?: Provider | null, demoing?: boolean | null, demoed?: boolean | null, onboarding?: OnboardingState | null, emailConfirmed?: boolean | null, emailConfirmBy?: Date | null, backgroundColor?: string | null, serviceAccount?: boolean | null, onboardingChecklist?: { __typename?: 'OnboardingChecklist', dismissed?: boolean | null, status?: OnboardingChecklistState | null } | null, roles?: { __typename?: 'Roles', admin?: boolean | null } | null } | null, address?: { __typename?: 'Address', line1?: string | null, line2?: string | null, city?: string | null, country?: string | null, state?: string | null, zip?: string | null } | null } | null }; - -export type RepositoryQueryVariables = Exact<{ - id?: InputMaybe; - name?: InputMaybe; -}>; - - -export type RepositoryQuery = { __typename?: 'RootQueryType', repository?: { __typename?: 'Repository', editable?: boolean | null, publicKey?: string | null, secrets?: Map | null, readme?: string | null, mainBranch?: string | null, gitUrl?: string | null, homepage?: string | null, documentation?: string | null, id: string, name: string, notes?: string | null, description?: string | null, icon?: string | null, darkIcon?: string | null, private?: boolean | null, trending?: boolean | null, verified?: boolean | null, category?: Category | null, artifacts?: Array<{ __typename?: 'Artifact', id?: string | null, name?: string | null, blob?: string | null, type?: ArtifactType | null, platform?: ArtifactPlatform | null, arch?: string | null, filesize?: number | null, sha?: string | null, readme?: string | null, insertedAt?: Date | null, updatedAt?: Date | null } | null> | null, installation?: { __typename?: 'Installation', id: string, context?: Map | null, license?: string | null, licenseKey?: string | null, acmeKeyId?: string | null, acmeSecret?: string | null, autoUpgrade?: boolean | null, trackTag: string, oidcProvider?: { __typename?: 'OidcProvider', id: string, clientId: string, authMethod: OidcAuthMethod, clientSecret: string, redirectUris?: Array | null, bindings?: Array<{ __typename?: 'OidcProviderBinding', id: string, user?: { __typename?: 'User', id: string, name: string, email: string, avatar?: string | null, provider?: Provider | null, demoing?: boolean | null, demoed?: boolean | null, onboarding?: OnboardingState | null, emailConfirmed?: boolean | null, emailConfirmBy?: Date | null, backgroundColor?: string | null, serviceAccount?: boolean | null, onboardingChecklist?: { __typename?: 'OnboardingChecklist', dismissed?: boolean | null, status?: OnboardingChecklistState | null } | null, roles?: { __typename?: 'Roles', admin?: boolean | null } | null } | null, group?: { __typename?: 'Group', id: string, name: string, global?: boolean | null, description?: string | null } | null } | null> | null, configuration?: { __typename?: 'OuathConfiguration', issuer?: string | null, authorizationEndpoint?: string | null, tokenEndpoint?: string | null, jwksUri?: string | null, userinfoEndpoint?: string | null } | null } | null, repository?: { __typename?: 'Repository', id: string, name: string, notes?: string | null, description?: string | null, documentation?: string | null, icon?: string | null, darkIcon?: string | null, private?: boolean | null, trending?: boolean | null, verified?: boolean | null, category?: Category | null, oauthSettings?: { __typename?: 'OauthSettings', uriFormat: string, authMethod: OidcAuthMethod } | null, publisher?: { __typename?: 'Publisher', id?: string | null, name: string, phone?: string | null, avatar?: string | null, description?: string | null, backgroundColor?: string | null, owner?: { __typename?: 'User', id: string, name: string, email: string, avatar?: string | null, provider?: Provider | null, demoing?: boolean | null, demoed?: boolean | null, onboarding?: OnboardingState | null, emailConfirmed?: boolean | null, emailConfirmBy?: Date | null, backgroundColor?: string | null, serviceAccount?: boolean | null, onboardingChecklist?: { __typename?: 'OnboardingChecklist', dismissed?: boolean | null, status?: OnboardingChecklistState | null } | null, roles?: { __typename?: 'Roles', admin?: boolean | null } | null } | null, address?: { __typename?: 'Address', line1?: string | null, line2?: string | null, city?: string | null, country?: string | null, state?: string | null, zip?: string | null } | null } | null, recipes?: Array<{ __typename?: 'Recipe', name: string, provider?: Provider | null, description?: string | null } | null> | null } | null, user?: { __typename?: 'User', id: string, name: string, email: string, avatar?: string | null, provider?: Provider | null, demoing?: boolean | null, demoed?: boolean | null, onboarding?: OnboardingState | null, emailConfirmed?: boolean | null, emailConfirmBy?: Date | null, backgroundColor?: string | null, serviceAccount?: boolean | null, onboardingChecklist?: { __typename?: 'OnboardingChecklist', dismissed?: boolean | null, status?: OnboardingChecklistState | null } | null, roles?: { __typename?: 'Roles', admin?: boolean | null } | null } | null } | null, tags?: Array<{ __typename?: 'Tag', tag: string } | null> | null, license?: { __typename?: 'License', name?: string | null, url?: string | null } | null, community?: { __typename?: 'Community', discord?: string | null, slack?: string | null, homepage?: string | null, gitUrl?: string | null, twitter?: string | null } | null, oauthSettings?: { __typename?: 'OauthSettings', uriFormat: string, authMethod: OidcAuthMethod } | null, publisher?: { __typename?: 'Publisher', id?: string | null, name: string, phone?: string | null, avatar?: string | null, description?: string | null, backgroundColor?: string | null, owner?: { __typename?: 'User', id: string, name: string, email: string, avatar?: string | null, provider?: Provider | null, demoing?: boolean | null, demoed?: boolean | null, onboarding?: OnboardingState | null, emailConfirmed?: boolean | null, emailConfirmBy?: Date | null, backgroundColor?: string | null, serviceAccount?: boolean | null, onboardingChecklist?: { __typename?: 'OnboardingChecklist', dismissed?: boolean | null, status?: OnboardingChecklistState | null } | null, roles?: { __typename?: 'Roles', admin?: boolean | null } | null } | null, address?: { __typename?: 'Address', line1?: string | null, line2?: string | null, city?: string | null, country?: string | null, state?: string | null, zip?: string | null } | null } | null, recipes?: Array<{ __typename?: 'Recipe', name: string, provider?: Provider | null, description?: string | null } | null> | null } | null }; - -export type CreateResourceDefinitionMutationVariables = Exact<{ - name: Scalars['String']; - input: ResourceDefinitionAttributes; -}>; - - -export type CreateResourceDefinitionMutation = { __typename?: 'RootMutationType', updateRepository?: { __typename?: 'Repository', id: string } | null }; - -export type CreateIntegrationMutationVariables = Exact<{ - name: Scalars['String']; - attrs: IntegrationAttributes; -}>; - - -export type CreateIntegrationMutation = { __typename?: 'RootMutationType', createIntegration?: { __typename?: 'Integration', id: string } | null }; - -export type UpdateRepositoryMutationVariables = Exact<{ - name: Scalars['String']; - attrs: RepositoryAttributes; -}>; - - -export type UpdateRepositoryMutation = { __typename?: 'RootMutationType', updateRepository?: { __typename?: 'Repository', id: string } | null }; - -export type CreateRepositoryMutationVariables = Exact<{ - name: Scalars['String']; - publisher: Scalars['String']; - attributes: RepositoryAttributes; -}>; - - -export type CreateRepositoryMutation = { __typename?: 'RootMutationType', upsertRepository?: { __typename?: 'Repository', id: string } | null }; - -export type AcquireLockMutationVariables = Exact<{ - name: Scalars['String']; -}>; - - -export type AcquireLockMutation = { __typename?: 'RootMutationType', acquireLock?: { __typename?: 'ApplyLock', id: string, lock?: string | null } | null }; - -export type ReleaseLockMutationVariables = Exact<{ - name: Scalars['String']; - attrs: LockAttributes; -}>; - - -export type ReleaseLockMutation = { __typename?: 'RootMutationType', releaseLock?: { __typename?: 'ApplyLock', id: string, lock?: string | null } | null }; - -export type UnlockRepositoryMutationVariables = Exact<{ - name: Scalars['String']; -}>; - - -export type UnlockRepositoryMutation = { __typename?: 'RootMutationType', unlockRepository?: number | null }; - -export type ListRepositoriesQueryVariables = Exact<{ - q?: InputMaybe; - installed?: InputMaybe; - first?: InputMaybe; - provider?: InputMaybe; -}>; - - -export type ListRepositoriesQuery = { __typename?: 'RootQueryType', repositories?: { __typename?: 'RepositoryConnection', edges?: Array<{ __typename?: 'RepositoryEdge', node?: { __typename?: 'Repository', id: string, name: string, notes?: string | null, icon?: string | null, darkIcon?: string | null, description?: string | null, publisher?: { __typename?: 'Publisher', name: string } | null, recipes?: Array<{ __typename?: 'Recipe', name: string } | null> | null } | null } | null> | null } | null }; - -export type ScaffoldsQueryVariables = Exact<{ - app: Scalars['String']; - pub: Scalars['String']; - cat: Category; - ing?: InputMaybe; - pg?: InputMaybe; -}>; - - -export type ScaffoldsQuery = { __typename?: 'RootQueryType', scaffold?: Array<{ __typename?: 'ScaffoldFile', path?: string | null, content?: string | null } | null> | null }; - -export type DeleteRepositoryMutationVariables = Exact<{ - id: Scalars['ID']; -}>; - - -export type DeleteRepositoryMutation = { __typename?: 'RootMutationType', deleteRepository?: { __typename?: 'Repository', id: string } | null }; - -export type GetTfProvidersQueryVariables = Exact<{ [key: string]: never; }>; - - -export type GetTfProvidersQuery = { __typename?: 'RootQueryType', terraformProviders?: Array | null }; - -export type GetTfProviderScaffoldQueryVariables = Exact<{ - name: Provider; - vsn?: InputMaybe; -}>; - - -export type GetTfProviderScaffoldQuery = { __typename?: 'RootQueryType', terraformProvider?: { __typename?: 'TerraformProvider', name?: Provider | null, content?: string | null } | null }; - -export type CloudShellFragment = { __typename?: 'CloudShell', id: string, aesKey: string, gitUrl: string, alive: boolean, provider: Provider, subdomain: string, cluster: string, status?: { __typename?: 'ShellStatus', ready?: boolean | null, initialized?: boolean | null, containersReady?: boolean | null, podScheduled?: boolean | null } | null }; - -export type DemoProjectFragment = { __typename?: 'DemoProject', id: string, projectId: string, credentials?: string | null, ready?: boolean | null, state?: DemoProjectState | null }; - -export type GetShellQueryVariables = Exact<{ [key: string]: never; }>; - - -export type GetShellQuery = { __typename?: 'RootQueryType', shell?: { __typename?: 'CloudShell', id: string, aesKey: string, gitUrl: string, alive: boolean, provider: Provider, subdomain: string, cluster: string, status?: { __typename?: 'ShellStatus', ready?: boolean | null, initialized?: boolean | null, containersReady?: boolean | null, podScheduled?: boolean | null } | null } | null }; - -export type DeleteShellMutationVariables = Exact<{ [key: string]: never; }>; - - -export type DeleteShellMutation = { __typename?: 'RootMutationType', deleteShell?: { __typename?: 'CloudShell', id: string, aesKey: string, gitUrl: string, alive: boolean, provider: Provider, subdomain: string, cluster: string, status?: { __typename?: 'ShellStatus', ready?: boolean | null, initialized?: boolean | null, containersReady?: boolean | null, podScheduled?: boolean | null } | null } | null }; - -export type TerraformFragment = { __typename?: 'Terraform', id?: string | null, name?: string | null, readme?: string | null, package?: string | null, description?: string | null, latestVersion?: string | null, valuesTemplate?: string | null, insertedAt?: Date | null, dependencies?: { __typename?: 'Dependencies', wait?: boolean | null, application?: boolean | null, providers?: Array | null, secrets?: Array | null, providerWirings?: Map | null, outputs?: Map | null, dependencies?: Array<{ __typename?: 'Dependency', name?: string | null, repo?: string | null, type?: DependencyType | null, version?: string | null, optional?: boolean | null } | null> | null, wirings?: { __typename?: 'Wirings', terraform?: Map | null, helm?: Map | null } | null } | null }; - -export type TerraformInstallationFragment = { __typename?: 'TerraformInstallation', id?: string | null, terraform?: { __typename?: 'Terraform', id?: string | null, name?: string | null, readme?: string | null, package?: string | null, description?: string | null, latestVersion?: string | null, valuesTemplate?: string | null, insertedAt?: Date | null, dependencies?: { __typename?: 'Dependencies', wait?: boolean | null, application?: boolean | null, providers?: Array | null, secrets?: Array | null, providerWirings?: Map | null, outputs?: Map | null, dependencies?: Array<{ __typename?: 'Dependency', name?: string | null, repo?: string | null, type?: DependencyType | null, version?: string | null, optional?: boolean | null } | null> | null, wirings?: { __typename?: 'Wirings', terraform?: Map | null, helm?: Map | null } | null } | null } | null, version?: { __typename?: 'Version', id: string, helm?: Map | null, readme?: string | null, valuesTemplate?: string | null, version: string, insertedAt?: Date | null, package?: string | null, crds?: Array<{ __typename?: 'Crd', id: string, name: string, blob?: string | null } | null> | null, chart?: { __typename?: 'Chart', id?: string | null, name: string, description?: string | null, latestVersion?: string | null, insertedAt?: Date | null, dependencies?: { __typename?: 'Dependencies', wait?: boolean | null, application?: boolean | null, providers?: Array | null, secrets?: Array | null, providerWirings?: Map | null, outputs?: Map | null, dependencies?: Array<{ __typename?: 'Dependency', name?: string | null, repo?: string | null, type?: DependencyType | null, version?: string | null, optional?: boolean | null } | null> | null, wirings?: { __typename?: 'Wirings', terraform?: Map | null, helm?: Map | null } | null } | null } | null, terraform?: { __typename?: 'Terraform', id?: string | null, name?: string | null } | null, dependencies?: { __typename?: 'Dependencies', wait?: boolean | null, application?: boolean | null, providers?: Array | null, secrets?: Array | null, providerWirings?: Map | null, outputs?: Map | null, dependencies?: Array<{ __typename?: 'Dependency', name?: string | null, repo?: string | null, type?: DependencyType | null, version?: string | null, optional?: boolean | null } | null> | null, wirings?: { __typename?: 'Wirings', terraform?: Map | null, helm?: Map | null } | null } | null } | null }; - -export type GetTerraformQueryVariables = Exact<{ - id: Scalars['ID']; -}>; - - -export type GetTerraformQuery = { __typename?: 'RootQueryType', terraform?: { __typename?: 'TerraformConnection', edges?: Array<{ __typename?: 'TerraformEdge', node?: { __typename?: 'Terraform', id?: string | null, name?: string | null, readme?: string | null, package?: string | null, description?: string | null, latestVersion?: string | null, valuesTemplate?: string | null, insertedAt?: Date | null, dependencies?: { __typename?: 'Dependencies', wait?: boolean | null, application?: boolean | null, providers?: Array | null, secrets?: Array | null, providerWirings?: Map | null, outputs?: Map | null, dependencies?: Array<{ __typename?: 'Dependency', name?: string | null, repo?: string | null, type?: DependencyType | null, version?: string | null, optional?: boolean | null } | null> | null, wirings?: { __typename?: 'Wirings', terraform?: Map | null, helm?: Map | null } | null } | null } | null } | null> | null } | null }; - -export type GetTerraformInstallationsQueryVariables = Exact<{ - id: Scalars['ID']; -}>; - - -export type GetTerraformInstallationsQuery = { __typename?: 'RootQueryType', terraformInstallations?: { __typename?: 'TerraformInstallationConnection', edges?: Array<{ __typename?: 'TerraformInstallationEdge', node?: { __typename?: 'TerraformInstallation', id?: string | null, terraform?: { __typename?: 'Terraform', id?: string | null, name?: string | null, readme?: string | null, package?: string | null, description?: string | null, latestVersion?: string | null, valuesTemplate?: string | null, insertedAt?: Date | null, dependencies?: { __typename?: 'Dependencies', wait?: boolean | null, application?: boolean | null, providers?: Array | null, secrets?: Array | null, providerWirings?: Map | null, outputs?: Map | null, dependencies?: Array<{ __typename?: 'Dependency', name?: string | null, repo?: string | null, type?: DependencyType | null, version?: string | null, optional?: boolean | null } | null> | null, wirings?: { __typename?: 'Wirings', terraform?: Map | null, helm?: Map | null } | null } | null } | null, version?: { __typename?: 'Version', id: string, helm?: Map | null, readme?: string | null, valuesTemplate?: string | null, version: string, insertedAt?: Date | null, package?: string | null, crds?: Array<{ __typename?: 'Crd', id: string, name: string, blob?: string | null } | null> | null, chart?: { __typename?: 'Chart', id?: string | null, name: string, description?: string | null, latestVersion?: string | null, insertedAt?: Date | null, dependencies?: { __typename?: 'Dependencies', wait?: boolean | null, application?: boolean | null, providers?: Array | null, secrets?: Array | null, providerWirings?: Map | null, outputs?: Map | null, dependencies?: Array<{ __typename?: 'Dependency', name?: string | null, repo?: string | null, type?: DependencyType | null, version?: string | null, optional?: boolean | null } | null> | null, wirings?: { __typename?: 'Wirings', terraform?: Map | null, helm?: Map | null } | null } | null } | null, terraform?: { __typename?: 'Terraform', id?: string | null, name?: string | null } | null, dependencies?: { __typename?: 'Dependencies', wait?: boolean | null, application?: boolean | null, providers?: Array | null, secrets?: Array | null, providerWirings?: Map | null, outputs?: Map | null, dependencies?: Array<{ __typename?: 'Dependency', name?: string | null, repo?: string | null, type?: DependencyType | null, version?: string | null, optional?: boolean | null } | null> | null, wirings?: { __typename?: 'Wirings', terraform?: Map | null, helm?: Map | null } | null } | null } | null } | null } | null> | null } | null }; - -export type UploadTerraformMutationVariables = Exact<{ - repoName: Scalars['String']; - name: Scalars['String']; - uploadOrUrl: Scalars['UploadOrUrl']; -}>; - - -export type UploadTerraformMutation = { __typename?: 'RootMutationType', uploadTerraform?: { __typename?: 'Terraform', id?: string | null, name?: string | null, readme?: string | null, package?: string | null, description?: string | null, latestVersion?: string | null, valuesTemplate?: string | null, insertedAt?: Date | null, dependencies?: { __typename?: 'Dependencies', wait?: boolean | null, application?: boolean | null, providers?: Array | null, secrets?: Array | null, providerWirings?: Map | null, outputs?: Map | null, dependencies?: Array<{ __typename?: 'Dependency', name?: string | null, repo?: string | null, type?: DependencyType | null, version?: string | null, optional?: boolean | null } | null> | null, wirings?: { __typename?: 'Wirings', terraform?: Map | null, helm?: Map | null } | null } | null } | null }; - -export type UninstallTerraformMutationVariables = Exact<{ - id: Scalars['ID']; -}>; - - -export type UninstallTerraformMutation = { __typename?: 'RootMutationType', uninstallTerraform?: { __typename?: 'TerraformInstallation', id?: string | null } | null }; - -export type StepFragment = { __typename?: 'TestStep', id: string, name: string, status: TestStatus, hasLogs?: boolean | null, description: string, insertedAt?: Date | null, updatedAt?: Date | null }; - -export type TestFragment = { __typename?: 'Test', id: string, name?: string | null, promoteTag: string, status: TestStatus, insertedAt?: Date | null, updatedAt?: Date | null, steps?: Array<{ __typename?: 'TestStep', id: string, name: string, status: TestStatus, hasLogs?: boolean | null, description: string, insertedAt?: Date | null, updatedAt?: Date | null } | null> | null }; - -export type CreateTestMutationVariables = Exact<{ - name: Scalars['String']; - attrs: TestAttributes; -}>; - - -export type CreateTestMutation = { __typename?: 'RootMutationType', createTest?: { __typename?: 'Test', id: string, name?: string | null, promoteTag: string, status: TestStatus, insertedAt?: Date | null, updatedAt?: Date | null, steps?: Array<{ __typename?: 'TestStep', id: string, name: string, status: TestStatus, hasLogs?: boolean | null, description: string, insertedAt?: Date | null, updatedAt?: Date | null } | null> | null } | null }; - -export type UpdateTestMutationVariables = Exact<{ - id: Scalars['ID']; - attrs: TestAttributes; -}>; - - -export type UpdateTestMutation = { __typename?: 'RootMutationType', updateTest?: { __typename?: 'Test', id: string, name?: string | null, promoteTag: string, status: TestStatus, insertedAt?: Date | null, updatedAt?: Date | null, steps?: Array<{ __typename?: 'TestStep', id: string, name: string, status: TestStatus, hasLogs?: boolean | null, description: string, insertedAt?: Date | null, updatedAt?: Date | null } | null> | null } | null }; - -export type UpdateStepMutationVariables = Exact<{ - id: Scalars['ID']; - logs: Scalars['UploadOrUrl']; -}>; - - -export type UpdateStepMutation = { __typename?: 'RootMutationType', updateStep?: { __typename?: 'TestStep', id: string } | null }; - -export type PublishLogsMutationVariables = Exact<{ - id: Scalars['ID']; - logs: Scalars['String']; -}>; - - -export type PublishLogsMutation = { __typename?: 'RootMutationType', publishLogs?: { __typename?: 'TestStep', id: string } | null }; - -export type UpgradeQueueFragment = { __typename?: 'UpgradeQueue', id: string, acked?: string | null, name?: string | null, domain?: string | null, git?: string | null, pingedAt?: Date | null, provider?: Provider | null }; - -export type RolloutFragment = { __typename?: 'Rollout', id: string, event?: string | null, cursor?: string | null, count?: number | null, status: RolloutStatus, heartbeat?: Date | null }; - -export type UpgradeFragment = { __typename?: 'Upgrade', id: string, message?: string | null, insertedAt?: Date | null, repository?: { __typename?: 'Repository', id: string, name: string, notes?: string | null, description?: string | null, documentation?: string | null, icon?: string | null, darkIcon?: string | null, private?: boolean | null, trending?: boolean | null, verified?: boolean | null, category?: Category | null, oauthSettings?: { __typename?: 'OauthSettings', uriFormat: string, authMethod: OidcAuthMethod } | null, publisher?: { __typename?: 'Publisher', id?: string | null, name: string, phone?: string | null, avatar?: string | null, description?: string | null, backgroundColor?: string | null, owner?: { __typename?: 'User', id: string, name: string, email: string, avatar?: string | null, provider?: Provider | null, demoing?: boolean | null, demoed?: boolean | null, onboarding?: OnboardingState | null, emailConfirmed?: boolean | null, emailConfirmBy?: Date | null, backgroundColor?: string | null, serviceAccount?: boolean | null, onboardingChecklist?: { __typename?: 'OnboardingChecklist', dismissed?: boolean | null, status?: OnboardingChecklistState | null } | null, roles?: { __typename?: 'Roles', admin?: boolean | null } | null } | null, address?: { __typename?: 'Address', line1?: string | null, line2?: string | null, city?: string | null, country?: string | null, state?: string | null, zip?: string | null } | null } | null, recipes?: Array<{ __typename?: 'Recipe', name: string, provider?: Provider | null, description?: string | null } | null> | null } | null }; - -export type DeferredUpdateFragment = { __typename?: 'DeferredUpdate', id: string, dequeueAt?: Date | null, attempts?: number | null, insertedAt?: Date | null, version?: { __typename?: 'Version', version: string } | null }; - -export type AccountFragment = { __typename?: 'Account', id: string, name?: string | null, billingCustomerId?: string | null, backgroundColor?: string | null }; - -export type GroupFragment = { __typename?: 'Group', id: string, name: string, global?: boolean | null, description?: string | null }; - -export type UserFragment = { __typename?: 'User', id: string, name: string, email: string, avatar?: string | null, provider?: Provider | null, demoing?: boolean | null, demoed?: boolean | null, onboarding?: OnboardingState | null, emailConfirmed?: boolean | null, emailConfirmBy?: Date | null, backgroundColor?: string | null, serviceAccount?: boolean | null, onboardingChecklist?: { __typename?: 'OnboardingChecklist', dismissed?: boolean | null, status?: OnboardingChecklistState | null } | null, roles?: { __typename?: 'Roles', admin?: boolean | null } | null }; - -export type ImpersonationPolicyFragment = { __typename?: 'ImpersonationPolicy', id: string, bindings?: Array<{ __typename?: 'ImpersonationPolicyBinding', id: string, group?: { __typename?: 'Group', id: string, name: string } | null, user?: { __typename?: 'User', id: string, name: string, email: string } | null } | null> | null }; - -export type GroupMemberFragment = { __typename?: 'GroupMember', id: string, user?: { __typename?: 'User', id: string, name: string, email: string, avatar?: string | null, provider?: Provider | null, demoing?: boolean | null, demoed?: boolean | null, onboarding?: OnboardingState | null, emailConfirmed?: boolean | null, emailConfirmBy?: Date | null, backgroundColor?: string | null, serviceAccount?: boolean | null, onboardingChecklist?: { __typename?: 'OnboardingChecklist', dismissed?: boolean | null, status?: OnboardingChecklistState | null } | null, roles?: { __typename?: 'Roles', admin?: boolean | null } | null } | null }; - -export type TokenFragment = { __typename?: 'PersistedToken', id?: string | null, token?: string | null, insertedAt?: Date | null }; - -export type TokenAuditFragment = { __typename?: 'PersistedTokenAudit', ip?: string | null, timestamp?: Date | null, count?: number | null, country?: string | null, city?: string | null, latitude?: string | null, longitude?: string | null }; - -export type AddressFragment = { __typename?: 'Address', line1?: string | null, line2?: string | null, city?: string | null, country?: string | null, state?: string | null, zip?: string | null }; - -export type PublisherFragment = { __typename?: 'Publisher', id?: string | null, name: string, phone?: string | null, avatar?: string | null, description?: string | null, backgroundColor?: string | null, owner?: { __typename?: 'User', id: string, name: string, email: string, avatar?: string | null, provider?: Provider | null, demoing?: boolean | null, demoed?: boolean | null, onboarding?: OnboardingState | null, emailConfirmed?: boolean | null, emailConfirmBy?: Date | null, backgroundColor?: string | null, serviceAccount?: boolean | null, onboardingChecklist?: { __typename?: 'OnboardingChecklist', dismissed?: boolean | null, status?: OnboardingChecklistState | null } | null, roles?: { __typename?: 'Roles', admin?: boolean | null } | null } | null, address?: { __typename?: 'Address', line1?: string | null, line2?: string | null, city?: string | null, country?: string | null, state?: string | null, zip?: string | null } | null }; - -export type WebhookFragment = { __typename?: 'Webhook', id?: string | null, url?: string | null, secret?: string | null, insertedAt?: Date | null }; - -export type RoleBindingFragment = { __typename?: 'RoleBinding', id: string, user?: { __typename?: 'User', id: string, name: string, email: string, avatar?: string | null, provider?: Provider | null, demoing?: boolean | null, demoed?: boolean | null, onboarding?: OnboardingState | null, emailConfirmed?: boolean | null, emailConfirmBy?: Date | null, backgroundColor?: string | null, serviceAccount?: boolean | null, onboardingChecklist?: { __typename?: 'OnboardingChecklist', dismissed?: boolean | null, status?: OnboardingChecklistState | null } | null, roles?: { __typename?: 'Roles', admin?: boolean | null } | null } | null, group?: { __typename?: 'Group', id: string, name: string, global?: boolean | null, description?: string | null } | null }; - -export type RoleFragment = { __typename?: 'Role', id: string, name: string, description?: string | null, repositories?: Array | null, permissions?: Array | null, roleBindings?: Array<{ __typename?: 'RoleBinding', id: string, user?: { __typename?: 'User', id: string, name: string, email: string, avatar?: string | null, provider?: Provider | null, demoing?: boolean | null, demoed?: boolean | null, onboarding?: OnboardingState | null, emailConfirmed?: boolean | null, emailConfirmBy?: Date | null, backgroundColor?: string | null, serviceAccount?: boolean | null, onboardingChecklist?: { __typename?: 'OnboardingChecklist', dismissed?: boolean | null, status?: OnboardingChecklistState | null } | null, roles?: { __typename?: 'Roles', admin?: boolean | null } | null } | null, group?: { __typename?: 'Group', id: string, name: string, global?: boolean | null, description?: string | null } | null } | null> | null }; - -export type PublicKeyFragment = { __typename?: 'PublicKey', id: string, name: string, digest: string, insertedAt?: Date | null, content: string, user: { __typename?: 'User', id: string, name: string, email: string, avatar?: string | null, provider?: Provider | null, demoing?: boolean | null, demoed?: boolean | null, onboarding?: OnboardingState | null, emailConfirmed?: boolean | null, emailConfirmBy?: Date | null, backgroundColor?: string | null, serviceAccount?: boolean | null, onboardingChecklist?: { __typename?: 'OnboardingChecklist', dismissed?: boolean | null, status?: OnboardingChecklistState | null } | null, roles?: { __typename?: 'Roles', admin?: boolean | null } | null } }; - -export type EabCredentialFragment = { __typename?: 'EabCredential', id: string, keyId: string, hmacKey: string, cluster: string, provider: Provider, insertedAt?: Date | null }; - -export type MeQueryVariables = Exact<{ [key: string]: never; }>; - - -export type MeQuery = { __typename?: 'RootQueryType', me?: { __typename?: 'User', loginMethod?: LoginMethod | null, hasInstallations?: boolean | null, id: string, name: string, email: string, avatar?: string | null, provider?: Provider | null, demoing?: boolean | null, demoed?: boolean | null, onboarding?: OnboardingState | null, emailConfirmed?: boolean | null, emailConfirmBy?: Date | null, backgroundColor?: string | null, serviceAccount?: boolean | null, account: { __typename?: 'Account', id: string, name?: string | null, billingCustomerId?: string | null, backgroundColor?: string | null, rootUser?: { __typename?: 'User', id: string, name: string, email: string } | null, domainMappings?: Array<{ __typename?: 'DomainMapping', id: string, domain: string, enableSso?: boolean | null } | null> | null }, publisher?: { __typename?: 'Publisher', billingAccountId?: string | null, id?: string | null, name: string, phone?: string | null, avatar?: string | null, description?: string | null, backgroundColor?: string | null, owner?: { __typename?: 'User', id: string, name: string, email: string, avatar?: string | null, provider?: Provider | null, demoing?: boolean | null, demoed?: boolean | null, onboarding?: OnboardingState | null, emailConfirmed?: boolean | null, emailConfirmBy?: Date | null, backgroundColor?: string | null, serviceAccount?: boolean | null, onboardingChecklist?: { __typename?: 'OnboardingChecklist', dismissed?: boolean | null, status?: OnboardingChecklistState | null } | null, roles?: { __typename?: 'Roles', admin?: boolean | null } | null } | null, address?: { __typename?: 'Address', line1?: string | null, line2?: string | null, city?: string | null, country?: string | null, state?: string | null, zip?: string | null } | null } | null, boundRoles?: Array<{ __typename?: 'Role', id: string, name: string, description?: string | null, repositories?: Array | null, permissions?: Array | null, roleBindings?: Array<{ __typename?: 'RoleBinding', id: string, user?: { __typename?: 'User', id: string, name: string, email: string, avatar?: string | null, provider?: Provider | null, demoing?: boolean | null, demoed?: boolean | null, onboarding?: OnboardingState | null, emailConfirmed?: boolean | null, emailConfirmBy?: Date | null, backgroundColor?: string | null, serviceAccount?: boolean | null, onboardingChecklist?: { __typename?: 'OnboardingChecklist', dismissed?: boolean | null, status?: OnboardingChecklistState | null } | null, roles?: { __typename?: 'Roles', admin?: boolean | null } | null } | null, group?: { __typename?: 'Group', id: string, name: string, global?: boolean | null, description?: string | null } | null } | null> | null } | null> | null, onboardingChecklist?: { __typename?: 'OnboardingChecklist', dismissed?: boolean | null, status?: OnboardingChecklistState | null } | null, roles?: { __typename?: 'Roles', admin?: boolean | null } | null } | null, configuration?: { __typename?: 'PluralConfiguration', stripeConnectId?: string | null, stripePublishableKey?: string | null, registry?: string | null, gitCommit?: string | null } | null }; - -export type GetLoginMethodQueryVariables = Exact<{ - email: Scalars['String']; -}>; - - -export type GetLoginMethodQuery = { __typename?: 'RootQueryType', loginMethod?: { __typename?: 'LoginMethodResponse', loginMethod: LoginMethod, token?: string | null } | null }; - -export type ListTokensQueryVariables = Exact<{ [key: string]: never; }>; - - -export type ListTokensQuery = { __typename?: 'RootQueryType', tokens?: { __typename?: 'PersistedTokenConnection', edges?: Array<{ __typename?: 'PersistedTokenEdge', node?: { __typename?: 'PersistedToken', token?: string | null } | null } | null> | null } | null }; - -export type ListKeysQueryVariables = Exact<{ - emails?: InputMaybe> | InputMaybe>; -}>; - - -export type ListKeysQuery = { __typename?: 'RootQueryType', publicKeys?: { __typename?: 'PublicKeyConnection', edges?: Array<{ __typename?: 'PublicKeyEdge', node?: { __typename?: 'PublicKey', id: string, name: string, digest: string, insertedAt?: Date | null, content: string, user: { __typename?: 'User', id: string, name: string, email: string, avatar?: string | null, provider?: Provider | null, demoing?: boolean | null, demoed?: boolean | null, onboarding?: OnboardingState | null, emailConfirmed?: boolean | null, emailConfirmBy?: Date | null, backgroundColor?: string | null, serviceAccount?: boolean | null, onboardingChecklist?: { __typename?: 'OnboardingChecklist', dismissed?: boolean | null, status?: OnboardingChecklistState | null } | null, roles?: { __typename?: 'Roles', admin?: boolean | null } | null } } | null } | null> | null } | null }; - -export type GetEabCredentialQueryVariables = Exact<{ - cluster: Scalars['String']; - provider: Provider; -}>; - - -export type GetEabCredentialQuery = { __typename?: 'RootQueryType', eabCredential?: { __typename?: 'EabCredential', id: string, keyId: string, hmacKey: string, cluster: string, provider: Provider, insertedAt?: Date | null } | null }; - -export type DevLoginMutationVariables = Exact<{ [key: string]: never; }>; - - -export type DevLoginMutation = { __typename?: 'RootMutationType', deviceLogin?: { __typename?: 'DeviceLogin', loginUrl: string, deviceToken: string } | null }; - -export type LoginMutationVariables = Exact<{ - email: Scalars['String']; - password: Scalars['String']; - deviceToken?: InputMaybe; -}>; - - -export type LoginMutation = { __typename?: 'RootMutationType', login?: { __typename?: 'User', jwt?: string | null } | null }; - -export type ImpersonateServiceAccountMutationVariables = Exact<{ - email?: InputMaybe; -}>; - - -export type ImpersonateServiceAccountMutation = { __typename?: 'RootMutationType', impersonateServiceAccount?: { __typename?: 'User', jwt?: string | null, email: string } | null }; - -export type CreateAccessTokenMutationVariables = Exact<{ [key: string]: never; }>; - - -export type CreateAccessTokenMutation = { __typename?: 'RootMutationType', createToken?: { __typename?: 'PersistedToken', token?: string | null } | null }; - -export type CreateKeyMutationVariables = Exact<{ - key: Scalars['String']; - name: Scalars['String']; -}>; - - -export type CreateKeyMutation = { __typename?: 'RootMutationType', createPublicKey?: { __typename?: 'PublicKey', id: string } | null }; - -export type DeleteEabCredentialMutationVariables = Exact<{ - cluster: Scalars['String']; - provider: Provider; -}>; - - -export type DeleteEabCredentialMutation = { __typename?: 'RootMutationType', deleteEabKey?: { __typename?: 'EabCredential', id: string } | null }; - -export type CreateEventMutationVariables = Exact<{ - attrs: UserEventAttributes; -}>; - - -export type CreateEventMutation = { __typename?: 'RootMutationType', createUserEvent?: boolean | null }; - -export type LoginMethodQueryVariables = Exact<{ - email: Scalars['String']; - host?: InputMaybe; -}>; - - -export type LoginMethodQuery = { __typename?: 'RootQueryType', loginMethod?: { __typename?: 'LoginMethodResponse', loginMethod: LoginMethod, token?: string | null, authorizeUrl?: string | null } | null }; - -export type SignupMutationVariables = Exact<{ - attributes: UserAttributes; - account?: InputMaybe; - deviceToken?: InputMaybe; -}>; - - -export type SignupMutation = { __typename?: 'RootMutationType', signup?: { __typename?: 'User', jwt?: string | null, onboarding?: OnboardingState | null } | null }; - -export type PasswordlessLoginMutationVariables = Exact<{ - token: Scalars['String']; -}>; - - -export type PasswordlessLoginMutation = { __typename?: 'RootMutationType', passwordlessLogin?: { __typename?: 'User', jwt?: string | null } | null }; - -export type PollLoginTokenMutationVariables = Exact<{ - token: Scalars['String']; - deviceToken?: InputMaybe; -}>; - - -export type PollLoginTokenMutation = { __typename?: 'RootMutationType', loginToken?: { __typename?: 'User', jwt?: string | null } | null }; - -export type OauthUrlsQueryVariables = Exact<{ - host?: InputMaybe; -}>; - - -export type OauthUrlsQuery = { __typename?: 'RootQueryType', oauthUrls?: Array<{ __typename?: 'OauthInfo', provider: OauthProvider, authorizeUrl: string } | null> | null }; - -export type AcceptLoginMutationVariables = Exact<{ - challenge: Scalars['String']; -}>; - - -export type AcceptLoginMutation = { __typename?: 'RootMutationType', acceptLogin?: { __typename?: 'OauthResponse', redirectTo: string } | null }; - -export type CreateResetTokenMutationVariables = Exact<{ - attributes: ResetTokenAttributes; -}>; - - -export type CreateResetTokenMutation = { __typename?: 'RootMutationType', createResetToken?: boolean | null }; - -export type RealizeResetTokenMutationVariables = Exact<{ - id: Scalars['ID']; - attributes: ResetTokenRealization; -}>; - - -export type RealizeResetTokenMutation = { __typename?: 'RootMutationType', realizeResetToken?: boolean | null }; - -export type ResetTokenQueryVariables = Exact<{ - id: Scalars['ID']; -}>; - - -export type ResetTokenQuery = { __typename?: 'RootQueryType', resetToken?: { __typename?: 'ResetToken', type: ResetTokenType, user: { __typename?: 'User', id: string, name: string, email: string, avatar?: string | null, provider?: Provider | null, demoing?: boolean | null, demoed?: boolean | null, onboarding?: OnboardingState | null, emailConfirmed?: boolean | null, emailConfirmBy?: Date | null, backgroundColor?: string | null, serviceAccount?: boolean | null, onboardingChecklist?: { __typename?: 'OnboardingChecklist', dismissed?: boolean | null, status?: OnboardingChecklistState | null } | null, roles?: { __typename?: 'Roles', admin?: boolean | null } | null } } | null }; - -export type VersionTagFragment = { __typename?: 'VersionTag', id: string, tag: string, version?: { __typename?: 'Version', id: string } | null }; - -export type VersionFragment = { __typename?: 'Version', id: string, helm?: Map | null, readme?: string | null, valuesTemplate?: string | null, version: string, insertedAt?: Date | null, package?: string | null, crds?: Array<{ __typename?: 'Crd', id: string, name: string, blob?: string | null } | null> | null, chart?: { __typename?: 'Chart', id?: string | null, name: string, description?: string | null, latestVersion?: string | null, insertedAt?: Date | null, dependencies?: { __typename?: 'Dependencies', wait?: boolean | null, application?: boolean | null, providers?: Array | null, secrets?: Array | null, providerWirings?: Map | null, outputs?: Map | null, dependencies?: Array<{ __typename?: 'Dependency', name?: string | null, repo?: string | null, type?: DependencyType | null, version?: string | null, optional?: boolean | null } | null> | null, wirings?: { __typename?: 'Wirings', terraform?: Map | null, helm?: Map | null } | null } | null } | null, terraform?: { __typename?: 'Terraform', id?: string | null, name?: string | null } | null, dependencies?: { __typename?: 'Dependencies', wait?: boolean | null, application?: boolean | null, providers?: Array | null, secrets?: Array | null, providerWirings?: Map | null, outputs?: Map | null, dependencies?: Array<{ __typename?: 'Dependency', name?: string | null, repo?: string | null, type?: DependencyType | null, version?: string | null, optional?: boolean | null } | null> | null, wirings?: { __typename?: 'Wirings', terraform?: Map | null, helm?: Map | null } | null } | null }; - -export type UpdateVersionMutationVariables = Exact<{ - spec?: InputMaybe; - attributes: VersionAttributes; -}>; - - -export type UpdateVersionMutation = { __typename?: 'RootMutationType', updateVersion?: { __typename?: 'Version', id: string } | null }; - -export const UserFragmentDoc = gql` - fragment User on User { - id - name - email - avatar - provider - demoing - demoed - onboarding - onboardingChecklist { - dismissed - status - } - emailConfirmed - emailConfirmBy - backgroundColor - serviceAccount - roles { - admin - } -} - `; -export const AddressFragmentDoc = gql` - fragment Address on Address { - line1 - line2 - city - country - state - zip -} - `; -export const PublisherFragmentDoc = gql` - fragment Publisher on Publisher { - id - name - phone - avatar - description - backgroundColor - owner { - ...User - } - address { - ...Address - } -} - ${UserFragmentDoc} -${AddressFragmentDoc}`; -export const RepoFragmentDoc = gql` - fragment Repo on Repository { - id - name - notes - description - documentation - icon - darkIcon - private - trending - verified - category - oauthSettings { - uriFormat - authMethod - } - publisher { - ...Publisher - } - recipes { - name - provider - description - } -} - ${PublisherFragmentDoc}`; -export const GroupFragmentDoc = gql` - fragment Group on Group { - id - name - global - description -} - `; -export const IntegrationWebhookFragmentDoc = gql` - fragment IntegrationWebhook on IntegrationWebhook { - id - name - url - secret - actions -} - `; -export const RoleBindingFragmentDoc = gql` - fragment RoleBinding on RoleBinding { - id - user { - ...User - } - group { - ...Group - } -} - ${UserFragmentDoc} -${GroupFragmentDoc}`; -export const RoleFragmentDoc = gql` - fragment Role on Role { - id - name - description - repositories - permissions - roleBindings { - ...RoleBinding - } -} - ${RoleBindingFragmentDoc}`; -export const CrdFragmentDoc = gql` - fragment Crd on Crd { - id - name - blob -} - `; -export const DependenciesFragmentDoc = gql` - fragment Dependencies on Dependencies { - dependencies { - name - repo - type - version - optional - } - wait - application - providers - secrets - wirings { - terraform - helm - } - providerWirings - outputs -} - `; -export const ChartFragmentDoc = gql` - fragment Chart on Chart { - id - name - description - latestVersion - dependencies { - ...Dependencies - } - insertedAt -} - ${DependenciesFragmentDoc}`; -export const VersionFragmentDoc = gql` - fragment Version on Version { - id - helm - readme - valuesTemplate - version - insertedAt - package - crds { - ...Crd - } - chart { - ...Chart - } - terraform { - id - name - } - dependencies { - ...Dependencies - } -} - ${CrdFragmentDoc} -${ChartFragmentDoc} -${DependenciesFragmentDoc}`; -export const AuditFragmentDoc = gql` - fragment Audit on Audit { - id - action - ip - country - city - latitude - longitude - actor { - ...User - } - repository { - ...Repo - } - group { - ...Group - } - integrationWebhook { - ...IntegrationWebhook - } - role { - ...Role - } - version { - ...Version - } - image { - id - tag - dockerRepository { - name - } - } - insertedAt -} - ${UserFragmentDoc} -${RepoFragmentDoc} -${GroupFragmentDoc} -${IntegrationWebhookFragmentDoc} -${RoleFragmentDoc} -${VersionFragmentDoc}`; -export const PolicyBindingFragmentDoc = gql` - fragment PolicyBinding on PolicyBinding { - id - group { - id - name - } - user { - id - name - email - } -} - `; -export const DnsDomainFragmentDoc = gql` - fragment DnsDomain on DnsDomain { - id - name - creator { - ...User - } - accessPolicy { - id - bindings { - ...PolicyBinding - } - } - insertedAt -} - ${UserFragmentDoc} -${PolicyBindingFragmentDoc}`; -export const InviteFragmentDoc = gql` - fragment Invite on Invite { - id - secureId - email - insertedAt -} - `; -export const OidcLoginFragmentDoc = gql` - fragment OidcLogin on OidcLogin { - ip - country - city - latitude - longitude - user { - ...User - } - owner { - ...User - } - repository { - ...Repo - } - insertedAt -} - ${UserFragmentDoc} -${RepoFragmentDoc}`; -export const ArtifactFragmentDoc = gql` - fragment Artifact on Artifact { - id - name - blob - type - platform - arch - filesize - sha - readme - insertedAt - updatedAt -} - `; -export const ChartInstallationFragmentDoc = gql` - fragment ChartInstallation on ChartInstallation { - id - chart { - ...Chart - dependencies { - ...Dependencies - } - } - version { - ...Version - } -} - ${ChartFragmentDoc} -${DependenciesFragmentDoc} -${VersionFragmentDoc}`; -export const ScanViolationFragmentDoc = gql` - fragment ScanViolation on ScanViolation { - ruleName - description - ruleId - severity - category - resourceName - resourceType - file - line -} - `; -export const ScanErrorFragmentDoc = gql` - fragment ScanError on ScanError { - message -} - `; -export const PackageScanFragmentDoc = gql` - fragment PackageScan on PackageScan { - id - grade - violations { - ...ScanViolation - } - errors { - ...ScanError - } -} - ${ScanViolationFragmentDoc} -${ScanErrorFragmentDoc}`; -export const DnsRecordFragmentDoc = gql` - fragment DnsRecord on DnsRecord { - id - name - type - records - cluster - provider - creator { - ...User - } - insertedAt -} - ${UserFragmentDoc}`; -export const DockerRepoFragmentDoc = gql` - fragment DockerRepo on DockerRepository { - id - name - public - repository { - id - name - } - insertedAt - updatedAt -} - `; -export const DockerRepositoryFragmentDoc = gql` - fragment DockerRepository on DockerRepository { - id - name - public - repository { - id - name - editable - } - insertedAt - updatedAt -} - `; -export const DockerImageFragmentDoc = gql` - fragment DockerImage on DockerImage { - id - tag - digest - scannedAt - grade - insertedAt - updatedAt -} - `; -export const VulnerabilityFragmentDoc = gql` - fragment Vulnerability on Vulnerability { - id - title - description - vulnerabilityId - package - installedVersion - fixedVersion - source - url - severity - score - cvss { - attackVector - attackComplexity - privilegesRequired - userInteraction - confidentiality - integrity - availability - } - layer { - digest - diffId - } -} - `; -export const PostmortemFragmentDoc = gql` - fragment Postmortem on Postmortem { - id - content - actionItems { - type - link - } -} - `; -export const FollowerFragmentDoc = gql` - fragment Follower on Follower { - id - incident { - id - } - user { - ...User - } - preferences { - message - incidentUpdate - mention - } -} - ${UserFragmentDoc}`; -export const ServiceLevelFragmentDoc = gql` - fragment ServiceLevel on ServiceLevel { - minSeverity - maxSeverity - responseTime -} - `; -export const LimitFragmentDoc = gql` - fragment Limit on Limit { - dimension - quantity -} - `; -export const LineItemFragmentDoc = gql` - fragment LineItem on LineItem { - name - dimension - cost - period - type -} - `; -export const PlanFragmentDoc = gql` - fragment Plan on Plan { - id - name - cost - period - serviceLevels { - ...ServiceLevel - } - lineItems { - included { - ...Limit - } - items { - ...LineItem - } - } - metadata { - features { - name - description - } - } -} - ${ServiceLevelFragmentDoc} -${LimitFragmentDoc} -${LineItemFragmentDoc}`; -export const SlimSubscriptionFragmentDoc = gql` - fragment SlimSubscription on SlimSubscription { - id - lineItems { - items { - dimension - quantity - } - } - plan { - ...Plan - } -} - ${PlanFragmentDoc}`; -export const ClusterInformationFragmentDoc = gql` - fragment ClusterInformation on ClusterInformation { - version - gitCommit - platform -} - `; -export const IncidentFragmentDoc = gql` - fragment Incident on Incident { - id - title - description - severity - status - notificationCount - nextResponseAt - creator { - ...User - } - owner { - ...User - } - repository { - ...Repo - } - subscription { - ...SlimSubscription - } - clusterInformation { - ...ClusterInformation - } - tags { - tag - } - insertedAt -} - ${UserFragmentDoc} -${RepoFragmentDoc} -${SlimSubscriptionFragmentDoc} -${ClusterInformationFragmentDoc}`; -export const IncidentHistoryFragmentDoc = gql` - fragment IncidentHistory on IncidentHistory { - id - action - changes { - key - prev - next - } - actor { - ...User - } - insertedAt -} - ${UserFragmentDoc}`; -export const FileFragmentDoc = gql` - fragment File on File { - id - blob - mediaType - contentType - filesize - filename -} - `; -export const IncidentMessageFragmentDoc = gql` - fragment IncidentMessage on IncidentMessage { - id - text - creator { - ...User - } - reactions { - name - creator { - id - email - } - } - file { - ...File - } - entities { - type - user { - ...User - } - text - startIndex - endIndex - } - insertedAt -} - ${UserFragmentDoc} -${FileFragmentDoc}`; -export const NotificationFragmentDoc = gql` - fragment Notification on Notification { - id - type - msg - actor { - ...User - } - incident { - id - title - repository { - id - name - icon - darkIcon - } - } - message { - text - } - repository { - id - name - icon - darkIcon - } - insertedAt -} - ${UserFragmentDoc}`; -export const WebhookLogFragmentDoc = gql` - fragment WebhookLog on WebhookLog { - id - state - status - payload - response - insertedAt -} - `; -export const OauthIntegrationFragmentDoc = gql` - fragment OauthIntegration on OauthIntegration { - id - service - insertedAt -} - `; -export const ZoomMeetingFragmentDoc = gql` - fragment ZoomMeeting on ZoomMeeting { - joinUrl - password -} - `; -export const MetricFragmentDoc = gql` - fragment Metric on Metric { - name - tags { - name - value - } - values { - time - value - } -} - `; -export const PageInfoFragmentDoc = gql` - fragment PageInfo on PageInfo { - endCursor - hasNextPage -} - `; -export const OAuthInfoFragmentDoc = gql` - fragment OAuthInfo on OauthInfo { - provider - authorizeUrl -} - `; -export const SubscriptionFragmentDoc = gql` - fragment Subscription on RepositorySubscription { - id - plan { - ...Plan - } - lineItems { - items { - ...Limit - } - } -} - ${PlanFragmentDoc} -${LimitFragmentDoc}`; -export const InvoiceItemFragmentDoc = gql` - fragment InvoiceItem on InvoiceItem { - amount - currency - description -} - `; -export const InvoiceFragmentDoc = gql` - fragment Invoice on Invoice { - number - amountDue - amountPaid - currency - status - createdAt - hostedInvoiceUrl - lines { - ...InvoiceItem - } -} - ${InvoiceItemFragmentDoc}`; -export const CardFragmentDoc = gql` - fragment Card on Card { - id - last4 - expMonth - expYear - name - brand -} - `; -export const OidcProviderFragmentDoc = gql` - fragment OIDCProvider on OidcProvider { - id - clientId - authMethod - clientSecret - redirectUris - bindings { - id - user { - ...User - } - group { - ...Group - } - } - configuration { - issuer - authorizationEndpoint - tokenEndpoint - jwksUri - userinfoEndpoint - } -} - ${UserFragmentDoc} -${GroupFragmentDoc}`; -export const InstallationFragmentDoc = gql` - fragment Installation on Installation { - id - context - license - licenseKey - acmeKeyId - acmeSecret - autoUpgrade - trackTag - repository { - ...Repo - } - user { - ...User - } - oidcProvider { - ...OIDCProvider - } -} - ${RepoFragmentDoc} -${UserFragmentDoc} -${OidcProviderFragmentDoc}`; -export const TerraformFragmentDoc = gql` - fragment Terraform on Terraform { - id - name - readme - package - description - latestVersion - dependencies { - ...Dependencies - } - valuesTemplate - insertedAt -} - ${DependenciesFragmentDoc}`; -export const RecipeConfigurationFragmentDoc = gql` - fragment RecipeConfiguration on RecipeConfiguration { - name - type - default - documentation - optional - placeholder - functionName - condition { - field - operation - value - } - validation { - type - regex - message - } -} - `; -export const RecipeItemFragmentDoc = gql` - fragment RecipeItem on RecipeItem { - id - chart { - ...Chart - } - terraform { - ...Terraform - } - configuration { - ...RecipeConfiguration - } -} - ${ChartFragmentDoc} -${TerraformFragmentDoc} -${RecipeConfigurationFragmentDoc}`; -export const RecipeSectionFragmentDoc = gql` - fragment RecipeSection on RecipeSection { - index - repository { - ...Repo - installation { - ...Installation - } - } - recipeItems { - ...RecipeItem - } - configuration { - ...RecipeConfiguration - } -} - ${RepoFragmentDoc} -${InstallationFragmentDoc} -${RecipeItemFragmentDoc} -${RecipeConfigurationFragmentDoc}`; -export const RecipeFragmentDoc = gql` - fragment Recipe on Recipe { - id - name - description - restricted - provider - tests { - type - name - message - args { - name - repo - key - } - } - repository { - id - name - } - oidcSettings { - uriFormat - uriFormats - authMethod - domainKey - subdomain - } - recipeSections { - ...RecipeSection - } -} - ${RecipeSectionFragmentDoc}`; -export const StackFragmentDoc = gql` - fragment Stack on Stack { - id - name - displayName - description - featured - creator { - id - name - } - collections { - id - provider - bundles { - recipe { - repository { - ...Repo - tags { - tag - } - } - } - } - } -} - ${RepoFragmentDoc}`; -export const ApplyLockFragmentDoc = gql` - fragment ApplyLock on ApplyLock { - id - lock -} - `; -export const CategoryFragmentDoc = gql` - fragment Category on CategoryInfo { - category - count -} - `; -export const RepositoryFragmentDoc = gql` - fragment Repository on Repository { - id - name - notes - icon - darkIcon - description - publisher { - name - } - recipes { - name - } -} - `; -export const IntegrationFragmentDoc = gql` - fragment Integration on Integration { - id - name - icon - sourceUrl - description - tags { - tag - } - publisher { - ...Publisher - } -} - ${PublisherFragmentDoc}`; -export const CloudShellFragmentDoc = gql` - fragment CloudShell on CloudShell { - id - aesKey - gitUrl - alive - provider - subdomain - cluster - status { - ready - initialized - containersReady - podScheduled - } -} - `; -export const DemoProjectFragmentDoc = gql` - fragment DemoProject on DemoProject { - id - projectId - credentials - ready - state -} - `; -export const TerraformInstallationFragmentDoc = gql` - fragment TerraformInstallation on TerraformInstallation { - id - terraform { - ...Terraform - } - version { - ...Version - } -} - ${TerraformFragmentDoc} -${VersionFragmentDoc}`; -export const StepFragmentDoc = gql` - fragment Step on TestStep { - id - name - status - hasLogs - description - insertedAt - updatedAt -} - `; -export const TestFragmentDoc = gql` - fragment Test on Test { - id - name - promoteTag - status - insertedAt - updatedAt - steps { - ...Step - } -} - ${StepFragmentDoc}`; -export const UpgradeQueueFragmentDoc = gql` - fragment UpgradeQueue on UpgradeQueue { - id - acked - name - domain - git - pingedAt - provider -} - `; -export const RolloutFragmentDoc = gql` - fragment Rollout on Rollout { - id - event - cursor - count - status - heartbeat -} - `; -export const UpgradeFragmentDoc = gql` - fragment Upgrade on Upgrade { - id - message - repository { - ...Repo - } - insertedAt -} - ${RepoFragmentDoc}`; -export const DeferredUpdateFragmentDoc = gql` - fragment DeferredUpdate on DeferredUpdate { - id - dequeueAt - attempts - version { - version - } - insertedAt -} - `; -export const AccountFragmentDoc = gql` - fragment Account on Account { - id - name - billingCustomerId - backgroundColor -} - `; -export const ImpersonationPolicyFragmentDoc = gql` - fragment ImpersonationPolicy on ImpersonationPolicy { - id - bindings { - id - group { - id - name - } - user { - id - name - email - } - } -} - `; -export const GroupMemberFragmentDoc = gql` - fragment GroupMember on GroupMember { - id - user { - ...User - } -} - ${UserFragmentDoc}`; -export const TokenFragmentDoc = gql` - fragment Token on PersistedToken { - id - token - insertedAt -} - `; -export const TokenAuditFragmentDoc = gql` - fragment TokenAudit on PersistedTokenAudit { - ip - timestamp - count - country - city - latitude - longitude -} - `; -export const WebhookFragmentDoc = gql` - fragment Webhook on Webhook { - id - url - secret - insertedAt -} - `; -export const PublicKeyFragmentDoc = gql` - fragment PublicKey on PublicKey { - id - name - digest - insertedAt - content - user { - ...User - } -} - ${UserFragmentDoc}`; -export const EabCredentialFragmentDoc = gql` - fragment EabCredential on EabCredential { - id - keyId - hmacKey - cluster - provider - insertedAt -} - `; -export const VersionTagFragmentDoc = gql` - fragment VersionTag on VersionTag { - id - tag - version { - id - } -} - `; -export const UpdateAccountDocument = gql` - mutation UpdateAccount($attributes: AccountAttributes!) { - updateAccount(attributes: $attributes) { - ...Account - domainMappings { - id - domain - enableSso - } - } -} - ${AccountFragmentDoc}`; -export type UpdateAccountMutationFn = Apollo.MutationFunction; - -/** - * __useUpdateAccountMutation__ - * - * To run a mutation, you first call `useUpdateAccountMutation` within a React component and pass it any options that fit your needs. - * When your component renders, `useUpdateAccountMutation` returns a tuple that includes: - * - A mutate function that you can call at any time to execute the mutation - * - An object with fields that represent the current status of the mutation's execution - * - * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2; - * - * @example - * const [updateAccountMutation, { data, loading, error }] = useUpdateAccountMutation({ - * variables: { - * attributes: // value for 'attributes' - * }, - * }); - */ -export function useUpdateAccountMutation(baseOptions?: Apollo.MutationHookOptions) { - const options = {...defaultOptions, ...baseOptions} - return Apollo.useMutation(UpdateAccountDocument, options); - } -export type UpdateAccountMutationHookResult = ReturnType; -export type UpdateAccountMutationResult = Apollo.MutationResult; -export type UpdateAccountMutationOptions = Apollo.BaseMutationOptions; -export const ListArtifactsDocument = gql` - query ListArtifacts($id: ID!) { - repository(id: $id) { - artifacts { - ...Artifact - } - } -} - ${ArtifactFragmentDoc}`; - -/** - * __useListArtifactsQuery__ - * - * To run a query within a React component, call `useListArtifactsQuery` and pass it any options that fit your needs. - * When your component renders, `useListArtifactsQuery` returns an object from Apollo Client that contains loading, error, and data properties - * you can use to render your UI. - * - * @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options; - * - * @example - * const { data, loading, error } = useListArtifactsQuery({ - * variables: { - * id: // value for 'id' - * }, - * }); - */ -export function useListArtifactsQuery(baseOptions: Apollo.QueryHookOptions) { - const options = {...defaultOptions, ...baseOptions} - return Apollo.useQuery(ListArtifactsDocument, options); - } -export function useListArtifactsLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions) { - const options = {...defaultOptions, ...baseOptions} - return Apollo.useLazyQuery(ListArtifactsDocument, options); - } -export type ListArtifactsQueryHookResult = ReturnType; -export type ListArtifactsLazyQueryHookResult = ReturnType; -export type ListArtifactsQueryResult = Apollo.QueryResult; -export const CreateArtifactDocument = gql` - mutation CreateArtifact($repoName: String!, $name: String!, $readme: String!, $artifactType: String!, $platform: String!, $blob: UploadOrUrl!, $arch: String) { - createArtifact(repositoryName: $repoName, attributes: {name: $name, blob: $blob, readme: $readme, type: $artifactType, platform: $platform, arch: $arch}) { - ...Artifact - } -} - ${ArtifactFragmentDoc}`; -export type CreateArtifactMutationFn = Apollo.MutationFunction; - -/** - * __useCreateArtifactMutation__ - * - * To run a mutation, you first call `useCreateArtifactMutation` within a React component and pass it any options that fit your needs. - * When your component renders, `useCreateArtifactMutation` returns a tuple that includes: - * - A mutate function that you can call at any time to execute the mutation - * - An object with fields that represent the current status of the mutation's execution - * - * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2; - * - * @example - * const [createArtifactMutation, { data, loading, error }] = useCreateArtifactMutation({ - * variables: { - * repoName: // value for 'repoName' - * name: // value for 'name' - * readme: // value for 'readme' - * artifactType: // value for 'artifactType' - * platform: // value for 'platform' - * blob: // value for 'blob' - * arch: // value for 'arch' - * }, - * }); - */ -export function useCreateArtifactMutation(baseOptions?: Apollo.MutationHookOptions) { - const options = {...defaultOptions, ...baseOptions} - return Apollo.useMutation(CreateArtifactDocument, options); - } -export type CreateArtifactMutationHookResult = ReturnType; -export type CreateArtifactMutationResult = Apollo.MutationResult; -export type CreateArtifactMutationOptions = Apollo.BaseMutationOptions; -export const GetChartsDocument = gql` - query GetCharts($id: ID!) { - charts(repositoryId: $id, first: 100) { - edges { - node { - ...Chart - } - } - } -} - ${ChartFragmentDoc}`; - -/** - * __useGetChartsQuery__ - * - * To run a query within a React component, call `useGetChartsQuery` and pass it any options that fit your needs. - * When your component renders, `useGetChartsQuery` returns an object from Apollo Client that contains loading, error, and data properties - * you can use to render your UI. - * - * @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options; - * - * @example - * const { data, loading, error } = useGetChartsQuery({ - * variables: { - * id: // value for 'id' - * }, - * }); - */ -export function useGetChartsQuery(baseOptions: Apollo.QueryHookOptions) { - const options = {...defaultOptions, ...baseOptions} - return Apollo.useQuery(GetChartsDocument, options); - } -export function useGetChartsLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions) { - const options = {...defaultOptions, ...baseOptions} - return Apollo.useLazyQuery(GetChartsDocument, options); - } -export type GetChartsQueryHookResult = ReturnType; -export type GetChartsLazyQueryHookResult = ReturnType; -export type GetChartsQueryResult = Apollo.QueryResult; -export const GetVersionsDocument = gql` - query GetVersions($id: ID!) { - versions(chartId: $id, first: 100) { - edges { - node { - ...Version - } - } - } -} - ${VersionFragmentDoc}`; - -/** - * __useGetVersionsQuery__ - * - * To run a query within a React component, call `useGetVersionsQuery` and pass it any options that fit your needs. - * When your component renders, `useGetVersionsQuery` returns an object from Apollo Client that contains loading, error, and data properties - * you can use to render your UI. - * - * @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options; - * - * @example - * const { data, loading, error } = useGetVersionsQuery({ - * variables: { - * id: // value for 'id' - * }, - * }); - */ -export function useGetVersionsQuery(baseOptions: Apollo.QueryHookOptions) { - const options = {...defaultOptions, ...baseOptions} - return Apollo.useQuery(GetVersionsDocument, options); - } -export function useGetVersionsLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions) { - const options = {...defaultOptions, ...baseOptions} - return Apollo.useLazyQuery(GetVersionsDocument, options); - } -export type GetVersionsQueryHookResult = ReturnType; -export type GetVersionsLazyQueryHookResult = ReturnType; -export type GetVersionsQueryResult = Apollo.QueryResult; -export const GetChartInstallationsDocument = gql` - query GetChartInstallations($id: ID!) { - chartInstallations(repositoryId: $id, first: 100) { - edges { - node { - ...ChartInstallation - } - } - } -} - ${ChartInstallationFragmentDoc}`; - -/** - * __useGetChartInstallationsQuery__ - * - * To run a query within a React component, call `useGetChartInstallationsQuery` and pass it any options that fit your needs. - * When your component renders, `useGetChartInstallationsQuery` returns an object from Apollo Client that contains loading, error, and data properties - * you can use to render your UI. - * - * @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options; - * - * @example - * const { data, loading, error } = useGetChartInstallationsQuery({ - * variables: { - * id: // value for 'id' - * }, - * }); - */ -export function useGetChartInstallationsQuery(baseOptions: Apollo.QueryHookOptions) { - const options = {...defaultOptions, ...baseOptions} - return Apollo.useQuery(GetChartInstallationsDocument, options); - } -export function useGetChartInstallationsLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions) { - const options = {...defaultOptions, ...baseOptions} - return Apollo.useLazyQuery(GetChartInstallationsDocument, options); - } -export type GetChartInstallationsQueryHookResult = ReturnType; -export type GetChartInstallationsLazyQueryHookResult = ReturnType; -export type GetChartInstallationsQueryResult = Apollo.QueryResult; -export const GetPackageInstallationsDocument = gql` - query GetPackageInstallations($id: ID!) { - chartInstallations(repositoryId: $id, first: 100) { - edges { - node { - ...ChartInstallation - } - } - } - terraformInstallations(repositoryId: $id, first: 100) { - edges { - node { - ...TerraformInstallation - } - } - } -} - ${ChartInstallationFragmentDoc} -${TerraformInstallationFragmentDoc}`; - -/** - * __useGetPackageInstallationsQuery__ - * - * To run a query within a React component, call `useGetPackageInstallationsQuery` and pass it any options that fit your needs. - * When your component renders, `useGetPackageInstallationsQuery` returns an object from Apollo Client that contains loading, error, and data properties - * you can use to render your UI. - * - * @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options; - * - * @example - * const { data, loading, error } = useGetPackageInstallationsQuery({ - * variables: { - * id: // value for 'id' - * }, - * }); - */ -export function useGetPackageInstallationsQuery(baseOptions: Apollo.QueryHookOptions) { - const options = {...defaultOptions, ...baseOptions} - return Apollo.useQuery(GetPackageInstallationsDocument, options); - } -export function useGetPackageInstallationsLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions) { - const options = {...defaultOptions, ...baseOptions} - return Apollo.useLazyQuery(GetPackageInstallationsDocument, options); - } -export type GetPackageInstallationsQueryHookResult = ReturnType; -export type GetPackageInstallationsLazyQueryHookResult = ReturnType; -export type GetPackageInstallationsQueryResult = Apollo.QueryResult; -export const CreateCrdDocument = gql` - mutation CreateCrd($chartName: ChartName!, $name: String!, $blob: UploadOrUrl!) { - createCrd(chartName: $chartName, attributes: {name: $name, blob: $blob}) { - id - } -} - `; -export type CreateCrdMutationFn = Apollo.MutationFunction; - -/** - * __useCreateCrdMutation__ - * - * To run a mutation, you first call `useCreateCrdMutation` within a React component and pass it any options that fit your needs. - * When your component renders, `useCreateCrdMutation` returns a tuple that includes: - * - A mutate function that you can call at any time to execute the mutation - * - An object with fields that represent the current status of the mutation's execution - * - * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2; - * - * @example - * const [createCrdMutation, { data, loading, error }] = useCreateCrdMutation({ - * variables: { - * chartName: // value for 'chartName' - * name: // value for 'name' - * blob: // value for 'blob' - * }, - * }); - */ -export function useCreateCrdMutation(baseOptions?: Apollo.MutationHookOptions) { - const options = {...defaultOptions, ...baseOptions} - return Apollo.useMutation(CreateCrdDocument, options); - } -export type CreateCrdMutationHookResult = ReturnType; -export type CreateCrdMutationResult = Apollo.MutationResult; -export type CreateCrdMutationOptions = Apollo.BaseMutationOptions; -export const UninstallChartDocument = gql` - mutation UninstallChart($id: ID!) { - deleteChartInstallation(id: $id) { - id - } -} - `; -export type UninstallChartMutationFn = Apollo.MutationFunction; - -/** - * __useUninstallChartMutation__ - * - * To run a mutation, you first call `useUninstallChartMutation` within a React component and pass it any options that fit your needs. - * When your component renders, `useUninstallChartMutation` returns a tuple that includes: - * - A mutate function that you can call at any time to execute the mutation - * - An object with fields that represent the current status of the mutation's execution - * - * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2; - * - * @example - * const [uninstallChartMutation, { data, loading, error }] = useUninstallChartMutation({ - * variables: { - * id: // value for 'id' - * }, - * }); - */ -export function useUninstallChartMutation(baseOptions?: Apollo.MutationHookOptions) { - const options = {...defaultOptions, ...baseOptions} - return Apollo.useMutation(UninstallChartDocument, options); - } -export type UninstallChartMutationHookResult = ReturnType; -export type UninstallChartMutationResult = Apollo.MutationResult; -export type UninstallChartMutationOptions = Apollo.BaseMutationOptions; -export const GetDnsRecordsDocument = gql` - query GetDnsRecords($cluster: String!, $provider: Provider!) { - dnsRecords(cluster: $cluster, provider: $provider, first: 500) { - edges { - node { - ...DnsRecord - } - } - } -} - ${DnsRecordFragmentDoc}`; - -/** - * __useGetDnsRecordsQuery__ - * - * To run a query within a React component, call `useGetDnsRecordsQuery` and pass it any options that fit your needs. - * When your component renders, `useGetDnsRecordsQuery` returns an object from Apollo Client that contains loading, error, and data properties - * you can use to render your UI. - * - * @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options; - * - * @example - * const { data, loading, error } = useGetDnsRecordsQuery({ - * variables: { - * cluster: // value for 'cluster' - * provider: // value for 'provider' - * }, - * }); - */ -export function useGetDnsRecordsQuery(baseOptions: Apollo.QueryHookOptions) { - const options = {...defaultOptions, ...baseOptions} - return Apollo.useQuery(GetDnsRecordsDocument, options); - } -export function useGetDnsRecordsLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions) { - const options = {...defaultOptions, ...baseOptions} - return Apollo.useLazyQuery(GetDnsRecordsDocument, options); - } -export type GetDnsRecordsQueryHookResult = ReturnType; -export type GetDnsRecordsLazyQueryHookResult = ReturnType; -export type GetDnsRecordsQueryResult = Apollo.QueryResult; -export const CreateDnsRecordDocument = gql` - mutation CreateDnsRecord($cluster: String!, $provider: Provider!, $attributes: DnsRecordAttributes!) { - createDnsRecord(cluster: $cluster, provider: $provider, attributes: $attributes) { - ...DnsRecord - } -} - ${DnsRecordFragmentDoc}`; -export type CreateDnsRecordMutationFn = Apollo.MutationFunction; - -/** - * __useCreateDnsRecordMutation__ - * - * To run a mutation, you first call `useCreateDnsRecordMutation` within a React component and pass it any options that fit your needs. - * When your component renders, `useCreateDnsRecordMutation` returns a tuple that includes: - * - A mutate function that you can call at any time to execute the mutation - * - An object with fields that represent the current status of the mutation's execution - * - * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2; - * - * @example - * const [createDnsRecordMutation, { data, loading, error }] = useCreateDnsRecordMutation({ - * variables: { - * cluster: // value for 'cluster' - * provider: // value for 'provider' - * attributes: // value for 'attributes' - * }, - * }); - */ -export function useCreateDnsRecordMutation(baseOptions?: Apollo.MutationHookOptions) { - const options = {...defaultOptions, ...baseOptions} - return Apollo.useMutation(CreateDnsRecordDocument, options); - } -export type CreateDnsRecordMutationHookResult = ReturnType; -export type CreateDnsRecordMutationResult = Apollo.MutationResult; -export type CreateDnsRecordMutationOptions = Apollo.BaseMutationOptions; -export const DeleteDnsRecordDocument = gql` - mutation DeleteDnsRecord($name: String!, $type: DnsRecordType!) { - deleteDnsRecord(name: $name, type: $type) { - ...DnsRecord - } -} - ${DnsRecordFragmentDoc}`; -export type DeleteDnsRecordMutationFn = Apollo.MutationFunction; - -/** - * __useDeleteDnsRecordMutation__ - * - * To run a mutation, you first call `useDeleteDnsRecordMutation` within a React component and pass it any options that fit your needs. - * When your component renders, `useDeleteDnsRecordMutation` returns a tuple that includes: - * - A mutate function that you can call at any time to execute the mutation - * - An object with fields that represent the current status of the mutation's execution - * - * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2; - * - * @example - * const [deleteDnsRecordMutation, { data, loading, error }] = useDeleteDnsRecordMutation({ - * variables: { - * name: // value for 'name' - * type: // value for 'type' - * }, - * }); - */ -export function useDeleteDnsRecordMutation(baseOptions?: Apollo.MutationHookOptions) { - const options = {...defaultOptions, ...baseOptions} - return Apollo.useMutation(DeleteDnsRecordDocument, options); - } -export type DeleteDnsRecordMutationHookResult = ReturnType; -export type DeleteDnsRecordMutationResult = Apollo.MutationResult; -export type DeleteDnsRecordMutationOptions = Apollo.BaseMutationOptions; -export const CreateDomainDocument = gql` - mutation CreateDomain($name: String!) { - provisionDomain(name: $name) { - ...DnsDomain - } -} - ${DnsDomainFragmentDoc}`; -export type CreateDomainMutationFn = Apollo.MutationFunction; - -/** - * __useCreateDomainMutation__ - * - * To run a mutation, you first call `useCreateDomainMutation` within a React component and pass it any options that fit your needs. - * When your component renders, `useCreateDomainMutation` returns a tuple that includes: - * - A mutate function that you can call at any time to execute the mutation - * - An object with fields that represent the current status of the mutation's execution - * - * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2; - * - * @example - * const [createDomainMutation, { data, loading, error }] = useCreateDomainMutation({ - * variables: { - * name: // value for 'name' - * }, - * }); - */ -export function useCreateDomainMutation(baseOptions?: Apollo.MutationHookOptions) { - const options = {...defaultOptions, ...baseOptions} - return Apollo.useMutation(CreateDomainDocument, options); - } -export type CreateDomainMutationHookResult = ReturnType; -export type CreateDomainMutationResult = Apollo.MutationResult; -export type CreateDomainMutationOptions = Apollo.BaseMutationOptions; -export const GroupMembersDocument = gql` - query GroupMembers($cursor: String, $id: ID!) { - groupMembers(groupId: $id, after: $cursor, first: 20) { - pageInfo { - ...PageInfo - } - edges { - node { - ...GroupMember - } - } - } -} - ${PageInfoFragmentDoc} -${GroupMemberFragmentDoc}`; - -/** - * __useGroupMembersQuery__ - * - * To run a query within a React component, call `useGroupMembersQuery` and pass it any options that fit your needs. - * When your component renders, `useGroupMembersQuery` returns an object from Apollo Client that contains loading, error, and data properties - * you can use to render your UI. - * - * @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options; - * - * @example - * const { data, loading, error } = useGroupMembersQuery({ - * variables: { - * cursor: // value for 'cursor' - * id: // value for 'id' - * }, - * }); - */ -export function useGroupMembersQuery(baseOptions: Apollo.QueryHookOptions) { - const options = {...defaultOptions, ...baseOptions} - return Apollo.useQuery(GroupMembersDocument, options); - } -export function useGroupMembersLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions) { - const options = {...defaultOptions, ...baseOptions} - return Apollo.useLazyQuery(GroupMembersDocument, options); - } -export type GroupMembersQueryHookResult = ReturnType; -export type GroupMembersLazyQueryHookResult = ReturnType; -export type GroupMembersQueryResult = Apollo.QueryResult; -export const CreateGroupMemberDocument = gql` - mutation CreateGroupMember($groupId: ID!, $userId: ID!) { - createGroupMember(groupId: $groupId, userId: $userId) { - ...GroupMember - } -} - ${GroupMemberFragmentDoc}`; -export type CreateGroupMemberMutationFn = Apollo.MutationFunction; - -/** - * __useCreateGroupMemberMutation__ - * - * To run a mutation, you first call `useCreateGroupMemberMutation` within a React component and pass it any options that fit your needs. - * When your component renders, `useCreateGroupMemberMutation` returns a tuple that includes: - * - A mutate function that you can call at any time to execute the mutation - * - An object with fields that represent the current status of the mutation's execution - * - * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2; - * - * @example - * const [createGroupMemberMutation, { data, loading, error }] = useCreateGroupMemberMutation({ - * variables: { - * groupId: // value for 'groupId' - * userId: // value for 'userId' - * }, - * }); - */ -export function useCreateGroupMemberMutation(baseOptions?: Apollo.MutationHookOptions) { - const options = {...defaultOptions, ...baseOptions} - return Apollo.useMutation(CreateGroupMemberDocument, options); - } -export type CreateGroupMemberMutationHookResult = ReturnType; -export type CreateGroupMemberMutationResult = Apollo.MutationResult; -export type CreateGroupMemberMutationOptions = Apollo.BaseMutationOptions; -export const DeleteGroupMemberDocument = gql` - mutation DeleteGroupMember($groupId: ID!, $userId: ID!) { - deleteGroupMember(groupId: $groupId, userId: $userId) { - ...GroupMember - } -} - ${GroupMemberFragmentDoc}`; -export type DeleteGroupMemberMutationFn = Apollo.MutationFunction; - -/** - * __useDeleteGroupMemberMutation__ - * - * To run a mutation, you first call `useDeleteGroupMemberMutation` within a React component and pass it any options that fit your needs. - * When your component renders, `useDeleteGroupMemberMutation` returns a tuple that includes: - * - A mutate function that you can call at any time to execute the mutation - * - An object with fields that represent the current status of the mutation's execution - * - * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2; - * - * @example - * const [deleteGroupMemberMutation, { data, loading, error }] = useDeleteGroupMemberMutation({ - * variables: { - * groupId: // value for 'groupId' - * userId: // value for 'userId' - * }, - * }); - */ -export function useDeleteGroupMemberMutation(baseOptions?: Apollo.MutationHookOptions) { - const options = {...defaultOptions, ...baseOptions} - return Apollo.useMutation(DeleteGroupMemberDocument, options); - } -export type DeleteGroupMemberMutationHookResult = ReturnType; -export type DeleteGroupMemberMutationResult = Apollo.MutationResult; -export type DeleteGroupMemberMutationOptions = Apollo.BaseMutationOptions; -export const CreateGroupDocument = gql` - mutation CreateGroup($attributes: GroupAttributes!) { - createGroup(attributes: $attributes) { - ...Group - } -} - ${GroupFragmentDoc}`; -export type CreateGroupMutationFn = Apollo.MutationFunction; - -/** - * __useCreateGroupMutation__ - * - * To run a mutation, you first call `useCreateGroupMutation` within a React component and pass it any options that fit your needs. - * When your component renders, `useCreateGroupMutation` returns a tuple that includes: - * - A mutate function that you can call at any time to execute the mutation - * - An object with fields that represent the current status of the mutation's execution - * - * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2; - * - * @example - * const [createGroupMutation, { data, loading, error }] = useCreateGroupMutation({ - * variables: { - * attributes: // value for 'attributes' - * }, - * }); - */ -export function useCreateGroupMutation(baseOptions?: Apollo.MutationHookOptions) { - const options = {...defaultOptions, ...baseOptions} - return Apollo.useMutation(CreateGroupDocument, options); - } -export type CreateGroupMutationHookResult = ReturnType; -export type CreateGroupMutationResult = Apollo.MutationResult; -export type CreateGroupMutationOptions = Apollo.BaseMutationOptions; -export const UpdateGroupDocument = gql` - mutation UpdateGroup($id: ID!, $attributes: GroupAttributes!) { - updateGroup(groupId: $id, attributes: $attributes) { - ...Group - } -} - ${GroupFragmentDoc}`; -export type UpdateGroupMutationFn = Apollo.MutationFunction; - -/** - * __useUpdateGroupMutation__ - * - * To run a mutation, you first call `useUpdateGroupMutation` within a React component and pass it any options that fit your needs. - * When your component renders, `useUpdateGroupMutation` returns a tuple that includes: - * - A mutate function that you can call at any time to execute the mutation - * - An object with fields that represent the current status of the mutation's execution - * - * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2; - * - * @example - * const [updateGroupMutation, { data, loading, error }] = useUpdateGroupMutation({ - * variables: { - * id: // value for 'id' - * attributes: // value for 'attributes' - * }, - * }); - */ -export function useUpdateGroupMutation(baseOptions?: Apollo.MutationHookOptions) { - const options = {...defaultOptions, ...baseOptions} - return Apollo.useMutation(UpdateGroupDocument, options); - } -export type UpdateGroupMutationHookResult = ReturnType; -export type UpdateGroupMutationResult = Apollo.MutationResult; -export type UpdateGroupMutationOptions = Apollo.BaseMutationOptions; -export const DeleteGroupDocument = gql` - mutation DeleteGroup($id: ID!) { - deleteGroup(groupId: $id) { - ...Group - } -} - ${GroupFragmentDoc}`; -export type DeleteGroupMutationFn = Apollo.MutationFunction; - -/** - * __useDeleteGroupMutation__ - * - * To run a mutation, you first call `useDeleteGroupMutation` within a React component and pass it any options that fit your needs. - * When your component renders, `useDeleteGroupMutation` returns a tuple that includes: - * - A mutate function that you can call at any time to execute the mutation - * - An object with fields that represent the current status of the mutation's execution - * - * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2; - * - * @example - * const [deleteGroupMutation, { data, loading, error }] = useDeleteGroupMutation({ - * variables: { - * id: // value for 'id' - * }, - * }); - */ -export function useDeleteGroupMutation(baseOptions?: Apollo.MutationHookOptions) { - const options = {...defaultOptions, ...baseOptions} - return Apollo.useMutation(DeleteGroupDocument, options); - } -export type DeleteGroupMutationHookResult = ReturnType; -export type DeleteGroupMutationResult = Apollo.MutationResult; -export type DeleteGroupMutationOptions = Apollo.BaseMutationOptions; -export const GroupsDocument = gql` - query Groups($q: String, $cursor: String) { - groups(q: $q, first: 20, after: $cursor) { - pageInfo { - ...PageInfo - } - edges { - node { - ...Group - } - } - } -} - ${PageInfoFragmentDoc} -${GroupFragmentDoc}`; - -/** - * __useGroupsQuery__ - * - * To run a query within a React component, call `useGroupsQuery` and pass it any options that fit your needs. - * When your component renders, `useGroupsQuery` returns an object from Apollo Client that contains loading, error, and data properties - * you can use to render your UI. - * - * @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options; - * - * @example - * const { data, loading, error } = useGroupsQuery({ - * variables: { - * q: // value for 'q' - * cursor: // value for 'cursor' - * }, - * }); - */ -export function useGroupsQuery(baseOptions?: Apollo.QueryHookOptions) { - const options = {...defaultOptions, ...baseOptions} - return Apollo.useQuery(GroupsDocument, options); - } -export function useGroupsLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions) { - const options = {...defaultOptions, ...baseOptions} - return Apollo.useLazyQuery(GroupsDocument, options); - } -export type GroupsQueryHookResult = ReturnType; -export type GroupsLazyQueryHookResult = ReturnType; -export type GroupsQueryResult = Apollo.QueryResult; -export const GetInstallationDocument = gql` - query GetInstallation($name: String) { - installation(name: $name) { - ...Installation - } -} - ${InstallationFragmentDoc}`; - -/** - * __useGetInstallationQuery__ - * - * To run a query within a React component, call `useGetInstallationQuery` and pass it any options that fit your needs. - * When your component renders, `useGetInstallationQuery` returns an object from Apollo Client that contains loading, error, and data properties - * you can use to render your UI. - * - * @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options; - * - * @example - * const { data, loading, error } = useGetInstallationQuery({ - * variables: { - * name: // value for 'name' - * }, - * }); - */ -export function useGetInstallationQuery(baseOptions?: Apollo.QueryHookOptions) { - const options = {...defaultOptions, ...baseOptions} - return Apollo.useQuery(GetInstallationDocument, options); - } -export function useGetInstallationLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions) { - const options = {...defaultOptions, ...baseOptions} - return Apollo.useLazyQuery(GetInstallationDocument, options); - } -export type GetInstallationQueryHookResult = ReturnType; -export type GetInstallationLazyQueryHookResult = ReturnType; -export type GetInstallationQueryResult = Apollo.QueryResult; -export const GetInstallationByIdDocument = gql` - query GetInstallationById($id: ID) { - installation(id: $id) { - ...Installation - } -} - ${InstallationFragmentDoc}`; - -/** - * __useGetInstallationByIdQuery__ - * - * To run a query within a React component, call `useGetInstallationByIdQuery` and pass it any options that fit your needs. - * When your component renders, `useGetInstallationByIdQuery` returns an object from Apollo Client that contains loading, error, and data properties - * you can use to render your UI. - * - * @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options; - * - * @example - * const { data, loading, error } = useGetInstallationByIdQuery({ - * variables: { - * id: // value for 'id' - * }, - * }); - */ -export function useGetInstallationByIdQuery(baseOptions?: Apollo.QueryHookOptions) { - const options = {...defaultOptions, ...baseOptions} - return Apollo.useQuery(GetInstallationByIdDocument, options); - } -export function useGetInstallationByIdLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions) { - const options = {...defaultOptions, ...baseOptions} - return Apollo.useLazyQuery(GetInstallationByIdDocument, options); - } -export type GetInstallationByIdQueryHookResult = ReturnType; -export type GetInstallationByIdLazyQueryHookResult = ReturnType; -export type GetInstallationByIdQueryResult = Apollo.QueryResult; -export const GetInstallationsDocument = gql` - query GetInstallations($first: Int) { - installations(first: $first) { - edges { - node { - ...Installation - } - } - } -} - ${InstallationFragmentDoc}`; - -/** - * __useGetInstallationsQuery__ - * - * To run a query within a React component, call `useGetInstallationsQuery` and pass it any options that fit your needs. - * When your component renders, `useGetInstallationsQuery` returns an object from Apollo Client that contains loading, error, and data properties - * you can use to render your UI. - * - * @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options; - * - * @example - * const { data, loading, error } = useGetInstallationsQuery({ - * variables: { - * first: // value for 'first' - * }, - * }); - */ -export function useGetInstallationsQuery(baseOptions?: Apollo.QueryHookOptions) { - const options = {...defaultOptions, ...baseOptions} - return Apollo.useQuery(GetInstallationsDocument, options); - } -export function useGetInstallationsLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions) { - const options = {...defaultOptions, ...baseOptions} - return Apollo.useLazyQuery(GetInstallationsDocument, options); - } -export type GetInstallationsQueryHookResult = ReturnType; -export type GetInstallationsLazyQueryHookResult = ReturnType; -export type GetInstallationsQueryResult = Apollo.QueryResult; -export const UpsertOidcProviderDocument = gql` - mutation UpsertOidcProvider($id: ID!, $attributes: OidcAttributes!) { - upsertOidcProvider(installationId: $id, attributes: $attributes) { - id - } -} - `; -export type UpsertOidcProviderMutationFn = Apollo.MutationFunction; - -/** - * __useUpsertOidcProviderMutation__ - * - * To run a mutation, you first call `useUpsertOidcProviderMutation` within a React component and pass it any options that fit your needs. - * When your component renders, `useUpsertOidcProviderMutation` returns a tuple that includes: - * - A mutate function that you can call at any time to execute the mutation - * - An object with fields that represent the current status of the mutation's execution - * - * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2; - * - * @example - * const [upsertOidcProviderMutation, { data, loading, error }] = useUpsertOidcProviderMutation({ - * variables: { - * id: // value for 'id' - * attributes: // value for 'attributes' - * }, - * }); - */ -export function useUpsertOidcProviderMutation(baseOptions?: Apollo.MutationHookOptions) { - const options = {...defaultOptions, ...baseOptions} - return Apollo.useMutation(UpsertOidcProviderDocument, options); - } -export type UpsertOidcProviderMutationHookResult = ReturnType; -export type UpsertOidcProviderMutationResult = Apollo.MutationResult; -export type UpsertOidcProviderMutationOptions = Apollo.BaseMutationOptions; -export const SignupInviteDocument = gql` - mutation SignupInvite($attributes: UserAttributes!, $inviteId: String!) { - signup(attributes: $attributes, inviteId: $inviteId) { - jwt - } -} - `; -export type SignupInviteMutationFn = Apollo.MutationFunction; - -/** - * __useSignupInviteMutation__ - * - * To run a mutation, you first call `useSignupInviteMutation` within a React component and pass it any options that fit your needs. - * When your component renders, `useSignupInviteMutation` returns a tuple that includes: - * - A mutate function that you can call at any time to execute the mutation - * - An object with fields that represent the current status of the mutation's execution - * - * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2; - * - * @example - * const [signupInviteMutation, { data, loading, error }] = useSignupInviteMutation({ - * variables: { - * attributes: // value for 'attributes' - * inviteId: // value for 'inviteId' - * }, - * }); - */ -export function useSignupInviteMutation(baseOptions?: Apollo.MutationHookOptions) { - const options = {...defaultOptions, ...baseOptions} - return Apollo.useMutation(SignupInviteDocument, options); - } -export type SignupInviteMutationHookResult = ReturnType; -export type SignupInviteMutationResult = Apollo.MutationResult; -export type SignupInviteMutationOptions = Apollo.BaseMutationOptions; -export const RealizeInviteDocument = gql` - mutation RealizeInvite($id: String!) { - realizeInvite(id: $id) { - jwt - } -} - `; -export type RealizeInviteMutationFn = Apollo.MutationFunction; - -/** - * __useRealizeInviteMutation__ - * - * To run a mutation, you first call `useRealizeInviteMutation` within a React component and pass it any options that fit your needs. - * When your component renders, `useRealizeInviteMutation` returns a tuple that includes: - * - A mutate function that you can call at any time to execute the mutation - * - An object with fields that represent the current status of the mutation's execution - * - * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2; - * - * @example - * const [realizeInviteMutation, { data, loading, error }] = useRealizeInviteMutation({ - * variables: { - * id: // value for 'id' - * }, - * }); - */ -export function useRealizeInviteMutation(baseOptions?: Apollo.MutationHookOptions) { - const options = {...defaultOptions, ...baseOptions} - return Apollo.useMutation(RealizeInviteDocument, options); - } -export type RealizeInviteMutationHookResult = ReturnType; -export type RealizeInviteMutationResult = Apollo.MutationResult; -export type RealizeInviteMutationOptions = Apollo.BaseMutationOptions; -export const InviteDocument = gql` - query Invite($id: String!) { - invite(id: $id) { - id - email - existing - account { - ...Account - } - user { - ...User - account { - ...Account - } - } - } -} - ${AccountFragmentDoc} -${UserFragmentDoc}`; - -/** - * __useInviteQuery__ - * - * To run a query within a React component, call `useInviteQuery` and pass it any options that fit your needs. - * When your component renders, `useInviteQuery` returns an object from Apollo Client that contains loading, error, and data properties - * you can use to render your UI. - * - * @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options; - * - * @example - * const { data, loading, error } = useInviteQuery({ - * variables: { - * id: // value for 'id' - * }, - * }); - */ -export function useInviteQuery(baseOptions: Apollo.QueryHookOptions) { - const options = {...defaultOptions, ...baseOptions} - return Apollo.useQuery(InviteDocument, options); - } -export function useInviteLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions) { - const options = {...defaultOptions, ...baseOptions} - return Apollo.useLazyQuery(InviteDocument, options); - } -export type InviteQueryHookResult = ReturnType; -export type InviteLazyQueryHookResult = ReturnType; -export type InviteQueryResult = Apollo.QueryResult; -export const SubscriptionDocument = gql` - query Subscription { - account { - billingCustomerId - grandfatheredUntil - delinquentAt - userCount - clusterCount - availableFeatures { - userManagement - audit - } - subscription { - id - plan { - id - period - lineItems { - dimension - cost - } - } - } - billingAddress { - name - line1 - line2 - zip - state - city - country - } - } -} - `; - -/** - * __useSubscriptionQuery__ - * - * To run a query within a React component, call `useSubscriptionQuery` and pass it any options that fit your needs. - * When your component renders, `useSubscriptionQuery` returns an object from Apollo Client that contains loading, error, and data properties - * you can use to render your UI. - * - * @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options; - * - * @example - * const { data, loading, error } = useSubscriptionQuery({ - * variables: { - * }, - * }); - */ -export function useSubscriptionQuery(baseOptions?: Apollo.QueryHookOptions) { - const options = {...defaultOptions, ...baseOptions} - return Apollo.useQuery(SubscriptionDocument, options); - } -export function useSubscriptionLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions) { - const options = {...defaultOptions, ...baseOptions} - return Apollo.useLazyQuery(SubscriptionDocument, options); - } -export type SubscriptionQueryHookResult = ReturnType; -export type SubscriptionLazyQueryHookResult = ReturnType; -export type SubscriptionQueryResult = Apollo.QueryResult; -export const UpdateAccountBillingDocument = gql` - mutation UpdateAccountBilling($attributes: AccountAttributes!) { - updateAccount(attributes: $attributes) { - id - } -} - `; -export type UpdateAccountBillingMutationFn = Apollo.MutationFunction; - -/** - * __useUpdateAccountBillingMutation__ - * - * To run a mutation, you first call `useUpdateAccountBillingMutation` within a React component and pass it any options that fit your needs. - * When your component renders, `useUpdateAccountBillingMutation` returns a tuple that includes: - * - A mutate function that you can call at any time to execute the mutation - * - An object with fields that represent the current status of the mutation's execution - * - * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2; - * - * @example - * const [updateAccountBillingMutation, { data, loading, error }] = useUpdateAccountBillingMutation({ - * variables: { - * attributes: // value for 'attributes' - * }, - * }); - */ -export function useUpdateAccountBillingMutation(baseOptions?: Apollo.MutationHookOptions) { - const options = {...defaultOptions, ...baseOptions} - return Apollo.useMutation(UpdateAccountBillingDocument, options); - } -export type UpdateAccountBillingMutationHookResult = ReturnType; -export type UpdateAccountBillingMutationResult = Apollo.MutationResult; -export type UpdateAccountBillingMutationOptions = Apollo.BaseMutationOptions; -export const UpgradeToProfessionalPlanDocument = gql` - mutation UpgradeToProfessionalPlan($planId: ID!) { - createPlatformSubscription(planId: $planId) { - id - } -} - `; -export type UpgradeToProfessionalPlanMutationFn = Apollo.MutationFunction; - -/** - * __useUpgradeToProfessionalPlanMutation__ - * - * To run a mutation, you first call `useUpgradeToProfessionalPlanMutation` within a React component and pass it any options that fit your needs. - * When your component renders, `useUpgradeToProfessionalPlanMutation` returns a tuple that includes: - * - A mutate function that you can call at any time to execute the mutation - * - An object with fields that represent the current status of the mutation's execution - * - * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2; - * - * @example - * const [upgradeToProfessionalPlanMutation, { data, loading, error }] = useUpgradeToProfessionalPlanMutation({ - * variables: { - * planId: // value for 'planId' - * }, - * }); - */ -export function useUpgradeToProfessionalPlanMutation(baseOptions?: Apollo.MutationHookOptions) { - const options = {...defaultOptions, ...baseOptions} - return Apollo.useMutation(UpgradeToProfessionalPlanDocument, options); - } -export type UpgradeToProfessionalPlanMutationHookResult = ReturnType; -export type UpgradeToProfessionalPlanMutationResult = Apollo.MutationResult; -export type UpgradeToProfessionalPlanMutationOptions = Apollo.BaseMutationOptions; -export const DowngradeToFreePlanMutationDocument = gql` - mutation DowngradeToFreePlanMutation { - deletePlatformSubscription { - id - } -} - `; -export type DowngradeToFreePlanMutationMutationFn = Apollo.MutationFunction; - -/** - * __useDowngradeToFreePlanMutationMutation__ - * - * To run a mutation, you first call `useDowngradeToFreePlanMutationMutation` within a React component and pass it any options that fit your needs. - * When your component renders, `useDowngradeToFreePlanMutationMutation` returns a tuple that includes: - * - A mutate function that you can call at any time to execute the mutation - * - An object with fields that represent the current status of the mutation's execution - * - * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2; - * - * @example - * const [downgradeToFreePlanMutationMutation, { data, loading, error }] = useDowngradeToFreePlanMutationMutation({ - * variables: { - * }, - * }); - */ -export function useDowngradeToFreePlanMutationMutation(baseOptions?: Apollo.MutationHookOptions) { - const options = {...defaultOptions, ...baseOptions} - return Apollo.useMutation(DowngradeToFreePlanMutationDocument, options); - } -export type DowngradeToFreePlanMutationMutationHookResult = ReturnType; -export type DowngradeToFreePlanMutationMutationResult = Apollo.MutationResult; -export type DowngradeToFreePlanMutationMutationOptions = Apollo.BaseMutationOptions; -export const CardsDocument = gql` - query Cards { - me { - id - cards(first: 100) { - edges { - node { - ...Card - } - } - } - } -} - ${CardFragmentDoc}`; - -/** - * __useCardsQuery__ - * - * To run a query within a React component, call `useCardsQuery` and pass it any options that fit your needs. - * When your component renders, `useCardsQuery` returns an object from Apollo Client that contains loading, error, and data properties - * you can use to render your UI. - * - * @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options; - * - * @example - * const { data, loading, error } = useCardsQuery({ - * variables: { - * }, - * }); - */ -export function useCardsQuery(baseOptions?: Apollo.QueryHookOptions) { - const options = {...defaultOptions, ...baseOptions} - return Apollo.useQuery(CardsDocument, options); - } -export function useCardsLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions) { - const options = {...defaultOptions, ...baseOptions} - return Apollo.useLazyQuery(CardsDocument, options); - } -export type CardsQueryHookResult = ReturnType; -export type CardsLazyQueryHookResult = ReturnType; -export type CardsQueryResult = Apollo.QueryResult; -export const CreateCardDocument = gql` - mutation CreateCard($source: String!, $address: AddressAttributes) { - createCard(source: $source, address: $address) { - id - } -} - `; -export type CreateCardMutationFn = Apollo.MutationFunction; - -/** - * __useCreateCardMutation__ - * - * To run a mutation, you first call `useCreateCardMutation` within a React component and pass it any options that fit your needs. - * When your component renders, `useCreateCardMutation` returns a tuple that includes: - * - A mutate function that you can call at any time to execute the mutation - * - An object with fields that represent the current status of the mutation's execution - * - * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2; - * - * @example - * const [createCardMutation, { data, loading, error }] = useCreateCardMutation({ - * variables: { - * source: // value for 'source' - * address: // value for 'address' - * }, - * }); - */ -export function useCreateCardMutation(baseOptions?: Apollo.MutationHookOptions) { - const options = {...defaultOptions, ...baseOptions} - return Apollo.useMutation(CreateCardDocument, options); - } -export type CreateCardMutationHookResult = ReturnType; -export type CreateCardMutationResult = Apollo.MutationResult; -export type CreateCardMutationOptions = Apollo.BaseMutationOptions; -export const DeleteCardDocument = gql` - mutation DeleteCard($id: ID!) { - deleteCard(id: $id) { - id - } -} - `; -export type DeleteCardMutationFn = Apollo.MutationFunction; - -/** - * __useDeleteCardMutation__ - * - * To run a mutation, you first call `useDeleteCardMutation` within a React component and pass it any options that fit your needs. - * When your component renders, `useDeleteCardMutation` returns a tuple that includes: - * - A mutate function that you can call at any time to execute the mutation - * - An object with fields that represent the current status of the mutation's execution - * - * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2; - * - * @example - * const [deleteCardMutation, { data, loading, error }] = useDeleteCardMutation({ - * variables: { - * id: // value for 'id' - * }, - * }); - */ -export function useDeleteCardMutation(baseOptions?: Apollo.MutationHookOptions) { - const options = {...defaultOptions, ...baseOptions} - return Apollo.useMutation(DeleteCardDocument, options); - } -export type DeleteCardMutationHookResult = ReturnType; -export type DeleteCardMutationResult = Apollo.MutationResult; -export type DeleteCardMutationOptions = Apollo.BaseMutationOptions; -export const GetRecipeDocument = gql` - query GetRecipe($repo: String, $name: String, $id: ID) { - recipe(repo: $repo, name: $name, id: $id) { - ...Recipe - recipeDependencies { - ...Recipe - } - } -} - ${RecipeFragmentDoc}`; - -/** - * __useGetRecipeQuery__ - * - * To run a query within a React component, call `useGetRecipeQuery` and pass it any options that fit your needs. - * When your component renders, `useGetRecipeQuery` returns an object from Apollo Client that contains loading, error, and data properties - * you can use to render your UI. - * - * @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options; - * - * @example - * const { data, loading, error } = useGetRecipeQuery({ - * variables: { - * repo: // value for 'repo' - * name: // value for 'name' - * id: // value for 'id' - * }, - * }); - */ -export function useGetRecipeQuery(baseOptions?: Apollo.QueryHookOptions) { - const options = {...defaultOptions, ...baseOptions} - return Apollo.useQuery(GetRecipeDocument, options); - } -export function useGetRecipeLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions) { - const options = {...defaultOptions, ...baseOptions} - return Apollo.useLazyQuery(GetRecipeDocument, options); - } -export type GetRecipeQueryHookResult = ReturnType; -export type GetRecipeLazyQueryHookResult = ReturnType; -export type GetRecipeQueryResult = Apollo.QueryResult; -export const ListRecipesDocument = gql` - query ListRecipes($repositoryName: String, $repositoryId: ID, $provider: Provider) { - recipes(repositoryName: $repositoryName, provider: $provider, first: 500, repositoryId: $repositoryId) { - edges { - node { - ...Recipe - } - } - } -} - ${RecipeFragmentDoc}`; - -/** - * __useListRecipesQuery__ - * - * To run a query within a React component, call `useListRecipesQuery` and pass it any options that fit your needs. - * When your component renders, `useListRecipesQuery` returns an object from Apollo Client that contains loading, error, and data properties - * you can use to render your UI. - * - * @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options; - * - * @example - * const { data, loading, error } = useListRecipesQuery({ - * variables: { - * repositoryName: // value for 'repositoryName' - * repositoryId: // value for 'repositoryId' - * provider: // value for 'provider' - * }, - * }); - */ -export function useListRecipesQuery(baseOptions?: Apollo.QueryHookOptions) { - const options = {...defaultOptions, ...baseOptions} - return Apollo.useQuery(ListRecipesDocument, options); - } -export function useListRecipesLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions) { - const options = {...defaultOptions, ...baseOptions} - return Apollo.useLazyQuery(ListRecipesDocument, options); - } -export type ListRecipesQueryHookResult = ReturnType; -export type ListRecipesLazyQueryHookResult = ReturnType; -export type ListRecipesQueryResult = Apollo.QueryResult; -export const CreateRecipeDocument = gql` - mutation CreateRecipe($name: String!, $attributes: RecipeAttributes!) { - createRecipe(repositoryName: $name, attributes: $attributes) { - id - } -} - `; -export type CreateRecipeMutationFn = Apollo.MutationFunction; - -/** - * __useCreateRecipeMutation__ - * - * To run a mutation, you first call `useCreateRecipeMutation` within a React component and pass it any options that fit your needs. - * When your component renders, `useCreateRecipeMutation` returns a tuple that includes: - * - A mutate function that you can call at any time to execute the mutation - * - An object with fields that represent the current status of the mutation's execution - * - * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2; - * - * @example - * const [createRecipeMutation, { data, loading, error }] = useCreateRecipeMutation({ - * variables: { - * name: // value for 'name' - * attributes: // value for 'attributes' - * }, - * }); - */ -export function useCreateRecipeMutation(baseOptions?: Apollo.MutationHookOptions) { - const options = {...defaultOptions, ...baseOptions} - return Apollo.useMutation(CreateRecipeDocument, options); - } -export type CreateRecipeMutationHookResult = ReturnType; -export type CreateRecipeMutationResult = Apollo.MutationResult; -export type CreateRecipeMutationOptions = Apollo.BaseMutationOptions; -export const InstallRecipeDocument = gql` - mutation InstallRecipe($id: ID!) { - installRecipe(recipeId: $id, context: "{}") { - id - } -} - `; -export type InstallRecipeMutationFn = Apollo.MutationFunction; - -/** - * __useInstallRecipeMutation__ - * - * To run a mutation, you first call `useInstallRecipeMutation` within a React component and pass it any options that fit your needs. - * When your component renders, `useInstallRecipeMutation` returns a tuple that includes: - * - A mutate function that you can call at any time to execute the mutation - * - An object with fields that represent the current status of the mutation's execution - * - * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2; - * - * @example - * const [installRecipeMutation, { data, loading, error }] = useInstallRecipeMutation({ - * variables: { - * id: // value for 'id' - * }, - * }); - */ -export function useInstallRecipeMutation(baseOptions?: Apollo.MutationHookOptions) { - const options = {...defaultOptions, ...baseOptions} - return Apollo.useMutation(InstallRecipeDocument, options); - } -export type InstallRecipeMutationHookResult = ReturnType; -export type InstallRecipeMutationResult = Apollo.MutationResult; -export type InstallRecipeMutationOptions = Apollo.BaseMutationOptions; -export const CreateStackDocument = gql` - mutation CreateStack($attributes: StackAttributes!) { - createStack(attributes: $attributes) { - id - } -} - `; -export type CreateStackMutationFn = Apollo.MutationFunction; - -/** - * __useCreateStackMutation__ - * - * To run a mutation, you first call `useCreateStackMutation` within a React component and pass it any options that fit your needs. - * When your component renders, `useCreateStackMutation` returns a tuple that includes: - * - A mutate function that you can call at any time to execute the mutation - * - An object with fields that represent the current status of the mutation's execution - * - * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2; - * - * @example - * const [createStackMutation, { data, loading, error }] = useCreateStackMutation({ - * variables: { - * attributes: // value for 'attributes' - * }, - * }); - */ -export function useCreateStackMutation(baseOptions?: Apollo.MutationHookOptions) { - const options = {...defaultOptions, ...baseOptions} - return Apollo.useMutation(CreateStackDocument, options); - } -export type CreateStackMutationHookResult = ReturnType; -export type CreateStackMutationResult = Apollo.MutationResult; -export type CreateStackMutationOptions = Apollo.BaseMutationOptions; -export const GetStackDocument = gql` - query GetStack($name: String!, $provider: Provider!) { - stack(name: $name, provider: $provider) { - ...Stack - } -} - ${StackFragmentDoc}`; - -/** - * __useGetStackQuery__ - * - * To run a query within a React component, call `useGetStackQuery` and pass it any options that fit your needs. - * When your component renders, `useGetStackQuery` returns an object from Apollo Client that contains loading, error, and data properties - * you can use to render your UI. - * - * @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options; - * - * @example - * const { data, loading, error } = useGetStackQuery({ - * variables: { - * name: // value for 'name' - * provider: // value for 'provider' - * }, - * }); - */ -export function useGetStackQuery(baseOptions: Apollo.QueryHookOptions) { - const options = {...defaultOptions, ...baseOptions} - return Apollo.useQuery(GetStackDocument, options); - } -export function useGetStackLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions) { - const options = {...defaultOptions, ...baseOptions} - return Apollo.useLazyQuery(GetStackDocument, options); - } -export type GetStackQueryHookResult = ReturnType; -export type GetStackLazyQueryHookResult = ReturnType; -export type GetStackQueryResult = Apollo.QueryResult; -export const ListStacksDocument = gql` - query ListStacks($featured: Boolean, $cursor: String) { - stacks(first: 100, after: $cursor, featured: $featured) { - edges { - node { - ...Stack - } - } - } -} - ${StackFragmentDoc}`; - -/** - * __useListStacksQuery__ - * - * To run a query within a React component, call `useListStacksQuery` and pass it any options that fit your needs. - * When your component renders, `useListStacksQuery` returns an object from Apollo Client that contains loading, error, and data properties - * you can use to render your UI. - * - * @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options; - * - * @example - * const { data, loading, error } = useListStacksQuery({ - * variables: { - * featured: // value for 'featured' - * cursor: // value for 'cursor' - * }, - * }); - */ -export function useListStacksQuery(baseOptions?: Apollo.QueryHookOptions) { - const options = {...defaultOptions, ...baseOptions} - return Apollo.useQuery(ListStacksDocument, options); - } -export function useListStacksLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions) { - const options = {...defaultOptions, ...baseOptions} - return Apollo.useLazyQuery(ListStacksDocument, options); - } -export type ListStacksQueryHookResult = ReturnType; -export type ListStacksLazyQueryHookResult = ReturnType; -export type ListStacksQueryResult = Apollo.QueryResult; -export const CreateQuickStackDocument = gql` - mutation CreateQuickStack($applicationIds: [ID], $provider: Provider!) { - quickStack(repositoryIds: $applicationIds, provider: $provider) { - id - name - } -} - `; -export type CreateQuickStackMutationFn = Apollo.MutationFunction; - -/** - * __useCreateQuickStackMutation__ - * - * To run a mutation, you first call `useCreateQuickStackMutation` within a React component and pass it any options that fit your needs. - * When your component renders, `useCreateQuickStackMutation` returns a tuple that includes: - * - A mutate function that you can call at any time to execute the mutation - * - An object with fields that represent the current status of the mutation's execution - * - * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2; - * - * @example - * const [createQuickStackMutation, { data, loading, error }] = useCreateQuickStackMutation({ - * variables: { - * applicationIds: // value for 'applicationIds' - * provider: // value for 'provider' - * }, - * }); - */ -export function useCreateQuickStackMutation(baseOptions?: Apollo.MutationHookOptions) { - const options = {...defaultOptions, ...baseOptions} - return Apollo.useMutation(CreateQuickStackDocument, options); - } -export type CreateQuickStackMutationHookResult = ReturnType; -export type CreateQuickStackMutationResult = Apollo.MutationResult; -export type CreateQuickStackMutationOptions = Apollo.BaseMutationOptions; -export const InstallStackShellDocument = gql` - mutation InstallStackShell($name: String!, $context: ContextAttributes!, $oidc: Boolean!) { - installStackShell(name: $name, context: $context, oidc: $oidc) { - id - name - } -} - `; -export type InstallStackShellMutationFn = Apollo.MutationFunction; - -/** - * __useInstallStackShellMutation__ - * - * To run a mutation, you first call `useInstallStackShellMutation` within a React component and pass it any options that fit your needs. - * When your component renders, `useInstallStackShellMutation` returns a tuple that includes: - * - A mutate function that you can call at any time to execute the mutation - * - An object with fields that represent the current status of the mutation's execution - * - * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2; - * - * @example - * const [installStackShellMutation, { data, loading, error }] = useInstallStackShellMutation({ - * variables: { - * name: // value for 'name' - * context: // value for 'context' - * oidc: // value for 'oidc' - * }, - * }); - */ -export function useInstallStackShellMutation(baseOptions?: Apollo.MutationHookOptions) { - const options = {...defaultOptions, ...baseOptions} - return Apollo.useMutation(InstallStackShellDocument, options); - } -export type InstallStackShellMutationHookResult = ReturnType; -export type InstallStackShellMutationResult = Apollo.MutationResult; -export type InstallStackShellMutationOptions = Apollo.BaseMutationOptions; -export const RepositoryDocument = gql` - query Repository($id: ID, $name: String) { - repository(id: $id, name: $name) { - ...Repo - editable - publicKey - secrets - artifacts { - ...Artifact - } - installation { - ...Installation - oidcProvider { - ...OIDCProvider - } - } - tags { - tag - } - readme - mainBranch - gitUrl - homepage - license { - name - url - } - documentation - community { - discord - slack - homepage - gitUrl - twitter - } - } -} - ${RepoFragmentDoc} -${ArtifactFragmentDoc} -${InstallationFragmentDoc} -${OidcProviderFragmentDoc}`; - -/** - * __useRepositoryQuery__ - * - * To run a query within a React component, call `useRepositoryQuery` and pass it any options that fit your needs. - * When your component renders, `useRepositoryQuery` returns an object from Apollo Client that contains loading, error, and data properties - * you can use to render your UI. - * - * @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options; - * - * @example - * const { data, loading, error } = useRepositoryQuery({ - * variables: { - * id: // value for 'id' - * name: // value for 'name' - * }, - * }); - */ -export function useRepositoryQuery(baseOptions?: Apollo.QueryHookOptions) { - const options = {...defaultOptions, ...baseOptions} - return Apollo.useQuery(RepositoryDocument, options); - } -export function useRepositoryLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions) { - const options = {...defaultOptions, ...baseOptions} - return Apollo.useLazyQuery(RepositoryDocument, options); - } -export type RepositoryQueryHookResult = ReturnType; -export type RepositoryLazyQueryHookResult = ReturnType; -export type RepositoryQueryResult = Apollo.QueryResult; -export const CreateResourceDefinitionDocument = gql` - mutation CreateResourceDefinition($name: String!, $input: ResourceDefinitionAttributes!) { - updateRepository(repositoryName: $name, attributes: {integrationResourceDefinition: $input}) { - id - } -} - `; -export type CreateResourceDefinitionMutationFn = Apollo.MutationFunction; - -/** - * __useCreateResourceDefinitionMutation__ - * - * To run a mutation, you first call `useCreateResourceDefinitionMutation` within a React component and pass it any options that fit your needs. - * When your component renders, `useCreateResourceDefinitionMutation` returns a tuple that includes: - * - A mutate function that you can call at any time to execute the mutation - * - An object with fields that represent the current status of the mutation's execution - * - * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2; - * - * @example - * const [createResourceDefinitionMutation, { data, loading, error }] = useCreateResourceDefinitionMutation({ - * variables: { - * name: // value for 'name' - * input: // value for 'input' - * }, - * }); - */ -export function useCreateResourceDefinitionMutation(baseOptions?: Apollo.MutationHookOptions) { - const options = {...defaultOptions, ...baseOptions} - return Apollo.useMutation(CreateResourceDefinitionDocument, options); - } -export type CreateResourceDefinitionMutationHookResult = ReturnType; -export type CreateResourceDefinitionMutationResult = Apollo.MutationResult; -export type CreateResourceDefinitionMutationOptions = Apollo.BaseMutationOptions; -export const CreateIntegrationDocument = gql` - mutation CreateIntegration($name: String!, $attrs: IntegrationAttributes!) { - createIntegration(repositoryName: $name, attributes: $attrs) { - id - } -} - `; -export type CreateIntegrationMutationFn = Apollo.MutationFunction; - -/** - * __useCreateIntegrationMutation__ - * - * To run a mutation, you first call `useCreateIntegrationMutation` within a React component and pass it any options that fit your needs. - * When your component renders, `useCreateIntegrationMutation` returns a tuple that includes: - * - A mutate function that you can call at any time to execute the mutation - * - An object with fields that represent the current status of the mutation's execution - * - * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2; - * - * @example - * const [createIntegrationMutation, { data, loading, error }] = useCreateIntegrationMutation({ - * variables: { - * name: // value for 'name' - * attrs: // value for 'attrs' - * }, - * }); - */ -export function useCreateIntegrationMutation(baseOptions?: Apollo.MutationHookOptions) { - const options = {...defaultOptions, ...baseOptions} - return Apollo.useMutation(CreateIntegrationDocument, options); - } -export type CreateIntegrationMutationHookResult = ReturnType; -export type CreateIntegrationMutationResult = Apollo.MutationResult; -export type CreateIntegrationMutationOptions = Apollo.BaseMutationOptions; -export const UpdateRepositoryDocument = gql` - mutation UpdateRepository($name: String!, $attrs: RepositoryAttributes!) { - updateRepository(repositoryName: $name, attributes: $attrs) { - id - } -} - `; -export type UpdateRepositoryMutationFn = Apollo.MutationFunction; - -/** - * __useUpdateRepositoryMutation__ - * - * To run a mutation, you first call `useUpdateRepositoryMutation` within a React component and pass it any options that fit your needs. - * When your component renders, `useUpdateRepositoryMutation` returns a tuple that includes: - * - A mutate function that you can call at any time to execute the mutation - * - An object with fields that represent the current status of the mutation's execution - * - * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2; - * - * @example - * const [updateRepositoryMutation, { data, loading, error }] = useUpdateRepositoryMutation({ - * variables: { - * name: // value for 'name' - * attrs: // value for 'attrs' - * }, - * }); - */ -export function useUpdateRepositoryMutation(baseOptions?: Apollo.MutationHookOptions) { - const options = {...defaultOptions, ...baseOptions} - return Apollo.useMutation(UpdateRepositoryDocument, options); - } -export type UpdateRepositoryMutationHookResult = ReturnType; -export type UpdateRepositoryMutationResult = Apollo.MutationResult; -export type UpdateRepositoryMutationOptions = Apollo.BaseMutationOptions; -export const CreateRepositoryDocument = gql` - mutation CreateRepository($name: String!, $publisher: String!, $attributes: RepositoryAttributes!) { - upsertRepository(name: $name, publisher: $publisher, attributes: $attributes) { - id - } -} - `; -export type CreateRepositoryMutationFn = Apollo.MutationFunction; - -/** - * __useCreateRepositoryMutation__ - * - * To run a mutation, you first call `useCreateRepositoryMutation` within a React component and pass it any options that fit your needs. - * When your component renders, `useCreateRepositoryMutation` returns a tuple that includes: - * - A mutate function that you can call at any time to execute the mutation - * - An object with fields that represent the current status of the mutation's execution - * - * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2; - * - * @example - * const [createRepositoryMutation, { data, loading, error }] = useCreateRepositoryMutation({ - * variables: { - * name: // value for 'name' - * publisher: // value for 'publisher' - * attributes: // value for 'attributes' - * }, - * }); - */ -export function useCreateRepositoryMutation(baseOptions?: Apollo.MutationHookOptions) { - const options = {...defaultOptions, ...baseOptions} - return Apollo.useMutation(CreateRepositoryDocument, options); - } -export type CreateRepositoryMutationHookResult = ReturnType; -export type CreateRepositoryMutationResult = Apollo.MutationResult; -export type CreateRepositoryMutationOptions = Apollo.BaseMutationOptions; -export const AcquireLockDocument = gql` - mutation AcquireLock($name: String!) { - acquireLock(repository: $name) { - ...ApplyLock - } -} - ${ApplyLockFragmentDoc}`; -export type AcquireLockMutationFn = Apollo.MutationFunction; - -/** - * __useAcquireLockMutation__ - * - * To run a mutation, you first call `useAcquireLockMutation` within a React component and pass it any options that fit your needs. - * When your component renders, `useAcquireLockMutation` returns a tuple that includes: - * - A mutate function that you can call at any time to execute the mutation - * - An object with fields that represent the current status of the mutation's execution - * - * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2; - * - * @example - * const [acquireLockMutation, { data, loading, error }] = useAcquireLockMutation({ - * variables: { - * name: // value for 'name' - * }, - * }); - */ -export function useAcquireLockMutation(baseOptions?: Apollo.MutationHookOptions) { - const options = {...defaultOptions, ...baseOptions} - return Apollo.useMutation(AcquireLockDocument, options); - } -export type AcquireLockMutationHookResult = ReturnType; -export type AcquireLockMutationResult = Apollo.MutationResult; -export type AcquireLockMutationOptions = Apollo.BaseMutationOptions; -export const ReleaseLockDocument = gql` - mutation ReleaseLock($name: String!, $attrs: LockAttributes!) { - releaseLock(repository: $name, attributes: $attrs) { - ...ApplyLock - } -} - ${ApplyLockFragmentDoc}`; -export type ReleaseLockMutationFn = Apollo.MutationFunction; - -/** - * __useReleaseLockMutation__ - * - * To run a mutation, you first call `useReleaseLockMutation` within a React component and pass it any options that fit your needs. - * When your component renders, `useReleaseLockMutation` returns a tuple that includes: - * - A mutate function that you can call at any time to execute the mutation - * - An object with fields that represent the current status of the mutation's execution - * - * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2; - * - * @example - * const [releaseLockMutation, { data, loading, error }] = useReleaseLockMutation({ - * variables: { - * name: // value for 'name' - * attrs: // value for 'attrs' - * }, - * }); - */ -export function useReleaseLockMutation(baseOptions?: Apollo.MutationHookOptions) { - const options = {...defaultOptions, ...baseOptions} - return Apollo.useMutation(ReleaseLockDocument, options); - } -export type ReleaseLockMutationHookResult = ReturnType; -export type ReleaseLockMutationResult = Apollo.MutationResult; -export type ReleaseLockMutationOptions = Apollo.BaseMutationOptions; -export const UnlockRepositoryDocument = gql` - mutation UnlockRepository($name: String!) { - unlockRepository(name: $name) -} - `; -export type UnlockRepositoryMutationFn = Apollo.MutationFunction; - -/** - * __useUnlockRepositoryMutation__ - * - * To run a mutation, you first call `useUnlockRepositoryMutation` within a React component and pass it any options that fit your needs. - * When your component renders, `useUnlockRepositoryMutation` returns a tuple that includes: - * - A mutate function that you can call at any time to execute the mutation - * - An object with fields that represent the current status of the mutation's execution - * - * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2; - * - * @example - * const [unlockRepositoryMutation, { data, loading, error }] = useUnlockRepositoryMutation({ - * variables: { - * name: // value for 'name' - * }, - * }); - */ -export function useUnlockRepositoryMutation(baseOptions?: Apollo.MutationHookOptions) { - const options = {...defaultOptions, ...baseOptions} - return Apollo.useMutation(UnlockRepositoryDocument, options); - } -export type UnlockRepositoryMutationHookResult = ReturnType; -export type UnlockRepositoryMutationResult = Apollo.MutationResult; -export type UnlockRepositoryMutationOptions = Apollo.BaseMutationOptions; -export const ListRepositoriesDocument = gql` - query ListRepositories($q: String, $installed: Boolean, $first: Int = 100, $provider: Provider = null) { - repositories(q: $q, first: $first, installed: $installed, provider: $provider) { - edges { - node { - ...Repository - } - } - } -} - ${RepositoryFragmentDoc}`; - -/** - * __useListRepositoriesQuery__ - * - * To run a query within a React component, call `useListRepositoriesQuery` and pass it any options that fit your needs. - * When your component renders, `useListRepositoriesQuery` returns an object from Apollo Client that contains loading, error, and data properties - * you can use to render your UI. - * - * @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options; - * - * @example - * const { data, loading, error } = useListRepositoriesQuery({ - * variables: { - * q: // value for 'q' - * installed: // value for 'installed' - * first: // value for 'first' - * provider: // value for 'provider' - * }, - * }); - */ -export function useListRepositoriesQuery(baseOptions?: Apollo.QueryHookOptions) { - const options = {...defaultOptions, ...baseOptions} - return Apollo.useQuery(ListRepositoriesDocument, options); - } -export function useListRepositoriesLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions) { - const options = {...defaultOptions, ...baseOptions} - return Apollo.useLazyQuery(ListRepositoriesDocument, options); - } -export type ListRepositoriesQueryHookResult = ReturnType; -export type ListRepositoriesLazyQueryHookResult = ReturnType; -export type ListRepositoriesQueryResult = Apollo.QueryResult; -export const ScaffoldsDocument = gql` - query Scaffolds($app: String!, $pub: String!, $cat: Category!, $ing: Boolean, $pg: Boolean) { - scaffold(application: $app, publisher: $pub, category: $cat, ingress: $ing, postgres: $pg) { - path - content - } -} - `; - -/** - * __useScaffoldsQuery__ - * - * To run a query within a React component, call `useScaffoldsQuery` and pass it any options that fit your needs. - * When your component renders, `useScaffoldsQuery` returns an object from Apollo Client that contains loading, error, and data properties - * you can use to render your UI. - * - * @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options; - * - * @example - * const { data, loading, error } = useScaffoldsQuery({ - * variables: { - * app: // value for 'app' - * pub: // value for 'pub' - * cat: // value for 'cat' - * ing: // value for 'ing' - * pg: // value for 'pg' - * }, - * }); - */ -export function useScaffoldsQuery(baseOptions: Apollo.QueryHookOptions) { - const options = {...defaultOptions, ...baseOptions} - return Apollo.useQuery(ScaffoldsDocument, options); - } -export function useScaffoldsLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions) { - const options = {...defaultOptions, ...baseOptions} - return Apollo.useLazyQuery(ScaffoldsDocument, options); - } -export type ScaffoldsQueryHookResult = ReturnType; -export type ScaffoldsLazyQueryHookResult = ReturnType; -export type ScaffoldsQueryResult = Apollo.QueryResult; -export const DeleteRepositoryDocument = gql` - mutation DeleteRepository($id: ID!) { - deleteRepository(repositoryId: $id) { - id - } -} - `; -export type DeleteRepositoryMutationFn = Apollo.MutationFunction; - -/** - * __useDeleteRepositoryMutation__ - * - * To run a mutation, you first call `useDeleteRepositoryMutation` within a React component and pass it any options that fit your needs. - * When your component renders, `useDeleteRepositoryMutation` returns a tuple that includes: - * - A mutate function that you can call at any time to execute the mutation - * - An object with fields that represent the current status of the mutation's execution - * - * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2; - * - * @example - * const [deleteRepositoryMutation, { data, loading, error }] = useDeleteRepositoryMutation({ - * variables: { - * id: // value for 'id' - * }, - * }); - */ -export function useDeleteRepositoryMutation(baseOptions?: Apollo.MutationHookOptions) { - const options = {...defaultOptions, ...baseOptions} - return Apollo.useMutation(DeleteRepositoryDocument, options); - } -export type DeleteRepositoryMutationHookResult = ReturnType; -export type DeleteRepositoryMutationResult = Apollo.MutationResult; -export type DeleteRepositoryMutationOptions = Apollo.BaseMutationOptions; -export const GetTfProvidersDocument = gql` - query GetTfProviders { - terraformProviders -} - `; - -/** - * __useGetTfProvidersQuery__ - * - * To run a query within a React component, call `useGetTfProvidersQuery` and pass it any options that fit your needs. - * When your component renders, `useGetTfProvidersQuery` returns an object from Apollo Client that contains loading, error, and data properties - * you can use to render your UI. - * - * @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options; - * - * @example - * const { data, loading, error } = useGetTfProvidersQuery({ - * variables: { - * }, - * }); - */ -export function useGetTfProvidersQuery(baseOptions?: Apollo.QueryHookOptions) { - const options = {...defaultOptions, ...baseOptions} - return Apollo.useQuery(GetTfProvidersDocument, options); - } -export function useGetTfProvidersLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions) { - const options = {...defaultOptions, ...baseOptions} - return Apollo.useLazyQuery(GetTfProvidersDocument, options); - } -export type GetTfProvidersQueryHookResult = ReturnType; -export type GetTfProvidersLazyQueryHookResult = ReturnType; -export type GetTfProvidersQueryResult = Apollo.QueryResult; -export const GetTfProviderScaffoldDocument = gql` - query GetTfProviderScaffold($name: Provider!, $vsn: String) { - terraformProvider(name: $name, vsn: $vsn) { - name - content - } -} - `; - -/** - * __useGetTfProviderScaffoldQuery__ - * - * To run a query within a React component, call `useGetTfProviderScaffoldQuery` and pass it any options that fit your needs. - * When your component renders, `useGetTfProviderScaffoldQuery` returns an object from Apollo Client that contains loading, error, and data properties - * you can use to render your UI. - * - * @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options; - * - * @example - * const { data, loading, error } = useGetTfProviderScaffoldQuery({ - * variables: { - * name: // value for 'name' - * vsn: // value for 'vsn' - * }, - * }); - */ -export function useGetTfProviderScaffoldQuery(baseOptions: Apollo.QueryHookOptions) { - const options = {...defaultOptions, ...baseOptions} - return Apollo.useQuery(GetTfProviderScaffoldDocument, options); - } -export function useGetTfProviderScaffoldLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions) { - const options = {...defaultOptions, ...baseOptions} - return Apollo.useLazyQuery(GetTfProviderScaffoldDocument, options); - } -export type GetTfProviderScaffoldQueryHookResult = ReturnType; -export type GetTfProviderScaffoldLazyQueryHookResult = ReturnType; -export type GetTfProviderScaffoldQueryResult = Apollo.QueryResult; -export const GetShellDocument = gql` - query GetShell { - shell { - ...CloudShell - } -} - ${CloudShellFragmentDoc}`; - -/** - * __useGetShellQuery__ - * - * To run a query within a React component, call `useGetShellQuery` and pass it any options that fit your needs. - * When your component renders, `useGetShellQuery` returns an object from Apollo Client that contains loading, error, and data properties - * you can use to render your UI. - * - * @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options; - * - * @example - * const { data, loading, error } = useGetShellQuery({ - * variables: { - * }, - * }); - */ -export function useGetShellQuery(baseOptions?: Apollo.QueryHookOptions) { - const options = {...defaultOptions, ...baseOptions} - return Apollo.useQuery(GetShellDocument, options); - } -export function useGetShellLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions) { - const options = {...defaultOptions, ...baseOptions} - return Apollo.useLazyQuery(GetShellDocument, options); - } -export type GetShellQueryHookResult = ReturnType; -export type GetShellLazyQueryHookResult = ReturnType; -export type GetShellQueryResult = Apollo.QueryResult; -export const DeleteShellDocument = gql` - mutation DeleteShell { - deleteShell { - ...CloudShell - } -} - ${CloudShellFragmentDoc}`; -export type DeleteShellMutationFn = Apollo.MutationFunction; - -/** - * __useDeleteShellMutation__ - * - * To run a mutation, you first call `useDeleteShellMutation` within a React component and pass it any options that fit your needs. - * When your component renders, `useDeleteShellMutation` returns a tuple that includes: - * - A mutate function that you can call at any time to execute the mutation - * - An object with fields that represent the current status of the mutation's execution - * - * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2; - * - * @example - * const [deleteShellMutation, { data, loading, error }] = useDeleteShellMutation({ - * variables: { - * }, - * }); - */ -export function useDeleteShellMutation(baseOptions?: Apollo.MutationHookOptions) { - const options = {...defaultOptions, ...baseOptions} - return Apollo.useMutation(DeleteShellDocument, options); - } -export type DeleteShellMutationHookResult = ReturnType; -export type DeleteShellMutationResult = Apollo.MutationResult; -export type DeleteShellMutationOptions = Apollo.BaseMutationOptions; -export const GetTerraformDocument = gql` - query GetTerraform($id: ID!) { - terraform(repositoryId: $id, first: 100) { - edges { - node { - ...Terraform - } - } - } -} - ${TerraformFragmentDoc}`; - -/** - * __useGetTerraformQuery__ - * - * To run a query within a React component, call `useGetTerraformQuery` and pass it any options that fit your needs. - * When your component renders, `useGetTerraformQuery` returns an object from Apollo Client that contains loading, error, and data properties - * you can use to render your UI. - * - * @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options; - * - * @example - * const { data, loading, error } = useGetTerraformQuery({ - * variables: { - * id: // value for 'id' - * }, - * }); - */ -export function useGetTerraformQuery(baseOptions: Apollo.QueryHookOptions) { - const options = {...defaultOptions, ...baseOptions} - return Apollo.useQuery(GetTerraformDocument, options); - } -export function useGetTerraformLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions) { - const options = {...defaultOptions, ...baseOptions} - return Apollo.useLazyQuery(GetTerraformDocument, options); - } -export type GetTerraformQueryHookResult = ReturnType; -export type GetTerraformLazyQueryHookResult = ReturnType; -export type GetTerraformQueryResult = Apollo.QueryResult; -export const GetTerraformInstallationsDocument = gql` - query GetTerraformInstallations($id: ID!) { - terraformInstallations(repositoryId: $id, first: 100) { - edges { - node { - ...TerraformInstallation - } - } - } -} - ${TerraformInstallationFragmentDoc}`; - -/** - * __useGetTerraformInstallationsQuery__ - * - * To run a query within a React component, call `useGetTerraformInstallationsQuery` and pass it any options that fit your needs. - * When your component renders, `useGetTerraformInstallationsQuery` returns an object from Apollo Client that contains loading, error, and data properties - * you can use to render your UI. - * - * @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options; - * - * @example - * const { data, loading, error } = useGetTerraformInstallationsQuery({ - * variables: { - * id: // value for 'id' - * }, - * }); - */ -export function useGetTerraformInstallationsQuery(baseOptions: Apollo.QueryHookOptions) { - const options = {...defaultOptions, ...baseOptions} - return Apollo.useQuery(GetTerraformInstallationsDocument, options); - } -export function useGetTerraformInstallationsLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions) { - const options = {...defaultOptions, ...baseOptions} - return Apollo.useLazyQuery(GetTerraformInstallationsDocument, options); - } -export type GetTerraformInstallationsQueryHookResult = ReturnType; -export type GetTerraformInstallationsLazyQueryHookResult = ReturnType; -export type GetTerraformInstallationsQueryResult = Apollo.QueryResult; -export const UploadTerraformDocument = gql` - mutation UploadTerraform($repoName: String!, $name: String!, $uploadOrUrl: UploadOrUrl!) { - uploadTerraform(repositoryName: $repoName, name: $name, attributes: {name: $name, package: $uploadOrUrl}) { - ...Terraform - } -} - ${TerraformFragmentDoc}`; -export type UploadTerraformMutationFn = Apollo.MutationFunction; - -/** - * __useUploadTerraformMutation__ - * - * To run a mutation, you first call `useUploadTerraformMutation` within a React component and pass it any options that fit your needs. - * When your component renders, `useUploadTerraformMutation` returns a tuple that includes: - * - A mutate function that you can call at any time to execute the mutation - * - An object with fields that represent the current status of the mutation's execution - * - * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2; - * - * @example - * const [uploadTerraformMutation, { data, loading, error }] = useUploadTerraformMutation({ - * variables: { - * repoName: // value for 'repoName' - * name: // value for 'name' - * uploadOrUrl: // value for 'uploadOrUrl' - * }, - * }); - */ -export function useUploadTerraformMutation(baseOptions?: Apollo.MutationHookOptions) { - const options = {...defaultOptions, ...baseOptions} - return Apollo.useMutation(UploadTerraformDocument, options); - } -export type UploadTerraformMutationHookResult = ReturnType; -export type UploadTerraformMutationResult = Apollo.MutationResult; -export type UploadTerraformMutationOptions = Apollo.BaseMutationOptions; -export const UninstallTerraformDocument = gql` - mutation UninstallTerraform($id: ID!) { - uninstallTerraform(id: $id) { - id - } -} - `; -export type UninstallTerraformMutationFn = Apollo.MutationFunction; - -/** - * __useUninstallTerraformMutation__ - * - * To run a mutation, you first call `useUninstallTerraformMutation` within a React component and pass it any options that fit your needs. - * When your component renders, `useUninstallTerraformMutation` returns a tuple that includes: - * - A mutate function that you can call at any time to execute the mutation - * - An object with fields that represent the current status of the mutation's execution - * - * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2; - * - * @example - * const [uninstallTerraformMutation, { data, loading, error }] = useUninstallTerraformMutation({ - * variables: { - * id: // value for 'id' - * }, - * }); - */ -export function useUninstallTerraformMutation(baseOptions?: Apollo.MutationHookOptions) { - const options = {...defaultOptions, ...baseOptions} - return Apollo.useMutation(UninstallTerraformDocument, options); - } -export type UninstallTerraformMutationHookResult = ReturnType; -export type UninstallTerraformMutationResult = Apollo.MutationResult; -export type UninstallTerraformMutationOptions = Apollo.BaseMutationOptions; -export const CreateTestDocument = gql` - mutation CreateTest($name: String!, $attrs: TestAttributes!) { - createTest(name: $name, attributes: $attrs) { - ...Test - } -} - ${TestFragmentDoc}`; -export type CreateTestMutationFn = Apollo.MutationFunction; - -/** - * __useCreateTestMutation__ - * - * To run a mutation, you first call `useCreateTestMutation` within a React component and pass it any options that fit your needs. - * When your component renders, `useCreateTestMutation` returns a tuple that includes: - * - A mutate function that you can call at any time to execute the mutation - * - An object with fields that represent the current status of the mutation's execution - * - * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2; - * - * @example - * const [createTestMutation, { data, loading, error }] = useCreateTestMutation({ - * variables: { - * name: // value for 'name' - * attrs: // value for 'attrs' - * }, - * }); - */ -export function useCreateTestMutation(baseOptions?: Apollo.MutationHookOptions) { - const options = {...defaultOptions, ...baseOptions} - return Apollo.useMutation(CreateTestDocument, options); - } -export type CreateTestMutationHookResult = ReturnType; -export type CreateTestMutationResult = Apollo.MutationResult; -export type CreateTestMutationOptions = Apollo.BaseMutationOptions; -export const UpdateTestDocument = gql` - mutation UpdateTest($id: ID!, $attrs: TestAttributes!) { - updateTest(id: $id, attributes: $attrs) { - ...Test - } -} - ${TestFragmentDoc}`; -export type UpdateTestMutationFn = Apollo.MutationFunction; - -/** - * __useUpdateTestMutation__ - * - * To run a mutation, you first call `useUpdateTestMutation` within a React component and pass it any options that fit your needs. - * When your component renders, `useUpdateTestMutation` returns a tuple that includes: - * - A mutate function that you can call at any time to execute the mutation - * - An object with fields that represent the current status of the mutation's execution - * - * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2; - * - * @example - * const [updateTestMutation, { data, loading, error }] = useUpdateTestMutation({ - * variables: { - * id: // value for 'id' - * attrs: // value for 'attrs' - * }, - * }); - */ -export function useUpdateTestMutation(baseOptions?: Apollo.MutationHookOptions) { - const options = {...defaultOptions, ...baseOptions} - return Apollo.useMutation(UpdateTestDocument, options); - } -export type UpdateTestMutationHookResult = ReturnType; -export type UpdateTestMutationResult = Apollo.MutationResult; -export type UpdateTestMutationOptions = Apollo.BaseMutationOptions; -export const UpdateStepDocument = gql` - mutation UpdateStep($id: ID!, $logs: UploadOrUrl!) { - updateStep(id: $id, attributes: {logs: $logs}) { - id - } -} - `; -export type UpdateStepMutationFn = Apollo.MutationFunction; - -/** - * __useUpdateStepMutation__ - * - * To run a mutation, you first call `useUpdateStepMutation` within a React component and pass it any options that fit your needs. - * When your component renders, `useUpdateStepMutation` returns a tuple that includes: - * - A mutate function that you can call at any time to execute the mutation - * - An object with fields that represent the current status of the mutation's execution - * - * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2; - * - * @example - * const [updateStepMutation, { data, loading, error }] = useUpdateStepMutation({ - * variables: { - * id: // value for 'id' - * logs: // value for 'logs' - * }, - * }); - */ -export function useUpdateStepMutation(baseOptions?: Apollo.MutationHookOptions) { - const options = {...defaultOptions, ...baseOptions} - return Apollo.useMutation(UpdateStepDocument, options); - } -export type UpdateStepMutationHookResult = ReturnType; -export type UpdateStepMutationResult = Apollo.MutationResult; -export type UpdateStepMutationOptions = Apollo.BaseMutationOptions; -export const PublishLogsDocument = gql` - mutation PublishLogs($id: ID!, $logs: String!) { - publishLogs(id: $id, logs: $logs) { - id - } -} - `; -export type PublishLogsMutationFn = Apollo.MutationFunction; - -/** - * __usePublishLogsMutation__ - * - * To run a mutation, you first call `usePublishLogsMutation` within a React component and pass it any options that fit your needs. - * When your component renders, `usePublishLogsMutation` returns a tuple that includes: - * - A mutate function that you can call at any time to execute the mutation - * - An object with fields that represent the current status of the mutation's execution - * - * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2; - * - * @example - * const [publishLogsMutation, { data, loading, error }] = usePublishLogsMutation({ - * variables: { - * id: // value for 'id' - * logs: // value for 'logs' - * }, - * }); - */ -export function usePublishLogsMutation(baseOptions?: Apollo.MutationHookOptions) { - const options = {...defaultOptions, ...baseOptions} - return Apollo.useMutation(PublishLogsDocument, options); - } -export type PublishLogsMutationHookResult = ReturnType; -export type PublishLogsMutationResult = Apollo.MutationResult; -export type PublishLogsMutationOptions = Apollo.BaseMutationOptions; -export const MeDocument = gql` - query Me { - me { - ...User - loginMethod - hasInstallations - account { - ...Account - rootUser { - id - name - email - } - domainMappings { - id - domain - enableSso - } - } - publisher { - ...Publisher - billingAccountId - } - boundRoles { - ...Role - } - } - configuration { - stripeConnectId - stripePublishableKey - registry - gitCommit - } -} - ${UserFragmentDoc} -${AccountFragmentDoc} -${PublisherFragmentDoc} -${RoleFragmentDoc}`; - -/** - * __useMeQuery__ - * - * To run a query within a React component, call `useMeQuery` and pass it any options that fit your needs. - * When your component renders, `useMeQuery` returns an object from Apollo Client that contains loading, error, and data properties - * you can use to render your UI. - * - * @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options; - * - * @example - * const { data, loading, error } = useMeQuery({ - * variables: { - * }, - * }); - */ -export function useMeQuery(baseOptions?: Apollo.QueryHookOptions) { - const options = {...defaultOptions, ...baseOptions} - return Apollo.useQuery(MeDocument, options); - } -export function useMeLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions) { - const options = {...defaultOptions, ...baseOptions} - return Apollo.useLazyQuery(MeDocument, options); - } -export type MeQueryHookResult = ReturnType; -export type MeLazyQueryHookResult = ReturnType; -export type MeQueryResult = Apollo.QueryResult; -export const GetLoginMethodDocument = gql` - query GetLoginMethod($email: String!) { - loginMethod(email: $email) { - loginMethod - token - } -} - `; - -/** - * __useGetLoginMethodQuery__ - * - * To run a query within a React component, call `useGetLoginMethodQuery` and pass it any options that fit your needs. - * When your component renders, `useGetLoginMethodQuery` returns an object from Apollo Client that contains loading, error, and data properties - * you can use to render your UI. - * - * @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options; - * - * @example - * const { data, loading, error } = useGetLoginMethodQuery({ - * variables: { - * email: // value for 'email' - * }, - * }); - */ -export function useGetLoginMethodQuery(baseOptions: Apollo.QueryHookOptions) { - const options = {...defaultOptions, ...baseOptions} - return Apollo.useQuery(GetLoginMethodDocument, options); - } -export function useGetLoginMethodLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions) { - const options = {...defaultOptions, ...baseOptions} - return Apollo.useLazyQuery(GetLoginMethodDocument, options); - } -export type GetLoginMethodQueryHookResult = ReturnType; -export type GetLoginMethodLazyQueryHookResult = ReturnType; -export type GetLoginMethodQueryResult = Apollo.QueryResult; -export const ListTokensDocument = gql` - query ListTokens { - tokens(first: 3) { - edges { - node { - token - } - } - } -} - `; - -/** - * __useListTokensQuery__ - * - * To run a query within a React component, call `useListTokensQuery` and pass it any options that fit your needs. - * When your component renders, `useListTokensQuery` returns an object from Apollo Client that contains loading, error, and data properties - * you can use to render your UI. - * - * @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options; - * - * @example - * const { data, loading, error } = useListTokensQuery({ - * variables: { - * }, - * }); - */ -export function useListTokensQuery(baseOptions?: Apollo.QueryHookOptions) { - const options = {...defaultOptions, ...baseOptions} - return Apollo.useQuery(ListTokensDocument, options); - } -export function useListTokensLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions) { - const options = {...defaultOptions, ...baseOptions} - return Apollo.useLazyQuery(ListTokensDocument, options); - } -export type ListTokensQueryHookResult = ReturnType; -export type ListTokensLazyQueryHookResult = ReturnType; -export type ListTokensQueryResult = Apollo.QueryResult; -export const ListKeysDocument = gql` - query ListKeys($emails: [String]) { - publicKeys(emails: $emails, first: 1000) { - edges { - node { - ...PublicKey - } - } - } -} - ${PublicKeyFragmentDoc}`; - -/** - * __useListKeysQuery__ - * - * To run a query within a React component, call `useListKeysQuery` and pass it any options that fit your needs. - * When your component renders, `useListKeysQuery` returns an object from Apollo Client that contains loading, error, and data properties - * you can use to render your UI. - * - * @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options; - * - * @example - * const { data, loading, error } = useListKeysQuery({ - * variables: { - * emails: // value for 'emails' - * }, - * }); - */ -export function useListKeysQuery(baseOptions?: Apollo.QueryHookOptions) { - const options = {...defaultOptions, ...baseOptions} - return Apollo.useQuery(ListKeysDocument, options); - } -export function useListKeysLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions) { - const options = {...defaultOptions, ...baseOptions} - return Apollo.useLazyQuery(ListKeysDocument, options); - } -export type ListKeysQueryHookResult = ReturnType; -export type ListKeysLazyQueryHookResult = ReturnType; -export type ListKeysQueryResult = Apollo.QueryResult; -export const GetEabCredentialDocument = gql` - query GetEabCredential($cluster: String!, $provider: Provider!) { - eabCredential(cluster: $cluster, provider: $provider) { - ...EabCredential - } -} - ${EabCredentialFragmentDoc}`; - -/** - * __useGetEabCredentialQuery__ - * - * To run a query within a React component, call `useGetEabCredentialQuery` and pass it any options that fit your needs. - * When your component renders, `useGetEabCredentialQuery` returns an object from Apollo Client that contains loading, error, and data properties - * you can use to render your UI. - * - * @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options; - * - * @example - * const { data, loading, error } = useGetEabCredentialQuery({ - * variables: { - * cluster: // value for 'cluster' - * provider: // value for 'provider' - * }, - * }); - */ -export function useGetEabCredentialQuery(baseOptions: Apollo.QueryHookOptions) { - const options = {...defaultOptions, ...baseOptions} - return Apollo.useQuery(GetEabCredentialDocument, options); - } -export function useGetEabCredentialLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions) { - const options = {...defaultOptions, ...baseOptions} - return Apollo.useLazyQuery(GetEabCredentialDocument, options); - } -export type GetEabCredentialQueryHookResult = ReturnType; -export type GetEabCredentialLazyQueryHookResult = ReturnType; -export type GetEabCredentialQueryResult = Apollo.QueryResult; -export const DevLoginDocument = gql` - mutation DevLogin { - deviceLogin { - loginUrl - deviceToken - } -} - `; -export type DevLoginMutationFn = Apollo.MutationFunction; - -/** - * __useDevLoginMutation__ - * - * To run a mutation, you first call `useDevLoginMutation` within a React component and pass it any options that fit your needs. - * When your component renders, `useDevLoginMutation` returns a tuple that includes: - * - A mutate function that you can call at any time to execute the mutation - * - An object with fields that represent the current status of the mutation's execution - * - * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2; - * - * @example - * const [devLoginMutation, { data, loading, error }] = useDevLoginMutation({ - * variables: { - * }, - * }); - */ -export function useDevLoginMutation(baseOptions?: Apollo.MutationHookOptions) { - const options = {...defaultOptions, ...baseOptions} - return Apollo.useMutation(DevLoginDocument, options); - } -export type DevLoginMutationHookResult = ReturnType; -export type DevLoginMutationResult = Apollo.MutationResult; -export type DevLoginMutationOptions = Apollo.BaseMutationOptions; -export const LoginDocument = gql` - mutation Login($email: String!, $password: String!, $deviceToken: String) { - login(email: $email, password: $password, deviceToken: $deviceToken) { - jwt - } -} - `; -export type LoginMutationFn = Apollo.MutationFunction; - -/** - * __useLoginMutation__ - * - * To run a mutation, you first call `useLoginMutation` within a React component and pass it any options that fit your needs. - * When your component renders, `useLoginMutation` returns a tuple that includes: - * - A mutate function that you can call at any time to execute the mutation - * - An object with fields that represent the current status of the mutation's execution - * - * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2; - * - * @example - * const [loginMutation, { data, loading, error }] = useLoginMutation({ - * variables: { - * email: // value for 'email' - * password: // value for 'password' - * deviceToken: // value for 'deviceToken' - * }, - * }); - */ -export function useLoginMutation(baseOptions?: Apollo.MutationHookOptions) { - const options = {...defaultOptions, ...baseOptions} - return Apollo.useMutation(LoginDocument, options); - } -export type LoginMutationHookResult = ReturnType; -export type LoginMutationResult = Apollo.MutationResult; -export type LoginMutationOptions = Apollo.BaseMutationOptions; -export const ImpersonateServiceAccountDocument = gql` - mutation ImpersonateServiceAccount($email: String) { - impersonateServiceAccount(email: $email) { - jwt - email - } -} - `; -export type ImpersonateServiceAccountMutationFn = Apollo.MutationFunction; - -/** - * __useImpersonateServiceAccountMutation__ - * - * To run a mutation, you first call `useImpersonateServiceAccountMutation` within a React component and pass it any options that fit your needs. - * When your component renders, `useImpersonateServiceAccountMutation` returns a tuple that includes: - * - A mutate function that you can call at any time to execute the mutation - * - An object with fields that represent the current status of the mutation's execution - * - * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2; - * - * @example - * const [impersonateServiceAccountMutation, { data, loading, error }] = useImpersonateServiceAccountMutation({ - * variables: { - * email: // value for 'email' - * }, - * }); - */ -export function useImpersonateServiceAccountMutation(baseOptions?: Apollo.MutationHookOptions) { - const options = {...defaultOptions, ...baseOptions} - return Apollo.useMutation(ImpersonateServiceAccountDocument, options); - } -export type ImpersonateServiceAccountMutationHookResult = ReturnType; -export type ImpersonateServiceAccountMutationResult = Apollo.MutationResult; -export type ImpersonateServiceAccountMutationOptions = Apollo.BaseMutationOptions; -export const CreateAccessTokenDocument = gql` - mutation CreateAccessToken { - createToken { - token - } -} - `; -export type CreateAccessTokenMutationFn = Apollo.MutationFunction; - -/** - * __useCreateAccessTokenMutation__ - * - * To run a mutation, you first call `useCreateAccessTokenMutation` within a React component and pass it any options that fit your needs. - * When your component renders, `useCreateAccessTokenMutation` returns a tuple that includes: - * - A mutate function that you can call at any time to execute the mutation - * - An object with fields that represent the current status of the mutation's execution - * - * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2; - * - * @example - * const [createAccessTokenMutation, { data, loading, error }] = useCreateAccessTokenMutation({ - * variables: { - * }, - * }); - */ -export function useCreateAccessTokenMutation(baseOptions?: Apollo.MutationHookOptions) { - const options = {...defaultOptions, ...baseOptions} - return Apollo.useMutation(CreateAccessTokenDocument, options); - } -export type CreateAccessTokenMutationHookResult = ReturnType; -export type CreateAccessTokenMutationResult = Apollo.MutationResult; -export type CreateAccessTokenMutationOptions = Apollo.BaseMutationOptions; -export const CreateKeyDocument = gql` - mutation CreateKey($key: String!, $name: String!) { - createPublicKey(attributes: {content: $key, name: $name}) { - id - } -} - `; -export type CreateKeyMutationFn = Apollo.MutationFunction; - -/** - * __useCreateKeyMutation__ - * - * To run a mutation, you first call `useCreateKeyMutation` within a React component and pass it any options that fit your needs. - * When your component renders, `useCreateKeyMutation` returns a tuple that includes: - * - A mutate function that you can call at any time to execute the mutation - * - An object with fields that represent the current status of the mutation's execution - * - * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2; - * - * @example - * const [createKeyMutation, { data, loading, error }] = useCreateKeyMutation({ - * variables: { - * key: // value for 'key' - * name: // value for 'name' - * }, - * }); - */ -export function useCreateKeyMutation(baseOptions?: Apollo.MutationHookOptions) { - const options = {...defaultOptions, ...baseOptions} - return Apollo.useMutation(CreateKeyDocument, options); - } -export type CreateKeyMutationHookResult = ReturnType; -export type CreateKeyMutationResult = Apollo.MutationResult; -export type CreateKeyMutationOptions = Apollo.BaseMutationOptions; -export const DeleteEabCredentialDocument = gql` - mutation DeleteEabCredential($cluster: String!, $provider: Provider!) { - deleteEabKey(cluster: $cluster, provider: $provider) { - id - } -} - `; -export type DeleteEabCredentialMutationFn = Apollo.MutationFunction; - -/** - * __useDeleteEabCredentialMutation__ - * - * To run a mutation, you first call `useDeleteEabCredentialMutation` within a React component and pass it any options that fit your needs. - * When your component renders, `useDeleteEabCredentialMutation` returns a tuple that includes: - * - A mutate function that you can call at any time to execute the mutation - * - An object with fields that represent the current status of the mutation's execution - * - * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2; - * - * @example - * const [deleteEabCredentialMutation, { data, loading, error }] = useDeleteEabCredentialMutation({ - * variables: { - * cluster: // value for 'cluster' - * provider: // value for 'provider' - * }, - * }); - */ -export function useDeleteEabCredentialMutation(baseOptions?: Apollo.MutationHookOptions) { - const options = {...defaultOptions, ...baseOptions} - return Apollo.useMutation(DeleteEabCredentialDocument, options); - } -export type DeleteEabCredentialMutationHookResult = ReturnType; -export type DeleteEabCredentialMutationResult = Apollo.MutationResult; -export type DeleteEabCredentialMutationOptions = Apollo.BaseMutationOptions; -export const CreateEventDocument = gql` - mutation CreateEvent($attrs: UserEventAttributes!) { - createUserEvent(attributes: $attrs) -} - `; -export type CreateEventMutationFn = Apollo.MutationFunction; - -/** - * __useCreateEventMutation__ - * - * To run a mutation, you first call `useCreateEventMutation` within a React component and pass it any options that fit your needs. - * When your component renders, `useCreateEventMutation` returns a tuple that includes: - * - A mutate function that you can call at any time to execute the mutation - * - An object with fields that represent the current status of the mutation's execution - * - * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2; - * - * @example - * const [createEventMutation, { data, loading, error }] = useCreateEventMutation({ - * variables: { - * attrs: // value for 'attrs' - * }, - * }); - */ -export function useCreateEventMutation(baseOptions?: Apollo.MutationHookOptions) { - const options = {...defaultOptions, ...baseOptions} - return Apollo.useMutation(CreateEventDocument, options); - } -export type CreateEventMutationHookResult = ReturnType; -export type CreateEventMutationResult = Apollo.MutationResult; -export type CreateEventMutationOptions = Apollo.BaseMutationOptions; -export const LoginMethodDocument = gql` - query LoginMethod($email: String!, $host: String) { - loginMethod(email: $email, host: $host) { - loginMethod - token - authorizeUrl - } -} - `; - -/** - * __useLoginMethodQuery__ - * - * To run a query within a React component, call `useLoginMethodQuery` and pass it any options that fit your needs. - * When your component renders, `useLoginMethodQuery` returns an object from Apollo Client that contains loading, error, and data properties - * you can use to render your UI. - * - * @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options; - * - * @example - * const { data, loading, error } = useLoginMethodQuery({ - * variables: { - * email: // value for 'email' - * host: // value for 'host' - * }, - * }); - */ -export function useLoginMethodQuery(baseOptions: Apollo.QueryHookOptions) { - const options = {...defaultOptions, ...baseOptions} - return Apollo.useQuery(LoginMethodDocument, options); - } -export function useLoginMethodLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions) { - const options = {...defaultOptions, ...baseOptions} - return Apollo.useLazyQuery(LoginMethodDocument, options); - } -export type LoginMethodQueryHookResult = ReturnType; -export type LoginMethodLazyQueryHookResult = ReturnType; -export type LoginMethodQueryResult = Apollo.QueryResult; -export const SignupDocument = gql` - mutation Signup($attributes: UserAttributes!, $account: AccountAttributes, $deviceToken: String) { - signup(attributes: $attributes, account: $account, deviceToken: $deviceToken) { - jwt - onboarding - } -} - `; -export type SignupMutationFn = Apollo.MutationFunction; - -/** - * __useSignupMutation__ - * - * To run a mutation, you first call `useSignupMutation` within a React component and pass it any options that fit your needs. - * When your component renders, `useSignupMutation` returns a tuple that includes: - * - A mutate function that you can call at any time to execute the mutation - * - An object with fields that represent the current status of the mutation's execution - * - * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2; - * - * @example - * const [signupMutation, { data, loading, error }] = useSignupMutation({ - * variables: { - * attributes: // value for 'attributes' - * account: // value for 'account' - * deviceToken: // value for 'deviceToken' - * }, - * }); - */ -export function useSignupMutation(baseOptions?: Apollo.MutationHookOptions) { - const options = {...defaultOptions, ...baseOptions} - return Apollo.useMutation(SignupDocument, options); - } -export type SignupMutationHookResult = ReturnType; -export type SignupMutationResult = Apollo.MutationResult; -export type SignupMutationOptions = Apollo.BaseMutationOptions; -export const PasswordlessLoginDocument = gql` - mutation PasswordlessLogin($token: String!) { - passwordlessLogin(token: $token) { - jwt - } -} - `; -export type PasswordlessLoginMutationFn = Apollo.MutationFunction; - -/** - * __usePasswordlessLoginMutation__ - * - * To run a mutation, you first call `usePasswordlessLoginMutation` within a React component and pass it any options that fit your needs. - * When your component renders, `usePasswordlessLoginMutation` returns a tuple that includes: - * - A mutate function that you can call at any time to execute the mutation - * - An object with fields that represent the current status of the mutation's execution - * - * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2; - * - * @example - * const [passwordlessLoginMutation, { data, loading, error }] = usePasswordlessLoginMutation({ - * variables: { - * token: // value for 'token' - * }, - * }); - */ -export function usePasswordlessLoginMutation(baseOptions?: Apollo.MutationHookOptions) { - const options = {...defaultOptions, ...baseOptions} - return Apollo.useMutation(PasswordlessLoginDocument, options); - } -export type PasswordlessLoginMutationHookResult = ReturnType; -export type PasswordlessLoginMutationResult = Apollo.MutationResult; -export type PasswordlessLoginMutationOptions = Apollo.BaseMutationOptions; -export const PollLoginTokenDocument = gql` - mutation PollLoginToken($token: String!, $deviceToken: String) { - loginToken(token: $token, deviceToken: $deviceToken) { - jwt - } -} - `; -export type PollLoginTokenMutationFn = Apollo.MutationFunction; - -/** - * __usePollLoginTokenMutation__ - * - * To run a mutation, you first call `usePollLoginTokenMutation` within a React component and pass it any options that fit your needs. - * When your component renders, `usePollLoginTokenMutation` returns a tuple that includes: - * - A mutate function that you can call at any time to execute the mutation - * - An object with fields that represent the current status of the mutation's execution - * - * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2; - * - * @example - * const [pollLoginTokenMutation, { data, loading, error }] = usePollLoginTokenMutation({ - * variables: { - * token: // value for 'token' - * deviceToken: // value for 'deviceToken' - * }, - * }); - */ -export function usePollLoginTokenMutation(baseOptions?: Apollo.MutationHookOptions) { - const options = {...defaultOptions, ...baseOptions} - return Apollo.useMutation(PollLoginTokenDocument, options); - } -export type PollLoginTokenMutationHookResult = ReturnType; -export type PollLoginTokenMutationResult = Apollo.MutationResult; -export type PollLoginTokenMutationOptions = Apollo.BaseMutationOptions; -export const OauthUrlsDocument = gql` - query OauthUrls($host: String) { - oauthUrls(host: $host) { - provider - authorizeUrl - } -} - `; - -/** - * __useOauthUrlsQuery__ - * - * To run a query within a React component, call `useOauthUrlsQuery` and pass it any options that fit your needs. - * When your component renders, `useOauthUrlsQuery` returns an object from Apollo Client that contains loading, error, and data properties - * you can use to render your UI. - * - * @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options; - * - * @example - * const { data, loading, error } = useOauthUrlsQuery({ - * variables: { - * host: // value for 'host' - * }, - * }); - */ -export function useOauthUrlsQuery(baseOptions?: Apollo.QueryHookOptions) { - const options = {...defaultOptions, ...baseOptions} - return Apollo.useQuery(OauthUrlsDocument, options); - } -export function useOauthUrlsLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions) { - const options = {...defaultOptions, ...baseOptions} - return Apollo.useLazyQuery(OauthUrlsDocument, options); - } -export type OauthUrlsQueryHookResult = ReturnType; -export type OauthUrlsLazyQueryHookResult = ReturnType; -export type OauthUrlsQueryResult = Apollo.QueryResult; -export const AcceptLoginDocument = gql` - mutation AcceptLogin($challenge: String!) { - acceptLogin(challenge: $challenge) { - redirectTo - } -} - `; -export type AcceptLoginMutationFn = Apollo.MutationFunction; - -/** - * __useAcceptLoginMutation__ - * - * To run a mutation, you first call `useAcceptLoginMutation` within a React component and pass it any options that fit your needs. - * When your component renders, `useAcceptLoginMutation` returns a tuple that includes: - * - A mutate function that you can call at any time to execute the mutation - * - An object with fields that represent the current status of the mutation's execution - * - * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2; - * - * @example - * const [acceptLoginMutation, { data, loading, error }] = useAcceptLoginMutation({ - * variables: { - * challenge: // value for 'challenge' - * }, - * }); - */ -export function useAcceptLoginMutation(baseOptions?: Apollo.MutationHookOptions) { - const options = {...defaultOptions, ...baseOptions} - return Apollo.useMutation(AcceptLoginDocument, options); - } -export type AcceptLoginMutationHookResult = ReturnType; -export type AcceptLoginMutationResult = Apollo.MutationResult; -export type AcceptLoginMutationOptions = Apollo.BaseMutationOptions; -export const CreateResetTokenDocument = gql` - mutation CreateResetToken($attributes: ResetTokenAttributes!) { - createResetToken(attributes: $attributes) -} - `; -export type CreateResetTokenMutationFn = Apollo.MutationFunction; - -/** - * __useCreateResetTokenMutation__ - * - * To run a mutation, you first call `useCreateResetTokenMutation` within a React component and pass it any options that fit your needs. - * When your component renders, `useCreateResetTokenMutation` returns a tuple that includes: - * - A mutate function that you can call at any time to execute the mutation - * - An object with fields that represent the current status of the mutation's execution - * - * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2; - * - * @example - * const [createResetTokenMutation, { data, loading, error }] = useCreateResetTokenMutation({ - * variables: { - * attributes: // value for 'attributes' - * }, - * }); - */ -export function useCreateResetTokenMutation(baseOptions?: Apollo.MutationHookOptions) { - const options = {...defaultOptions, ...baseOptions} - return Apollo.useMutation(CreateResetTokenDocument, options); - } -export type CreateResetTokenMutationHookResult = ReturnType; -export type CreateResetTokenMutationResult = Apollo.MutationResult; -export type CreateResetTokenMutationOptions = Apollo.BaseMutationOptions; -export const RealizeResetTokenDocument = gql` - mutation RealizeResetToken($id: ID!, $attributes: ResetTokenRealization!) { - realizeResetToken(id: $id, attributes: $attributes) -} - `; -export type RealizeResetTokenMutationFn = Apollo.MutationFunction; - -/** - * __useRealizeResetTokenMutation__ - * - * To run a mutation, you first call `useRealizeResetTokenMutation` within a React component and pass it any options that fit your needs. - * When your component renders, `useRealizeResetTokenMutation` returns a tuple that includes: - * - A mutate function that you can call at any time to execute the mutation - * - An object with fields that represent the current status of the mutation's execution - * - * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2; - * - * @example - * const [realizeResetTokenMutation, { data, loading, error }] = useRealizeResetTokenMutation({ - * variables: { - * id: // value for 'id' - * attributes: // value for 'attributes' - * }, - * }); - */ -export function useRealizeResetTokenMutation(baseOptions?: Apollo.MutationHookOptions) { - const options = {...defaultOptions, ...baseOptions} - return Apollo.useMutation(RealizeResetTokenDocument, options); - } -export type RealizeResetTokenMutationHookResult = ReturnType; -export type RealizeResetTokenMutationResult = Apollo.MutationResult; -export type RealizeResetTokenMutationOptions = Apollo.BaseMutationOptions; -export const ResetTokenDocument = gql` - query ResetToken($id: ID!) { - resetToken(id: $id) { - type - user { - ...User - } - } -} - ${UserFragmentDoc}`; - -/** - * __useResetTokenQuery__ - * - * To run a query within a React component, call `useResetTokenQuery` and pass it any options that fit your needs. - * When your component renders, `useResetTokenQuery` returns an object from Apollo Client that contains loading, error, and data properties - * you can use to render your UI. - * - * @param baseOptions options that will be passed into the query, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options; - * - * @example - * const { data, loading, error } = useResetTokenQuery({ - * variables: { - * id: // value for 'id' - * }, - * }); - */ -export function useResetTokenQuery(baseOptions: Apollo.QueryHookOptions) { - const options = {...defaultOptions, ...baseOptions} - return Apollo.useQuery(ResetTokenDocument, options); - } -export function useResetTokenLazyQuery(baseOptions?: Apollo.LazyQueryHookOptions) { - const options = {...defaultOptions, ...baseOptions} - return Apollo.useLazyQuery(ResetTokenDocument, options); - } -export type ResetTokenQueryHookResult = ReturnType; -export type ResetTokenLazyQueryHookResult = ReturnType; -export type ResetTokenQueryResult = Apollo.QueryResult; -export const UpdateVersionDocument = gql` - mutation UpdateVersion($spec: VersionSpec, $attributes: VersionAttributes!) { - updateVersion(spec: $spec, attributes: $attributes) { - id - } -} - `; -export type UpdateVersionMutationFn = Apollo.MutationFunction; - -/** - * __useUpdateVersionMutation__ - * - * To run a mutation, you first call `useUpdateVersionMutation` within a React component and pass it any options that fit your needs. - * When your component renders, `useUpdateVersionMutation` returns a tuple that includes: - * - A mutate function that you can call at any time to execute the mutation - * - An object with fields that represent the current status of the mutation's execution - * - * @param baseOptions options that will be passed into the mutation, supported options are listed on: https://www.apollographql.com/docs/react/api/react-hooks/#options-2; - * - * @example - * const [updateVersionMutation, { data, loading, error }] = useUpdateVersionMutation({ - * variables: { - * spec: // value for 'spec' - * attributes: // value for 'attributes' - * }, - * }); - */ -export function useUpdateVersionMutation(baseOptions?: Apollo.MutationHookOptions) { - const options = {...defaultOptions, ...baseOptions} - return Apollo.useMutation(UpdateVersionDocument, options); - } -export type UpdateVersionMutationHookResult = ReturnType; -export type UpdateVersionMutationResult = Apollo.MutationResult; -export type UpdateVersionMutationOptions = Apollo.BaseMutationOptions; \ No newline at end of file diff --git a/pkg/ui/web/src/graphql/groups.graphql b/pkg/ui/web/src/graphql/groups.graphql deleted file mode 100644 index 1363fb51d..000000000 --- a/pkg/ui/web/src/graphql/groups.graphql +++ /dev/null @@ -1,55 +0,0 @@ -query GroupMembers($cursor: String, $id: ID!) { - groupMembers(groupId: $id, after: $cursor, first: 20) { - pageInfo { - ...PageInfo - } - edges { - node { - ...GroupMember - } - } - } -} - -mutation CreateGroupMember($groupId: ID!, $userId: ID!) { - createGroupMember(groupId: $groupId, userId: $userId) { - ...GroupMember - } -} - -mutation DeleteGroupMember($groupId: ID!, $userId: ID!) { - deleteGroupMember(groupId: $groupId, userId: $userId) { - ...GroupMember - } -} - -mutation CreateGroup($attributes: GroupAttributes!) { - createGroup(attributes: $attributes) { - ...Group - } -} - -mutation UpdateGroup($id: ID!, $attributes: GroupAttributes!) { - updateGroup(groupId: $id, attributes: $attributes) { - ...Group - } -} - -mutation DeleteGroup($id: ID!) { - deleteGroup(groupId: $id) { - ...Group - } -} - -query Groups($q: String, $cursor: String) { - groups(q: $q, first: 20, after: $cursor) { - pageInfo { - ...PageInfo - } - edges { - node { - ...Group - } - } - } -} diff --git a/pkg/ui/web/src/graphql/incidents.graphql b/pkg/ui/web/src/graphql/incidents.graphql deleted file mode 100644 index c9b0fd620..000000000 --- a/pkg/ui/web/src/graphql/incidents.graphql +++ /dev/null @@ -1,82 +0,0 @@ -fragment Postmortem on Postmortem { - id - content - actionItems { type link } -} - -fragment Follower on Follower { - id - incident { id } - user { ...User } - preferences { message incidentUpdate mention } -} - -#TODO: not that this was changed as it needs to be unique. Whatever queries/mutations use this fragment needs to be updated -fragment SlimSubscription on SlimSubscription { - id - lineItems { items { dimension quantity } } - plan { ...Plan } -} - - -fragment ClusterInformation on ClusterInformation { - version - gitCommit - platform -} - - -fragment Incident on Incident { - id - title - description - severity - status - notificationCount - nextResponseAt - creator { ...User } - owner { ...User } - repository { ...Repo } - subscription { ...SlimSubscription } - clusterInformation { ...ClusterInformation } - tags { tag } - insertedAt -} - -fragment IncidentHistory on IncidentHistory { - id - action - changes { key prev next } - actor { ...User } - insertedAt -} - -fragment File on File { - id - blob - mediaType - contentType - filesize - filename -} - -fragment IncidentMessage on IncidentMessage { - id - text - creator { ...User } - reactions { name creator { id email } } - file { ...File } - entities { type user { ...User } text startIndex endIndex } - insertedAt -} - -fragment Notification on Notification { - id - type - msg - actor { ...User } - incident { id title repository { id name icon darkIcon } } - message { text } - repository { id name icon darkIcon } - insertedAt -} diff --git a/pkg/ui/web/src/graphql/installations.graphql b/pkg/ui/web/src/graphql/installations.graphql deleted file mode 100644 index e3a0873d9..000000000 --- a/pkg/ui/web/src/graphql/installations.graphql +++ /dev/null @@ -1,38 +0,0 @@ -fragment Installation on Installation { - id - context - license - licenseKey - acmeKeyId - acmeSecret - autoUpgrade - trackTag - repository { ...Repo } - # repository { ...Repository } - user { ...User } - oidcProvider { ...OIDCProvider } -} - -query GetInstallation($name: String) { - installation(name: $name) { - ...Installation - } -} - -query GetInstallationById($id: ID) { - installation(id: $id) { - ...Installation - } -} - -query GetInstallations($first: Int) { - installations(first: $first) { - edges { node { ...Installation } } - } -} - -mutation UpsertOidcProvider($id: ID!, $attributes: OidcAttributes!) { - upsertOidcProvider(installationId: $id, attributes: $attributes) { - id - } -} diff --git a/pkg/ui/web/src/graphql/integrations.graphql b/pkg/ui/web/src/graphql/integrations.graphql deleted file mode 100644 index 9e0d57fef..000000000 --- a/pkg/ui/web/src/graphql/integrations.graphql +++ /dev/null @@ -1,27 +0,0 @@ -fragment IntegrationWebhook on IntegrationWebhook { - id - name - url - secret - actions -} - -fragment WebhookLog on WebhookLog { - id - state - status - payload - response - insertedAt -} - -fragment OauthIntegration on OauthIntegration { - id - service - insertedAt -} - -fragment ZoomMeeting on ZoomMeeting { - joinUrl - password -} diff --git a/pkg/ui/web/src/graphql/invite.graphql b/pkg/ui/web/src/graphql/invite.graphql deleted file mode 100644 index ece3e5e40..000000000 --- a/pkg/ui/web/src/graphql/invite.graphql +++ /dev/null @@ -1,28 +0,0 @@ -mutation SignupInvite($attributes: UserAttributes!, $inviteId: String!) { - signup(attributes: $attributes, inviteId: $inviteId) { - jwt - } -} - -mutation RealizeInvite($id: String!) { - realizeInvite(id: $id) { - jwt - } -} - -query Invite($id: String!) { - invite(id: $id) { - id - email - existing - account { - ...Account - } - user { - ...User - account { - ...Account - } - } - } -} diff --git a/pkg/ui/web/src/graphql/metrics.graphql b/pkg/ui/web/src/graphql/metrics.graphql deleted file mode 100644 index 6e99c9cbf..000000000 --- a/pkg/ui/web/src/graphql/metrics.graphql +++ /dev/null @@ -1,5 +0,0 @@ -fragment Metric on Metric { - name - tags { name value } - values { time value } -} diff --git a/pkg/ui/web/src/graphql/misc.graphql b/pkg/ui/web/src/graphql/misc.graphql deleted file mode 100644 index 0ab1b1471..000000000 --- a/pkg/ui/web/src/graphql/misc.graphql +++ /dev/null @@ -1,4 +0,0 @@ -fragment PageInfo on PageInfo { - endCursor - hasNextPage -} diff --git a/pkg/ui/web/src/graphql/oauth.graphql b/pkg/ui/web/src/graphql/oauth.graphql deleted file mode 100644 index 175cee845..000000000 --- a/pkg/ui/web/src/graphql/oauth.graphql +++ /dev/null @@ -1,24 +0,0 @@ -fragment OIDCProvider on OidcProvider { - id - clientId - authMethod - clientSecret - redirectUris - bindings { - id - user { ...User } - group { ...Group } - } - configuration { - issuer - authorizationEndpoint - tokenEndpoint - jwksUri - userinfoEndpoint - } -} - -fragment OAuthInfo on OauthInfo { - provider - authorizeUrl -} diff --git a/pkg/ui/web/src/graphql/payments.graphql b/pkg/ui/web/src/graphql/payments.graphql deleted file mode 100644 index d92afd133..000000000 --- a/pkg/ui/web/src/graphql/payments.graphql +++ /dev/null @@ -1,142 +0,0 @@ -fragment Limit on Limit { - dimension - quantity -} - -fragment LineItem on LineItem { - name - dimension - cost - period - type -} - -fragment ServiceLevel on ServiceLevel { - minSeverity - maxSeverity - responseTime -} - -fragment Plan on Plan { - id - name - cost - period - serviceLevels { ...ServiceLevel } - lineItems { - included { ...Limit } - items { ...LineItem } - } - metadata { features { name description } } -} - -fragment Subscription on RepositorySubscription { - id - plan { ...Plan } - lineItems { items { ...Limit } } -} - - -fragment InvoiceItem on InvoiceItem { - amount - currency - description -} - - -fragment Invoice on Invoice { - number - amountDue - amountPaid - currency - status - createdAt - hostedInvoiceUrl - lines { ...InvoiceItem } -} - -fragment Card on Card { - id - last4 - expMonth - expYear - name - brand -} - -query Subscription { - account { - billingCustomerId - grandfatheredUntil - delinquentAt - userCount - clusterCount - availableFeatures { - userManagement - audit - } - subscription { - id - plan { - id - period - lineItems { - dimension - cost - } - } - } - billingAddress { - name - line1 - line2 - zip - state - city - country - } - } -} - -mutation UpdateAccountBilling($attributes: AccountAttributes!) { - updateAccount(attributes: $attributes) { - id - } -} - -mutation UpgradeToProfessionalPlan($planId: ID!) { - createPlatformSubscription(planId: $planId) { - id - } -} - -mutation DowngradeToFreePlanMutation { - deletePlatformSubscription { - id - } -} - -query Cards { - me { - id - cards(first: 100) { - edges { - node { - ...Card - } - } - } - } -} - -mutation CreateCard($source: String!, $address: AddressAttributes) { - createCard(source: $source, address: $address) { - id - } -} - -mutation DeleteCard($id: ID!) { - deleteCard(id: $id) { - id - } -} diff --git a/pkg/ui/web/src/graphql/recipes.graphql b/pkg/ui/web/src/graphql/recipes.graphql deleted file mode 100644 index d12aeb87f..000000000 --- a/pkg/ui/web/src/graphql/recipes.graphql +++ /dev/null @@ -1,134 +0,0 @@ -fragment Recipe on Recipe { - id - name - description - restricted - provider - tests { - type - name - message - args { name repo key } - } - repository { id name } - oidcSettings { - uriFormat - uriFormats - authMethod - domainKey - subdomain - } - recipeSections { ...RecipeSection } -} - -fragment RecipeItem on RecipeItem { - id - chart { ...Chart } - terraform { ...Terraform } - configuration { ...RecipeConfiguration } -} - -fragment RecipeSection on RecipeSection { - index - repository { - ...Repo - installation { ...Installation } - } - recipeItems { ...RecipeItem } - configuration { ...RecipeConfiguration } -} - -fragment RecipeConfiguration on RecipeConfiguration { - name - type - default - documentation - optional - placeholder - functionName - condition { field operation value } - validation { type regex message } -} - -fragment Stack on Stack { - id - name - displayName - description - featured - creator { - id - name - } - collections { - id - provider - bundles { - recipe { - repository { - ...Repo - tags { - tag - } - } - } - } - } -} - -query GetRecipe($repo: String, $name: String, $id: ID) { - recipe(repo: $repo, name: $name, id: $id) { - ...Recipe - recipeDependencies { ...Recipe } - } -} - -query ListRecipes($repositoryName: String, $repositoryId: ID, $provider: Provider) { - recipes(repositoryName: $repositoryName, provider: $provider, first: 500, repositoryId: $repositoryId) { - edges { node { ...Recipe } } - } -} - -mutation CreateRecipe($name: String!, $attributes: RecipeAttributes!) { - createRecipe(repositoryName: $name, attributes: $attributes) { - id - } -} - -mutation InstallRecipe($id: ID!) { - installRecipe(recipeId: $id, context: "{}") { - id - } -} - -mutation CreateStack($attributes: StackAttributes!) { - createStack(attributes: $attributes) { - id - } -} - -query GetStack($name: String!, $provider: Provider!) { - stack(name: $name, provider: $provider) { - ...Stack - } -} - -query ListStacks($featured: Boolean, $cursor: String) { - stacks(first: 100, after: $cursor, featured: $featured) { - edges { node { ...Stack } } - } -} - -mutation CreateQuickStack($applicationIds: [ID], $provider: Provider!) { - quickStack(repositoryIds: $applicationIds, provider: $provider) { - id - name - } -} - -mutation InstallStackShell($name: String!, $context: ContextAttributes!, $oidc: Boolean!) { - installStackShell(name: $name, context: $context, oidc: $oidc) { - id - name - } -} \ No newline at end of file diff --git a/pkg/ui/web/src/graphql/repos.graphql b/pkg/ui/web/src/graphql/repos.graphql deleted file mode 100644 index 1eb5512c3..000000000 --- a/pkg/ui/web/src/graphql/repos.graphql +++ /dev/null @@ -1,160 +0,0 @@ -fragment ApplyLock on ApplyLock { - id - lock -} - -fragment Category on CategoryInfo { - category - count -} - -fragment Repo on Repository { - id - name - notes - description - documentation - icon - darkIcon - private - trending - verified - category - oauthSettings { - uriFormat - authMethod - } - publisher { - ...Publisher - } - recipes { - name - provider - description - } -} - -fragment Repository on Repository { - id - name - notes - icon - darkIcon - description - publisher { name } - recipes { name } -} - -fragment Dependencies on Dependencies { - dependencies { - name - repo - type - version - optional - } - wait - application - providers - secrets - wirings { terraform helm } - providerWirings - outputs -} - - -fragment Integration on Integration { - id - name - icon - sourceUrl - description - tags { tag } - publisher { ...Publisher } -} - -query Repository($id: ID, $name: String) { - repository(id: $id, name: $name) { - ...Repo - editable - publicKey - secrets - artifacts { - ...Artifact - } - installation { - ...Installation - oidcProvider { - ...OIDCProvider - } - } - tags { - tag - } - readme - mainBranch - gitUrl - homepage - license { - name - url - } - documentation - community { - discord - slack - homepage - gitUrl - twitter - } - } -} - -mutation CreateResourceDefinition($name: String!, $input: ResourceDefinitionAttributes!) { - updateRepository(repositoryName: $name, attributes: {integrationResourceDefinition: $input}) { - id - } -} - -mutation CreateIntegration($name: String!, $attrs: IntegrationAttributes!) { - createIntegration(repositoryName: $name, attributes: $attrs) { id } -} - -mutation UpdateRepository($name: String!, $attrs: RepositoryAttributes!) { - updateRepository(repositoryName: $name, attributes: $attrs) { id } -} - -mutation CreateRepository($name: String!, $publisher: String!, $attributes: RepositoryAttributes!) { - upsertRepository(name: $name, publisher: $publisher, attributes: $attributes) { id } -} - -mutation AcquireLock($name: String!) { - acquireLock(repository: $name) { ...ApplyLock } -} - -mutation ReleaseLock($name: String!, $attrs: LockAttributes!) { - releaseLock(repository: $name, attributes: $attrs) { ...ApplyLock } -} - -mutation UnlockRepository($name: String!) { - unlockRepository(name: $name) -} - -query ListRepositories($q: String, $installed: Boolean, $first: Int = 100, $provider: Provider = null) { - repositories(q: $q, first: $first, installed: $installed, provider: $provider) { - edges { node { ...Repository } } - } -} - -query Scaffolds($app: String!, $pub: String!, $cat: Category!, $ing: Boolean, $pg: Boolean) { - scaffold(application: $app, publisher: $pub, category: $cat, ingress: $ing, postgres: $pg) { - path - content - } -} - -mutation DeleteRepository($id: ID!) { - deleteRepository(repositoryId: $id){ - id - } -} diff --git a/pkg/ui/web/src/graphql/scaffolds.graphql b/pkg/ui/web/src/graphql/scaffolds.graphql deleted file mode 100644 index e75fb6664..000000000 --- a/pkg/ui/web/src/graphql/scaffolds.graphql +++ /dev/null @@ -1,10 +0,0 @@ -query GetTfProviders{ - terraformProviders -} - -query GetTfProviderScaffold($name: Provider!, $vsn: String) { - terraformProvider(name: $name, vsn: $vsn) { - name - content - } -} diff --git a/pkg/ui/web/src/graphql/shells.graphql b/pkg/ui/web/src/graphql/shells.graphql deleted file mode 100644 index 80be3d275..000000000 --- a/pkg/ui/web/src/graphql/shells.graphql +++ /dev/null @@ -1,31 +0,0 @@ -fragment CloudShell on CloudShell { - id - aesKey - gitUrl - alive - provider - subdomain - cluster - status { - ready - initialized - containersReady - podScheduled - } -} - -fragment DemoProject on DemoProject { - id - projectId - credentials - ready - state -} - -query GetShell { - shell { ...CloudShell } -} - -mutation DeleteShell { - deleteShell { ...CloudShell } -} diff --git a/pkg/ui/web/src/graphql/terraforms.graphql b/pkg/ui/web/src/graphql/terraforms.graphql deleted file mode 100644 index 766efca61..000000000 --- a/pkg/ui/web/src/graphql/terraforms.graphql +++ /dev/null @@ -1,47 +0,0 @@ -fragment Terraform on Terraform { - id - name - readme - package - description - latestVersion - dependencies { ...Dependencies } - valuesTemplate - insertedAt -} - -fragment TerraformInstallation on TerraformInstallation { - id - terraform { ...Terraform } - version { ...Version } -} - -query GetTerraform($id: ID!) { - terraform(repositoryId: $id, first: 100) { - edges { - node { - ...Terraform - } - } - } -} - -query GetTerraformInstallations($id: ID!) { - terraformInstallations(repositoryId: $id, first: 100) { - edges { - node { - ...TerraformInstallation - } - } - } -} - -mutation UploadTerraform($repoName: String!, $name: String!, $uploadOrUrl: UploadOrUrl!) { - uploadTerraform(repositoryName: $repoName, name: $name, attributes: {name: $name, package: $uploadOrUrl}) { - ...Terraform - } -} - -mutation UninstallTerraform($id: ID!) { - uninstallTerraform(id: $id) { id } -} diff --git a/pkg/ui/web/src/graphql/tests.graphql b/pkg/ui/web/src/graphql/tests.graphql deleted file mode 100644 index 0a7afde48..000000000 --- a/pkg/ui/web/src/graphql/tests.graphql +++ /dev/null @@ -1,40 +0,0 @@ -fragment Step on TestStep { - id - name - status - hasLogs - description - insertedAt - updatedAt -} - - -fragment Test on Test { - id - name - promoteTag - status - insertedAt - updatedAt - steps { ...Step } -} - -mutation CreateTest($name: String!, $attrs: TestAttributes!) { - createTest(name: $name, attributes: $attrs) { - ...Test - } -} - -mutation UpdateTest($id: ID!, $attrs: TestAttributes!) { - updateTest(id: $id, attributes: $attrs) { - ...Test - } -} - -mutation UpdateStep($id: ID!, $logs: UploadOrUrl!) { - updateStep(id: $id, attributes: {logs: $logs}) { id } -} - -mutation PublishLogs($id: ID!, $logs: String!) { - publishLogs(id: $id, logs: $logs) { id } -} diff --git a/pkg/ui/web/src/graphql/upgrades.graphql b/pkg/ui/web/src/graphql/upgrades.graphql deleted file mode 100644 index 4d9feb2b5..000000000 --- a/pkg/ui/web/src/graphql/upgrades.graphql +++ /dev/null @@ -1,33 +0,0 @@ -fragment UpgradeQueue on UpgradeQueue { - id - acked - name - domain - git - pingedAt - provider -} - -fragment Rollout on Rollout { - id - event - cursor - count - status - heartbeat -} - -fragment Upgrade on Upgrade { - id - message - repository { ...Repo } - insertedAt -} - -fragment DeferredUpdate on DeferredUpdate { - id - dequeueAt - attempts - version { version } - insertedAt -} diff --git a/pkg/ui/web/src/graphql/users.graphql b/pkg/ui/web/src/graphql/users.graphql deleted file mode 100644 index 9c831d131..000000000 --- a/pkg/ui/web/src/graphql/users.graphql +++ /dev/null @@ -1,278 +0,0 @@ -fragment Account on Account { - id - name - billingCustomerId - backgroundColor -} - -fragment Group on Group { - id - name - global - description -} - -fragment User on User { - id - name - email - avatar - provider - demoing - demoed - onboarding - onboardingChecklist { dismissed status } - emailConfirmed - emailConfirmBy - backgroundColor - serviceAccount - roles { admin } -} - -fragment ImpersonationPolicy on ImpersonationPolicy { - id - bindings { - id - group { id name } - user { id name email } - } -} - -fragment GroupMember on GroupMember { - id - user { ...User } -} - -fragment Token on PersistedToken { - id - token - insertedAt -} - -fragment TokenAudit on PersistedTokenAudit { - ip - timestamp - count - country - city - latitude - longitude -} - -fragment Address on Address { - line1 - line2 - city - country - state - zip -} - -fragment Publisher on Publisher { - id - name - phone - avatar - description - backgroundColor - owner { ...User } - address { ...Address } -} - -fragment Webhook on Webhook { - id - url - secret - insertedAt -} - -fragment RoleBinding on RoleBinding { - id - user { ...User } - group { ...Group } -} - -fragment Role on Role { - id - name - description - repositories - permissions - roleBindings { ...RoleBinding } -} - -fragment PublicKey on PublicKey { - id - name - digest - insertedAt - content - user { ...User } -} - -fragment EabCredential on EabCredential { - id - keyId - hmacKey - cluster - provider - insertedAt -} - -query Me{ - me { - ...User - loginMethod - hasInstallations - account { - ...Account - rootUser { id, name, email } - domainMappings { id domain enableSso } - } - publisher { - ...Publisher - billingAccountId - } - boundRoles { ...Role } - } - configuration { - stripeConnectId - stripePublishableKey - registry - gitCommit - } -} - -query GetLoginMethod($email: String!) { - loginMethod(email: $email) { loginMethod token } -} - -query ListTokens{ - tokens(first: 3) { - edges { node { token } } - } -} - -query ListKeys($emails: [String]) { - publicKeys(emails: $emails, first: 1000) { - edges { node { ...PublicKey } } - } -} - -query GetEabCredential($cluster: String!, $provider: Provider!) { - eabCredential(cluster: $cluster, provider: $provider) { - ...EabCredential - } -} - -mutation DevLogin { - deviceLogin { loginUrl deviceToken } -} - -mutation Login($email: String!, $password: String!, $deviceToken: String) { - login(email: $email, password: $password, deviceToken: $deviceToken) { - jwt - } -} - -mutation ImpersonateServiceAccount($email: String) { - impersonateServiceAccount(email: $email) { jwt email } -} - -mutation CreateAccessToken{ - createToken { token } -} - -mutation CreateKey($key: String!, $name: String!) { - createPublicKey(attributes: {content: $key, name: $name}) { id } -} - -mutation DeleteEabCredential($cluster: String!, $provider: Provider!) { - deleteEabKey(cluster: $cluster, provider: $provider) { - id - } -} - -mutation CreateEvent($attrs: UserEventAttributes!) { - createUserEvent(attributes: $attrs) -} - -query LoginMethod($email: String!, $host: String) { - loginMethod(email: $email, host: $host) { - loginMethod - token - authorizeUrl - } -} - -mutation Signup( - $attributes: UserAttributes! - $account: AccountAttributes - $deviceToken: String -) { - signup( - attributes: $attributes - account: $account - deviceToken: $deviceToken - ) { - jwt - onboarding - } -} - -mutation PasswordlessLogin($token: String!) { - passwordlessLogin(token: $token) { - jwt - } -} - -mutation PollLoginToken($token: String!, $deviceToken: String) { - loginToken(token: $token, deviceToken: $deviceToken) { - jwt - } -} - -query OauthUrls($host: String) { - oauthUrls(host: $host) { - provider - authorizeUrl - } -} - -query LoginMethod($email: String!, $host: String) { - loginMethod(email: $email, host: $host) { - loginMethod - token - authorizeUrl - } -} - -query OauthUrls($host: String) { - oauthUrls(host: $host) { - provider - authorizeUrl - } -} - -mutation AcceptLogin($challenge: String!) { - acceptLogin(challenge: $challenge) { - redirectTo - } -} - -mutation CreateResetToken($attributes: ResetTokenAttributes!) { - createResetToken(attributes: $attributes) -} - -mutation RealizeResetToken($id: ID!, $attributes: ResetTokenRealization!) { - realizeResetToken(id: $id, attributes: $attributes) -} - -query ResetToken($id: ID!) { - resetToken(id: $id) { - type - user { - ...User - } - } -} diff --git a/pkg/ui/web/src/graphql/versions.graphql b/pkg/ui/web/src/graphql/versions.graphql deleted file mode 100644 index 62661b900..000000000 --- a/pkg/ui/web/src/graphql/versions.graphql +++ /dev/null @@ -1,23 +0,0 @@ -fragment VersionTag on VersionTag { - id - tag - version { id } -} - -fragment Version on Version { - id - helm - readme - valuesTemplate - version - insertedAt - package - crds { ...Crd } - chart { ...Chart } - terraform { id name } - dependencies { ...Dependencies } -} - -mutation UpdateVersion($spec: VersionSpec, $attributes: VersionAttributes!) { - updateVersion(spec: $spec, attributes: $attributes) { id } -} diff --git a/pkg/ui/web/src/grommet/fileInputTheme.tsx b/pkg/ui/web/src/grommet/fileInputTheme.tsx deleted file mode 100644 index 21d0fb7ad..000000000 --- a/pkg/ui/web/src/grommet/fileInputTheme.tsx +++ /dev/null @@ -1,57 +0,0 @@ -import { CloseIcon } from '@pluralsh/design-system' -import { DefaultTheme } from 'styled-components' - -export const fileInputTheme = ({ - selected = false, error = false, theme, -}: { - selected?: boolean; - error?: boolean; - theme: DefaultTheme; -}) => ({ - fileInput: { - message: { - size: 'small', - }, - hover: { - border: { - color: error - ? theme.colors['border-error'] - : selected - ? theme.colors['border-success'] - : theme.colors['border-input'], - }, - background: { - color: theme.colors['fill-one-hover'], - opacity: 1, - }, - }, - dragOver: { - border: { - color: theme.colors['border-outline-focused'], - }, - background: { - color: theme.colors['fill-one-hover'], - opacity: 1, - }, - }, - background: { - color: theme.colors['fill-one'], - opacity: 1, - }, - round: { - size: `${theme.borderRadiuses.medium}px`, - }, - border: { - size: `${theme.borderWidths.default}px`, - opacity: false, - color: error - ? theme.colors['border-error'] - : selected - ? theme.colors['border-success'] - : theme.colors['border-input'], - }, - icons: { - remove: CloseIcon, - }, - }, -}) diff --git a/pkg/ui/web/src/grommet/theme.ts b/pkg/ui/web/src/grommet/theme.ts deleted file mode 100644 index c80d88a05..000000000 --- a/pkg/ui/web/src/grommet/theme.ts +++ /dev/null @@ -1,234 +0,0 @@ -import { css } from 'styled-components' - -const boxStyle = css` - outline: none; -` - -export const PLURAL_THEME = { - 'plural-blk': '#000b11', - 'plrl-black': '#000b11', - 'tone-dark': '#01131a', - 'tone-dark-2': '#1a2b31', - 'tone-dark-3': '#2f3b41', - 'tone-medium': '#c9d1d3', - 'tone-light': '#edf1f2', - 'plrl-white': '#fff', - 'key-dark': '#001b8c', - 'key-light': '#5C77FF', - blue: '#0022b2', - 'blue-light': '#3351f2', - 'blue-light-2': '#e1ebff', - 'blue-dark': '#001b8c', - 'blue-dark-2': '#002068', - 'alt-dark': '#006e96', - 'alt-light': '#0090c4', - 'plrl-red': '#dd2c39', - 'red-dark': '#b52d31', - 'red-dark-2': '#7f0009', - 'red-light': '#ff2756', - 'red-light-2': '#ffd9df', - 'status-warning': 'orange', - green: '#008e47', - 'green-dark': '#23422b', - 'green-dark-2': '#004422', - 'green-light': '#00ed76', - 'green-light-2': '#ccffe5', - teal: '#00e5a3', - 'teal-dark': '#00b57d', - 'teal-dark-2': '#009362', - 'teal-light': '#00ffb0', - 'teal-light-2': '#ccffee', - orange: '#ef9300', - 'orange-dark': '#e88900', - 'orange-dark-2': '#b76800', - 'orange-light': '#ff9d00', - 'orange-light-2': '#ffeacc', - purple: '#960ea5', - 'purple-dark': '#830096', - 'purple-dark-2': '#650077', - 'purple-light': '#df00ff', - 'purple-light-2': '#f7ccff', - 'fill-zero': 'grey.900', - 'fill-zero-hover': 'grey.875', - 'fill-zero-selected': 'grey.825', - 'fill-one': 'grey.850', - 'fill-one-hover': 'grey.825', - 'fill-one-selected': 'grey.775', - 'fill-two': 'grey.800', - 'fill-two-hover': 'grey.775', - 'fill-two-selected': 'grey.725', - 'fill-three': 'grey.750', - 'grey.950': '#0E1015', - 'grey.900': '#171A21', - 'grey.875': '#1C2026', - 'grey.850': '#1E2229', - 'grey.825': '#23272E', - 'grey.800': '#2A2E37', - 'grey.775': '#303540', - 'grey.750': '#363B45', - 'grey.725': '#3C414D', - 'grey.700': '#434956', - 'grey.600': '#555C68', - 'grey.500': '#757D8A', - 'grey.400': '#9096A2', - 'grey.300': '#A9B0BC', - 'grey.200': '#C4CAD4', - 'grey.100': '#DEE2E8', - 'grey.50': '#E9ECF0', -} - -export const DEFAULT_COLOR_THEME = { - brand: 'key-light', - // action: '#007a5a', - action: 'key-light', - sidebar: 'plural-blk', - card: '#222732', - hover: { dark: 'fill-two-hover', light: 'tone-light' }, - sidebarActive: 'tone-dark-3', - focus: 'key-light', - progress: '#007bff', - tagMedium: 'key-light', - tagLight: 'key-light', - backgroundColor: 'sidebarBackground', - sidebarBackground: '#0d1215', - // @ts-expect-error - orange: '#d7722c', - presence: '#39E500', - link: '#3366BB', - notif: 'error', - good: '#00ac46', - low: 'orange-light', - medium: 'orange', - high: 'red-dark', - critical: 'red-dark-2', - label: 'light-2', - 'input-border': 'border', - primary: '#0639FF', - 'action-primary': '#293EFF', - background: { - light: 'transparent', - dark: 'transparent', - }, - 'background-light': { - light: '#f5f7f9', - dark: '#22293b', - }, - text: { - light: 'inherit', - dark: 'inherit', - }, - 'text-light': { - light: 'lighten(text, 15)', - dark: 'darken(text, 15)', - }, - border: { - light: '#CCCCCC', - dark: '#303340', - }, - shadow: { - light: 'rgba(0, 0, 0, 0.2)', - dark: 'rgba(64, 64, 64, 0.2)', - }, - success: '#07E5A7', - error: '#E03E43', - warning: '#EF931D', - secondary: '#222534', - 'background-middle': { - light: '#EEEEEE', - dark: '#222534', - }, - 'background-top': { - light: 'white', - dark: '#323643', - }, - 'text-strong': { - light: '#000000', - dark: 'white', - }, - 'text-weak': { - light: '#444444', - dark: '#CCCCCC', - }, - 'text-xweak': { - light: '#666666', - dark: '#999999', - }, - 'background-success': '#07E5A733', - 'background-warning': '#EF931D66', - 'background-error': '#E03E4366', - 'background-info': '#0190C266', - 'accent-blue': { - dark: '#0190C2', - light: '#0190C2', - }, - 'accent-purple': { - dark: '#9510A1', - light: '#9510A1', - }, - 'accent-green': { - dark: '#058E4B', - light: '#058E4B', - }, - ...PLURAL_THEME, -} - -export const DEFAULT_THEME = { - anchor: { - color: '#9095A2', - hover: { - textDecoration: 'underline', - extend: 'color: #EBEFF0', - }, - fontWeight: 400, - }, - button: { - padding: { - horizontal: '6px', - vertical: '2px', - }, - }, - checkBox: { - size: '20px', - toggle: { radius: '20px', size: '40px' }, - }, - box: { - extend: boxStyle, - }, - textField: { extend: { fontWeight: 400 } }, - select: { - options: { - text: { size: 'small' }, - }, - }, - layer: { - background: 'background', - }, - global: { - colors: DEFAULT_COLOR_THEME, - focus: { shadow: 'none', border: { color: 'brand' } }, - control: { border: { radius: '2px' } }, - drop: { - background: 'fill-two', - border: { radius: '4px' }, - zIndex: 2000, - extend: css` - box-shadow: 0px 0px 4px 4px rgba(0, 0, 0, 0.2); - `, - }, - box: { extend: boxStyle }, - checkBox: { toggle: { color: 'brand' } }, - active: { background: { color: '#1E2229' } }, - elevation: { - light: { - medium: '0px 3px 8px rgba(100, 100, 100, 0.50)', - }, - }, - font: { - family: 'Inter', - size: '14px', - height: '20px', - }, - }, -} - -export { DEFAULT_THEME as grommetTheme } diff --git a/pkg/ui/web/src/hooks/useWails.ts b/pkg/ui/web/src/hooks/useWails.ts deleted file mode 100644 index 371967148..000000000 --- a/pkg/ui/web/src/hooks/useWails.ts +++ /dev/null @@ -1,89 +0,0 @@ -import { - Dispatch, - useCallback, - useEffect, - useState, -} from 'react' - -import { Binding, ClientBindingFactory } from '../services/wails' - -type Error = any // TODO: figure out the type - -interface QueryResponse { - data?: T - error: Error - loading: boolean - refetch: Dispatch -} - -type OperationVariables = Record; - -interface QueryOptions { - variables?: TVariables -} - -function useWailsQuery(binding: Binding, - options?: QueryOptions): QueryResponse { - const bindingFn = ClientBindingFactory(binding) - const [loading, setLoading] = useState(false) - const [data, setData] = useState() - const [error, setError] = useState() - - const fetch = useCallback(() => { - setLoading(true) - setError(undefined) - setData(undefined) - - bindingFn(options?.variables ?? {}).then(res => setData(res)) - .catch(err => setError(err)) - .finally(() => setLoading(false)) - }, [bindingFn, options?.variables]) - - const refetch = useCallback(() => { - if (loading) return - - fetch() - }, [fetch, loading]) - - useEffect(() => fetch(), [fetch]) - - return { - data, - loading, - error, - refetch, - } as QueryResponse -} - -interface UpdateReponse { - error: Error - loading: boolean - update: Dispatch - data?: T -} - -function useWailsUpdate(binding: Binding, - options?: QueryOptions): UpdateReponse { - const bindingFn = ClientBindingFactory(binding) - const [loading, setLoading] = useState(false) - const [data, setData] = useState() - const [error, setError] = useState() - - const update = useCallback(() => { - setLoading(true) - - bindingFn(options?.variables ?? {}) - .then(data => setData(data)) - .catch(err => setError(err)) - .finally(() => setLoading(false)) - }, [bindingFn, options?.variables]) - - return { - error, - loading, - update, - data, - } -} - -export { useWailsQuery, useWailsUpdate } diff --git a/pkg/ui/web/src/layout/Header.tsx b/pkg/ui/web/src/layout/Header.tsx deleted file mode 100644 index 6b7ba181c..000000000 --- a/pkg/ui/web/src/layout/Header.tsx +++ /dev/null @@ -1,45 +0,0 @@ -import { Button, CloseIcon, PluralLogoFull } from '@pluralsh/design-system' -import React, { useCallback } from 'react' -import styled from 'styled-components' - -import { Close } from '../../wailsjs/go/ui/Window' - -const Header = styled(HeaderUnstyled)(({ theme }) => ({ - // Make window draggable via header - ...theme.partials.draggable, - - // Layout - display: 'flex', - alignItems: 'center', - justifyContent: 'space-between', - - // Spacing - padding: `${theme.spacing.medium}px ${theme.spacing.large}px`, - - // Theming - background: theme.colors['fill-one'], - borderBottom: theme.borders.default, -})) - -function HeaderUnstyled({ ...props }): React.ReactElement { - const onClose = useCallback(Close, []) - - return ( -
    - - -
    - ) -} - -export default Header diff --git a/pkg/ui/web/src/main.tsx b/pkg/ui/web/src/main.tsx deleted file mode 100644 index 95bde5013..000000000 --- a/pkg/ui/web/src/main.tsx +++ /dev/null @@ -1,9 +0,0 @@ -import React from 'react' -import { createRoot } from 'react-dom/client' - -import Plural from './Plural' - -const container = document.getElementById('root') -const root = createRoot(container!) - -root.render() diff --git a/pkg/ui/web/src/routes/installer/Application.tsx b/pkg/ui/web/src/routes/installer/Application.tsx deleted file mode 100644 index 6240e046c..000000000 --- a/pkg/ui/web/src/routes/installer/Application.tsx +++ /dev/null @@ -1,138 +0,0 @@ -import { useQuery } from '@apollo/client' -import { Chip, WizardStep, useActive } from '@pluralsh/design-system' -import { Div, Span } from 'honorable' -import { - ReactElement, - useContext, - useEffect, - useMemo, - useState, -} from 'react' - -import Loader from '../../components/loader/Loader' -import { WailsContext } from '../../context/wails' -import { - GetRecipeDocument, - ListRecipesDocument, - Recipe, - RecipeEdge, -} from '../../graphql/generated/graphql' - -import { Configuration } from './Configuration' - -interface StepData { - id: string | undefined, - context: Record - oidc: boolean - skipped?: boolean, -} - -const toConfig = config => (config ? Object.keys(config) - .map(key => ({ [key]: { value: config[key], valid: true } })) - .reduce((acc, entry) => ({ ...acc, ...entry }), {}) : undefined) - -export function Application({ provider, ...props }: any): ReactElement { - const { active, setData } = useActive() - const { context: { configuration } } = useContext(WailsContext) - const [context, setContext] = useState>(active.data?.context || {}) - const [valid, setValid] = useState(true) - const [oidc, setOIDC] = useState(active.data?.oidc ?? true) - const { data: { recipes: { edges: recipeEdges } = { edges: undefined } } = {} } = useQuery(ListRecipesDocument, { - variables: { repositoryId: active.key }, - }) - - const { node: recipeBase } = recipeEdges?.find((recipe: RecipeEdge) => recipe!.node!.provider === provider) || { node: undefined } - const { data: recipe } = useQuery<{recipe: Recipe}>(GetRecipeDocument, { - variables: { id: recipeBase?.id }, - skip: !recipeBase, - }) - - const recipeContext = useMemo(() => toConfig(configuration?.[active.label!]), [active.label, configuration]) - const mergedContext = useMemo>(() => ({ ...recipeContext, ...context }), [recipeContext, context]) - const stepData = useMemo(() => ({ - ...active.data, ...{ id: recipe?.recipe.id }, ...{ context: mergedContext }, ...{ oidc }, - }), [active.data, recipe?.recipe.id, mergedContext, oidc]) - - useEffect(() => { - const valid = Object.values(context).every(({ valid }) => valid) - - setValid(valid) - }, [context, setValid]) - - // Update step data on change - useEffect(() => setData(stepData), [stepData, setData]) - - if (!recipe) { - return ( - - - - ) - } - - if (recipe.recipe?.restricted) { - return ( - -
    - Cannot install app - - This application has been marked restricted because it requires configuration, like ssh keys, that are only able to be securely configured locally. - -
    -
    - ) - } - - return ( - -
    - - configure {active.label} - - {active.isDependency && ( - Dependency - - )} -
    - -
    - ) -} diff --git a/pkg/ui/web/src/routes/installer/Configuration.tsx b/pkg/ui/web/src/routes/installer/Configuration.tsx deleted file mode 100644 index 2d1e6d9a6..000000000 --- a/pkg/ui/web/src/routes/installer/Configuration.tsx +++ /dev/null @@ -1,111 +0,0 @@ -import { - Dispatch, - ReactElement, - SetStateAction, - useCallback, - useEffect, - useMemo, -} from 'react' -import { Flex, Span, Switch } from 'honorable' -import { useActive, useNavigation } from '@pluralsh/design-system' - -import { - Datatype, - Maybe, - Operation as OperationType, - Recipe, - RecipeConfiguration, -} from '../../graphql/generated/graphql' - -import { ConfigurationItem } from './ConfigurationItem' - -const available = (config, context) => { - if (!config.condition) return true - - const { condition } = config - - switch (condition.operation) { - case OperationType.Not: - return !(context[condition.field]?.value) - case OperationType.Prefix: - return context[condition.field]?.value?.startsWith(condition.value) ?? false - case OperationType.Eq: - return context[condition.field]?.value - } - - return true -} - -interface ConfigurationProps { - recipe: Recipe, - context: Record - setContext: Dispatch>> - oidc?: boolean - setOIDC: Dispatch -} - -export function Configuration({ - recipe, context, setContext, oidc, setOIDC, -}: ConfigurationProps): ReactElement { - const { - active, completed, setCompleted, setData, - } = useActive>() - const { onNext } = useNavigation() - const sections = recipe.recipeSections - const configurations = sections!.filter(section => section!.repository!.name === active.label).map(section => section!.configuration).flat().filter(c => !!c) - const setValue = useCallback(( - fieldName, value, valid = true, type = Datatype.String - ) => setContext(context => ({ ...context, ...{ [fieldName]: { value, valid, type } } })), [setContext]) - const hiddenConfigurations = useMemo(() => configurations.filter(conf => !available(conf, context)), [configurations, context]) - - useEffect(() => { - hiddenConfigurations.forEach(conf => { - setContext(context => ({ ...context, ...{ [conf!.name!]: { value: context[conf!.name!]?.value, valid: true, type: Datatype.String } } })) - }) - // eslint-disable-next-line react-hooks/exhaustive-deps - }, [hiddenConfigurations.length, setContext]) - - useEffect(() => { - if (configurations.length === 0 && !completed && active.data?.id) setCompleted(true) - }, [configurations.length, completed, active.data?.id, setCompleted]) - - useEffect(() => { - if (configurations.length === 0 && !active.data?.skipped && completed) { - setData({ ...active.data, ...{ skipped: true } }) - onNext() - } - }, [active.data, completed, configurations.length, onNext, setData]) - - return ( - - {configurations.filter(conf => available(conf, context)).map((conf?: Maybe) => ( - - ))} - {configurations?.length === 0 && ( - Nothing needs doing here! You can continue. - - )} - {recipe.oidcEnabled && ( -
    - setOIDC(checked)} - >Enable OIDC - -
    - )} -
    - ) -} diff --git a/pkg/ui/web/src/routes/installer/ConfigurationFileInput.tsx b/pkg/ui/web/src/routes/installer/ConfigurationFileInput.tsx deleted file mode 100644 index 55cf43b61..000000000 --- a/pkg/ui/web/src/routes/installer/ConfigurationFileInput.tsx +++ /dev/null @@ -1,52 +0,0 @@ -import { FileInput } from 'grommet' -import { ThemeContext } from 'grommet/contexts' -import { Span } from 'honorable' -import { ComponentProps, useCallback, useState } from 'react' -import { useTheme } from 'styled-components' - -import { fileInputTheme } from '../../grommet/fileInputTheme' - -export default function ConfigurationFileInput({ - value, - onChange, ...props -}: { onChange: (f:{file: File | null, text: string}) => void; value: string } & Omit< - ComponentProps, 'onChange' ->) { - const [fileSelected, setFileSelected] = useState(!!value) - const theme = useTheme() - - const readFile = useCallback(async (files: FileList | undefined | null) => { - setFileSelected(false) - - const file = files?.item(0) ?? null - const text = await file?.text() ?? '' - - setFileSelected(!!file) - onChange({ text, file }) - }, - [onChange]) - - const messages = value ? { dropPrompt: '********', browse: 'Choose a different file' } : { - dropPrompt: 'Drop your file here', - browse: 'Select file', - } - - return ( - - readFile(event?.target?.files)} - renderFile={file => ( - - {file.name} - - )} - {...props} - /> - - ) -} diff --git a/pkg/ui/web/src/routes/installer/ConfigurationItem.tsx b/pkg/ui/web/src/routes/installer/ConfigurationItem.tsx deleted file mode 100644 index 227f75e78..000000000 --- a/pkg/ui/web/src/routes/installer/ConfigurationItem.tsx +++ /dev/null @@ -1,254 +0,0 @@ -import { FormField, Input, useActive } from '@pluralsh/design-system' -import { Switch } from 'honorable' -import StartCase from 'lodash/startCase' -import { - useContext, - useEffect, - useMemo, - useState, -} from 'react' - -import { WailsContext } from '../../context/wails' -import { Datatype } from '../../graphql/generated/graphql' -import { PluralProject } from '../../types/client' - -import ConfigurationFileInput from './ConfigurationFileInput' -import { InstallerContext } from './context' - -type ModifierFunction = (value: string, trim?: boolean) => string - -const modifierFactory = (type: Datatype, project: PluralProject): ModifierFunction => { - switch (type) { - case Datatype.String: - case Datatype.Int: - case Datatype.Password: - return stringModifier - case Datatype.Bucket: - return bucketModifier.bind({ project }) - case Datatype.Domain: - return domainModifier.bind({ project }) - } - - return stringModifier -} - -const stringModifier = value => value - -function bucketModifier(this: {project: PluralProject}, value: string, trim = false) { - const { project } = this - const bucketPrefix = project?.bucketPrefix - const cluster = project?.cluster - const prefix = `${bucketPrefix}-${cluster}-` - - if (trim) return value?.replace(prefix, '') - - return bucketPrefix && cluster ? `${prefix}${value}` : value -} -function domainModifier(this: {project: PluralProject}, value: string, trim = false) { - const { project } = this - const subdomain = project?.network?.subdomain || '' - const suffix = subdomain ? `.${subdomain}` : '' - - if (trim) return value?.replace(suffix, '') - - return subdomain ? `${value}${suffix}` : value -} - -const createValidator = (regex: RegExp, optional: boolean, error: string) => (value): {valid: boolean, message: string} => ({ - valid: (value ? regex.test(value) : optional), - message: error, -}) - -/** - * Creates validator for domain uniqueness check. - * - * @param ctx - object that maps field name to an object field with value, validity, etc. - * @param fieldName - field name being checked - * @param appName - active application name - * @param registeredDomains - a set of domains used by already installed applications - * @param usedDomains - object that maps key (appName-fieldName) to the domain name. - * It is basically a list of unique domains used by the installer locally. - */ -const createUniqueDomainValidator - = ( - ctx: Record, - fieldName: string, - appName: string, - registeredDomains: Set, - usedDomains: Record - ) => (value): { valid: boolean; message: string } => { - const domains = new Set(registeredDomains) - - Object.entries(ctx) - .filter(([name, field]) => field.type === Datatype.Domain - && name !== fieldName - && field.value?.length > 0) - .forEach(([_, field]) => domains.add(field.value)) - - Object.entries(usedDomains) - .filter(([key]) => key !== domainFieldKey(appName, fieldName)) - .forEach(([_, domain]) => domains.add(domain)) - - return { - valid: !domains.has(value), - message: `Domain ${value} already used.`, - } - } - -const domainFieldKey = (appName, fieldName) => `${appName}-${fieldName}` - -function ConfigurationField({ - config, ctx, setValue, -}) { - const { - name, - default: defaultValue, - placeholder, - documentation, - validation, - optional, - type, - } = config - const { project, context } = useContext(WailsContext) - const { domains, setDomains } = useContext(InstallerContext) - const { active } = useActive() - - const value = useMemo(() => ctx[name]?.value, [ctx, name]) - const validators = useMemo(() => [ - createValidator(new RegExp(validation?.regex ? `^${validation?.regex}$` : /.*/), - config.optional, - validation?.message), - ...(type === Datatype.Domain - ? [ - createUniqueDomainValidator( - ctx, - name, - active.label!, - new Set(context.domains ?? []), - domains - ), - ] - : []), - ], - [active.label, config.optional, context.domains, ctx, domains, name, type, validation?.message, validation?.regex]) - const { valid, message } = useMemo(() => { - for (const validator of validators) { - const result = validator(value) - - if (!result.valid) return result - } - - return { valid: true, message: '' } - }, [validators, value]) - const modifier = useMemo(() => modifierFactory(config.type, project), - [config.type, project]) - - const isFile = type === Datatype.File - - const [local, setLocal] = useState(modifier(value, true) || (isFile ? null : defaultValue)) - - useEffect(() => (local - ? setValue( - name, modifier(local), valid, type - ) - : setValue( - name, local, valid, type - )), - [local, modifier, name, setValue, type, valid]) - - useEffect(() => { - if (type !== Datatype.Domain || !value) return - - setDomains(domains => ({ - ...domains, - ...{ [domainFieldKey(active.label, name)]: value }, - })) - }, [active.label, name, setDomains, type, value]) - - const isInt = type === Datatype.Int - const isPassword - = type === Datatype.Password - || ['private_key', 'public_key'].includes(config.name) - - const inputFieldType = isInt - ? 'number' - : isPassword - ? 'password' - : 'text' - - return ( - - {isFile ? ( - { - setLocal(val?.text ?? '') - }} - /> - ) : ( - setLocal(value)} - /> - )} - - ) -} - -function BoolConfiguration({ config: { name, default: def }, ctx, setValue }) { - const value: boolean = `${ctx[name]?.value}`.toLowerCase() === 'true' - - useEffect(() => { - if (value === undefined && def) { - setValue(name, def) - } - }, [value, def, name, setValue]) - - return ( - setValue(name, checked)} - > - {StartCase(name)} - - ) -} - -export function ConfigurationItem({ config, ctx, setValue }) { - switch (config.type) { - case Datatype.Bool: - return ( - - ) - default: - return ( - - ) - } -} diff --git a/pkg/ui/web/src/routes/installer/Installer.tsx b/pkg/ui/web/src/routes/installer/Installer.tsx deleted file mode 100644 index a9d2062b9..000000000 --- a/pkg/ui/web/src/routes/installer/Installer.tsx +++ /dev/null @@ -1,137 +0,0 @@ -import { ApolloError, useApolloClient, useQuery } from '@apollo/client' -import { - GraphQLToast, - Wizard, - WizardNavigation, - WizardStepConfig, - WizardStepper, -} from '@pluralsh/design-system' -import React, { - useCallback, - useContext, - useEffect, - useMemo, - useState, -} from 'react' -import { useNavigate } from 'react-router-dom' -import styled from 'styled-components' - -import Loader from '../../components/loader/Loader' -import { WailsContext } from '../../context/wails' -import { ListRepositoriesDocument, ListRepositoriesQueryVariables, RootQueryType } from '../../graphql/generated/graphql' -import { Routes } from '../routes' - -import { buildSteps, install, toDefaultSteps } from './helpers' -import { InstallerContext } from './context' - -const FILTERED_APPS = ['bootstrap', 'ingress-nginx', 'postgres'] -const FORCED_APPS = { - console: 'The Plural Console will allow you to monitor, upgrade, and deploy applications easily from one centralized place.', -} - -const Installer = styled(InstallerUnstyled)(() => ({ - height: '100%', -})) - -function InstallerUnstyled({ ...props }): React.ReactElement { - const navigate = useNavigate() - const client = useApolloClient() - const { project: { provider } } = useContext(WailsContext) - - const [stepsLoading, setStepsLoading] = useState(false) - const [steps, setSteps] = useState>() - const [error, setError] = useState() - const [defaultSteps, setDefaultSteps] = useState>([]) - const [domains, setDomains] = useState>({}) - - const { data: connection } = useQuery, ListRepositoriesQueryVariables>(ListRepositoriesDocument, { - variables: { - installed: false, - provider, - }, - fetchPolicy: 'network-only', - }) - - const { data: installed } = useQuery, ListRepositoriesQueryVariables>(ListRepositoriesDocument, { - variables: { - installed: true, - provider, - }, - fetchPolicy: 'network-only', - }) - - const context = useMemo(() => ({ domains, setDomains }), [domains]) - - const applications = useMemo(() => connection - ?.repositories - ?.edges - ?.map(repo => repo!.node) - .filter(app => ((!app?.private ?? true)) && !FILTERED_APPS.includes(app!.name)), [connection?.repositories?.edges]) - - const installedApplications = useMemo(() => installed - ?.repositories - ?.edges - ?.map(repo => repo!.node) ?? [], [installed]) - - const onInstall = useCallback((payload: Array) => { - setStepsLoading(true) - - install(client, payload) - .then(() => navigate(Routes.Next)) - .catch(err => setError(err)) - .finally(() => setStepsLoading(false)) - }, [client, navigate]) - - const onSelect = useCallback((selectedApplications: Array) => { - const build = async () => { - const steps = await buildSteps( - client, - provider!, - selectedApplications, - new Set(installedApplications.map(repository => repository!.name)), - ) - - setSteps(steps) - } - - setStepsLoading(true) - build().finally(() => setStepsLoading(false)) - }, [client, installedApplications, provider]) - - useEffect(() => setDefaultSteps(toDefaultSteps(applications, provider!, { ...FORCED_APPS })), [applications?.length, provider]) - - if (!applications || defaultSteps.length === 0) { - return - } - - return ( -
    - - - {{ - stepper: , - navigation: , - }} - - - {error && ( - setError(undefined)} - margin="medium" - closeTimeout={20000} - /> - )} - -
    - ) -} - -export default Installer diff --git a/pkg/ui/web/src/routes/installer/context.tsx b/pkg/ui/web/src/routes/installer/context.tsx deleted file mode 100644 index 482c561ee..000000000 --- a/pkg/ui/web/src/routes/installer/context.tsx +++ /dev/null @@ -1,11 +0,0 @@ -import { Dispatch, SetStateAction, createContext } from 'react' - -interface ContextProps { - domains: Record - setDomains: Dispatch>> -} - -const InstallerContext = createContext({} as ContextProps) - -export type { ContextProps } -export { InstallerContext } diff --git a/pkg/ui/web/src/routes/installer/helpers.tsx b/pkg/ui/web/src/routes/installer/helpers.tsx deleted file mode 100644 index 00efb8b02..000000000 --- a/pkg/ui/web/src/routes/installer/helpers.tsx +++ /dev/null @@ -1,128 +0,0 @@ -import { ApolloClient } from '@apollo/client' - -import { - AppsIcon, - InstallIcon, - WizardInstaller, - WizardPicker, - WizardStepConfig, -} from '@pluralsh/design-system' - -import { - Datatype, - GetRecipeDocument, - ListRecipesDocument, - Provider, - Recipe, - RecipeSection, - RootQueryType, -} from '../../graphql/generated/graphql' -import { Binding, ClientBindingFactory } from '../../services/wails' - -import { Application } from './Application' - -const toPickerItems = (applications: Array, provider: Provider, forcedApps: any): Array => applications?.map(app => ({ - key: app.id, - label: app.name, - imageUrl: app.icon, - node: , - isRequired: Object.keys(forcedApps).includes(app.name), - tooltip: forcedApps[app.name], -})) || [] - -const toDefaultSteps = (applications: any, provider: Provider, forcedApps: any): Array => [{ - key: 'apps', - label: 'Apps', - Icon: AppsIcon, - node: , - isDefault: true, -}, -{ - key: 'placeholder', - isPlaceholder: true, -}, -{ - key: 'install', - label: 'Install', - Icon: InstallIcon, - node: , - isDefault: true, -}] - -const toDependencySteps = (applications: {section: RecipeSection, dependencyOf: Set}[], provider: Provider): Array => [...applications.map(app => ({ - key: app.section.repository!.id, - label: app.section.repository!.name, - imageUrl: app.section.repository!.icon!, - node: , - isDependency: true, - dependencyOf: app.dependencyOf, -}))] - -const buildSteps = async ( - client: ApolloClient, - provider: Provider, - selectedApplications: Array, - installedApplications: Set -) => { - const dependencyMap = new Map}>() - - for (const app of selectedApplications) { - const { data: { recipes } = {} } = await client.query>({ - query: ListRecipesDocument, - variables: { repositoryId: app.key }, - }) - - const { node: recipeBase } = recipes?.edges?.find(edge => edge!.node!.provider === provider) || { node: undefined } - - if (!recipeBase) continue - - const { data: recipe } = await client.query<{recipe: Recipe}>({ - query: GetRecipeDocument, - variables: { id: recipeBase?.id }, - }) - - const sections = recipe.recipe.recipeSections! - .filter(section => section!.repository!.name !== app.label) - .filter(section => !installedApplications.has(section!.repository!.name)) - - sections.forEach(section => { - if (selectedApplications.find(app => app.key === section!.repository!.id)) return - - if (!dependencyMap.has(section!.repository!.name)) { - dependencyMap.set(section!.repository!.name, { section: section!, dependencyOf: new Set([app.label!]) }) - - return - } - - const dep = dependencyMap.get(section!.repository!.name)! - const dependencyOf: Array = [...Array.from(dep.dependencyOf.values()), app.label!] - - dependencyMap.set(section!.repository!.name, { section: section!, dependencyOf: new Set(dependencyOf) }) - }) - } - - return toDependencySteps(Array.from(dependencyMap.values()), provider) -} - -const install = async (client: ApolloClient, apps: Array>) => { - const toAPIContext = context => ({ ...Object.keys(context || {}).reduce((acc, key) => ({ ...acc, [key]: context[key].value }), {}) }) - const toDataTypeValues = (context, datatype) => Object.keys(context || {}).reduce((acc: Array, key) => (context[key].type === datatype ? [...acc, context[key].value] : [...acc]), []) - const install = ClientBindingFactory(Binding.Install) - const domains = apps.reduce((acc: Array, app) => [...acc, ...toDataTypeValues(app.data?.context || {}, Datatype.Domain)], []) - const buckets = apps.reduce((acc: Array, app) => [...acc, ...toDataTypeValues(app.data?.context || {}, Datatype.Bucket)], []) - - // Filter out some form validation fields from context - apps = apps.map(app => ({ ...app, data: { ...app.data, context: toAPIContext(app.data.context ?? {}) } })) - - return install(apps.map(app => ({ ...app, dependencyOf: Array.from(app.dependencyOf ?? []) })), domains, buckets) -} - -export { - toDependencySteps, toDefaultSteps, buildSteps, toPickerItems, install, -} diff --git a/pkg/ui/web/src/routes/installer/route.tsx b/pkg/ui/web/src/routes/installer/route.tsx deleted file mode 100644 index e94d78a0e..000000000 --- a/pkg/ui/web/src/routes/installer/route.tsx +++ /dev/null @@ -1,12 +0,0 @@ -import React from 'react' -import { DataRouteObject } from 'react-router-dom' - -const Installer = React.lazy(() => import('./Installer')) - -const route: DataRouteObject = { - id: 'installer', - index: true, - element: , -} - -export { route as installerRoute } diff --git a/pkg/ui/web/src/routes/nextsteps/NextSteps.tsx b/pkg/ui/web/src/routes/nextsteps/NextSteps.tsx deleted file mode 100644 index 9e263c365..000000000 --- a/pkg/ui/web/src/routes/nextsteps/NextSteps.tsx +++ /dev/null @@ -1,87 +0,0 @@ -import { Button, Codeline } from '@pluralsh/design-system' -import React, { useCallback } from 'react' -import { useNavigate } from 'react-router-dom' -import styled from 'styled-components' - -import { Close, SetClipboard } from '../../../wailsjs/go/ui/Window' -import { Routes } from '../routes' - -const NextSteps = styled(NextStepsUnstyled)(({ theme }) => ({ - height: '100%', - display: 'flex', - flexDirection: 'column', - justifyContent: 'center', - gap: theme.spacing.medium, - - '.title': { - ...theme.partials.text.title2, - - display: 'flex', - flexDirection: 'column', - alignSelf: 'center', - alignItems: 'center', - textAlign: 'center', - paddingBottom: theme.spacing.xxxlarge, - }, - - '.description': { - ...theme.partials.text.body1, - - alignSelf: 'center', - }, - - '.codeline': { - ...theme.partials.text.body2, - - paddingTop: theme.spacing.xxlarge, - }, - - '.actions': { - display: 'flex', - justifyContent: 'space-between', - paddingTop: theme.spacing.xlarge, - }, -})) - -function NextStepsUnstyled({ ...props }): React.ReactElement { - const onClose = useCallback(Close, []) - const onCopy = useCallback((text: string) => SetClipboard(text), []) - const navigate = useNavigate() - - return ( -
    - - Almost done! - Follow the next steps to complete your installations. - - - Copy and run below command to build your applications: - plural build - - - Copy and run below command to deploy your applications: - plural deploy --commit "Installed few apps with Plural" - - -
    - - -
    -
    - ) -} - -export default NextSteps diff --git a/pkg/ui/web/src/routes/nextsteps/route.tsx b/pkg/ui/web/src/routes/nextsteps/route.tsx deleted file mode 100644 index 48236b8f5..000000000 --- a/pkg/ui/web/src/routes/nextsteps/route.tsx +++ /dev/null @@ -1,14 +0,0 @@ -import React from 'react' -import { DataRouteObject } from 'react-router-dom' - -import { Routes } from '../routes' - -const NextSteps = React.lazy(() => import('./NextSteps')) - -const route: DataRouteObject = { - id: 'next', - path: Routes.Next, - element: , -} - -export { route as nextStepsRoute } diff --git a/pkg/ui/web/src/routes/root.tsx b/pkg/ui/web/src/routes/root.tsx deleted file mode 100644 index 879645000..000000000 --- a/pkg/ui/web/src/routes/root.tsx +++ /dev/null @@ -1,54 +0,0 @@ -import { ApolloProvider } from '@apollo/client' -import { GraphQLToast, LoadingSpinner } from '@pluralsh/design-system' -import React, { Suspense, useContext } from 'react' -import { DataRouteObject, Outlet, RouteObject } from 'react-router-dom' -import styled from 'styled-components' - -import { WailsContext } from '../context/wails' -import Header from '../layout/Header' -import { useApolloClient } from '../services/apollo' - -import { Routes } from './routes' - -const Root = styled(RootUnstyled)(({ theme }) => ({ - display: 'flex', - flexDirection: 'column' as const, - height: '100%', - overflow: 'hidden', - - '.content': { - padding: theme.spacing.xxlarge, - flexGrow: 1, - overflowY: 'auto', - }, -})) - -function RootUnstyled({ ...props }): React.ReactElement { - const { token } = useContext(WailsContext) - const { client, error } = useApolloClient(token) - - return ( -
    - -
    -
    - {error && ( - - )} - -
    - ) -} - -const route = (children: Array): RouteObject => ({ - path: Routes.Root, - element: }>, - children, -}) - -export { route as createRootRoute } diff --git a/pkg/ui/web/src/routes/router.tsx b/pkg/ui/web/src/routes/router.tsx deleted file mode 100644 index b0f47bd67..000000000 --- a/pkg/ui/web/src/routes/router.tsx +++ /dev/null @@ -1,15 +0,0 @@ -import { createHashRouter } from 'react-router-dom' - -import { installerRoute } from './installer/route' -import { nextStepsRoute } from './nextsteps/route' - -import { createRootRoute } from './root' - -const router = createHashRouter([ - createRootRoute([ - installerRoute, - nextStepsRoute, - ]), -]) - -export { router } diff --git a/pkg/ui/web/src/routes/routes.ts b/pkg/ui/web/src/routes/routes.ts deleted file mode 100644 index fe9825e2b..000000000 --- a/pkg/ui/web/src/routes/routes.ts +++ /dev/null @@ -1,6 +0,0 @@ -enum Routes { - Root = '/', - Next = 'next', -} - -export { Routes } diff --git a/pkg/ui/web/src/services/apollo.tsx b/pkg/ui/web/src/services/apollo.tsx deleted file mode 100644 index c16bf5fe3..000000000 --- a/pkg/ui/web/src/services/apollo.tsx +++ /dev/null @@ -1,67 +0,0 @@ -import { GraphQLErrors } from '@apollo/client/errors' -import { useMemo, useState } from 'react' -import { create } from '@absinthe/socket' -import { createAbsintheSocketLink } from '@absinthe/socket-apollo-link' -import { - ApolloClient, - ApolloLink, - HttpLink, - InMemoryCache, - NormalizedCacheObject, -} from '@apollo/client' -import { setContext } from '@apollo/client/link/context' -import { onError } from '@apollo/client/link/error' -import { RetryLink } from '@apollo/client/link/retry' -import { Socket as PhoenixSocket } from 'phoenix' - -const API_HOST = 'app.plural.sh' -const GQL_URL = `https://${API_HOST}/gql` -const WS_URI = `wss://${API_HOST}/socket` - -// const splitLink = split(({ query }) => { -// const definition = getMainDefinition(query) -// -// return ( -// definition.kind === 'OperationDefinition' -// && definition.operation === 'subscription' -// ) -// }, -// socketLink, -// retryLink.concat(resetToken).concat(httpLink),) - -interface ApolloClientHook { - client: ApolloClient - error: GraphQLErrors | undefined -} - -export function useApolloClient(token: string): ApolloClientHook { - const [error, setError] = useState() - - const authLink = setContext(() => ({ headers: token ? { authorization: `Bearer ${token}` } : {} })) - const httpLink = useMemo(() => new HttpLink({ uri: GQL_URL }), []) - const absintheSocket = create(new PhoenixSocket(WS_URI, { params: () => (token ? { Authorization: `Bearer ${token}` } : {}) })) - const errorLink = onError(({ graphQLErrors }) => { - if (!error && graphQLErrors) { - const clearDelay = 15000 - - setError(graphQLErrors) - setTimeout(() => setError(undefined), clearDelay) - } - }) - const _socketLink = createAbsintheSocketLink(absintheSocket) - const _retryLink = new RetryLink({ - delay: { initial: 200 }, - attempts: { - max: Infinity, - retryIf: error => !!error, - }, - }) - - return useMemo(() => ({ - client: new ApolloClient({ - link: ApolloLink.from([authLink, errorLink, httpLink]), - cache: new InMemoryCache(), - }), - error, - }), [authLink, error, httpLink, errorLink]) -} diff --git a/pkg/ui/web/src/services/wails.ts b/pkg/ui/web/src/services/wails.ts deleted file mode 100644 index ddf06bb1f..000000000 --- a/pkg/ui/web/src/services/wails.ts +++ /dev/null @@ -1,63 +0,0 @@ -import { WizardStepConfig } from '@pluralsh/design-system' - -import { ui } from '../../wailsjs/go/models' -import { - Context, - Install, - Project, - Provider, - Token, -} from '../../wailsjs/go/ui/Client' -import { SetClipboard } from '../../wailsjs/go/ui/Window' -import { Provider as APIProvider } from '../graphql/generated/graphql' -import { - Client, - ClientBinding, - PluralContext, - PluralProject, -} from '../types/client' - -import Application = ui.Application; - -/** - * List of supported client methods based on API Go client. - * @see pkg/api/client.go - */ -enum Binding { - Token = 'Token', - Project = 'Project', - Provider = 'Provider', - Context = 'Context', - Install = 'Install', - SetClipboard = 'SetClipboard', -} - -/** - * Client mapping from defined bindings to exposed Go backend methods. - * Abstracts the backend calls and wraps them with proper return types - * to simplify usage in the UI. - * @see Binding - */ -const Plural: Client = { - [Binding.Token]: (): Promise => Token(), - [Binding.Project]: (): Promise => Project() as Promise, - [Binding.Provider]: (): Promise => Provider() as Promise, - [Binding.Context]: (): Promise => Context() as Promise, - [Binding.Install]: (apps: Array, domains: Array, buckets: Array): Promise => Install(apps as Array, domains, buckets) as Promise, - [Binding.SetClipboard]: (text: string): Promise => SetClipboard(text), -} - -/** - * Factory that simplifies getting wrapped client binding methods. - * @param binding - * @constructor - */ -function ClientBindingFactory(binding: Binding): ClientBinding { - const bindingFn: ClientBinding = Plural[binding] as ClientBinding - - if (!bindingFn) throw new Error(`Unsupported client endpoint: ${binding}`) - - return bindingFn -} - -export { ClientBindingFactory, Binding } diff --git a/pkg/ui/web/src/styled/fonts.ts b/pkg/ui/web/src/styled/fonts.ts deleted file mode 100644 index f0ab91ff5..000000000 --- a/pkg/ui/web/src/styled/fonts.ts +++ /dev/null @@ -1,87 +0,0 @@ -import { createGlobalStyle } from 'styled-components' - -// language=SCSS -const FontStyles = createGlobalStyle(() => ` - @font-face { - font-family: 'Monument'; - src: url("/fonts/monument-regular.otf") format("opentype"); - font-weight: 400; - } - - @font-face { - font-family: 'Monument'; - src: url("/fonts/monument-medium.woff") format("woff"); - font-weight: 450; - } - - @font-face { - font-family: 'Monument'; - src: url("/fonts/monument-medium.woff") format("woff"); - font-weight: 500; - } - - @font-face { - font-family: 'Monument'; - src: url("/fonts/monument-bold.woff") format("woff"); - font-weight: 500; - } - - @font-face { - font-family: 'Monument'; - src: url("/fonts/monument-regular-italic.woff") format("woff"); - font-weight: 400; - font-style: italic; - } - - @font-face { - font-family: 'Monument'; - src: url("/fonts/monument-medium-italic.woff") format("woff"); - font-weight: 500; - font-style: italic; - } - - @font-face { - font-family: 'Monument'; - src: url("/fonts/monument-bold-italic.woff") format("woff"); - font-weight: 600; - font-style: italic; - } - - @font-face { - font-family: 'Monument Semi-Mono'; - src: url("/fonts/ABCMonumentGroteskSemi-Mono-Regular.woff") format("woff"); - font-weight: 400; - } - - @font-face { - font-family: 'Monument Semi-Mono'; - src: url("/fonts/ABCMonumentGroteskSemi-Mono-Medium.woff") format("woff"); - font-weight: 500; - } - - @font-face { - font-family: 'Monument Semi-Mono'; - src: url("/fonts/ABCMonumentGroteskSemi-Mono-Heavy.woff") format("woff"); - font-weight: 600; - } - - @font-face { - font-family: 'Monument Mono'; - src: url("/fonts/ABCMonumentGroteskMono-Regular.woff") format("woff"); - font-weight: 400; - } - - @font-face { - font-family: 'Monument Mono'; - src: url("/fonts/ABCMonumentGroteskMono-Medium.woff") format("woff"); - font-weight: 500; - } - - @font-face { - font-family: 'Monument Mono'; - src: url("/fonts/ABCMonumentGroteskMono-Heavy.woff") format("woff"); - font-weight: 600; - } -`) - -export { FontStyles } diff --git a/pkg/ui/web/src/styled/global.ts b/pkg/ui/web/src/styled/global.ts deleted file mode 100644 index 5f2d90f97..000000000 --- a/pkg/ui/web/src/styled/global.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { createGlobalStyle } from 'styled-components' - -// language=SCSS -const GlobalStyles = createGlobalStyle(({ theme }) => ` - html, body, #root { - // Layout - height: 100vh; - padding: 0; - margin: 0; - - // Fonts - font-size: 14px; - font-family: Inter, Helvetica, Arial, "sans-serif"; - line-height: 20px; - - // Theming - background: ${theme.colors['fill-zero']}; - color: ${theme.colors.text}; - } -`) - -export { GlobalStyles } diff --git a/pkg/ui/web/src/styled/scrollbar.ts b/pkg/ui/web/src/styled/scrollbar.ts deleted file mode 100644 index 95f4c5efd..000000000 --- a/pkg/ui/web/src/styled/scrollbar.ts +++ /dev/null @@ -1,5 +0,0 @@ -import { createGlobalStyle } from 'styled-components' - -const ScrollbarStyles = createGlobalStyle(({ theme }) => theme.partials.scrollBar({ fillLevel: 0 })) - -export { ScrollbarStyles } diff --git a/pkg/ui/web/src/styled/theme.ts b/pkg/ui/web/src/styled/theme.ts deleted file mode 100644 index cb9b7acd8..000000000 --- a/pkg/ui/web/src/styled/theme.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { styledTheme } from '@pluralsh/design-system' - -const theme = { - ...styledTheme, - partials: { - ...styledTheme.partials, - draggable: { '--wails-draggable': 'drag' }, - }, -} - -export { theme as styledTheme } diff --git a/pkg/ui/web/src/types/client.d.ts b/pkg/ui/web/src/types/client.d.ts deleted file mode 100644 index bfdc8f046..000000000 --- a/pkg/ui/web/src/types/client.d.ts +++ /dev/null @@ -1,31 +0,0 @@ -import { Provider } from '../graphql/generated/graphql' -import { Binding } from '../services/client' - -type ClientBinding = (...args: any) => Promise -type Client = {[key in Binding]: ClientBinding} - -interface NetworkConfig { - subdomain: string - pluralDns: bool -} - -interface PluralProject { - cluster: string - bucket: string - project: string - provider: Provider - region: string - bucketPrefix: string - network: NetworkConfig - context: Map -} - -interface PluralContext { - buckets: Array - domains: Array - configuration: Record> -} - -export type { - Client, ClientBinding, PluralProject, PluralContext, -} diff --git a/pkg/ui/web/src/types/styled.d.ts b/pkg/ui/web/src/types/styled.d.ts deleted file mode 100644 index 828f19c85..000000000 --- a/pkg/ui/web/src/types/styled.d.ts +++ /dev/null @@ -1,12 +0,0 @@ -// import original module declarations -import 'styled-components' - -import { styledTheme } from '../styled/theme' - -type StyledTheme = typeof styledTheme - -// and extend them! -declare module 'styled-components' { - // eslint-disable-next-line @typescript-eslint/no-empty-interface - export interface DefaultTheme extends StyledTheme {} -} diff --git a/pkg/ui/web/src/vite-env.d.ts b/pkg/ui/web/src/vite-env.d.ts deleted file mode 100644 index 11f02fe2a..000000000 --- a/pkg/ui/web/src/vite-env.d.ts +++ /dev/null @@ -1 +0,0 @@ -/// diff --git a/pkg/ui/web/style.css b/pkg/ui/web/style.css deleted file mode 100644 index 061c2db8f..000000000 --- a/pkg/ui/web/style.css +++ /dev/null @@ -1,3 +0,0 @@ -html, body { - width: 100vh; -} \ No newline at end of file diff --git a/pkg/ui/web/tsconfig.json b/pkg/ui/web/tsconfig.json deleted file mode 100644 index 49e6a537b..000000000 --- a/pkg/ui/web/tsconfig.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "compilerOptions": { - "target": "ESNext", - "useDefineForClassFields": true, - "lib": [ - "DOM", - "DOM.Iterable", - "ESNext" - ], - "allowJs": false, - "skipLibCheck": true, - "esModuleInterop": false, - "allowSyntheticDefaultImports": true, - "strict": true, - "forceConsistentCasingInFileNames": true, - "module": "ESNext", - "moduleResolution": "Node", - "resolveJsonModule": true, - "isolatedModules": true, - "noEmit": true, - "jsx": "react-jsx", - "noImplicitAny": false - }, - "include": [ - "src" - ], - "references": [ - { - "path": "./tsconfig.node.json" - } - ] -} diff --git a/pkg/ui/web/tsconfig.node.json b/pkg/ui/web/tsconfig.node.json deleted file mode 100644 index b8afcc8fa..000000000 --- a/pkg/ui/web/tsconfig.node.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "compilerOptions": { - "composite": true, - "module": "ESNext", - "moduleResolution": "Node", - "allowSyntheticDefaultImports": true - }, - "include": [ - "vite.config.ts" - ] -} diff --git a/pkg/ui/web/vite.config.ts b/pkg/ui/web/vite.config.ts deleted file mode 100644 index 5a33944a9..000000000 --- a/pkg/ui/web/vite.config.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { defineConfig } from 'vite' -import react from '@vitejs/plugin-react' - -// https://vitejs.dev/config/ -export default defineConfig({ - plugins: [react()], -}) diff --git a/pkg/ui/web/wailsjs/go/models.ts b/pkg/ui/web/wailsjs/go/models.ts deleted file mode 100755 index 4119e4dca..000000000 --- a/pkg/ui/web/wailsjs/go/models.ts +++ /dev/null @@ -1,77 +0,0 @@ -export namespace manifest { - - export class Context { - protect?: string[]; - // Go type: Globals - globals?: any; - - static createFrom(source: any = {}) { - return new Context(source); - } - - constructor(source: any = {}) { - if ('string' === typeof source) source = JSON.parse(source); - this.protect = source["protect"]; - this.globals = this.convertValues(source["globals"], null); - } - - convertValues(a: any, classs: any, asMap: boolean = false): any { - if (!a) { - return a; - } - if (a.slice) { - return (a as any[]).map(elem => this.convertValues(elem, classs)); - } else if ("object" === typeof a) { - if (asMap) { - for (const key of Object.keys(a)) { - a[key] = new classs(a[key]); - } - return a; - } - return new classs(a); - } - return a; - } - } - export class NetworkConfig { - subdomain: string; - pluralDns: boolean; - - static createFrom(source: any = {}) { - return new NetworkConfig(source); - } - - constructor(source: any = {}) { - if ('string' === typeof source) source = JSON.parse(source); - this.subdomain = source["subdomain"]; - this.pluralDns = source["pluralDns"]; - } - } - -} - -export namespace ui { - - export class Application { - key: string; - label: string; - isDependency: boolean; - dependencyOf: {[key: string]: any}; - data: {[key: string]: any}; - - static createFrom(source: any = {}) { - return new Application(source); - } - - constructor(source: any = {}) { - if ('string' === typeof source) source = JSON.parse(source); - this.key = source["key"]; - this.label = source["label"]; - this.isDependency = source["isDependency"]; - this.dependencyOf = source["dependencyOf"]; - this.data = source["data"]; - } - } - -} - diff --git a/pkg/ui/web/wailsjs/go/ui/Client.d.ts b/pkg/ui/web/wailsjs/go/ui/Client.d.ts deleted file mode 100755 index b7a026b8a..000000000 --- a/pkg/ui/web/wailsjs/go/ui/Client.d.ts +++ /dev/null @@ -1,13 +0,0 @@ -// Cynhyrchwyd y ffeil hon yn awtomatig. PEIDIWCH Â MODIWL -// This file is automatically generated. DO NOT EDIT -import {ui} from '../models'; - -export function Context():Promise; - -export function Install(arg1:Array,arg2:Array,arg3:Array):Promise; - -export function Project():Promise; - -export function Provider():Promise; - -export function Token():Promise; diff --git a/pkg/ui/web/wailsjs/go/ui/Client.js b/pkg/ui/web/wailsjs/go/ui/Client.js deleted file mode 100755 index ca1299c06..000000000 --- a/pkg/ui/web/wailsjs/go/ui/Client.js +++ /dev/null @@ -1,23 +0,0 @@ -// @ts-check -// Cynhyrchwyd y ffeil hon yn awtomatig. PEIDIWCH Â MODIWL -// This file is automatically generated. DO NOT EDIT - -export function Context() { - return window['go']['ui']['Client']['Context'](); -} - -export function Install(arg1, arg2, arg3) { - return window['go']['ui']['Client']['Install'](arg1, arg2, arg3); -} - -export function Project() { - return window['go']['ui']['Client']['Project'](); -} - -export function Provider() { - return window['go']['ui']['Client']['Provider'](); -} - -export function Token() { - return window['go']['ui']['Client']['Token'](); -} diff --git a/pkg/ui/web/wailsjs/go/ui/Window.d.ts b/pkg/ui/web/wailsjs/go/ui/Window.d.ts deleted file mode 100755 index ec70ec460..000000000 --- a/pkg/ui/web/wailsjs/go/ui/Window.d.ts +++ /dev/null @@ -1,6 +0,0 @@ -// Cynhyrchwyd y ffeil hon yn awtomatig. PEIDIWCH Â MODIWL -// This file is automatically generated. DO NOT EDIT - -export function Close():Promise; - -export function SetClipboard(arg1:string):Promise; diff --git a/pkg/ui/web/wailsjs/go/ui/Window.js b/pkg/ui/web/wailsjs/go/ui/Window.js deleted file mode 100755 index 8b1baf3b5..000000000 --- a/pkg/ui/web/wailsjs/go/ui/Window.js +++ /dev/null @@ -1,11 +0,0 @@ -// @ts-check -// Cynhyrchwyd y ffeil hon yn awtomatig. PEIDIWCH Â MODIWL -// This file is automatically generated. DO NOT EDIT - -export function Close() { - return window['go']['ui']['Window']['Close'](); -} - -export function SetClipboard(arg1) { - return window['go']['ui']['Window']['SetClipboard'](arg1); -} diff --git a/pkg/ui/web/wailsjs/runtime/package.json b/pkg/ui/web/wailsjs/runtime/package.json deleted file mode 100755 index 1e7c8a5d7..000000000 --- a/pkg/ui/web/wailsjs/runtime/package.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "name": "@wailsapp/runtime", - "version": "2.0.0", - "description": "Wails Javascript runtime library", - "main": "runtime.js", - "types": "runtime.d.ts", - "scripts": { - }, - "repository": { - "type": "git", - "url": "git+https://github.com/wailsapp/wails.git" - }, - "keywords": [ - "Wails", - "Javascript", - "Go" - ], - "author": "Lea Anthony ", - "license": "MIT", - "bugs": { - "url": "https://github.com/wailsapp/wails/issues" - }, - "homepage": "https://github.com/wailsapp/wails#readme" -} diff --git a/pkg/ui/web/wailsjs/runtime/runtime.d.ts b/pkg/ui/web/wailsjs/runtime/runtime.d.ts deleted file mode 100755 index a3723f94b..000000000 --- a/pkg/ui/web/wailsjs/runtime/runtime.d.ts +++ /dev/null @@ -1,235 +0,0 @@ -/* - _ __ _ __ -| | / /___ _(_) /____ -| | /| / / __ `/ / / ___/ -| |/ |/ / /_/ / / (__ ) -|__/|__/\__,_/_/_/____/ -The electron alternative for Go -(c) Lea Anthony 2019-present -*/ - -export interface Position { - x: number; - y: number; -} - -export interface Size { - w: number; - h: number; -} - -export interface Screen { - isCurrent: boolean; - isPrimary: boolean; - width : number - height : number -} - -// Environment information such as platform, buildtype, ... -export interface EnvironmentInfo { - buildType: string; - platform: string; - arch: string; -} - -// [EventsEmit](https://wails.io/docs/reference/runtime/events#eventsemit) -// emits the given event. Optional data may be passed with the event. -// This will trigger any event listeners. -export function EventsEmit(eventName: string, ...data: any): void; - -// [EventsOn](https://wails.io/docs/reference/runtime/events#eventson) sets up a listener for the given event name. -export function EventsOn(eventName: string, callback: (...data: any) => void): () => void; - -// [EventsOnMultiple](https://wails.io/docs/reference/runtime/events#eventsonmultiple) -// sets up a listener for the given event name, but will only trigger a given number times. -export function EventsOnMultiple(eventName: string, callback: (...data: any) => void, maxCallbacks: number): () => void; - -// [EventsOnce](https://wails.io/docs/reference/runtime/events#eventsonce) -// sets up a listener for the given event name, but will only trigger once. -export function EventsOnce(eventName: string, callback: (...data: any) => void): () => void; - -// [EventsOff](https://wails.io/docs/reference/runtime/events#eventsoff) -// unregisters the listener for the given event name. -export function EventsOff(eventName: string, ...additionalEventNames: string[]): void; - -// [EventsOffAll](https://wails.io/docs/reference/runtime/events#eventsoffall) -// unregisters all listeners. -export function EventsOffAll(): void; - -// [LogPrint](https://wails.io/docs/reference/runtime/log#logprint) -// logs the given message as a raw message -export function LogPrint(message: string): void; - -// [LogTrace](https://wails.io/docs/reference/runtime/log#logtrace) -// logs the given message at the `trace` log level. -export function LogTrace(message: string): void; - -// [LogDebug](https://wails.io/docs/reference/runtime/log#logdebug) -// logs the given message at the `debug` log level. -export function LogDebug(message: string): void; - -// [LogError](https://wails.io/docs/reference/runtime/log#logerror) -// logs the given message at the `error` log level. -export function LogError(message: string): void; - -// [LogFatal](https://wails.io/docs/reference/runtime/log#logfatal) -// logs the given message at the `fatal` log level. -// The application will quit after calling this method. -export function LogFatal(message: string): void; - -// [LogInfo](https://wails.io/docs/reference/runtime/log#loginfo) -// logs the given message at the `info` log level. -export function LogInfo(message: string): void; - -// [LogWarning](https://wails.io/docs/reference/runtime/log#logwarning) -// logs the given message at the `warning` log level. -export function LogWarning(message: string): void; - -// [WindowReload](https://wails.io/docs/reference/runtime/window#windowreload) -// Forces a reload by the main application as well as connected browsers. -export function WindowReload(): void; - -// [WindowReloadApp](https://wails.io/docs/reference/runtime/window#windowreloadapp) -// Reloads the application frontend. -export function WindowReloadApp(): void; - -// [WindowSetAlwaysOnTop](https://wails.io/docs/reference/runtime/window#windowsetalwaysontop) -// Sets the window AlwaysOnTop or not on top. -export function WindowSetAlwaysOnTop(b: boolean): void; - -// [WindowSetSystemDefaultTheme](https://wails.io/docs/next/reference/runtime/window#windowsetsystemdefaulttheme) -// *Windows only* -// Sets window theme to system default (dark/light). -export function WindowSetSystemDefaultTheme(): void; - -// [WindowSetLightTheme](https://wails.io/docs/next/reference/runtime/window#windowsetlighttheme) -// *Windows only* -// Sets window to light theme. -export function WindowSetLightTheme(): void; - -// [WindowSetDarkTheme](https://wails.io/docs/next/reference/runtime/window#windowsetdarktheme) -// *Windows only* -// Sets window to dark theme. -export function WindowSetDarkTheme(): void; - -// [WindowCenter](https://wails.io/docs/reference/runtime/window#windowcenter) -// Centers the window on the monitor the window is currently on. -export function WindowCenter(): void; - -// [WindowSetTitle](https://wails.io/docs/reference/runtime/window#windowsettitle) -// Sets the text in the window title bar. -export function WindowSetTitle(title: string): void; - -// [WindowFullscreen](https://wails.io/docs/reference/runtime/window#windowfullscreen) -// Makes the window full screen. -export function WindowFullscreen(): void; - -// [WindowUnfullscreen](https://wails.io/docs/reference/runtime/window#windowunfullscreen) -// Restores the previous window dimensions and position prior to full screen. -export function WindowUnfullscreen(): void; - -// [WindowIsFullscreen](https://wails.io/docs/reference/runtime/window#windowisfullscreen) -// Returns the state of the window, i.e. whether the window is in full screen mode or not. -export function WindowIsFullscreen(): Promise; - -// [WindowSetSize](https://wails.io/docs/reference/runtime/window#windowsetsize) -// Sets the width and height of the window. -export function WindowSetSize(width: number, height: number): Promise; - -// [WindowGetSize](https://wails.io/docs/reference/runtime/window#windowgetsize) -// Gets the width and height of the window. -export function WindowGetSize(): Promise; - -// [WindowSetMaxSize](https://wails.io/docs/reference/runtime/window#windowsetmaxsize) -// Sets the maximum window size. Will resize the window if the window is currently larger than the given dimensions. -// Setting a size of 0,0 will disable this constraint. -export function WindowSetMaxSize(width: number, height: number): void; - -// [WindowSetMinSize](https://wails.io/docs/reference/runtime/window#windowsetminsize) -// Sets the minimum window size. Will resize the window if the window is currently smaller than the given dimensions. -// Setting a size of 0,0 will disable this constraint. -export function WindowSetMinSize(width: number, height: number): void; - -// [WindowSetPosition](https://wails.io/docs/reference/runtime/window#windowsetposition) -// Sets the window position relative to the monitor the window is currently on. -export function WindowSetPosition(x: number, y: number): void; - -// [WindowGetPosition](https://wails.io/docs/reference/runtime/window#windowgetposition) -// Gets the window position relative to the monitor the window is currently on. -export function WindowGetPosition(): Promise; - -// [WindowHide](https://wails.io/docs/reference/runtime/window#windowhide) -// Hides the window. -export function WindowHide(): void; - -// [WindowShow](https://wails.io/docs/reference/runtime/window#windowshow) -// Shows the window, if it is currently hidden. -export function WindowShow(): void; - -// [WindowMaximise](https://wails.io/docs/reference/runtime/window#windowmaximise) -// Maximises the window to fill the screen. -export function WindowMaximise(): void; - -// [WindowToggleMaximise](https://wails.io/docs/reference/runtime/window#windowtogglemaximise) -// Toggles between Maximised and UnMaximised. -export function WindowToggleMaximise(): void; - -// [WindowUnmaximise](https://wails.io/docs/reference/runtime/window#windowunmaximise) -// Restores the window to the dimensions and position prior to maximising. -export function WindowUnmaximise(): void; - -// [WindowIsMaximised](https://wails.io/docs/reference/runtime/window#windowismaximised) -// Returns the state of the window, i.e. whether the window is maximised or not. -export function WindowIsMaximised(): Promise; - -// [WindowMinimise](https://wails.io/docs/reference/runtime/window#windowminimise) -// Minimises the window. -export function WindowMinimise(): void; - -// [WindowUnminimise](https://wails.io/docs/reference/runtime/window#windowunminimise) -// Restores the window to the dimensions and position prior to minimising. -export function WindowUnminimise(): void; - -// [WindowIsMinimised](https://wails.io/docs/reference/runtime/window#windowisminimised) -// Returns the state of the window, i.e. whether the window is minimised or not. -export function WindowIsMinimised(): Promise; - -// [WindowIsNormal](https://wails.io/docs/reference/runtime/window#windowisnormal) -// Returns the state of the window, i.e. whether the window is normal or not. -export function WindowIsNormal(): Promise; - -// [WindowSetBackgroundColour](https://wails.io/docs/reference/runtime/window#windowsetbackgroundcolour) -// Sets the background colour of the window to the given RGBA colour definition. This colour will show through for all transparent pixels. -export function WindowSetBackgroundColour(R: number, G: number, B: number, A: number): void; - -// [ScreenGetAll](https://wails.io/docs/reference/runtime/window#screengetall) -// Gets the all screens. Call this anew each time you want to refresh data from the underlying windowing system. -export function ScreenGetAll(): Promise; - -// [BrowserOpenURL](https://wails.io/docs/reference/runtime/browser#browseropenurl) -// Opens the given URL in the system browser. -export function BrowserOpenURL(url: string): void; - -// [Environment](https://wails.io/docs/reference/runtime/intro#environment) -// Returns information about the environment -export function Environment(): Promise; - -// [Quit](https://wails.io/docs/reference/runtime/intro#quit) -// Quits the application. -export function Quit(): void; - -// [Hide](https://wails.io/docs/reference/runtime/intro#hide) -// Hides the application. -export function Hide(): void; - -// [Show](https://wails.io/docs/reference/runtime/intro#show) -// Shows the application. -export function Show(): void; - -// [ClipboardGetText](https://wails.io/docs/reference/runtime/clipboard#clipboardgettext) -// Returns the current text stored on clipboard -export function ClipboardGetText(): Promise; - -// [ClipboardSetText](https://wails.io/docs/reference/runtime/clipboard#clipboardsettext) -// Sets a text on the clipboard -export function ClipboardSetText(text: string): Promise; diff --git a/pkg/ui/web/wailsjs/runtime/runtime.js b/pkg/ui/web/wailsjs/runtime/runtime.js deleted file mode 100755 index bd4f371ae..000000000 --- a/pkg/ui/web/wailsjs/runtime/runtime.js +++ /dev/null @@ -1,202 +0,0 @@ -/* - _ __ _ __ -| | / /___ _(_) /____ -| | /| / / __ `/ / / ___/ -| |/ |/ / /_/ / / (__ ) -|__/|__/\__,_/_/_/____/ -The electron alternative for Go -(c) Lea Anthony 2019-present -*/ - -export function LogPrint(message) { - window.runtime.LogPrint(message); -} - -export function LogTrace(message) { - window.runtime.LogTrace(message); -} - -export function LogDebug(message) { - window.runtime.LogDebug(message); -} - -export function LogInfo(message) { - window.runtime.LogInfo(message); -} - -export function LogWarning(message) { - window.runtime.LogWarning(message); -} - -export function LogError(message) { - window.runtime.LogError(message); -} - -export function LogFatal(message) { - window.runtime.LogFatal(message); -} - -export function EventsOnMultiple(eventName, callback, maxCallbacks) { - return window.runtime.EventsOnMultiple(eventName, callback, maxCallbacks); -} - -export function EventsOn(eventName, callback) { - return EventsOnMultiple(eventName, callback, -1); -} - -export function EventsOff(eventName, ...additionalEventNames) { - return window.runtime.EventsOff(eventName, ...additionalEventNames); -} - -export function EventsOnce(eventName, callback) { - return EventsOnMultiple(eventName, callback, 1); -} - -export function EventsEmit(eventName) { - let args = [eventName].slice.call(arguments); - return window.runtime.EventsEmit.apply(null, args); -} - -export function WindowReload() { - window.runtime.WindowReload(); -} - -export function WindowReloadApp() { - window.runtime.WindowReloadApp(); -} - -export function WindowSetAlwaysOnTop(b) { - window.runtime.WindowSetAlwaysOnTop(b); -} - -export function WindowSetSystemDefaultTheme() { - window.runtime.WindowSetSystemDefaultTheme(); -} - -export function WindowSetLightTheme() { - window.runtime.WindowSetLightTheme(); -} - -export function WindowSetDarkTheme() { - window.runtime.WindowSetDarkTheme(); -} - -export function WindowCenter() { - window.runtime.WindowCenter(); -} - -export function WindowSetTitle(title) { - window.runtime.WindowSetTitle(title); -} - -export function WindowFullscreen() { - window.runtime.WindowFullscreen(); -} - -export function WindowUnfullscreen() { - window.runtime.WindowUnfullscreen(); -} - -export function WindowIsFullscreen() { - return window.runtime.WindowIsFullscreen(); -} - -export function WindowGetSize() { - return window.runtime.WindowGetSize(); -} - -export function WindowSetSize(width, height) { - window.runtime.WindowSetSize(width, height); -} - -export function WindowSetMaxSize(width, height) { - window.runtime.WindowSetMaxSize(width, height); -} - -export function WindowSetMinSize(width, height) { - window.runtime.WindowSetMinSize(width, height); -} - -export function WindowSetPosition(x, y) { - window.runtime.WindowSetPosition(x, y); -} - -export function WindowGetPosition() { - return window.runtime.WindowGetPosition(); -} - -export function WindowHide() { - window.runtime.WindowHide(); -} - -export function WindowShow() { - window.runtime.WindowShow(); -} - -export function WindowMaximise() { - window.runtime.WindowMaximise(); -} - -export function WindowToggleMaximise() { - window.runtime.WindowToggleMaximise(); -} - -export function WindowUnmaximise() { - window.runtime.WindowUnmaximise(); -} - -export function WindowIsMaximised() { - return window.runtime.WindowIsMaximised(); -} - -export function WindowMinimise() { - window.runtime.WindowMinimise(); -} - -export function WindowUnminimise() { - window.runtime.WindowUnminimise(); -} - -export function WindowSetBackgroundColour(R, G, B, A) { - window.runtime.WindowSetBackgroundColour(R, G, B, A); -} - -export function ScreenGetAll() { - return window.runtime.ScreenGetAll(); -} - -export function WindowIsMinimised() { - return window.runtime.WindowIsMinimised(); -} - -export function WindowIsNormal() { - return window.runtime.WindowIsNormal(); -} - -export function BrowserOpenURL(url) { - window.runtime.BrowserOpenURL(url); -} - -export function Environment() { - return window.runtime.Environment(); -} - -export function Quit() { - window.runtime.Quit(); -} - -export function Hide() { - window.runtime.Hide(); -} - -export function Show() { - window.runtime.Show(); -} - -export function ClipboardGetText() { - return window.runtime.ClipboardGetText(); -} - -export function ClipboardSetText(text) { - return window.runtime.ClipboardSetText(text); -} \ No newline at end of file diff --git a/pkg/ui/web/yarn.lock b/pkg/ui/web/yarn.lock deleted file mode 100644 index c4f6be4a6..000000000 --- a/pkg/ui/web/yarn.lock +++ /dev/null @@ -1,11353 +0,0 @@ -# This file is generated by running "yarn install" inside your project. -# Manual changes might be lost - proceed with caution! - -__metadata: - version: 6 - cacheKey: 8 - -"@absinthe/socket-apollo-link@npm:0.2.1": - version: 0.2.1 - resolution: "@absinthe/socket-apollo-link@npm:0.2.1" - dependencies: - "@absinthe/socket": 0.2.1 - "@babel/runtime": 7.2.0 - apollo-link: 1.2.5 - core-js: 2.6.0 - flow-static-land: 0.2.8 - graphql: 14.0.2 - zen-observable: 0.8.11 - checksum: 238c276a8995e6a316561aeb43eb1b36da8b778ccc4cb556d6ddbfd75b233b359dbdf3c957823234b13194d357ae7536d93848689767896787ba3c360e33e2ec - languageName: node - linkType: hard - -"@absinthe/socket@npm:0.2.1": - version: 0.2.1 - resolution: "@absinthe/socket@npm:0.2.1" - dependencies: - "@babel/runtime": 7.2.0 - "@jumpn/utils-array": 0.3.4 - "@jumpn/utils-composite": 0.7.0 - "@jumpn/utils-graphql": 0.6.0 - core-js: 2.6.0 - zen-observable: 0.8.11 - peerDependencies: - phoenix: ^1.4.0 - checksum: c9601b18f5036b123a82b5c59fbb2ca3c8031ccb510d1cf70e0dda5fcba88979886caff1fc4c8590ab2e8c8e98004a37421d404261343351adab7ec6ef1f82fd - languageName: node - linkType: hard - -"@ampproject/remapping@npm:^2.1.0, @ampproject/remapping@npm:^2.2.0": - version: 2.2.0 - resolution: "@ampproject/remapping@npm:2.2.0" - dependencies: - "@jridgewell/gen-mapping": ^0.1.0 - "@jridgewell/trace-mapping": ^0.3.9 - checksum: d74d170d06468913921d72430259424b7e4c826b5a7d39ff839a29d547efb97dc577caa8ba3fb5cf023624e9af9d09651afc3d4112a45e2050328abc9b3a2292 - languageName: node - linkType: hard - -"@apollo/client@npm:3.7.10": - version: 3.7.10 - resolution: "@apollo/client@npm:3.7.10" - dependencies: - "@graphql-typed-document-node/core": ^3.1.1 - "@wry/context": ^0.7.0 - "@wry/equality": ^0.5.0 - "@wry/trie": ^0.3.0 - graphql-tag: ^2.12.6 - hoist-non-react-statics: ^3.3.2 - optimism: ^0.16.1 - prop-types: ^15.7.2 - response-iterator: ^0.2.6 - symbol-observable: ^4.0.0 - ts-invariant: ^0.10.3 - tslib: ^2.3.0 - zen-observable-ts: ^1.2.5 - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 - graphql-ws: ^5.5.5 - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - subscriptions-transport-ws: ^0.9.0 || ^0.11.0 - peerDependenciesMeta: - graphql-ws: - optional: true - react: - optional: true - react-dom: - optional: true - subscriptions-transport-ws: - optional: true - checksum: d74a68f8042e76e3a81990c79a89aefc07c8899d354f3b469591356508001005106bba0fa953652c3ec19756d44bdec6730ac98f62fa836bd76acbcb7eff42ce - languageName: node - linkType: hard - -"@ardatan/relay-compiler@npm:12.0.0": - version: 12.0.0 - resolution: "@ardatan/relay-compiler@npm:12.0.0" - dependencies: - "@babel/core": ^7.14.0 - "@babel/generator": ^7.14.0 - "@babel/parser": ^7.14.0 - "@babel/runtime": ^7.0.0 - "@babel/traverse": ^7.14.0 - "@babel/types": ^7.0.0 - babel-preset-fbjs: ^3.4.0 - chalk: ^4.0.0 - fb-watchman: ^2.0.0 - fbjs: ^3.0.0 - glob: ^7.1.1 - immutable: ~3.7.6 - invariant: ^2.2.4 - nullthrows: ^1.1.1 - relay-runtime: 12.0.0 - signedsource: ^1.0.0 - yargs: ^15.3.1 - peerDependencies: - graphql: "*" - bin: - relay-compiler: bin/relay-compiler - checksum: f0cec120d02961ee8652e0dde72d9e425bc97cad5d0f767d8764cfd30952294eb2838432f33e4da8bb6999d0c13dcd1df128280666bfea373294d98aa8033ae7 - languageName: node - linkType: hard - -"@ardatan/sync-fetch@npm:^0.0.1": - version: 0.0.1 - resolution: "@ardatan/sync-fetch@npm:0.0.1" - dependencies: - node-fetch: ^2.6.1 - checksum: af39bdfb4c2b35bd2c6acc540a5e302730dae17e73d3a18cd1a4aa50c1c741cb1869dffdef1379c491da5ad2e3cfa2bf3a8064e6046c12b46c6a97f54f100a8d - languageName: node - linkType: hard - -"@babel/code-frame@npm:^7.0.0, @babel/code-frame@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/code-frame@npm:7.18.6" - dependencies: - "@babel/highlight": ^7.18.6 - checksum: 195e2be3172d7684bf95cff69ae3b7a15a9841ea9d27d3c843662d50cdd7d6470fd9c8e64be84d031117e4a4083486effba39f9aef6bbb2c89f7f21bcfba33ba - languageName: node - linkType: hard - -"@babel/compat-data@npm:^7.17.7, @babel/compat-data@npm:^7.20.1, @babel/compat-data@npm:^7.20.5": - version: 7.21.0 - resolution: "@babel/compat-data@npm:7.21.0" - checksum: dbf632c532f9c75ba0be7d1dc9f6cd3582501af52f10a6b90415d634ec5878735bd46064c91673b10317af94d4cc99c4da5bd9d955978cdccb7905fc33291e4d - languageName: node - linkType: hard - -"@babel/core@npm:7.20.12": - version: 7.20.12 - resolution: "@babel/core@npm:7.20.12" - dependencies: - "@ampproject/remapping": ^2.1.0 - "@babel/code-frame": ^7.18.6 - "@babel/generator": ^7.20.7 - "@babel/helper-compilation-targets": ^7.20.7 - "@babel/helper-module-transforms": ^7.20.11 - "@babel/helpers": ^7.20.7 - "@babel/parser": ^7.20.7 - "@babel/template": ^7.20.7 - "@babel/traverse": ^7.20.12 - "@babel/types": ^7.20.7 - convert-source-map: ^1.7.0 - debug: ^4.1.0 - gensync: ^1.0.0-beta.2 - json5: ^2.2.2 - semver: ^6.3.0 - checksum: 62e6c3e2149a70b5c9729ef5f0d3e2e97e9dcde89fc039c8d8e3463d5d7ba9b29ee84d10faf79b61532ac1645aa62f2bd42338320617e6e3a8a4d8e2a27076e7 - languageName: node - linkType: hard - -"@babel/core@npm:^7.14.0, @babel/core@npm:^7.20.12": - version: 7.21.3 - resolution: "@babel/core@npm:7.21.3" - dependencies: - "@ampproject/remapping": ^2.2.0 - "@babel/code-frame": ^7.18.6 - "@babel/generator": ^7.21.3 - "@babel/helper-compilation-targets": ^7.20.7 - "@babel/helper-module-transforms": ^7.21.2 - "@babel/helpers": ^7.21.0 - "@babel/parser": ^7.21.3 - "@babel/template": ^7.20.7 - "@babel/traverse": ^7.21.3 - "@babel/types": ^7.21.3 - convert-source-map: ^1.7.0 - debug: ^4.1.0 - gensync: ^1.0.0-beta.2 - json5: ^2.2.2 - semver: ^6.3.0 - checksum: bef25fbea96f461bf79bd1d0e4f0cdce679fd5ada464a89c1141ddba59ae1adfdbb23e04440c266ed525712d33d5ffd818cd8b0c25b1dee0e648d5559516153a - languageName: node - linkType: hard - -"@babel/eslint-parser@npm:7.19.1": - version: 7.19.1 - resolution: "@babel/eslint-parser@npm:7.19.1" - dependencies: - "@nicolo-ribaudo/eslint-scope-5-internals": 5.1.1-v1 - eslint-visitor-keys: ^2.1.0 - semver: ^6.3.0 - peerDependencies: - "@babel/core": ">=7.11.0" - eslint: ^7.5.0 || ^8.0.0 - checksum: 6d5360f62f25ed097250657deb1bc4c4f51a5f5f2fe456e98cda13727753fdf7a11a109b4cfa03ef0dd6ced3beaeb703b76193c1141e29434d1f91f1bac0517d - languageName: node - linkType: hard - -"@babel/generator@npm:^7.14.0, @babel/generator@npm:^7.18.13, @babel/generator@npm:^7.20.7, @babel/generator@npm:^7.21.3": - version: 7.21.3 - resolution: "@babel/generator@npm:7.21.3" - dependencies: - "@babel/types": ^7.21.3 - "@jridgewell/gen-mapping": ^0.3.2 - "@jridgewell/trace-mapping": ^0.3.17 - jsesc: ^2.5.1 - checksum: be6bb5a32a0273260b91210d4137b7b5da148a2db8dd324654275cb0af865ae59de5e1536e93ac83423b2586415059e1c24cf94293026755cf995757238da749 - languageName: node - linkType: hard - -"@babel/generator@npm:^7.21.1": - version: 7.21.1 - resolution: "@babel/generator@npm:7.21.1" - dependencies: - "@babel/types": ^7.21.0 - "@jridgewell/gen-mapping": ^0.3.2 - "@jridgewell/trace-mapping": ^0.3.17 - jsesc: ^2.5.1 - checksum: 69085a211ff91a7a608ee3f86e6fcb9cf5e724b756d792a713b0c328a671cd3e423e1ef1b12533f366baba0616caffe0a7ba9d328727eab484de5961badbef00 - languageName: node - linkType: hard - -"@babel/helper-annotate-as-pure@npm:^7.16.0, @babel/helper-annotate-as-pure@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/helper-annotate-as-pure@npm:7.18.6" - dependencies: - "@babel/types": ^7.18.6 - checksum: 88ccd15ced475ef2243fdd3b2916a29ea54c5db3cd0cfabf9d1d29ff6e63b7f7cd1c27264137d7a40ac2e978b9b9a542c332e78f40eb72abe737a7400788fc1b - languageName: node - linkType: hard - -"@babel/helper-builder-binary-assignment-operator-visitor@npm:^7.18.6": - version: 7.18.9 - resolution: "@babel/helper-builder-binary-assignment-operator-visitor@npm:7.18.9" - dependencies: - "@babel/helper-explode-assignable-expression": ^7.18.6 - "@babel/types": ^7.18.9 - checksum: b4bc214cb56329daff6cc18a7f7a26aeafb55a1242e5362f3d47fe3808421f8c7cd91fff95d6b9b7ccb67e14e5a67d944e49dbe026942bfcbfda19b1c72a8e72 - languageName: node - linkType: hard - -"@babel/helper-compilation-targets@npm:^7.17.7, @babel/helper-compilation-targets@npm:^7.18.9, @babel/helper-compilation-targets@npm:^7.20.0, @babel/helper-compilation-targets@npm:^7.20.7": - version: 7.20.7 - resolution: "@babel/helper-compilation-targets@npm:7.20.7" - dependencies: - "@babel/compat-data": ^7.20.5 - "@babel/helper-validator-option": ^7.18.6 - browserslist: ^4.21.3 - lru-cache: ^5.1.1 - semver: ^6.3.0 - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 8c32c873ba86e2e1805b30e0807abd07188acbe00ebb97576f0b09061cc65007f1312b589eccb4349c5a8c7f8bb9f2ab199d41da7030bf103d9f347dcd3a3cf4 - languageName: node - linkType: hard - -"@babel/helper-create-class-features-plugin@npm:^7.18.6, @babel/helper-create-class-features-plugin@npm:^7.21.0": - version: 7.21.0 - resolution: "@babel/helper-create-class-features-plugin@npm:7.21.0" - dependencies: - "@babel/helper-annotate-as-pure": ^7.18.6 - "@babel/helper-environment-visitor": ^7.18.9 - "@babel/helper-function-name": ^7.21.0 - "@babel/helper-member-expression-to-functions": ^7.21.0 - "@babel/helper-optimise-call-expression": ^7.18.6 - "@babel/helper-replace-supers": ^7.20.7 - "@babel/helper-skip-transparent-expression-wrappers": ^7.20.0 - "@babel/helper-split-export-declaration": ^7.18.6 - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 3e781d91d1056ea9b3a0395f3017492594a8b86899119b4a1645227c31727b8bec9bc8f6b72e86b1c5cf2dd6690893d2e8c5baff4974c429e616ead089552a21 - languageName: node - linkType: hard - -"@babel/helper-create-regexp-features-plugin@npm:^7.18.6, @babel/helper-create-regexp-features-plugin@npm:^7.20.5": - version: 7.21.0 - resolution: "@babel/helper-create-regexp-features-plugin@npm:7.21.0" - dependencies: - "@babel/helper-annotate-as-pure": ^7.18.6 - regexpu-core: ^5.3.1 - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 63a6396a4e9444edc7e97617845583ea5cf059573d0b4cc566869f38576d543e37fde0edfcc21d6dfb7962ed241e909561714dc41c5213198bac04e0983b04f2 - languageName: node - linkType: hard - -"@babel/helper-define-polyfill-provider@npm:^0.3.3": - version: 0.3.3 - resolution: "@babel/helper-define-polyfill-provider@npm:0.3.3" - dependencies: - "@babel/helper-compilation-targets": ^7.17.7 - "@babel/helper-plugin-utils": ^7.16.7 - debug: ^4.1.1 - lodash.debounce: ^4.0.8 - resolve: ^1.14.2 - semver: ^6.1.2 - peerDependencies: - "@babel/core": ^7.4.0-0 - checksum: 8e3fe75513302e34f6d92bd67b53890e8545e6c5bca8fe757b9979f09d68d7e259f6daea90dc9e01e332c4f8781bda31c5fe551c82a277f9bc0bec007aed497c - languageName: node - linkType: hard - -"@babel/helper-environment-visitor@npm:^7.18.9": - version: 7.18.9 - resolution: "@babel/helper-environment-visitor@npm:7.18.9" - checksum: b25101f6162ddca2d12da73942c08ad203d7668e06663df685634a8fde54a98bc015f6f62938e8554457a592a024108d45b8f3e651fd6dcdb877275b73cc4420 - languageName: node - linkType: hard - -"@babel/helper-explode-assignable-expression@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/helper-explode-assignable-expression@npm:7.18.6" - dependencies: - "@babel/types": ^7.18.6 - checksum: 225cfcc3376a8799023d15dc95000609e9d4e7547b29528c7f7111a0e05493ffb12c15d70d379a0bb32d42752f340233c4115bded6d299bc0c3ab7a12be3d30f - languageName: node - linkType: hard - -"@babel/helper-function-name@npm:^7.18.9, @babel/helper-function-name@npm:^7.19.0, @babel/helper-function-name@npm:^7.21.0": - version: 7.21.0 - resolution: "@babel/helper-function-name@npm:7.21.0" - dependencies: - "@babel/template": ^7.20.7 - "@babel/types": ^7.21.0 - checksum: d63e63c3e0e3e8b3138fa47b0cd321148a300ef12b8ee951196994dcd2a492cc708aeda94c2c53759a5c9177fffaac0fd8778791286746f72a000976968daf4e - languageName: node - linkType: hard - -"@babel/helper-hoist-variables@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/helper-hoist-variables@npm:7.18.6" - dependencies: - "@babel/types": ^7.18.6 - checksum: fd9c35bb435fda802bf9ff7b6f2df06308a21277c6dec2120a35b09f9de68f68a33972e2c15505c1a1a04b36ec64c9ace97d4a9e26d6097b76b4396b7c5fa20f - languageName: node - linkType: hard - -"@babel/helper-member-expression-to-functions@npm:^7.20.7, @babel/helper-member-expression-to-functions@npm:^7.21.0": - version: 7.21.0 - resolution: "@babel/helper-member-expression-to-functions@npm:7.21.0" - dependencies: - "@babel/types": ^7.21.0 - checksum: 49cbb865098195fe82ba22da3a8fe630cde30dcd8ebf8ad5f9a24a2b685150c6711419879cf9d99b94dad24cff9244d8c2a890d3d7ec75502cd01fe58cff5b5d - languageName: node - linkType: hard - -"@babel/helper-module-imports@npm:^7.0.0, @babel/helper-module-imports@npm:^7.16.0, @babel/helper-module-imports@npm:^7.16.7, @babel/helper-module-imports@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/helper-module-imports@npm:7.18.6" - dependencies: - "@babel/types": ^7.18.6 - checksum: f393f8a3b3304b1b7a288a38c10989de754f01d29caf62ce7c4e5835daf0a27b81f3ac687d9d2780d39685aae7b55267324b512150e7b2be967b0c493b6a1def - languageName: node - linkType: hard - -"@babel/helper-module-transforms@npm:^7.18.6, @babel/helper-module-transforms@npm:^7.20.11, @babel/helper-module-transforms@npm:^7.21.2": - version: 7.21.2 - resolution: "@babel/helper-module-transforms@npm:7.21.2" - dependencies: - "@babel/helper-environment-visitor": ^7.18.9 - "@babel/helper-module-imports": ^7.18.6 - "@babel/helper-simple-access": ^7.20.2 - "@babel/helper-split-export-declaration": ^7.18.6 - "@babel/helper-validator-identifier": ^7.19.1 - "@babel/template": ^7.20.7 - "@babel/traverse": ^7.21.2 - "@babel/types": ^7.21.2 - checksum: 8a1c129a4f90bdf97d8b6e7861732c9580f48f877aaaafbc376ce2482febebcb8daaa1de8bc91676d12886487603f8c62a44f9e90ee76d6cac7f9225b26a49e1 - languageName: node - linkType: hard - -"@babel/helper-optimise-call-expression@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/helper-optimise-call-expression@npm:7.18.6" - dependencies: - "@babel/types": ^7.18.6 - checksum: e518fe8418571405e21644cfb39cf694f30b6c47b10b006609a92469ae8b8775cbff56f0b19732343e2ea910641091c5a2dc73b56ceba04e116a33b0f8bd2fbd - languageName: node - linkType: hard - -"@babel/helper-plugin-utils@npm:^7.0.0, @babel/helper-plugin-utils@npm:^7.10.4, @babel/helper-plugin-utils@npm:^7.12.13, @babel/helper-plugin-utils@npm:^7.14.5, @babel/helper-plugin-utils@npm:^7.16.7, @babel/helper-plugin-utils@npm:^7.18.6, @babel/helper-plugin-utils@npm:^7.18.9, @babel/helper-plugin-utils@npm:^7.19.0, @babel/helper-plugin-utils@npm:^7.20.2, @babel/helper-plugin-utils@npm:^7.8.0, @babel/helper-plugin-utils@npm:^7.8.3": - version: 7.20.2 - resolution: "@babel/helper-plugin-utils@npm:7.20.2" - checksum: f6cae53b7fdb1bf3abd50fa61b10b4470985b400cc794d92635da1e7077bb19729f626adc0741b69403d9b6e411cddddb9c0157a709cc7c4eeb41e663be5d74b - languageName: node - linkType: hard - -"@babel/helper-remap-async-to-generator@npm:^7.18.9": - version: 7.18.9 - resolution: "@babel/helper-remap-async-to-generator@npm:7.18.9" - dependencies: - "@babel/helper-annotate-as-pure": ^7.18.6 - "@babel/helper-environment-visitor": ^7.18.9 - "@babel/helper-wrap-function": ^7.18.9 - "@babel/types": ^7.18.9 - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 4be6076192308671b046245899b703ba090dbe7ad03e0bea897bb2944ae5b88e5e85853c9d1f83f643474b54c578d8ac0800b80341a86e8538264a725fbbefec - languageName: node - linkType: hard - -"@babel/helper-replace-supers@npm:^7.18.6, @babel/helper-replace-supers@npm:^7.20.7": - version: 7.20.7 - resolution: "@babel/helper-replace-supers@npm:7.20.7" - dependencies: - "@babel/helper-environment-visitor": ^7.18.9 - "@babel/helper-member-expression-to-functions": ^7.20.7 - "@babel/helper-optimise-call-expression": ^7.18.6 - "@babel/template": ^7.20.7 - "@babel/traverse": ^7.20.7 - "@babel/types": ^7.20.7 - checksum: b8e0087c9b0c1446e3c6f3f72b73b7e03559c6b570e2cfbe62c738676d9ebd8c369a708cf1a564ef88113b4330750a50232ee1131d303d478b7a5e65e46fbc7c - languageName: node - linkType: hard - -"@babel/helper-simple-access@npm:^7.20.2": - version: 7.20.2 - resolution: "@babel/helper-simple-access@npm:7.20.2" - dependencies: - "@babel/types": ^7.20.2 - checksum: ad1e96ee2e5f654ffee2369a586e5e8d2722bf2d8b028a121b4c33ebae47253f64d420157b9f0a8927aea3a9e0f18c0103e74fdd531815cf3650a0a4adca11a1 - languageName: node - linkType: hard - -"@babel/helper-skip-transparent-expression-wrappers@npm:^7.20.0": - version: 7.20.0 - resolution: "@babel/helper-skip-transparent-expression-wrappers@npm:7.20.0" - dependencies: - "@babel/types": ^7.20.0 - checksum: 34da8c832d1c8a546e45d5c1d59755459ffe43629436707079989599b91e8c19e50e73af7a4bd09c95402d389266731b0d9c5f69e372d8ebd3a709c05c80d7dd - languageName: node - linkType: hard - -"@babel/helper-split-export-declaration@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/helper-split-export-declaration@npm:7.18.6" - dependencies: - "@babel/types": ^7.18.6 - checksum: c6d3dede53878f6be1d869e03e9ffbbb36f4897c7cc1527dc96c56d127d834ffe4520a6f7e467f5b6f3c2843ea0e81a7819d66ae02f707f6ac057f3d57943a2b - languageName: node - linkType: hard - -"@babel/helper-string-parser@npm:^7.19.4": - version: 7.19.4 - resolution: "@babel/helper-string-parser@npm:7.19.4" - checksum: b2f8a3920b30dfac81ec282ac4ad9598ea170648f8254b10f475abe6d944808fb006aab325d3eb5a8ad3bea8dfa888cfa6ef471050dae5748497c110ec060943 - languageName: node - linkType: hard - -"@babel/helper-validator-identifier@npm:^7.18.6, @babel/helper-validator-identifier@npm:^7.19.1": - version: 7.19.1 - resolution: "@babel/helper-validator-identifier@npm:7.19.1" - checksum: 0eca5e86a729162af569b46c6c41a63e18b43dbe09fda1d2a3c8924f7d617116af39cac5e4cd5d431bb760b4dca3c0970e0c444789b1db42bcf1fa41fbad0a3a - languageName: node - linkType: hard - -"@babel/helper-validator-option@npm:^7.18.6": - version: 7.21.0 - resolution: "@babel/helper-validator-option@npm:7.21.0" - checksum: 8ece4c78ffa5461fd8ab6b6e57cc51afad59df08192ed5d84b475af4a7193fc1cb794b59e3e7be64f3cdc4df7ac78bf3dbb20c129d7757ae078e6279ff8c2f07 - languageName: node - linkType: hard - -"@babel/helper-wrap-function@npm:^7.18.9": - version: 7.20.5 - resolution: "@babel/helper-wrap-function@npm:7.20.5" - dependencies: - "@babel/helper-function-name": ^7.19.0 - "@babel/template": ^7.18.10 - "@babel/traverse": ^7.20.5 - "@babel/types": ^7.20.5 - checksum: 11a6fc28334368a193a9cb3ad16f29cd7603bab958433efc82ebe59fa6556c227faa24f07ce43983f7a85df826f71d441638442c4315e90a554fe0a70ca5005b - languageName: node - linkType: hard - -"@babel/helpers@npm:^7.20.7, @babel/helpers@npm:^7.21.0": - version: 7.21.0 - resolution: "@babel/helpers@npm:7.21.0" - dependencies: - "@babel/template": ^7.20.7 - "@babel/traverse": ^7.21.0 - "@babel/types": ^7.21.0 - checksum: 9370dad2bb665c551869a08ac87c8bdafad53dbcdce1f5c5d498f51811456a3c005d9857562715151a0f00b2e912ac8d89f56574f837b5689f5f5072221cdf54 - languageName: node - linkType: hard - -"@babel/highlight@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/highlight@npm:7.18.6" - dependencies: - "@babel/helper-validator-identifier": ^7.18.6 - chalk: ^2.0.0 - js-tokens: ^4.0.0 - checksum: 92d8ee61549de5ff5120e945e774728e5ccd57fd3b2ed6eace020ec744823d4a98e242be1453d21764a30a14769ecd62170fba28539b211799bbaf232bbb2789 - languageName: node - linkType: hard - -"@babel/parser@npm:^7.14.0, @babel/parser@npm:^7.16.8, @babel/parser@npm:^7.21.3": - version: 7.21.3 - resolution: "@babel/parser@npm:7.21.3" - bin: - parser: ./bin/babel-parser.js - checksum: a71e6456a1260c2a943736b56cc0acdf5f2a53c6c79e545f56618967e51f9b710d1d3359264e7c979313a7153741b1d95ad8860834cc2ab4ce4f428b13cc07be - languageName: node - linkType: hard - -"@babel/parser@npm:^7.20.7, @babel/parser@npm:^7.21.2": - version: 7.21.2 - resolution: "@babel/parser@npm:7.21.2" - bin: - parser: ./bin/babel-parser.js - checksum: e2b89de2c63d4cdd2cafeaea34f389bba729727eec7a8728f736bc472a59396059e3e9fe322c9bed8fd126d201fb609712949dc8783f4cae4806acd9a73da6ff - languageName: node - linkType: hard - -"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:7.18.6" - dependencies: - "@babel/helper-plugin-utils": ^7.18.6 - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 845bd280c55a6a91d232cfa54eaf9708ec71e594676fe705794f494bb8b711d833b752b59d1a5c154695225880c23dbc9cab0e53af16fd57807976cd3ff41b8d - languageName: node - linkType: hard - -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:^7.18.9": - version: 7.20.7 - resolution: "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:7.20.7" - dependencies: - "@babel/helper-plugin-utils": ^7.20.2 - "@babel/helper-skip-transparent-expression-wrappers": ^7.20.0 - "@babel/plugin-proposal-optional-chaining": ^7.20.7 - peerDependencies: - "@babel/core": ^7.13.0 - checksum: d610f532210bee5342f5b44a12395ccc6d904e675a297189bc1e401cc185beec09873da523466d7fec34ae1574f7a384235cba1ccc9fe7b89ba094167897c845 - languageName: node - linkType: hard - -"@babel/plugin-proposal-async-generator-functions@npm:^7.20.1": - version: 7.20.7 - resolution: "@babel/plugin-proposal-async-generator-functions@npm:7.20.7" - dependencies: - "@babel/helper-environment-visitor": ^7.18.9 - "@babel/helper-plugin-utils": ^7.20.2 - "@babel/helper-remap-async-to-generator": ^7.18.9 - "@babel/plugin-syntax-async-generators": ^7.8.4 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 111109ee118c9e69982f08d5e119eab04190b36a0f40e22e873802d941956eee66d2aa5a15f5321e51e3f9aa70a91136451b987fe15185ef8cc547ac88937723 - languageName: node - linkType: hard - -"@babel/plugin-proposal-class-properties@npm:^7.0.0, @babel/plugin-proposal-class-properties@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/plugin-proposal-class-properties@npm:7.18.6" - dependencies: - "@babel/helper-create-class-features-plugin": ^7.18.6 - "@babel/helper-plugin-utils": ^7.18.6 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 49a78a2773ec0db56e915d9797e44fd079ab8a9b2e1716e0df07c92532f2c65d76aeda9543883916b8e0ff13606afeffa67c5b93d05b607bc87653ad18a91422 - languageName: node - linkType: hard - -"@babel/plugin-proposal-class-static-block@npm:^7.18.6": - version: 7.21.0 - resolution: "@babel/plugin-proposal-class-static-block@npm:7.21.0" - dependencies: - "@babel/helper-create-class-features-plugin": ^7.21.0 - "@babel/helper-plugin-utils": ^7.20.2 - "@babel/plugin-syntax-class-static-block": ^7.14.5 - peerDependencies: - "@babel/core": ^7.12.0 - checksum: 236c0ad089e7a7acab776cc1d355330193314bfcd62e94e78f2df35817c6144d7e0e0368976778afd6b7c13e70b5068fa84d7abbf967d4f182e60d03f9ef802b - languageName: node - linkType: hard - -"@babel/plugin-proposal-dynamic-import@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/plugin-proposal-dynamic-import@npm:7.18.6" - dependencies: - "@babel/helper-plugin-utils": ^7.18.6 - "@babel/plugin-syntax-dynamic-import": ^7.8.3 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 96b1c8a8ad8171d39e9ab106be33bde37ae09b22fb2c449afee9a5edf3c537933d79d963dcdc2694d10677cb96da739cdf1b53454e6a5deab9801f28a818bb2f - languageName: node - linkType: hard - -"@babel/plugin-proposal-export-namespace-from@npm:^7.18.9": - version: 7.18.9 - resolution: "@babel/plugin-proposal-export-namespace-from@npm:7.18.9" - dependencies: - "@babel/helper-plugin-utils": ^7.18.9 - "@babel/plugin-syntax-export-namespace-from": ^7.8.3 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 84ff22bacc5d30918a849bfb7e0e90ae4c5b8d8b65f2ac881803d1cf9068dffbe53bd657b0e4bc4c20b4db301b1c85f1e74183cf29a0dd31e964bd4e97c363ef - languageName: node - linkType: hard - -"@babel/plugin-proposal-json-strings@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/plugin-proposal-json-strings@npm:7.18.6" - dependencies: - "@babel/helper-plugin-utils": ^7.18.6 - "@babel/plugin-syntax-json-strings": ^7.8.3 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 25ba0e6b9d6115174f51f7c6787e96214c90dd4026e266976b248a2ed417fe50fddae72843ffb3cbe324014a18632ce5648dfac77f089da858022b49fd608cb3 - languageName: node - linkType: hard - -"@babel/plugin-proposal-logical-assignment-operators@npm:^7.18.9": - version: 7.20.7 - resolution: "@babel/plugin-proposal-logical-assignment-operators@npm:7.20.7" - dependencies: - "@babel/helper-plugin-utils": ^7.20.2 - "@babel/plugin-syntax-logical-assignment-operators": ^7.10.4 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: cdd7b8136cc4db3f47714d5266f9e7b592a2ac5a94a5878787ce08890e97c8ab1ca8e94b27bfeba7b0f2b1549a026d9fc414ca2196de603df36fb32633bbdc19 - languageName: node - linkType: hard - -"@babel/plugin-proposal-nullish-coalescing-operator@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/plugin-proposal-nullish-coalescing-operator@npm:7.18.6" - dependencies: - "@babel/helper-plugin-utils": ^7.18.6 - "@babel/plugin-syntax-nullish-coalescing-operator": ^7.8.3 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 949c9ddcdecdaec766ee610ef98f965f928ccc0361dd87cf9f88cf4896a6ccd62fce063d4494778e50da99dea63d270a1be574a62d6ab81cbe9d85884bf55a7d - languageName: node - linkType: hard - -"@babel/plugin-proposal-numeric-separator@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/plugin-proposal-numeric-separator@npm:7.18.6" - dependencies: - "@babel/helper-plugin-utils": ^7.18.6 - "@babel/plugin-syntax-numeric-separator": ^7.10.4 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: f370ea584c55bf4040e1f78c80b4eeb1ce2e6aaa74f87d1a48266493c33931d0b6222d8cee3a082383d6bb648ab8d6b7147a06f974d3296ef3bc39c7851683ec - languageName: node - linkType: hard - -"@babel/plugin-proposal-object-rest-spread@npm:^7.0.0, @babel/plugin-proposal-object-rest-spread@npm:^7.20.2": - version: 7.20.7 - resolution: "@babel/plugin-proposal-object-rest-spread@npm:7.20.7" - dependencies: - "@babel/compat-data": ^7.20.5 - "@babel/helper-compilation-targets": ^7.20.7 - "@babel/helper-plugin-utils": ^7.20.2 - "@babel/plugin-syntax-object-rest-spread": ^7.8.3 - "@babel/plugin-transform-parameters": ^7.20.7 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 1329db17009964bc644484c660eab717cb3ca63ac0ab0f67c651a028d1bc2ead51dc4064caea283e46994f1b7221670a35cbc0b4beb6273f55e915494b5aa0b2 - languageName: node - linkType: hard - -"@babel/plugin-proposal-optional-catch-binding@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/plugin-proposal-optional-catch-binding@npm:7.18.6" - dependencies: - "@babel/helper-plugin-utils": ^7.18.6 - "@babel/plugin-syntax-optional-catch-binding": ^7.8.3 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 7b5b39fb5d8d6d14faad6cb68ece5eeb2fd550fb66b5af7d7582402f974f5bc3684641f7c192a5a57e0f59acfae4aada6786be1eba030881ddc590666eff4d1e - languageName: node - linkType: hard - -"@babel/plugin-proposal-optional-chaining@npm:^7.18.9, @babel/plugin-proposal-optional-chaining@npm:^7.20.7": - version: 7.21.0 - resolution: "@babel/plugin-proposal-optional-chaining@npm:7.21.0" - dependencies: - "@babel/helper-plugin-utils": ^7.20.2 - "@babel/helper-skip-transparent-expression-wrappers": ^7.20.0 - "@babel/plugin-syntax-optional-chaining": ^7.8.3 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 11c5449e01b18bb8881e8e005a577fa7be2fe5688e2382c8822d51f8f7005342a301a46af7b273b1f5645f9a7b894c428eee8526342038a275ef6ba4c8d8d746 - languageName: node - linkType: hard - -"@babel/plugin-proposal-private-methods@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/plugin-proposal-private-methods@npm:7.18.6" - dependencies: - "@babel/helper-create-class-features-plugin": ^7.18.6 - "@babel/helper-plugin-utils": ^7.18.6 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 22d8502ee96bca99ad2c8393e8493e2b8d4507576dd054490fd8201a36824373440106f5b098b6d821b026c7e72b0424ff4aeca69ed5f42e48f029d3a156d5ad - languageName: node - linkType: hard - -"@babel/plugin-proposal-private-property-in-object@npm:^7.18.6": - version: 7.21.0 - resolution: "@babel/plugin-proposal-private-property-in-object@npm:7.21.0" - dependencies: - "@babel/helper-annotate-as-pure": ^7.18.6 - "@babel/helper-create-class-features-plugin": ^7.21.0 - "@babel/helper-plugin-utils": ^7.20.2 - "@babel/plugin-syntax-private-property-in-object": ^7.14.5 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: add881a6a836635c41d2710551fdf777e2c07c0b691bf2baacc5d658dd64107479df1038680d6e67c468bfc6f36fb8920025d6bac2a1df0a81b867537d40ae78 - languageName: node - linkType: hard - -"@babel/plugin-proposal-unicode-property-regex@npm:^7.18.6, @babel/plugin-proposal-unicode-property-regex@npm:^7.4.4": - version: 7.18.6 - resolution: "@babel/plugin-proposal-unicode-property-regex@npm:7.18.6" - dependencies: - "@babel/helper-create-regexp-features-plugin": ^7.18.6 - "@babel/helper-plugin-utils": ^7.18.6 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: a8575ecb7ff24bf6c6e94808d5c84bb5a0c6dd7892b54f09f4646711ba0ee1e1668032b3c43e3e1dfec2c5716c302e851ac756c1645e15882d73df6ad21ae951 - languageName: node - linkType: hard - -"@babel/plugin-syntax-async-generators@npm:^7.8.4": - version: 7.8.4 - resolution: "@babel/plugin-syntax-async-generators@npm:7.8.4" - dependencies: - "@babel/helper-plugin-utils": ^7.8.0 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 7ed1c1d9b9e5b64ef028ea5e755c0be2d4e5e4e3d6cf7df757b9a8c4cfa4193d268176d0f1f7fbecdda6fe722885c7fda681f480f3741d8a2d26854736f05367 - languageName: node - linkType: hard - -"@babel/plugin-syntax-class-properties@npm:^7.0.0, @babel/plugin-syntax-class-properties@npm:^7.12.13": - version: 7.12.13 - resolution: "@babel/plugin-syntax-class-properties@npm:7.12.13" - dependencies: - "@babel/helper-plugin-utils": ^7.12.13 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 24f34b196d6342f28d4bad303612d7ff566ab0a013ce89e775d98d6f832969462e7235f3e7eaf17678a533d4be0ba45d3ae34ab4e5a9dcbda5d98d49e5efa2fc - languageName: node - linkType: hard - -"@babel/plugin-syntax-class-static-block@npm:^7.14.5": - version: 7.14.5 - resolution: "@babel/plugin-syntax-class-static-block@npm:7.14.5" - dependencies: - "@babel/helper-plugin-utils": ^7.14.5 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 3e80814b5b6d4fe17826093918680a351c2d34398a914ce6e55d8083d72a9bdde4fbaf6a2dcea0e23a03de26dc2917ae3efd603d27099e2b98380345703bf948 - languageName: node - linkType: hard - -"@babel/plugin-syntax-dynamic-import@npm:^7.8.3": - version: 7.8.3 - resolution: "@babel/plugin-syntax-dynamic-import@npm:7.8.3" - dependencies: - "@babel/helper-plugin-utils": ^7.8.0 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: ce307af83cf433d4ec42932329fad25fa73138ab39c7436882ea28742e1c0066626d224e0ad2988724c82644e41601cef607b36194f695cb78a1fcdc959637bd - languageName: node - linkType: hard - -"@babel/plugin-syntax-export-namespace-from@npm:^7.8.3": - version: 7.8.3 - resolution: "@babel/plugin-syntax-export-namespace-from@npm:7.8.3" - dependencies: - "@babel/helper-plugin-utils": ^7.8.3 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 85740478be5b0de185228e7814451d74ab8ce0a26fcca7613955262a26e99e8e15e9da58f60c754b84515d4c679b590dbd3f2148f0f58025f4ae706f1c5a5d4a - languageName: node - linkType: hard - -"@babel/plugin-syntax-flow@npm:^7.0.0, @babel/plugin-syntax-flow@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/plugin-syntax-flow@npm:7.18.6" - dependencies: - "@babel/helper-plugin-utils": ^7.18.6 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: abe82062b3eef14de7d2b3c0e4fecf80a3e796ca497e9df616d12dd250968abf71495ee85a955b43a6c827137203f0c409450cf792732ed0d6907c806580ea71 - languageName: node - linkType: hard - -"@babel/plugin-syntax-import-assertions@npm:7.20.0, @babel/plugin-syntax-import-assertions@npm:^7.20.0": - version: 7.20.0 - resolution: "@babel/plugin-syntax-import-assertions@npm:7.20.0" - dependencies: - "@babel/helper-plugin-utils": ^7.19.0 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 6a86220e0aae40164cd3ffaf80e7c076a1be02a8f3480455dddbae05fda8140f429290027604df7a11b3f3f124866e8a6d69dbfa1dda61ee7377b920ad144d5b - languageName: node - linkType: hard - -"@babel/plugin-syntax-json-strings@npm:^7.8.3": - version: 7.8.3 - resolution: "@babel/plugin-syntax-json-strings@npm:7.8.3" - dependencies: - "@babel/helper-plugin-utils": ^7.8.0 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: bf5aea1f3188c9a507e16efe030efb996853ca3cadd6512c51db7233cc58f3ac89ff8c6bdfb01d30843b161cfe7d321e1bf28da82f7ab8d7e6bc5464666f354a - languageName: node - linkType: hard - -"@babel/plugin-syntax-jsx@npm:^7.0.0, @babel/plugin-syntax-jsx@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/plugin-syntax-jsx@npm:7.18.6" - dependencies: - "@babel/helper-plugin-utils": ^7.18.6 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 6d37ea972970195f1ffe1a54745ce2ae456e0ac6145fae9aa1480f297248b262ea6ebb93010eddb86ebfacb94f57c05a1fc5d232b9a67325b09060299d515c67 - languageName: node - linkType: hard - -"@babel/plugin-syntax-logical-assignment-operators@npm:^7.10.4": - version: 7.10.4 - resolution: "@babel/plugin-syntax-logical-assignment-operators@npm:7.10.4" - dependencies: - "@babel/helper-plugin-utils": ^7.10.4 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: aff33577037e34e515911255cdbb1fd39efee33658aa00b8a5fd3a4b903585112d037cce1cc9e4632f0487dc554486106b79ccd5ea63a2e00df4363f6d4ff886 - languageName: node - linkType: hard - -"@babel/plugin-syntax-nullish-coalescing-operator@npm:^7.8.3": - version: 7.8.3 - resolution: "@babel/plugin-syntax-nullish-coalescing-operator@npm:7.8.3" - dependencies: - "@babel/helper-plugin-utils": ^7.8.0 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 87aca4918916020d1fedba54c0e232de408df2644a425d153be368313fdde40d96088feed6c4e5ab72aac89be5d07fef2ddf329a15109c5eb65df006bf2580d1 - languageName: node - linkType: hard - -"@babel/plugin-syntax-numeric-separator@npm:^7.10.4": - version: 7.10.4 - resolution: "@babel/plugin-syntax-numeric-separator@npm:7.10.4" - dependencies: - "@babel/helper-plugin-utils": ^7.10.4 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 01ec5547bd0497f76cc903ff4d6b02abc8c05f301c88d2622b6d834e33a5651aa7c7a3d80d8d57656a4588f7276eba357f6b7e006482f5b564b7a6488de493a1 - languageName: node - linkType: hard - -"@babel/plugin-syntax-object-rest-spread@npm:^7.0.0, @babel/plugin-syntax-object-rest-spread@npm:^7.8.3": - version: 7.8.3 - resolution: "@babel/plugin-syntax-object-rest-spread@npm:7.8.3" - dependencies: - "@babel/helper-plugin-utils": ^7.8.0 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: fddcf581a57f77e80eb6b981b10658421bc321ba5f0a5b754118c6a92a5448f12a0c336f77b8abf734841e102e5126d69110a306eadb03ca3e1547cab31f5cbf - languageName: node - linkType: hard - -"@babel/plugin-syntax-optional-catch-binding@npm:^7.8.3": - version: 7.8.3 - resolution: "@babel/plugin-syntax-optional-catch-binding@npm:7.8.3" - dependencies: - "@babel/helper-plugin-utils": ^7.8.0 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 910d90e72bc90ea1ce698e89c1027fed8845212d5ab588e35ef91f13b93143845f94e2539d831dc8d8ededc14ec02f04f7bd6a8179edd43a326c784e7ed7f0b9 - languageName: node - linkType: hard - -"@babel/plugin-syntax-optional-chaining@npm:^7.8.3": - version: 7.8.3 - resolution: "@babel/plugin-syntax-optional-chaining@npm:7.8.3" - dependencies: - "@babel/helper-plugin-utils": ^7.8.0 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: eef94d53a1453361553c1f98b68d17782861a04a392840341bc91780838dd4e695209c783631cf0de14c635758beafb6a3a65399846ffa4386bff90639347f30 - languageName: node - linkType: hard - -"@babel/plugin-syntax-private-property-in-object@npm:^7.14.5": - version: 7.14.5 - resolution: "@babel/plugin-syntax-private-property-in-object@npm:7.14.5" - dependencies: - "@babel/helper-plugin-utils": ^7.14.5 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: b317174783e6e96029b743ccff2a67d63d38756876e7e5d0ba53a322e38d9ca452c13354a57de1ad476b4c066dbae699e0ca157441da611117a47af88985ecda - languageName: node - linkType: hard - -"@babel/plugin-syntax-top-level-await@npm:^7.14.5": - version: 7.14.5 - resolution: "@babel/plugin-syntax-top-level-await@npm:7.14.5" - dependencies: - "@babel/helper-plugin-utils": ^7.14.5 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: bbd1a56b095be7820029b209677b194db9b1d26691fe999856462e66b25b281f031f3dfd91b1619e9dcf95bebe336211833b854d0fb8780d618e35667c2d0d7e - languageName: node - linkType: hard - -"@babel/plugin-transform-arrow-functions@npm:^7.0.0, @babel/plugin-transform-arrow-functions@npm:^7.18.6": - version: 7.20.7 - resolution: "@babel/plugin-transform-arrow-functions@npm:7.20.7" - dependencies: - "@babel/helper-plugin-utils": ^7.20.2 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: b43cabe3790c2de7710abe32df9a30005eddb2050dadd5d122c6872f679e5710e410f1b90c8f99a2aff7b614cccfecf30e7fd310236686f60d3ed43fd80b9847 - languageName: node - linkType: hard - -"@babel/plugin-transform-async-to-generator@npm:^7.18.6": - version: 7.20.7 - resolution: "@babel/plugin-transform-async-to-generator@npm:7.20.7" - dependencies: - "@babel/helper-module-imports": ^7.18.6 - "@babel/helper-plugin-utils": ^7.20.2 - "@babel/helper-remap-async-to-generator": ^7.18.9 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: fe9ee8a5471b4317c1b9ea92410ace8126b52a600d7cfbfe1920dcac6fb0fad647d2e08beb4fd03c630eb54430e6c72db11e283e3eddc49615c68abd39430904 - languageName: node - linkType: hard - -"@babel/plugin-transform-block-scoped-functions@npm:^7.0.0, @babel/plugin-transform-block-scoped-functions@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/plugin-transform-block-scoped-functions@npm:7.18.6" - dependencies: - "@babel/helper-plugin-utils": ^7.18.6 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 0a0df61f94601e3666bf39f2cc26f5f7b22a94450fb93081edbed967bd752ce3f81d1227fefd3799f5ee2722171b5e28db61379234d1bb85b6ec689589f99d7e - languageName: node - linkType: hard - -"@babel/plugin-transform-block-scoping@npm:^7.0.0, @babel/plugin-transform-block-scoping@npm:^7.20.2": - version: 7.21.0 - resolution: "@babel/plugin-transform-block-scoping@npm:7.21.0" - dependencies: - "@babel/helper-plugin-utils": ^7.20.2 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 15aacaadbecf96b53a750db1be4990b0d89c7f5bc3e1794b63b49fb219638c1fd25d452d15566d7e5ddf5b5f4e1a0a0055c35c1c7aee323c7b114bf49f66f4b0 - languageName: node - linkType: hard - -"@babel/plugin-transform-classes@npm:^7.0.0, @babel/plugin-transform-classes@npm:^7.20.2": - version: 7.21.0 - resolution: "@babel/plugin-transform-classes@npm:7.21.0" - dependencies: - "@babel/helper-annotate-as-pure": ^7.18.6 - "@babel/helper-compilation-targets": ^7.20.7 - "@babel/helper-environment-visitor": ^7.18.9 - "@babel/helper-function-name": ^7.21.0 - "@babel/helper-optimise-call-expression": ^7.18.6 - "@babel/helper-plugin-utils": ^7.20.2 - "@babel/helper-replace-supers": ^7.20.7 - "@babel/helper-split-export-declaration": ^7.18.6 - globals: ^11.1.0 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 088ae152074bd0e90f64659169255bfe50393e637ec8765cb2a518848b11b0299e66b91003728fd0a41563a6fdc6b8d548ece698a314fd5447f5489c22e466b7 - languageName: node - linkType: hard - -"@babel/plugin-transform-computed-properties@npm:^7.0.0, @babel/plugin-transform-computed-properties@npm:^7.18.9": - version: 7.20.7 - resolution: "@babel/plugin-transform-computed-properties@npm:7.20.7" - dependencies: - "@babel/helper-plugin-utils": ^7.20.2 - "@babel/template": ^7.20.7 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: be70e54bda8b469146459f429e5f2bd415023b87b2d5af8b10e48f465ffb02847a3ed162ca60378c004b82db848e4d62e90010d41ded7e7176b6d8d1c2911139 - languageName: node - linkType: hard - -"@babel/plugin-transform-destructuring@npm:^7.0.0, @babel/plugin-transform-destructuring@npm:^7.20.2": - version: 7.21.3 - resolution: "@babel/plugin-transform-destructuring@npm:7.21.3" - dependencies: - "@babel/helper-plugin-utils": ^7.20.2 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 43ebbe0bfa20287e34427be7c2200ce096c20913775ea75268fb47fe0e55f9510800587e6052c42fe6dffa0daaad95dd465c3e312fd1ef9785648384c45417ac - languageName: node - linkType: hard - -"@babel/plugin-transform-dotall-regex@npm:^7.18.6, @babel/plugin-transform-dotall-regex@npm:^7.4.4": - version: 7.18.6 - resolution: "@babel/plugin-transform-dotall-regex@npm:7.18.6" - dependencies: - "@babel/helper-create-regexp-features-plugin": ^7.18.6 - "@babel/helper-plugin-utils": ^7.18.6 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: cbe5d7063eb8f8cca24cd4827bc97f5641166509e58781a5f8aa47fb3d2d786ce4506a30fca2e01f61f18792783a5cb5d96bf5434c3dd1ad0de8c9cc625a53da - languageName: node - linkType: hard - -"@babel/plugin-transform-duplicate-keys@npm:^7.18.9": - version: 7.18.9 - resolution: "@babel/plugin-transform-duplicate-keys@npm:7.18.9" - dependencies: - "@babel/helper-plugin-utils": ^7.18.9 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 220bf4a9fec5c4d4a7b1de38810350260e8ea08481bf78332a464a21256a95f0df8cd56025f346238f09b04f8e86d4158fafc9f4af57abaef31637e3b58bd4fe - languageName: node - linkType: hard - -"@babel/plugin-transform-exponentiation-operator@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/plugin-transform-exponentiation-operator@npm:7.18.6" - dependencies: - "@babel/helper-builder-binary-assignment-operator-visitor": ^7.18.6 - "@babel/helper-plugin-utils": ^7.18.6 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 7f70222f6829c82a36005508d34ddbe6fd0974ae190683a8670dd6ff08669aaf51fef2209d7403f9bd543cb2d12b18458016c99a6ed0332ccedb3ea127b01229 - languageName: node - linkType: hard - -"@babel/plugin-transform-flow-strip-types@npm:^7.0.0": - version: 7.21.0 - resolution: "@babel/plugin-transform-flow-strip-types@npm:7.21.0" - dependencies: - "@babel/helper-plugin-utils": ^7.20.2 - "@babel/plugin-syntax-flow": ^7.18.6 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: a45951c57265c366f95db9a5e70a62cfc3eafafa3f3d23295357577b5fc139d053d45416cdbdf4a0a387e41cefc434ab94dd6c3048d03b094ff6d041dd10a0b0 - languageName: node - linkType: hard - -"@babel/plugin-transform-for-of@npm:^7.0.0, @babel/plugin-transform-for-of@npm:^7.18.8": - version: 7.21.0 - resolution: "@babel/plugin-transform-for-of@npm:7.21.0" - dependencies: - "@babel/helper-plugin-utils": ^7.20.2 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 2f3f86ca1fab2929fcda6a87e4303d5c635b5f96dc9a45fd4ca083308a3020c79ac33b9543eb4640ef2b79f3586a00ab2d002a7081adb9e9d7440dce30781034 - languageName: node - linkType: hard - -"@babel/plugin-transform-function-name@npm:^7.0.0, @babel/plugin-transform-function-name@npm:^7.18.9": - version: 7.18.9 - resolution: "@babel/plugin-transform-function-name@npm:7.18.9" - dependencies: - "@babel/helper-compilation-targets": ^7.18.9 - "@babel/helper-function-name": ^7.18.9 - "@babel/helper-plugin-utils": ^7.18.9 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 62dd9c6cdc9714704efe15545e782ee52d74dc73916bf954b4d3bee088fb0ec9e3c8f52e751252433656c09f744b27b757fc06ed99bcde28e8a21600a1d8e597 - languageName: node - linkType: hard - -"@babel/plugin-transform-literals@npm:^7.0.0, @babel/plugin-transform-literals@npm:^7.18.9": - version: 7.18.9 - resolution: "@babel/plugin-transform-literals@npm:7.18.9" - dependencies: - "@babel/helper-plugin-utils": ^7.18.9 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 3458dd2f1a47ac51d9d607aa18f3d321cbfa8560a985199185bed5a906bb0c61ba85575d386460bac9aed43fdd98940041fae5a67dff286f6f967707cff489f8 - languageName: node - linkType: hard - -"@babel/plugin-transform-member-expression-literals@npm:^7.0.0, @babel/plugin-transform-member-expression-literals@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/plugin-transform-member-expression-literals@npm:7.18.6" - dependencies: - "@babel/helper-plugin-utils": ^7.18.6 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 35a3d04f6693bc6b298c05453d85ee6e41cc806538acb6928427e0e97ae06059f97d2f07d21495fcf5f70d3c13a242e2ecbd09d5c1fcb1b1a73ff528dcb0b695 - languageName: node - linkType: hard - -"@babel/plugin-transform-modules-amd@npm:^7.19.6": - version: 7.20.11 - resolution: "@babel/plugin-transform-modules-amd@npm:7.20.11" - dependencies: - "@babel/helper-module-transforms": ^7.20.11 - "@babel/helper-plugin-utils": ^7.20.2 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 23665c1c20c8f11c89382b588fb9651c0756d130737a7625baeaadbd3b973bc5bfba1303bedffa8fb99db1e6d848afb01016e1df2b69b18303e946890c790001 - languageName: node - linkType: hard - -"@babel/plugin-transform-modules-commonjs@npm:^7.0.0, @babel/plugin-transform-modules-commonjs@npm:^7.19.6": - version: 7.21.2 - resolution: "@babel/plugin-transform-modules-commonjs@npm:7.21.2" - dependencies: - "@babel/helper-module-transforms": ^7.21.2 - "@babel/helper-plugin-utils": ^7.20.2 - "@babel/helper-simple-access": ^7.20.2 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 65aa06e3e3792f39b99eb5f807034693ff0ecf80438580f7ae504f4c4448ef04147b1889ea5e6f60f3ad4a12ebbb57c6f1f979a249dadbd8d11fe22f4441918b - languageName: node - linkType: hard - -"@babel/plugin-transform-modules-systemjs@npm:^7.19.6": - version: 7.20.11 - resolution: "@babel/plugin-transform-modules-systemjs@npm:7.20.11" - dependencies: - "@babel/helper-hoist-variables": ^7.18.6 - "@babel/helper-module-transforms": ^7.20.11 - "@babel/helper-plugin-utils": ^7.20.2 - "@babel/helper-validator-identifier": ^7.19.1 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 4546c47587f88156d66c7eb7808e903cf4bb3f6ba6ac9bc8e3af2e29e92eb9f0b3f44d52043bfd24eb25fa7827fd7b6c8bfeac0cac7584e019b87e1ecbd0e673 - languageName: node - linkType: hard - -"@babel/plugin-transform-modules-umd@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/plugin-transform-modules-umd@npm:7.18.6" - dependencies: - "@babel/helper-module-transforms": ^7.18.6 - "@babel/helper-plugin-utils": ^7.18.6 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: c3b6796c6f4579f1ba5ab0cdcc73910c1e9c8e1e773c507c8bb4da33072b3ae5df73c6d68f9126dab6e99c24ea8571e1563f8710d7c421fac1cde1e434c20153 - languageName: node - linkType: hard - -"@babel/plugin-transform-named-capturing-groups-regex@npm:^7.19.1": - version: 7.20.5 - resolution: "@babel/plugin-transform-named-capturing-groups-regex@npm:7.20.5" - dependencies: - "@babel/helper-create-regexp-features-plugin": ^7.20.5 - "@babel/helper-plugin-utils": ^7.20.2 - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 528c95fb1087e212f17e1c6456df041b28a83c772b9c93d2e407c9d03b72182b0d9d126770c1d6e0b23aab052599ceaf25ed6a2c0627f4249be34a83f6fae853 - languageName: node - linkType: hard - -"@babel/plugin-transform-new-target@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/plugin-transform-new-target@npm:7.18.6" - dependencies: - "@babel/helper-plugin-utils": ^7.18.6 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: bd780e14f46af55d0ae8503b3cb81ca86dcc73ed782f177e74f498fff934754f9e9911df1f8f3bd123777eed7c1c1af4d66abab87c8daae5403e7719a6b845d1 - languageName: node - linkType: hard - -"@babel/plugin-transform-object-super@npm:^7.0.0, @babel/plugin-transform-object-super@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/plugin-transform-object-super@npm:7.18.6" - dependencies: - "@babel/helper-plugin-utils": ^7.18.6 - "@babel/helper-replace-supers": ^7.18.6 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 0fcb04e15deea96ae047c21cb403607d49f06b23b4589055993365ebd7a7d7541334f06bf9642e90075e66efce6ebaf1eb0ef066fbbab802d21d714f1aac3aef - languageName: node - linkType: hard - -"@babel/plugin-transform-parameters@npm:^7.0.0, @babel/plugin-transform-parameters@npm:^7.20.1, @babel/plugin-transform-parameters@npm:^7.20.7": - version: 7.21.3 - resolution: "@babel/plugin-transform-parameters@npm:7.21.3" - dependencies: - "@babel/helper-plugin-utils": ^7.20.2 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: c92128d7b1fcf54e2cab186c196bbbf55a9a6de11a83328dc2602649c9dc6d16ef73712beecd776cd49bfdc624b5f56740f4a53568d3deb9505ec666bc869da3 - languageName: node - linkType: hard - -"@babel/plugin-transform-property-literals@npm:^7.0.0, @babel/plugin-transform-property-literals@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/plugin-transform-property-literals@npm:7.18.6" - dependencies: - "@babel/helper-plugin-utils": ^7.18.6 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 1c16e64de554703f4b547541de2edda6c01346dd3031d4d29e881aa7733785cd26d53611a4ccf5353f4d3e69097bb0111c0a93ace9e683edd94fea28c4484144 - languageName: node - linkType: hard - -"@babel/plugin-transform-react-display-name@npm:^7.0.0, @babel/plugin-transform-react-display-name@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/plugin-transform-react-display-name@npm:7.18.6" - dependencies: - "@babel/helper-plugin-utils": ^7.18.6 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 51c087ab9e41ef71a29335587da28417536c6f816c292e092ffc0e0985d2f032656801d4dd502213ce32481f4ba6c69402993ffa67f0818a07606ff811e4be49 - languageName: node - linkType: hard - -"@babel/plugin-transform-react-jsx-development@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/plugin-transform-react-jsx-development@npm:7.18.6" - dependencies: - "@babel/plugin-transform-react-jsx": ^7.18.6 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: ec9fa65db66f938b75c45e99584367779ac3e0af8afc589187262e1337c7c4205ea312877813ae4df9fb93d766627b8968d74ac2ba702e4883b1dbbe4953ecee - languageName: node - linkType: hard - -"@babel/plugin-transform-react-jsx-self@npm:^7.18.6": - version: 7.21.0 - resolution: "@babel/plugin-transform-react-jsx-self@npm:7.21.0" - dependencies: - "@babel/helper-plugin-utils": ^7.20.2 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 696f74c04a265409ccd46e333ff762e6011d394e6972128b5d97db4c1647289141bc7ebd45ab2bab99b60932f9793e8f89ee9432d3bde19962de2100456f6147 - languageName: node - linkType: hard - -"@babel/plugin-transform-react-jsx-source@npm:^7.19.6": - version: 7.19.6 - resolution: "@babel/plugin-transform-react-jsx-source@npm:7.19.6" - dependencies: - "@babel/helper-plugin-utils": ^7.19.0 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 1e9e29a4efc5b79840bd4f68e404f5ab7765ce48c7bd22f12f2b185f9c782c66933bdf54a1b21879e4e56e6b50b4e88aca82789ecb1f61123af6dfa9ab16c555 - languageName: node - linkType: hard - -"@babel/plugin-transform-react-jsx@npm:^7.0.0, @babel/plugin-transform-react-jsx@npm:^7.18.6": - version: 7.21.0 - resolution: "@babel/plugin-transform-react-jsx@npm:7.21.0" - dependencies: - "@babel/helper-annotate-as-pure": ^7.18.6 - "@babel/helper-module-imports": ^7.18.6 - "@babel/helper-plugin-utils": ^7.20.2 - "@babel/plugin-syntax-jsx": ^7.18.6 - "@babel/types": ^7.21.0 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: c77d277d2e55b489a9b9be185c3eed5d8e2c87046778810f8e47ee3c87b47e64cad93c02211c968486c7958fd05ce203c66779446484c98a7b3a69bec687d5dc - languageName: node - linkType: hard - -"@babel/plugin-transform-react-pure-annotations@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/plugin-transform-react-pure-annotations@npm:7.18.6" - dependencies: - "@babel/helper-annotate-as-pure": ^7.18.6 - "@babel/helper-plugin-utils": ^7.18.6 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 97c4873d409088f437f9084d084615948198dd87fc6723ada0e7e29c5a03623c2f3e03df3f52e7e7d4d23be32a08ea00818bff302812e48713c706713bd06219 - languageName: node - linkType: hard - -"@babel/plugin-transform-regenerator@npm:^7.18.6": - version: 7.20.5 - resolution: "@babel/plugin-transform-regenerator@npm:7.20.5" - dependencies: - "@babel/helper-plugin-utils": ^7.20.2 - regenerator-transform: ^0.15.1 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 13164861e71fb23d84c6270ef5330b03c54d5d661c2c7468f28e21c4f8598558ca0c8c3cb1d996219352946e849d270a61372bc93c8fbe9676e78e3ffd0dea07 - languageName: node - linkType: hard - -"@babel/plugin-transform-reserved-words@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/plugin-transform-reserved-words@npm:7.18.6" - dependencies: - "@babel/helper-plugin-utils": ^7.18.6 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 0738cdc30abdae07c8ec4b233b30c31f68b3ff0eaa40eddb45ae607c066127f5fa99ddad3c0177d8e2832e3a7d3ad115775c62b431ebd6189c40a951b867a80c - languageName: node - linkType: hard - -"@babel/plugin-transform-shorthand-properties@npm:^7.0.0, @babel/plugin-transform-shorthand-properties@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/plugin-transform-shorthand-properties@npm:7.18.6" - dependencies: - "@babel/helper-plugin-utils": ^7.18.6 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: b8e4e8acc2700d1e0d7d5dbfd4fdfb935651913de6be36e6afb7e739d8f9ca539a5150075a0f9b79c88be25ddf45abb912fe7abf525f0b80f5b9d9860de685d7 - languageName: node - linkType: hard - -"@babel/plugin-transform-spread@npm:^7.0.0, @babel/plugin-transform-spread@npm:^7.19.0": - version: 7.20.7 - resolution: "@babel/plugin-transform-spread@npm:7.20.7" - dependencies: - "@babel/helper-plugin-utils": ^7.20.2 - "@babel/helper-skip-transparent-expression-wrappers": ^7.20.0 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 8ea698a12da15718aac7489d4cde10beb8a3eea1f66167d11ab1e625033641e8b328157fd1a0b55dd6531933a160c01fc2e2e61132a385cece05f26429fd0cc2 - languageName: node - linkType: hard - -"@babel/plugin-transform-sticky-regex@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/plugin-transform-sticky-regex@npm:7.18.6" - dependencies: - "@babel/helper-plugin-utils": ^7.18.6 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 68ea18884ae9723443ffa975eb736c8c0d751265859cd3955691253f7fee37d7a0f7efea96c8a062876af49a257a18ea0ed5fea0d95a7b3611ce40f7ee23aee3 - languageName: node - linkType: hard - -"@babel/plugin-transform-template-literals@npm:^7.0.0, @babel/plugin-transform-template-literals@npm:^7.18.9": - version: 7.18.9 - resolution: "@babel/plugin-transform-template-literals@npm:7.18.9" - dependencies: - "@babel/helper-plugin-utils": ^7.18.9 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 3d2fcd79b7c345917f69b92a85bdc3ddd68ce2c87dc70c7d61a8373546ccd1f5cb8adc8540b49dfba08e1b82bb7b3bbe23a19efdb2b9c994db2db42906ca9fb2 - languageName: node - linkType: hard - -"@babel/plugin-transform-typeof-symbol@npm:^7.18.9": - version: 7.18.9 - resolution: "@babel/plugin-transform-typeof-symbol@npm:7.18.9" - dependencies: - "@babel/helper-plugin-utils": ^7.18.9 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: e754e0d8b8a028c52e10c148088606e3f7a9942c57bd648fc0438e5b4868db73c386a5ed47ab6d6f0594aae29ee5ffc2ffc0f7ebee7fae560a066d6dea811cd4 - languageName: node - linkType: hard - -"@babel/plugin-transform-unicode-escapes@npm:^7.18.10": - version: 7.18.10 - resolution: "@babel/plugin-transform-unicode-escapes@npm:7.18.10" - dependencies: - "@babel/helper-plugin-utils": ^7.18.9 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: f5baca55cb3c11bc08ec589f5f522d85c1ab509b4d11492437e45027d64ae0b22f0907bd1381e8d7f2a436384bb1f9ad89d19277314242c5c2671a0f91d0f9cd - languageName: node - linkType: hard - -"@babel/plugin-transform-unicode-regex@npm:^7.18.6": - version: 7.18.6 - resolution: "@babel/plugin-transform-unicode-regex@npm:7.18.6" - dependencies: - "@babel/helper-create-regexp-features-plugin": ^7.18.6 - "@babel/helper-plugin-utils": ^7.18.6 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: d9e18d57536a2d317fb0b7c04f8f55347f3cfacb75e636b4c6fa2080ab13a3542771b5120e726b598b815891fc606d1472ac02b749c69fd527b03847f22dc25e - languageName: node - linkType: hard - -"@babel/preset-env@npm:7.20.2": - version: 7.20.2 - resolution: "@babel/preset-env@npm:7.20.2" - dependencies: - "@babel/compat-data": ^7.20.1 - "@babel/helper-compilation-targets": ^7.20.0 - "@babel/helper-plugin-utils": ^7.20.2 - "@babel/helper-validator-option": ^7.18.6 - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": ^7.18.6 - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": ^7.18.9 - "@babel/plugin-proposal-async-generator-functions": ^7.20.1 - "@babel/plugin-proposal-class-properties": ^7.18.6 - "@babel/plugin-proposal-class-static-block": ^7.18.6 - "@babel/plugin-proposal-dynamic-import": ^7.18.6 - "@babel/plugin-proposal-export-namespace-from": ^7.18.9 - "@babel/plugin-proposal-json-strings": ^7.18.6 - "@babel/plugin-proposal-logical-assignment-operators": ^7.18.9 - "@babel/plugin-proposal-nullish-coalescing-operator": ^7.18.6 - "@babel/plugin-proposal-numeric-separator": ^7.18.6 - "@babel/plugin-proposal-object-rest-spread": ^7.20.2 - "@babel/plugin-proposal-optional-catch-binding": ^7.18.6 - "@babel/plugin-proposal-optional-chaining": ^7.18.9 - "@babel/plugin-proposal-private-methods": ^7.18.6 - "@babel/plugin-proposal-private-property-in-object": ^7.18.6 - "@babel/plugin-proposal-unicode-property-regex": ^7.18.6 - "@babel/plugin-syntax-async-generators": ^7.8.4 - "@babel/plugin-syntax-class-properties": ^7.12.13 - "@babel/plugin-syntax-class-static-block": ^7.14.5 - "@babel/plugin-syntax-dynamic-import": ^7.8.3 - "@babel/plugin-syntax-export-namespace-from": ^7.8.3 - "@babel/plugin-syntax-import-assertions": ^7.20.0 - "@babel/plugin-syntax-json-strings": ^7.8.3 - "@babel/plugin-syntax-logical-assignment-operators": ^7.10.4 - "@babel/plugin-syntax-nullish-coalescing-operator": ^7.8.3 - "@babel/plugin-syntax-numeric-separator": ^7.10.4 - "@babel/plugin-syntax-object-rest-spread": ^7.8.3 - "@babel/plugin-syntax-optional-catch-binding": ^7.8.3 - "@babel/plugin-syntax-optional-chaining": ^7.8.3 - "@babel/plugin-syntax-private-property-in-object": ^7.14.5 - "@babel/plugin-syntax-top-level-await": ^7.14.5 - "@babel/plugin-transform-arrow-functions": ^7.18.6 - "@babel/plugin-transform-async-to-generator": ^7.18.6 - "@babel/plugin-transform-block-scoped-functions": ^7.18.6 - "@babel/plugin-transform-block-scoping": ^7.20.2 - "@babel/plugin-transform-classes": ^7.20.2 - "@babel/plugin-transform-computed-properties": ^7.18.9 - "@babel/plugin-transform-destructuring": ^7.20.2 - "@babel/plugin-transform-dotall-regex": ^7.18.6 - "@babel/plugin-transform-duplicate-keys": ^7.18.9 - "@babel/plugin-transform-exponentiation-operator": ^7.18.6 - "@babel/plugin-transform-for-of": ^7.18.8 - "@babel/plugin-transform-function-name": ^7.18.9 - "@babel/plugin-transform-literals": ^7.18.9 - "@babel/plugin-transform-member-expression-literals": ^7.18.6 - "@babel/plugin-transform-modules-amd": ^7.19.6 - "@babel/plugin-transform-modules-commonjs": ^7.19.6 - "@babel/plugin-transform-modules-systemjs": ^7.19.6 - "@babel/plugin-transform-modules-umd": ^7.18.6 - "@babel/plugin-transform-named-capturing-groups-regex": ^7.19.1 - "@babel/plugin-transform-new-target": ^7.18.6 - "@babel/plugin-transform-object-super": ^7.18.6 - "@babel/plugin-transform-parameters": ^7.20.1 - "@babel/plugin-transform-property-literals": ^7.18.6 - "@babel/plugin-transform-regenerator": ^7.18.6 - "@babel/plugin-transform-reserved-words": ^7.18.6 - "@babel/plugin-transform-shorthand-properties": ^7.18.6 - "@babel/plugin-transform-spread": ^7.19.0 - "@babel/plugin-transform-sticky-regex": ^7.18.6 - "@babel/plugin-transform-template-literals": ^7.18.9 - "@babel/plugin-transform-typeof-symbol": ^7.18.9 - "@babel/plugin-transform-unicode-escapes": ^7.18.10 - "@babel/plugin-transform-unicode-regex": ^7.18.6 - "@babel/preset-modules": ^0.1.5 - "@babel/types": ^7.20.2 - babel-plugin-polyfill-corejs2: ^0.3.3 - babel-plugin-polyfill-corejs3: ^0.6.0 - babel-plugin-polyfill-regenerator: ^0.4.1 - core-js-compat: ^3.25.1 - semver: ^6.3.0 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: ece2d7e9c7789db6116e962b8e1a55eb55c110c44c217f0c8f6ffea4ca234954e66557f7bd019b7affadf7fbb3a53ccc807e93fc935aacd48146234b73b6947e - languageName: node - linkType: hard - -"@babel/preset-modules@npm:^0.1.5": - version: 0.1.5 - resolution: "@babel/preset-modules@npm:0.1.5" - dependencies: - "@babel/helper-plugin-utils": ^7.0.0 - "@babel/plugin-proposal-unicode-property-regex": ^7.4.4 - "@babel/plugin-transform-dotall-regex": ^7.4.4 - "@babel/types": ^7.4.4 - esutils: ^2.0.2 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 8430e0e9e9d520b53e22e8c4c6a5a080a12b63af6eabe559c2310b187bd62ae113f3da82ba33e9d1d0f3230930ca702843aae9dd226dec51f7d7114dc1f51c10 - languageName: node - linkType: hard - -"@babel/preset-react@npm:7.18.6": - version: 7.18.6 - resolution: "@babel/preset-react@npm:7.18.6" - dependencies: - "@babel/helper-plugin-utils": ^7.18.6 - "@babel/helper-validator-option": ^7.18.6 - "@babel/plugin-transform-react-display-name": ^7.18.6 - "@babel/plugin-transform-react-jsx": ^7.18.6 - "@babel/plugin-transform-react-jsx-development": ^7.18.6 - "@babel/plugin-transform-react-pure-annotations": ^7.18.6 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 540d9cf0a0cc0bb07e6879994e6fb7152f87dafbac880b56b65e2f528134c7ba33e0cd140b58700c77b2ebf4c81fa6468fed0ba391462d75efc7f8c1699bb4c3 - languageName: node - linkType: hard - -"@babel/regjsgen@npm:^0.8.0": - version: 0.8.0 - resolution: "@babel/regjsgen@npm:0.8.0" - checksum: 89c338fee774770e5a487382170711014d49a68eb281e74f2b5eac88f38300a4ad545516a7786a8dd5702e9cf009c94c2f582d200f077ac5decd74c56b973730 - languageName: node - linkType: hard - -"@babel/runtime@npm:7.2.0": - version: 7.2.0 - resolution: "@babel/runtime@npm:7.2.0" - dependencies: - regenerator-runtime: ^0.12.0 - checksum: c0f156eba9700f8e467926a668d5eb77a83f2630873dac7f5cbf77f1a1807299c2cca6a6231c0a494164c279e8c30ca15572d15ecd9fe20b2f20c21764bde543 - languageName: node - linkType: hard - -"@babel/runtime@npm:^7.0.0, @babel/runtime@npm:^7.10.2, @babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.18.3, @babel/runtime@npm:^7.20.7, @babel/runtime@npm:^7.5.5, @babel/runtime@npm:^7.8.4, @babel/runtime@npm:^7.8.7": - version: 7.21.0 - resolution: "@babel/runtime@npm:7.21.0" - dependencies: - regenerator-runtime: ^0.13.11 - checksum: 7b33e25bfa9e0e1b9e8828bb61b2d32bdd46b41b07ba7cb43319ad08efc6fda8eb89445193e67d6541814627df0ca59122c0ea795e412b99c5183a0540d338ab - languageName: node - linkType: hard - -"@babel/template@npm:^7.18.10, @babel/template@npm:^7.20.7": - version: 7.20.7 - resolution: "@babel/template@npm:7.20.7" - dependencies: - "@babel/code-frame": ^7.18.6 - "@babel/parser": ^7.20.7 - "@babel/types": ^7.20.7 - checksum: 2eb1a0ab8d415078776bceb3473d07ab746e6bb4c2f6ca46ee70efb284d75c4a32bb0cd6f4f4946dec9711f9c0780e8e5d64b743208deac6f8e9858afadc349e - languageName: node - linkType: hard - -"@babel/traverse@npm:^7.14.0, @babel/traverse@npm:^7.16.8, @babel/traverse@npm:^7.20.12, @babel/traverse@npm:^7.20.5, @babel/traverse@npm:^7.20.7, @babel/traverse@npm:^7.21.3, @babel/traverse@npm:^7.4.5": - version: 7.21.3 - resolution: "@babel/traverse@npm:7.21.3" - dependencies: - "@babel/code-frame": ^7.18.6 - "@babel/generator": ^7.21.3 - "@babel/helper-environment-visitor": ^7.18.9 - "@babel/helper-function-name": ^7.21.0 - "@babel/helper-hoist-variables": ^7.18.6 - "@babel/helper-split-export-declaration": ^7.18.6 - "@babel/parser": ^7.21.3 - "@babel/types": ^7.21.3 - debug: ^4.1.0 - globals: ^11.1.0 - checksum: 0af5bcd47a2fc501592b90ac1feae9d449afb9ab0772a4f6e68230f4cd3a475795d538c1de3f880fe3414b6c2820bac84d02c6549eea796f39d74a603717447b - languageName: node - linkType: hard - -"@babel/traverse@npm:^7.21.0, @babel/traverse@npm:^7.21.2": - version: 7.21.2 - resolution: "@babel/traverse@npm:7.21.2" - dependencies: - "@babel/code-frame": ^7.18.6 - "@babel/generator": ^7.21.1 - "@babel/helper-environment-visitor": ^7.18.9 - "@babel/helper-function-name": ^7.21.0 - "@babel/helper-hoist-variables": ^7.18.6 - "@babel/helper-split-export-declaration": ^7.18.6 - "@babel/parser": ^7.21.2 - "@babel/types": ^7.21.2 - debug: ^4.1.0 - globals: ^11.1.0 - checksum: d851e3f5cfbdc2fac037a014eae7b0707709de50f7d2fbb82ffbf932d3eeba90a77431529371d6e544f8faaf8c6540eeb18fdd8d1c6fa2b61acea0fb47e18d4b - languageName: node - linkType: hard - -"@babel/types@npm:^7.0.0, @babel/types@npm:^7.16.8, @babel/types@npm:^7.18.13, @babel/types@npm:^7.18.9, @babel/types@npm:^7.20.0, @babel/types@npm:^7.20.5, @babel/types@npm:^7.21.3, @babel/types@npm:^7.4.4": - version: 7.21.3 - resolution: "@babel/types@npm:7.21.3" - dependencies: - "@babel/helper-string-parser": ^7.19.4 - "@babel/helper-validator-identifier": ^7.19.1 - to-fast-properties: ^2.0.0 - checksum: b750274718ba9cefd0b81836c464009bb6ba339fccce51b9baff497a0a2d96c044c61dc90cf203cec0adc770454b53a9681c3f7716883c802b85ab84c365ba35 - languageName: node - linkType: hard - -"@babel/types@npm:^7.18.6, @babel/types@npm:^7.20.2, @babel/types@npm:^7.20.7, @babel/types@npm:^7.21.0, @babel/types@npm:^7.21.2, @babel/types@npm:^7.8.3": - version: 7.21.2 - resolution: "@babel/types@npm:7.21.2" - dependencies: - "@babel/helper-string-parser": ^7.19.4 - "@babel/helper-validator-identifier": ^7.19.1 - to-fast-properties: ^2.0.0 - checksum: a45a52acde139e575502c6de42c994bdbe262bafcb92ae9381fb54cdf1a3672149086843fda655c7683ce9806e998fd002bbe878fa44984498d0fdc7935ce7ff - languageName: node - linkType: hard - -"@emotion/babel-plugin@npm:^11.10.6": - version: 11.10.6 - resolution: "@emotion/babel-plugin@npm:11.10.6" - dependencies: - "@babel/helper-module-imports": ^7.16.7 - "@babel/runtime": ^7.18.3 - "@emotion/hash": ^0.9.0 - "@emotion/memoize": ^0.8.0 - "@emotion/serialize": ^1.1.1 - babel-plugin-macros: ^3.1.0 - convert-source-map: ^1.5.0 - escape-string-regexp: ^4.0.0 - find-root: ^1.1.0 - source-map: ^0.5.7 - stylis: 4.1.3 - checksum: 3eed138932e8edf2598352e69ad949b9db3051a4d6fcff190dacbac9aa838d7ef708b9f3e6c48660625d9311dae82d73477ae4e7a31139feef5eb001a5528421 - languageName: node - linkType: hard - -"@emotion/cache@npm:^11.10.5": - version: 11.10.5 - resolution: "@emotion/cache@npm:11.10.5" - dependencies: - "@emotion/memoize": ^0.8.0 - "@emotion/sheet": ^1.2.1 - "@emotion/utils": ^1.2.0 - "@emotion/weak-memoize": ^0.3.0 - stylis: 4.1.3 - checksum: 1dd2d9af2d3ecbd3d4469ecdf91a335eef6034c851b57a474471b2d2280613eb35bbed98c0368cc4625f188619fbdaf04cf07e8107aaffce94b2178444c0fe7b - languageName: node - linkType: hard - -"@emotion/hash@npm:^0.9.0": - version: 0.9.0 - resolution: "@emotion/hash@npm:0.9.0" - checksum: b63428f7c8186607acdca5d003700cecf0ded519d0b5c5cc3b3154eafcad6ff433f8361bd2bac8882715b557e6f06945694aeb6ba8b25c6095d7a88570e2e0bb - languageName: node - linkType: hard - -"@emotion/is-prop-valid@npm:^1.1.0, @emotion/is-prop-valid@npm:^1.2.0": - version: 1.2.0 - resolution: "@emotion/is-prop-valid@npm:1.2.0" - dependencies: - "@emotion/memoize": ^0.8.0 - checksum: cc7a19850a4c5b24f1514665289442c8c641709e6f7711067ad550e05df331da0692a16148e85eda6f47e31b3261b64d74c5e25194d053223be16231f969d633 - languageName: node - linkType: hard - -"@emotion/memoize@npm:^0.8.0": - version: 0.8.0 - resolution: "@emotion/memoize@npm:0.8.0" - checksum: c87bb110b829edd8e1c13b90a6bc37cebc39af29c7599a1e66a48e06f9bec43e8e53495ba86278cc52e7589549492c8dfdc81d19f4fdec0cee6ba13d2ad2c928 - languageName: node - linkType: hard - -"@emotion/react@npm:11.10.6": - version: 11.10.6 - resolution: "@emotion/react@npm:11.10.6" - dependencies: - "@babel/runtime": ^7.18.3 - "@emotion/babel-plugin": ^11.10.6 - "@emotion/cache": ^11.10.5 - "@emotion/serialize": ^1.1.1 - "@emotion/use-insertion-effect-with-fallbacks": ^1.0.0 - "@emotion/utils": ^1.2.0 - "@emotion/weak-memoize": ^0.3.0 - hoist-non-react-statics: ^3.3.1 - peerDependencies: - react: ">=16.8.0" - peerDependenciesMeta: - "@types/react": - optional: true - checksum: 4762042e39126ffaffe76052dc65c9bb0ba6b8893013687ba3cc13ed4dd834c31597f1230684c3c078e90aecc13ab6cd0e3cde0dec8b7761affd2571f4d80019 - languageName: node - linkType: hard - -"@emotion/serialize@npm:^1.1.1": - version: 1.1.1 - resolution: "@emotion/serialize@npm:1.1.1" - dependencies: - "@emotion/hash": ^0.9.0 - "@emotion/memoize": ^0.8.0 - "@emotion/unitless": ^0.8.0 - "@emotion/utils": ^1.2.0 - csstype: ^3.0.2 - checksum: 24cfd5b16e6f2335c032ca33804a876e0442aaf8f9c94d269d23735ebd194fb1ed142542dd92191a3e6ef8bad5bd560dfc5aaf363a1b70954726dbd4dd93085c - languageName: node - linkType: hard - -"@emotion/sheet@npm:^1.2.1": - version: 1.2.1 - resolution: "@emotion/sheet@npm:1.2.1" - checksum: ce78763588ea522438156344d9f592203e2da582d8d67b32e1b0b98eaba26994c6c270f8c7ad46442fc9c0a9f048685d819cd73ca87e544520fd06f0e24a1562 - languageName: node - linkType: hard - -"@emotion/styled@npm:11.10.6": - version: 11.10.6 - resolution: "@emotion/styled@npm:11.10.6" - dependencies: - "@babel/runtime": ^7.18.3 - "@emotion/babel-plugin": ^11.10.6 - "@emotion/is-prop-valid": ^1.2.0 - "@emotion/serialize": ^1.1.1 - "@emotion/use-insertion-effect-with-fallbacks": ^1.0.0 - "@emotion/utils": ^1.2.0 - peerDependencies: - "@emotion/react": ^11.0.0-rc.0 - react: ">=16.8.0" - peerDependenciesMeta: - "@types/react": - optional: true - checksum: ed0ee4bec3b63ee9c5eb8216b22646313ff1ada06c5183f128d25b73252126e9fde625e81c868be7ccd666b686a73076f923ce188dac25e93d5062ddffdad46f - languageName: node - linkType: hard - -"@emotion/stylis@npm:^0.8.4": - version: 0.8.5 - resolution: "@emotion/stylis@npm:0.8.5" - checksum: 67ff5958449b2374b329fb96e83cb9025775ffe1e79153b499537c6c8b2eb64b77f32d7b5d004d646973662356ceb646afd9269001b97c54439fceea3203ce65 - languageName: node - linkType: hard - -"@emotion/unitless@npm:^0.7.4": - version: 0.7.5 - resolution: "@emotion/unitless@npm:0.7.5" - checksum: f976e5345b53fae9414a7b2e7a949aa6b52f8bdbcc84458b1ddc0729e77ba1d1dfdff9960e0da60183877873d3a631fa24d9695dd714ed94bcd3ba5196586a6b - languageName: node - linkType: hard - -"@emotion/unitless@npm:^0.8.0": - version: 0.8.0 - resolution: "@emotion/unitless@npm:0.8.0" - checksum: 176141117ed23c0eb6e53a054a69c63e17ae532ec4210907a20b2208f91771821835f1c63dd2ec63e30e22fcc984026d7f933773ee6526dd038e0850919fae7a - languageName: node - linkType: hard - -"@emotion/use-insertion-effect-with-fallbacks@npm:^1.0.0": - version: 1.0.0 - resolution: "@emotion/use-insertion-effect-with-fallbacks@npm:1.0.0" - peerDependencies: - react: ">=16.8.0" - checksum: 4f06a3b48258c832aa8022a262572061a31ff078d377e9164cccc99951309d70f4466e774fe704461b2f8715007a82ed625a54a5c7a127c89017d3ce3187d4f1 - languageName: node - linkType: hard - -"@emotion/utils@npm:^1.2.0": - version: 1.2.0 - resolution: "@emotion/utils@npm:1.2.0" - checksum: 55457a49ddd4db6a014ea0454dc09eaa23eedfb837095c8ff90470cb26a303f7ceb5fcc1e2190ef64683e64cfd33d3ba3ca3109cd87d12bc9e379e4195c9a4dd - languageName: node - linkType: hard - -"@emotion/weak-memoize@npm:^0.3.0": - version: 0.3.0 - resolution: "@emotion/weak-memoize@npm:0.3.0" - checksum: f43ef4c8b7de70d9fa5eb3105921724651e4188e895beb71f0c5919dc899a7b8743e1fdd99d38b9092dd5722c7be2312ebb47fbdad0c4e38bea58f6df5885cc0 - languageName: node - linkType: hard - -"@esbuild/android-arm64@npm:0.17.12": - version: 0.17.12 - resolution: "@esbuild/android-arm64@npm:0.17.12" - conditions: os=android & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/android-arm@npm:0.17.12": - version: 0.17.12 - resolution: "@esbuild/android-arm@npm:0.17.12" - conditions: os=android & cpu=arm - languageName: node - linkType: hard - -"@esbuild/android-x64@npm:0.17.12": - version: 0.17.12 - resolution: "@esbuild/android-x64@npm:0.17.12" - conditions: os=android & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/darwin-arm64@npm:0.17.12": - version: 0.17.12 - resolution: "@esbuild/darwin-arm64@npm:0.17.12" - conditions: os=darwin & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/darwin-x64@npm:0.17.12": - version: 0.17.12 - resolution: "@esbuild/darwin-x64@npm:0.17.12" - conditions: os=darwin & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/freebsd-arm64@npm:0.17.12": - version: 0.17.12 - resolution: "@esbuild/freebsd-arm64@npm:0.17.12" - conditions: os=freebsd & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/freebsd-x64@npm:0.17.12": - version: 0.17.12 - resolution: "@esbuild/freebsd-x64@npm:0.17.12" - conditions: os=freebsd & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/linux-arm64@npm:0.17.12": - version: 0.17.12 - resolution: "@esbuild/linux-arm64@npm:0.17.12" - conditions: os=linux & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/linux-arm@npm:0.17.12": - version: 0.17.12 - resolution: "@esbuild/linux-arm@npm:0.17.12" - conditions: os=linux & cpu=arm - languageName: node - linkType: hard - -"@esbuild/linux-ia32@npm:0.17.12": - version: 0.17.12 - resolution: "@esbuild/linux-ia32@npm:0.17.12" - conditions: os=linux & cpu=ia32 - languageName: node - linkType: hard - -"@esbuild/linux-loong64@npm:0.17.12": - version: 0.17.12 - resolution: "@esbuild/linux-loong64@npm:0.17.12" - conditions: os=linux & cpu=loong64 - languageName: node - linkType: hard - -"@esbuild/linux-mips64el@npm:0.17.12": - version: 0.17.12 - resolution: "@esbuild/linux-mips64el@npm:0.17.12" - conditions: os=linux & cpu=mips64el - languageName: node - linkType: hard - -"@esbuild/linux-ppc64@npm:0.17.12": - version: 0.17.12 - resolution: "@esbuild/linux-ppc64@npm:0.17.12" - conditions: os=linux & cpu=ppc64 - languageName: node - linkType: hard - -"@esbuild/linux-riscv64@npm:0.17.12": - version: 0.17.12 - resolution: "@esbuild/linux-riscv64@npm:0.17.12" - conditions: os=linux & cpu=riscv64 - languageName: node - linkType: hard - -"@esbuild/linux-s390x@npm:0.17.12": - version: 0.17.12 - resolution: "@esbuild/linux-s390x@npm:0.17.12" - conditions: os=linux & cpu=s390x - languageName: node - linkType: hard - -"@esbuild/linux-x64@npm:0.17.12": - version: 0.17.12 - resolution: "@esbuild/linux-x64@npm:0.17.12" - conditions: os=linux & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/netbsd-x64@npm:0.17.12": - version: 0.17.12 - resolution: "@esbuild/netbsd-x64@npm:0.17.12" - conditions: os=netbsd & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/openbsd-x64@npm:0.17.12": - version: 0.17.12 - resolution: "@esbuild/openbsd-x64@npm:0.17.12" - conditions: os=openbsd & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/sunos-x64@npm:0.17.12": - version: 0.17.12 - resolution: "@esbuild/sunos-x64@npm:0.17.12" - conditions: os=sunos & cpu=x64 - languageName: node - linkType: hard - -"@esbuild/win32-arm64@npm:0.17.12": - version: 0.17.12 - resolution: "@esbuild/win32-arm64@npm:0.17.12" - conditions: os=win32 & cpu=arm64 - languageName: node - linkType: hard - -"@esbuild/win32-ia32@npm:0.17.12": - version: 0.17.12 - resolution: "@esbuild/win32-ia32@npm:0.17.12" - conditions: os=win32 & cpu=ia32 - languageName: node - linkType: hard - -"@esbuild/win32-x64@npm:0.17.12": - version: 0.17.12 - resolution: "@esbuild/win32-x64@npm:0.17.12" - conditions: os=win32 & cpu=x64 - languageName: node - linkType: hard - -"@eslint-community/eslint-utils@npm:^4.2.0": - version: 4.3.0 - resolution: "@eslint-community/eslint-utils@npm:4.3.0" - dependencies: - eslint-visitor-keys: ^3.3.0 - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - checksum: f487760a692f0f1fef76e248ad72976919576ba57edc2b1b1dc1d182553bae6b5bf7b078e654da85d04f0af8a485d20bd26280002768f4fbcd2e330078340cb0 - languageName: node - linkType: hard - -"@eslint-community/regexpp@npm:^4.4.0": - version: 4.4.0 - resolution: "@eslint-community/regexpp@npm:4.4.0" - checksum: 2d127af0c752b80e8a782eacfe996a86925d21de92da3ffc6f9e615e701145e44a62e26bdd88bfac2cd76779c39ba8d9875a91046ec5e7e5f23cb647c247ea6a - languageName: node - linkType: hard - -"@eslint/eslintrc@npm:^1.4.1": - version: 1.4.1 - resolution: "@eslint/eslintrc@npm:1.4.1" - dependencies: - ajv: ^6.12.4 - debug: ^4.3.2 - espree: ^9.4.0 - globals: ^13.19.0 - ignore: ^5.2.0 - import-fresh: ^3.2.1 - js-yaml: ^4.1.0 - minimatch: ^3.1.2 - strip-json-comments: ^3.1.1 - checksum: cd3e5a8683db604739938b1c1c8b77927dc04fce3e28e0c88e7f2cd4900b89466baf83dfbad76b2b9e4d2746abdd00dd3f9da544d3e311633d8693f327d04cd7 - languageName: node - linkType: hard - -"@eslint/eslintrc@npm:^2.0.1": - version: 2.0.1 - resolution: "@eslint/eslintrc@npm:2.0.1" - dependencies: - ajv: ^6.12.4 - debug: ^4.3.2 - espree: ^9.5.0 - globals: ^13.19.0 - ignore: ^5.2.0 - import-fresh: ^3.2.1 - js-yaml: ^4.1.0 - minimatch: ^3.1.2 - strip-json-comments: ^3.1.1 - checksum: 56b9192a687a450db53a7b883daf9f0f447c43b3510189cf88808a7a2467c2a302a42a50f184cc6d5a9faf3d1df890a2ef0fd0d60b751f32a3e9dfea717c6b48 - languageName: node - linkType: hard - -"@eslint/js@npm:8.36.0": - version: 8.36.0 - resolution: "@eslint/js@npm:8.36.0" - checksum: b7d6b84b823c8c7784be390741196617565527b1f7c0977fde9455bfb57fd88f81c074a03dd878757d2c33fa29f24291e9ecbc1425710f067917324b55e1bf3a - languageName: node - linkType: hard - -"@floating-ui/core@npm:^1.2.4": - version: 1.2.4 - resolution: "@floating-ui/core@npm:1.2.4" - checksum: 1c163ea1804e2b0a28fda6e32efed0e242d0db8081fd24aab9d1cbb100f94a558709231c483bf74bf09a9204ea6e7845813d43b5322ceb6ee63285308f68f65b - languageName: node - linkType: hard - -"@floating-ui/dom@npm:^1.2.1": - version: 1.2.5 - resolution: "@floating-ui/dom@npm:1.2.5" - dependencies: - "@floating-ui/core": ^1.2.4 - checksum: a21c272a36c7cd7d337eaed82c1f8a81ccc5003d04cefa07591dc7fbb0a24d57a2c097b410593b5416145a68ac10a7a7a745c3cc4f8196268fa002364d28804b - languageName: node - linkType: hard - -"@floating-ui/react-dom-interactions@npm:0.13.3": - version: 0.13.3 - resolution: "@floating-ui/react-dom-interactions@npm:0.13.3" - dependencies: - "@floating-ui/react-dom": ^1.0.1 - aria-hidden: ^1.1.3 - tabbable: ^6.0.1 - peerDependencies: - react: ">=16.8.0" - react-dom: ">=16.8.0" - checksum: a72a036628b9c423114b3654ae239b50fac14c191fcad402ebc4cd4818b7fe2fdce000791487cf6afcafd1b7eff35a99ffe15df4e1c3b3271fbb617717fc4df2 - languageName: node - linkType: hard - -"@floating-ui/react-dom@npm:^1.0.1": - version: 1.3.0 - resolution: "@floating-ui/react-dom@npm:1.3.0" - dependencies: - "@floating-ui/dom": ^1.2.1 - peerDependencies: - react: ">=16.8.0" - react-dom: ">=16.8.0" - checksum: ce0ad3e3bbe43cfd15a6a0d5cccede02175c845862bfab52027995ab99c6b29630180dc7d146f76ebb34730f90a6ab9bf193c8984fe8d7f56062308e4ca98f77 - languageName: node - linkType: hard - -"@formatjs/ecma402-abstract@npm:1.14.3": - version: 1.14.3 - resolution: "@formatjs/ecma402-abstract@npm:1.14.3" - dependencies: - "@formatjs/intl-localematcher": 0.2.32 - tslib: ^2.4.0 - checksum: 504ae9775094adec611aa0bbc6dadec2360ba30c13331f376feacd75b23f856ac1e45e3c88a572fb91ff917e726d0cc7e6e1b6c5b73af48f53896592362c91d5 - languageName: node - linkType: hard - -"@formatjs/fast-memoize@npm:2.0.1": - version: 2.0.1 - resolution: "@formatjs/fast-memoize@npm:2.0.1" - dependencies: - tslib: ^2.4.0 - checksum: e434cdc53354666459c47556c403f0ed3391ebab0e851a64e5622d8d81e3b684a74a09c4bf5189885c66e743004601f64e2e2c8c70adf6b00071d4afea20f69d - languageName: node - linkType: hard - -"@formatjs/icu-messageformat-parser@npm:2.3.0": - version: 2.3.0 - resolution: "@formatjs/icu-messageformat-parser@npm:2.3.0" - dependencies: - "@formatjs/ecma402-abstract": 1.14.3 - "@formatjs/icu-skeleton-parser": 1.3.18 - tslib: ^2.4.0 - checksum: e8aca733bed81c94ec16fa9f1a88dbaf93a644a8c5796a6ab1e795112dd1f6c1e92528a123483d3034ac5e6b2b454481ef61f7e56e6e77f1467f9524be7fe331 - languageName: node - linkType: hard - -"@formatjs/icu-skeleton-parser@npm:1.3.18": - version: 1.3.18 - resolution: "@formatjs/icu-skeleton-parser@npm:1.3.18" - dependencies: - "@formatjs/ecma402-abstract": 1.14.3 - tslib: ^2.4.0 - checksum: 19655c452ed3c45db07b03c90fbfe6172655b0babb9579f2d9397ca2b3c56e5e17a3beed1d13af12104313e6ed1f14976d7c996756f1a59c977d6f3228518fad - languageName: node - linkType: hard - -"@formatjs/intl-localematcher@npm:0.2.32": - version: 0.2.32 - resolution: "@formatjs/intl-localematcher@npm:0.2.32" - dependencies: - tslib: ^2.4.0 - checksum: 477e18aabaf2e6e90fc12952a3cb6c0ebb40ad99414d6b9d2501c6348fbad58cacb433ec6630955cfd1491ea7630f32a9dc280bb27d0fb8a784251404a54140a - languageName: node - linkType: hard - -"@gar/promisify@npm:^1.1.3": - version: 1.1.3 - resolution: "@gar/promisify@npm:1.1.3" - checksum: 4059f790e2d07bf3c3ff3e0fec0daa8144fe35c1f6e0111c9921bd32106adaa97a4ab096ad7dab1e28ee6a9060083c4d1a4ada42a7f5f3f7a96b8812e2b757c1 - languageName: node - linkType: hard - -"@graphql-codegen/add@npm:4.0.1": - version: 4.0.1 - resolution: "@graphql-codegen/add@npm:4.0.1" - dependencies: - "@graphql-codegen/plugin-helpers": ^4.1.0 - tslib: ~2.5.0 - peerDependencies: - graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 - checksum: 0a1ee993cda0fd2adbffd79db03007e9eaa32830607ba6d46c12414bd9e0f568cee8c0d9ad976915b35a4647ff3201364383e57e023ab7dfd3b18f7c69c464e8 - languageName: node - linkType: hard - -"@graphql-codegen/cli@npm:3.2.2": - version: 3.2.2 - resolution: "@graphql-codegen/cli@npm:3.2.2" - dependencies: - "@babel/generator": ^7.18.13 - "@babel/template": ^7.18.10 - "@babel/types": ^7.18.13 - "@graphql-codegen/core": ^3.1.0 - "@graphql-codegen/plugin-helpers": ^4.1.0 - "@graphql-tools/apollo-engine-loader": ^7.3.6 - "@graphql-tools/code-file-loader": ^7.3.17 - "@graphql-tools/git-loader": ^7.2.13 - "@graphql-tools/github-loader": ^7.3.20 - "@graphql-tools/graphql-file-loader": ^7.5.0 - "@graphql-tools/json-file-loader": ^7.4.1 - "@graphql-tools/load": ^7.8.0 - "@graphql-tools/prisma-loader": ^7.2.49 - "@graphql-tools/url-loader": ^7.13.2 - "@graphql-tools/utils": ^9.0.0 - "@parcel/watcher": ^2.1.0 - "@whatwg-node/fetch": ^0.8.0 - chalk: ^4.1.0 - cosmiconfig: ^7.0.0 - debounce: ^1.2.0 - detect-indent: ^6.0.0 - graphql-config: ^4.5.0 - inquirer: ^8.0.0 - is-glob: ^4.0.1 - jiti: ^1.17.1 - json-to-pretty-yaml: ^1.2.2 - listr2: ^4.0.5 - log-symbols: ^4.0.0 - micromatch: ^4.0.5 - shell-quote: ^1.7.3 - string-env-interpolation: ^1.0.1 - ts-log: ^2.2.3 - tslib: ^2.4.0 - yaml: ^1.10.0 - yargs: ^17.0.0 - peerDependencies: - graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 - bin: - gql-gen: cjs/bin.js - graphql-code-generator: cjs/bin.js - graphql-codegen: cjs/bin.js - graphql-codegen-esm: esm/bin.js - checksum: b94284ac538a3504f96c7d507c140b7cfee30042209c4230ffc3068f05b6b27c75e1922b31c696363ab43e34e472ed194cc72996bbb10f59991cd2a4a35ff36e - languageName: node - linkType: hard - -"@graphql-codegen/core@npm:^3.1.0": - version: 3.1.0 - resolution: "@graphql-codegen/core@npm:3.1.0" - dependencies: - "@graphql-codegen/plugin-helpers": ^4.1.0 - "@graphql-tools/schema": ^9.0.0 - "@graphql-tools/utils": ^9.1.1 - tslib: ~2.5.0 - peerDependencies: - graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 - checksum: 7ace2b185242d00575b877b0bbb884c66915d246ba17a98c0ab82c2ee3a93ff2c9ae9d7d75a1d346de02ca8f12eb02801ffe2da4846da6e164b43176cd02dd8c - languageName: node - linkType: hard - -"@graphql-codegen/introspection@npm:3.0.1": - version: 3.0.1 - resolution: "@graphql-codegen/introspection@npm:3.0.1" - dependencies: - "@graphql-codegen/plugin-helpers": ^4.1.0 - "@graphql-codegen/visitor-plugin-common": ^3.0.1 - tslib: ~2.5.0 - peerDependencies: - graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 - checksum: 054ce28956e63ec2e5dbc4b0d812d2ca6784c72a17c936e0066b3792071749ec14bc39a73cea2407221b503a26cd65cb2eb3da59d632681b60aeee767024bbe2 - languageName: node - linkType: hard - -"@graphql-codegen/plugin-helpers@npm:^2.7.2": - version: 2.7.2 - resolution: "@graphql-codegen/plugin-helpers@npm:2.7.2" - dependencies: - "@graphql-tools/utils": ^8.8.0 - change-case-all: 1.0.14 - common-tags: 1.8.2 - import-from: 4.0.0 - lodash: ~4.17.0 - tslib: ~2.4.0 - peerDependencies: - graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 - checksum: 66e0d507ad5db60b67092ebf7632d464d56ab446ac8fd87c293e00d9016944912d8cf9199e3e026b0a9247a50f50c4118a44f49e13675db64211652cd6259b05 - languageName: node - linkType: hard - -"@graphql-codegen/plugin-helpers@npm:^4.1.0": - version: 4.1.0 - resolution: "@graphql-codegen/plugin-helpers@npm:4.1.0" - dependencies: - "@graphql-tools/utils": ^9.0.0 - change-case-all: 1.0.15 - common-tags: 1.8.2 - import-from: 4.0.0 - lodash: ~4.17.0 - tslib: ~2.5.0 - peerDependencies: - graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 - checksum: a4d89909d7a62bd7a93041b6073b1d46e912b42f7af1d15c44f7ed595ab1185b6c257cccf8272e0ae36ba22724578449d0e21524e8dbc21fb375da0620687868 - languageName: node - linkType: hard - -"@graphql-codegen/schema-ast@npm:^3.0.1": - version: 3.0.1 - resolution: "@graphql-codegen/schema-ast@npm:3.0.1" - dependencies: - "@graphql-codegen/plugin-helpers": ^4.1.0 - "@graphql-tools/utils": ^9.0.0 - tslib: ~2.5.0 - peerDependencies: - graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 - checksum: 620aa67a4ae59ccb4609763b7347d05e2cec62bf1362be3e1e01fc00969cdbb858398542aa261128e5b5e3cb6808b77861bdcf82662e80326e72b418f25f465f - languageName: node - linkType: hard - -"@graphql-codegen/typescript-operations@npm:3.0.2": - version: 3.0.2 - resolution: "@graphql-codegen/typescript-operations@npm:3.0.2" - dependencies: - "@graphql-codegen/plugin-helpers": ^4.1.0 - "@graphql-codegen/typescript": ^3.0.2 - "@graphql-codegen/visitor-plugin-common": 3.0.2 - auto-bind: ~4.0.0 - tslib: ~2.5.0 - peerDependencies: - graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 - checksum: 35005e34b978db6226c4e7018eaf346c77f0efcd2b121eb69af4669a2604a172415b50244867cc9701c41134a7a4312b92eeec82dcb756e282ba755aea1c4a28 - languageName: node - linkType: hard - -"@graphql-codegen/typescript-react-apollo@npm:3.3.7": - version: 3.3.7 - resolution: "@graphql-codegen/typescript-react-apollo@npm:3.3.7" - dependencies: - "@graphql-codegen/plugin-helpers": ^2.7.2 - "@graphql-codegen/visitor-plugin-common": 2.13.1 - auto-bind: ~4.0.0 - change-case-all: 1.0.14 - tslib: ~2.4.0 - peerDependencies: - graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 - graphql-tag: ^2.0.0 - checksum: e21d111ce1c968499a7f233d15801725f67745c53b70a3d6c6076824f81787e7dda34b248e8f606c8a4920dd0c078db1cf644ebd6ffde9b4e7b5b0cd652a4127 - languageName: node - linkType: hard - -"@graphql-codegen/typescript@npm:3.0.2, @graphql-codegen/typescript@npm:^3.0.2": - version: 3.0.2 - resolution: "@graphql-codegen/typescript@npm:3.0.2" - dependencies: - "@graphql-codegen/plugin-helpers": ^4.1.0 - "@graphql-codegen/schema-ast": ^3.0.1 - "@graphql-codegen/visitor-plugin-common": 3.0.2 - auto-bind: ~4.0.0 - tslib: ~2.5.0 - peerDependencies: - graphql: ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 - checksum: e92dc54804b6ad45fb2499b91cb89743e455a984684e2b1df1b1a8f479a0bbffa5c625be97ccb55874ac8b7316a820b546e9e312b22eda78012acd5c27594a28 - languageName: node - linkType: hard - -"@graphql-codegen/visitor-plugin-common@npm:2.13.1": - version: 2.13.1 - resolution: "@graphql-codegen/visitor-plugin-common@npm:2.13.1" - dependencies: - "@graphql-codegen/plugin-helpers": ^2.7.2 - "@graphql-tools/optimize": ^1.3.0 - "@graphql-tools/relay-operation-optimizer": ^6.5.0 - "@graphql-tools/utils": ^8.8.0 - auto-bind: ~4.0.0 - change-case-all: 1.0.14 - dependency-graph: ^0.11.0 - graphql-tag: ^2.11.0 - parse-filepath: ^1.0.2 - tslib: ~2.4.0 - peerDependencies: - graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 - checksum: 0c329aa6e435602f2f6c1569ec2091b7850f58cc5dca7ac763c38c82588545ec1110c1de587f5f3949b11ff96f94401d1e63e329607d78424583b276fd08f1ae - languageName: node - linkType: hard - -"@graphql-codegen/visitor-plugin-common@npm:3.0.2, @graphql-codegen/visitor-plugin-common@npm:^3.0.1": - version: 3.0.2 - resolution: "@graphql-codegen/visitor-plugin-common@npm:3.0.2" - dependencies: - "@graphql-codegen/plugin-helpers": ^4.1.0 - "@graphql-tools/optimize": ^1.3.0 - "@graphql-tools/relay-operation-optimizer": ^6.5.0 - "@graphql-tools/utils": ^9.0.0 - auto-bind: ~4.0.0 - change-case-all: 1.0.15 - dependency-graph: ^0.11.0 - graphql-tag: ^2.11.0 - parse-filepath: ^1.0.2 - tslib: ~2.5.0 - peerDependencies: - graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 - checksum: c8f941df7f8304b722b492ceaf15dddcf33e3a69bc29b54970908ffa12b14d92276958005bd307648e0cdc55f9e243d0fb390862f73a17a26bd50f6484ac42d6 - languageName: node - linkType: hard - -"@graphql-tools/apollo-engine-loader@npm:^7.3.6": - version: 7.3.26 - resolution: "@graphql-tools/apollo-engine-loader@npm:7.3.26" - dependencies: - "@ardatan/sync-fetch": ^0.0.1 - "@graphql-tools/utils": ^9.2.1 - "@whatwg-node/fetch": ^0.8.0 - tslib: ^2.4.0 - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 2dd0324cd677c0a399a3cda6f155e4367ac38c8f6ec8a36c50931e97ce93d70f716f95575bcfda33d5a5b3c75f0ba04c73b82d22613f1a89e3c31965f576ae22 - languageName: node - linkType: hard - -"@graphql-tools/batch-execute@npm:^8.5.18": - version: 8.5.18 - resolution: "@graphql-tools/batch-execute@npm:8.5.18" - dependencies: - "@graphql-tools/utils": 9.2.1 - dataloader: 2.2.2 - tslib: ^2.4.0 - value-or-promise: 1.0.12 - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 4a5b5dec502a91bd657a4ddad74965d050d3994c89f036225fac58657b5a275bb374224b20484e3ba773525e75a5552c4a5af7b6d52859ce3a3b32aec2412b6e - languageName: node - linkType: hard - -"@graphql-tools/code-file-loader@npm:^7.3.17": - version: 7.3.21 - resolution: "@graphql-tools/code-file-loader@npm:7.3.21" - dependencies: - "@graphql-tools/graphql-tag-pluck": 7.5.0 - "@graphql-tools/utils": 9.2.1 - globby: ^11.0.3 - tslib: ^2.4.0 - unixify: ^1.0.0 - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 5d0d0a70bac673b4925a65f2283e3fcc5c093d2466a144cc577cb515d3de92ca2458d92842e02fe82a95d57d30ce6d2998b8ee5674393f7cd3df52f69671d565 - languageName: node - linkType: hard - -"@graphql-tools/delegate@npm:9.0.28, @graphql-tools/delegate@npm:^9.0.27": - version: 9.0.28 - resolution: "@graphql-tools/delegate@npm:9.0.28" - dependencies: - "@graphql-tools/batch-execute": ^8.5.18 - "@graphql-tools/executor": ^0.0.15 - "@graphql-tools/schema": ^9.0.16 - "@graphql-tools/utils": ^9.2.1 - dataloader: ^2.2.2 - tslib: ^2.5.0 - value-or-promise: ^1.0.12 - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: e24c757ea15a2b654268194bbf76188fca6692486d1b019b0ad7d48c264f92b7b681a43c8a8355ace48a29f9dd566c20e8707b6cef281331a813f23ee1c94375 - languageName: node - linkType: hard - -"@graphql-tools/executor-graphql-ws@npm:^0.0.12": - version: 0.0.12 - resolution: "@graphql-tools/executor-graphql-ws@npm:0.0.12" - dependencies: - "@graphql-tools/utils": 9.2.1 - "@repeaterjs/repeater": 3.0.4 - "@types/ws": ^8.0.0 - graphql-ws: 5.12.0 - isomorphic-ws: 5.0.0 - tslib: ^2.4.0 - ws: 8.12.1 - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 017f970c19e843c24da9f2b2cf45b5d922f5652b05e34c69fb27c3882618c8cc6a6ee008d4e767c1e74b2ba8630147ec8c7821996ff0eb1724f15dc27b95d1fd - languageName: node - linkType: hard - -"@graphql-tools/executor-http@npm:^0.1.7": - version: 0.1.9 - resolution: "@graphql-tools/executor-http@npm:0.1.9" - dependencies: - "@graphql-tools/utils": ^9.2.1 - "@repeaterjs/repeater": ^3.0.4 - "@whatwg-node/fetch": ^0.8.1 - dset: ^3.1.2 - extract-files: ^11.0.0 - meros: ^1.2.1 - tslib: ^2.4.0 - value-or-promise: ^1.0.12 - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: de62f839c3775141f444a6a453bf8cd01e42257a915845180b7f840b59bb781c21eeb59f68b609dcbab5bae73bc9fa40f3d16449f23410bc616b1f347dedf1d1 - languageName: node - linkType: hard - -"@graphql-tools/executor-legacy-ws@npm:^0.0.9": - version: 0.0.9 - resolution: "@graphql-tools/executor-legacy-ws@npm:0.0.9" - dependencies: - "@graphql-tools/utils": 9.2.1 - "@types/ws": ^8.0.0 - isomorphic-ws: 5.0.0 - tslib: ^2.4.0 - ws: 8.12.1 - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 9f35a38d1e064d4c82eee8d91d0b12552f75b65a413e1defc3831c726c6304f26b3651d3bd26aff3f58e049e40639ddf9b27f681a8bc49fdf11fb693e0d05392 - languageName: node - linkType: hard - -"@graphql-tools/executor@npm:^0.0.15": - version: 0.0.15 - resolution: "@graphql-tools/executor@npm:0.0.15" - dependencies: - "@graphql-tools/utils": 9.2.1 - "@graphql-typed-document-node/core": 3.1.2 - "@repeaterjs/repeater": 3.0.4 - tslib: ^2.4.0 - value-or-promise: 1.0.12 - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 7a963d6fcd00bd9c2a42f35a33bc9178576a1eeac755ce69981aa1e2c61238953b7ab9c11ffcfc86e49fdcf4fc057698c6f7169d6be580298e286076276b1295 - languageName: node - linkType: hard - -"@graphql-tools/git-loader@npm:^7.2.13": - version: 7.2.20 - resolution: "@graphql-tools/git-loader@npm:7.2.20" - dependencies: - "@graphql-tools/graphql-tag-pluck": 7.5.0 - "@graphql-tools/utils": 9.2.1 - is-glob: 4.0.3 - micromatch: ^4.0.4 - tslib: ^2.4.0 - unixify: ^1.0.0 - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: a0f16d44c60261eb9680f907d56b86ce3dda4642118ef3c436946f8e5dc1390151b9fd5ae75d34736c78d16e3e1191c1596bd8a86866fe2384ee7b73b9000e29 - languageName: node - linkType: hard - -"@graphql-tools/github-loader@npm:^7.3.20": - version: 7.3.27 - resolution: "@graphql-tools/github-loader@npm:7.3.27" - dependencies: - "@ardatan/sync-fetch": ^0.0.1 - "@graphql-tools/graphql-tag-pluck": ^7.4.6 - "@graphql-tools/utils": ^9.2.1 - "@whatwg-node/fetch": ^0.8.0 - tslib: ^2.4.0 - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 467d5c9f0df5a26656dbd5939768335277eb25023331a359fd4748c2cd85de85affe8d7ac93ac9d51202ed208c54357561e32e2520fae28fdbc42dda72dd99f4 - languageName: node - linkType: hard - -"@graphql-tools/graphql-file-loader@npm:^7.3.7, @graphql-tools/graphql-file-loader@npm:^7.5.0": - version: 7.5.16 - resolution: "@graphql-tools/graphql-file-loader@npm:7.5.16" - dependencies: - "@graphql-tools/import": 6.7.17 - "@graphql-tools/utils": 9.2.1 - globby: ^11.0.3 - tslib: ^2.4.0 - unixify: ^1.0.0 - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 5f9af56511a2f791677ad2601e745053d3f28b3afdf5542261e4bbf9924b9872244dcb0c9f6c7ca7fe91b658c12f4d91529efd9638653e112ad75bf79c915d78 - languageName: node - linkType: hard - -"@graphql-tools/graphql-tag-pluck@npm:7.5.0, @graphql-tools/graphql-tag-pluck@npm:^7.4.6": - version: 7.5.0 - resolution: "@graphql-tools/graphql-tag-pluck@npm:7.5.0" - dependencies: - "@babel/parser": ^7.16.8 - "@babel/plugin-syntax-import-assertions": 7.20.0 - "@babel/traverse": ^7.16.8 - "@babel/types": ^7.16.8 - "@graphql-tools/utils": 9.2.1 - tslib: ^2.4.0 - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 47edaacdeafc4a464f8a51e047cafbb82a9a2700536a5b075eb4afad43c80b513a7b0ac4ad49a1e8a74b566ed7dfd677ebb0d0a967fe1e2ee66408cd5d4f294b - languageName: node - linkType: hard - -"@graphql-tools/import@npm:6.7.17": - version: 6.7.17 - resolution: "@graphql-tools/import@npm:6.7.17" - dependencies: - "@graphql-tools/utils": 9.2.1 - resolve-from: 5.0.0 - tslib: ^2.4.0 - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 232debc4abed340f9ab04a9474e6f1af0f50d5b6b66dc6f7b7307872a27bd00745bc4fad1d7d00bf3503686766d2e26c9c42c4f1e2409111799ad80119a8303a - languageName: node - linkType: hard - -"@graphql-tools/json-file-loader@npm:^7.3.7, @graphql-tools/json-file-loader@npm:^7.4.1": - version: 7.4.17 - resolution: "@graphql-tools/json-file-loader@npm:7.4.17" - dependencies: - "@graphql-tools/utils": 9.2.1 - globby: ^11.0.3 - tslib: ^2.4.0 - unixify: ^1.0.0 - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 54e4d1acf5bb1b55d72500b2ebb521d821edfb99ad7c1b0f0d6b2e3f87cfcda2d61ce6d4a886117ac11fb94354da6f7435f35a1ffdc359cf2e39da1d0fde76c5 - languageName: node - linkType: hard - -"@graphql-tools/load@npm:^7.5.5, @graphql-tools/load@npm:^7.8.0": - version: 7.8.13 - resolution: "@graphql-tools/load@npm:7.8.13" - dependencies: - "@graphql-tools/schema": 9.0.17 - "@graphql-tools/utils": 9.2.1 - p-limit: 3.1.0 - tslib: ^2.4.0 - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: f8dafe3b1575a33234b798751a6ec4ee9d78bfb32055395da45f7081737d30f863fe5bb2cc8c2aadd5b46d3a443d1dec75d7f2cc58399c071ac35c8470cb7ff6 - languageName: node - linkType: hard - -"@graphql-tools/merge@npm:8.4.0, @graphql-tools/merge@npm:^8.2.6": - version: 8.4.0 - resolution: "@graphql-tools/merge@npm:8.4.0" - dependencies: - "@graphql-tools/utils": 9.2.1 - tslib: ^2.4.0 - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 32265749833615ac2cb3d958318f5c46b7bd5ec858acfbad7136d379594ec3c98ba67ba5f04f4061187e5dfd52bb277155cd98fdeb2b4c5535c16bdb4f117ae0 - languageName: node - linkType: hard - -"@graphql-tools/optimize@npm:^1.3.0": - version: 1.3.1 - resolution: "@graphql-tools/optimize@npm:1.3.1" - dependencies: - tslib: ^2.4.0 - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 4eed041bc3199a70ab426eeb10bc4af65f18fa0c5907613aec236fd7e14918d0f895e12489df6ff501562415eef64c99777a3ca6f6a4ee3c796b68e7cb778342 - languageName: node - linkType: hard - -"@graphql-tools/prisma-loader@npm:^7.2.49": - version: 7.2.65 - resolution: "@graphql-tools/prisma-loader@npm:7.2.65" - dependencies: - "@graphql-tools/url-loader": 7.17.14 - "@graphql-tools/utils": 9.2.1 - "@types/js-yaml": ^4.0.0 - "@types/json-stable-stringify": ^1.0.32 - chalk: ^4.1.0 - debug: ^4.3.1 - dotenv: ^16.0.0 - graphql-request: ^5.0.0 - http-proxy-agent: ^5.0.0 - https-proxy-agent: ^5.0.0 - isomorphic-fetch: ^3.0.0 - jose: ^4.11.4 - js-yaml: ^4.0.0 - json-stable-stringify: ^1.0.1 - lodash: ^4.17.20 - scuid: ^1.1.0 - tslib: ^2.4.0 - yaml-ast-parser: ^0.0.43 - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 2354b7e2074b7a519984bb36f1923a1d24c26b83db5e3ad9c319a3e94365c469984fd8e0a442b9a1d6740e7b25830ae31069c89c2ae3c1ac63fa87b444d2b58f - languageName: node - linkType: hard - -"@graphql-tools/relay-operation-optimizer@npm:^6.5.0": - version: 6.5.17 - resolution: "@graphql-tools/relay-operation-optimizer@npm:6.5.17" - dependencies: - "@ardatan/relay-compiler": 12.0.0 - "@graphql-tools/utils": 9.2.1 - tslib: ^2.4.0 - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 1e5163390b2834c2246c4842c9ca7b9a63cdff17f5b5afe5934bbb837b5b26e14e2144ef3fad992e3618d4012fb6736a71c34a38e1fdb4e628e3de7f74fac8bd - languageName: node - linkType: hard - -"@graphql-tools/schema@npm:9.0.17, @graphql-tools/schema@npm:^9.0.0, @graphql-tools/schema@npm:^9.0.16": - version: 9.0.17 - resolution: "@graphql-tools/schema@npm:9.0.17" - dependencies: - "@graphql-tools/merge": 8.4.0 - "@graphql-tools/utils": 9.2.1 - tslib: ^2.4.0 - value-or-promise: 1.0.12 - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 1c6513dd88b47d07702d01a48941ee164c4090c69b2475b1dde48a3d8866ed48fd39a33d15510682f6d8c18d19ceb72b77104eb4edbb194f96a129cc03909e89 - languageName: node - linkType: hard - -"@graphql-tools/url-loader@npm:7.17.14, @graphql-tools/url-loader@npm:^7.13.2, @graphql-tools/url-loader@npm:^7.9.7": - version: 7.17.14 - resolution: "@graphql-tools/url-loader@npm:7.17.14" - dependencies: - "@ardatan/sync-fetch": ^0.0.1 - "@graphql-tools/delegate": ^9.0.27 - "@graphql-tools/executor-graphql-ws": ^0.0.12 - "@graphql-tools/executor-http": ^0.1.7 - "@graphql-tools/executor-legacy-ws": ^0.0.9 - "@graphql-tools/utils": ^9.2.1 - "@graphql-tools/wrap": ^9.3.8 - "@types/ws": ^8.0.0 - "@whatwg-node/fetch": ^0.8.0 - isomorphic-ws: ^5.0.0 - tslib: ^2.4.0 - value-or-promise: ^1.0.11 - ws: ^8.12.0 - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: a9473c0d49299d4807c5ab881407b7e96989a06cc583bddd34eb059295fd847df982bf95b82fc713150ac60fe1ccdd1db78bc17e3903db44684b5cce0f7cb82a - languageName: node - linkType: hard - -"@graphql-tools/utils@npm:9.2.1, @graphql-tools/utils@npm:^9.0.0, @graphql-tools/utils@npm:^9.1.1, @graphql-tools/utils@npm:^9.2.1": - version: 9.2.1 - resolution: "@graphql-tools/utils@npm:9.2.1" - dependencies: - "@graphql-typed-document-node/core": ^3.1.1 - tslib: ^2.4.0 - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 94ed12df5f49e5c338322ffd931236a687a3d5c443bf499f9baab5d4fcd9792234111142be8aa506a01ca2e82732996c4e1d8f6159ff9cc7fdc5c97f63e55226 - languageName: node - linkType: hard - -"@graphql-tools/utils@npm:^8.8.0": - version: 8.13.1 - resolution: "@graphql-tools/utils@npm:8.13.1" - dependencies: - tslib: ^2.4.0 - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: ff04fdeb29e9ac596ea53386cd5b23cd741bb14c1997c6b0ba3c34ca165bd82b528a355e8c8e2ba726eb39e833ba9cbb0851ba0addb8c6d367089a1145bf9a49 - languageName: node - linkType: hard - -"@graphql-tools/wrap@npm:^9.3.8": - version: 9.3.8 - resolution: "@graphql-tools/wrap@npm:9.3.8" - dependencies: - "@graphql-tools/delegate": 9.0.28 - "@graphql-tools/schema": 9.0.17 - "@graphql-tools/utils": 9.2.1 - tslib: ^2.4.0 - value-or-promise: 1.0.12 - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 1f280b939f1c8c33be8fbd92c0584e9125e30c59ce6f75f20657235d24e5a2c01eb3214eda9ae74d431d9da072cdfa6cedeafdc5b352dd33de439ba42402efcb - languageName: node - linkType: hard - -"@graphql-typed-document-node/core@npm:3.1.2": - version: 3.1.2 - resolution: "@graphql-typed-document-node/core@npm:3.1.2" - peerDependencies: - graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: a61afa025acdabd7833e4f654a5802fc1a526171f81e0c435c8e651050a5a0682499a2c7a51304ceb61fde36cd69fc7975ce5e1b16b9ba7ea474c649f33eea8b - languageName: node - linkType: hard - -"@graphql-typed-document-node/core@npm:^3.1.1": - version: 3.2.0 - resolution: "@graphql-typed-document-node/core@npm:3.2.0" - peerDependencies: - graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: fa44443accd28c8cf4cb96aaaf39d144a22e8b091b13366843f4e97d19c7bfeaf609ce3c7603a4aeffe385081eaf8ea245d078633a7324c11c5ec4b2011bb76d - languageName: node - linkType: hard - -"@humanwhocodes/config-array@npm:^0.11.8": - version: 0.11.8 - resolution: "@humanwhocodes/config-array@npm:0.11.8" - dependencies: - "@humanwhocodes/object-schema": ^1.2.1 - debug: ^4.1.1 - minimatch: ^3.0.5 - checksum: 0fd6b3c54f1674ce0a224df09b9c2f9846d20b9e54fabae1281ecfc04f2e6ad69bf19e1d6af6a28f88e8aa3990168b6cb9e1ef755868c3256a630605ec2cb1d3 - languageName: node - linkType: hard - -"@humanwhocodes/module-importer@npm:^1.0.1": - version: 1.0.1 - resolution: "@humanwhocodes/module-importer@npm:1.0.1" - checksum: 0fd22007db8034a2cdf2c764b140d37d9020bbfce8a49d3ec5c05290e77d4b0263b1b972b752df8c89e5eaa94073408f2b7d977aed131faf6cf396ebb5d7fb61 - languageName: node - linkType: hard - -"@humanwhocodes/object-schema@npm:^1.2.1": - version: 1.2.1 - resolution: "@humanwhocodes/object-schema@npm:1.2.1" - checksum: a824a1ec31591231e4bad5787641f59e9633827d0a2eaae131a288d33c9ef0290bd16fda8da6f7c0fcb014147865d12118df10db57f27f41e20da92369fcb3f1 - languageName: node - linkType: hard - -"@internationalized/date@npm:^3.1.0": - version: 3.1.0 - resolution: "@internationalized/date@npm:3.1.0" - dependencies: - "@swc/helpers": ^0.4.14 - checksum: 7ff8dd994a6efddcbe7d0c762504f81b2b9f87de858245fd974e9f87f7fb4cfe54918cc910f14aadadbb7575597e51ef10afa7cb529f4fd07fbc7ad72bdc9550 - languageName: node - linkType: hard - -"@internationalized/message@npm:^3.1.0": - version: 3.1.0 - resolution: "@internationalized/message@npm:3.1.0" - dependencies: - "@swc/helpers": ^0.4.14 - intl-messageformat: ^10.1.0 - checksum: 4e0be02342938369a384275be0fcc90677af7d710137b247248346c590f9f33314bf4c760a95205388f5c1e95dfaad2603988cdb2fefac06a677d59bee64dd11 - languageName: node - linkType: hard - -"@internationalized/number@npm:^3.2.0": - version: 3.2.0 - resolution: "@internationalized/number@npm:3.2.0" - dependencies: - "@swc/helpers": ^0.4.14 - checksum: 1e61b62a4f763b4327fa5687948792a95eb03b919696c64b27835e6e217462997e1b23d4fc984f45568bcb13174df0db7c0f5177d25fde9824d5a42333fc369a - languageName: node - linkType: hard - -"@internationalized/string@npm:^3.1.0": - version: 3.1.0 - resolution: "@internationalized/string@npm:3.1.0" - dependencies: - "@swc/helpers": ^0.4.14 - checksum: 0a47b1dcc2d75207ff1f7e9ffe300cfec94a3b9f361f309c76dfa0614babb8e48f788c6d23c33637f337b752c458731e495ca9c398eb00756efc229e591b12e9 - languageName: node - linkType: hard - -"@jridgewell/gen-mapping@npm:^0.1.0": - version: 0.1.1 - resolution: "@jridgewell/gen-mapping@npm:0.1.1" - dependencies: - "@jridgewell/set-array": ^1.0.0 - "@jridgewell/sourcemap-codec": ^1.4.10 - checksum: 3bcc21fe786de6ffbf35c399a174faab05eb23ce6a03e8769569de28abbf4facc2db36a9ddb0150545ae23a8d35a7cf7237b2aa9e9356a7c626fb4698287d5cc - languageName: node - linkType: hard - -"@jridgewell/gen-mapping@npm:^0.3.2": - version: 0.3.2 - resolution: "@jridgewell/gen-mapping@npm:0.3.2" - dependencies: - "@jridgewell/set-array": ^1.0.1 - "@jridgewell/sourcemap-codec": ^1.4.10 - "@jridgewell/trace-mapping": ^0.3.9 - checksum: 1832707a1c476afebe4d0fbbd4b9434fdb51a4c3e009ab1e9938648e21b7a97049fa6009393bdf05cab7504108413441df26d8a3c12193996e65493a4efb6882 - languageName: node - linkType: hard - -"@jridgewell/resolve-uri@npm:3.1.0": - version: 3.1.0 - resolution: "@jridgewell/resolve-uri@npm:3.1.0" - checksum: b5ceaaf9a110fcb2780d1d8f8d4a0bfd216702f31c988d8042e5f8fbe353c55d9b0f55a1733afdc64806f8e79c485d2464680ac48a0d9fcadb9548ee6b81d267 - languageName: node - linkType: hard - -"@jridgewell/set-array@npm:^1.0.0, @jridgewell/set-array@npm:^1.0.1": - version: 1.1.2 - resolution: "@jridgewell/set-array@npm:1.1.2" - checksum: 69a84d5980385f396ff60a175f7177af0b8da4ddb81824cb7016a9ef914eee9806c72b6b65942003c63f7983d4f39a5c6c27185bbca88eb4690b62075602e28e - languageName: node - linkType: hard - -"@jridgewell/sourcemap-codec@npm:1.4.14, @jridgewell/sourcemap-codec@npm:^1.4.10, @jridgewell/sourcemap-codec@npm:^1.4.13": - version: 1.4.14 - resolution: "@jridgewell/sourcemap-codec@npm:1.4.14" - checksum: 61100637b6d173d3ba786a5dff019e1a74b1f394f323c1fee337ff390239f053b87266c7a948777f4b1ee68c01a8ad0ab61e5ff4abb5a012a0b091bec391ab97 - languageName: node - linkType: hard - -"@jridgewell/trace-mapping@npm:^0.3.17, @jridgewell/trace-mapping@npm:^0.3.9": - version: 0.3.17 - resolution: "@jridgewell/trace-mapping@npm:0.3.17" - dependencies: - "@jridgewell/resolve-uri": 3.1.0 - "@jridgewell/sourcemap-codec": 1.4.14 - checksum: 9d703b859cff5cd83b7308fd457a431387db5db96bd781a63bf48e183418dd9d3d44e76b9e4ae13237f6abeeb25d739ec9215c1d5bfdd08f66f750a50074a339 - languageName: node - linkType: hard - -"@jumpn/utils-array@npm:0.3.4": - version: 0.3.4 - resolution: "@jumpn/utils-array@npm:0.3.4" - dependencies: - babel-polyfill: 6.26.0 - babel-runtime: 6.26.0 - flow-static-land: 0.2.7 - checksum: 4133d46ee6291a97aebe7972c9ad11ed5c3a180490d71649e06eda22a61212f391dc44529c4e5057971066dacce8557018fbcd54ff832390f12acaa01547a36d - languageName: node - linkType: hard - -"@jumpn/utils-composite@npm:0.7.0": - version: 0.7.0 - resolution: "@jumpn/utils-composite@npm:0.7.0" - dependencies: - "@jumpn/utils-array": 0.3.4 - babel-polyfill: 6.26.0 - babel-runtime: 6.26.0 - fast-deep-equal: 1.0.0 - flow-static-land: 0.2.8 - checksum: 1f835367ea3a320870498b8a0263f77b96e20ecd5facdfd7c5e8e2a5a1c1987ea28ecebb6b7b92db42c16d72383446a4f8e42b30e893379e62149cdc827dd3fa - languageName: node - linkType: hard - -"@jumpn/utils-graphql@npm:0.6.0": - version: 0.6.0 - resolution: "@jumpn/utils-graphql@npm:0.6.0" - dependencies: - "@babel/runtime": 7.2.0 - core-js: 2.6.0 - graphql: 14.0.2 - checksum: 66ec04d8a2170112160b42fdc506d366f1b64844de3ac06c10fd0d9ccc5a80f9aa0daae567a9d0a0b3a4ec537d17bc2eb0c03c514f08d07b9f64ba3bc857d8eb - languageName: node - linkType: hard - -"@monaco-editor/loader@npm:^1.3.2": - version: 1.3.2 - resolution: "@monaco-editor/loader@npm:1.3.2" - dependencies: - state-local: ^1.0.6 - peerDependencies: - monaco-editor: ">= 0.21.0 < 1" - checksum: 7a1b65052bbaf4ef826392687bd7cfaf839509611034d2d616783b5d3fee91ed304d9086517c3b5f9099707828c57c855ff43407b3c2f5ae480faebb104d4343 - languageName: node - linkType: hard - -"@monaco-editor/react@npm:4.4.6": - version: 4.4.6 - resolution: "@monaco-editor/react@npm:4.4.6" - dependencies: - "@monaco-editor/loader": ^1.3.2 - prop-types: ^15.7.2 - peerDependencies: - monaco-editor: ">= 0.25.0 < 1" - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - checksum: cb25b5ce153608c2a4291390456488e100c5e3ac48a913875c98182836e2a9f315d4f96e85cf6f7d4b1eadff8d08d13356e38891b472894155bcb2c4aeaf3b1c - languageName: node - linkType: hard - -"@nicolo-ribaudo/eslint-scope-5-internals@npm:5.1.1-v1": - version: 5.1.1-v1 - resolution: "@nicolo-ribaudo/eslint-scope-5-internals@npm:5.1.1-v1" - dependencies: - eslint-scope: 5.1.1 - checksum: f2e3b2d6a6e2d9f163ca22105910c9f850dc4897af0aea3ef0a5886b63d8e1ba6505b71c99cb78a3bba24a09557d601eb21c8dede3f3213753fcfef364eb0e57 - languageName: node - linkType: hard - -"@nodelib/fs.scandir@npm:2.1.5": - version: 2.1.5 - resolution: "@nodelib/fs.scandir@npm:2.1.5" - dependencies: - "@nodelib/fs.stat": 2.0.5 - run-parallel: ^1.1.9 - checksum: a970d595bd23c66c880e0ef1817791432dbb7acbb8d44b7e7d0e7a22f4521260d4a83f7f9fd61d44fda4610105577f8f58a60718105fb38352baed612fd79e59 - languageName: node - linkType: hard - -"@nodelib/fs.stat@npm:2.0.5, @nodelib/fs.stat@npm:^2.0.2": - version: 2.0.5 - resolution: "@nodelib/fs.stat@npm:2.0.5" - checksum: 012480b5ca9d97bff9261571dbbec7bbc6033f69cc92908bc1ecfad0792361a5a1994bc48674b9ef76419d056a03efadfce5a6cf6dbc0a36559571a7a483f6f0 - languageName: node - linkType: hard - -"@nodelib/fs.walk@npm:^1.2.3, @nodelib/fs.walk@npm:^1.2.8": - version: 1.2.8 - resolution: "@nodelib/fs.walk@npm:1.2.8" - dependencies: - "@nodelib/fs.scandir": 2.1.5 - fastq: ^1.6.0 - checksum: 190c643f156d8f8f277bf2a6078af1ffde1fd43f498f187c2db24d35b4b4b5785c02c7dc52e356497b9a1b65b13edc996de08de0b961c32844364da02986dc53 - languageName: node - linkType: hard - -"@npmcli/fs@npm:^2.1.0": - version: 2.1.2 - resolution: "@npmcli/fs@npm:2.1.2" - dependencies: - "@gar/promisify": ^1.1.3 - semver: ^7.3.5 - checksum: 405074965e72d4c9d728931b64d2d38e6ea12066d4fad651ac253d175e413c06fe4350970c783db0d749181da8fe49c42d3880bd1cbc12cd68e3a7964d820225 - languageName: node - linkType: hard - -"@npmcli/move-file@npm:^2.0.0": - version: 2.0.1 - resolution: "@npmcli/move-file@npm:2.0.1" - dependencies: - mkdirp: ^1.0.4 - rimraf: ^3.0.2 - checksum: 52dc02259d98da517fae4cb3a0a3850227bdae4939dda1980b788a7670636ca2b4a01b58df03dd5f65c1e3cb70c50fa8ce5762b582b3f499ec30ee5ce1fd9380 - languageName: node - linkType: hard - -"@parcel/watcher@npm:^2.1.0": - version: 2.1.0 - resolution: "@parcel/watcher@npm:2.1.0" - dependencies: - is-glob: ^4.0.3 - micromatch: ^4.0.5 - node-addon-api: ^3.2.1 - node-gyp: latest - node-gyp-build: ^4.3.0 - checksum: 17f512ad6d5dbb40053ceea7091f8af754afc63786b8f050b225b89a8ba24900468aad8bc4edb25c0349b4c0c8d061f50aa19242c0af52cbc30e6ebf50c7bf4c - languageName: node - linkType: hard - -"@peculiar/asn1-schema@npm:^2.3.6": - version: 2.3.6 - resolution: "@peculiar/asn1-schema@npm:2.3.6" - dependencies: - asn1js: ^3.0.5 - pvtsutils: ^1.3.2 - tslib: ^2.4.0 - checksum: fc09387c6e3dea07fca21b54ea8c71ce3ec0f8c92377237e51aef729f0c2df92781aa7a18a546a6fe809519faeaa222df576ec21a35c6095037a78677204a55b - languageName: node - linkType: hard - -"@peculiar/json-schema@npm:^1.1.12": - version: 1.1.12 - resolution: "@peculiar/json-schema@npm:1.1.12" - dependencies: - tslib: ^2.0.0 - checksum: b26ececdc23c5ef25837f8be8d1eb5e1c8bb6e9ae7227ac59ffea57fff56bd05137734e7685e9100595d3d88d906dff638ef8d1df54264c388d3eac1b05aa060 - languageName: node - linkType: hard - -"@peculiar/webcrypto@npm:^1.4.0": - version: 1.4.3 - resolution: "@peculiar/webcrypto@npm:1.4.3" - dependencies: - "@peculiar/asn1-schema": ^2.3.6 - "@peculiar/json-schema": ^1.1.12 - pvtsutils: ^1.3.2 - tslib: ^2.5.0 - webcrypto-core: ^1.7.7 - checksum: 5604c02b7e9a8cef61bb4430e733e939c7737533ba65ba5fac4beb3a6d613add478ab45455cb57506789b6d00704d83e4965a0f712de3e8f40706e0961670e5c - languageName: node - linkType: hard - -"@pluralsh/design-system@npm:1.334.0": - version: 1.334.0 - resolution: "@pluralsh/design-system@npm:1.334.0" - dependencies: - "@floating-ui/react-dom-interactions": 0.13.3 - "@monaco-editor/react": 4.4.6 - "@react-aria/button": 3.7.0 - "@react-aria/checkbox": 3.8.0 - "@react-aria/combobox": 3.5.0 - "@react-aria/focus": 3.11.0 - "@react-aria/interactions": 3.14.0 - "@react-aria/listbox": 3.8.0 - "@react-aria/overlays": 3.13.0 - "@react-aria/radio": 3.5.0 - "@react-aria/select": 3.9.0 - "@react-aria/slider": 3.3.0 - "@react-aria/tabs": 3.4.0 - "@react-aria/utils": 3.15.0 - "@react-aria/visually-hidden": 3.7.0 - "@react-stately/collections": 3.6.0 - "@react-stately/combobox": 3.4.0 - "@react-stately/overlays": 3.5.0 - "@react-stately/radio": 3.7.0 - "@react-stately/slider": 3.3.0 - "@react-stately/tabs": 3.3.0 - "@react-stately/toggle": 3.5.0 - "@react-types/shared": 3.17.0 - "@tanstack/match-sorter-utils": 8.7.6 - "@tanstack/react-table": 8.7.9 - "@tanstack/react-virtual": 3.0.0-beta.48 - "@types/chroma-js": 2.1.5 - chroma-js: 2.4.2 - classnames: 2.3.2 - grommet: 2.29.1 - grommet-icons: 4.9.0 - highlight.js: 11.7.0 - honorable-recipe-mapper: 0.2.0 - immer: 9.0.19 - moment: 2.29.4 - prop-types: 15.8.1 - react-animate-height: 3.1.0 - react-markdown: 8.0.5 - react-merge-refs: 2.0.1 - react-spring: 9.6.1 - react-use-measure: 2.1.1 - react-virtual: 2.10.4 - rehype-raw: 6.1.1 - resize-observer-polyfill: 1.5.1 - styled-container-query: 1.3.5 - use-immer: 0.8.1 - peerDependencies: - "@emotion/react": ">=11.9.3" - "@emotion/styled": ">=11.9.3" - honorable: ">=1.0.0-beta.17" - honorable-theme-default: ">=1.0.0-beta.5" - react: ">=16.0.0" - react-dom: ">=16.0.0" - react-transition-group: ">=4.4.2" - styled-components: ">=5.3.5" - checksum: 9e8ffb14590473ad3c1d4b4871ecf6eb00cd4d82d5559b5e5b37980c468a4164a104c46d96bd537e626ef7f26c060cc0161813e2c81248d28c085d6d8de10559 - languageName: node - linkType: hard - -"@pluralsh/eslint-config-pluralsh@npm:1.4.13": - version: 1.4.13 - resolution: "@pluralsh/eslint-config-pluralsh@npm:1.4.13" - dependencies: - eslint: 8.32.0 - eslint-config-airbnb: 19.0.4 - eslint-plugin-import: 2.27.5 - eslint-plugin-import-newlines: ^1.2.3 - eslint-plugin-jsx-a11y: 6.7.1 - eslint-plugin-react: 7.32.1 - eslint-plugin-react-hooks: 4.6.0 - checksum: 4755f86ae2643616cd7e4fd6c72e9b41632c1aef2029fa95c526b0256848d1a20ebaf01ed3505eaeaaaca209039c1873823a0c30ef5a055bb9371f7d46662632 - languageName: node - linkType: hard - -"@pluralsh/eslint-config-typescript@npm:2.5.41": - version: 2.5.41 - resolution: "@pluralsh/eslint-config-typescript@npm:2.5.41" - dependencies: - "@babel/core": 7.20.12 - "@babel/eslint-parser": 7.19.1 - "@babel/preset-env": 7.20.2 - "@babel/preset-react": 7.18.6 - "@pluralsh/eslint-config-pluralsh": 1.4.13 - "@types/node": 18.15.5 - "@typescript-eslint/eslint-plugin": 5.49.0 - "@typescript-eslint/parser": 5.49.0 - eslint: 8.36.0 - typescript: 4.9.4 - checksum: f6e34884b0b54ecd7fd484373ff67c0aad2d344c27c103f552fb871b123b3ad252973c1dd16ff1fc6e61dffd31a11f34342427554c65c69880596850133a1e56 - languageName: node - linkType: hard - -"@reach/observe-rect@npm:^1.1.0": - version: 1.2.0 - resolution: "@reach/observe-rect@npm:1.2.0" - checksum: 7dd903eeaad0e22c6d973bd26265d91eadba56ab5134701ceb3e85214db75339fae94aa7e8b88a65e8daa64bc7cf1b915d4ffcdfd324466b561dc6adc3c6e070 - languageName: node - linkType: hard - -"@react-aria/button@npm:3.7.0": - version: 3.7.0 - resolution: "@react-aria/button@npm:3.7.0" - dependencies: - "@react-aria/focus": ^3.11.0 - "@react-aria/interactions": ^3.14.0 - "@react-aria/utils": ^3.15.0 - "@react-stately/toggle": ^3.5.0 - "@react-types/button": ^3.7.1 - "@react-types/shared": ^3.17.0 - "@swc/helpers": ^0.4.14 - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - checksum: cddf62f9163d51d1284f540650a8904f81c1172798f05936fb386db572bb185d5e08e16d44313c0965293632ac845b4f8feb229231791a43015857768c822de9 - languageName: node - linkType: hard - -"@react-aria/checkbox@npm:3.8.0": - version: 3.8.0 - resolution: "@react-aria/checkbox@npm:3.8.0" - dependencies: - "@react-aria/label": ^3.5.0 - "@react-aria/toggle": ^3.5.0 - "@react-aria/utils": ^3.15.0 - "@react-stately/checkbox": ^3.4.0 - "@react-stately/toggle": ^3.5.0 - "@react-types/checkbox": ^3.4.2 - "@react-types/shared": ^3.17.0 - "@swc/helpers": ^0.4.14 - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - checksum: 848e88d2fc7168dfda5e95c60b0e232a16cfc3a4ffca6db45449f3569e3562acfd7786ea676c2f6dc53b3da2b00d396eca71c757cbad9416d703c559bcbd847a - languageName: node - linkType: hard - -"@react-aria/combobox@npm:3.5.0": - version: 3.5.0 - resolution: "@react-aria/combobox@npm:3.5.0" - dependencies: - "@react-aria/i18n": ^3.7.0 - "@react-aria/interactions": ^3.14.0 - "@react-aria/listbox": ^3.8.0 - "@react-aria/live-announcer": ^3.2.0 - "@react-aria/menu": ^3.8.0 - "@react-aria/overlays": ^3.13.0 - "@react-aria/selection": ^3.13.0 - "@react-aria/textfield": ^3.9.0 - "@react-aria/utils": ^3.15.0 - "@react-stately/collections": ^3.6.0 - "@react-stately/combobox": ^3.4.0 - "@react-stately/layout": ^3.11.0 - "@react-types/button": ^3.7.1 - "@react-types/combobox": ^3.6.0 - "@react-types/shared": ^3.17.0 - "@swc/helpers": ^0.4.14 - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - checksum: 5f0c0586eae1a341a7b5cf950035fc6c105662222d8ac873d02e4473a67f360d6b949784db790e85893dc15bc8d366f4d335b6c3e0acffe5628a856c591b0fba - languageName: node - linkType: hard - -"@react-aria/focus@npm:3.11.0, @react-aria/focus@npm:^3.11.0": - version: 3.11.0 - resolution: "@react-aria/focus@npm:3.11.0" - dependencies: - "@react-aria/interactions": ^3.14.0 - "@react-aria/utils": ^3.15.0 - "@react-types/shared": ^3.17.0 - "@swc/helpers": ^0.4.14 - clsx: ^1.1.1 - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - checksum: f734d7f8d10b5088257742090e9881cea3e634bdc547a9daf8b4afaf67d691ff61457a4d5abec5b4a2faab26cc142f444737286f821a6e8e5014195340708114 - languageName: node - linkType: hard - -"@react-aria/i18n@npm:^3.7.0": - version: 3.7.0 - resolution: "@react-aria/i18n@npm:3.7.0" - dependencies: - "@internationalized/date": ^3.1.0 - "@internationalized/message": ^3.1.0 - "@internationalized/number": ^3.2.0 - "@internationalized/string": ^3.1.0 - "@react-aria/ssr": ^3.5.0 - "@react-aria/utils": ^3.15.0 - "@react-types/shared": ^3.17.0 - "@swc/helpers": ^0.4.14 - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - checksum: cdbfe335f66964b08111743b6e575a364f1cdac26c357ed134356448fd99d0e4810156992cca7e63de2d9abf536e879169586df88d0bb6491e31efd9f5ad6fc3 - languageName: node - linkType: hard - -"@react-aria/interactions@npm:3.14.0, @react-aria/interactions@npm:^3.14.0": - version: 3.14.0 - resolution: "@react-aria/interactions@npm:3.14.0" - dependencies: - "@react-aria/utils": ^3.15.0 - "@react-types/shared": ^3.17.0 - "@swc/helpers": ^0.4.14 - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - checksum: d4e2dd2617bdaa60025a9f50e2c314b2a74c56dba40cc536b909b78bb1c1268a25c5593f28661c86b1d2d37a443878dcacf86a3d6d597abfe8afee258b103ed8 - languageName: node - linkType: hard - -"@react-aria/label@npm:^3.5.0": - version: 3.5.0 - resolution: "@react-aria/label@npm:3.5.0" - dependencies: - "@react-aria/utils": ^3.15.0 - "@react-types/label": ^3.7.2 - "@react-types/shared": ^3.17.0 - "@swc/helpers": ^0.4.14 - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - checksum: 598fd0ffb2ec42b9d778fb0152df656fc5c93df151ebd5462875170b592c8f548658c05c8d8bd676da6a98d764ee195a7f3323dc1e485d28963d5789cdf5307a - languageName: node - linkType: hard - -"@react-aria/listbox@npm:3.8.0": - version: 3.8.0 - resolution: "@react-aria/listbox@npm:3.8.0" - dependencies: - "@react-aria/focus": ^3.11.0 - "@react-aria/interactions": ^3.14.0 - "@react-aria/label": ^3.5.0 - "@react-aria/selection": ^3.13.0 - "@react-aria/utils": ^3.15.0 - "@react-stately/collections": ^3.6.0 - "@react-stately/list": ^3.7.0 - "@react-types/listbox": ^3.4.0 - "@react-types/shared": ^3.17.0 - "@swc/helpers": ^0.4.14 - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - checksum: 99b3ab140d024a8740545a76c04311d76e4403038b2b3fee7f89a180af9350a06a450796c88d8df012b9325d4234fd8dadbd9e8b821aeb0f83f67e7e71271cf7 - languageName: node - linkType: hard - -"@react-aria/listbox@npm:^3.8.0": - version: 3.8.1 - resolution: "@react-aria/listbox@npm:3.8.1" - dependencies: - "@react-aria/focus": ^3.11.0 - "@react-aria/interactions": ^3.14.0 - "@react-aria/label": ^3.5.0 - "@react-aria/selection": ^3.13.1 - "@react-aria/utils": ^3.15.0 - "@react-stately/collections": ^3.6.0 - "@react-stately/list": ^3.7.0 - "@react-types/listbox": ^3.4.0 - "@react-types/shared": ^3.17.0 - "@swc/helpers": ^0.4.14 - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - checksum: 7848de8a89384a6ab29fb37ed6ef05fa5d7e05861e8c6ecf1fda7979a9fa80edfa3b7c321c5b5e0e2bad944f50d65a7baf2b0f6f69193f4a540dd3038851bc22 - languageName: node - linkType: hard - -"@react-aria/live-announcer@npm:^3.2.0": - version: 3.2.0 - resolution: "@react-aria/live-announcer@npm:3.2.0" - dependencies: - "@swc/helpers": ^0.4.14 - checksum: 5d76e24ab71aa9b8abc6440cb2786ef1e862edbd4539944f987b0e9f1cfaa2d50d4baaed9f695266455c151b3e76d6ee341b2699f7e95872d9bbdf4ab4fdf31d - languageName: node - linkType: hard - -"@react-aria/menu@npm:^3.8.0": - version: 3.8.1 - resolution: "@react-aria/menu@npm:3.8.1" - dependencies: - "@react-aria/i18n": ^3.7.0 - "@react-aria/interactions": ^3.14.0 - "@react-aria/overlays": ^3.13.0 - "@react-aria/selection": ^3.13.1 - "@react-aria/utils": ^3.15.0 - "@react-stately/collections": ^3.6.0 - "@react-stately/menu": ^3.5.0 - "@react-stately/tree": ^3.5.0 - "@react-types/button": ^3.7.1 - "@react-types/menu": ^3.8.0 - "@react-types/shared": ^3.17.0 - "@swc/helpers": ^0.4.14 - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - checksum: 8a8155dcbb6b1bae31e575d528c9dece97b694862dd9080c7025c1f30dd4f02a087f53c6422769900e9c48af4c0682a863e7095d72930e7e8e3becc3a3271b95 - languageName: node - linkType: hard - -"@react-aria/overlays@npm:3.13.0, @react-aria/overlays@npm:^3.13.0": - version: 3.13.0 - resolution: "@react-aria/overlays@npm:3.13.0" - dependencies: - "@react-aria/focus": ^3.11.0 - "@react-aria/i18n": ^3.7.0 - "@react-aria/interactions": ^3.14.0 - "@react-aria/ssr": ^3.5.0 - "@react-aria/utils": ^3.15.0 - "@react-aria/visually-hidden": ^3.7.0 - "@react-stately/overlays": ^3.5.0 - "@react-types/button": ^3.7.1 - "@react-types/overlays": ^3.7.0 - "@react-types/shared": ^3.17.0 - "@swc/helpers": ^0.4.14 - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - checksum: 5b88f3bc54da7b9adc773abe604049e9d63dabba527ad581a85a916b267c3fb68352aea55660c2aaf8f6a8a1002335cf6b805e261a0410f771d05913b0239d24 - languageName: node - linkType: hard - -"@react-aria/radio@npm:3.5.0": - version: 3.5.0 - resolution: "@react-aria/radio@npm:3.5.0" - dependencies: - "@react-aria/focus": ^3.11.0 - "@react-aria/i18n": ^3.7.0 - "@react-aria/interactions": ^3.14.0 - "@react-aria/label": ^3.5.0 - "@react-aria/utils": ^3.15.0 - "@react-stately/radio": ^3.7.0 - "@react-types/radio": ^3.4.0 - "@react-types/shared": ^3.17.0 - "@swc/helpers": ^0.4.14 - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - checksum: 165d185e078ddf6a3c2d74a8725bea69130bb31b48507df669019a13250e6881650374fdf7d7f9912f100c5e86fe288005d0557f4c93a7135b40d5d89ec246f6 - languageName: node - linkType: hard - -"@react-aria/select@npm:3.9.0": - version: 3.9.0 - resolution: "@react-aria/select@npm:3.9.0" - dependencies: - "@react-aria/i18n": ^3.7.0 - "@react-aria/interactions": ^3.14.0 - "@react-aria/label": ^3.5.0 - "@react-aria/listbox": ^3.8.0 - "@react-aria/menu": ^3.8.0 - "@react-aria/selection": ^3.13.0 - "@react-aria/utils": ^3.15.0 - "@react-aria/visually-hidden": ^3.7.0 - "@react-stately/select": ^3.4.0 - "@react-types/button": ^3.7.1 - "@react-types/select": ^3.7.0 - "@react-types/shared": ^3.17.0 - "@swc/helpers": ^0.4.14 - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - checksum: de5e1d3c8508a909bed03ab99c76125f18224eff5571270237c2b7161b8d15ad8d2a379b52e433ee77d76aa3fbbe0130c18364cdd926c0c434d508fd69443667 - languageName: node - linkType: hard - -"@react-aria/selection@npm:^3.13.0, @react-aria/selection@npm:^3.13.1": - version: 3.13.1 - resolution: "@react-aria/selection@npm:3.13.1" - dependencies: - "@react-aria/focus": ^3.11.0 - "@react-aria/i18n": ^3.7.0 - "@react-aria/interactions": ^3.14.0 - "@react-aria/utils": ^3.15.0 - "@react-stately/collections": ^3.6.0 - "@react-stately/selection": ^3.12.0 - "@react-types/shared": ^3.17.0 - "@swc/helpers": ^0.4.14 - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - checksum: 240766af913c9b0f55782bb8ce4163ba993e626597999152ff2ccfcd852fc344d4eb3c7e71417b0eb18e430d2fec459c1ac30e5272905f1572427bfc01413cbb - languageName: node - linkType: hard - -"@react-aria/slider@npm:3.3.0": - version: 3.3.0 - resolution: "@react-aria/slider@npm:3.3.0" - dependencies: - "@react-aria/focus": ^3.11.0 - "@react-aria/i18n": ^3.7.0 - "@react-aria/interactions": ^3.14.0 - "@react-aria/label": ^3.5.0 - "@react-aria/utils": ^3.15.0 - "@react-stately/radio": ^3.7.0 - "@react-stately/slider": ^3.3.0 - "@react-types/radio": ^3.4.0 - "@react-types/shared": ^3.17.0 - "@react-types/slider": ^3.4.0 - "@swc/helpers": ^0.4.14 - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - checksum: 136493430c64f38f1147a6f94c4f3560f8b58adc0efce168190064c1c1ceb2b9a560194552b8315390183a33523b858589feb46a9e59424255df8d332ea78fa4 - languageName: node - linkType: hard - -"@react-aria/ssr@npm:^3.5.0": - version: 3.5.0 - resolution: "@react-aria/ssr@npm:3.5.0" - dependencies: - "@swc/helpers": ^0.4.14 - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - checksum: 3287fe756ff458a3ce46ba0fabe2ede349bff0b232cce30aab0f50afa1c0ac7604809d229b8b19a62a5116cf12bc8099d2c9c72335126499c55c794dd3419dbd - languageName: node - linkType: hard - -"@react-aria/tabs@npm:3.4.0": - version: 3.4.0 - resolution: "@react-aria/tabs@npm:3.4.0" - dependencies: - "@react-aria/focus": ^3.11.0 - "@react-aria/i18n": ^3.7.0 - "@react-aria/interactions": ^3.14.0 - "@react-aria/selection": ^3.13.0 - "@react-aria/utils": ^3.15.0 - "@react-stately/list": ^3.7.0 - "@react-stately/tabs": ^3.3.0 - "@react-types/shared": ^3.17.0 - "@react-types/tabs": ^3.2.0 - "@swc/helpers": ^0.4.14 - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - checksum: 9e7c928660dc16766d7767d41d3b03f251decd65591ac0ed61a12599969e27ed6eb40cd8992b17b1fc7e438f7c285b688d8852fcbaa429630175fb4c39cd47c3 - languageName: node - linkType: hard - -"@react-aria/textfield@npm:^3.9.0": - version: 3.9.0 - resolution: "@react-aria/textfield@npm:3.9.0" - dependencies: - "@react-aria/focus": ^3.11.0 - "@react-aria/label": ^3.5.0 - "@react-aria/utils": ^3.15.0 - "@react-types/shared": ^3.17.0 - "@react-types/textfield": ^3.7.0 - "@swc/helpers": ^0.4.14 - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - checksum: a46a20330c1d152eb45a669c01ee52bfe95af09b2d1714aa3c1e75f534926117406b42426c29902d0a7dde37ce70289c515b26731bc2de2b71d88daa5f972490 - languageName: node - linkType: hard - -"@react-aria/toggle@npm:^3.5.0": - version: 3.5.0 - resolution: "@react-aria/toggle@npm:3.5.0" - dependencies: - "@react-aria/focus": ^3.11.0 - "@react-aria/interactions": ^3.14.0 - "@react-aria/utils": ^3.15.0 - "@react-stately/toggle": ^3.5.0 - "@react-types/checkbox": ^3.4.2 - "@react-types/shared": ^3.17.0 - "@react-types/switch": ^3.3.0 - "@swc/helpers": ^0.4.14 - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - checksum: ccf8ab5bd0e189ac50a42c00ff37bf73a48961d0a76eaa5f735c4f79ab6d597a7d1e9a08b0811b49437ae4181ea81ae5f58b9f7d1082fa9ba4071753830432d1 - languageName: node - linkType: hard - -"@react-aria/utils@npm:3.15.0, @react-aria/utils@npm:^3.15.0": - version: 3.15.0 - resolution: "@react-aria/utils@npm:3.15.0" - dependencies: - "@react-aria/ssr": ^3.5.0 - "@react-stately/utils": ^3.6.0 - "@react-types/shared": ^3.17.0 - "@swc/helpers": ^0.4.14 - clsx: ^1.1.1 - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - checksum: 9d852b3a8ca492b5e8c733f6258437430d050950d4cbdb99ab221d1a076ebca2625d45384bfb7b651072adc93368462445061c83ceac079418c8deafca2b47c3 - languageName: node - linkType: hard - -"@react-aria/visually-hidden@npm:3.7.0, @react-aria/visually-hidden@npm:^3.7.0": - version: 3.7.0 - resolution: "@react-aria/visually-hidden@npm:3.7.0" - dependencies: - "@react-aria/interactions": ^3.14.0 - "@react-aria/utils": ^3.15.0 - "@react-types/shared": ^3.17.0 - "@swc/helpers": ^0.4.14 - clsx: ^1.1.1 - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - checksum: b0278501901e012018540488f0a4fba5dabe3e136aa6912016add3f7d2dd94bac91c477712cd5c4561b405b43bdaa8921742b5db59f8c68417a53c441874d5f0 - languageName: node - linkType: hard - -"@react-spring/animated@npm:~9.6.1": - version: 9.6.1 - resolution: "@react-spring/animated@npm:9.6.1" - dependencies: - "@react-spring/shared": ~9.6.1 - "@react-spring/types": ~9.6.1 - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - checksum: fd8b3dbb1ad3195d510888bd7ea2e2790ea4505442b70b19b30c462c2b68f56c9d66febbb7e4fa32a21e31b03c423176f6257879be80b22c0286e56789547ee3 - languageName: node - linkType: hard - -"@react-spring/core@npm:~9.6.1": - version: 9.6.1 - resolution: "@react-spring/core@npm:9.6.1" - dependencies: - "@react-spring/animated": ~9.6.1 - "@react-spring/rafz": ~9.6.1 - "@react-spring/shared": ~9.6.1 - "@react-spring/types": ~9.6.1 - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - checksum: 7e0aaec8a6f68b3f2399533947cdbf1b2c4f94a6b01eb1d577516af7385cd302d775f1f3f10b838581edd70773d314ba066dbce0b63169b4cf2fd7791acc3d13 - languageName: node - linkType: hard - -"@react-spring/konva@npm:~9.6.1": - version: 9.6.1 - resolution: "@react-spring/konva@npm:9.6.1" - dependencies: - "@react-spring/animated": ~9.6.1 - "@react-spring/core": ~9.6.1 - "@react-spring/shared": ~9.6.1 - "@react-spring/types": ~9.6.1 - peerDependencies: - konva: ">=2.6" - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-konva: ^16.8.0 || ^17.0.0 - checksum: 6dce3db0183514495dd30825c0605f1eecb3fa4184a45d214cc81ccd48ec7eec6e54913fba54401cc7997d47da36b6bca9d49fc5bfc507159be6ea515144f883 - languageName: node - linkType: hard - -"@react-spring/native@npm:~9.6.1": - version: 9.6.1 - resolution: "@react-spring/native@npm:9.6.1" - dependencies: - "@react-spring/animated": ~9.6.1 - "@react-spring/core": ~9.6.1 - "@react-spring/shared": ~9.6.1 - "@react-spring/types": ~9.6.1 - peerDependencies: - react: ^16.8.0 || >=17.0.0 || >=18.0.0 - react-native: ">=0.58" - checksum: 11489382636b00d3c9f14e2c4c74da30d72129ed8accd4c21fce57fd813ffd13f088793f9d227c657ad04588f8c4cbefa800955c62e745cf59696d5539acc07a - languageName: node - linkType: hard - -"@react-spring/rafz@npm:~9.6.1": - version: 9.6.1 - resolution: "@react-spring/rafz@npm:9.6.1" - checksum: 3c8967b01ad29d212244a572193b465087104064b043e6bb303e4498e165f73bb8ef20d46af7bcdd351dc3370fb190fcee76a31d80a8b2c09cf04ef976e34556 - languageName: node - linkType: hard - -"@react-spring/shared@npm:~9.6.1": - version: 9.6.1 - resolution: "@react-spring/shared@npm:9.6.1" - dependencies: - "@react-spring/rafz": ~9.6.1 - "@react-spring/types": ~9.6.1 - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - checksum: 4e2c905a1804fe0402753ce50fc563faa87dec7b6dd348cc21800c213ce71d77db4e299cf1b9c47a8ee557220b62ee64ac934867c11881b1124b63f59eb4c9f3 - languageName: node - linkType: hard - -"@react-spring/three@npm:~9.6.1": - version: 9.6.1 - resolution: "@react-spring/three@npm:9.6.1" - dependencies: - "@react-spring/animated": ~9.6.1 - "@react-spring/core": ~9.6.1 - "@react-spring/shared": ~9.6.1 - "@react-spring/types": ~9.6.1 - peerDependencies: - "@react-three/fiber": ">=6.0" - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - three: ">=0.126" - checksum: 7d53e6673efd4dc063a475bbbfbac687c717695ffff0d03d3f7e4d8adaa39ebe0455d099337871f281ab5f2bab872886f782cf269722deb907b0446388a818b4 - languageName: node - linkType: hard - -"@react-spring/types@npm:~9.6.1": - version: 9.6.1 - resolution: "@react-spring/types@npm:9.6.1" - checksum: 803dc6c2d67773ee1e5d00d2feac291dad32cf4ca6a790554d6133dd4cd39aeb89b3beea4cc67f91c2d2e4bdbd1a995540dc7fee117138e207a105d255d39c1c - languageName: node - linkType: hard - -"@react-spring/web@npm:~9.6.1": - version: 9.6.1 - resolution: "@react-spring/web@npm:9.6.1" - dependencies: - "@react-spring/animated": ~9.6.1 - "@react-spring/core": ~9.6.1 - "@react-spring/shared": ~9.6.1 - "@react-spring/types": ~9.6.1 - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - checksum: 3c336a9d162136c0d1ec8adad31d8534d4309de46eea9fa50f735aa9ea0cd3350320654160ea1fc731ba06a3b4342c508d7b5b9035b7816ab0285f5e952dd118 - languageName: node - linkType: hard - -"@react-spring/zdog@npm:~9.6.1": - version: 9.6.1 - resolution: "@react-spring/zdog@npm:9.6.1" - dependencies: - "@react-spring/animated": ~9.6.1 - "@react-spring/core": ~9.6.1 - "@react-spring/shared": ~9.6.1 - "@react-spring/types": ~9.6.1 - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-zdog: ">=1.0" - zdog: ">=1.0" - checksum: 269bd52bbc5dc5fa0cf1aa20c28d96668f2231aacc781ff762328185f70877bc4a867d9ad8f4a873c507df94832be25dc0047352621b1de1f85b345981bdf050 - languageName: node - linkType: hard - -"@react-stately/checkbox@npm:^3.4.0": - version: 3.4.0 - resolution: "@react-stately/checkbox@npm:3.4.0" - dependencies: - "@react-stately/toggle": ^3.5.0 - "@react-stately/utils": ^3.6.0 - "@react-types/checkbox": ^3.4.2 - "@react-types/shared": ^3.17.0 - "@swc/helpers": ^0.4.14 - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - checksum: 1886962262d63ae7bef433df75770ae19e2080c6165a0703d492351c286fd3b6fd8d8d91eec7bed45cd38d7453b66682c5479e3089b4c1f1e5e6895dcf5064cb - languageName: node - linkType: hard - -"@react-stately/collections@npm:3.6.0, @react-stately/collections@npm:^3.6.0": - version: 3.6.0 - resolution: "@react-stately/collections@npm:3.6.0" - dependencies: - "@react-types/shared": ^3.17.0 - "@swc/helpers": ^0.4.14 - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - checksum: e7fa7adbbfeb981c5723630a6cab4a79f4330efba02124ab339fdc850143d198334af446c37be73fed84ef7ae061214dcc8c1aa1efaf9e41789e80d835bf8e7a - languageName: node - linkType: hard - -"@react-stately/combobox@npm:3.4.0, @react-stately/combobox@npm:^3.4.0": - version: 3.4.0 - resolution: "@react-stately/combobox@npm:3.4.0" - dependencies: - "@react-stately/list": ^3.7.0 - "@react-stately/menu": ^3.5.0 - "@react-stately/select": ^3.4.0 - "@react-stately/utils": ^3.6.0 - "@react-types/combobox": ^3.6.0 - "@react-types/shared": ^3.17.0 - "@swc/helpers": ^0.4.14 - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - checksum: a950546563598bd4ef574dbdccffe0e12818fa015680429556a8c01d9f69b04bc3c4e5059a606a69f548fb1b8a6061f031c03f9704506e69a5e2e6faaacd0220 - languageName: node - linkType: hard - -"@react-stately/grid@npm:^3.5.0": - version: 3.5.0 - resolution: "@react-stately/grid@npm:3.5.0" - dependencies: - "@react-stately/selection": ^3.12.0 - "@react-types/grid": ^3.1.6 - "@react-types/shared": ^3.17.0 - "@swc/helpers": ^0.4.14 - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - checksum: f458e3d2232c803231e0baadf8c66f4e61eb4acec6d53fc103e489f7421226ff9281b841d9e40889484b8aa364169a9b6c89df7e43a7f091ce074c4bb6d7ea0f - languageName: node - linkType: hard - -"@react-stately/layout@npm:^3.11.0": - version: 3.11.0 - resolution: "@react-stately/layout@npm:3.11.0" - dependencies: - "@react-stately/table": ^3.8.0 - "@react-stately/virtualizer": ^3.5.0 - "@react-types/grid": ^3.1.6 - "@react-types/shared": ^3.17.0 - "@react-types/table": ^3.5.0 - "@swc/helpers": ^0.4.14 - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - checksum: 14545dbfbd079599ba4106bead2ae7f91ee22090b3a2dbc1df789e431190d8afef9957bc02bd4efceceb8c9b202abe32856b0a7fc2f303571496a6fec0acf6b7 - languageName: node - linkType: hard - -"@react-stately/list@npm:^3.7.0": - version: 3.7.0 - resolution: "@react-stately/list@npm:3.7.0" - dependencies: - "@react-stately/collections": ^3.6.0 - "@react-stately/selection": ^3.12.0 - "@react-stately/utils": ^3.6.0 - "@react-types/shared": ^3.17.0 - "@swc/helpers": ^0.4.14 - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - checksum: 3c893b0d6fdbf38719485c6e722f4836b4d6785ca50a092cf6406ec4fb6c5f094964b71eecb8abd2f7b796898172facdd04683d7860c9424e7283253d468961a - languageName: node - linkType: hard - -"@react-stately/menu@npm:^3.5.0": - version: 3.5.0 - resolution: "@react-stately/menu@npm:3.5.0" - dependencies: - "@react-stately/overlays": ^3.5.0 - "@react-stately/utils": ^3.6.0 - "@react-types/menu": ^3.8.0 - "@react-types/shared": ^3.17.0 - "@swc/helpers": ^0.4.14 - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - checksum: e39ff40d7fcf2136adde097bfbf63ddbb31995f2e3b22a30eb0d1dcae5a482bb51db0ea7f927769b0deba49c9bbb962c26d3a8fe40d691b06ac7a2c8bdae9a4d - languageName: node - linkType: hard - -"@react-stately/overlays@npm:3.5.0, @react-stately/overlays@npm:^3.5.0": - version: 3.5.0 - resolution: "@react-stately/overlays@npm:3.5.0" - dependencies: - "@react-stately/utils": ^3.6.0 - "@react-types/overlays": ^3.7.0 - "@swc/helpers": ^0.4.14 - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - checksum: 7422e0e4f146bfef5c1a5386627008033e26e4ebcc857469009011a5d1d2440d7d74088b1e8fbb1fb23fbfdc129b745a9e9388b6ad6c8aefd3388f260c9a68f8 - languageName: node - linkType: hard - -"@react-stately/radio@npm:3.7.0, @react-stately/radio@npm:^3.7.0": - version: 3.7.0 - resolution: "@react-stately/radio@npm:3.7.0" - dependencies: - "@react-stately/utils": ^3.6.0 - "@react-types/radio": ^3.4.0 - "@react-types/shared": ^3.17.0 - "@swc/helpers": ^0.4.14 - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - checksum: 91eea7a9ee6f2660ffcae161c6d1397442702afd7048a54444c8c7b2fbd2f89898af6ba4ee94c9313aca72d87ecf2eec666e086e7c9be317fbcffe3110890b81 - languageName: node - linkType: hard - -"@react-stately/select@npm:^3.4.0": - version: 3.4.0 - resolution: "@react-stately/select@npm:3.4.0" - dependencies: - "@react-stately/collections": ^3.6.0 - "@react-stately/list": ^3.7.0 - "@react-stately/menu": ^3.5.0 - "@react-stately/selection": ^3.12.0 - "@react-stately/utils": ^3.6.0 - "@react-types/select": ^3.7.0 - "@react-types/shared": ^3.17.0 - "@swc/helpers": ^0.4.14 - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - checksum: 6a4c71d780779a63180ee5cee5d8bf7a04f8d63bbbbe82996bbd415a6ca002f2f62a5a36aade77106554e3385b09391512042662df16eafcbd61fadfe2f4b839 - languageName: node - linkType: hard - -"@react-stately/selection@npm:^3.12.0": - version: 3.12.0 - resolution: "@react-stately/selection@npm:3.12.0" - dependencies: - "@react-stately/collections": ^3.6.0 - "@react-stately/utils": ^3.6.0 - "@react-types/shared": ^3.17.0 - "@swc/helpers": ^0.4.14 - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - checksum: 9a71f78b4f5e105602120e6682b3cf3aad467a3d85010bafa08cbfc7d0ba34bc7d77cff8e1f165f46083aecfb897308b130a4dad7512fb8c83823283813b80c7 - languageName: node - linkType: hard - -"@react-stately/slider@npm:3.3.0, @react-stately/slider@npm:^3.3.0": - version: 3.3.0 - resolution: "@react-stately/slider@npm:3.3.0" - dependencies: - "@react-aria/i18n": ^3.7.0 - "@react-aria/utils": ^3.15.0 - "@react-stately/utils": ^3.6.0 - "@react-types/shared": ^3.17.0 - "@react-types/slider": ^3.4.0 - "@swc/helpers": ^0.4.14 - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - checksum: 07f4c7e367cc5f1a017c5acb84fef11e6468528289c58003a9629c9c2a12b31d1800b766b46729fcfa9ad6d428b931ea05231f2782f3b357f873b5a6df158bed - languageName: node - linkType: hard - -"@react-stately/table@npm:^3.8.0": - version: 3.8.0 - resolution: "@react-stately/table@npm:3.8.0" - dependencies: - "@react-stately/collections": ^3.6.0 - "@react-stately/grid": ^3.5.0 - "@react-stately/selection": ^3.12.0 - "@react-types/grid": ^3.1.6 - "@react-types/shared": ^3.17.0 - "@react-types/table": ^3.5.0 - "@swc/helpers": ^0.4.14 - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - checksum: 6032c40065f8bd44fe69219ce6d0dc970ec43f3a1393ad22645ce2bfb2ca63f5ca904e3b27baf2a28907e886e63931ae368c84c7587a221693491b30265cd924 - languageName: node - linkType: hard - -"@react-stately/tabs@npm:3.3.0, @react-stately/tabs@npm:^3.3.0": - version: 3.3.0 - resolution: "@react-stately/tabs@npm:3.3.0" - dependencies: - "@react-stately/list": ^3.7.0 - "@react-stately/utils": ^3.6.0 - "@react-types/tabs": ^3.2.0 - "@swc/helpers": ^0.4.14 - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - checksum: a66bd3101831decec4c2d63dcb0b026fdfa899b9ff91c2b50aecc5711c88d0c4e4aaf687847da364b4af9b6a82748f19979459b8354cadc06b5f0d6897e2e989 - languageName: node - linkType: hard - -"@react-stately/toggle@npm:3.5.0, @react-stately/toggle@npm:^3.5.0": - version: 3.5.0 - resolution: "@react-stately/toggle@npm:3.5.0" - dependencies: - "@react-stately/utils": ^3.6.0 - "@react-types/checkbox": ^3.4.2 - "@react-types/shared": ^3.17.0 - "@swc/helpers": ^0.4.14 - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - checksum: 3cc5d150c0effc216f6b56a17a05917affbb7f374239053e69d42117c13d488a6939469d14d7c4a4fd2422416c5ae0b9147e454e8717ab1b3b95196c7eb0c79d - languageName: node - linkType: hard - -"@react-stately/tree@npm:^3.5.0": - version: 3.5.0 - resolution: "@react-stately/tree@npm:3.5.0" - dependencies: - "@react-stately/collections": ^3.6.0 - "@react-stately/selection": ^3.12.0 - "@react-stately/utils": ^3.6.0 - "@react-types/shared": ^3.17.0 - "@swc/helpers": ^0.4.14 - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - checksum: cc22dce2314104802b42f76c287165f1b7c5e69c6f45876027d7f58d43039c8126b2d58cbec6942ed27990d51a58962027166959348f9467d869d97e6f937ad1 - languageName: node - linkType: hard - -"@react-stately/utils@npm:^3.6.0": - version: 3.6.0 - resolution: "@react-stately/utils@npm:3.6.0" - dependencies: - "@swc/helpers": ^0.4.14 - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - checksum: d2ff4cfed5555b112ad71b9bc1837abd777d8fa225043c476b7c9417f8b21a0bcddad0d7127e0acdbf4d85dc9a260c9ae97722b4e9507e6243b412c2724c5f54 - languageName: node - linkType: hard - -"@react-stately/virtualizer@npm:^3.5.0": - version: 3.5.0 - resolution: "@react-stately/virtualizer@npm:3.5.0" - dependencies: - "@react-aria/utils": ^3.15.0 - "@react-types/shared": ^3.17.0 - "@swc/helpers": ^0.4.14 - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - checksum: df5bb6658f8b43b1d5166f3f4f9d6317b403dee142a291601be57553be9fa38d0182275f2cac0fe779d8ff3203030b02a26da9cf287bd9bd296c9d7f16146578 - languageName: node - linkType: hard - -"@react-types/button@npm:^3.7.1": - version: 3.7.1 - resolution: "@react-types/button@npm:3.7.1" - dependencies: - "@react-types/shared": ^3.17.0 - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - checksum: 4002e7af86a2673e0d1855ccadda4afd13579b5c3a71cf423465d4f5c2f26270d9ca4ce831a0ae23b503c59c8e3ee21c7f8a792a26abba381a7662b945f43cc3 - languageName: node - linkType: hard - -"@react-types/checkbox@npm:^3.4.2": - version: 3.4.2 - resolution: "@react-types/checkbox@npm:3.4.2" - dependencies: - "@react-types/shared": ^3.17.0 - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - checksum: c34eceb3fe16e5722b2847e9db1d6a921acb8a5e7a924a6b494f692894a3dcca2bd242ae395d4fe43b1de6c6f3dd9a3450c9894d05ea5b38342bee6ad098fcf8 - languageName: node - linkType: hard - -"@react-types/combobox@npm:^3.6.0": - version: 3.6.0 - resolution: "@react-types/combobox@npm:3.6.0" - dependencies: - "@react-types/shared": ^3.17.0 - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - checksum: aee7bffcae621d99a04464670971e116e2b3e3ddb510c6ffdfa2b923d075e4a2b7b80fde4bf5d2670861eb7d9744b0e7d83dee0063027af8a601617a7d378969 - languageName: node - linkType: hard - -"@react-types/grid@npm:^3.1.6": - version: 3.1.6 - resolution: "@react-types/grid@npm:3.1.6" - dependencies: - "@react-types/shared": ^3.17.0 - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - checksum: d88c4fa8a08c9c66514e8291de328ef02a306d27fa48b6a20537cda5e212f2bca1a00d11cdf54091c452f25dbda968b0c8d2d0f158926b68cc4cf4e8b6e6518c - languageName: node - linkType: hard - -"@react-types/label@npm:^3.7.2": - version: 3.7.2 - resolution: "@react-types/label@npm:3.7.2" - dependencies: - "@react-types/shared": ^3.17.0 - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - checksum: 5053a575933033e78b4cbfbeca08fb3052e81c0e2b50811677bda2e9d3188f16dc9b0381d21d49cf3ce7b7b3d6518d0d7658fc23c9498b02be60b22ef0a0d9b5 - languageName: node - linkType: hard - -"@react-types/listbox@npm:^3.4.0": - version: 3.4.0 - resolution: "@react-types/listbox@npm:3.4.0" - dependencies: - "@react-types/shared": ^3.17.0 - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - checksum: b5bb085f48c16e132b87cdc5840198f6c65afbb21c2f3dfb45d511181502f1388d7b0569a8ec2a5d04eaba5d972dd2210bb1ba8b2c2b97a91b65e19548869ddd - languageName: node - linkType: hard - -"@react-types/menu@npm:^3.8.0": - version: 3.8.0 - resolution: "@react-types/menu@npm:3.8.0" - dependencies: - "@react-types/overlays": ^3.7.0 - "@react-types/shared": ^3.17.0 - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - checksum: 0ad6b69cc4ebda76f7a056f01913544d0904d53e6722f909234bcc42af3081d22ee9fec632692024acae910e5d7f2f200868022130983c548482c4b7100df133 - languageName: node - linkType: hard - -"@react-types/overlays@npm:^3.7.0": - version: 3.7.0 - resolution: "@react-types/overlays@npm:3.7.0" - dependencies: - "@react-types/shared": ^3.17.0 - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - checksum: eff974d34a0372000924340f8ee3fecbb09060d4c903db95eb6033d382f5957253be403e6b205259f230af80e1d2f42d5f9eb77f115f991c1efda50336c249de - languageName: node - linkType: hard - -"@react-types/radio@npm:^3.4.0": - version: 3.4.0 - resolution: "@react-types/radio@npm:3.4.0" - dependencies: - "@react-types/shared": ^3.17.0 - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - checksum: efec133f004b3fbf0d551f9a842e2279d71c3bc3faacddbf997188c7bc88bf980efbcdb0ca883bc145f85024b0e64a5f3997cbcf4f88c6efd29b36bc49efa4f4 - languageName: node - linkType: hard - -"@react-types/select@npm:^3.7.0": - version: 3.7.0 - resolution: "@react-types/select@npm:3.7.0" - dependencies: - "@react-types/shared": ^3.17.0 - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - checksum: bc721d66fa472357a0566c51e66b0deebaad07b3403fda316fe9848c204c620f7b35c9d03a3330b2d610d8f607829bcc22b241e55ff4be92a0b6f1ea8cd708e1 - languageName: node - linkType: hard - -"@react-types/shared@npm:3.17.0, @react-types/shared@npm:^3.17.0": - version: 3.17.0 - resolution: "@react-types/shared@npm:3.17.0" - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - checksum: 004fc58ab0d3d64a84ce5a98e7e201b88bbb64f8b4a8309d50be30fe6172d0f172f00c666074aa96f13bbbfbced8b986901ad6b35b6d2d32d8dc25e251fcdb31 - languageName: node - linkType: hard - -"@react-types/slider@npm:^3.4.0": - version: 3.4.0 - resolution: "@react-types/slider@npm:3.4.0" - dependencies: - "@react-types/shared": ^3.17.0 - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - checksum: df6bc5b3713984d8f8416ad4f4f7e86388e72cb1a40b1d860dcf23bc52787e3044690b29ee3633510b85471b8336be8f0b7b7a4b2bc16128078865779bbdf521 - languageName: node - linkType: hard - -"@react-types/switch@npm:^3.3.0": - version: 3.3.0 - resolution: "@react-types/switch@npm:3.3.0" - dependencies: - "@react-types/checkbox": ^3.4.2 - "@react-types/shared": ^3.17.0 - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - checksum: f310ab1488704f6caabc1c5f958b9ce0b0df4cbf164e061119aff7a41af540f9b83f9013b848f8966665607d41fbe66e2d45271ab3c5e6da64fb252ab22fca90 - languageName: node - linkType: hard - -"@react-types/table@npm:^3.5.0": - version: 3.5.0 - resolution: "@react-types/table@npm:3.5.0" - dependencies: - "@react-types/grid": ^3.1.6 - "@react-types/shared": ^3.17.0 - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - checksum: c1e22f3f7ab41f9800b1ed205101a895ac599ba5d34159668837bf097e5856e68b8754e555e7ef4daf3bd2168069d8ef54978b4dc631d589fc5bef92fcc0e5c6 - languageName: node - linkType: hard - -"@react-types/tabs@npm:^3.2.0": - version: 3.2.0 - resolution: "@react-types/tabs@npm:3.2.0" - dependencies: - "@react-types/shared": ^3.17.0 - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - checksum: 5162e0e864e73cc149b214561da1e708ecbf171815db0bfefac77f8eb279d5a5e2ab0ef9a86f339bc98082542a55fec72122d1b1e90a6fde2c60e0c107104803 - languageName: node - linkType: hard - -"@react-types/textfield@npm:^3.7.0": - version: 3.7.0 - resolution: "@react-types/textfield@npm:3.7.0" - dependencies: - "@react-types/shared": ^3.17.0 - peerDependencies: - react: ^16.8.0 || ^17.0.0-rc.1 || ^18.0.0 - checksum: b6e72d2c971be528ba0c3e8cfb4f0937104e1413a372455399ed27ce42dbe89ffc5f8689a6a778b8cc049e8b020c8e94e2bda07101a238f4b6bf3b34c34fa774 - languageName: node - linkType: hard - -"@remix-run/router@npm:1.4.0": - version: 1.4.0 - resolution: "@remix-run/router@npm:1.4.0" - checksum: 707dce35a2b8138005cf19e63f6fd3c4da05b4b892e9e9118e8b727c3b95953efe27307ca2df35084044df30fa1fc367cf0bbc98d1ded9020c82e61e6242caaf - languageName: node - linkType: hard - -"@repeaterjs/repeater@npm:3.0.4, @repeaterjs/repeater@npm:^3.0.4": - version: 3.0.4 - resolution: "@repeaterjs/repeater@npm:3.0.4" - checksum: cca0db3e802bc26fcce0b4a574074d9956da53bf43094de03c0e4732d05e13441279a92f0b96e2a7a39da50933684947a138c1213406eaafe39cfd4683d6c0df - languageName: node - linkType: hard - -"@swc/helpers@npm:^0.4.14": - version: 0.4.14 - resolution: "@swc/helpers@npm:0.4.14" - dependencies: - tslib: ^2.4.0 - checksum: 273fd3f3fc461a92f3790cc551ea054745c6d6959afbe1232e6d7aa1c722bbc114d308aab96bef5c78fc0303c85c7b472ef00e2253251cc89737f3b1af56e5a5 - languageName: node - linkType: hard - -"@tanstack/match-sorter-utils@npm:8.7.6": - version: 8.7.6 - resolution: "@tanstack/match-sorter-utils@npm:8.7.6" - dependencies: - remove-accents: 0.4.2 - checksum: 3f3dda277e6e55ca1224a28b38a2deb3ac912c2f2f5263a32fa0d9126c6b6d05feb475539729fd248f1eb88b612109db90b847ec8fdfc05d0f4073c900a2d3f6 - languageName: node - linkType: hard - -"@tanstack/react-table@npm:8.7.9": - version: 8.7.9 - resolution: "@tanstack/react-table@npm:8.7.9" - dependencies: - "@tanstack/table-core": 8.7.9 - peerDependencies: - react: ">=16" - react-dom: ">=16" - checksum: 3c704ac903405972641c9857e1466025bcdac04ee4890d64b018386cad5a778aca3a8d3f78542ae7a0ed609841d32ef3a7e563b079e87fa93b9ae8570a310499 - languageName: node - linkType: hard - -"@tanstack/react-virtual@npm:3.0.0-beta.48": - version: 3.0.0-beta.48 - resolution: "@tanstack/react-virtual@npm:3.0.0-beta.48" - dependencies: - "@tanstack/virtual-core": 3.0.0-beta.48 - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - checksum: 3c0d75570b2b316edbf4f658f7fc398a63467d305cd3b69450febd9ab470b65f00948561c9e8f315a6756564c5164e51ff276f1d2e76c196c7a6110ef115afea - languageName: node - linkType: hard - -"@tanstack/table-core@npm:8.7.9": - version: 8.7.9 - resolution: "@tanstack/table-core@npm:8.7.9" - checksum: 78d2314928c29559088e4bada0248cc7f94e93756e1a2c1f37a651db30276e9ae960d647bd3a61b67b3f0f9f7e4dec5dd58eb49b8adb80ee5952ef417b6e581f - languageName: node - linkType: hard - -"@tanstack/virtual-core@npm:3.0.0-beta.48": - version: 3.0.0-beta.48 - resolution: "@tanstack/virtual-core@npm:3.0.0-beta.48" - checksum: 2bc41ad00aaeb7c07ec1ba5987e795aacef01e1bc32ca75c65f3357aa2b202bfd0aece73b4eb79241d0166ee19956e99e3789ee0edbb55cafb2714adde9b07c2 - languageName: node - linkType: hard - -"@tootallnate/once@npm:2": - version: 2.0.0 - resolution: "@tootallnate/once@npm:2.0.0" - checksum: ad87447820dd3f24825d2d947ebc03072b20a42bfc96cbafec16bff8bbda6c1a81fcb0be56d5b21968560c5359a0af4038a68ba150c3e1694fe4c109a063bed8 - languageName: node - linkType: hard - -"@types/absinthe__socket-apollo-link@npm:0.2.1": - version: 0.2.1 - resolution: "@types/absinthe__socket-apollo-link@npm:0.2.1" - dependencies: - "@types/absinthe__socket": "*" - apollo-link: ">=1.2.5" - apollo-link-http-common: ^0.2.4 - graphql: ^14.5.3 - checksum: 56b8df10e6a3a5110226b572ef7fa41ad68a6b09dcf658a7cf7dde5bd4bbecbaa1e2970891d2427d243c384a0cb5da72e79a40e06afdb50a0ee8ca2c82d78d96 - languageName: node - linkType: hard - -"@types/absinthe__socket@npm:*, @types/absinthe__socket@npm:0.2.3": - version: 0.2.3 - resolution: "@types/absinthe__socket@npm:0.2.3" - dependencies: - "@types/phoenix": "*" - checksum: 6c4855ab1eb31af58a788205b7cc52743e800abc3fce5437abd935c333785ad31b343d4e355f9b59bd4843a3164f41c4775f5a75918366fff54eff2ff72bca36 - languageName: node - linkType: hard - -"@types/chroma-js@npm:2.1.5": - version: 2.1.5 - resolution: "@types/chroma-js@npm:2.1.5" - checksum: 7cc7ba5d024f9048f11cf045b6f0a2d7025ecd930e89867cbcc35b4f668ebb0fbaf4231de418d3c447bf21b71fa25cce1b3c8d17d3d3de4ddbe38f66d469f106 - languageName: node - linkType: hard - -"@types/debug@npm:^4.0.0": - version: 4.1.7 - resolution: "@types/debug@npm:4.1.7" - dependencies: - "@types/ms": "*" - checksum: 0a7b89d8ed72526858f0b61c6fd81f477853e8c4415bb97f48b1b5545248d2ae389931680b94b393b993a7cfe893537a200647d93defe6d87159b96812305adc - languageName: node - linkType: hard - -"@types/hast@npm:^2.0.0": - version: 2.3.4 - resolution: "@types/hast@npm:2.3.4" - dependencies: - "@types/unist": "*" - checksum: fff47998f4c11e21a7454b58673f70478740ecdafd95aaf50b70a3daa7da9cdc57315545bf9c039613732c40b7b0e9e49d11d03fe9a4304721cdc3b29a88141e - languageName: node - linkType: hard - -"@types/hoist-non-react-statics@npm:*": - version: 3.3.1 - resolution: "@types/hoist-non-react-statics@npm:3.3.1" - dependencies: - "@types/react": "*" - hoist-non-react-statics: ^3.3.0 - checksum: 2c0778570d9a01d05afabc781b32163f28409bb98f7245c38d5eaf082416fdb73034003f5825eb5e21313044e8d2d9e1f3fe2831e345d3d1b1d20bcd12270719 - languageName: node - linkType: hard - -"@types/js-yaml@npm:^4.0.0": - version: 4.0.5 - resolution: "@types/js-yaml@npm:4.0.5" - checksum: 7dcac8c50fec31643cc9d6444b5503239a861414cdfaa7ae9a38bc22597c4d850c4b8cec3d82d73b3fbca408348ce223b0408d598b32e094470dfffc6d486b4d - languageName: node - linkType: hard - -"@types/json-schema@npm:^7.0.9": - version: 7.0.11 - resolution: "@types/json-schema@npm:7.0.11" - checksum: 527bddfe62db9012fccd7627794bd4c71beb77601861055d87e3ee464f2217c85fca7a4b56ae677478367bbd248dbde13553312b7d4dbc702a2f2bbf60c4018d - languageName: node - linkType: hard - -"@types/json-stable-stringify@npm:^1.0.32": - version: 1.0.34 - resolution: "@types/json-stable-stringify@npm:1.0.34" - checksum: 45767ecef0f6aae5680c3be6488d5c493f16046e34f182d7e6a2c69a667aab035799752c6f03017c883b134ad3f80e3f78d7e7da81a9c1f3d01676126baf5d0e - languageName: node - linkType: hard - -"@types/json5@npm:^0.0.29": - version: 0.0.29 - resolution: "@types/json5@npm:0.0.29" - checksum: e60b153664572116dfea673c5bda7778dbff150498f44f998e34b5886d8afc47f16799280e4b6e241c0472aef1bc36add771c569c68fc5125fc2ae519a3eb9ac - languageName: node - linkType: hard - -"@types/mdast@npm:^3.0.0": - version: 3.0.11 - resolution: "@types/mdast@npm:3.0.11" - dependencies: - "@types/unist": "*" - checksum: 3b04cf465535553b47a1811c247668bd6cfeb54d99a2c9dbb82ccd0f5145d271d10c3169f929701d8cd55fd569f0d2e459a50845813ba3261f1fb0395a288cea - languageName: node - linkType: hard - -"@types/ms@npm:*": - version: 0.7.31 - resolution: "@types/ms@npm:0.7.31" - checksum: daadd354aedde024cce6f5aa873fefe7b71b22cd0e28632a69e8b677aeb48ae8caa1c60e5919bb781df040d116b01cb4316335167a3fc0ef6a63fa3614c0f6da - languageName: node - linkType: hard - -"@types/node@npm:*": - version: 18.15.10 - resolution: "@types/node@npm:18.15.10" - checksum: 9aeae0b683eda82892def5315812bdee3f1a28c4898b7e70f8e2514564538b16c4dccbe8339c1266f8fc1d707a48f152689264a854f5ebc2eba5011e793612d9 - languageName: node - linkType: hard - -"@types/node@npm:18.15.5": - version: 18.15.5 - resolution: "@types/node@npm:18.15.5" - checksum: 5fbf3453bd5ce1402bb2964e55d928fc8a8a7de5451b1b0fe66587fecb8a3eb86854ca9cefa5076a5971e2cff00e1773ceeb5d872a54f6c6ddfbbc1064b4e91a - languageName: node - linkType: hard - -"@types/parse-json@npm:^4.0.0": - version: 4.0.0 - resolution: "@types/parse-json@npm:4.0.0" - checksum: fd6bce2b674b6efc3db4c7c3d336bd70c90838e8439de639b909ce22f3720d21344f52427f1d9e57b265fcb7f6c018699b99e5e0c208a1a4823014269a6bf35b - languageName: node - linkType: hard - -"@types/parse5@npm:^6.0.0": - version: 6.0.3 - resolution: "@types/parse5@npm:6.0.3" - checksum: ddb59ee4144af5dfcc508a8dcf32f37879d11e12559561e65788756b95b33e6f03ea027d88e1f5408f9b7bfb656bf630ace31a2169edf44151daaf8dd58df1b7 - languageName: node - linkType: hard - -"@types/phoenix@npm:*, @types/phoenix@npm:1.5.5": - version: 1.5.5 - resolution: "@types/phoenix@npm:1.5.5" - checksum: 2dfb59c51c3f4b79ba9422f4f778695adc45a5ed55450b59e882da86835d4489483b3cb5a372bab1506b98a46c7830b1dda4bbdbb83c6787b619065d7eb99816 - languageName: node - linkType: hard - -"@types/prop-types@npm:*, @types/prop-types@npm:^15.0.0": - version: 15.7.5 - resolution: "@types/prop-types@npm:15.7.5" - checksum: 5b43b8b15415e1f298243165f1d44390403bb2bd42e662bca3b5b5633fdd39c938e91b7fce3a9483699db0f7a715d08cef220c121f723a634972fdf596aec980 - languageName: node - linkType: hard - -"@types/react-dom@npm:18.0.11": - version: 18.0.11 - resolution: "@types/react-dom@npm:18.0.11" - dependencies: - "@types/react": "*" - checksum: 579691e4d5ec09688087568037c35edf8cfb1ab3e07f6c60029280733ee7b5c06d66df6fcc90786702c93ac8cb13bc7ff16c79ddfc75d082938fbaa36e1cdbf4 - languageName: node - linkType: hard - -"@types/react@npm:*, @types/react@npm:18.0.28": - version: 18.0.28 - resolution: "@types/react@npm:18.0.28" - dependencies: - "@types/prop-types": "*" - "@types/scheduler": "*" - csstype: ^3.0.2 - checksum: e752df961105e5127652460504785897ca6e77259e0da8f233f694f9e8f451cde7fa0709d4456ade0ff600c8ce909cfe29f9b08b9c247fa9b734e126ec53edd7 - languageName: node - linkType: hard - -"@types/scheduler@npm:*": - version: 0.16.2 - resolution: "@types/scheduler@npm:0.16.2" - checksum: b6b4dcfeae6deba2e06a70941860fb1435730576d3689225a421280b7742318d1548b3d22c1f66ab68e414f346a9542f29240bc955b6332c5b11e561077583bc - languageName: node - linkType: hard - -"@types/semver@npm:^7.3.12": - version: 7.3.13 - resolution: "@types/semver@npm:7.3.13" - checksum: 00c0724d54757c2f4bc60b5032fe91cda6410e48689633d5f35ece8a0a66445e3e57fa1d6e07eb780f792e82ac542948ec4d0b76eb3484297b79bd18b8cf1cb0 - languageName: node - linkType: hard - -"@types/styled-components@npm:5.1.26": - version: 5.1.26 - resolution: "@types/styled-components@npm:5.1.26" - dependencies: - "@types/hoist-non-react-statics": "*" - "@types/react": "*" - csstype: ^3.0.2 - checksum: 84f53b3101739b20d1731554fb7735bc2f3f5d050a8b392e9845403c8c8bbd729737d033978649f9195a97b557875b010d46e35a4538564a2d0dbcce661dbf76 - languageName: node - linkType: hard - -"@types/unist@npm:*, @types/unist@npm:^2.0.0": - version: 2.0.6 - resolution: "@types/unist@npm:2.0.6" - checksum: 25cb860ff10dde48b54622d58b23e66214211a61c84c0f15f88d38b61aa1b53d4d46e42b557924a93178c501c166aa37e28d7f6d994aba13d24685326272d5db - languageName: node - linkType: hard - -"@types/ws@npm:^8.0.0": - version: 8.5.4 - resolution: "@types/ws@npm:8.5.4" - dependencies: - "@types/node": "*" - checksum: fefbad20d211929bb996285c4e6f699b12192548afedbe4930ab4384f8a94577c9cd421acaad163cacd36b88649509970a05a0b8f20615b30c501ed5269038d1 - languageName: node - linkType: hard - -"@typescript-eslint/eslint-plugin@npm:5.49.0": - version: 5.49.0 - resolution: "@typescript-eslint/eslint-plugin@npm:5.49.0" - dependencies: - "@typescript-eslint/scope-manager": 5.49.0 - "@typescript-eslint/type-utils": 5.49.0 - "@typescript-eslint/utils": 5.49.0 - debug: ^4.3.4 - ignore: ^5.2.0 - natural-compare-lite: ^1.4.0 - regexpp: ^3.2.0 - semver: ^7.3.7 - tsutils: ^3.21.0 - peerDependencies: - "@typescript-eslint/parser": ^5.0.0 - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - peerDependenciesMeta: - typescript: - optional: true - checksum: 15423cd9fde1ac3f8ba34526a07e537464e70463f1af784be5567fdc78e5745352fa0a2c3be0c13d066bc4b9720b5fa438d64647f624d29722eb4f158c039dcc - languageName: node - linkType: hard - -"@typescript-eslint/eslint-plugin@npm:5.56.0": - version: 5.56.0 - resolution: "@typescript-eslint/eslint-plugin@npm:5.56.0" - dependencies: - "@eslint-community/regexpp": ^4.4.0 - "@typescript-eslint/scope-manager": 5.56.0 - "@typescript-eslint/type-utils": 5.56.0 - "@typescript-eslint/utils": 5.56.0 - debug: ^4.3.4 - grapheme-splitter: ^1.0.4 - ignore: ^5.2.0 - natural-compare-lite: ^1.4.0 - semver: ^7.3.7 - tsutils: ^3.21.0 - peerDependencies: - "@typescript-eslint/parser": ^5.0.0 - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - peerDependenciesMeta: - typescript: - optional: true - checksum: 2eed4a4ed8279950ad553252e8623e947ffdee39b0d677a13f6e4e2d863ea1cbc5d683ff189e55d0de6fd5a25afd72d3c3a9ab7ae417d5405a21ead907e1b154 - languageName: node - linkType: hard - -"@typescript-eslint/parser@npm:5.49.0": - version: 5.49.0 - resolution: "@typescript-eslint/parser@npm:5.49.0" - dependencies: - "@typescript-eslint/scope-manager": 5.49.0 - "@typescript-eslint/types": 5.49.0 - "@typescript-eslint/typescript-estree": 5.49.0 - debug: ^4.3.4 - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - peerDependenciesMeta: - typescript: - optional: true - checksum: 87b3760cfc29b3edd3d28fe0d5e9e5a3833d60398d7779ecc657b9e3bfec624cd464176e26b24b0761fb79cc88daddae19560340f91119c4856b91f9663594dd - languageName: node - linkType: hard - -"@typescript-eslint/scope-manager@npm:5.49.0": - version: 5.49.0 - resolution: "@typescript-eslint/scope-manager@npm:5.49.0" - dependencies: - "@typescript-eslint/types": 5.49.0 - "@typescript-eslint/visitor-keys": 5.49.0 - checksum: 466047e24ff8a4195f14aadde39375f22891bdaced09e58c89f2c32af0aa4a0d87e71a5f006f6ab76858e6f30c4b764b1e0ef7bc26713bb78add30638108c45f - languageName: node - linkType: hard - -"@typescript-eslint/scope-manager@npm:5.56.0": - version: 5.56.0 - resolution: "@typescript-eslint/scope-manager@npm:5.56.0" - dependencies: - "@typescript-eslint/types": 5.56.0 - "@typescript-eslint/visitor-keys": 5.56.0 - checksum: bacac255ee52148cee6622be2811c0d7e25419058b89f1a11f4c1303faef4535a0a1237549f9556ec1d7a297c640ce4357183a1a8465d72e1393b7d8fb43874b - languageName: node - linkType: hard - -"@typescript-eslint/type-utils@npm:5.49.0": - version: 5.49.0 - resolution: "@typescript-eslint/type-utils@npm:5.49.0" - dependencies: - "@typescript-eslint/typescript-estree": 5.49.0 - "@typescript-eslint/utils": 5.49.0 - debug: ^4.3.4 - tsutils: ^3.21.0 - peerDependencies: - eslint: "*" - peerDependenciesMeta: - typescript: - optional: true - checksum: 9dcee0a21cfdb3549e2305120535af5ab2c5d0cafdd410827e79d7548f8fc4e7da7cbb77a4338ade8b8b8aaf246fee56b919f1857931bbe2ac5df2fbb5e62ee6 - languageName: node - linkType: hard - -"@typescript-eslint/type-utils@npm:5.56.0": - version: 5.56.0 - resolution: "@typescript-eslint/type-utils@npm:5.56.0" - dependencies: - "@typescript-eslint/typescript-estree": 5.56.0 - "@typescript-eslint/utils": 5.56.0 - debug: ^4.3.4 - tsutils: ^3.21.0 - peerDependencies: - eslint: "*" - peerDependenciesMeta: - typescript: - optional: true - checksum: 3dd1fcfadad18790b900a3d90f6617904adb6b0e2bd1e1edb6ebf239e1399865ca9098647405385feb4252d8b2b4577883e6fd3ef8d00bdd521d6070972d486b - languageName: node - linkType: hard - -"@typescript-eslint/types@npm:5.49.0": - version: 5.49.0 - resolution: "@typescript-eslint/types@npm:5.49.0" - checksum: 41f72a043007fc3f3356b5a38d7bfa54871545b4a309810a062f044cff25122413a9660ce6d83d1221762f60d067351d020b0cb68f7e1279817f53e77ce8f33d - languageName: node - linkType: hard - -"@typescript-eslint/types@npm:5.56.0": - version: 5.56.0 - resolution: "@typescript-eslint/types@npm:5.56.0" - checksum: 82ca11553bbb1bbfcaf7e7760b03c0d898940238dc002552c21af3e58f7d482c64c3c6cf0666521aff2a1e7b4b58bb6e4d9a00b1e4998a16b5039f5d288d003a - languageName: node - linkType: hard - -"@typescript-eslint/typescript-estree@npm:5.49.0": - version: 5.49.0 - resolution: "@typescript-eslint/typescript-estree@npm:5.49.0" - dependencies: - "@typescript-eslint/types": 5.49.0 - "@typescript-eslint/visitor-keys": 5.49.0 - debug: ^4.3.4 - globby: ^11.1.0 - is-glob: ^4.0.3 - semver: ^7.3.7 - tsutils: ^3.21.0 - peerDependenciesMeta: - typescript: - optional: true - checksum: f331af9f0ef3ce3157c421b8cc727dec5aa0a60add305aa4c676a02c63ec07799105268af192c5ed193a682b7ed804564d29d49bdbd2019678e495d80e65e29a - languageName: node - linkType: hard - -"@typescript-eslint/typescript-estree@npm:5.56.0": - version: 5.56.0 - resolution: "@typescript-eslint/typescript-estree@npm:5.56.0" - dependencies: - "@typescript-eslint/types": 5.56.0 - "@typescript-eslint/visitor-keys": 5.56.0 - debug: ^4.3.4 - globby: ^11.1.0 - is-glob: ^4.0.3 - semver: ^7.3.7 - tsutils: ^3.21.0 - peerDependenciesMeta: - typescript: - optional: true - checksum: ec3e85201786aa9adddba7cb834a9f330a7f55c729ee9ccf847dbdc2f7437b760f3774152ccad6d0aa48d13fd78df766c880e3a7ca42e01a20aba0e1a1ed61c5 - languageName: node - linkType: hard - -"@typescript-eslint/utils@npm:5.49.0": - version: 5.49.0 - resolution: "@typescript-eslint/utils@npm:5.49.0" - dependencies: - "@types/json-schema": ^7.0.9 - "@types/semver": ^7.3.12 - "@typescript-eslint/scope-manager": 5.49.0 - "@typescript-eslint/types": 5.49.0 - "@typescript-eslint/typescript-estree": 5.49.0 - eslint-scope: ^5.1.1 - eslint-utils: ^3.0.0 - semver: ^7.3.7 - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - checksum: 8218c566637d5104dfb2346216f8cb4c244f31c2a39e261aafe554b8abd48bd630a0d0807a0a8d776af8f9d9914c8776d86abf0a523049f3c5619c498a7e5b1e - languageName: node - linkType: hard - -"@typescript-eslint/utils@npm:5.56.0": - version: 5.56.0 - resolution: "@typescript-eslint/utils@npm:5.56.0" - dependencies: - "@eslint-community/eslint-utils": ^4.2.0 - "@types/json-schema": ^7.0.9 - "@types/semver": ^7.3.12 - "@typescript-eslint/scope-manager": 5.56.0 - "@typescript-eslint/types": 5.56.0 - "@typescript-eslint/typescript-estree": 5.56.0 - eslint-scope: ^5.1.1 - semver: ^7.3.7 - peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - checksum: 413e8d4bf7023ee5ba4f695b62e796a1f94930bb92fe5aa0cee58f63b9837116c23f618825a9c671f610e50f5630188b6059b4ed6b05a2a3336f01d8e977becb - languageName: node - linkType: hard - -"@typescript-eslint/visitor-keys@npm:5.49.0": - version: 5.49.0 - resolution: "@typescript-eslint/visitor-keys@npm:5.49.0" - dependencies: - "@typescript-eslint/types": 5.49.0 - eslint-visitor-keys: ^3.3.0 - checksum: 46dc7bc713e8825d1fccba521fdf7c6e2f8829e491c2afd44dbe4105c6432e3c3dfe7e1ecb221401269d639264bb4af77b60a7b65521fcff9ab02cd31d8ef782 - languageName: node - linkType: hard - -"@typescript-eslint/visitor-keys@npm:5.56.0": - version: 5.56.0 - resolution: "@typescript-eslint/visitor-keys@npm:5.56.0" - dependencies: - "@typescript-eslint/types": 5.56.0 - eslint-visitor-keys: ^3.3.0 - checksum: 568fda40134e153d7befb59b55698f7919ba780d2d3431d8745feabf2e0fbb8aa7a02173b3c467dd20a0f6594e5248a1f82bb25d6c37827716d77452e86cad29 - languageName: node - linkType: hard - -"@vitejs/plugin-react@npm:3.1.0": - version: 3.1.0 - resolution: "@vitejs/plugin-react@npm:3.1.0" - dependencies: - "@babel/core": ^7.20.12 - "@babel/plugin-transform-react-jsx-self": ^7.18.6 - "@babel/plugin-transform-react-jsx-source": ^7.19.6 - magic-string: ^0.27.0 - react-refresh: ^0.14.0 - peerDependencies: - vite: ^4.1.0-beta.0 - checksum: 450fac79e67cba9e1581c860f78e687b44108ab4117663ef20db279316e03cd8e87f94fef376e27cc5e200bd52813dcc09b70ea570c7c7cc291fcd47eb260fbc - languageName: node - linkType: hard - -"@whatwg-node/events@npm:^0.0.2": - version: 0.0.2 - resolution: "@whatwg-node/events@npm:0.0.2" - checksum: 6d491801d36967d5d62443cca6ef39d41cf882d575839d2e9d1a5f394722cd24ef84fe9e897bb72c01bd198871fda9ff0e8b1ac5aa6f3f814f87d92b7f28fdcc - languageName: node - linkType: hard - -"@whatwg-node/fetch@npm:^0.8.0, @whatwg-node/fetch@npm:^0.8.1": - version: 0.8.4 - resolution: "@whatwg-node/fetch@npm:0.8.4" - dependencies: - "@peculiar/webcrypto": ^1.4.0 - "@whatwg-node/node-fetch": ^0.3.3 - busboy: ^1.6.0 - urlpattern-polyfill: ^6.0.2 - web-streams-polyfill: ^3.2.1 - checksum: 7e40311424a069e5e35d580b65373d0cb63034b39cdce7089d7681d0f354bc7132d1140be5ad39478aa3dbaf62a0053fbf64d77bf3bb3f45d65d8442ef61d4ea - languageName: node - linkType: hard - -"@whatwg-node/node-fetch@npm:^0.3.3": - version: 0.3.4 - resolution: "@whatwg-node/node-fetch@npm:0.3.4" - dependencies: - "@whatwg-node/events": ^0.0.2 - busboy: ^1.6.0 - fast-querystring: ^1.1.1 - fast-url-parser: ^1.1.3 - tslib: ^2.3.1 - checksum: 11bcb83eddc9276ce3c97ae63c015dc1aacaa81210bd0986a53ca5fd290fe470d3f937432e3d84cc3c0ad6e8431ef5e0a2c6115e99b1863076c13d5584c8f6fb - languageName: node - linkType: hard - -"@wry/context@npm:^0.7.0": - version: 0.7.0 - resolution: "@wry/context@npm:0.7.0" - dependencies: - tslib: ^2.3.0 - checksum: f4ff78023a0b949122037aae766232b7d2284dc415204d22d9ea6d7969ff8f5f29b18128bc9a40e68dc054c8a12b1bf5868a357fdb50c398c447290c3a5b0496 - languageName: node - linkType: hard - -"@wry/equality@npm:^0.1.2": - version: 0.1.11 - resolution: "@wry/equality@npm:0.1.11" - dependencies: - tslib: ^1.9.3 - checksum: 1a26a0fd11e3e3a6a197d9a54a5bec523caf693daa24ad2709f496e43dd3cd12290a0d17df81f8a783437795f6c64a1ca2717cdac6e79022bde4450c11e705c9 - languageName: node - linkType: hard - -"@wry/equality@npm:^0.5.0": - version: 0.5.3 - resolution: "@wry/equality@npm:0.5.3" - dependencies: - tslib: ^2.3.0 - checksum: 7ea8ded51462911217183b93cc3ffbb4d18dc02a62d4a79e0d9983463739bf54106aaeb25649bf33168120bd044b61d135018bfcf4fefad8099c13eac9238aa6 - languageName: node - linkType: hard - -"@wry/trie@npm:^0.3.0": - version: 0.3.2 - resolution: "@wry/trie@npm:0.3.2" - dependencies: - tslib: ^2.3.0 - checksum: 151d06b519e1ff1c3acf6ee6846161b1d7d50bbecd4c48e5cd1b05f9e37c30602aff02e88f20105f6e6c54ae4123f9c4eb7715044d7fd927d4ba4ec3e755cd36 - languageName: node - linkType: hard - -"abbrev@npm:^1.0.0": - version: 1.1.1 - resolution: "abbrev@npm:1.1.1" - checksum: a4a97ec07d7ea112c517036882b2ac22f3109b7b19077dc656316d07d308438aac28e4d9746dc4d84bf6b1e75b4a7b0a5f3cb30592419f128ca9a8cee3bcfa17 - languageName: node - linkType: hard - -"acorn-jsx@npm:^5.3.2": - version: 5.3.2 - resolution: "acorn-jsx@npm:5.3.2" - peerDependencies: - acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - checksum: c3d3b2a89c9a056b205b69530a37b972b404ee46ec8e5b341666f9513d3163e2a4f214a71f4dfc7370f5a9c07472d2fd1c11c91c3f03d093e37637d95da98950 - languageName: node - linkType: hard - -"acorn@npm:^8.8.0": - version: 8.8.2 - resolution: "acorn@npm:8.8.2" - bin: - acorn: bin/acorn - checksum: f790b99a1bf63ef160c967e23c46feea7787e531292bb827126334612c234ed489a0dc2c7ba33156416f0ffa8d25bf2b0fdb7f35c2ba60eb3e960572bece4001 - languageName: node - linkType: hard - -"agent-base@npm:6, agent-base@npm:^6.0.2": - version: 6.0.2 - resolution: "agent-base@npm:6.0.2" - dependencies: - debug: 4 - checksum: f52b6872cc96fd5f622071b71ef200e01c7c4c454ee68bc9accca90c98cfb39f2810e3e9aa330435835eedc8c23f4f8a15267f67c6e245d2b33757575bdac49d - languageName: node - linkType: hard - -"agentkeepalive@npm:^4.2.1": - version: 4.3.0 - resolution: "agentkeepalive@npm:4.3.0" - dependencies: - debug: ^4.1.0 - depd: ^2.0.0 - humanize-ms: ^1.2.1 - checksum: 982453aa44c11a06826c836025e5162c846e1200adb56f2d075400da7d32d87021b3b0a58768d949d824811f5654223d5a8a3dad120921a2439625eb847c6260 - languageName: node - linkType: hard - -"aggregate-error@npm:^3.0.0": - version: 3.1.0 - resolution: "aggregate-error@npm:3.1.0" - dependencies: - clean-stack: ^2.0.0 - indent-string: ^4.0.0 - checksum: 1101a33f21baa27a2fa8e04b698271e64616b886795fd43c31068c07533c7b3facfcaf4e9e0cab3624bd88f729a592f1c901a1a229c9e490eafce411a8644b79 - languageName: node - linkType: hard - -"ajv@npm:^6.10.0, ajv@npm:^6.12.4": - version: 6.12.6 - resolution: "ajv@npm:6.12.6" - dependencies: - fast-deep-equal: ^3.1.1 - fast-json-stable-stringify: ^2.0.0 - json-schema-traverse: ^0.4.1 - uri-js: ^4.2.2 - checksum: 874972efe5c4202ab0a68379481fbd3d1b5d0a7bd6d3cc21d40d3536ebff3352a2a1fabb632d4fd2cc7fe4cbdcd5ed6782084c9bbf7f32a1536d18f9da5007d4 - languageName: node - linkType: hard - -"ansi-escapes@npm:^4.2.1, ansi-escapes@npm:^4.3.0": - version: 4.3.2 - resolution: "ansi-escapes@npm:4.3.2" - dependencies: - type-fest: ^0.21.3 - checksum: 93111c42189c0a6bed9cdb4d7f2829548e943827ee8479c74d6e0b22ee127b2a21d3f8b5ca57723b8ef78ce011fbfc2784350eb2bde3ccfccf2f575fa8489815 - languageName: node - linkType: hard - -"ansi-regex@npm:^5.0.1": - version: 5.0.1 - resolution: "ansi-regex@npm:5.0.1" - checksum: 2aa4bb54caf2d622f1afdad09441695af2a83aa3fe8b8afa581d205e57ed4261c183c4d3877cee25794443fde5876417d859c108078ab788d6af7e4fe52eb66b - languageName: node - linkType: hard - -"ansi-styles@npm:^3.2.1": - version: 3.2.1 - resolution: "ansi-styles@npm:3.2.1" - dependencies: - color-convert: ^1.9.0 - checksum: d85ade01c10e5dd77b6c89f34ed7531da5830d2cb5882c645f330079975b716438cd7ebb81d0d6e6b4f9c577f19ae41ab55f07f19786b02f9dfd9e0377395665 - languageName: node - linkType: hard - -"ansi-styles@npm:^4.0.0, ansi-styles@npm:^4.1.0": - version: 4.3.0 - resolution: "ansi-styles@npm:4.3.0" - dependencies: - color-convert: ^2.0.1 - checksum: 513b44c3b2105dd14cc42a19271e80f386466c4be574bccf60b627432f9198571ebf4ab1e4c3ba17347658f4ee1711c163d574248c0c1cdc2d5917a0ad582ec4 - languageName: node - linkType: hard - -"apollo-link-http-common@npm:^0.2.4": - version: 0.2.16 - resolution: "apollo-link-http-common@npm:0.2.16" - dependencies: - apollo-link: ^1.2.14 - ts-invariant: ^0.4.0 - tslib: ^1.9.3 - peerDependencies: - graphql: ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 - checksum: 46672f2b10a01f495ed91d32b9d21ed0747bf23c8c23a2041ca41dd92a05e0e18d7842d29c958f6ddfaee03bd89202788f593cdcb96d4167191aff125f109c67 - languageName: node - linkType: hard - -"apollo-link@npm:1.2.5": - version: 1.2.5 - resolution: "apollo-link@npm:1.2.5" - dependencies: - apollo-utilities: ^1.0.0 - zen-observable-ts: ^0.8.12 - peerDependencies: - graphql: ^0.11.3 || ^0.12.3 || ^0.13.0 || ^14.0.0 - checksum: 4f28eaced42e75c9b0402b89c994cc8e20dd60566e4478e19900c1a88f08fe6a1f126181f5454d45e9b20720e0f243462b7f95fa13a06f9008c7728acf83e8f8 - languageName: node - linkType: hard - -"apollo-link@npm:>=1.2.5, apollo-link@npm:^1.2.14": - version: 1.2.14 - resolution: "apollo-link@npm:1.2.14" - dependencies: - apollo-utilities: ^1.3.0 - ts-invariant: ^0.4.0 - tslib: ^1.9.3 - zen-observable-ts: ^0.8.21 - peerDependencies: - graphql: ^0.11.3 || ^0.12.3 || ^0.13.0 || ^14.0.0 || ^15.0.0 - checksum: ad8d051ffceb270cdbbcc71d499bce2fda437a65fac6edc859a9e2dc0dbcb10b6a3f4da41789e786270aa358719c8b71315f383a698a74957df0d7aeea042918 - languageName: node - linkType: hard - -"apollo-utilities@npm:^1.0.0, apollo-utilities@npm:^1.3.0": - version: 1.3.4 - resolution: "apollo-utilities@npm:1.3.4" - dependencies: - "@wry/equality": ^0.1.2 - fast-json-stable-stringify: ^2.0.0 - ts-invariant: ^0.4.0 - tslib: ^1.10.0 - peerDependencies: - graphql: ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 - checksum: 6e0192a3420782909c930f5230808d7fbbdbcdfccddd960120e19bab251b77a16e590b05dbb4a7da2c27c59077fbfd53e56819a9fae694debe7f898e8b0ec1e9 - languageName: node - linkType: hard - -"aproba@npm:^1.0.3 || ^2.0.0": - version: 2.0.0 - resolution: "aproba@npm:2.0.0" - checksum: 5615cadcfb45289eea63f8afd064ab656006361020e1735112e346593856f87435e02d8dcc7ff0d11928bc7d425f27bc7c2a84f6c0b35ab0ff659c814c138a24 - languageName: node - linkType: hard - -"are-we-there-yet@npm:^3.0.0": - version: 3.0.1 - resolution: "are-we-there-yet@npm:3.0.1" - dependencies: - delegates: ^1.0.0 - readable-stream: ^3.6.0 - checksum: 52590c24860fa7173bedeb69a4c05fb573473e860197f618b9a28432ee4379049336727ae3a1f9c4cb083114601c1140cee578376164d0e651217a9843f9fe83 - languageName: node - linkType: hard - -"argparse@npm:^2.0.1": - version: 2.0.1 - resolution: "argparse@npm:2.0.1" - checksum: 83644b56493e89a254bae05702abf3a1101b4fa4d0ca31df1c9985275a5a5bd47b3c27b7fa0b71098d41114d8ca000e6ed90cad764b306f8a503665e4d517ced - languageName: node - linkType: hard - -"aria-hidden@npm:^1.1.3": - version: 1.2.3 - resolution: "aria-hidden@npm:1.2.3" - dependencies: - tslib: ^2.0.0 - checksum: 7d7d211629eef315e94ed3b064c6823d13617e609d3f9afab1c2ed86399bb8e90405f9bdd358a85506802766f3ecb468af985c67c846045a34b973bcc0289db9 - languageName: node - linkType: hard - -"aria-query@npm:^5.1.3": - version: 5.1.3 - resolution: "aria-query@npm:5.1.3" - dependencies: - deep-equal: ^2.0.5 - checksum: 929ff95f02857b650fb4cbcd2f41072eee2f46159a6605ea03bf63aa572e35ffdff43d69e815ddc462e16e07de8faba3978afc2813650b4448ee18c9895d982b - languageName: node - linkType: hard - -"array-buffer-byte-length@npm:^1.0.0": - version: 1.0.0 - resolution: "array-buffer-byte-length@npm:1.0.0" - dependencies: - call-bind: ^1.0.2 - is-array-buffer: ^3.0.1 - checksum: 044e101ce150f4804ad19c51d6c4d4cfa505c5b2577bd179256e4aa3f3f6a0a5e9874c78cd428ee566ac574c8a04d7ce21af9fe52e844abfdccb82b33035a7c3 - languageName: node - linkType: hard - -"array-includes@npm:^3.1.5, array-includes@npm:^3.1.6": - version: 3.1.6 - resolution: "array-includes@npm:3.1.6" - dependencies: - call-bind: ^1.0.2 - define-properties: ^1.1.4 - es-abstract: ^1.20.4 - get-intrinsic: ^1.1.3 - is-string: ^1.0.7 - checksum: f22f8cd8ba8a6448d91eebdc69f04e4e55085d09232b5216ee2d476dab3ef59984e8d1889e662c6a0ed939dcb1b57fd05b2c0209c3370942fc41b752c82a2ca5 - languageName: node - linkType: hard - -"array-union@npm:^2.1.0": - version: 2.1.0 - resolution: "array-union@npm:2.1.0" - checksum: 5bee12395cba82da674931df6d0fea23c4aa4660cb3b338ced9f828782a65caa232573e6bf3968f23e0c5eb301764a382cef2f128b170a9dc59de0e36c39f98d - languageName: node - linkType: hard - -"array.prototype.flat@npm:^1.3.1": - version: 1.3.1 - resolution: "array.prototype.flat@npm:1.3.1" - dependencies: - call-bind: ^1.0.2 - define-properties: ^1.1.4 - es-abstract: ^1.20.4 - es-shim-unscopables: ^1.0.0 - checksum: 5a8415949df79bf6e01afd7e8839bbde5a3581300e8ad5d8449dea52639e9e59b26a467665622783697917b43bf39940a6e621877c7dd9b3d1c1f97484b9b88b - languageName: node - linkType: hard - -"array.prototype.flatmap@npm:^1.3.1": - version: 1.3.1 - resolution: "array.prototype.flatmap@npm:1.3.1" - dependencies: - call-bind: ^1.0.2 - define-properties: ^1.1.4 - es-abstract: ^1.20.4 - es-shim-unscopables: ^1.0.0 - checksum: 8c1c43a4995f12cf12523436da28515184c753807b3f0bc2ca6c075f71c470b099e2090cc67dba8e5280958fea401c1d0c59e1db0143272aef6cd1103921a987 - languageName: node - linkType: hard - -"array.prototype.tosorted@npm:^1.1.1": - version: 1.1.1 - resolution: "array.prototype.tosorted@npm:1.1.1" - dependencies: - call-bind: ^1.0.2 - define-properties: ^1.1.4 - es-abstract: ^1.20.4 - es-shim-unscopables: ^1.0.0 - get-intrinsic: ^1.1.3 - checksum: 7923324a67e70a2fc0a6e40237405d92395e45ebd76f5cb89c2a5cf1e66b47aca6baacd0cd628ffd88830b90d47fff268071493d09c9ae123645613dac2c2ca3 - languageName: node - linkType: hard - -"asap@npm:~2.0.3": - version: 2.0.6 - resolution: "asap@npm:2.0.6" - checksum: b296c92c4b969e973260e47523207cd5769abd27c245a68c26dc7a0fe8053c55bb04360237cb51cab1df52be939da77150ace99ad331fb7fb13b3423ed73ff3d - languageName: node - linkType: hard - -"asn1js@npm:^3.0.1, asn1js@npm:^3.0.5": - version: 3.0.5 - resolution: "asn1js@npm:3.0.5" - dependencies: - pvtsutils: ^1.3.2 - pvutils: ^1.1.3 - tslib: ^2.4.0 - checksum: 3b6af1bbadd5762ef8ead5daf2f6bda1bc9e23bc825c4dcc996aa1f9521ad7390a64028565d95d98090d69c8431f004c71cccb866004759169d7c203cf9075eb - languageName: node - linkType: hard - -"ast-types-flow@npm:^0.0.7": - version: 0.0.7 - resolution: "ast-types-flow@npm:0.0.7" - checksum: a26dcc2182ffee111cad7c471759b0bda22d3b7ebacf27c348b22c55f16896b18ab0a4d03b85b4020dce7f3e634b8f00b593888f622915096ea1927fa51866c4 - languageName: node - linkType: hard - -"astral-regex@npm:^2.0.0": - version: 2.0.0 - resolution: "astral-regex@npm:2.0.0" - checksum: 876231688c66400473ba505731df37ea436e574dd524520294cc3bbc54ea40334865e01fa0d074d74d036ee874ee7e62f486ea38bc421ee8e6a871c06f011766 - languageName: node - linkType: hard - -"asynckit@npm:^0.4.0": - version: 0.4.0 - resolution: "asynckit@npm:0.4.0" - checksum: 7b78c451df768adba04e2d02e63e2d0bf3b07adcd6e42b4cf665cb7ce899bedd344c69a1dcbce355b5f972d597b25aaa1c1742b52cffd9caccb22f348114f6be - languageName: node - linkType: hard - -"auto-bind@npm:~4.0.0": - version: 4.0.0 - resolution: "auto-bind@npm:4.0.0" - checksum: 00cad71cce5742faccb7dd65c1b55ebc4f45add4b0c9a1547b10b05bab22813230133b0c892c67ba3eb969a4524710c5e43cc45c72898ec84e56f3a596e7a04f - languageName: node - linkType: hard - -"available-typed-arrays@npm:^1.0.5": - version: 1.0.5 - resolution: "available-typed-arrays@npm:1.0.5" - checksum: 20eb47b3cefd7db027b9bbb993c658abd36d4edd3fe1060e83699a03ee275b0c9b216cc076ff3f2db29073225fb70e7613987af14269ac1fe2a19803ccc97f1a - languageName: node - linkType: hard - -"axe-core@npm:^4.6.2": - version: 4.6.3 - resolution: "axe-core@npm:4.6.3" - checksum: d0c46be92b9707c48b88a53cd5f471b155a2bfc8bf6beffb514ecd14e30b4863e340b5fc4f496d82a3c562048088c1f3ff5b93b9b3b026cb9c3bfacfd535da10 - languageName: node - linkType: hard - -"axobject-query@npm:^3.1.1": - version: 3.1.1 - resolution: "axobject-query@npm:3.1.1" - dependencies: - deep-equal: ^2.0.5 - checksum: c12a5da10dc7bab75e1cda9b6a3b5fcf10eba426ddf1a17b71ef65a434ed707ede7d1c4f013ba1609e970bc8c0cddac01365080d376204314e9b294719acd8a5 - languageName: node - linkType: hard - -"babel-plugin-macros@npm:^3.1.0": - version: 3.1.0 - resolution: "babel-plugin-macros@npm:3.1.0" - dependencies: - "@babel/runtime": ^7.12.5 - cosmiconfig: ^7.0.0 - resolve: ^1.19.0 - checksum: 765de4abebd3e4688ebdfbff8571ddc8cd8061f839bb6c3e550b0344a4027b04c60491f843296ce3f3379fb356cc873d57a9ee6694262547eb822c14a25be9a6 - languageName: node - linkType: hard - -"babel-plugin-polyfill-corejs2@npm:^0.3.3": - version: 0.3.3 - resolution: "babel-plugin-polyfill-corejs2@npm:0.3.3" - dependencies: - "@babel/compat-data": ^7.17.7 - "@babel/helper-define-polyfill-provider": ^0.3.3 - semver: ^6.1.1 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 7db3044993f3dddb3cc3d407bc82e640964a3bfe22de05d90e1f8f7a5cb71460011ab136d3c03c6c1ba428359ebf635688cd6205e28d0469bba221985f5c6179 - languageName: node - linkType: hard - -"babel-plugin-polyfill-corejs3@npm:^0.6.0": - version: 0.6.0 - resolution: "babel-plugin-polyfill-corejs3@npm:0.6.0" - dependencies: - "@babel/helper-define-polyfill-provider": ^0.3.3 - core-js-compat: ^3.25.1 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 470bb8c59f7c0912bd77fe1b5a2e72f349b3f65bbdee1d60d6eb7e1f4a085c6f24b2dd5ab4ac6c2df6444a96b070ef6790eccc9edb6a2668c60d33133bfb62c6 - languageName: node - linkType: hard - -"babel-plugin-polyfill-regenerator@npm:^0.4.1": - version: 0.4.1 - resolution: "babel-plugin-polyfill-regenerator@npm:0.4.1" - dependencies: - "@babel/helper-define-polyfill-provider": ^0.3.3 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: ab0355efbad17d29492503230387679dfb780b63b25408990d2e4cf421012dae61d6199ddc309f4d2409ce4e9d3002d187702700dd8f4f8770ebbba651ed066c - languageName: node - linkType: hard - -"babel-plugin-styled-components@npm:>= 1.12.0": - version: 2.0.7 - resolution: "babel-plugin-styled-components@npm:2.0.7" - dependencies: - "@babel/helper-annotate-as-pure": ^7.16.0 - "@babel/helper-module-imports": ^7.16.0 - babel-plugin-syntax-jsx: ^6.18.0 - lodash: ^4.17.11 - picomatch: ^2.3.0 - peerDependencies: - styled-components: ">= 2" - checksum: 80b06b10db02d749432a0ac43a5feedd686f6b648628d7433a39b1844260b2b7c72431f6e705c82636ee025fcfd4f6c32fc05677e44033b8a39ddcd4488b3147 - languageName: node - linkType: hard - -"babel-plugin-syntax-jsx@npm:^6.18.0": - version: 6.18.0 - resolution: "babel-plugin-syntax-jsx@npm:6.18.0" - checksum: 0c7ce5b81d6cfc01a7dd7a76a9a8f090ee02ba5c890310f51217ef1a7e6163fb7848994bbc14fd560117892e82240df9c7157ad0764da67ca5f2afafb73a7d27 - languageName: node - linkType: hard - -"babel-plugin-syntax-trailing-function-commas@npm:^7.0.0-beta.0": - version: 7.0.0-beta.0 - resolution: "babel-plugin-syntax-trailing-function-commas@npm:7.0.0-beta.0" - checksum: e37509156ca945dd9e4b82c66dd74f2d842ad917bd280cb5aa67960942300cd065eeac476d2514bdcdedec071277a358f6d517c31d9f9244d9bbc3619a8ecf8a - languageName: node - linkType: hard - -"babel-polyfill@npm:6.26.0": - version: 6.26.0 - resolution: "babel-polyfill@npm:6.26.0" - dependencies: - babel-runtime: ^6.26.0 - core-js: ^2.5.0 - regenerator-runtime: ^0.10.5 - checksum: 6fb1a3c0bfe1b6fc56ce1afcf531878aa629b309277a05fbf3fe950589b24cb4052a6e487db21d318eb5336b68730a21f5ef62166b6cc8aea3406261054d1118 - languageName: node - linkType: hard - -"babel-preset-fbjs@npm:^3.4.0": - version: 3.4.0 - resolution: "babel-preset-fbjs@npm:3.4.0" - dependencies: - "@babel/plugin-proposal-class-properties": ^7.0.0 - "@babel/plugin-proposal-object-rest-spread": ^7.0.0 - "@babel/plugin-syntax-class-properties": ^7.0.0 - "@babel/plugin-syntax-flow": ^7.0.0 - "@babel/plugin-syntax-jsx": ^7.0.0 - "@babel/plugin-syntax-object-rest-spread": ^7.0.0 - "@babel/plugin-transform-arrow-functions": ^7.0.0 - "@babel/plugin-transform-block-scoped-functions": ^7.0.0 - "@babel/plugin-transform-block-scoping": ^7.0.0 - "@babel/plugin-transform-classes": ^7.0.0 - "@babel/plugin-transform-computed-properties": ^7.0.0 - "@babel/plugin-transform-destructuring": ^7.0.0 - "@babel/plugin-transform-flow-strip-types": ^7.0.0 - "@babel/plugin-transform-for-of": ^7.0.0 - "@babel/plugin-transform-function-name": ^7.0.0 - "@babel/plugin-transform-literals": ^7.0.0 - "@babel/plugin-transform-member-expression-literals": ^7.0.0 - "@babel/plugin-transform-modules-commonjs": ^7.0.0 - "@babel/plugin-transform-object-super": ^7.0.0 - "@babel/plugin-transform-parameters": ^7.0.0 - "@babel/plugin-transform-property-literals": ^7.0.0 - "@babel/plugin-transform-react-display-name": ^7.0.0 - "@babel/plugin-transform-react-jsx": ^7.0.0 - "@babel/plugin-transform-shorthand-properties": ^7.0.0 - "@babel/plugin-transform-spread": ^7.0.0 - "@babel/plugin-transform-template-literals": ^7.0.0 - babel-plugin-syntax-trailing-function-commas: ^7.0.0-beta.0 - peerDependencies: - "@babel/core": ^7.0.0 - checksum: b3352cf690729125997f254bc31b9c4db347f8646f1571958ced1c45f0da89439e183e1c88e35397eb0361b9e1fbb1dd8142d3f4647814deb427e53c54f44d5f - languageName: node - linkType: hard - -"babel-runtime@npm:6.26.0, babel-runtime@npm:^6.26.0": - version: 6.26.0 - resolution: "babel-runtime@npm:6.26.0" - dependencies: - core-js: ^2.4.0 - regenerator-runtime: ^0.11.0 - checksum: 8aeade94665e67a73c1ccc10f6fd42ba0c689b980032b70929de7a6d9a12eb87ef51902733f8fefede35afea7a5c3ef7e916a64d503446c1eedc9e3284bd3d50 - languageName: node - linkType: hard - -"bail@npm:^2.0.0": - version: 2.0.2 - resolution: "bail@npm:2.0.2" - checksum: aab4e8ccdc8d762bf3fdfce8e706601695620c0c2eda256dd85088dc0be3cfd7ff126f6e99c2bee1f24f5d418414aacf09d7f9702f16d6963df2fa488cda8824 - languageName: node - linkType: hard - -"balanced-match@npm:^1.0.0": - version: 1.0.2 - resolution: "balanced-match@npm:1.0.2" - checksum: 9706c088a283058a8a99e0bf91b0a2f75497f185980d9ffa8b304de1d9e58ebda7c72c07ebf01dadedaac5b2907b2c6f566f660d62bd336c3468e960403b9d65 - languageName: node - linkType: hard - -"base64-js@npm:^1.3.1": - version: 1.5.1 - resolution: "base64-js@npm:1.5.1" - checksum: 669632eb3745404c2f822a18fc3a0122d2f9a7a13f7fb8b5823ee19d1d2ff9ee5b52c53367176ea4ad093c332fd5ab4bd0ebae5a8e27917a4105a4cfc86b1005 - languageName: node - linkType: hard - -"bl@npm:^4.1.0": - version: 4.1.0 - resolution: "bl@npm:4.1.0" - dependencies: - buffer: ^5.5.0 - inherits: ^2.0.4 - readable-stream: ^3.4.0 - checksum: 9e8521fa7e83aa9427c6f8ccdcba6e8167ef30cc9a22df26effcc5ab682ef91d2cbc23a239f945d099289e4bbcfae7a192e9c28c84c6202e710a0dfec3722662 - languageName: node - linkType: hard - -"brace-expansion@npm:^1.1.7": - version: 1.1.11 - resolution: "brace-expansion@npm:1.1.11" - dependencies: - balanced-match: ^1.0.0 - concat-map: 0.0.1 - checksum: faf34a7bb0c3fcf4b59c7808bc5d2a96a40988addf2e7e09dfbb67a2251800e0d14cd2bfc1aa79174f2f5095c54ff27f46fb1289fe2d77dac755b5eb3434cc07 - languageName: node - linkType: hard - -"brace-expansion@npm:^2.0.1": - version: 2.0.1 - resolution: "brace-expansion@npm:2.0.1" - dependencies: - balanced-match: ^1.0.0 - checksum: a61e7cd2e8a8505e9f0036b3b6108ba5e926b4b55089eeb5550cd04a471fe216c96d4fe7e4c7f995c728c554ae20ddfc4244cad10aef255e72b62930afd233d1 - languageName: node - linkType: hard - -"braces@npm:^3.0.2": - version: 3.0.2 - resolution: "braces@npm:3.0.2" - dependencies: - fill-range: ^7.0.1 - checksum: e2a8e769a863f3d4ee887b5fe21f63193a891c68b612ddb4b68d82d1b5f3ff9073af066c343e9867a393fe4c2555dcb33e89b937195feb9c1613d259edfcd459 - languageName: node - linkType: hard - -"browserslist@npm:^4.21.3, browserslist@npm:^4.21.5": - version: 4.21.5 - resolution: "browserslist@npm:4.21.5" - dependencies: - caniuse-lite: ^1.0.30001449 - electron-to-chromium: ^1.4.284 - node-releases: ^2.0.8 - update-browserslist-db: ^1.0.10 - bin: - browserslist: cli.js - checksum: 9755986b22e73a6a1497fd8797aedd88e04270be33ce66ed5d85a1c8a798292a65e222b0f251bafa1c2522261e237d73b08b58689d4920a607e5a53d56dc4706 - languageName: node - linkType: hard - -"bser@npm:2.1.1": - version: 2.1.1 - resolution: "bser@npm:2.1.1" - dependencies: - node-int64: ^0.4.0 - checksum: 9ba4dc58ce86300c862bffc3ae91f00b2a03b01ee07f3564beeeaf82aa243b8b03ba53f123b0b842c190d4399b94697970c8e7cf7b1ea44b61aa28c3526a4449 - languageName: node - linkType: hard - -"buffer@npm:^5.5.0": - version: 5.7.1 - resolution: "buffer@npm:5.7.1" - dependencies: - base64-js: ^1.3.1 - ieee754: ^1.1.13 - checksum: e2cf8429e1c4c7b8cbd30834ac09bd61da46ce35f5c22a78e6c2f04497d6d25541b16881e30a019c6fd3154150650ccee27a308eff3e26229d788bbdeb08ab84 - languageName: node - linkType: hard - -"busboy@npm:^1.6.0": - version: 1.6.0 - resolution: "busboy@npm:1.6.0" - dependencies: - streamsearch: ^1.1.0 - checksum: 32801e2c0164e12106bf236291a00795c3c4e4b709ae02132883fe8478ba2ae23743b11c5735a0aae8afe65ac4b6ca4568b91f0d9fed1fdbc32ede824a73746e - languageName: node - linkType: hard - -"cacache@npm:^16.1.0": - version: 16.1.3 - resolution: "cacache@npm:16.1.3" - dependencies: - "@npmcli/fs": ^2.1.0 - "@npmcli/move-file": ^2.0.0 - chownr: ^2.0.0 - fs-minipass: ^2.1.0 - glob: ^8.0.1 - infer-owner: ^1.0.4 - lru-cache: ^7.7.1 - minipass: ^3.1.6 - minipass-collect: ^1.0.2 - minipass-flush: ^1.0.5 - minipass-pipeline: ^1.2.4 - mkdirp: ^1.0.4 - p-map: ^4.0.0 - promise-inflight: ^1.0.1 - rimraf: ^3.0.2 - ssri: ^9.0.0 - tar: ^6.1.11 - unique-filename: ^2.0.0 - checksum: d91409e6e57d7d9a3a25e5dcc589c84e75b178ae8ea7de05cbf6b783f77a5fae938f6e8fda6f5257ed70000be27a681e1e44829251bfffe4c10216002f8f14e6 - languageName: node - linkType: hard - -"call-bind@npm:^1.0.0, call-bind@npm:^1.0.2": - version: 1.0.2 - resolution: "call-bind@npm:1.0.2" - dependencies: - function-bind: ^1.1.1 - get-intrinsic: ^1.0.2 - checksum: f8e31de9d19988a4b80f3e704788c4a2d6b6f3d17cfec4f57dc29ced450c53a49270dc66bf0fbd693329ee948dd33e6c90a329519aef17474a4d961e8d6426b0 - languageName: node - linkType: hard - -"callsites@npm:^3.0.0": - version: 3.1.0 - resolution: "callsites@npm:3.1.0" - checksum: 072d17b6abb459c2ba96598918b55868af677154bec7e73d222ef95a8fdb9bbf7dae96a8421085cdad8cd190d86653b5b6dc55a4484f2e5b2e27d5e0c3fc15b3 - languageName: node - linkType: hard - -"camel-case@npm:^4.1.2": - version: 4.1.2 - resolution: "camel-case@npm:4.1.2" - dependencies: - pascal-case: ^3.1.2 - tslib: ^2.0.3 - checksum: bcbd25cd253b3cbc69be3f535750137dbf2beb70f093bdc575f73f800acc8443d34fd52ab8f0a2413c34f1e8203139ffc88428d8863e4dfe530cfb257a379ad6 - languageName: node - linkType: hard - -"camelcase@npm:^5.0.0": - version: 5.3.1 - resolution: "camelcase@npm:5.3.1" - checksum: e6effce26b9404e3c0f301498184f243811c30dfe6d0b9051863bd8e4034d09c8c2923794f280d6827e5aa055f6c434115ff97864a16a963366fb35fd673024b - languageName: node - linkType: hard - -"camelize@npm:^1.0.0": - version: 1.0.1 - resolution: "camelize@npm:1.0.1" - checksum: 91d8611d09af725e422a23993890d22b2b72b4cabf7239651856950c76b4bf53fe0d0da7c5e4db05180e898e4e647220e78c9fbc976113bd96d603d1fcbfcb99 - languageName: node - linkType: hard - -"caniuse-lite@npm:^1.0.30001449": - version: 1.0.30001465 - resolution: "caniuse-lite@npm:1.0.30001465" - checksum: c991ecdfff378a22b268f9b1eb732d003c8ad89db3241a4cdec3b3ec3354aa966a44171cb806c90abe2e3f0573d67dc29a7dce2478b1f070b23747c392244c5d - languageName: node - linkType: hard - -"capital-case@npm:^1.0.4": - version: 1.0.4 - resolution: "capital-case@npm:1.0.4" - dependencies: - no-case: ^3.0.4 - tslib: ^2.0.3 - upper-case-first: ^2.0.2 - checksum: 41fa8fa87f6d24d0835a2b4a9341a3eaecb64ac29cd7c5391f35d6175a0fa98ab044e7f2602e1ec3afc886231462ed71b5b80c590b8b41af903ec2c15e5c5931 - languageName: node - linkType: hard - -"chalk@npm:^2.0.0": - version: 2.4.2 - resolution: "chalk@npm:2.4.2" - dependencies: - ansi-styles: ^3.2.1 - escape-string-regexp: ^1.0.5 - supports-color: ^5.3.0 - checksum: ec3661d38fe77f681200f878edbd9448821924e0f93a9cefc0e26a33b145f1027a2084bf19967160d11e1f03bfe4eaffcabf5493b89098b2782c3fe0b03d80c2 - languageName: node - linkType: hard - -"chalk@npm:^4.0.0, chalk@npm:^4.1.0, chalk@npm:^4.1.1": - version: 4.1.2 - resolution: "chalk@npm:4.1.2" - dependencies: - ansi-styles: ^4.1.0 - supports-color: ^7.1.0 - checksum: fe75c9d5c76a7a98d45495b91b2172fa3b7a09e0cc9370e5c8feb1c567b85c4288e2b3fded7cfdd7359ac28d6b3844feb8b82b8686842e93d23c827c417e83fc - languageName: node - linkType: hard - -"change-case-all@npm:1.0.14": - version: 1.0.14 - resolution: "change-case-all@npm:1.0.14" - dependencies: - change-case: ^4.1.2 - is-lower-case: ^2.0.2 - is-upper-case: ^2.0.2 - lower-case: ^2.0.2 - lower-case-first: ^2.0.2 - sponge-case: ^1.0.1 - swap-case: ^2.0.2 - title-case: ^3.0.3 - upper-case: ^2.0.2 - upper-case-first: ^2.0.2 - checksum: 6ff893e005e1bf115cc2969cc5ca3610f7c6ece9e90b7927ed12c980c7d3ea9a565150d246c6dba0fee21aaacbd38d69b98a4670d96b892c76f66e46616506d3 - languageName: node - linkType: hard - -"change-case-all@npm:1.0.15": - version: 1.0.15 - resolution: "change-case-all@npm:1.0.15" - dependencies: - change-case: ^4.1.2 - is-lower-case: ^2.0.2 - is-upper-case: ^2.0.2 - lower-case: ^2.0.2 - lower-case-first: ^2.0.2 - sponge-case: ^1.0.1 - swap-case: ^2.0.2 - title-case: ^3.0.3 - upper-case: ^2.0.2 - upper-case-first: ^2.0.2 - checksum: e1dabdcd8447a3690f3faf15f92979dfbc113109b50916976e1d5e518e6cfdebee4f05f54d0ca24fb79a4bf835185b59ae25e967bb3dc10bd236a775b19ecc52 - languageName: node - linkType: hard - -"change-case@npm:^4.1.2": - version: 4.1.2 - resolution: "change-case@npm:4.1.2" - dependencies: - camel-case: ^4.1.2 - capital-case: ^1.0.4 - constant-case: ^3.0.4 - dot-case: ^3.0.4 - header-case: ^2.0.4 - no-case: ^3.0.4 - param-case: ^3.0.4 - pascal-case: ^3.1.2 - path-case: ^3.0.4 - sentence-case: ^3.0.4 - snake-case: ^3.0.4 - tslib: ^2.0.3 - checksum: e4bc4a093a1f7cce8b33896665cf9e456e3bc3cc0def2ad7691b1994cfca99b3188d0a513b16855b01a6bd20692fcde12a7d4d87a5615c4c515bbbf0e651f116 - languageName: node - linkType: hard - -"character-entities@npm:^2.0.0": - version: 2.0.2 - resolution: "character-entities@npm:2.0.2" - checksum: cf1643814023697f725e47328fcec17923b8f1799102a8a79c1514e894815651794a2bffd84bb1b3a4b124b050154e4529ed6e81f7c8068a734aecf07a6d3def - languageName: node - linkType: hard - -"chardet@npm:^0.7.0": - version: 0.7.0 - resolution: "chardet@npm:0.7.0" - checksum: 6fd5da1f5d18ff5712c1e0aed41da200d7c51c28f11b36ee3c7b483f3696dabc08927fc6b227735eb8f0e1215c9a8abd8154637f3eff8cada5959df7f58b024d - languageName: node - linkType: hard - -"chownr@npm:^2.0.0": - version: 2.0.0 - resolution: "chownr@npm:2.0.0" - checksum: c57cf9dd0791e2f18a5ee9c1a299ae6e801ff58fee96dc8bfd0dcb4738a6ce58dd252a3605b1c93c6418fe4f9d5093b28ffbf4d66648cb2a9c67eaef9679be2f - languageName: node - linkType: hard - -"chroma-js@npm:2.4.2": - version: 2.4.2 - resolution: "chroma-js@npm:2.4.2" - checksum: cf9884c02d406286e4370599bcd1afbf089384407df46b3a69edfedcba7bb99e8f959a5cfdbfec750b305c441c06ca40cd1f70ba3a6c2ce739ac09a92520ddae - languageName: node - linkType: hard - -"classnames@npm:2.3.2, classnames@npm:^2.2.6": - version: 2.3.2 - resolution: "classnames@npm:2.3.2" - checksum: 2c62199789618d95545c872787137262e741f9db13328e216b093eea91c85ef2bfb152c1f9e63027204e2559a006a92eb74147d46c800a9f96297ae1d9f96f4e - languageName: node - linkType: hard - -"clean-stack@npm:^2.0.0": - version: 2.2.0 - resolution: "clean-stack@npm:2.2.0" - checksum: 2ac8cd2b2f5ec986a3c743935ec85b07bc174d5421a5efc8017e1f146a1cf5f781ae962618f416352103b32c9cd7e203276e8c28241bbe946160cab16149fb68 - languageName: node - linkType: hard - -"cli-cursor@npm:^3.1.0": - version: 3.1.0 - resolution: "cli-cursor@npm:3.1.0" - dependencies: - restore-cursor: ^3.1.0 - checksum: 2692784c6cd2fd85cfdbd11f53aea73a463a6d64a77c3e098b2b4697a20443f430c220629e1ca3b195ea5ac4a97a74c2ee411f3807abf6df2b66211fec0c0a29 - languageName: node - linkType: hard - -"cli-spinners@npm:^2.5.0": - version: 2.7.0 - resolution: "cli-spinners@npm:2.7.0" - checksum: a9afaf73f58d1f951fb23742f503631b3cf513f43f4c7acb1b640100eb76bfa16efbcd1994d149ffc6603a6d75dd3d4a516a76f125f90dce437de9b16fd0ee6f - languageName: node - linkType: hard - -"cli-truncate@npm:^2.1.0": - version: 2.1.0 - resolution: "cli-truncate@npm:2.1.0" - dependencies: - slice-ansi: ^3.0.0 - string-width: ^4.2.0 - checksum: bf1e4e6195392dc718bf9cd71f317b6300dc4a9191d052f31046b8773230ece4fa09458813bf0e3455a5e68c0690d2ea2c197d14a8b85a7b5e01c97f4b5feb5d - languageName: node - linkType: hard - -"cli-width@npm:^3.0.0": - version: 3.0.0 - resolution: "cli-width@npm:3.0.0" - checksum: 4c94af3769367a70e11ed69aa6095f1c600c0ff510f3921ab4045af961820d57c0233acfa8b6396037391f31b4c397e1f614d234294f979ff61430a6c166c3f6 - languageName: node - linkType: hard - -"cliui@npm:^6.0.0": - version: 6.0.0 - resolution: "cliui@npm:6.0.0" - dependencies: - string-width: ^4.2.0 - strip-ansi: ^6.0.0 - wrap-ansi: ^6.2.0 - checksum: 4fcfd26d292c9f00238117f39fc797608292ae36bac2168cfee4c85923817d0607fe21b3329a8621e01aedf512c99b7eaa60e363a671ffd378df6649fb48ae42 - languageName: node - linkType: hard - -"cliui@npm:^8.0.1": - version: 8.0.1 - resolution: "cliui@npm:8.0.1" - dependencies: - string-width: ^4.2.0 - strip-ansi: ^6.0.1 - wrap-ansi: ^7.0.0 - checksum: 79648b3b0045f2e285b76fb2e24e207c6db44323581e421c3acbd0e86454cba1b37aea976ab50195a49e7384b871e6dfb2247ad7dec53c02454ac6497394cb56 - languageName: node - linkType: hard - -"clone@npm:^1.0.2": - version: 1.0.4 - resolution: "clone@npm:1.0.4" - checksum: d06418b7335897209e77bdd430d04f882189582e67bd1f75a04565f3f07f5b3f119a9d670c943b6697d0afb100f03b866b3b8a1f91d4d02d72c4ecf2bb64b5dd - languageName: node - linkType: hard - -"clsx@npm:^1.1.1": - version: 1.2.1 - resolution: "clsx@npm:1.2.1" - checksum: 30befca8019b2eb7dbad38cff6266cf543091dae2825c856a62a8ccf2c3ab9c2907c4d12b288b73101196767f66812365400a227581484a05f968b0307cfaf12 - languageName: node - linkType: hard - -"color-convert@npm:^1.9.0": - version: 1.9.3 - resolution: "color-convert@npm:1.9.3" - dependencies: - color-name: 1.1.3 - checksum: fd7a64a17cde98fb923b1dd05c5f2e6f7aefda1b60d67e8d449f9328b4e53b228a428fd38bfeaeb2db2ff6b6503a776a996150b80cdf224062af08a5c8a3a203 - languageName: node - linkType: hard - -"color-convert@npm:^2.0.1": - version: 2.0.1 - resolution: "color-convert@npm:2.0.1" - dependencies: - color-name: ~1.1.4 - checksum: 79e6bdb9fd479a205c71d89574fccfb22bd9053bd98c6c4d870d65c132e5e904e6034978e55b43d69fcaa7433af2016ee203ce76eeba9cfa554b373e7f7db336 - languageName: node - linkType: hard - -"color-name@npm:1.1.3": - version: 1.1.3 - resolution: "color-name@npm:1.1.3" - checksum: 09c5d3e33d2105850153b14466501f2bfb30324a2f76568a408763a3b7433b0e50e5b4ab1947868e65cb101bb7cb75029553f2c333b6d4b8138a73fcc133d69d - languageName: node - linkType: hard - -"color-name@npm:~1.1.4": - version: 1.1.4 - resolution: "color-name@npm:1.1.4" - checksum: b0445859521eb4021cd0fb0cc1a75cecf67fceecae89b63f62b201cca8d345baf8b952c966862a9d9a2632987d4f6581f0ec8d957dfacece86f0a7919316f610 - languageName: node - linkType: hard - -"color-support@npm:^1.1.3": - version: 1.1.3 - resolution: "color-support@npm:1.1.3" - bin: - color-support: bin.js - checksum: 9b7356817670b9a13a26ca5af1c21615463b500783b739b7634a0c2047c16cef4b2865d7576875c31c3cddf9dd621fa19285e628f20198b233a5cfdda6d0793b - languageName: node - linkType: hard - -"colorette@npm:^2.0.16": - version: 2.0.19 - resolution: "colorette@npm:2.0.19" - checksum: 888cf5493f781e5fcf54ce4d49e9d7d698f96ea2b2ef67906834bb319a392c667f9ec69f4a10e268d2946d13a9503d2d19b3abaaaf174e3451bfe91fb9d82427 - languageName: node - linkType: hard - -"combined-stream@npm:^1.0.8": - version: 1.0.8 - resolution: "combined-stream@npm:1.0.8" - dependencies: - delayed-stream: ~1.0.0 - checksum: 49fa4aeb4916567e33ea81d088f6584749fc90c7abec76fd516bf1c5aa5c79f3584b5ba3de6b86d26ddd64bae5329c4c7479343250cfe71c75bb366eae53bb7c - languageName: node - linkType: hard - -"comma-separated-tokens@npm:^2.0.0": - version: 2.0.3 - resolution: "comma-separated-tokens@npm:2.0.3" - checksum: e3bf9e0332a5c45f49b90e79bcdb4a7a85f28d6a6f0876a94f1bb9b2bfbdbbb9292aac50e1e742d8c0db1e62a0229a106f57917e2d067fca951d81737651700d - languageName: node - linkType: hard - -"common-tags@npm:1.8.2": - version: 1.8.2 - resolution: "common-tags@npm:1.8.2" - checksum: 767a6255a84bbc47df49a60ab583053bb29a7d9687066a18500a516188a062c4e4cd52de341f22de0b07062e699b1b8fe3cfa1cb55b241cb9301aeb4f45b4dff - languageName: node - linkType: hard - -"concat-map@npm:0.0.1": - version: 0.0.1 - resolution: "concat-map@npm:0.0.1" - checksum: 902a9f5d8967a3e2faf138d5cb784b9979bad2e6db5357c5b21c568df4ebe62bcb15108af1b2253744844eb964fc023fbd9afbbbb6ddd0bcc204c6fb5b7bf3af - languageName: node - linkType: hard - -"confusing-browser-globals@npm:^1.0.10": - version: 1.0.11 - resolution: "confusing-browser-globals@npm:1.0.11" - checksum: 3afc635abd37e566477f610e7978b15753f0e84025c25d49236f1f14d480117185516bdd40d2a2167e6bed8048641a9854964b9c067e3dcdfa6b5d0ad3c3a5ef - languageName: node - linkType: hard - -"console-control-strings@npm:^1.1.0": - version: 1.1.0 - resolution: "console-control-strings@npm:1.1.0" - checksum: 8755d76787f94e6cf79ce4666f0c5519906d7f5b02d4b884cf41e11dcd759ed69c57da0670afd9236d229a46e0f9cf519db0cd829c6dca820bb5a5c3def584ed - languageName: node - linkType: hard - -"constant-case@npm:^3.0.4": - version: 3.0.4 - resolution: "constant-case@npm:3.0.4" - dependencies: - no-case: ^3.0.4 - tslib: ^2.0.3 - upper-case: ^2.0.2 - checksum: 6c3346d51afc28d9fae922e966c68eb77a19d94858dba230dd92d7b918b37d36db50f0311e9ecf6847e43e934b1c01406a0936973376ab17ec2c471fbcfb2cf3 - languageName: node - linkType: hard - -"convert-source-map@npm:^1.5.0, convert-source-map@npm:^1.7.0": - version: 1.9.0 - resolution: "convert-source-map@npm:1.9.0" - checksum: dc55a1f28ddd0e9485ef13565f8f756b342f9a46c4ae18b843fe3c30c675d058d6a4823eff86d472f187b176f0adf51ea7b69ea38be34be4a63cbbf91b0593c8 - languageName: node - linkType: hard - -"core-js-compat@npm:^3.25.1": - version: 3.29.1 - resolution: "core-js-compat@npm:3.29.1" - dependencies: - browserslist: ^4.21.5 - checksum: 7260f6bbaa98836cda09a3b61aa721149d3ae95040302fb3b27eb153ae9bbddc8dee5249e72004cdc9552532029de4d50a5b2b066c37414421d2929d6091b18f - languageName: node - linkType: hard - -"core-js@npm:2.6.0": - version: 2.6.0 - resolution: "core-js@npm:2.6.0" - checksum: 8341d307b07ef31098c8bf4d9d0bec2e77373c42289b36748ae48425f2854db65feced74a81e2198e68041256f9a157e4b129f317967bdf38934f4307d9d415d - languageName: node - linkType: hard - -"core-js@npm:^2.4.0, core-js@npm:^2.5.0": - version: 2.6.12 - resolution: "core-js@npm:2.6.12" - checksum: 44fa9934a85f8c78d61e0c8b7b22436330471ffe59ec5076fe7f324d6e8cf7f824b14b1c81ca73608b13bdb0fef035bd820989bf059767ad6fa13123bb8bd016 - languageName: node - linkType: hard - -"cosmiconfig@npm:8.0.0": - version: 8.0.0 - resolution: "cosmiconfig@npm:8.0.0" - dependencies: - import-fresh: ^3.2.1 - js-yaml: ^4.1.0 - parse-json: ^5.0.0 - path-type: ^4.0.0 - checksum: ff4cdf89ac1ae52e7520816622c21a9e04380d04b82d653f5139ec581aa4f7f29e096d46770bc76c4a63c225367e88a1dfa233ea791669a35101f5f9b972c7d1 - languageName: node - linkType: hard - -"cosmiconfig@npm:^7.0.0": - version: 7.1.0 - resolution: "cosmiconfig@npm:7.1.0" - dependencies: - "@types/parse-json": ^4.0.0 - import-fresh: ^3.2.1 - parse-json: ^5.0.0 - path-type: ^4.0.0 - yaml: ^1.10.0 - checksum: c53bf7befc1591b2651a22414a5e786cd5f2eeaa87f3678a3d49d6069835a9d8d1aef223728e98aa8fec9a95bf831120d245096db12abe019fecb51f5696c96f - languageName: node - linkType: hard - -"cross-fetch@npm:^3.1.5": - version: 3.1.5 - resolution: "cross-fetch@npm:3.1.5" - dependencies: - node-fetch: 2.6.7 - checksum: f6b8c6ee3ef993ace6277fd789c71b6acf1b504fd5f5c7128df4ef2f125a429e29cd62dc8c127523f04a5f2fa4771ed80e3f3d9695617f441425045f505cf3bb - languageName: node - linkType: hard - -"cross-spawn@npm:^7.0.2": - version: 7.0.3 - resolution: "cross-spawn@npm:7.0.3" - dependencies: - path-key: ^3.1.0 - shebang-command: ^2.0.0 - which: ^2.0.1 - checksum: 671cc7c7288c3a8406f3c69a3ae2fc85555c04169e9d611def9a675635472614f1c0ed0ef80955d5b6d4e724f6ced67f0ad1bb006c2ea643488fcfef994d7f52 - languageName: node - linkType: hard - -"css-color-keywords@npm:^1.0.0": - version: 1.0.0 - resolution: "css-color-keywords@npm:1.0.0" - checksum: 8f125e3ad477bd03c77b533044bd9e8a6f7c0da52d49bbc0bbe38327b3829d6ba04d368ca49dd9ff3b667d2fc8f1698d891c198bbf8feade1a5501bf5a296408 - languageName: node - linkType: hard - -"css-to-react-native@npm:^3.0.0": - version: 3.2.0 - resolution: "css-to-react-native@npm:3.2.0" - dependencies: - camelize: ^1.0.0 - css-color-keywords: ^1.0.0 - postcss-value-parser: ^4.0.2 - checksum: 263be65e805aef02c3f20c064665c998a8c35293e1505dbe6e3054fb186b01a9897ac6cf121f9840e5a9dfe3fb3994f6fcd0af84a865f1df78ba5bf89e77adce - languageName: node - linkType: hard - -"csstype@npm:^3.0.2": - version: 3.1.1 - resolution: "csstype@npm:3.1.1" - checksum: 1f7b4f5fdd955b7444b18ebdddf3f5c699159f13e9cf8ac9027ae4a60ae226aef9bbb14a6e12ca7dba3358b007cee6354b116e720262867c398de6c955ea451d - languageName: node - linkType: hard - -"damerau-levenshtein@npm:^1.0.8": - version: 1.0.8 - resolution: "damerau-levenshtein@npm:1.0.8" - checksum: d240b7757544460ae0586a341a53110ab0a61126570ef2d8c731e3eab3f0cb6e488e2609e6a69b46727635de49be20b071688698744417ff1b6c1d7ccd03e0de - languageName: node - linkType: hard - -"dataloader@npm:2.2.2, dataloader@npm:^2.2.2": - version: 2.2.2 - resolution: "dataloader@npm:2.2.2" - checksum: 4dabd247089c29f194e94d5434d504f99156c5c214a03463c20f3f17f40398d7e179edee69a27c16e315519ac8739042a810090087ae26449a0e685156a02c65 - languageName: node - linkType: hard - -"debounce@npm:^1.2.0, debounce@npm:^1.2.1": - version: 1.2.1 - resolution: "debounce@npm:1.2.1" - checksum: 682a89506d9e54fb109526f4da255c5546102fbb8e3ae75eef3b04effaf5d4853756aee97475cd4650641869794e44f410eeb20ace2b18ea592287ab2038519e - languageName: node - linkType: hard - -"debug@npm:4, debug@npm:^4.0.0, debug@npm:^4.1.0, debug@npm:^4.1.1, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.3, debug@npm:^4.3.4": - version: 4.3.4 - resolution: "debug@npm:4.3.4" - dependencies: - ms: 2.1.2 - peerDependenciesMeta: - supports-color: - optional: true - checksum: 3dbad3f94ea64f34431a9cbf0bafb61853eda57bff2880036153438f50fb5a84f27683ba0d8e5426bf41a8c6ff03879488120cf5b3a761e77953169c0600a708 - languageName: node - linkType: hard - -"debug@npm:^3.2.7": - version: 3.2.7 - resolution: "debug@npm:3.2.7" - dependencies: - ms: ^2.1.1 - checksum: b3d8c5940799914d30314b7c3304a43305fd0715581a919dacb8b3176d024a782062368405b47491516d2091d6462d4d11f2f4974a405048094f8bfebfa3071c - languageName: node - linkType: hard - -"decamelize@npm:^1.2.0": - version: 1.2.0 - resolution: "decamelize@npm:1.2.0" - checksum: ad8c51a7e7e0720c70ec2eeb1163b66da03e7616d7b98c9ef43cce2416395e84c1e9548dd94f5f6ffecfee9f8b94251fc57121a8b021f2ff2469b2bae247b8aa - languageName: node - linkType: hard - -"decode-named-character-reference@npm:^1.0.0": - version: 1.0.2 - resolution: "decode-named-character-reference@npm:1.0.2" - dependencies: - character-entities: ^2.0.0 - checksum: f4c71d3b93105f20076052f9cb1523a22a9c796b8296cd35eef1ca54239c78d182c136a848b83ff8da2071e3ae2b1d300bf29d00650a6d6e675438cc31b11d78 - languageName: node - linkType: hard - -"deep-equal@npm:^2.0.5": - version: 2.2.0 - resolution: "deep-equal@npm:2.2.0" - dependencies: - call-bind: ^1.0.2 - es-get-iterator: ^1.1.2 - get-intrinsic: ^1.1.3 - is-arguments: ^1.1.1 - is-array-buffer: ^3.0.1 - is-date-object: ^1.0.5 - is-regex: ^1.1.4 - is-shared-array-buffer: ^1.0.2 - isarray: ^2.0.5 - object-is: ^1.1.5 - object-keys: ^1.1.1 - object.assign: ^4.1.4 - regexp.prototype.flags: ^1.4.3 - side-channel: ^1.0.4 - which-boxed-primitive: ^1.0.2 - which-collection: ^1.0.1 - which-typed-array: ^1.1.9 - checksum: 46a34509d2766d6c6dc5aec4756089cf0cc137e46787e91f08f1ee0bb570d874f19f0493146907df0cf18aed4a7b4b50f6f62c899240a76c323f057528b122e3 - languageName: node - linkType: hard - -"deep-is@npm:^0.1.3": - version: 0.1.4 - resolution: "deep-is@npm:0.1.4" - checksum: edb65dd0d7d1b9c40b2f50219aef30e116cedd6fc79290e740972c132c09106d2e80aa0bc8826673dd5a00222d4179c84b36a790eef63a4c4bca75a37ef90804 - languageName: node - linkType: hard - -"defaults@npm:^1.0.3": - version: 1.0.4 - resolution: "defaults@npm:1.0.4" - dependencies: - clone: ^1.0.2 - checksum: 3a88b7a587fc076b84e60affad8b85245c01f60f38fc1d259e7ac1d89eb9ce6abb19e27215de46b98568dd5bc48471730b327637e6f20b0f1bc85cf00440c80a - languageName: node - linkType: hard - -"define-properties@npm:^1.1.3, define-properties@npm:^1.1.4": - version: 1.2.0 - resolution: "define-properties@npm:1.2.0" - dependencies: - has-property-descriptors: ^1.0.0 - object-keys: ^1.1.1 - checksum: e60aee6a19b102df4e2b1f301816804e81ab48bb91f00d0d935f269bf4b3f79c88b39e4f89eaa132890d23267335fd1140dfcd8d5ccd61031a0a2c41a54e33a6 - languageName: node - linkType: hard - -"delayed-stream@npm:~1.0.0": - version: 1.0.0 - resolution: "delayed-stream@npm:1.0.0" - checksum: 46fe6e83e2cb1d85ba50bd52803c68be9bd953282fa7096f51fc29edd5d67ff84ff753c51966061e5ba7cb5e47ef6d36a91924eddb7f3f3483b1c560f77a0020 - languageName: node - linkType: hard - -"delegates@npm:^1.0.0": - version: 1.0.0 - resolution: "delegates@npm:1.0.0" - checksum: a51744d9b53c164ba9c0492471a1a2ffa0b6727451bdc89e31627fdf4adda9d51277cfcbfb20f0a6f08ccb3c436f341df3e92631a3440226d93a8971724771fd - languageName: node - linkType: hard - -"depd@npm:^2.0.0": - version: 2.0.0 - resolution: "depd@npm:2.0.0" - checksum: abbe19c768c97ee2eed6282d8ce3031126662252c58d711f646921c9623f9052e3e1906443066beec1095832f534e57c523b7333f8e7e0d93051ab6baef5ab3a - languageName: node - linkType: hard - -"dependency-graph@npm:^0.11.0": - version: 0.11.0 - resolution: "dependency-graph@npm:0.11.0" - checksum: 477204beaa9be69e642bc31ffe7a8c383d0cf48fa27acbc91c5df01431ab913e65c154213d2ef83d034c98d77280743ec85e5da018a97a18dd43d3c0b78b28cd - languageName: node - linkType: hard - -"dequal@npm:^2.0.0": - version: 2.0.3 - resolution: "dequal@npm:2.0.3" - checksum: 8679b850e1a3d0ebbc46ee780d5df7b478c23f335887464023a631d1b9af051ad4a6595a44220f9ff8ff95a8ddccf019b5ad778a976fd7bbf77383d36f412f90 - languageName: node - linkType: hard - -"detect-indent@npm:^6.0.0": - version: 6.1.0 - resolution: "detect-indent@npm:6.1.0" - checksum: ab953a73c72dbd4e8fc68e4ed4bfd92c97eb6c43734af3900add963fd3a9316f3bc0578b018b24198d4c31a358571eff5f0656e81a1f3b9ad5c547d58b2d093d - languageName: node - linkType: hard - -"diff@npm:^5.0.0": - version: 5.1.0 - resolution: "diff@npm:5.1.0" - checksum: c7bf0df7c9bfbe1cf8a678fd1b2137c4fb11be117a67bc18a0e03ae75105e8533dbfb1cda6b46beb3586ef5aed22143ef9d70713977d5fb1f9114e21455fba90 - languageName: node - linkType: hard - -"dir-glob@npm:^3.0.1": - version: 3.0.1 - resolution: "dir-glob@npm:3.0.1" - dependencies: - path-type: ^4.0.0 - checksum: fa05e18324510d7283f55862f3161c6759a3f2f8dbce491a2fc14c8324c498286c54282c1f0e933cb930da8419b30679389499b919122952a4f8592362ef4615 - languageName: node - linkType: hard - -"doctrine@npm:^2.1.0": - version: 2.1.0 - resolution: "doctrine@npm:2.1.0" - dependencies: - esutils: ^2.0.2 - checksum: a45e277f7feaed309fe658ace1ff286c6e2002ac515af0aaf37145b8baa96e49899638c7cd47dccf84c3d32abfc113246625b3ac8f552d1046072adee13b0dc8 - languageName: node - linkType: hard - -"doctrine@npm:^3.0.0": - version: 3.0.0 - resolution: "doctrine@npm:3.0.0" - dependencies: - esutils: ^2.0.2 - checksum: fd7673ca77fe26cd5cba38d816bc72d641f500f1f9b25b83e8ce28827fe2da7ad583a8da26ab6af85f834138cf8dae9f69b0cd6ab925f52ddab1754db44d99ce - languageName: node - linkType: hard - -"dom-helpers@npm:^5.0.1": - version: 5.2.1 - resolution: "dom-helpers@npm:5.2.1" - dependencies: - "@babel/runtime": ^7.8.7 - csstype: ^3.0.2 - checksum: 863ba9e086f7093df3376b43e74ce4422571d404fc9828bf2c56140963d5edf0e56160f9b2f3bb61b282c07f8fc8134f023c98fd684bddcb12daf7b0f14d951c - languageName: node - linkType: hard - -"dot-case@npm:^3.0.4": - version: 3.0.4 - resolution: "dot-case@npm:3.0.4" - dependencies: - no-case: ^3.0.4 - tslib: ^2.0.3 - checksum: a65e3519414856df0228b9f645332f974f2bf5433370f544a681122eab59e66038fc3349b4be1cdc47152779dac71a5864f1ccda2f745e767c46e9c6543b1169 - languageName: node - linkType: hard - -"dotenv@npm:^16.0.0": - version: 16.0.3 - resolution: "dotenv@npm:16.0.3" - checksum: afcf03f373d7a6d62c7e9afea6328e62851d627a4e73f2e12d0a8deae1cd375892004f3021883f8aec85932cd2834b091f568ced92b4774625b321db83b827f8 - languageName: node - linkType: hard - -"dset@npm:^3.1.2": - version: 3.1.2 - resolution: "dset@npm:3.1.2" - checksum: 4f8066f517aa0a70af688c66e9a0a5590f0aada76f6edc7ba9ddb309e27d3a6d65c0a2e31ab2a84005d4c791e5327773cdde59b8ab169050330a0dc283663e87 - languageName: node - linkType: hard - -"electron-to-chromium@npm:^1.4.284": - version: 1.4.328 - resolution: "electron-to-chromium@npm:1.4.328" - checksum: 82c1617a77e40ac4ca5011749318a2fee8f8c75f8b517fcff7602219c85fd97a9fab2d5a1353ea10fb7f9c7d18acb90c9ed58c2292256f81e2ffa42ee66c4b0b - languageName: node - linkType: hard - -"emoji-regex@npm:^8.0.0": - version: 8.0.0 - resolution: "emoji-regex@npm:8.0.0" - checksum: d4c5c39d5a9868b5fa152f00cada8a936868fd3367f33f71be515ecee4c803132d11b31a6222b2571b1e5f7e13890156a94880345594d0ce7e3c9895f560f192 - languageName: node - linkType: hard - -"emoji-regex@npm:^9.2.2": - version: 9.2.2 - resolution: "emoji-regex@npm:9.2.2" - checksum: 8487182da74aabd810ac6d6f1994111dfc0e331b01271ae01ec1eb0ad7b5ecc2bbbbd2f053c05cb55a1ac30449527d819bbfbf0e3de1023db308cbcb47f86601 - languageName: node - linkType: hard - -"encoding@npm:^0.1.13": - version: 0.1.13 - resolution: "encoding@npm:0.1.13" - dependencies: - iconv-lite: ^0.6.2 - checksum: bb98632f8ffa823996e508ce6a58ffcf5856330fde839ae42c9e1f436cc3b5cc651d4aeae72222916545428e54fd0f6aa8862fd8d25bdbcc4589f1e3f3715e7f - languageName: node - linkType: hard - -"env-paths@npm:^2.2.0": - version: 2.2.1 - resolution: "env-paths@npm:2.2.1" - checksum: 65b5df55a8bab92229ab2b40dad3b387fad24613263d103a97f91c9fe43ceb21965cd3392b1ccb5d77088021e525c4e0481adb309625d0cb94ade1d1fb8dc17e - languageName: node - linkType: hard - -"err-code@npm:^2.0.2": - version: 2.0.3 - resolution: "err-code@npm:2.0.3" - checksum: 8b7b1be20d2de12d2255c0bc2ca638b7af5171142693299416e6a9339bd7d88fc8d7707d913d78e0993176005405a236b066b45666b27b797252c771156ace54 - languageName: node - linkType: hard - -"error-ex@npm:^1.3.1": - version: 1.3.2 - resolution: "error-ex@npm:1.3.2" - dependencies: - is-arrayish: ^0.2.1 - checksum: c1c2b8b65f9c91b0f9d75f0debaa7ec5b35c266c2cac5de412c1a6de86d4cbae04ae44e510378cb14d032d0645a36925d0186f8bb7367bcc629db256b743a001 - languageName: node - linkType: hard - -"es-abstract@npm:^1.19.0, es-abstract@npm:^1.20.4": - version: 1.21.2 - resolution: "es-abstract@npm:1.21.2" - dependencies: - array-buffer-byte-length: ^1.0.0 - available-typed-arrays: ^1.0.5 - call-bind: ^1.0.2 - es-set-tostringtag: ^2.0.1 - es-to-primitive: ^1.2.1 - function.prototype.name: ^1.1.5 - get-intrinsic: ^1.2.0 - get-symbol-description: ^1.0.0 - globalthis: ^1.0.3 - gopd: ^1.0.1 - has: ^1.0.3 - has-property-descriptors: ^1.0.0 - has-proto: ^1.0.1 - has-symbols: ^1.0.3 - internal-slot: ^1.0.5 - is-array-buffer: ^3.0.2 - is-callable: ^1.2.7 - is-negative-zero: ^2.0.2 - is-regex: ^1.1.4 - is-shared-array-buffer: ^1.0.2 - is-string: ^1.0.7 - is-typed-array: ^1.1.10 - is-weakref: ^1.0.2 - object-inspect: ^1.12.3 - object-keys: ^1.1.1 - object.assign: ^4.1.4 - regexp.prototype.flags: ^1.4.3 - safe-regex-test: ^1.0.0 - string.prototype.trim: ^1.2.7 - string.prototype.trimend: ^1.0.6 - string.prototype.trimstart: ^1.0.6 - typed-array-length: ^1.0.4 - unbox-primitive: ^1.0.2 - which-typed-array: ^1.1.9 - checksum: 037f55ee5e1cdf2e5edbab5524095a4f97144d95b94ea29e3611b77d852fd8c8a40e7ae7101fa6a759a9b9b1405f188c3c70928f2d3cd88d543a07fc0d5ad41a - languageName: node - linkType: hard - -"es-get-iterator@npm:^1.1.2": - version: 1.1.3 - resolution: "es-get-iterator@npm:1.1.3" - dependencies: - call-bind: ^1.0.2 - get-intrinsic: ^1.1.3 - has-symbols: ^1.0.3 - is-arguments: ^1.1.1 - is-map: ^2.0.2 - is-set: ^2.0.2 - is-string: ^1.0.7 - isarray: ^2.0.5 - stop-iteration-iterator: ^1.0.0 - checksum: 8fa118da42667a01a7c7529f8a8cca514feeff243feec1ce0bb73baaa3514560bd09d2b3438873cf8a5aaec5d52da248131de153b28e2638a061b6e4df13267d - languageName: node - linkType: hard - -"es-set-tostringtag@npm:^2.0.1": - version: 2.0.1 - resolution: "es-set-tostringtag@npm:2.0.1" - dependencies: - get-intrinsic: ^1.1.3 - has: ^1.0.3 - has-tostringtag: ^1.0.0 - checksum: ec416a12948cefb4b2a5932e62093a7cf36ddc3efd58d6c58ca7ae7064475ace556434b869b0bbeb0c365f1032a8ccd577211101234b69837ad83ad204fff884 - languageName: node - linkType: hard - -"es-shim-unscopables@npm:^1.0.0": - version: 1.0.0 - resolution: "es-shim-unscopables@npm:1.0.0" - dependencies: - has: ^1.0.3 - checksum: 83e95cadbb6ee44d3644dfad60dcad7929edbc42c85e66c3e99aefd68a3a5c5665f2686885cddb47dfeabfd77bd5ea5a7060f2092a955a729bbd8834f0d86fa1 - languageName: node - linkType: hard - -"es-to-primitive@npm:^1.2.1": - version: 1.2.1 - resolution: "es-to-primitive@npm:1.2.1" - dependencies: - is-callable: ^1.1.4 - is-date-object: ^1.0.1 - is-symbol: ^1.0.2 - checksum: 4ead6671a2c1402619bdd77f3503991232ca15e17e46222b0a41a5d81aebc8740a77822f5b3c965008e631153e9ef0580540007744521e72de8e33599fca2eed - languageName: node - linkType: hard - -"esbuild@npm:^0.17.5": - version: 0.17.12 - resolution: "esbuild@npm:0.17.12" - dependencies: - "@esbuild/android-arm": 0.17.12 - "@esbuild/android-arm64": 0.17.12 - "@esbuild/android-x64": 0.17.12 - "@esbuild/darwin-arm64": 0.17.12 - "@esbuild/darwin-x64": 0.17.12 - "@esbuild/freebsd-arm64": 0.17.12 - "@esbuild/freebsd-x64": 0.17.12 - "@esbuild/linux-arm": 0.17.12 - "@esbuild/linux-arm64": 0.17.12 - "@esbuild/linux-ia32": 0.17.12 - "@esbuild/linux-loong64": 0.17.12 - "@esbuild/linux-mips64el": 0.17.12 - "@esbuild/linux-ppc64": 0.17.12 - "@esbuild/linux-riscv64": 0.17.12 - "@esbuild/linux-s390x": 0.17.12 - "@esbuild/linux-x64": 0.17.12 - "@esbuild/netbsd-x64": 0.17.12 - "@esbuild/openbsd-x64": 0.17.12 - "@esbuild/sunos-x64": 0.17.12 - "@esbuild/win32-arm64": 0.17.12 - "@esbuild/win32-ia32": 0.17.12 - "@esbuild/win32-x64": 0.17.12 - dependenciesMeta: - "@esbuild/android-arm": - optional: true - "@esbuild/android-arm64": - optional: true - "@esbuild/android-x64": - optional: true - "@esbuild/darwin-arm64": - optional: true - "@esbuild/darwin-x64": - optional: true - "@esbuild/freebsd-arm64": - optional: true - "@esbuild/freebsd-x64": - optional: true - "@esbuild/linux-arm": - optional: true - "@esbuild/linux-arm64": - optional: true - "@esbuild/linux-ia32": - optional: true - "@esbuild/linux-loong64": - optional: true - "@esbuild/linux-mips64el": - optional: true - "@esbuild/linux-ppc64": - optional: true - "@esbuild/linux-riscv64": - optional: true - "@esbuild/linux-s390x": - optional: true - "@esbuild/linux-x64": - optional: true - "@esbuild/netbsd-x64": - optional: true - "@esbuild/openbsd-x64": - optional: true - "@esbuild/sunos-x64": - optional: true - "@esbuild/win32-arm64": - optional: true - "@esbuild/win32-ia32": - optional: true - "@esbuild/win32-x64": - optional: true - bin: - esbuild: bin/esbuild - checksum: ea6d33eb1bc6c9e00dcee5e253c7e935251b4801d376661fd9f19a9dcffc27f970078a6f7116d6c78ee825ceff9b974594b0b616bd560ce4d875a951aa92977b - languageName: node - linkType: hard - -"escalade@npm:^3.1.1": - version: 3.1.1 - resolution: "escalade@npm:3.1.1" - checksum: a3e2a99f07acb74b3ad4989c48ca0c3140f69f923e56d0cba0526240ee470b91010f9d39001f2a4a313841d237ede70a729e92125191ba5d21e74b106800b133 - languageName: node - linkType: hard - -"escape-string-regexp@npm:^1.0.5": - version: 1.0.5 - resolution: "escape-string-regexp@npm:1.0.5" - checksum: 6092fda75c63b110c706b6a9bfde8a612ad595b628f0bd2147eea1d3406723020810e591effc7db1da91d80a71a737a313567c5abb3813e8d9c71f4aa595b410 - languageName: node - linkType: hard - -"escape-string-regexp@npm:^4.0.0": - version: 4.0.0 - resolution: "escape-string-regexp@npm:4.0.0" - checksum: 98b48897d93060f2322108bf29db0feba7dd774be96cd069458d1453347b25ce8682ecc39859d4bca2203cc0ab19c237bcc71755eff49a0f8d90beadeeba5cc5 - languageName: node - linkType: hard - -"eslint-config-airbnb-base@npm:^15.0.0": - version: 15.0.0 - resolution: "eslint-config-airbnb-base@npm:15.0.0" - dependencies: - confusing-browser-globals: ^1.0.10 - object.assign: ^4.1.2 - object.entries: ^1.1.5 - semver: ^6.3.0 - peerDependencies: - eslint: ^7.32.0 || ^8.2.0 - eslint-plugin-import: ^2.25.2 - checksum: 38626bad2ce2859fccac86b30cd2b86c9b7d8d71d458331860861dc05290a5b198bded2f4fb89efcb9046ec48f8ab4c4fb00365ba8916f27b172671da28b93ea - languageName: node - linkType: hard - -"eslint-config-airbnb@npm:19.0.4": - version: 19.0.4 - resolution: "eslint-config-airbnb@npm:19.0.4" - dependencies: - eslint-config-airbnb-base: ^15.0.0 - object.assign: ^4.1.2 - object.entries: ^1.1.5 - peerDependencies: - eslint: ^7.32.0 || ^8.2.0 - eslint-plugin-import: ^2.25.3 - eslint-plugin-jsx-a11y: ^6.5.1 - eslint-plugin-react: ^7.28.0 - eslint-plugin-react-hooks: ^4.3.0 - checksum: 253178689c3c80eef2567e3aaf0612e18973bc9cf51d9be36074b5dd58210e8b6942200a424bcccbb81ac884e41303479ab09f251a2a97addc2de61efdc9576c - languageName: node - linkType: hard - -"eslint-import-resolver-node@npm:^0.3.7": - version: 0.3.7 - resolution: "eslint-import-resolver-node@npm:0.3.7" - dependencies: - debug: ^3.2.7 - is-core-module: ^2.11.0 - resolve: ^1.22.1 - checksum: 3379aacf1d2c6952c1b9666c6fa5982c3023df695430b0d391c0029f6403a7775414873d90f397e98ba6245372b6c8960e16e74d9e4a3b0c0a4582f3bdbe3d6e - languageName: node - linkType: hard - -"eslint-module-utils@npm:^2.7.4": - version: 2.7.4 - resolution: "eslint-module-utils@npm:2.7.4" - dependencies: - debug: ^3.2.7 - peerDependenciesMeta: - eslint: - optional: true - checksum: 5da13645daff145a5c922896b258f8bba560722c3767254e458d894ff5fbb505d6dfd945bffa932a5b0ae06714da2379bd41011c4c20d2d59cc83e23895360f7 - languageName: node - linkType: hard - -"eslint-plugin-import-newlines@npm:1.3.1, eslint-plugin-import-newlines@npm:^1.2.3": - version: 1.3.1 - resolution: "eslint-plugin-import-newlines@npm:1.3.1" - peerDependencies: - eslint: ">=6.0.0" - bin: - import-linter: lib/index.js - checksum: f1ee861d8d955393f68d489bc8e7755f708d4945ef8097b28dca3c801f28f8092c9621816de45b38f3d999295b4e360acf4134f495bc51966e18ca906757d1b7 - languageName: node - linkType: hard - -"eslint-plugin-import@npm:2.27.5": - version: 2.27.5 - resolution: "eslint-plugin-import@npm:2.27.5" - dependencies: - array-includes: ^3.1.6 - array.prototype.flat: ^1.3.1 - array.prototype.flatmap: ^1.3.1 - debug: ^3.2.7 - doctrine: ^2.1.0 - eslint-import-resolver-node: ^0.3.7 - eslint-module-utils: ^2.7.4 - has: ^1.0.3 - is-core-module: ^2.11.0 - is-glob: ^4.0.3 - minimatch: ^3.1.2 - object.values: ^1.1.6 - resolve: ^1.22.1 - semver: ^6.3.0 - tsconfig-paths: ^3.14.1 - peerDependencies: - eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 - checksum: f500571a380167e25d72a4d925ef9a7aae8899eada57653e5f3051ec3d3c16d08271fcefe41a30a9a2f4fefc232f066253673ee4ea77b30dba65ae173dade85d - languageName: node - linkType: hard - -"eslint-plugin-jsx-a11y@npm:6.7.1": - version: 6.7.1 - resolution: "eslint-plugin-jsx-a11y@npm:6.7.1" - dependencies: - "@babel/runtime": ^7.20.7 - aria-query: ^5.1.3 - array-includes: ^3.1.6 - array.prototype.flatmap: ^1.3.1 - ast-types-flow: ^0.0.7 - axe-core: ^4.6.2 - axobject-query: ^3.1.1 - damerau-levenshtein: ^1.0.8 - emoji-regex: ^9.2.2 - has: ^1.0.3 - jsx-ast-utils: ^3.3.3 - language-tags: =1.0.5 - minimatch: ^3.1.2 - object.entries: ^1.1.6 - object.fromentries: ^2.0.6 - semver: ^6.3.0 - peerDependencies: - eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 - checksum: f166dd5fe7257c7b891c6692e6a3ede6f237a14043ae3d97581daf318fc5833ddc6b4871aa34ab7656187430170500f6d806895747ea17ecdf8231a666c3c2fd - languageName: node - linkType: hard - -"eslint-plugin-react-hooks@npm:4.6.0": - version: 4.6.0 - resolution: "eslint-plugin-react-hooks@npm:4.6.0" - peerDependencies: - eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 - checksum: 23001801f14c1d16bf0a837ca7970d9dd94e7b560384b41db378b49b6e32dc43d6e2790de1bd737a652a86f81a08d6a91f402525061b47719328f586a57e86c3 - languageName: node - linkType: hard - -"eslint-plugin-react@npm:7.32.1": - version: 7.32.1 - resolution: "eslint-plugin-react@npm:7.32.1" - dependencies: - array-includes: ^3.1.6 - array.prototype.flatmap: ^1.3.1 - array.prototype.tosorted: ^1.1.1 - doctrine: ^2.1.0 - estraverse: ^5.3.0 - jsx-ast-utils: ^2.4.1 || ^3.0.0 - minimatch: ^3.1.2 - object.entries: ^1.1.6 - object.fromentries: ^2.0.6 - object.hasown: ^1.1.2 - object.values: ^1.1.6 - prop-types: ^15.8.1 - resolve: ^2.0.0-next.4 - semver: ^6.3.0 - string.prototype.matchall: ^4.0.8 - peerDependencies: - eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 - checksum: e20eab61161a3db6211c2bd1eb9be3e407fd14e72c06c5f39a078b6ac37427b2af6056ee70e3954249bca0a04088ae797a0c8ba909fb8802e29712de2a41262d - languageName: node - linkType: hard - -"eslint-plugin-react@npm:7.32.2": - version: 7.32.2 - resolution: "eslint-plugin-react@npm:7.32.2" - dependencies: - array-includes: ^3.1.6 - array.prototype.flatmap: ^1.3.1 - array.prototype.tosorted: ^1.1.1 - doctrine: ^2.1.0 - estraverse: ^5.3.0 - jsx-ast-utils: ^2.4.1 || ^3.0.0 - minimatch: ^3.1.2 - object.entries: ^1.1.6 - object.fromentries: ^2.0.6 - object.hasown: ^1.1.2 - object.values: ^1.1.6 - prop-types: ^15.8.1 - resolve: ^2.0.0-next.4 - semver: ^6.3.0 - string.prototype.matchall: ^4.0.8 - peerDependencies: - eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 - checksum: 2232b3b8945aa50b7773919c15cd96892acf35d2f82503667a79e2f55def90f728ed4f0e496f0f157acbe1bd4397c5615b676ae7428fe84488a544ca53feb944 - languageName: node - linkType: hard - -"eslint-scope@npm:5.1.1, eslint-scope@npm:^5.1.1": - version: 5.1.1 - resolution: "eslint-scope@npm:5.1.1" - dependencies: - esrecurse: ^4.3.0 - estraverse: ^4.1.1 - checksum: 47e4b6a3f0cc29c7feedee6c67b225a2da7e155802c6ea13bbef4ac6b9e10c66cd2dcb987867ef176292bf4e64eccc680a49e35e9e9c669f4a02bac17e86abdb - languageName: node - linkType: hard - -"eslint-scope@npm:^7.1.1": - version: 7.1.1 - resolution: "eslint-scope@npm:7.1.1" - dependencies: - esrecurse: ^4.3.0 - estraverse: ^5.2.0 - checksum: 9f6e974ab2db641ca8ab13508c405b7b859e72afe9f254e8131ff154d2f40c99ad4545ce326fd9fde3212ff29707102562a4834f1c48617b35d98c71a97fbf3e - languageName: node - linkType: hard - -"eslint-utils@npm:^3.0.0": - version: 3.0.0 - resolution: "eslint-utils@npm:3.0.0" - dependencies: - eslint-visitor-keys: ^2.0.0 - peerDependencies: - eslint: ">=5" - checksum: 0668fe02f5adab2e5a367eee5089f4c39033af20499df88fe4e6aba2015c20720404d8c3d6349b6f716b08fdf91b9da4e5d5481f265049278099c4c836ccb619 - languageName: node - linkType: hard - -"eslint-visitor-keys@npm:^2.0.0, eslint-visitor-keys@npm:^2.1.0": - version: 2.1.0 - resolution: "eslint-visitor-keys@npm:2.1.0" - checksum: e3081d7dd2611a35f0388bbdc2f5da60b3a3c5b8b6e928daffff7391146b434d691577aa95064c8b7faad0b8a680266bcda0a42439c18c717b80e6718d7e267d - languageName: node - linkType: hard - -"eslint-visitor-keys@npm:^3.3.0": - version: 3.3.0 - resolution: "eslint-visitor-keys@npm:3.3.0" - checksum: d59e68a7c5a6d0146526b0eec16ce87fbf97fe46b8281e0d41384224375c4e52f5ffb9e16d48f4ea50785cde93f766b0c898e31ab89978d88b0e1720fbfb7808 - languageName: node - linkType: hard - -"eslint@npm:8.32.0": - version: 8.32.0 - resolution: "eslint@npm:8.32.0" - dependencies: - "@eslint/eslintrc": ^1.4.1 - "@humanwhocodes/config-array": ^0.11.8 - "@humanwhocodes/module-importer": ^1.0.1 - "@nodelib/fs.walk": ^1.2.8 - ajv: ^6.10.0 - chalk: ^4.0.0 - cross-spawn: ^7.0.2 - debug: ^4.3.2 - doctrine: ^3.0.0 - escape-string-regexp: ^4.0.0 - eslint-scope: ^7.1.1 - eslint-utils: ^3.0.0 - eslint-visitor-keys: ^3.3.0 - espree: ^9.4.0 - esquery: ^1.4.0 - esutils: ^2.0.2 - fast-deep-equal: ^3.1.3 - file-entry-cache: ^6.0.1 - find-up: ^5.0.0 - glob-parent: ^6.0.2 - globals: ^13.19.0 - grapheme-splitter: ^1.0.4 - ignore: ^5.2.0 - import-fresh: ^3.0.0 - imurmurhash: ^0.1.4 - is-glob: ^4.0.0 - is-path-inside: ^3.0.3 - js-sdsl: ^4.1.4 - js-yaml: ^4.1.0 - json-stable-stringify-without-jsonify: ^1.0.1 - levn: ^0.4.1 - lodash.merge: ^4.6.2 - minimatch: ^3.1.2 - natural-compare: ^1.4.0 - optionator: ^0.9.1 - regexpp: ^3.2.0 - strip-ansi: ^6.0.1 - strip-json-comments: ^3.1.0 - text-table: ^0.2.0 - bin: - eslint: bin/eslint.js - checksum: 23c8fb3c57291eecd9c1448faf603226a8f885022a2cd96e303459bf72e39b7f54987c6fb948f0f9eecaf7085600e6eb0663482a35ea83da12e9f9141a22b91e - languageName: node - linkType: hard - -"eslint@npm:8.33.0": - version: 8.33.0 - resolution: "eslint@npm:8.33.0" - dependencies: - "@eslint/eslintrc": ^1.4.1 - "@humanwhocodes/config-array": ^0.11.8 - "@humanwhocodes/module-importer": ^1.0.1 - "@nodelib/fs.walk": ^1.2.8 - ajv: ^6.10.0 - chalk: ^4.0.0 - cross-spawn: ^7.0.2 - debug: ^4.3.2 - doctrine: ^3.0.0 - escape-string-regexp: ^4.0.0 - eslint-scope: ^7.1.1 - eslint-utils: ^3.0.0 - eslint-visitor-keys: ^3.3.0 - espree: ^9.4.0 - esquery: ^1.4.0 - esutils: ^2.0.2 - fast-deep-equal: ^3.1.3 - file-entry-cache: ^6.0.1 - find-up: ^5.0.0 - glob-parent: ^6.0.2 - globals: ^13.19.0 - grapheme-splitter: ^1.0.4 - ignore: ^5.2.0 - import-fresh: ^3.0.0 - imurmurhash: ^0.1.4 - is-glob: ^4.0.0 - is-path-inside: ^3.0.3 - js-sdsl: ^4.1.4 - js-yaml: ^4.1.0 - json-stable-stringify-without-jsonify: ^1.0.1 - levn: ^0.4.1 - lodash.merge: ^4.6.2 - minimatch: ^3.1.2 - natural-compare: ^1.4.0 - optionator: ^0.9.1 - regexpp: ^3.2.0 - strip-ansi: ^6.0.1 - strip-json-comments: ^3.1.0 - text-table: ^0.2.0 - bin: - eslint: bin/eslint.js - checksum: 727e63ab8b7acf281442323c5971f6afdd5b656fbcebc4476cf54e35af51b2f180617433fc5e1952f0449ca3f43a905527f9407ea4b8a7ea7562fc9c3f278d4c - languageName: node - linkType: hard - -"eslint@npm:8.36.0": - version: 8.36.0 - resolution: "eslint@npm:8.36.0" - dependencies: - "@eslint-community/eslint-utils": ^4.2.0 - "@eslint-community/regexpp": ^4.4.0 - "@eslint/eslintrc": ^2.0.1 - "@eslint/js": 8.36.0 - "@humanwhocodes/config-array": ^0.11.8 - "@humanwhocodes/module-importer": ^1.0.1 - "@nodelib/fs.walk": ^1.2.8 - ajv: ^6.10.0 - chalk: ^4.0.0 - cross-spawn: ^7.0.2 - debug: ^4.3.2 - doctrine: ^3.0.0 - escape-string-regexp: ^4.0.0 - eslint-scope: ^7.1.1 - eslint-visitor-keys: ^3.3.0 - espree: ^9.5.0 - esquery: ^1.4.2 - esutils: ^2.0.2 - fast-deep-equal: ^3.1.3 - file-entry-cache: ^6.0.1 - find-up: ^5.0.0 - glob-parent: ^6.0.2 - globals: ^13.19.0 - grapheme-splitter: ^1.0.4 - ignore: ^5.2.0 - import-fresh: ^3.0.0 - imurmurhash: ^0.1.4 - is-glob: ^4.0.0 - is-path-inside: ^3.0.3 - js-sdsl: ^4.1.4 - js-yaml: ^4.1.0 - json-stable-stringify-without-jsonify: ^1.0.1 - levn: ^0.4.1 - lodash.merge: ^4.6.2 - minimatch: ^3.1.2 - natural-compare: ^1.4.0 - optionator: ^0.9.1 - strip-ansi: ^6.0.1 - strip-json-comments: ^3.1.0 - text-table: ^0.2.0 - bin: - eslint: bin/eslint.js - checksum: e9a961fc3b3de5cff5a1cb2c92eeffaa7e155a715489e30b3e1e76f186bd1255e0481e09564f2094733c0b1dbd3453499fb72ae7c043c83156e11e6d965b2304 - languageName: node - linkType: hard - -"espree@npm:^9.4.0, espree@npm:^9.5.0": - version: 9.5.0 - resolution: "espree@npm:9.5.0" - dependencies: - acorn: ^8.8.0 - acorn-jsx: ^5.3.2 - eslint-visitor-keys: ^3.3.0 - checksum: a7f110aefb6407e0d3237aa635ab3cea87106ae63748dd23c67031afccc640d04c4209fca2daf16e2233c82efb505faead0fb84097478fd9cc6e8f8dd80bf99d - languageName: node - linkType: hard - -"esquery@npm:^1.4.0, esquery@npm:^1.4.2": - version: 1.5.0 - resolution: "esquery@npm:1.5.0" - dependencies: - estraverse: ^5.1.0 - checksum: aefb0d2596c230118656cd4ec7532d447333a410a48834d80ea648b1e7b5c9bc9ed8b5e33a89cb04e487b60d622f44cf5713bf4abed7c97343edefdc84a35900 - languageName: node - linkType: hard - -"esrecurse@npm:^4.3.0": - version: 4.3.0 - resolution: "esrecurse@npm:4.3.0" - dependencies: - estraverse: ^5.2.0 - checksum: ebc17b1a33c51cef46fdc28b958994b1dc43cd2e86237515cbc3b4e5d2be6a811b2315d0a1a4d9d340b6d2308b15322f5c8291059521cc5f4802f65e7ec32837 - languageName: node - linkType: hard - -"estraverse@npm:^4.1.1": - version: 4.3.0 - resolution: "estraverse@npm:4.3.0" - checksum: a6299491f9940bb246124a8d44b7b7a413a8336f5436f9837aaa9330209bd9ee8af7e91a654a3545aee9c54b3308e78ee360cef1d777d37cfef77d2fa33b5827 - languageName: node - linkType: hard - -"estraverse@npm:^5.1.0, estraverse@npm:^5.2.0, estraverse@npm:^5.3.0": - version: 5.3.0 - resolution: "estraverse@npm:5.3.0" - checksum: 072780882dc8416ad144f8fe199628d2b3e7bbc9989d9ed43795d2c90309a2047e6bc5979d7e2322a341163d22cfad9e21f4110597fe487519697389497e4e2b - languageName: node - linkType: hard - -"esutils@npm:^2.0.2": - version: 2.0.3 - resolution: "esutils@npm:2.0.3" - checksum: 22b5b08f74737379a840b8ed2036a5fb35826c709ab000683b092d9054e5c2a82c27818f12604bfc2a9a76b90b6834ef081edbc1c7ae30d1627012e067c6ec87 - languageName: node - linkType: hard - -"extend@npm:^3.0.0": - version: 3.0.2 - resolution: "extend@npm:3.0.2" - checksum: a50a8309ca65ea5d426382ff09f33586527882cf532931cb08ca786ea3146c0553310bda688710ff61d7668eba9f96b923fe1420cdf56a2c3eaf30fcab87b515 - languageName: node - linkType: hard - -"external-editor@npm:^3.0.3": - version: 3.1.0 - resolution: "external-editor@npm:3.1.0" - dependencies: - chardet: ^0.7.0 - iconv-lite: ^0.4.24 - tmp: ^0.0.33 - checksum: 1c2a616a73f1b3435ce04030261bed0e22d4737e14b090bb48e58865da92529c9f2b05b893de650738d55e692d071819b45e1669259b2b354bc3154d27a698c7 - languageName: node - linkType: hard - -"extract-files@npm:^11.0.0": - version: 11.0.0 - resolution: "extract-files@npm:11.0.0" - checksum: 39ebd92772e9a1e30d1e3112fb7db85d353c8243640635668b615ac1d605ceb79fbb13d17829dd308993ef37bb189ad99817f79ab164ae95c9bb3df9f440bd16 - languageName: node - linkType: hard - -"extract-files@npm:^9.0.0": - version: 9.0.0 - resolution: "extract-files@npm:9.0.0" - checksum: c31781d090f8d8f62cc541f1023b39ea863f24bd6fb3d4011922d71cbded70cef8191f2b70b43ec6cb5c5907cdad1dc5e9f29f78228936c10adc239091d8ab64 - languageName: node - linkType: hard - -"fast-decode-uri-component@npm:^1.0.1": - version: 1.0.1 - resolution: "fast-decode-uri-component@npm:1.0.1" - checksum: 427a48fe0907e76f0e9a2c228e253b4d8a8ab21d130ee9e4bb8339c5ba4086235cf9576831f7b20955a752eae4b525a177ff9d5825dd8d416e7726939194fbee - languageName: node - linkType: hard - -"fast-deep-equal@npm:1.0.0": - version: 1.0.0 - resolution: "fast-deep-equal@npm:1.0.0" - checksum: 9af727dacb3defa3ee2792b5c154ce3dacf20dc850dceea1eb231096fcff4cf91013d13f30d87b4c19c4ff7c6911c978334333d794b82e296a38a507a8503e59 - languageName: node - linkType: hard - -"fast-deep-equal@npm:^3.1.1, fast-deep-equal@npm:^3.1.3": - version: 3.1.3 - resolution: "fast-deep-equal@npm:3.1.3" - checksum: e21a9d8d84f53493b6aa15efc9cfd53dd5b714a1f23f67fb5dc8f574af80df889b3bce25dc081887c6d25457cce704e636395333abad896ccdec03abaf1f3f9d - languageName: node - linkType: hard - -"fast-glob@npm:^3.2.9": - version: 3.2.12 - resolution: "fast-glob@npm:3.2.12" - dependencies: - "@nodelib/fs.stat": ^2.0.2 - "@nodelib/fs.walk": ^1.2.3 - glob-parent: ^5.1.2 - merge2: ^1.3.0 - micromatch: ^4.0.4 - checksum: 0b1990f6ce831c7e28c4d505edcdaad8e27e88ab9fa65eedadb730438cfc7cde4910d6c975d6b7b8dc8a73da4773702ebcfcd6e3518e73938bb1383badfe01c2 - languageName: node - linkType: hard - -"fast-json-stable-stringify@npm:^2.0.0": - version: 2.1.0 - resolution: "fast-json-stable-stringify@npm:2.1.0" - checksum: b191531e36c607977e5b1c47811158733c34ccb3bfde92c44798929e9b4154884378536d26ad90dfecd32e1ffc09c545d23535ad91b3161a27ddbb8ebe0cbecb - languageName: node - linkType: hard - -"fast-levenshtein@npm:^2.0.6": - version: 2.0.6 - resolution: "fast-levenshtein@npm:2.0.6" - checksum: 92cfec0a8dfafd9c7a15fba8f2cc29cd0b62b85f056d99ce448bbcd9f708e18ab2764bda4dd5158364f4145a7c72788538994f0d1787b956ef0d1062b0f7c24c - languageName: node - linkType: hard - -"fast-querystring@npm:^1.1.1": - version: 1.1.1 - resolution: "fast-querystring@npm:1.1.1" - dependencies: - fast-decode-uri-component: ^1.0.1 - checksum: 86d2b75b9b299a552353532fb1a542f09730ee2a61e657d68710971d9a2afc9a3c5c7b7e106b6534f4cc506d2ff1c08ab0fda4ae614b4e7720798c9ac2a88e02 - languageName: node - linkType: hard - -"fast-url-parser@npm:^1.1.3": - version: 1.1.3 - resolution: "fast-url-parser@npm:1.1.3" - dependencies: - punycode: ^1.3.2 - checksum: 5043d0c4a8d775ff58504d56c096563c11b113e4cb8a2668c6f824a1cd4fb3812e2fdf76537eb24a7ce4ae7def6bd9747da630c617cf2a4b6ce0c42514e4f21c - languageName: node - linkType: hard - -"fastq@npm:^1.6.0": - version: 1.15.0 - resolution: "fastq@npm:1.15.0" - dependencies: - reusify: ^1.0.4 - checksum: 0170e6bfcd5d57a70412440b8ef600da6de3b2a6c5966aeaf0a852d542daff506a0ee92d6de7679d1de82e644bce69d7a574a6c93f0b03964b5337eed75ada1a - languageName: node - linkType: hard - -"fb-watchman@npm:^2.0.0": - version: 2.0.2 - resolution: "fb-watchman@npm:2.0.2" - dependencies: - bser: 2.1.1 - checksum: b15a124cef28916fe07b400eb87cbc73ca082c142abf7ca8e8de6af43eca79ca7bd13eb4d4d48240b3bd3136eaac40d16e42d6edf87a8e5d1dd8070626860c78 - languageName: node - linkType: hard - -"fbjs-css-vars@npm:^1.0.0": - version: 1.0.2 - resolution: "fbjs-css-vars@npm:1.0.2" - checksum: 72baf6d22c45b75109118b4daecb6c8016d4c83c8c0f23f683f22e9d7c21f32fff6201d288df46eb561e3c7d4bb4489b8ad140b7f56444c453ba407e8bd28511 - languageName: node - linkType: hard - -"fbjs@npm:^3.0.0": - version: 3.0.4 - resolution: "fbjs@npm:3.0.4" - dependencies: - cross-fetch: ^3.1.5 - fbjs-css-vars: ^1.0.0 - loose-envify: ^1.0.0 - object-assign: ^4.1.0 - promise: ^7.1.1 - setimmediate: ^1.0.5 - ua-parser-js: ^0.7.30 - checksum: 8b23a3550fcda8a9109fca9475a3416590c18bb6825ea884192864ed686f67fcd618e308a140c9e5444fbd0168732e1ff3c092ba3d0c0ae1768969f32ba280c7 - languageName: node - linkType: hard - -"figures@npm:^3.0.0": - version: 3.2.0 - resolution: "figures@npm:3.2.0" - dependencies: - escape-string-regexp: ^1.0.5 - checksum: 85a6ad29e9aca80b49b817e7c89ecc4716ff14e3779d9835af554db91bac41c0f289c418923519392a1e582b4d10482ad282021330cd045bb7b80c84152f2a2b - languageName: node - linkType: hard - -"file-entry-cache@npm:^6.0.1": - version: 6.0.1 - resolution: "file-entry-cache@npm:6.0.1" - dependencies: - flat-cache: ^3.0.4 - checksum: f49701feaa6314c8127c3c2f6173cfefff17612f5ed2daaafc6da13b5c91fd43e3b2a58fd0d63f9f94478a501b167615931e7200e31485e320f74a33885a9c74 - languageName: node - linkType: hard - -"fill-range@npm:^7.0.1": - version: 7.0.1 - resolution: "fill-range@npm:7.0.1" - dependencies: - to-regex-range: ^5.0.1 - checksum: cc283f4e65b504259e64fd969bcf4def4eb08d85565e906b7d36516e87819db52029a76b6363d0f02d0d532f0033c9603b9e2d943d56ee3b0d4f7ad3328ff917 - languageName: node - linkType: hard - -"find-root@npm:^1.1.0": - version: 1.1.0 - resolution: "find-root@npm:1.1.0" - checksum: b2a59fe4b6c932eef36c45a048ae8f93c85640212ebe8363164814990ee20f154197505965f3f4f102efc33bfb1cbc26fd17c4a2fc739ebc51b886b137cbefaf - languageName: node - linkType: hard - -"find-up@npm:^4.1.0": - version: 4.1.0 - resolution: "find-up@npm:4.1.0" - dependencies: - locate-path: ^5.0.0 - path-exists: ^4.0.0 - checksum: 4c172680e8f8c1f78839486e14a43ef82e9decd0e74145f40707cc42e7420506d5ec92d9a11c22bd2c48fb0c384ea05dd30e10dd152fefeec6f2f75282a8b844 - languageName: node - linkType: hard - -"find-up@npm:^5.0.0": - version: 5.0.0 - resolution: "find-up@npm:5.0.0" - dependencies: - locate-path: ^6.0.0 - path-exists: ^4.0.0 - checksum: 07955e357348f34660bde7920783204ff5a26ac2cafcaa28bace494027158a97b9f56faaf2d89a6106211a8174db650dd9f503f9c0d526b1202d5554a00b9095 - languageName: node - linkType: hard - -"flat-cache@npm:^3.0.4": - version: 3.0.4 - resolution: "flat-cache@npm:3.0.4" - dependencies: - flatted: ^3.1.0 - rimraf: ^3.0.2 - checksum: 4fdd10ecbcbf7d520f9040dd1340eb5dfe951e6f0ecf2252edeec03ee68d989ec8b9a20f4434270e71bcfd57800dc09b3344fca3966b2eb8f613072c7d9a2365 - languageName: node - linkType: hard - -"flatted@npm:^3.1.0": - version: 3.2.7 - resolution: "flatted@npm:3.2.7" - checksum: 427633049d55bdb80201c68f7eb1cbd533e03eac541f97d3aecab8c5526f12a20ccecaeede08b57503e772c769e7f8680b37e8d482d1e5f8d7e2194687f9ea35 - languageName: node - linkType: hard - -"flow-static-land@npm:0.2.7": - version: 0.2.7 - resolution: "flow-static-land@npm:0.2.7" - checksum: 38dbca39ad8d7c3a8a1bf8287d5fab33af043a223169e180ae963e66fe677a6ea2c7f982dd86643aea33ae941b3dc610aa44e78113eb360c45501b5712b40a95 - languageName: node - linkType: hard - -"flow-static-land@npm:0.2.8": - version: 0.2.8 - resolution: "flow-static-land@npm:0.2.8" - checksum: 601041728f26baac08de972301360877407109d9b7cb78241126d9bf787ecc97eb48b978c58711208a4a83a1a2faab70700de99a4a517d6f129fb92f3493a0d1 - languageName: node - linkType: hard - -"for-each@npm:^0.3.3": - version: 0.3.3 - resolution: "for-each@npm:0.3.3" - dependencies: - is-callable: ^1.1.3 - checksum: 6c48ff2bc63362319c65e2edca4a8e1e3483a2fabc72fbe7feaf8c73db94fc7861bd53bc02c8a66a0c1dd709da6b04eec42e0abdd6b40ce47305ae92a25e5d28 - languageName: node - linkType: hard - -"form-data@npm:^3.0.0": - version: 3.0.1 - resolution: "form-data@npm:3.0.1" - dependencies: - asynckit: ^0.4.0 - combined-stream: ^1.0.8 - mime-types: ^2.1.12 - checksum: b019e8d35c8afc14a2bd8a7a92fa4f525a4726b6d5a9740e8d2623c30e308fbb58dc8469f90415a856698933c8479b01646a9dff33c87cc4e76d72aedbbf860d - languageName: node - linkType: hard - -"frontend@workspace:.": - version: 0.0.0-use.local - resolution: "frontend@workspace:." - dependencies: - "@absinthe/socket": 0.2.1 - "@absinthe/socket-apollo-link": 0.2.1 - "@apollo/client": 3.7.10 - "@emotion/react": 11.10.6 - "@emotion/styled": 11.10.6 - "@graphql-codegen/add": 4.0.1 - "@graphql-codegen/cli": 3.2.2 - "@graphql-codegen/introspection": 3.0.1 - "@graphql-codegen/typescript": 3.0.2 - "@graphql-codegen/typescript-operations": 3.0.2 - "@graphql-codegen/typescript-react-apollo": 3.3.7 - "@pluralsh/design-system": 1.334.0 - "@pluralsh/eslint-config-typescript": 2.5.41 - "@types/absinthe__socket": 0.2.3 - "@types/absinthe__socket-apollo-link": 0.2.1 - "@types/phoenix": 1.5.5 - "@types/react": 18.0.28 - "@types/react-dom": 18.0.11 - "@types/styled-components": 5.1.26 - "@typescript-eslint/eslint-plugin": 5.56.0 - "@vitejs/plugin-react": 3.1.0 - eslint: 8.33.0 - eslint-plugin-import: 2.27.5 - eslint-plugin-import-newlines: 1.3.1 - eslint-plugin-jsx-a11y: 6.7.1 - eslint-plugin-react: 7.32.2 - eslint-plugin-react-hooks: 4.6.0 - grommet: 2.31.0 - honorable: 0.194.0 - honorable-theme-default: 0.77.0 - lodash: 4.17.21 - phoenix: 1.7.2 - react: 18.2.0 - react-dom: 18.2.0 - react-router-dom: 6.9.0 - styled-components: 5.3.9 - typescript: 5.0.2 - vite: 4.2.1 - languageName: unknown - linkType: soft - -"fs-minipass@npm:^2.0.0, fs-minipass@npm:^2.1.0": - version: 2.1.0 - resolution: "fs-minipass@npm:2.1.0" - dependencies: - minipass: ^3.0.0 - checksum: 1b8d128dae2ac6cc94230cc5ead341ba3e0efaef82dab46a33d171c044caaa6ca001364178d42069b2809c35a1c3c35079a32107c770e9ffab3901b59af8c8b1 - languageName: node - linkType: hard - -"fs.realpath@npm:^1.0.0": - version: 1.0.0 - resolution: "fs.realpath@npm:1.0.0" - checksum: 99ddea01a7e75aa276c250a04eedeffe5662bce66c65c07164ad6264f9de18fb21be9433ead460e54cff20e31721c811f4fb5d70591799df5f85dce6d6746fd0 - languageName: node - linkType: hard - -"fsevents@npm:~2.3.2": - version: 2.3.2 - resolution: "fsevents@npm:2.3.2" - dependencies: - node-gyp: latest - checksum: 97ade64e75091afee5265e6956cb72ba34db7819b4c3e94c431d4be2b19b8bb7a2d4116da417950c3425f17c8fe693d25e20212cac583ac1521ad066b77ae31f - conditions: os=darwin - languageName: node - linkType: hard - -"fsevents@patch:fsevents@~2.3.2#~builtin": - version: 2.3.2 - resolution: "fsevents@patch:fsevents@npm%3A2.3.2#~builtin::version=2.3.2&hash=df0bf1" - dependencies: - node-gyp: latest - conditions: os=darwin - languageName: node - linkType: hard - -"function-bind@npm:^1.1.1": - version: 1.1.1 - resolution: "function-bind@npm:1.1.1" - checksum: b32fbaebb3f8ec4969f033073b43f5c8befbb58f1a79e12f1d7490358150359ebd92f49e72ff0144f65f2c48ea2a605bff2d07965f548f6474fd8efd95bf361a - languageName: node - linkType: hard - -"function.prototype.name@npm:^1.1.5": - version: 1.1.5 - resolution: "function.prototype.name@npm:1.1.5" - dependencies: - call-bind: ^1.0.2 - define-properties: ^1.1.3 - es-abstract: ^1.19.0 - functions-have-names: ^1.2.2 - checksum: acd21d733a9b649c2c442f067567743214af5fa248dbeee69d8278ce7df3329ea5abac572be9f7470b4ec1cd4d8f1040e3c5caccf98ebf2bf861a0deab735c27 - languageName: node - linkType: hard - -"functions-have-names@npm:^1.2.2": - version: 1.2.3 - resolution: "functions-have-names@npm:1.2.3" - checksum: c3f1f5ba20f4e962efb71344ce0a40722163e85bee2101ce25f88214e78182d2d2476aa85ef37950c579eb6cf6ee811c17b3101bb84004bb75655f3e33f3fdb5 - languageName: node - linkType: hard - -"gauge@npm:^4.0.3": - version: 4.0.4 - resolution: "gauge@npm:4.0.4" - dependencies: - aproba: ^1.0.3 || ^2.0.0 - color-support: ^1.1.3 - console-control-strings: ^1.1.0 - has-unicode: ^2.0.1 - signal-exit: ^3.0.7 - string-width: ^4.2.3 - strip-ansi: ^6.0.1 - wide-align: ^1.1.5 - checksum: 788b6bfe52f1dd8e263cda800c26ac0ca2ff6de0b6eee2fe0d9e3abf15e149b651bd27bf5226be10e6e3edb5c4e5d5985a5a1a98137e7a892f75eff76467ad2d - languageName: node - linkType: hard - -"gensync@npm:^1.0.0-beta.2": - version: 1.0.0-beta.2 - resolution: "gensync@npm:1.0.0-beta.2" - checksum: a7437e58c6be12aa6c90f7730eac7fa9833dc78872b4ad2963d2031b00a3367a93f98aec75f9aaac7220848e4026d67a8655e870b24f20a543d103c0d65952ec - languageName: node - linkType: hard - -"get-caller-file@npm:^2.0.1, get-caller-file@npm:^2.0.5": - version: 2.0.5 - resolution: "get-caller-file@npm:2.0.5" - checksum: b9769a836d2a98c3ee734a88ba712e62703f1df31b94b784762c433c27a386dd6029ff55c2a920c392e33657d80191edbf18c61487e198844844516f843496b9 - languageName: node - linkType: hard - -"get-intrinsic@npm:^1.0.2, get-intrinsic@npm:^1.1.1, get-intrinsic@npm:^1.1.3, get-intrinsic@npm:^1.2.0": - version: 1.2.0 - resolution: "get-intrinsic@npm:1.2.0" - dependencies: - function-bind: ^1.1.1 - has: ^1.0.3 - has-symbols: ^1.0.3 - checksum: 78fc0487b783f5c58cf2dccafc3ae656ee8d2d8062a8831ce4a95e7057af4587a1d4882246c033aca0a7b4965276f4802b45cc300338d1b77a73d3e3e3f4877d - languageName: node - linkType: hard - -"get-symbol-description@npm:^1.0.0": - version: 1.0.0 - resolution: "get-symbol-description@npm:1.0.0" - dependencies: - call-bind: ^1.0.2 - get-intrinsic: ^1.1.1 - checksum: 9ceff8fe968f9270a37a1f73bf3f1f7bda69ca80f4f80850670e0e7b9444ff99323f7ac52f96567f8b5f5fbe7ac717a0d81d3407c7313e82810c6199446a5247 - languageName: node - linkType: hard - -"glob-parent@npm:^5.1.2": - version: 5.1.2 - resolution: "glob-parent@npm:5.1.2" - dependencies: - is-glob: ^4.0.1 - checksum: f4f2bfe2425296e8a47e36864e4f42be38a996db40420fe434565e4480e3322f18eb37589617a98640c5dc8fdec1a387007ee18dbb1f3f5553409c34d17f425e - languageName: node - linkType: hard - -"glob-parent@npm:^6.0.2": - version: 6.0.2 - resolution: "glob-parent@npm:6.0.2" - dependencies: - is-glob: ^4.0.3 - checksum: c13ee97978bef4f55106b71e66428eb1512e71a7466ba49025fc2aec59a5bfb0954d5abd58fc5ee6c9b076eef4e1f6d3375c2e964b88466ca390da4419a786a8 - languageName: node - linkType: hard - -"glob@npm:^7.1.1, glob@npm:^7.1.3, glob@npm:^7.1.4": - version: 7.2.3 - resolution: "glob@npm:7.2.3" - dependencies: - fs.realpath: ^1.0.0 - inflight: ^1.0.4 - inherits: 2 - minimatch: ^3.1.1 - once: ^1.3.0 - path-is-absolute: ^1.0.0 - checksum: 29452e97b38fa704dabb1d1045350fb2467cf0277e155aa9ff7077e90ad81d1ea9d53d3ee63bd37c05b09a065e90f16aec4a65f5b8de401d1dac40bc5605d133 - languageName: node - linkType: hard - -"glob@npm:^8.0.1": - version: 8.1.0 - resolution: "glob@npm:8.1.0" - dependencies: - fs.realpath: ^1.0.0 - inflight: ^1.0.4 - inherits: 2 - minimatch: ^5.0.1 - once: ^1.3.0 - checksum: 92fbea3221a7d12075f26f0227abac435de868dd0736a17170663783296d0dd8d3d532a5672b4488a439bf5d7fb85cdd07c11185d6cd39184f0385cbdfb86a47 - languageName: node - linkType: hard - -"globals@npm:^11.1.0": - version: 11.12.0 - resolution: "globals@npm:11.12.0" - checksum: 67051a45eca3db904aee189dfc7cd53c20c7d881679c93f6146ddd4c9f4ab2268e68a919df740d39c71f4445d2b38ee360fc234428baea1dbdfe68bbcb46979e - languageName: node - linkType: hard - -"globals@npm:^13.19.0": - version: 13.20.0 - resolution: "globals@npm:13.20.0" - dependencies: - type-fest: ^0.20.2 - checksum: ad1ecf914bd051325faad281d02ea2c0b1df5d01bd94d368dcc5513340eac41d14b3c61af325768e3c7f8d44576e72780ec0b6f2d366121f8eec6e03c3a3b97a - languageName: node - linkType: hard - -"globalthis@npm:^1.0.3": - version: 1.0.3 - resolution: "globalthis@npm:1.0.3" - dependencies: - define-properties: ^1.1.3 - checksum: fbd7d760dc464c886d0196166d92e5ffb4c84d0730846d6621a39fbbc068aeeb9c8d1421ad330e94b7bca4bb4ea092f5f21f3d36077812af5d098b4dc006c998 - languageName: node - linkType: hard - -"globby@npm:^11.0.3, globby@npm:^11.1.0": - version: 11.1.0 - resolution: "globby@npm:11.1.0" - dependencies: - array-union: ^2.1.0 - dir-glob: ^3.0.1 - fast-glob: ^3.2.9 - ignore: ^5.2.0 - merge2: ^1.4.1 - slash: ^3.0.0 - checksum: b4be8885e0cfa018fc783792942d53926c35c50b3aefd3fdcfb9d22c627639dc26bd2327a40a0b74b074100ce95bb7187bfeae2f236856aa3de183af7a02aea6 - languageName: node - linkType: hard - -"gopd@npm:^1.0.1": - version: 1.0.1 - resolution: "gopd@npm:1.0.1" - dependencies: - get-intrinsic: ^1.1.3 - checksum: a5ccfb8806e0917a94e0b3de2af2ea4979c1da920bc381667c260e00e7cafdbe844e2cb9c5bcfef4e5412e8bf73bab837285bc35c7ba73aaaf0134d4583393a6 - languageName: node - linkType: hard - -"graceful-fs@npm:^4.2.6": - version: 4.2.10 - resolution: "graceful-fs@npm:4.2.10" - checksum: 3f109d70ae123951905d85032ebeae3c2a5a7a997430df00ea30df0e3a6c60cf6689b109654d6fdacd28810a053348c4d14642da1d075049e6be1ba5216218da - languageName: node - linkType: hard - -"grapheme-splitter@npm:^1.0.4": - version: 1.0.4 - resolution: "grapheme-splitter@npm:1.0.4" - checksum: 0c22ec54dee1b05cd480f78cf14f732cb5b108edc073572c4ec205df4cd63f30f8db8025afc5debc8835a8ddeacf648a1c7992fe3dcd6ad38f9a476d84906620 - languageName: node - linkType: hard - -"graphql-config@npm:^4.5.0": - version: 4.5.0 - resolution: "graphql-config@npm:4.5.0" - dependencies: - "@graphql-tools/graphql-file-loader": ^7.3.7 - "@graphql-tools/json-file-loader": ^7.3.7 - "@graphql-tools/load": ^7.5.5 - "@graphql-tools/merge": ^8.2.6 - "@graphql-tools/url-loader": ^7.9.7 - "@graphql-tools/utils": ^9.0.0 - cosmiconfig: 8.0.0 - jiti: 1.17.1 - minimatch: 4.2.3 - string-env-interpolation: 1.0.1 - tslib: ^2.4.0 - peerDependencies: - cosmiconfig-toml-loader: ^1.0.0 - graphql: ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 - peerDependenciesMeta: - cosmiconfig-toml-loader: - optional: true - checksum: 8ab1a3ce3534598ddac2df213b6af2eecd9ebcca2268d39cc3e87a6e55749483389a6df222e9e0acd638dd2479378a5c8e8d90f980e6a54e700c4c4ae3522123 - languageName: node - linkType: hard - -"graphql-request@npm:^5.0.0": - version: 5.2.0 - resolution: "graphql-request@npm:5.2.0" - dependencies: - "@graphql-typed-document-node/core": ^3.1.1 - cross-fetch: ^3.1.5 - extract-files: ^9.0.0 - form-data: ^3.0.0 - peerDependencies: - graphql: 14 - 16 - checksum: a8aa37816378898e6fc8c4db04a1c114c98f98d90718cf1680bd96b22724bd43b1210619f9b0d328b5c1acb4f7b76d2227a2537cd5ab059bb54cf0debecb33bf - languageName: node - linkType: hard - -"graphql-tag@npm:^2.11.0, graphql-tag@npm:^2.12.6": - version: 2.12.6 - resolution: "graphql-tag@npm:2.12.6" - dependencies: - tslib: ^2.1.0 - peerDependencies: - graphql: ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 - checksum: b15162a3d62f17b9b79302445b9ee330e041582f1c7faca74b9dec5daa74272c906ec1c34e1c50592bb6215e5c3eba80a309103f6ba9e4c1cddc350c46f010df - languageName: node - linkType: hard - -"graphql-ws@npm:5.12.0": - version: 5.12.0 - resolution: "graphql-ws@npm:5.12.0" - peerDependencies: - graphql: ">=0.11 <=16" - checksum: 5c683e2d5bdadfcfec0639eda69b8a66ef275e68e64f662bd75da6779a87b34395cbce8e37cb66830a9febca1871f7dc2575e6814f6f6e899904fe72e245f216 - languageName: node - linkType: hard - -"graphql@npm:14.0.2": - version: 14.0.2 - resolution: "graphql@npm:14.0.2" - dependencies: - iterall: ^1.2.2 - checksum: 789cf582d3b7493bfe9372d28b0c124a992165082b111972b4b7171dc55db0eda6288a946759972e83788c584246d5ebcaec403d6b6e1292e266b74e14198bf7 - languageName: node - linkType: hard - -"graphql@npm:^14.5.3": - version: 14.7.0 - resolution: "graphql@npm:14.7.0" - dependencies: - iterall: ^1.2.2 - checksum: e5f4e60799421a573904f390e1ec0aa76360f751688dbbe62e9c35baa0d3727c8d59a659bfc524f126dffe3518da87fd8ecaa78c94fd5c0fe4e035c670745242 - languageName: node - linkType: hard - -"grommet-icons@npm:4.9.0": - version: 4.9.0 - resolution: "grommet-icons@npm:4.9.0" - dependencies: - grommet-styles: ^0.2.0 - peerDependencies: - react: ^16.6.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.6.0 || ^17.0.0 || ^18.0.0 - styled-components: ">= 5.x" - checksum: b978c087a16341d75f3f8e9f57484fab9c4fdf64ab7d89a46246d7bff024120cce50167e1af49048a492fb30cc3e59c7ffc0e8dbd25733521864147f071dc3d3 - languageName: node - linkType: hard - -"grommet-icons@npm:^4.10.0, grommet-icons@npm:^4.8.0": - version: 4.10.0 - resolution: "grommet-icons@npm:4.10.0" - dependencies: - grommet-styles: ^0.2.0 - peerDependencies: - react: ^16.6.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.6.0 || ^17.0.0 || ^18.0.0 - styled-components: ">= 5.x" - checksum: 69745341a65f4e4d05bd5b207f7243b5ffa54d13a8195093cae7fb32d57b38ab55ed30cfee341b9f1f659b99743f721ee04c7ab9decd7dd7f171fcc4947af048 - languageName: node - linkType: hard - -"grommet-styles@npm:^0.2.0": - version: 0.2.0 - resolution: "grommet-styles@npm:0.2.0" - peerDependencies: - react: ">= 16.4.1" - react-dom: ">= 16.4.1" - styled-components: ">= 4.X" - checksum: 7b29e6fd773a29a9f7b48e5b0a163e1c51b3b196891228d88a0e5b99faab4ece03b5410a97665105fe886402016a337237b956d5f46af06ec2e06e2b328a0757 - languageName: node - linkType: hard - -"grommet@npm:2.29.1": - version: 2.29.1 - resolution: "grommet@npm:2.29.1" - dependencies: - grommet-icons: ^4.8.0 - hoist-non-react-statics: ^3.2.0 - markdown-to-jsx: ^7.1.5 - prop-types: ^15.8.1 - peerDependencies: - react: ^16.6.1 || ^17.0.0 || ^18.0.0 - react-dom: ^16.6.1 || ^17.0.0 || ^18.0.0 - styled-components: ">= 5.1" - checksum: f16f68ad7a0d5984bd5f3a6f84d84575bc168a3f9eb53095f80a7da702e3a6113b6e465390c8045650aedce813d0a3165cad96508939ff8463b00f99eefd54d1 - languageName: node - linkType: hard - -"grommet@npm:2.31.0": - version: 2.31.0 - resolution: "grommet@npm:2.31.0" - dependencies: - grommet-icons: ^4.10.0 - hoist-non-react-statics: ^3.2.0 - markdown-to-jsx: ^7.2.0 - prop-types: ^15.8.1 - peerDependencies: - react: ^16.6.1 || ^17.0.0 || ^18.0.0 - react-dom: ^16.6.1 || ^17.0.0 || ^18.0.0 - styled-components: ">= 5.1" - checksum: a15b8834ecd352713a1a4ad997f210db21f5eac2b9ba0917f8f7a14d9f0efaaac8e35e539694efba1c656fb775f4ab52c7f464d640fd0272fe8e1d0131537a29 - languageName: node - linkType: hard - -"has-bigints@npm:^1.0.1, has-bigints@npm:^1.0.2": - version: 1.0.2 - resolution: "has-bigints@npm:1.0.2" - checksum: 390e31e7be7e5c6fe68b81babb73dfc35d413604d7ee5f56da101417027a4b4ce6a27e46eff97ad040c835b5d228676eae99a9b5c3bc0e23c8e81a49241ff45b - languageName: node - linkType: hard - -"has-flag@npm:^3.0.0": - version: 3.0.0 - resolution: "has-flag@npm:3.0.0" - checksum: 4a15638b454bf086c8148979aae044dd6e39d63904cd452d970374fa6a87623423da485dfb814e7be882e05c096a7ccf1ebd48e7e7501d0208d8384ff4dea73b - languageName: node - linkType: hard - -"has-flag@npm:^4.0.0": - version: 4.0.0 - resolution: "has-flag@npm:4.0.0" - checksum: 261a1357037ead75e338156b1f9452c016a37dcd3283a972a30d9e4a87441ba372c8b81f818cd0fbcd9c0354b4ae7e18b9e1afa1971164aef6d18c2b6095a8ad - languageName: node - linkType: hard - -"has-property-descriptors@npm:^1.0.0": - version: 1.0.0 - resolution: "has-property-descriptors@npm:1.0.0" - dependencies: - get-intrinsic: ^1.1.1 - checksum: a6d3f0a266d0294d972e354782e872e2fe1b6495b321e6ef678c9b7a06a40408a6891817350c62e752adced73a94ac903c54734fee05bf65b1905ee1368194bb - languageName: node - linkType: hard - -"has-proto@npm:^1.0.1": - version: 1.0.1 - resolution: "has-proto@npm:1.0.1" - checksum: febc5b5b531de8022806ad7407935e2135f1cc9e64636c3916c6842bd7995994ca3b29871ecd7954bd35f9e2986c17b3b227880484d22259e2f8e6ce63fd383e - languageName: node - linkType: hard - -"has-symbols@npm:^1.0.2, has-symbols@npm:^1.0.3": - version: 1.0.3 - resolution: "has-symbols@npm:1.0.3" - checksum: a054c40c631c0d5741a8285010a0777ea0c068f99ed43e5d6eb12972da223f8af553a455132fdb0801bdcfa0e0f443c0c03a68d8555aa529b3144b446c3f2410 - languageName: node - linkType: hard - -"has-tostringtag@npm:^1.0.0": - version: 1.0.0 - resolution: "has-tostringtag@npm:1.0.0" - dependencies: - has-symbols: ^1.0.2 - checksum: cc12eb28cb6ae22369ebaad3a8ab0799ed61270991be88f208d508076a1e99abe4198c965935ce85ea90b60c94ddda73693b0920b58e7ead048b4a391b502c1c - languageName: node - linkType: hard - -"has-unicode@npm:^2.0.1": - version: 2.0.1 - resolution: "has-unicode@npm:2.0.1" - checksum: 1eab07a7436512db0be40a710b29b5dc21fa04880b7f63c9980b706683127e3c1b57cb80ea96d47991bdae2dfe479604f6a1ba410106ee1046a41d1bd0814400 - languageName: node - linkType: hard - -"has@npm:^1.0.3": - version: 1.0.3 - resolution: "has@npm:1.0.3" - dependencies: - function-bind: ^1.1.1 - checksum: b9ad53d53be4af90ce5d1c38331e712522417d017d5ef1ebd0507e07c2fbad8686fffb8e12ddecd4c39ca9b9b47431afbb975b8abf7f3c3b82c98e9aad052792 - languageName: node - linkType: hard - -"hast-util-from-parse5@npm:^7.0.0": - version: 7.1.2 - resolution: "hast-util-from-parse5@npm:7.1.2" - dependencies: - "@types/hast": ^2.0.0 - "@types/unist": ^2.0.0 - hastscript: ^7.0.0 - property-information: ^6.0.0 - vfile: ^5.0.0 - vfile-location: ^4.0.0 - web-namespaces: ^2.0.0 - checksum: 7b4ed5b508b1352127c6719f7b0c0880190cf9859fe54ccaf7c9228ecf623d36cef3097910b3874d2fe1aac6bf4cf45d3cc2303daac3135a05e9ade6534ddddb - languageName: node - linkType: hard - -"hast-util-parse-selector@npm:^3.0.0": - version: 3.1.1 - resolution: "hast-util-parse-selector@npm:3.1.1" - dependencies: - "@types/hast": ^2.0.0 - checksum: 511d373465f60dd65e924f88bf0954085f4fb6e3a2b062a4b5ac43b93cbfd36a8dce6234b5d1e3e63499d936375687e83fc5da55628b22bd6b581b5ee167d1c4 - languageName: node - linkType: hard - -"hast-util-raw@npm:^7.2.0": - version: 7.2.3 - resolution: "hast-util-raw@npm:7.2.3" - dependencies: - "@types/hast": ^2.0.0 - "@types/parse5": ^6.0.0 - hast-util-from-parse5: ^7.0.0 - hast-util-to-parse5: ^7.0.0 - html-void-elements: ^2.0.0 - parse5: ^6.0.0 - unist-util-position: ^4.0.0 - unist-util-visit: ^4.0.0 - vfile: ^5.0.0 - web-namespaces: ^2.0.0 - zwitch: ^2.0.0 - checksum: 21857eea3ffb8fd92d2d9be7793b56d0b2c40db03c4cfa14828855ae41d7c584917aa83efb7157220b2e41e25e95f81f24679ac342c35145e5f1c1d39015f81f - languageName: node - linkType: hard - -"hast-util-to-parse5@npm:^7.0.0": - version: 7.1.0 - resolution: "hast-util-to-parse5@npm:7.1.0" - dependencies: - "@types/hast": ^2.0.0 - comma-separated-tokens: ^2.0.0 - property-information: ^6.0.0 - space-separated-tokens: ^2.0.0 - web-namespaces: ^2.0.0 - zwitch: ^2.0.0 - checksum: 3a7f2175a3db599bbae7e49ba73d3e5e688e5efca7590ff50130ba108ad649f728402815d47db49146f6b94c14c934bf119915da9f6964e38802c122bcc8af6b - languageName: node - linkType: hard - -"hast-util-whitespace@npm:^2.0.0": - version: 2.0.1 - resolution: "hast-util-whitespace@npm:2.0.1" - checksum: 431be6b2f35472f951615540d7a53f69f39461e5e080c0190268bdeb2be9ab9b1dddfd1f467dd26c1de7e7952df67beb1307b6ee940baf78b24a71b5e0663868 - languageName: node - linkType: hard - -"hastscript@npm:^7.0.0": - version: 7.2.0 - resolution: "hastscript@npm:7.2.0" - dependencies: - "@types/hast": ^2.0.0 - comma-separated-tokens: ^2.0.0 - hast-util-parse-selector: ^3.0.0 - property-information: ^6.0.0 - space-separated-tokens: ^2.0.0 - checksum: 928a21576ff7b9a8c945e7940bcbf2d27f770edb4279d4d04b33dc90753e26ca35c1172d626f54afebd377b2afa32331e399feb3eb0f7b91a399dca5927078ae - languageName: node - linkType: hard - -"header-case@npm:^2.0.4": - version: 2.0.4 - resolution: "header-case@npm:2.0.4" - dependencies: - capital-case: ^1.0.4 - tslib: ^2.0.3 - checksum: 571c83eeb25e8130d172218712f807c0b96d62b020981400bccc1503a7cf14b09b8b10498a962d2739eccf231d950e3848ba7d420b58a6acd2f9283439546cd9 - languageName: node - linkType: hard - -"highlight.js@npm:11.7.0": - version: 11.7.0 - resolution: "highlight.js@npm:11.7.0" - checksum: 19e3fb8b56f4b361b057a8523b989dfeb6479bbd1e29cec3fac6fa5c78d09927d5fa61b7dba6631fdb57cfdca9b3084aa4da49405ceaf4a67f67beae2ed5b77d - languageName: node - linkType: hard - -"hoist-non-react-statics@npm:^3.0.0, hoist-non-react-statics@npm:^3.2.0, hoist-non-react-statics@npm:^3.3.0, hoist-non-react-statics@npm:^3.3.1, hoist-non-react-statics@npm:^3.3.2": - version: 3.3.2 - resolution: "hoist-non-react-statics@npm:3.3.2" - dependencies: - react-is: ^16.7.0 - checksum: b1538270429b13901ee586aa44f4cc3ecd8831c061d06cb8322e50ea17b3f5ce4d0e2e66394761e6c8e152cd8c34fb3b4b690116c6ce2bd45b18c746516cb9e8 - languageName: node - linkType: hard - -"honorable-recipe-mapper@npm:0.2.0": - version: 0.2.0 - resolution: "honorable-recipe-mapper@npm:0.2.0" - checksum: 86521c78ff616ceb76685a1117e90991670f789cb1e9efaed1963295b170ba1bcdeed2998408433e79c94315f1ba0cb9896272f2e2fb5e8495f06b8f715b351b - languageName: node - linkType: hard - -"honorable-theme-default@npm:0.77.0": - version: 0.77.0 - resolution: "honorable-theme-default@npm:0.77.0" - peerDependencies: - "@emotion/react": ">=10.0.0" - checksum: 008e34e25ff4e7d56e67d52296b495fa28caaacea67eb6e18b28e0283a71099fee647dbe43e0996e93472217fe9ed94d77e0bd1c73dc9c4a5ec205528790f328 - languageName: node - linkType: hard - -"honorable@npm:0.194.0": - version: 0.194.0 - resolution: "honorable@npm:0.194.0" - dependencies: - "@emotion/is-prop-valid": ^1.2.0 - "@floating-ui/react-dom": ^1.0.1 - lodash.merge: ^4.6.2 - lodash.mergewith: ^4.6.2 - prop-types: ^15.8.1 - react-textarea-autosize: ^8.4.0 - react-transition-group: ^4.4.5 - peerDependencies: - "@emotion/react": ">=10.0.0" - "@emotion/styled": ">=10.0.0" - react: ">=16.0.0" - react-dom: ">=16.0.0" - checksum: 4ada627c577ad63de48bbf7d76ee6d3c9f36a7b0e01606988d9f975cbacb9beb644626ed6a5e20f65554bf0ac72ab046503168be58d10249e58c26fbf997d174 - languageName: node - linkType: hard - -"html-void-elements@npm:^2.0.0": - version: 2.0.1 - resolution: "html-void-elements@npm:2.0.1" - checksum: 06d41f13b9d5d6e0f39861c4bec9a9196fa4906d56cd5cf6cf54ad2e52a85bf960cca2bf9600026bde16c8331db171bedba5e5a35e2e43630c8f1d497b2fb658 - languageName: node - linkType: hard - -"http-cache-semantics@npm:^4.1.0": - version: 4.1.1 - resolution: "http-cache-semantics@npm:4.1.1" - checksum: 83ac0bc60b17a3a36f9953e7be55e5c8f41acc61b22583060e8dedc9dd5e3607c823a88d0926f9150e571f90946835c7fe150732801010845c72cd8bbff1a236 - languageName: node - linkType: hard - -"http-proxy-agent@npm:^5.0.0": - version: 5.0.0 - resolution: "http-proxy-agent@npm:5.0.0" - dependencies: - "@tootallnate/once": 2 - agent-base: 6 - debug: 4 - checksum: e2ee1ff1656a131953839b2a19cd1f3a52d97c25ba87bd2559af6ae87114abf60971e498021f9b73f9fd78aea8876d1fb0d4656aac8a03c6caa9fc175f22b786 - languageName: node - linkType: hard - -"https-proxy-agent@npm:^5.0.0": - version: 5.0.1 - resolution: "https-proxy-agent@npm:5.0.1" - dependencies: - agent-base: 6 - debug: 4 - checksum: 571fccdf38184f05943e12d37d6ce38197becdd69e58d03f43637f7fa1269cf303a7d228aa27e5b27bbd3af8f09fd938e1c91dcfefff2df7ba77c20ed8dfc765 - languageName: node - linkType: hard - -"humanize-ms@npm:^1.2.1": - version: 1.2.1 - resolution: "humanize-ms@npm:1.2.1" - dependencies: - ms: ^2.0.0 - checksum: 9c7a74a2827f9294c009266c82031030eae811ca87b0da3dceb8d6071b9bde22c9f3daef0469c3c533cc67a97d8a167cd9fc0389350e5f415f61a79b171ded16 - languageName: node - linkType: hard - -"iconv-lite@npm:^0.4.24": - version: 0.4.24 - resolution: "iconv-lite@npm:0.4.24" - dependencies: - safer-buffer: ">= 2.1.2 < 3" - checksum: bd9f120f5a5b306f0bc0b9ae1edeb1577161503f5f8252a20f1a9e56ef8775c9959fd01c55f2d3a39d9a8abaf3e30c1abeb1895f367dcbbe0a8fd1c9ca01c4f6 - languageName: node - linkType: hard - -"iconv-lite@npm:^0.6.2": - version: 0.6.3 - resolution: "iconv-lite@npm:0.6.3" - dependencies: - safer-buffer: ">= 2.1.2 < 3.0.0" - checksum: 3f60d47a5c8fc3313317edfd29a00a692cc87a19cac0159e2ce711d0ebc9019064108323b5e493625e25594f11c6236647d8e256fbe7a58f4a3b33b89e6d30bf - languageName: node - linkType: hard - -"ieee754@npm:^1.1.13": - version: 1.2.1 - resolution: "ieee754@npm:1.2.1" - checksum: 5144c0c9815e54ada181d80a0b810221a253562422e7c6c3a60b1901154184f49326ec239d618c416c1c5945a2e197107aee8d986a3dd836b53dffefd99b5e7e - languageName: node - linkType: hard - -"ignore@npm:^5.2.0": - version: 5.2.4 - resolution: "ignore@npm:5.2.4" - checksum: 3d4c309c6006e2621659311783eaea7ebcd41fe4ca1d78c91c473157ad6666a57a2df790fe0d07a12300d9aac2888204d7be8d59f9aaf665b1c7fcdb432517ef - languageName: node - linkType: hard - -"immer@npm:9.0.19": - version: 9.0.19 - resolution: "immer@npm:9.0.19" - checksum: f02ee53989989c287cd548a3d817fccf0bfe56db919755ee94a72ea3ae78a00363fba93ee6c010fe54a664380c29c53d44ed4091c6a86cae60957ad2cfabc010 - languageName: node - linkType: hard - -"immutable@npm:~3.7.6": - version: 3.7.6 - resolution: "immutable@npm:3.7.6" - checksum: 8cccfb22d3ecf14fe0c474612e96d6bb5d117493e7639fe6642fb81e78c9ac4b698dd8a322c105001a709ad873ffc90e30bad7db5d9a3ef0b54a6e1db0258e8e - languageName: node - linkType: hard - -"import-fresh@npm:^3.0.0, import-fresh@npm:^3.2.1": - version: 3.3.0 - resolution: "import-fresh@npm:3.3.0" - dependencies: - parent-module: ^1.0.0 - resolve-from: ^4.0.0 - checksum: 2cacfad06e652b1edc50be650f7ec3be08c5e5a6f6d12d035c440a42a8cc028e60a5b99ca08a77ab4d6b1346da7d971915828f33cdab730d3d42f08242d09baa - languageName: node - linkType: hard - -"import-from@npm:4.0.0": - version: 4.0.0 - resolution: "import-from@npm:4.0.0" - checksum: 1fa29c05b048da18914e91d9a529e5d9b91774bebbfab10e53f59bcc1667917672b971cf102fee857f142e5e433ce69fa1f0a596e1c7d82f9947a5ec352694b9 - languageName: node - linkType: hard - -"imurmurhash@npm:^0.1.4": - version: 0.1.4 - resolution: "imurmurhash@npm:0.1.4" - checksum: 7cae75c8cd9a50f57dadd77482359f659eaebac0319dd9368bcd1714f55e65badd6929ca58569da2b6494ef13fdd5598cd700b1eba23f8b79c5f19d195a3ecf7 - languageName: node - linkType: hard - -"indent-string@npm:^4.0.0": - version: 4.0.0 - resolution: "indent-string@npm:4.0.0" - checksum: 824cfb9929d031dabf059bebfe08cf3137365e112019086ed3dcff6a0a7b698cb80cf67ccccde0e25b9e2d7527aa6cc1fed1ac490c752162496caba3e6699612 - languageName: node - linkType: hard - -"infer-owner@npm:^1.0.4": - version: 1.0.4 - resolution: "infer-owner@npm:1.0.4" - checksum: 181e732764e4a0611576466b4b87dac338972b839920b2a8cde43642e4ed6bd54dc1fb0b40874728f2a2df9a1b097b8ff83b56d5f8f8e3927f837fdcb47d8a89 - languageName: node - linkType: hard - -"inflight@npm:^1.0.4": - version: 1.0.6 - resolution: "inflight@npm:1.0.6" - dependencies: - once: ^1.3.0 - wrappy: 1 - checksum: f4f76aa072ce19fae87ce1ef7d221e709afb59d445e05d47fba710e85470923a75de35bfae47da6de1b18afc3ce83d70facf44cfb0aff89f0a3f45c0a0244dfd - languageName: node - linkType: hard - -"inherits@npm:2, inherits@npm:^2.0.3, inherits@npm:^2.0.4": - version: 2.0.4 - resolution: "inherits@npm:2.0.4" - checksum: 4a48a733847879d6cf6691860a6b1e3f0f4754176e4d71494c41f3475553768b10f84b5ce1d40fbd0e34e6bfbb864ee35858ad4dd2cf31e02fc4a154b724d7f1 - languageName: node - linkType: hard - -"inline-style-parser@npm:0.1.1": - version: 0.1.1 - resolution: "inline-style-parser@npm:0.1.1" - checksum: 5d545056a3e1f2bf864c928a886a0e1656a3517127d36917b973de581bd54adc91b4bf1febcb0da054f204b4934763f1a4e09308b4d55002327cf1d48ac5d966 - languageName: node - linkType: hard - -"inquirer@npm:^8.0.0": - version: 8.2.5 - resolution: "inquirer@npm:8.2.5" - dependencies: - ansi-escapes: ^4.2.1 - chalk: ^4.1.1 - cli-cursor: ^3.1.0 - cli-width: ^3.0.0 - external-editor: ^3.0.3 - figures: ^3.0.0 - lodash: ^4.17.21 - mute-stream: 0.0.8 - ora: ^5.4.1 - run-async: ^2.4.0 - rxjs: ^7.5.5 - string-width: ^4.1.0 - strip-ansi: ^6.0.0 - through: ^2.3.6 - wrap-ansi: ^7.0.0 - checksum: f13ee4c444187786fb393609dedf6b30870115a57b603f2e6424f29a99abc13446fd45ee22461c33c9c40a92a60a8df62d0d6b25d74fc6676fa4cb211de55b55 - languageName: node - linkType: hard - -"internal-slot@npm:^1.0.3, internal-slot@npm:^1.0.4, internal-slot@npm:^1.0.5": - version: 1.0.5 - resolution: "internal-slot@npm:1.0.5" - dependencies: - get-intrinsic: ^1.2.0 - has: ^1.0.3 - side-channel: ^1.0.4 - checksum: 97e84046bf9e7574d0956bd98d7162313ce7057883b6db6c5c7b5e5f05688864b0978ba07610c726d15d66544ffe4b1050107d93f8a39ebc59b15d8b429b497a - languageName: node - linkType: hard - -"intl-messageformat@npm:^10.1.0": - version: 10.3.3 - resolution: "intl-messageformat@npm:10.3.3" - dependencies: - "@formatjs/ecma402-abstract": 1.14.3 - "@formatjs/fast-memoize": 2.0.1 - "@formatjs/icu-messageformat-parser": 2.3.0 - tslib: ^2.4.0 - checksum: 05baee05d31b911dc4bb1774ddf0799dc136723203461f73fecb185e2e2d18b148311db7ef14294d664a6212311c5d9116c3e850cf609dd6348e347f3d07e660 - languageName: node - linkType: hard - -"invariant@npm:^2.2.4": - version: 2.2.4 - resolution: "invariant@npm:2.2.4" - dependencies: - loose-envify: ^1.0.0 - checksum: cc3182d793aad82a8d1f0af697b462939cb46066ec48bbf1707c150ad5fad6406137e91a262022c269702e01621f35ef60269f6c0d7fd178487959809acdfb14 - languageName: node - linkType: hard - -"ip@npm:^2.0.0": - version: 2.0.0 - resolution: "ip@npm:2.0.0" - checksum: cfcfac6b873b701996d71ec82a7dd27ba92450afdb421e356f44044ed688df04567344c36cbacea7d01b1c39a4c732dc012570ebe9bebfb06f27314bca625349 - languageName: node - linkType: hard - -"is-absolute@npm:^1.0.0": - version: 1.0.0 - resolution: "is-absolute@npm:1.0.0" - dependencies: - is-relative: ^1.0.0 - is-windows: ^1.0.1 - checksum: 9d16b2605eda3f3ce755410f1d423e327ad3a898bcb86c9354cf63970ed3f91ba85e9828aa56f5d6a952b9fae43d0477770f78d37409ae8ecc31e59ebc279b27 - languageName: node - linkType: hard - -"is-arguments@npm:^1.1.1": - version: 1.1.1 - resolution: "is-arguments@npm:1.1.1" - dependencies: - call-bind: ^1.0.2 - has-tostringtag: ^1.0.0 - checksum: 7f02700ec2171b691ef3e4d0e3e6c0ba408e8434368504bb593d0d7c891c0dbfda6d19d30808b904a6cb1929bca648c061ba438c39f296c2a8ca083229c49f27 - languageName: node - linkType: hard - -"is-array-buffer@npm:^3.0.1, is-array-buffer@npm:^3.0.2": - version: 3.0.2 - resolution: "is-array-buffer@npm:3.0.2" - dependencies: - call-bind: ^1.0.2 - get-intrinsic: ^1.2.0 - is-typed-array: ^1.1.10 - checksum: dcac9dda66ff17df9cabdc58214172bf41082f956eab30bb0d86bc0fab1e44b690fc8e1f855cf2481245caf4e8a5a006a982a71ddccec84032ed41f9d8da8c14 - languageName: node - linkType: hard - -"is-arrayish@npm:^0.2.1": - version: 0.2.1 - resolution: "is-arrayish@npm:0.2.1" - checksum: eef4417e3c10e60e2c810b6084942b3ead455af16c4509959a27e490e7aee87cfb3f38e01bbde92220b528a0ee1a18d52b787e1458ee86174d8c7f0e58cd488f - languageName: node - linkType: hard - -"is-bigint@npm:^1.0.1": - version: 1.0.4 - resolution: "is-bigint@npm:1.0.4" - dependencies: - has-bigints: ^1.0.1 - checksum: c56edfe09b1154f8668e53ebe8252b6f185ee852a50f9b41e8d921cb2bed425652049fbe438723f6cb48a63ca1aa051e948e7e401e093477c99c84eba244f666 - languageName: node - linkType: hard - -"is-boolean-object@npm:^1.1.0": - version: 1.1.2 - resolution: "is-boolean-object@npm:1.1.2" - dependencies: - call-bind: ^1.0.2 - has-tostringtag: ^1.0.0 - checksum: c03b23dbaacadc18940defb12c1c0e3aaece7553ef58b162a0f6bba0c2a7e1551b59f365b91e00d2dbac0522392d576ef322628cb1d036a0fe51eb466db67222 - languageName: node - linkType: hard - -"is-buffer@npm:^2.0.0": - version: 2.0.5 - resolution: "is-buffer@npm:2.0.5" - checksum: 764c9ad8b523a9f5a32af29bdf772b08eb48c04d2ad0a7240916ac2688c983bf5f8504bf25b35e66240edeb9d9085461f9b5dae1f3d2861c6b06a65fe983de42 - languageName: node - linkType: hard - -"is-callable@npm:^1.1.3, is-callable@npm:^1.1.4, is-callable@npm:^1.2.7": - version: 1.2.7 - resolution: "is-callable@npm:1.2.7" - checksum: 61fd57d03b0d984e2ed3720fb1c7a897827ea174bd44402878e059542ea8c4aeedee0ea0985998aa5cc2736b2fa6e271c08587addb5b3959ac52cf665173d1ac - languageName: node - linkType: hard - -"is-core-module@npm:^2.11.0, is-core-module@npm:^2.9.0": - version: 2.11.0 - resolution: "is-core-module@npm:2.11.0" - dependencies: - has: ^1.0.3 - checksum: f96fd490c6b48eb4f6d10ba815c6ef13f410b0ba6f7eb8577af51697de523e5f2cd9de1c441b51d27251bf0e4aebc936545e33a5d26d5d51f28d25698d4a8bab - languageName: node - linkType: hard - -"is-date-object@npm:^1.0.1, is-date-object@npm:^1.0.5": - version: 1.0.5 - resolution: "is-date-object@npm:1.0.5" - dependencies: - has-tostringtag: ^1.0.0 - checksum: baa9077cdf15eb7b58c79398604ca57379b2fc4cf9aa7a9b9e295278648f628c9b201400c01c5e0f7afae56507d741185730307cbe7cad3b9f90a77e5ee342fc - languageName: node - linkType: hard - -"is-extglob@npm:^2.1.1": - version: 2.1.1 - resolution: "is-extglob@npm:2.1.1" - checksum: df033653d06d0eb567461e58a7a8c9f940bd8c22274b94bf7671ab36df5719791aae15eef6d83bbb5e23283967f2f984b8914559d4449efda578c775c4be6f85 - languageName: node - linkType: hard - -"is-fullwidth-code-point@npm:^3.0.0": - version: 3.0.0 - resolution: "is-fullwidth-code-point@npm:3.0.0" - checksum: 44a30c29457c7fb8f00297bce733f0a64cd22eca270f83e58c105e0d015e45c019491a4ab2faef91ab51d4738c670daff901c799f6a700e27f7314029e99e348 - languageName: node - linkType: hard - -"is-glob@npm:4.0.3, is-glob@npm:^4.0.0, is-glob@npm:^4.0.1, is-glob@npm:^4.0.3": - version: 4.0.3 - resolution: "is-glob@npm:4.0.3" - dependencies: - is-extglob: ^2.1.1 - checksum: d381c1319fcb69d341cc6e6c7cd588e17cd94722d9a32dbd60660b993c4fb7d0f19438674e68dfec686d09b7c73139c9166b47597f846af387450224a8101ab4 - languageName: node - linkType: hard - -"is-interactive@npm:^1.0.0": - version: 1.0.0 - resolution: "is-interactive@npm:1.0.0" - checksum: 824808776e2d468b2916cdd6c16acacebce060d844c35ca6d82267da692e92c3a16fdba624c50b54a63f38bdc4016055b6f443ce57d7147240de4f8cdabaf6f9 - languageName: node - linkType: hard - -"is-lambda@npm:^1.0.1": - version: 1.0.1 - resolution: "is-lambda@npm:1.0.1" - checksum: 93a32f01940220532e5948538699ad610d5924ac86093fcee83022252b363eb0cc99ba53ab084a04e4fb62bf7b5731f55496257a4c38adf87af9c4d352c71c35 - languageName: node - linkType: hard - -"is-lower-case@npm:^2.0.2": - version: 2.0.2 - resolution: "is-lower-case@npm:2.0.2" - dependencies: - tslib: ^2.0.3 - checksum: ba57dd1201e15fd9b590654736afccf1b3b68e919f40c23ef13b00ebcc639b1d9c2f81fe86415bff3e8eccffec459786c9ac9dc8f3a19cfa4484206c411c1d7d - languageName: node - linkType: hard - -"is-map@npm:^2.0.1, is-map@npm:^2.0.2": - version: 2.0.2 - resolution: "is-map@npm:2.0.2" - checksum: ace3d0ecd667bbdefdb1852de601268f67f2db725624b1958f279316e13fecb8fa7df91fd60f690d7417b4ec180712f5a7ee967008e27c65cfd475cc84337728 - languageName: node - linkType: hard - -"is-negative-zero@npm:^2.0.2": - version: 2.0.2 - resolution: "is-negative-zero@npm:2.0.2" - checksum: f3232194c47a549da60c3d509c9a09be442507616b69454716692e37ae9f37c4dea264fb208ad0c9f3efd15a796a46b79df07c7e53c6227c32170608b809149a - languageName: node - linkType: hard - -"is-number-object@npm:^1.0.4": - version: 1.0.7 - resolution: "is-number-object@npm:1.0.7" - dependencies: - has-tostringtag: ^1.0.0 - checksum: d1e8d01bb0a7134c74649c4e62da0c6118a0bfc6771ea3c560914d52a627873e6920dd0fd0ebc0e12ad2ff4687eac4c308f7e80320b973b2c8a2c8f97a7524f7 - languageName: node - linkType: hard - -"is-number@npm:^7.0.0": - version: 7.0.0 - resolution: "is-number@npm:7.0.0" - checksum: 456ac6f8e0f3111ed34668a624e45315201dff921e5ac181f8ec24923b99e9f32ca1a194912dc79d539c97d33dba17dc635202ff0b2cf98326f608323276d27a - languageName: node - linkType: hard - -"is-path-inside@npm:^3.0.3": - version: 3.0.3 - resolution: "is-path-inside@npm:3.0.3" - checksum: abd50f06186a052b349c15e55b182326f1936c89a78bf6c8f2b707412517c097ce04bc49a0ca221787bc44e1049f51f09a2ffb63d22899051988d3a618ba13e9 - languageName: node - linkType: hard - -"is-plain-obj@npm:^4.0.0": - version: 4.1.0 - resolution: "is-plain-obj@npm:4.1.0" - checksum: 6dc45da70d04a81f35c9310971e78a6a3c7a63547ef782e3a07ee3674695081b6ca4e977fbb8efc48dae3375e0b34558d2bcd722aec9bddfa2d7db5b041be8ce - languageName: node - linkType: hard - -"is-regex@npm:^1.1.4": - version: 1.1.4 - resolution: "is-regex@npm:1.1.4" - dependencies: - call-bind: ^1.0.2 - has-tostringtag: ^1.0.0 - checksum: 362399b33535bc8f386d96c45c9feb04cf7f8b41c182f54174c1a45c9abbbe5e31290bbad09a458583ff6bf3b2048672cdb1881b13289569a7c548370856a652 - languageName: node - linkType: hard - -"is-relative@npm:^1.0.0": - version: 1.0.0 - resolution: "is-relative@npm:1.0.0" - dependencies: - is-unc-path: ^1.0.0 - checksum: 3271a0df109302ef5e14a29dcd5d23d9788e15ade91a40b942b035827ffbb59f7ce9ff82d036ea798541a52913cbf9d2d0b66456340887b51f3542d57b5a4c05 - languageName: node - linkType: hard - -"is-set@npm:^2.0.1, is-set@npm:^2.0.2": - version: 2.0.2 - resolution: "is-set@npm:2.0.2" - checksum: b64343faf45e9387b97a6fd32be632ee7b269bd8183701f3b3f5b71a7cf00d04450ed8669d0bd08753e08b968beda96fca73a10fd0ff56a32603f64deba55a57 - languageName: node - linkType: hard - -"is-shared-array-buffer@npm:^1.0.2": - version: 1.0.2 - resolution: "is-shared-array-buffer@npm:1.0.2" - dependencies: - call-bind: ^1.0.2 - checksum: 9508929cf14fdc1afc9d61d723c6e8d34f5e117f0bffda4d97e7a5d88c3a8681f633a74f8e3ad1fe92d5113f9b921dc5ca44356492079612f9a247efbce7032a - languageName: node - linkType: hard - -"is-string@npm:^1.0.5, is-string@npm:^1.0.7": - version: 1.0.7 - resolution: "is-string@npm:1.0.7" - dependencies: - has-tostringtag: ^1.0.0 - checksum: 323b3d04622f78d45077cf89aab783b2f49d24dc641aa89b5ad1a72114cfeff2585efc8c12ef42466dff32bde93d839ad321b26884cf75e5a7892a938b089989 - languageName: node - linkType: hard - -"is-symbol@npm:^1.0.2, is-symbol@npm:^1.0.3": - version: 1.0.4 - resolution: "is-symbol@npm:1.0.4" - dependencies: - has-symbols: ^1.0.2 - checksum: 92805812ef590738d9de49d677cd17dfd486794773fb6fa0032d16452af46e9b91bb43ffe82c983570f015b37136f4b53b28b8523bfb10b0ece7a66c31a54510 - languageName: node - linkType: hard - -"is-typed-array@npm:^1.1.10, is-typed-array@npm:^1.1.9": - version: 1.1.10 - resolution: "is-typed-array@npm:1.1.10" - dependencies: - available-typed-arrays: ^1.0.5 - call-bind: ^1.0.2 - for-each: ^0.3.3 - gopd: ^1.0.1 - has-tostringtag: ^1.0.0 - checksum: aac6ecb59d4c56a1cdeb69b1f129154ef462bbffe434cb8a8235ca89b42f258b7ae94073c41b3cb7bce37f6a1733ad4499f07882d5d5093a7ba84dfc4ebb8017 - languageName: node - linkType: hard - -"is-unc-path@npm:^1.0.0": - version: 1.0.0 - resolution: "is-unc-path@npm:1.0.0" - dependencies: - unc-path-regex: ^0.1.2 - checksum: e8abfde203f7409f5b03a5f1f8636e3a41e78b983702ef49d9343eb608cdfe691429398e8815157519b987b739bcfbc73ae7cf4c8582b0ab66add5171088eab6 - languageName: node - linkType: hard - -"is-unicode-supported@npm:^0.1.0": - version: 0.1.0 - resolution: "is-unicode-supported@npm:0.1.0" - checksum: a2aab86ee7712f5c2f999180daaba5f361bdad1efadc9610ff5b8ab5495b86e4f627839d085c6530363c6d6d4ecbde340fb8e54bdb83da4ba8e0865ed5513c52 - languageName: node - linkType: hard - -"is-upper-case@npm:^2.0.2": - version: 2.0.2 - resolution: "is-upper-case@npm:2.0.2" - dependencies: - tslib: ^2.0.3 - checksum: cf4fd43c00c2e72cd5cff911923070b89f0933b464941bd782e2315385f80b5a5acd772db3b796542e5e3cfed735f4dffd88c54d62db1ebfc5c3daa7b1af2bc6 - languageName: node - linkType: hard - -"is-weakmap@npm:^2.0.1": - version: 2.0.1 - resolution: "is-weakmap@npm:2.0.1" - checksum: 1222bb7e90c32bdb949226e66d26cb7bce12e1e28e3e1b40bfa6b390ba3e08192a8664a703dff2a00a84825f4e022f9cd58c4599ff9981ab72b1d69479f4f7f6 - languageName: node - linkType: hard - -"is-weakref@npm:^1.0.2": - version: 1.0.2 - resolution: "is-weakref@npm:1.0.2" - dependencies: - call-bind: ^1.0.2 - checksum: 95bd9a57cdcb58c63b1c401c60a474b0f45b94719c30f548c891860f051bc2231575c290a6b420c6bc6e7ed99459d424c652bd5bf9a1d5259505dc35b4bf83de - languageName: node - linkType: hard - -"is-weakset@npm:^2.0.1": - version: 2.0.2 - resolution: "is-weakset@npm:2.0.2" - dependencies: - call-bind: ^1.0.2 - get-intrinsic: ^1.1.1 - checksum: 5d8698d1fa599a0635d7ca85be9c26d547b317ed8fd83fc75f03efbe75d50001b5eececb1e9971de85fcde84f69ae6f8346bc92d20d55d46201d328e4c74a367 - languageName: node - linkType: hard - -"is-windows@npm:^1.0.1": - version: 1.0.2 - resolution: "is-windows@npm:1.0.2" - checksum: 438b7e52656fe3b9b293b180defb4e448088e7023a523ec21a91a80b9ff8cdb3377ddb5b6e60f7c7de4fa8b63ab56e121b6705fe081b3cf1b828b0a380009ad7 - languageName: node - linkType: hard - -"isarray@npm:^2.0.5": - version: 2.0.5 - resolution: "isarray@npm:2.0.5" - checksum: bd5bbe4104438c4196ba58a54650116007fa0262eccef13a4c55b2e09a5b36b59f1e75b9fcc49883dd9d4953892e6fc007eef9e9155648ceea036e184b0f930a - languageName: node - linkType: hard - -"isexe@npm:^2.0.0": - version: 2.0.0 - resolution: "isexe@npm:2.0.0" - checksum: 26bf6c5480dda5161c820c5b5c751ae1e766c587b1f951ea3fcfc973bafb7831ae5b54a31a69bd670220e42e99ec154475025a468eae58ea262f813fdc8d1c62 - languageName: node - linkType: hard - -"isomorphic-fetch@npm:^3.0.0": - version: 3.0.0 - resolution: "isomorphic-fetch@npm:3.0.0" - dependencies: - node-fetch: ^2.6.1 - whatwg-fetch: ^3.4.1 - checksum: e5ab79a56ce5af6ddd21265f59312ad9a4bc5a72cebc98b54797b42cb30441d5c5f8d17c5cd84a99e18101c8af6f90c081ecb8d12fd79e332be1778d58486d75 - languageName: node - linkType: hard - -"isomorphic-ws@npm:5.0.0, isomorphic-ws@npm:^5.0.0": - version: 5.0.0 - resolution: "isomorphic-ws@npm:5.0.0" - peerDependencies: - ws: "*" - checksum: e20eb2aee09ba96247465fda40c6d22c1153394c0144fa34fe6609f341af4c8c564f60ea3ba762335a7a9c306809349f9b863c8beedf2beea09b299834ad5398 - languageName: node - linkType: hard - -"iterall@npm:^1.2.2": - version: 1.3.0 - resolution: "iterall@npm:1.3.0" - checksum: c78b99678f8c99be488cca7f33e4acca9b72c1326e050afbaf023f086e55619ee466af0464af94a0cb3f292e60cb5bac53a8fd86bd4249ecad26e09f17bb158b - languageName: node - linkType: hard - -"jiti@npm:1.17.1": - version: 1.17.1 - resolution: "jiti@npm:1.17.1" - bin: - jiti: bin/jiti.js - checksum: 56c6d8488e7e9cc6ee66a0f0d5e18db6669cb12b2e93364f393442289a9bc75a8e8c796249f59015e01c3ebdf9478e2ca8b76c30e29072c678ee00d39de757c7 - languageName: node - linkType: hard - -"jiti@npm:^1.17.1": - version: 1.18.2 - resolution: "jiti@npm:1.18.2" - bin: - jiti: bin/jiti.js - checksum: 46c41cd82d01c6efdee3fc0ae9b3e86ed37457192d6366f19157d863d64961b07982ab04e9d5879576a1af99cc4d132b0b73b336094f86a5ce9fb1029ec2d29f - languageName: node - linkType: hard - -"jose@npm:^4.11.4": - version: 4.13.1 - resolution: "jose@npm:4.13.1" - checksum: 89be959573beee69bd443493887d78799fd42340b45afa2c6681beda30314bcdfa5575f6977203c199e4c3e0ec2fc18d3c94745e7f0d59db51dedfae0efee63d - languageName: node - linkType: hard - -"js-sdsl@npm:^4.1.4": - version: 4.3.0 - resolution: "js-sdsl@npm:4.3.0" - checksum: ce908257cf6909e213af580af3a691a736f5ee8b16315454768f917a682a4ea0c11bde1b241bbfaecedc0eb67b72101b2c2df2ffaed32aed5d539fca816f054e - languageName: node - linkType: hard - -"js-tokens@npm:^3.0.0 || ^4.0.0, js-tokens@npm:^4.0.0": - version: 4.0.0 - resolution: "js-tokens@npm:4.0.0" - checksum: 8a95213a5a77deb6cbe94d86340e8d9ace2b93bc367790b260101d2f36a2eaf4e4e22d9fa9cf459b38af3a32fb4190e638024cf82ec95ef708680e405ea7cc78 - languageName: node - linkType: hard - -"js-yaml@npm:^4.0.0, js-yaml@npm:^4.1.0": - version: 4.1.0 - resolution: "js-yaml@npm:4.1.0" - dependencies: - argparse: ^2.0.1 - bin: - js-yaml: bin/js-yaml.js - checksum: c7830dfd456c3ef2c6e355cc5a92e6700ceafa1d14bba54497b34a99f0376cecbb3e9ac14d3e5849b426d5a5140709a66237a8c991c675431271c4ce5504151a - languageName: node - linkType: hard - -"jsesc@npm:^2.5.1": - version: 2.5.2 - resolution: "jsesc@npm:2.5.2" - bin: - jsesc: bin/jsesc - checksum: 4dc190771129e12023f729ce20e1e0bfceac84d73a85bc3119f7f938843fe25a4aeccb54b6494dce26fcf263d815f5f31acdefac7cc9329efb8422a4f4d9fa9d - languageName: node - linkType: hard - -"jsesc@npm:~0.5.0": - version: 0.5.0 - resolution: "jsesc@npm:0.5.0" - bin: - jsesc: bin/jsesc - checksum: b8b44cbfc92f198ad972fba706ee6a1dfa7485321ee8c0b25f5cedd538dcb20cde3197de16a7265430fce8277a12db066219369e3d51055038946039f6e20e17 - languageName: node - linkType: hard - -"json-parse-even-better-errors@npm:^2.3.0": - version: 2.3.1 - resolution: "json-parse-even-better-errors@npm:2.3.1" - checksum: 798ed4cf3354a2d9ccd78e86d2169515a0097a5c133337807cdf7f1fc32e1391d207ccfc276518cc1d7d8d4db93288b8a50ba4293d212ad1336e52a8ec0a941f - languageName: node - linkType: hard - -"json-schema-traverse@npm:^0.4.1": - version: 0.4.1 - resolution: "json-schema-traverse@npm:0.4.1" - checksum: 7486074d3ba247769fda17d5181b345c9fb7d12e0da98b22d1d71a5db9698d8b4bd900a3ec1a4ffdd60846fc2556274a5c894d0c48795f14cb03aeae7b55260b - languageName: node - linkType: hard - -"json-stable-stringify-without-jsonify@npm:^1.0.1": - version: 1.0.1 - resolution: "json-stable-stringify-without-jsonify@npm:1.0.1" - checksum: cff44156ddce9c67c44386ad5cddf91925fe06b1d217f2da9c4910d01f358c6e3989c4d5a02683c7a5667f9727ff05831f7aa8ae66c8ff691c556f0884d49215 - languageName: node - linkType: hard - -"json-stable-stringify@npm:^1.0.1": - version: 1.0.2 - resolution: "json-stable-stringify@npm:1.0.2" - dependencies: - jsonify: ^0.0.1 - checksum: ec10863493fb728481ed7576551382768a173d5b884758db530def00523b862083a3fd70fee24b39e2f47f5f502e22f9a1489dd66da3535b63bf6241dbfca800 - languageName: node - linkType: hard - -"json-to-pretty-yaml@npm:^1.2.2": - version: 1.2.2 - resolution: "json-to-pretty-yaml@npm:1.2.2" - dependencies: - remedial: ^1.0.7 - remove-trailing-spaces: ^1.0.6 - checksum: 4b78480f426e176e5fdac073e05877683bb026f1175deb52d0941b992f9c91a58a812c020f00aa67ba1fc7cadb220539a264146f222e48a48c8bb2a0931cac9b - languageName: node - linkType: hard - -"json5@npm:^1.0.2": - version: 1.0.2 - resolution: "json5@npm:1.0.2" - dependencies: - minimist: ^1.2.0 - bin: - json5: lib/cli.js - checksum: 866458a8c58a95a49bef3adba929c625e82532bcff1fe93f01d29cb02cac7c3fe1f4b79951b7792c2da9de0b32871a8401a6e3c5b36778ad852bf5b8a61165d7 - languageName: node - linkType: hard - -"json5@npm:^2.2.2": - version: 2.2.3 - resolution: "json5@npm:2.2.3" - bin: - json5: lib/cli.js - checksum: 2a7436a93393830bce797d4626275152e37e877b265e94ca69c99e3d20c2b9dab021279146a39cdb700e71b2dd32a4cebd1514cd57cee102b1af906ce5040349 - languageName: node - linkType: hard - -"jsonify@npm:^0.0.1": - version: 0.0.1 - resolution: "jsonify@npm:0.0.1" - checksum: 027287e1c0294fce15f18c0ff990cfc2318e7f01fb76515f784d5cd0784abfec6fc5c2355c3a2f2cb0ad7f4aa2f5b74ebbfe4e80476c35b2d13cabdb572e1134 - languageName: node - linkType: hard - -"jsx-ast-utils@npm:^2.4.1 || ^3.0.0, jsx-ast-utils@npm:^3.3.3": - version: 3.3.3 - resolution: "jsx-ast-utils@npm:3.3.3" - dependencies: - array-includes: ^3.1.5 - object.assign: ^4.1.3 - checksum: a2ed78cac49a0f0c4be8b1eafe3c5257a1411341d8e7f1ac740debae003de04e5f6372bfcfbd9d082e954ffd99aac85bcda85b7c6bc11609992483f4cdc0f745 - languageName: node - linkType: hard - -"kleur@npm:^4.0.3": - version: 4.1.5 - resolution: "kleur@npm:4.1.5" - checksum: 1dc476e32741acf0b1b5b0627ffd0d722e342c1b0da14de3e8ae97821327ca08f9fb944542fb3c126d90ac5f27f9d804edbe7c585bf7d12ef495d115e0f22c12 - languageName: node - linkType: hard - -"language-subtag-registry@npm:~0.3.2": - version: 0.3.22 - resolution: "language-subtag-registry@npm:0.3.22" - checksum: 8ab70a7e0e055fe977ac16ea4c261faec7205ac43db5e806f72e5b59606939a3b972c4bd1e10e323b35d6ffa97c3e1c4c99f6553069dad2dfdd22020fa3eb56a - languageName: node - linkType: hard - -"language-tags@npm:=1.0.5": - version: 1.0.5 - resolution: "language-tags@npm:1.0.5" - dependencies: - language-subtag-registry: ~0.3.2 - checksum: c81b5d8b9f5f9cfd06ee71ada6ddfe1cf83044dd5eeefcd1e420ad491944da8957688db4a0a9bc562df4afdc2783425cbbdfd152c01d93179cf86888903123cf - languageName: node - linkType: hard - -"levn@npm:^0.4.1": - version: 0.4.1 - resolution: "levn@npm:0.4.1" - dependencies: - prelude-ls: ^1.2.1 - type-check: ~0.4.0 - checksum: 12c5021c859bd0f5248561bf139121f0358285ec545ebf48bb3d346820d5c61a4309535c7f387ed7d84361cf821e124ce346c6b7cef8ee09a67c1473b46d0fc4 - languageName: node - linkType: hard - -"lines-and-columns@npm:^1.1.6": - version: 1.2.4 - resolution: "lines-and-columns@npm:1.2.4" - checksum: 0c37f9f7fa212b38912b7145e1cd16a5f3cd34d782441c3e6ca653485d326f58b3caccda66efce1c5812bde4961bbde3374fae4b0d11bf1226152337f3894aa5 - languageName: node - linkType: hard - -"listr2@npm:^4.0.5": - version: 4.0.5 - resolution: "listr2@npm:4.0.5" - dependencies: - cli-truncate: ^2.1.0 - colorette: ^2.0.16 - log-update: ^4.0.0 - p-map: ^4.0.0 - rfdc: ^1.3.0 - rxjs: ^7.5.5 - through: ^2.3.8 - wrap-ansi: ^7.0.0 - peerDependencies: - enquirer: ">= 2.3.0 < 3" - peerDependenciesMeta: - enquirer: - optional: true - checksum: 7af31851abe25969ef0581c6db808117e36af15b131401795182427769d9824f451ba9e8aff6ccd25b6a4f6c8796f816292caf08e5f1f9b1775e8e9c313dc6c5 - languageName: node - linkType: hard - -"locate-path@npm:^5.0.0": - version: 5.0.0 - resolution: "locate-path@npm:5.0.0" - dependencies: - p-locate: ^4.1.0 - checksum: 83e51725e67517287d73e1ded92b28602e3ae5580b301fe54bfb76c0c723e3f285b19252e375712316774cf52006cb236aed5704692c32db0d5d089b69696e30 - languageName: node - linkType: hard - -"locate-path@npm:^6.0.0": - version: 6.0.0 - resolution: "locate-path@npm:6.0.0" - dependencies: - p-locate: ^5.0.0 - checksum: 72eb661788a0368c099a184c59d2fee760b3831c9c1c33955e8a19ae4a21b4116e53fa736dc086cdeb9fce9f7cc508f2f92d2d3aae516f133e16a2bb59a39f5a - languageName: node - linkType: hard - -"lodash.debounce@npm:^4.0.8": - version: 4.0.8 - resolution: "lodash.debounce@npm:4.0.8" - checksum: a3f527d22c548f43ae31c861ada88b2637eb48ac6aa3eb56e82d44917971b8aa96fbb37aa60efea674dc4ee8c42074f90f7b1f772e9db375435f6c83a19b3bc6 - languageName: node - linkType: hard - -"lodash.merge@npm:^4.6.2": - version: 4.6.2 - resolution: "lodash.merge@npm:4.6.2" - checksum: ad580b4bdbb7ca1f7abf7e1bce63a9a0b98e370cf40194b03380a46b4ed799c9573029599caebc1b14e3f24b111aef72b96674a56cfa105e0f5ac70546cdc005 - languageName: node - linkType: hard - -"lodash.mergewith@npm:^4.6.2": - version: 4.6.2 - resolution: "lodash.mergewith@npm:4.6.2" - checksum: a6db2a9339752411f21b956908c404ec1e088e783a65c8b29e30ae5b3b6384f82517662d6f425cc97c2070b546cc2c7daaa8d33f78db7b6e9be06cd834abdeb8 - languageName: node - linkType: hard - -"lodash@npm:4.17.21, lodash@npm:^4.17.11, lodash@npm:^4.17.20, lodash@npm:^4.17.21, lodash@npm:~4.17.0": - version: 4.17.21 - resolution: "lodash@npm:4.17.21" - checksum: eb835a2e51d381e561e508ce932ea50a8e5a68f4ebdd771ea240d3048244a8d13658acbd502cd4829768c56f2e16bdd4340b9ea141297d472517b83868e677f7 - languageName: node - linkType: hard - -"log-symbols@npm:^4.0.0, log-symbols@npm:^4.1.0": - version: 4.1.0 - resolution: "log-symbols@npm:4.1.0" - dependencies: - chalk: ^4.1.0 - is-unicode-supported: ^0.1.0 - checksum: fce1497b3135a0198803f9f07464165e9eb83ed02ceb2273930a6f8a508951178d8cf4f0378e9d28300a2ed2bc49050995d2bd5f53ab716bb15ac84d58c6ef74 - languageName: node - linkType: hard - -"log-update@npm:^4.0.0": - version: 4.0.0 - resolution: "log-update@npm:4.0.0" - dependencies: - ansi-escapes: ^4.3.0 - cli-cursor: ^3.1.0 - slice-ansi: ^4.0.0 - wrap-ansi: ^6.2.0 - checksum: ae2f85bbabc1906034154fb7d4c4477c79b3e703d22d78adee8b3862fa913942772e7fa11713e3d96fb46de4e3cabefbf5d0a544344f03b58d3c4bff52aa9eb2 - languageName: node - linkType: hard - -"loose-envify@npm:^1.0.0, loose-envify@npm:^1.1.0, loose-envify@npm:^1.4.0": - version: 1.4.0 - resolution: "loose-envify@npm:1.4.0" - dependencies: - js-tokens: ^3.0.0 || ^4.0.0 - bin: - loose-envify: cli.js - checksum: 6517e24e0cad87ec9888f500c5b5947032cdfe6ef65e1c1936a0c48a524b81e65542c9c3edc91c97d5bddc806ee2a985dbc79be89215d613b1de5db6d1cfe6f4 - languageName: node - linkType: hard - -"lower-case-first@npm:^2.0.2": - version: 2.0.2 - resolution: "lower-case-first@npm:2.0.2" - dependencies: - tslib: ^2.0.3 - checksum: 33e3da1098ddda219ce125d4ab7a78a944972c0ee8872e95b6ccc35df8ad405284ab233b0ba4d72315ad1a06fe2f0d418ee4cba9ec1ef1c386dea78899fc8958 - languageName: node - linkType: hard - -"lower-case@npm:^2.0.2": - version: 2.0.2 - resolution: "lower-case@npm:2.0.2" - dependencies: - tslib: ^2.0.3 - checksum: 83a0a5f159ad7614bee8bf976b96275f3954335a84fad2696927f609ddae902802c4f3312d86668722e668bef41400254807e1d3a7f2e8c3eede79691aa1f010 - languageName: node - linkType: hard - -"lru-cache@npm:^5.1.1": - version: 5.1.1 - resolution: "lru-cache@npm:5.1.1" - dependencies: - yallist: ^3.0.2 - checksum: c154ae1cbb0c2206d1501a0e94df349653c92c8cbb25236d7e85190bcaf4567a03ac6eb43166fabfa36fd35623694da7233e88d9601fbf411a9a481d85dbd2cb - languageName: node - linkType: hard - -"lru-cache@npm:^6.0.0": - version: 6.0.0 - resolution: "lru-cache@npm:6.0.0" - dependencies: - yallist: ^4.0.0 - checksum: f97f499f898f23e4585742138a22f22526254fdba6d75d41a1c2526b3b6cc5747ef59c5612ba7375f42aca4f8461950e925ba08c991ead0651b4918b7c978297 - languageName: node - linkType: hard - -"lru-cache@npm:^7.7.1": - version: 7.18.3 - resolution: "lru-cache@npm:7.18.3" - checksum: e550d772384709deea3f141af34b6d4fa392e2e418c1498c078de0ee63670f1f46f5eee746e8ef7e69e1c895af0d4224e62ee33e66a543a14763b0f2e74c1356 - languageName: node - linkType: hard - -"magic-string@npm:^0.27.0": - version: 0.27.0 - resolution: "magic-string@npm:0.27.0" - dependencies: - "@jridgewell/sourcemap-codec": ^1.4.13 - checksum: 273faaa50baadb7a2df6e442eac34ad611304fc08fe16e24fe2e472fd944bfcb73ffb50d2dc972dc04e92784222002af46868cb9698b1be181c81830fd95a13e - languageName: node - linkType: hard - -"make-fetch-happen@npm:^10.0.3": - version: 10.2.1 - resolution: "make-fetch-happen@npm:10.2.1" - dependencies: - agentkeepalive: ^4.2.1 - cacache: ^16.1.0 - http-cache-semantics: ^4.1.0 - http-proxy-agent: ^5.0.0 - https-proxy-agent: ^5.0.0 - is-lambda: ^1.0.1 - lru-cache: ^7.7.1 - minipass: ^3.1.6 - minipass-collect: ^1.0.2 - minipass-fetch: ^2.0.3 - minipass-flush: ^1.0.5 - minipass-pipeline: ^1.2.4 - negotiator: ^0.6.3 - promise-retry: ^2.0.1 - socks-proxy-agent: ^7.0.0 - ssri: ^9.0.0 - checksum: 2332eb9a8ec96f1ffeeea56ccefabcb4193693597b132cd110734d50f2928842e22b84cfa1508e921b8385cdfd06dda9ad68645fed62b50fff629a580f5fb72c - languageName: node - linkType: hard - -"map-cache@npm:^0.2.0": - version: 0.2.2 - resolution: "map-cache@npm:0.2.2" - checksum: 3067cea54285c43848bb4539f978a15dedc63c03022abeec6ef05c8cb6829f920f13b94bcaf04142fc6a088318e564c4785704072910d120d55dbc2e0c421969 - languageName: node - linkType: hard - -"markdown-to-jsx@npm:^7.1.5, markdown-to-jsx@npm:^7.2.0": - version: 7.2.0 - resolution: "markdown-to-jsx@npm:7.2.0" - peerDependencies: - react: ">= 0.14.0" - checksum: ea417e684d7eec9f1beebc9423aba377116ef77c3cd83a2d622df1b9030ffef99aa9b3f431192b94f3237943a33560e6dda9be8a4c1d25187518d09986dad22f - languageName: node - linkType: hard - -"mdast-util-definitions@npm:^5.0.0": - version: 5.1.2 - resolution: "mdast-util-definitions@npm:5.1.2" - dependencies: - "@types/mdast": ^3.0.0 - "@types/unist": ^2.0.0 - unist-util-visit: ^4.0.0 - checksum: 2544daccab744ea1ede76045c2577ae4f1cc1b9eb1ea51ab273fe1dca8db5a8d6f50f87759c0ce6484975914b144b7f40316f805cb9c86223a78db8de0b77bae - languageName: node - linkType: hard - -"mdast-util-from-markdown@npm:^1.0.0": - version: 1.3.0 - resolution: "mdast-util-from-markdown@npm:1.3.0" - dependencies: - "@types/mdast": ^3.0.0 - "@types/unist": ^2.0.0 - decode-named-character-reference: ^1.0.0 - mdast-util-to-string: ^3.1.0 - micromark: ^3.0.0 - micromark-util-decode-numeric-character-reference: ^1.0.0 - micromark-util-decode-string: ^1.0.0 - micromark-util-normalize-identifier: ^1.0.0 - micromark-util-symbol: ^1.0.0 - micromark-util-types: ^1.0.0 - unist-util-stringify-position: ^3.0.0 - uvu: ^0.5.0 - checksum: cc971d1ad381150f6504fd753fbcffcc64c0abb527540ce343625c2bba76104505262122ef63d14ab66eb47203f323267017c6d09abfa8535ee6a8e14069595f - languageName: node - linkType: hard - -"mdast-util-to-hast@npm:^12.1.0": - version: 12.3.0 - resolution: "mdast-util-to-hast@npm:12.3.0" - dependencies: - "@types/hast": ^2.0.0 - "@types/mdast": ^3.0.0 - mdast-util-definitions: ^5.0.0 - micromark-util-sanitize-uri: ^1.1.0 - trim-lines: ^3.0.0 - unist-util-generated: ^2.0.0 - unist-util-position: ^4.0.0 - unist-util-visit: ^4.0.0 - checksum: ea40c9f07dd0b731754434e81c913590c611b1fd753fa02550a1492aadfc30fb3adecaf62345ebb03cea2ddd250c15ab6e578fffde69c19955c9b87b10f2a9bb - languageName: node - linkType: hard - -"mdast-util-to-string@npm:^3.1.0": - version: 3.1.1 - resolution: "mdast-util-to-string@npm:3.1.1" - dependencies: - "@types/mdast": ^3.0.0 - checksum: 5e9375e1757ebf2950e122ef3538e4257ed2b6f43ab1d3e9c45db5dd5d5b5d14fd041490afcde00934f1cdb4b99877597ae04eb810d313ec7b38c6009058dddd - languageName: node - linkType: hard - -"merge2@npm:^1.3.0, merge2@npm:^1.4.1": - version: 1.4.1 - resolution: "merge2@npm:1.4.1" - checksum: 7268db63ed5169466540b6fb947aec313200bcf6d40c5ab722c22e242f651994619bcd85601602972d3c85bd2cc45a358a4c61937e9f11a061919a1da569b0c2 - languageName: node - linkType: hard - -"meros@npm:^1.2.1": - version: 1.2.1 - resolution: "meros@npm:1.2.1" - peerDependencies: - "@types/node": ">=13" - peerDependenciesMeta: - "@types/node": - optional: true - checksum: 2201c3f7c58ad2a5b5f7d6b1c644d79bde513e25cb64b51a8c41381ec74bc02cd3423425e34f60c96bf3991f1ec51d65dc8b8e3354cbb060cc9f8226b4666a5a - languageName: node - linkType: hard - -"micromark-core-commonmark@npm:^1.0.1": - version: 1.0.6 - resolution: "micromark-core-commonmark@npm:1.0.6" - dependencies: - decode-named-character-reference: ^1.0.0 - micromark-factory-destination: ^1.0.0 - micromark-factory-label: ^1.0.0 - micromark-factory-space: ^1.0.0 - micromark-factory-title: ^1.0.0 - micromark-factory-whitespace: ^1.0.0 - micromark-util-character: ^1.0.0 - micromark-util-chunked: ^1.0.0 - micromark-util-classify-character: ^1.0.0 - micromark-util-html-tag-name: ^1.0.0 - micromark-util-normalize-identifier: ^1.0.0 - micromark-util-resolve-all: ^1.0.0 - micromark-util-subtokenize: ^1.0.0 - micromark-util-symbol: ^1.0.0 - micromark-util-types: ^1.0.1 - uvu: ^0.5.0 - checksum: 4b483c46077f696ed310f6d709bb9547434c218ceb5c1220fde1707175f6f68b44da15ab8668f9c801e1a123210071e3af883a7d1215122c913fd626f122bfc2 - languageName: node - linkType: hard - -"micromark-factory-destination@npm:^1.0.0": - version: 1.0.0 - resolution: "micromark-factory-destination@npm:1.0.0" - dependencies: - micromark-util-character: ^1.0.0 - micromark-util-symbol: ^1.0.0 - micromark-util-types: ^1.0.0 - checksum: 8e733ae9c1c2342f14ff290bf09946e20f6f540117d80342377a765cac48df2ea5e748f33c8b07501ad7a43414b1a6597c8510ede2052b6bf1251fab89748e20 - languageName: node - linkType: hard - -"micromark-factory-label@npm:^1.0.0": - version: 1.0.2 - resolution: "micromark-factory-label@npm:1.0.2" - dependencies: - micromark-util-character: ^1.0.0 - micromark-util-symbol: ^1.0.0 - micromark-util-types: ^1.0.0 - uvu: ^0.5.0 - checksum: 957e9366bdc8dbc1437c0706ff96972fa985ab4b1274abcae12f6094f527cbf5c69e7f2304c23c7f4b96e311ff7911d226563b8b43dcfcd4091e8c985fb97ce6 - languageName: node - linkType: hard - -"micromark-factory-space@npm:^1.0.0": - version: 1.0.0 - resolution: "micromark-factory-space@npm:1.0.0" - dependencies: - micromark-util-character: ^1.0.0 - micromark-util-types: ^1.0.0 - checksum: 70d3aafde4e68ef4e509a3b644e9a29e4aada00801279e346577b008cbca06d78051bcd62aa7ea7425856ed73f09abd2b36607803055f726f52607ee7cb706b0 - languageName: node - linkType: hard - -"micromark-factory-title@npm:^1.0.0": - version: 1.0.2 - resolution: "micromark-factory-title@npm:1.0.2" - dependencies: - micromark-factory-space: ^1.0.0 - micromark-util-character: ^1.0.0 - micromark-util-symbol: ^1.0.0 - micromark-util-types: ^1.0.0 - uvu: ^0.5.0 - checksum: 9a9cf66babde0bad1e25d6c1087082bfde6dfc319a36cab67c89651cc1a53d0e21cdec83262b5a4c33bff49f0e3c8dc2a7bd464e991d40dbea166a8f9b37e5b2 - languageName: node - linkType: hard - -"micromark-factory-whitespace@npm:^1.0.0": - version: 1.0.0 - resolution: "micromark-factory-whitespace@npm:1.0.0" - dependencies: - micromark-factory-space: ^1.0.0 - micromark-util-character: ^1.0.0 - micromark-util-symbol: ^1.0.0 - micromark-util-types: ^1.0.0 - checksum: 0888386e6ea2dd665a5182c570d9b3d0a172d3f11694ca5a2a84e552149c9f1429f5b975ec26e1f0fa4388c55a656c9f359ce5e0603aff6175ba3e255076f20b - languageName: node - linkType: hard - -"micromark-util-character@npm:^1.0.0": - version: 1.1.0 - resolution: "micromark-util-character@npm:1.1.0" - dependencies: - micromark-util-symbol: ^1.0.0 - micromark-util-types: ^1.0.0 - checksum: 504a4e3321f69bddf3fec9f0c1058239fc23336bda5be31d532b150491eda47965a251b37f8a7a9db0c65933b3aaa49cf88044fb1028be3af7c5ee6212bf8d5f - languageName: node - linkType: hard - -"micromark-util-chunked@npm:^1.0.0": - version: 1.0.0 - resolution: "micromark-util-chunked@npm:1.0.0" - dependencies: - micromark-util-symbol: ^1.0.0 - checksum: c1efd56e8c4217bcf1c6f1a9fb9912b4a2a5503b00d031da902be922fb3fee60409ac53f11739991291357b2784fb0647ddfc74c94753a068646c0cb0fd71421 - languageName: node - linkType: hard - -"micromark-util-classify-character@npm:^1.0.0": - version: 1.0.0 - resolution: "micromark-util-classify-character@npm:1.0.0" - dependencies: - micromark-util-character: ^1.0.0 - micromark-util-symbol: ^1.0.0 - micromark-util-types: ^1.0.0 - checksum: 180446e6a1dec653f625ded028f244784e1db8d10ad05c5d70f08af9de393b4a03dc6cf6fa5ed8ccc9c24bbece7837abf3bf66681c0b4adf159364b7d5236dfd - languageName: node - linkType: hard - -"micromark-util-combine-extensions@npm:^1.0.0": - version: 1.0.0 - resolution: "micromark-util-combine-extensions@npm:1.0.0" - dependencies: - micromark-util-chunked: ^1.0.0 - micromark-util-types: ^1.0.0 - checksum: 5304a820ef75340e1be69d6ad167055b6ba9a3bafe8171e5945a935752f462415a9dd61eb3490220c055a8a11167209a45bfa73f278338b7d3d61fa1464d3f35 - languageName: node - linkType: hard - -"micromark-util-decode-numeric-character-reference@npm:^1.0.0": - version: 1.0.0 - resolution: "micromark-util-decode-numeric-character-reference@npm:1.0.0" - dependencies: - micromark-util-symbol: ^1.0.0 - checksum: f3ae2bb582a80f1e9d3face026f585c0c472335c064bd850bde152376f0394cb2831746749b6be6e0160f7d73626f67d10716026c04c87f402c0dd45a1a28633 - languageName: node - linkType: hard - -"micromark-util-decode-string@npm:^1.0.0": - version: 1.0.2 - resolution: "micromark-util-decode-string@npm:1.0.2" - dependencies: - decode-named-character-reference: ^1.0.0 - micromark-util-character: ^1.0.0 - micromark-util-decode-numeric-character-reference: ^1.0.0 - micromark-util-symbol: ^1.0.0 - checksum: 2dbb41c9691cc71505d39706405139fb7d6699429d577a524c7c248ac0cfd09d3dd212ad8e91c143a00b2896f26f81136edc67c5bda32d20446f0834d261b17a - languageName: node - linkType: hard - -"micromark-util-encode@npm:^1.0.0": - version: 1.0.1 - resolution: "micromark-util-encode@npm:1.0.1" - checksum: 9290583abfdc79ea3e7eb92c012c47a0e14327888f8aaa6f57ff79b3058d8e7743716b9d91abca3646f15ab3d78fdad9779fdb4ccf13349cd53309dfc845253a - languageName: node - linkType: hard - -"micromark-util-html-tag-name@npm:^1.0.0": - version: 1.1.0 - resolution: "micromark-util-html-tag-name@npm:1.1.0" - checksum: a9b783cec89ec813648d59799464c1950fe281ae797b2a965f98ad0167d7fa1a247718eff023b4c015f47211a172f9446b8e6b98aad50e3cd44a3337317dad2c - languageName: node - linkType: hard - -"micromark-util-normalize-identifier@npm:^1.0.0": - version: 1.0.0 - resolution: "micromark-util-normalize-identifier@npm:1.0.0" - dependencies: - micromark-util-symbol: ^1.0.0 - checksum: d7c09d5e8318fb72f194af72664bd84a48a2928e3550b2b21c8fbc0ec22524f2a72e0f6663d2b95dc189a6957d3d7759b60716e888909710767cd557be821f8b - languageName: node - linkType: hard - -"micromark-util-resolve-all@npm:^1.0.0": - version: 1.0.0 - resolution: "micromark-util-resolve-all@npm:1.0.0" - dependencies: - micromark-util-types: ^1.0.0 - checksum: 409667f2bd126ef8acce009270d2aecaaa5584c5807672bc657b09e50aa91bd2e552cf41e5be1e6469244a83349cbb71daf6059b746b1c44e3f35446fef63e50 - languageName: node - linkType: hard - -"micromark-util-sanitize-uri@npm:^1.0.0, micromark-util-sanitize-uri@npm:^1.1.0": - version: 1.1.0 - resolution: "micromark-util-sanitize-uri@npm:1.1.0" - dependencies: - micromark-util-character: ^1.0.0 - micromark-util-encode: ^1.0.0 - micromark-util-symbol: ^1.0.0 - checksum: fe6093faa0adeb8fad606184d927ce37f207dcc2ec7256438e7f273c8829686245dd6161b597913ef25a3c4fb61863d3612a40cb04cf15f83ba1b4087099996b - languageName: node - linkType: hard - -"micromark-util-subtokenize@npm:^1.0.0": - version: 1.0.2 - resolution: "micromark-util-subtokenize@npm:1.0.2" - dependencies: - micromark-util-chunked: ^1.0.0 - micromark-util-symbol: ^1.0.0 - micromark-util-types: ^1.0.0 - uvu: ^0.5.0 - checksum: c32ee58a7e1384ab1161a9ee02fbb04ad7b6e96d0b8c93dba9803c329a53d07f22ab394c7a96b2e30d6b8fbe3585b85817dba07277b1317111fc234e166bd2d1 - languageName: node - linkType: hard - -"micromark-util-symbol@npm:^1.0.0": - version: 1.0.1 - resolution: "micromark-util-symbol@npm:1.0.1" - checksum: c6a3023b3a7432c15864b5e33a1bcb5042ac7aa097f2f452e587bef45433d42d39e0a5cce12fbea91e0671098ba0c3f62a2b30ce1cde66ecbb5e8336acf4391d - languageName: node - linkType: hard - -"micromark-util-types@npm:^1.0.0, micromark-util-types@npm:^1.0.1": - version: 1.0.2 - resolution: "micromark-util-types@npm:1.0.2" - checksum: 08dc901b7c06ee3dfeb54befca05cbdab9525c1cf1c1080967c3878c9e72cb9856c7e8ff6112816e18ead36ce6f99d55aaa91560768f2f6417b415dcba1244df - languageName: node - linkType: hard - -"micromark@npm:^3.0.0": - version: 3.1.0 - resolution: "micromark@npm:3.1.0" - dependencies: - "@types/debug": ^4.0.0 - debug: ^4.0.0 - decode-named-character-reference: ^1.0.0 - micromark-core-commonmark: ^1.0.1 - micromark-factory-space: ^1.0.0 - micromark-util-character: ^1.0.0 - micromark-util-chunked: ^1.0.0 - micromark-util-combine-extensions: ^1.0.0 - micromark-util-decode-numeric-character-reference: ^1.0.0 - micromark-util-encode: ^1.0.0 - micromark-util-normalize-identifier: ^1.0.0 - micromark-util-resolve-all: ^1.0.0 - micromark-util-sanitize-uri: ^1.0.0 - micromark-util-subtokenize: ^1.0.0 - micromark-util-symbol: ^1.0.0 - micromark-util-types: ^1.0.1 - uvu: ^0.5.0 - checksum: 5fe5bc3bf92e2ddd37b5f0034080fc3a4d4b3c1130dd5e435bb96ec75e9453091272852e71a4d74906a8fcf992d6f79d794607657c534bda49941e9950a92e28 - languageName: node - linkType: hard - -"micromatch@npm:^4.0.4, micromatch@npm:^4.0.5": - version: 4.0.5 - resolution: "micromatch@npm:4.0.5" - dependencies: - braces: ^3.0.2 - picomatch: ^2.3.1 - checksum: 02a17b671c06e8fefeeb6ef996119c1e597c942e632a21ef589154f23898c9c6a9858526246abb14f8bca6e77734aa9dcf65476fca47cedfb80d9577d52843fc - languageName: node - linkType: hard - -"mime-db@npm:1.52.0": - version: 1.52.0 - resolution: "mime-db@npm:1.52.0" - checksum: 0d99a03585f8b39d68182803b12ac601d9c01abfa28ec56204fa330bc9f3d1c5e14beb049bafadb3dbdf646dfb94b87e24d4ec7b31b7279ef906a8ea9b6a513f - languageName: node - linkType: hard - -"mime-types@npm:^2.1.12": - version: 2.1.35 - resolution: "mime-types@npm:2.1.35" - dependencies: - mime-db: 1.52.0 - checksum: 89a5b7f1def9f3af5dad6496c5ed50191ae4331cc5389d7c521c8ad28d5fdad2d06fd81baf38fed813dc4e46bb55c8145bb0ff406330818c9cf712fb2e9b3836 - languageName: node - linkType: hard - -"mimic-fn@npm:^2.1.0": - version: 2.1.0 - resolution: "mimic-fn@npm:2.1.0" - checksum: d2421a3444848ce7f84bd49115ddacff29c15745db73f54041edc906c14b131a38d05298dae3081667627a59b2eb1ca4b436ff2e1b80f69679522410418b478a - languageName: node - linkType: hard - -"minimatch@npm:4.2.3": - version: 4.2.3 - resolution: "minimatch@npm:4.2.3" - dependencies: - brace-expansion: ^1.1.7 - checksum: 3392388e3ef7de7ae9a3a48d48a27a323934452f4af81b925dfbe85ce2dc07da855e3dbcc69229888be4e5118f6c0b79847d30f3e7c0e0017b25e423c11c0409 - languageName: node - linkType: hard - -"minimatch@npm:^3.0.5, minimatch@npm:^3.1.1, minimatch@npm:^3.1.2": - version: 3.1.2 - resolution: "minimatch@npm:3.1.2" - dependencies: - brace-expansion: ^1.1.7 - checksum: c154e566406683e7bcb746e000b84d74465b3a832c45d59912b9b55cd50dee66e5c4b1e5566dba26154040e51672f9aa450a9aef0c97cfc7336b78b7afb9540a - languageName: node - linkType: hard - -"minimatch@npm:^5.0.1": - version: 5.1.6 - resolution: "minimatch@npm:5.1.6" - dependencies: - brace-expansion: ^2.0.1 - checksum: 7564208ef81d7065a370f788d337cd80a689e981042cb9a1d0e6580b6c6a8c9279eba80010516e258835a988363f99f54a6f711a315089b8b42694f5da9d0d77 - languageName: node - linkType: hard - -"minimist@npm:^1.2.0, minimist@npm:^1.2.6": - version: 1.2.8 - resolution: "minimist@npm:1.2.8" - checksum: 75a6d645fb122dad29c06a7597bddea977258957ed88d7a6df59b5cd3fe4a527e253e9bbf2e783e4b73657f9098b96a5fe96ab8a113655d4109108577ecf85b0 - languageName: node - linkType: hard - -"minipass-collect@npm:^1.0.2": - version: 1.0.2 - resolution: "minipass-collect@npm:1.0.2" - dependencies: - minipass: ^3.0.0 - checksum: 14df761028f3e47293aee72888f2657695ec66bd7d09cae7ad558da30415fdc4752bbfee66287dcc6fd5e6a2fa3466d6c484dc1cbd986525d9393b9523d97f10 - languageName: node - linkType: hard - -"minipass-fetch@npm:^2.0.3": - version: 2.1.2 - resolution: "minipass-fetch@npm:2.1.2" - dependencies: - encoding: ^0.1.13 - minipass: ^3.1.6 - minipass-sized: ^1.0.3 - minizlib: ^2.1.2 - dependenciesMeta: - encoding: - optional: true - checksum: 3f216be79164e915fc91210cea1850e488793c740534985da017a4cbc7a5ff50506956d0f73bb0cb60e4fe91be08b6b61ef35101706d3ef5da2c8709b5f08f91 - languageName: node - linkType: hard - -"minipass-flush@npm:^1.0.5": - version: 1.0.5 - resolution: "minipass-flush@npm:1.0.5" - dependencies: - minipass: ^3.0.0 - checksum: 56269a0b22bad756a08a94b1ffc36b7c9c5de0735a4dd1ab2b06c066d795cfd1f0ac44a0fcae13eece5589b908ecddc867f04c745c7009be0b566421ea0944cf - languageName: node - linkType: hard - -"minipass-pipeline@npm:^1.2.4": - version: 1.2.4 - resolution: "minipass-pipeline@npm:1.2.4" - dependencies: - minipass: ^3.0.0 - checksum: b14240dac0d29823c3d5911c286069e36d0b81173d7bdf07a7e4a91ecdef92cdff4baaf31ea3746f1c61e0957f652e641223970870e2353593f382112257971b - languageName: node - linkType: hard - -"minipass-sized@npm:^1.0.3": - version: 1.0.3 - resolution: "minipass-sized@npm:1.0.3" - dependencies: - minipass: ^3.0.0 - checksum: 79076749fcacf21b5d16dd596d32c3b6bf4d6e62abb43868fac21674078505c8b15eaca4e47ed844985a4514854f917d78f588fcd029693709417d8f98b2bd60 - languageName: node - linkType: hard - -"minipass@npm:^3.0.0, minipass@npm:^3.1.1, minipass@npm:^3.1.6": - version: 3.3.6 - resolution: "minipass@npm:3.3.6" - dependencies: - yallist: ^4.0.0 - checksum: a30d083c8054cee83cdcdc97f97e4641a3f58ae743970457b1489ce38ee1167b3aaf7d815cd39ec7a99b9c40397fd4f686e83750e73e652b21cb516f6d845e48 - languageName: node - linkType: hard - -"minipass@npm:^4.0.0": - version: 4.2.5 - resolution: "minipass@npm:4.2.5" - checksum: 4f9c19af23a5d4a9e7156feefc9110634b178a8cff8f8271af16ec5ebf7e221725a97429952c856f5b17b30c2065ebd24c81722d90c93d2122611d75b952b48f - languageName: node - linkType: hard - -"minizlib@npm:^2.1.1, minizlib@npm:^2.1.2": - version: 2.1.2 - resolution: "minizlib@npm:2.1.2" - dependencies: - minipass: ^3.0.0 - yallist: ^4.0.0 - checksum: f1fdeac0b07cf8f30fcf12f4b586795b97be856edea22b5e9072707be51fc95d41487faec3f265b42973a304fe3a64acd91a44a3826a963e37b37bafde0212c3 - languageName: node - linkType: hard - -"mkdirp@npm:^1.0.3, mkdirp@npm:^1.0.4": - version: 1.0.4 - resolution: "mkdirp@npm:1.0.4" - bin: - mkdirp: bin/cmd.js - checksum: a96865108c6c3b1b8e1d5e9f11843de1e077e57737602de1b82030815f311be11f96f09cce59bd5b903d0b29834733e5313f9301e3ed6d6f6fba2eae0df4298f - languageName: node - linkType: hard - -"moment@npm:2.29.4": - version: 2.29.4 - resolution: "moment@npm:2.29.4" - checksum: 0ec3f9c2bcba38dc2451b1daed5daded747f17610b92427bebe1d08d48d8b7bdd8d9197500b072d14e326dd0ccf3e326b9e3d07c5895d3d49e39b6803b76e80e - languageName: node - linkType: hard - -"mri@npm:^1.1.0": - version: 1.2.0 - resolution: "mri@npm:1.2.0" - checksum: 83f515abbcff60150873e424894a2f65d68037e5a7fcde8a9e2b285ee9c13ac581b63cfc1e6826c4732de3aeb84902f7c1e16b7aff46cd3f897a0f757a894e85 - languageName: node - linkType: hard - -"ms@npm:2.1.2": - version: 2.1.2 - resolution: "ms@npm:2.1.2" - checksum: 673cdb2c3133eb050c745908d8ce632ed2c02d85640e2edb3ace856a2266a813b30c613569bf3354fdf4ea7d1a1494add3bfa95e2713baa27d0c2c71fc44f58f - languageName: node - linkType: hard - -"ms@npm:^2.0.0, ms@npm:^2.1.1": - version: 2.1.3 - resolution: "ms@npm:2.1.3" - checksum: aa92de608021b242401676e35cfa5aa42dd70cbdc082b916da7fb925c542173e36bce97ea3e804923fe92c0ad991434e4a38327e15a1b5b5f945d66df615ae6d - languageName: node - linkType: hard - -"mute-stream@npm:0.0.8": - version: 0.0.8 - resolution: "mute-stream@npm:0.0.8" - checksum: ff48d251fc3f827e5b1206cda0ffdaec885e56057ee86a3155e1951bc940fd5f33531774b1cc8414d7668c10a8907f863f6561875ee6e8768931a62121a531a1 - languageName: node - linkType: hard - -"nanoid@npm:^3.3.4": - version: 3.3.4 - resolution: "nanoid@npm:3.3.4" - bin: - nanoid: bin/nanoid.cjs - checksum: 2fddd6dee994b7676f008d3ffa4ab16035a754f4bb586c61df5a22cf8c8c94017aadd360368f47d653829e0569a92b129979152ff97af23a558331e47e37cd9c - languageName: node - linkType: hard - -"natural-compare-lite@npm:^1.4.0": - version: 1.4.0 - resolution: "natural-compare-lite@npm:1.4.0" - checksum: 5222ac3986a2b78dd6069ac62cbb52a7bf8ffc90d972ab76dfe7b01892485d229530ed20d0c62e79a6b363a663b273db3bde195a1358ce9e5f779d4453887225 - languageName: node - linkType: hard - -"natural-compare@npm:^1.4.0": - version: 1.4.0 - resolution: "natural-compare@npm:1.4.0" - checksum: 23ad088b08f898fc9b53011d7bb78ec48e79de7627e01ab5518e806033861bef68d5b0cd0e2205c2f36690ac9571ff6bcb05eb777ced2eeda8d4ac5b44592c3d - languageName: node - linkType: hard - -"negotiator@npm:^0.6.3": - version: 0.6.3 - resolution: "negotiator@npm:0.6.3" - checksum: b8ffeb1e262eff7968fc90a2b6767b04cfd9842582a9d0ece0af7049537266e7b2506dfb1d107a32f06dd849ab2aea834d5830f7f4d0e5cb7d36e1ae55d021d9 - languageName: node - linkType: hard - -"no-case@npm:^3.0.4": - version: 3.0.4 - resolution: "no-case@npm:3.0.4" - dependencies: - lower-case: ^2.0.2 - tslib: ^2.0.3 - checksum: 0b2ebc113dfcf737d48dde49cfebf3ad2d82a8c3188e7100c6f375e30eafbef9e9124aadc3becef237b042fd5eb0aad2fd78669c20972d045bbe7fea8ba0be5c - languageName: node - linkType: hard - -"node-addon-api@npm:^3.2.1": - version: 3.2.1 - resolution: "node-addon-api@npm:3.2.1" - dependencies: - node-gyp: latest - checksum: 2369986bb0881ccd9ef6bacdf39550e07e089a9c8ede1cbc5fc7712d8e2faa4d50da0e487e333d4125f8c7a616c730131d1091676c9d499af1d74560756b4a18 - languageName: node - linkType: hard - -"node-fetch@npm:2.6.7": - version: 2.6.7 - resolution: "node-fetch@npm:2.6.7" - dependencies: - whatwg-url: ^5.0.0 - peerDependencies: - encoding: ^0.1.0 - peerDependenciesMeta: - encoding: - optional: true - checksum: 8d816ffd1ee22cab8301c7756ef04f3437f18dace86a1dae22cf81db8ef29c0bf6655f3215cb0cdb22b420b6fe141e64b26905e7f33f9377a7fa59135ea3e10b - languageName: node - linkType: hard - -"node-fetch@npm:^2.6.1": - version: 2.6.9 - resolution: "node-fetch@npm:2.6.9" - dependencies: - whatwg-url: ^5.0.0 - peerDependencies: - encoding: ^0.1.0 - peerDependenciesMeta: - encoding: - optional: true - checksum: acb04f9ce7224965b2b59e71b33c639794d8991efd73855b0b250921382b38331ffc9d61bce502571f6cc6e11a8905ca9b1b6d4aeb586ab093e2756a1fd190d0 - languageName: node - linkType: hard - -"node-gyp-build@npm:^4.3.0": - version: 4.6.0 - resolution: "node-gyp-build@npm:4.6.0" - bin: - node-gyp-build: bin.js - node-gyp-build-optional: optional.js - node-gyp-build-test: build-test.js - checksum: 25d78c5ef1f8c24291f4a370c47ba52fcea14f39272041a90a7894cd50d766f7c8cb8fb06c0f42bf6f69b204b49d9be3c8fc344aac09714d5bdb95965499eb15 - languageName: node - linkType: hard - -"node-gyp@npm:latest": - version: 9.3.1 - resolution: "node-gyp@npm:9.3.1" - dependencies: - env-paths: ^2.2.0 - glob: ^7.1.4 - graceful-fs: ^4.2.6 - make-fetch-happen: ^10.0.3 - nopt: ^6.0.0 - npmlog: ^6.0.0 - rimraf: ^3.0.2 - semver: ^7.3.5 - tar: ^6.1.2 - which: ^2.0.2 - bin: - node-gyp: bin/node-gyp.js - checksum: b860e9976fa645ca0789c69e25387401b4396b93c8375489b5151a6c55cf2640a3b6183c212b38625ef7c508994930b72198338e3d09b9d7ade5acc4aaf51ea7 - languageName: node - linkType: hard - -"node-int64@npm:^0.4.0": - version: 0.4.0 - resolution: "node-int64@npm:0.4.0" - checksum: d0b30b1ee6d961851c60d5eaa745d30b5c95d94bc0e74b81e5292f7c42a49e3af87f1eb9e89f59456f80645d679202537de751b7d72e9e40ceea40c5e449057e - languageName: node - linkType: hard - -"node-releases@npm:^2.0.8": - version: 2.0.10 - resolution: "node-releases@npm:2.0.10" - checksum: d784ecde25696a15d449c4433077f5cce620ed30a1656c4abf31282bfc691a70d9618bae6868d247a67914d1be5cc4fde22f65a05f4398cdfb92e0fc83cadfbc - languageName: node - linkType: hard - -"nopt@npm:^6.0.0": - version: 6.0.0 - resolution: "nopt@npm:6.0.0" - dependencies: - abbrev: ^1.0.0 - bin: - nopt: bin/nopt.js - checksum: 82149371f8be0c4b9ec2f863cc6509a7fd0fa729929c009f3a58e4eb0c9e4cae9920e8f1f8eb46e7d032fec8fb01bede7f0f41a67eb3553b7b8e14fa53de1dac - languageName: node - linkType: hard - -"normalize-path@npm:^2.1.1": - version: 2.1.1 - resolution: "normalize-path@npm:2.1.1" - dependencies: - remove-trailing-separator: ^1.0.1 - checksum: 7e9cbdcf7f5b8da7aa191fbfe33daf290cdcd8c038f422faf1b8a83c972bf7a6d94c5be34c4326cb00fb63bc0fd97d9fbcfaf2e5d6142332c2cd36d2e1b86cea - languageName: node - linkType: hard - -"npmlog@npm:^6.0.0": - version: 6.0.2 - resolution: "npmlog@npm:6.0.2" - dependencies: - are-we-there-yet: ^3.0.0 - console-control-strings: ^1.1.0 - gauge: ^4.0.3 - set-blocking: ^2.0.0 - checksum: ae238cd264a1c3f22091cdd9e2b106f684297d3c184f1146984ecbe18aaa86343953f26b9520dedd1b1372bc0316905b736c1932d778dbeb1fcf5a1001390e2a - languageName: node - linkType: hard - -"nullthrows@npm:^1.1.1": - version: 1.1.1 - resolution: "nullthrows@npm:1.1.1" - checksum: 10806b92121253eb1b08ecf707d92480f5331ba8ae5b23fa3eb0548ad24196eb797ed47606153006568a5733ea9e528a3579f21421f7828e09e7756f4bdd386f - languageName: node - linkType: hard - -"object-assign@npm:^4.1.0, object-assign@npm:^4.1.1": - version: 4.1.1 - resolution: "object-assign@npm:4.1.1" - checksum: fcc6e4ea8c7fe48abfbb552578b1c53e0d194086e2e6bbbf59e0a536381a292f39943c6e9628af05b5528aa5e3318bb30d6b2e53cadaf5b8fe9e12c4b69af23f - languageName: node - linkType: hard - -"object-inspect@npm:^1.12.3, object-inspect@npm:^1.9.0": - version: 1.12.3 - resolution: "object-inspect@npm:1.12.3" - checksum: dabfd824d97a5f407e6d5d24810d888859f6be394d8b733a77442b277e0808860555176719c5905e765e3743a7cada6b8b0a3b85e5331c530fd418cc8ae991db - languageName: node - linkType: hard - -"object-is@npm:^1.1.5": - version: 1.1.5 - resolution: "object-is@npm:1.1.5" - dependencies: - call-bind: ^1.0.2 - define-properties: ^1.1.3 - checksum: 989b18c4cba258a6b74dc1d74a41805c1a1425bce29f6cabb50dcb1a6a651ea9104a1b07046739a49a5bb1bc49727bcb00efd5c55f932f6ea04ec8927a7901fe - languageName: node - linkType: hard - -"object-keys@npm:^1.1.1": - version: 1.1.1 - resolution: "object-keys@npm:1.1.1" - checksum: b363c5e7644b1e1b04aa507e88dcb8e3a2f52b6ffd0ea801e4c7a62d5aa559affe21c55a07fd4b1fd55fc03a33c610d73426664b20032405d7b92a1414c34d6a - languageName: node - linkType: hard - -"object.assign@npm:^4.1.2, object.assign@npm:^4.1.3, object.assign@npm:^4.1.4": - version: 4.1.4 - resolution: "object.assign@npm:4.1.4" - dependencies: - call-bind: ^1.0.2 - define-properties: ^1.1.4 - has-symbols: ^1.0.3 - object-keys: ^1.1.1 - checksum: 76cab513a5999acbfe0ff355f15a6a125e71805fcf53de4e9d4e082e1989bdb81d1e329291e1e4e0ae7719f0e4ef80e88fb2d367ae60500d79d25a6224ac8864 - languageName: node - linkType: hard - -"object.entries@npm:^1.1.5, object.entries@npm:^1.1.6": - version: 1.1.6 - resolution: "object.entries@npm:1.1.6" - dependencies: - call-bind: ^1.0.2 - define-properties: ^1.1.4 - es-abstract: ^1.20.4 - checksum: 0f8c47517e6a9a980241eafe3b73de11e59511883173c2b93d67424a008e47e11b77c80e431ad1d8a806f6108b225a1cab9223e53e555776c612a24297117d28 - languageName: node - linkType: hard - -"object.fromentries@npm:^2.0.6": - version: 2.0.6 - resolution: "object.fromentries@npm:2.0.6" - dependencies: - call-bind: ^1.0.2 - define-properties: ^1.1.4 - es-abstract: ^1.20.4 - checksum: 453c6d694180c0c30df451b60eaf27a5b9bca3fb43c37908fd2b78af895803dc631242bcf05582173afa40d8d0e9c96e16e8874b39471aa53f3ac1f98a085d85 - languageName: node - linkType: hard - -"object.hasown@npm:^1.1.2": - version: 1.1.2 - resolution: "object.hasown@npm:1.1.2" - dependencies: - define-properties: ^1.1.4 - es-abstract: ^1.20.4 - checksum: b936572536db0cdf38eb30afd2f1026a8b6f2cc5d2c4497c9d9bbb01eaf3e980dead4fd07580cfdd098e6383e5a9db8212d3ea0c6bdd2b5e68c60aa7e3b45566 - languageName: node - linkType: hard - -"object.values@npm:^1.1.6": - version: 1.1.6 - resolution: "object.values@npm:1.1.6" - dependencies: - call-bind: ^1.0.2 - define-properties: ^1.1.4 - es-abstract: ^1.20.4 - checksum: f6fff9fd817c24cfd8107f50fb33061d81cd11bacc4e3dbb3852e9ff7692fde4dbce823d4333ea27cd9637ef1b6690df5fbb61f1ed314fa2959598dc3ae23d8e - languageName: node - linkType: hard - -"once@npm:^1.3.0": - version: 1.4.0 - resolution: "once@npm:1.4.0" - dependencies: - wrappy: 1 - checksum: cd0a88501333edd640d95f0d2700fbde6bff20b3d4d9bdc521bdd31af0656b5706570d6c6afe532045a20bb8dc0849f8332d6f2a416e0ba6d3d3b98806c7db68 - languageName: node - linkType: hard - -"onetime@npm:^5.1.0": - version: 5.1.2 - resolution: "onetime@npm:5.1.2" - dependencies: - mimic-fn: ^2.1.0 - checksum: 2478859ef817fc5d4e9c2f9e5728512ddd1dbc9fb7829ad263765bb6d3b91ce699d6e2332eef6b7dff183c2f490bd3349f1666427eaba4469fba0ac38dfd0d34 - languageName: node - linkType: hard - -"optimism@npm:^0.16.1": - version: 0.16.2 - resolution: "optimism@npm:0.16.2" - dependencies: - "@wry/context": ^0.7.0 - "@wry/trie": ^0.3.0 - checksum: a98ed9a0b8ee2b031010222099b60860d52860bf8182889f2695a7cf2185f21aca59020f78e2b47c0ae7697843caa576798d792967314ff59f6aa7c5d9de7f3a - languageName: node - linkType: hard - -"optionator@npm:^0.9.1": - version: 0.9.1 - resolution: "optionator@npm:0.9.1" - dependencies: - deep-is: ^0.1.3 - fast-levenshtein: ^2.0.6 - levn: ^0.4.1 - prelude-ls: ^1.2.1 - type-check: ^0.4.0 - word-wrap: ^1.2.3 - checksum: dbc6fa065604b24ea57d734261914e697bd73b69eff7f18e967e8912aa2a40a19a9f599a507fa805be6c13c24c4eae8c71306c239d517d42d4c041c942f508a0 - languageName: node - linkType: hard - -"ora@npm:^5.4.1": - version: 5.4.1 - resolution: "ora@npm:5.4.1" - dependencies: - bl: ^4.1.0 - chalk: ^4.1.0 - cli-cursor: ^3.1.0 - cli-spinners: ^2.5.0 - is-interactive: ^1.0.0 - is-unicode-supported: ^0.1.0 - log-symbols: ^4.1.0 - strip-ansi: ^6.0.0 - wcwidth: ^1.0.1 - checksum: 28d476ee6c1049d68368c0dc922e7225e3b5600c3ede88fade8052837f9ed342625fdaa84a6209302587c8ddd9b664f71f0759833cbdb3a4cf81344057e63c63 - languageName: node - linkType: hard - -"os-tmpdir@npm:~1.0.2": - version: 1.0.2 - resolution: "os-tmpdir@npm:1.0.2" - checksum: 5666560f7b9f10182548bf7013883265be33620b1c1b4a4d405c25be2636f970c5488ff3e6c48de75b55d02bde037249fe5dbfbb4c0fb7714953d56aed062e6d - languageName: node - linkType: hard - -"p-limit@npm:3.1.0, p-limit@npm:^3.0.2": - version: 3.1.0 - resolution: "p-limit@npm:3.1.0" - dependencies: - yocto-queue: ^0.1.0 - checksum: 7c3690c4dbf62ef625671e20b7bdf1cbc9534e83352a2780f165b0d3ceba21907e77ad63401708145ca4e25bfc51636588d89a8c0aeb715e6c37d1c066430360 - languageName: node - linkType: hard - -"p-limit@npm:^2.2.0": - version: 2.3.0 - resolution: "p-limit@npm:2.3.0" - dependencies: - p-try: ^2.0.0 - checksum: 84ff17f1a38126c3314e91ecfe56aecbf36430940e2873dadaa773ffe072dc23b7af8e46d4b6485d302a11673fe94c6b67ca2cfbb60c989848b02100d0594ac1 - languageName: node - linkType: hard - -"p-locate@npm:^4.1.0": - version: 4.1.0 - resolution: "p-locate@npm:4.1.0" - dependencies: - p-limit: ^2.2.0 - checksum: 513bd14a455f5da4ebfcb819ef706c54adb09097703de6aeaa5d26fe5ea16df92b48d1ac45e01e3944ce1e6aa2a66f7f8894742b8c9d6e276e16cd2049a2b870 - languageName: node - linkType: hard - -"p-locate@npm:^5.0.0": - version: 5.0.0 - resolution: "p-locate@npm:5.0.0" - dependencies: - p-limit: ^3.0.2 - checksum: 1623088f36cf1cbca58e9b61c4e62bf0c60a07af5ae1ca99a720837356b5b6c5ba3eb1b2127e47a06865fee59dd0453cad7cc844cda9d5a62ac1a5a51b7c86d3 - languageName: node - linkType: hard - -"p-map@npm:^4.0.0": - version: 4.0.0 - resolution: "p-map@npm:4.0.0" - dependencies: - aggregate-error: ^3.0.0 - checksum: cb0ab21ec0f32ddffd31dfc250e3afa61e103ef43d957cc45497afe37513634589316de4eb88abdfd969fe6410c22c0b93ab24328833b8eb1ccc087fc0442a1c - languageName: node - linkType: hard - -"p-try@npm:^2.0.0": - version: 2.2.0 - resolution: "p-try@npm:2.2.0" - checksum: f8a8e9a7693659383f06aec604ad5ead237c7a261c18048a6e1b5b85a5f8a067e469aa24f5bc009b991ea3b058a87f5065ef4176793a200d4917349881216cae - languageName: node - linkType: hard - -"param-case@npm:^3.0.4": - version: 3.0.4 - resolution: "param-case@npm:3.0.4" - dependencies: - dot-case: ^3.0.4 - tslib: ^2.0.3 - checksum: b34227fd0f794e078776eb3aa6247442056cb47761e9cd2c4c881c86d84c64205f6a56ef0d70b41ee7d77da02c3f4ed2f88e3896a8fefe08bdfb4deca037c687 - languageName: node - linkType: hard - -"parent-module@npm:^1.0.0": - version: 1.0.1 - resolution: "parent-module@npm:1.0.1" - dependencies: - callsites: ^3.0.0 - checksum: 6ba8b255145cae9470cf5551eb74be2d22281587af787a2626683a6c20fbb464978784661478dd2a3f1dad74d1e802d403e1b03c1a31fab310259eec8ac560ff - languageName: node - linkType: hard - -"parse-filepath@npm:^1.0.2": - version: 1.0.2 - resolution: "parse-filepath@npm:1.0.2" - dependencies: - is-absolute: ^1.0.0 - map-cache: ^0.2.0 - path-root: ^0.1.1 - checksum: 6794c3f38d3921f0f7cc63fb1fb0c4d04cd463356ad389c8ce6726d3c50793b9005971f4138975a6d7025526058d5e65e9bfe634d0765e84c4e2571152665a69 - languageName: node - linkType: hard - -"parse-json@npm:^5.0.0": - version: 5.2.0 - resolution: "parse-json@npm:5.2.0" - dependencies: - "@babel/code-frame": ^7.0.0 - error-ex: ^1.3.1 - json-parse-even-better-errors: ^2.3.0 - lines-and-columns: ^1.1.6 - checksum: 62085b17d64da57f40f6afc2ac1f4d95def18c4323577e1eced571db75d9ab59b297d1d10582920f84b15985cbfc6b6d450ccbf317644cfa176f3ed982ad87e2 - languageName: node - linkType: hard - -"parse5@npm:^6.0.0": - version: 6.0.1 - resolution: "parse5@npm:6.0.1" - checksum: 7d569a176c5460897f7c8f3377eff640d54132b9be51ae8a8fa4979af940830b2b0c296ce75e5bd8f4041520aadde13170dbdec44889975f906098ea0002f4bd - languageName: node - linkType: hard - -"pascal-case@npm:^3.1.2": - version: 3.1.2 - resolution: "pascal-case@npm:3.1.2" - dependencies: - no-case: ^3.0.4 - tslib: ^2.0.3 - checksum: ba98bfd595fc91ef3d30f4243b1aee2f6ec41c53b4546bfa3039487c367abaa182471dcfc830a1f9e1a0df00c14a370514fa2b3a1aacc68b15a460c31116873e - languageName: node - linkType: hard - -"path-case@npm:^3.0.4": - version: 3.0.4 - resolution: "path-case@npm:3.0.4" - dependencies: - dot-case: ^3.0.4 - tslib: ^2.0.3 - checksum: 61de0526222629f65038a66f63330dd22d5b54014ded6636283e1d15364da38b3cf29e4433aa3f9d8b0dba407ae2b059c23b0104a34ee789944b1bc1c5c7e06d - languageName: node - linkType: hard - -"path-exists@npm:^4.0.0": - version: 4.0.0 - resolution: "path-exists@npm:4.0.0" - checksum: 505807199dfb7c50737b057dd8d351b82c033029ab94cb10a657609e00c1bc53b951cfdbccab8de04c5584d5eff31128ce6afd3db79281874a5ef2adbba55ed1 - languageName: node - linkType: hard - -"path-is-absolute@npm:^1.0.0": - version: 1.0.1 - resolution: "path-is-absolute@npm:1.0.1" - checksum: 060840f92cf8effa293bcc1bea81281bd7d363731d214cbe5c227df207c34cd727430f70c6037b5159c8a870b9157cba65e775446b0ab06fd5ecc7e54615a3b8 - languageName: node - linkType: hard - -"path-key@npm:^3.1.0": - version: 3.1.1 - resolution: "path-key@npm:3.1.1" - checksum: 55cd7a9dd4b343412a8386a743f9c746ef196e57c823d90ca3ab917f90ab9f13dd0ded27252ba49dbdfcab2b091d998bc446f6220cd3cea65db407502a740020 - languageName: node - linkType: hard - -"path-parse@npm:^1.0.7": - version: 1.0.7 - resolution: "path-parse@npm:1.0.7" - checksum: 49abf3d81115642938a8700ec580da6e830dde670be21893c62f4e10bd7dd4c3742ddc603fe24f898cba7eb0c6bc1777f8d9ac14185d34540c6d4d80cd9cae8a - languageName: node - linkType: hard - -"path-root-regex@npm:^0.1.0": - version: 0.1.2 - resolution: "path-root-regex@npm:0.1.2" - checksum: dcd75d1f8e93faabe35a58e875b0f636839b3658ff2ad8c289463c40bc1a844debe0dab73c3398ef9dc8f6ec6c319720aff390cf4633763ddcf3cf4b1bbf7e8b - languageName: node - linkType: hard - -"path-root@npm:^0.1.1": - version: 0.1.1 - resolution: "path-root@npm:0.1.1" - dependencies: - path-root-regex: ^0.1.0 - checksum: ff88aebfc1c59ace510cc06703d67692a11530989920427625e52b66a303ca9b3d4059b0b7d0b2a73248d1ad29bcb342b8b786ec00592f3101d38a45fd3b2e08 - languageName: node - linkType: hard - -"path-type@npm:^4.0.0": - version: 4.0.0 - resolution: "path-type@npm:4.0.0" - checksum: 5b1e2daa247062061325b8fdbfd1fb56dde0a448fb1455453276ea18c60685bdad23a445dc148cf87bc216be1573357509b7d4060494a6fd768c7efad833ee45 - languageName: node - linkType: hard - -"phoenix@npm:1.7.2": - version: 1.7.2 - resolution: "phoenix@npm:1.7.2" - checksum: f493d8325f83a5cc3db913fff68ba1c3eca1574ddeccf701000d4278533cb8371620fcabb8576eed0e0069aaaeb76aa2a21018d5c14de664334e10ce7d244cd8 - languageName: node - linkType: hard - -"picocolors@npm:^1.0.0": - version: 1.0.0 - resolution: "picocolors@npm:1.0.0" - checksum: a2e8092dd86c8396bdba9f2b5481032848525b3dc295ce9b57896f931e63fc16f79805144321f72976383fc249584672a75cc18d6777c6b757603f372f745981 - languageName: node - linkType: hard - -"picomatch@npm:^2.3.0, picomatch@npm:^2.3.1": - version: 2.3.1 - resolution: "picomatch@npm:2.3.1" - checksum: 050c865ce81119c4822c45d3c84f1ced46f93a0126febae20737bd05ca20589c564d6e9226977df859ed5e03dc73f02584a2b0faad36e896936238238b0446cf - languageName: node - linkType: hard - -"postcss-value-parser@npm:^4.0.2": - version: 4.2.0 - resolution: "postcss-value-parser@npm:4.2.0" - checksum: 819ffab0c9d51cf0acbabf8996dffbfafbafa57afc0e4c98db88b67f2094cb44488758f06e5da95d7036f19556a4a732525e84289a425f4f6fd8e412a9d7442f - languageName: node - linkType: hard - -"postcss@npm:^8.4.21": - version: 8.4.21 - resolution: "postcss@npm:8.4.21" - dependencies: - nanoid: ^3.3.4 - picocolors: ^1.0.0 - source-map-js: ^1.0.2 - checksum: e39ac60ccd1542d4f9d93d894048aac0d686b3bb38e927d8386005718e6793dbbb46930f0a523fe382f1bbd843c6d980aaea791252bf5e176180e5a4336d9679 - languageName: node - linkType: hard - -"prelude-ls@npm:^1.2.1": - version: 1.2.1 - resolution: "prelude-ls@npm:1.2.1" - checksum: cd192ec0d0a8e4c6da3bb80e4f62afe336df3f76271ac6deb0e6a36187133b6073a19e9727a1ff108cd8b9982e4768850d413baa71214dd80c7979617dca827a - languageName: node - linkType: hard - -"promise-inflight@npm:^1.0.1": - version: 1.0.1 - resolution: "promise-inflight@npm:1.0.1" - checksum: 22749483091d2c594261517f4f80e05226d4d5ecc1fc917e1886929da56e22b5718b7f2a75f3807e7a7d471bc3be2907fe92e6e8f373ddf5c64bae35b5af3981 - languageName: node - linkType: hard - -"promise-retry@npm:^2.0.1": - version: 2.0.1 - resolution: "promise-retry@npm:2.0.1" - dependencies: - err-code: ^2.0.2 - retry: ^0.12.0 - checksum: f96a3f6d90b92b568a26f71e966cbbc0f63ab85ea6ff6c81284dc869b41510e6cdef99b6b65f9030f0db422bf7c96652a3fff9f2e8fb4a0f069d8f4430359429 - languageName: node - linkType: hard - -"promise@npm:^7.1.1": - version: 7.3.1 - resolution: "promise@npm:7.3.1" - dependencies: - asap: ~2.0.3 - checksum: 475bb069130179fbd27ed2ab45f26d8862376a137a57314cf53310bdd85cc986a826fd585829be97ebc0aaf10e9d8e68be1bfe5a4a0364144b1f9eedfa940cf1 - languageName: node - linkType: hard - -"prop-types@npm:15.8.1, prop-types@npm:^15.0.0, prop-types@npm:^15.6.2, prop-types@npm:^15.7.2, prop-types@npm:^15.8.1": - version: 15.8.1 - resolution: "prop-types@npm:15.8.1" - dependencies: - loose-envify: ^1.4.0 - object-assign: ^4.1.1 - react-is: ^16.13.1 - checksum: c056d3f1c057cb7ff8344c645450e14f088a915d078dcda795041765047fa080d38e5d626560ccaac94a4e16e3aa15f3557c1a9a8d1174530955e992c675e459 - languageName: node - linkType: hard - -"property-information@npm:^6.0.0": - version: 6.2.0 - resolution: "property-information@npm:6.2.0" - checksum: 23afce07ba821cbe7d926e63cdd680991961c82be4bbb6c0b17c47f48894359c1be6e51cd74485fc10a9d3fd361b475388e1e39311ed2b53127718f72aab1955 - languageName: node - linkType: hard - -"punycode@npm:^1.3.2": - version: 1.4.1 - resolution: "punycode@npm:1.4.1" - checksum: fa6e698cb53db45e4628559e557ddaf554103d2a96a1d62892c8f4032cd3bc8871796cae9eabc1bc700e2b6677611521ce5bb1d9a27700086039965d0cf34518 - languageName: node - linkType: hard - -"punycode@npm:^2.1.0": - version: 2.3.0 - resolution: "punycode@npm:2.3.0" - checksum: 39f760e09a2a3bbfe8f5287cf733ecdad69d6af2fe6f97ca95f24b8921858b91e9ea3c9eeec6e08cede96181b3bb33f95c6ffd8c77e63986508aa2e8159fa200 - languageName: node - linkType: hard - -"pvtsutils@npm:^1.3.2": - version: 1.3.2 - resolution: "pvtsutils@npm:1.3.2" - dependencies: - tslib: ^2.4.0 - checksum: 9b8155611363e2f40276879f2454e60204b45be0cd0482f9373f369308a2e9c76d5d74cdf661a3f5aae8022d75ea159eb0ba38ee78fc782ee3051e4722db98d0 - languageName: node - linkType: hard - -"pvutils@npm:^1.1.3": - version: 1.1.3 - resolution: "pvutils@npm:1.1.3" - checksum: 2ee26a9e5176c348977d6ec00d8ee80bff62f51743b1c5fe8abeeb4c5d29d9959cdfe0ce146707a9e6801bce88190fed3002d720b072dc87d031c692820b44c9 - languageName: node - linkType: hard - -"queue-microtask@npm:^1.2.2": - version: 1.2.3 - resolution: "queue-microtask@npm:1.2.3" - checksum: b676f8c040cdc5b12723ad2f91414d267605b26419d5c821ff03befa817ddd10e238d22b25d604920340fd73efd8ba795465a0377c4adf45a4a41e4234e42dc4 - languageName: node - linkType: hard - -"react-animate-height@npm:3.1.0": - version: 3.1.0 - resolution: "react-animate-height@npm:3.1.0" - peerDependencies: - react: ">=16.8.0" - react-dom: ">=16.8.0" - checksum: 46f802fe1e70d5d451d74fabece0dc8e2060543ea106dd56fc0ff544391e8939f8876af480323854dc39cbefd286d8cece29e509de3fb2d231fa9f77097532af - languageName: node - linkType: hard - -"react-dom@npm:18.2.0": - version: 18.2.0 - resolution: "react-dom@npm:18.2.0" - dependencies: - loose-envify: ^1.1.0 - scheduler: ^0.23.0 - peerDependencies: - react: ^18.2.0 - checksum: 7d323310bea3a91be2965f9468d552f201b1c27891e45ddc2d6b8f717680c95a75ae0bc1e3f5cf41472446a2589a75aed4483aee8169287909fcd59ad149e8cc - languageName: node - linkType: hard - -"react-is@npm:^16.13.1, react-is@npm:^16.7.0": - version: 16.13.1 - resolution: "react-is@npm:16.13.1" - checksum: f7a19ac3496de32ca9ae12aa030f00f14a3d45374f1ceca0af707c831b2a6098ef0d6bdae51bd437b0a306d7f01d4677fcc8de7c0d331eb47ad0f46130e53c5f - languageName: node - linkType: hard - -"react-is@npm:^18.0.0": - version: 18.2.0 - resolution: "react-is@npm:18.2.0" - checksum: e72d0ba81b5922759e4aff17e0252bd29988f9642ed817f56b25a3e217e13eea8a7f2322af99a06edb779da12d5d636e9fda473d620df9a3da0df2a74141d53e - languageName: node - linkType: hard - -"react-markdown@npm:8.0.5": - version: 8.0.5 - resolution: "react-markdown@npm:8.0.5" - dependencies: - "@types/hast": ^2.0.0 - "@types/prop-types": ^15.0.0 - "@types/unist": ^2.0.0 - comma-separated-tokens: ^2.0.0 - hast-util-whitespace: ^2.0.0 - prop-types: ^15.0.0 - property-information: ^6.0.0 - react-is: ^18.0.0 - remark-parse: ^10.0.0 - remark-rehype: ^10.0.0 - space-separated-tokens: ^2.0.0 - style-to-object: ^0.4.0 - unified: ^10.0.0 - unist-util-visit: ^4.0.0 - vfile: ^5.0.0 - peerDependencies: - "@types/react": ">=16" - react: ">=16" - checksum: 9d11b7aba16216d590e56b4744e05d2925141bfb0f5885b3d9400ccf006cd24b79ce3b3d20af8a083a01324215b58fa4c5979e44f69d54123ff1dd5dacb0dc89 - languageName: node - linkType: hard - -"react-merge-refs@npm:2.0.1": - version: 2.0.1 - resolution: "react-merge-refs@npm:2.0.1" - checksum: c0b6fdb384a92e9b2bb7d56128244a2db97b9343c0dcae70f172352c3732312266c078495902707e45f523625afcba78996a22edea3a8e7b2b17fe97347059fe - languageName: node - linkType: hard - -"react-refresh@npm:^0.14.0": - version: 0.14.0 - resolution: "react-refresh@npm:0.14.0" - checksum: dc69fa8c993df512f42dd0f1b604978ae89bd747c0ed5ec595c0cc50d535fb2696619ccd98ae28775cc01d0a7c146a532f0f7fb81dc22e1977c242a4912312f4 - languageName: node - linkType: hard - -"react-router-dom@npm:6.9.0": - version: 6.9.0 - resolution: "react-router-dom@npm:6.9.0" - dependencies: - "@remix-run/router": 1.4.0 - react-router: 6.9.0 - peerDependencies: - react: ">=16.8" - react-dom: ">=16.8" - checksum: 4d593491ab8db5611feda70002c62902baebb84d5c1c5e5b6172496f31f91130deee132bf4240dea634a88cb86c76d6da348f15b9cd5e5197be455efd88edf72 - languageName: node - linkType: hard - -"react-router@npm:6.9.0": - version: 6.9.0 - resolution: "react-router@npm:6.9.0" - dependencies: - "@remix-run/router": 1.4.0 - peerDependencies: - react: ">=16.8" - checksum: b2a5f42e042bee7a7f116ca7817b0e58359e5353d84887c9fe7a633d7490c03b1e0ae37cd01830c2a381e3d1e7d501bb4751e53cc3d491e25f36582d3f6e0546 - languageName: node - linkType: hard - -"react-spring@npm:9.6.1": - version: 9.6.1 - resolution: "react-spring@npm:9.6.1" - dependencies: - "@react-spring/core": ~9.6.1 - "@react-spring/konva": ~9.6.1 - "@react-spring/native": ~9.6.1 - "@react-spring/three": ~9.6.1 - "@react-spring/web": ~9.6.1 - "@react-spring/zdog": ~9.6.1 - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 - checksum: ee18d0fc4aa98b952c2d8c2a939c5fb05f160ca30d92b5b4a7d932910c1146120118f0506deb73fd671e147f891391a3556de512fb2cdf88b795a3c6f3b53219 - languageName: node - linkType: hard - -"react-textarea-autosize@npm:^8.4.0": - version: 8.4.0 - resolution: "react-textarea-autosize@npm:8.4.0" - dependencies: - "@babel/runtime": ^7.10.2 - use-composed-ref: ^1.3.0 - use-latest: ^1.2.1 - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - checksum: 055fb51b74e1ab6b286490cfcd8ed77a760f6fc90706053b5dfcb138199d02c56289a1060a1daf9f3ae37ffd66f73e9553f026d0fad446bc2243b713acf48e05 - languageName: node - linkType: hard - -"react-transition-group@npm:^4.4.5": - version: 4.4.5 - resolution: "react-transition-group@npm:4.4.5" - dependencies: - "@babel/runtime": ^7.5.5 - dom-helpers: ^5.0.1 - loose-envify: ^1.4.0 - prop-types: ^15.6.2 - peerDependencies: - react: ">=16.6.0" - react-dom: ">=16.6.0" - checksum: 75602840106aa9c6545149d6d7ae1502fb7b7abadcce70a6954c4b64a438ff1cd16fc77a0a1e5197cdd72da398f39eb929ea06f9005c45b132ed34e056ebdeb1 - languageName: node - linkType: hard - -"react-use-measure@npm:2.1.1": - version: 2.1.1 - resolution: "react-use-measure@npm:2.1.1" - dependencies: - debounce: ^1.2.1 - peerDependencies: - react: ">=16.13" - react-dom: ">=16.13" - checksum: b8e8939229d463c3c505f7b617925c0228efae0cd6f651371f463846417b06c9170be57df51293a61027c41770f8a090fdb8a08717c4e36290ccb496e0318f1f - languageName: node - linkType: hard - -"react-virtual@npm:2.10.4": - version: 2.10.4 - resolution: "react-virtual@npm:2.10.4" - dependencies: - "@reach/observe-rect": ^1.1.0 - peerDependencies: - react: ^16.6.3 || ^17.0.0 - checksum: 1bebc741b01057829a7d7f29256114caecf0597d41b187cb41e75af77f24a87c780bc1a81ec11205b78ee2e9c801fc5e36b20a9e1ab7ddc70a18dd95417795f8 - languageName: node - linkType: hard - -"react@npm:18.2.0": - version: 18.2.0 - resolution: "react@npm:18.2.0" - dependencies: - loose-envify: ^1.1.0 - checksum: 88e38092da8839b830cda6feef2e8505dec8ace60579e46aa5490fc3dc9bba0bd50336507dc166f43e3afc1c42939c09fe33b25fae889d6f402721dcd78fca1b - languageName: node - linkType: hard - -"readable-stream@npm:^3.4.0, readable-stream@npm:^3.6.0": - version: 3.6.2 - resolution: "readable-stream@npm:3.6.2" - dependencies: - inherits: ^2.0.3 - string_decoder: ^1.1.1 - util-deprecate: ^1.0.1 - checksum: bdcbe6c22e846b6af075e32cf8f4751c2576238c5043169a1c221c92ee2878458a816a4ea33f4c67623c0b6827c8a400409bfb3cf0bf3381392d0b1dfb52ac8d - languageName: node - linkType: hard - -"regenerate-unicode-properties@npm:^10.1.0": - version: 10.1.0 - resolution: "regenerate-unicode-properties@npm:10.1.0" - dependencies: - regenerate: ^1.4.2 - checksum: b1a8929588433ab8b9dc1a34cf3665b3b472f79f2af6ceae00d905fc496b332b9af09c6718fb28c730918f19a00dc1d7310adbaa9b72a2ec7ad2f435da8ace17 - languageName: node - linkType: hard - -"regenerate@npm:^1.4.2": - version: 1.4.2 - resolution: "regenerate@npm:1.4.2" - checksum: 3317a09b2f802da8db09aa276e469b57a6c0dd818347e05b8862959c6193408242f150db5de83c12c3fa99091ad95fb42a6db2c3329bfaa12a0ea4cbbeb30cb0 - languageName: node - linkType: hard - -"regenerator-runtime@npm:^0.10.5": - version: 0.10.5 - resolution: "regenerator-runtime@npm:0.10.5" - checksum: 35b33dbe5381d268b2be98f4ee4b028702acb38b012bff90723df067f915a337e5c979cce4dab4ed23febb223bbebb8820d46902f897742c55818c22c14e2a7c - languageName: node - linkType: hard - -"regenerator-runtime@npm:^0.11.0": - version: 0.11.1 - resolution: "regenerator-runtime@npm:0.11.1" - checksum: 3c97bd2c7b2b3247e6f8e2147a002eb78c995323732dad5dc70fac8d8d0b758d0295e7015b90d3d444446ae77cbd24b9f9123ec3a77018e81d8999818301b4f4 - languageName: node - linkType: hard - -"regenerator-runtime@npm:^0.12.0": - version: 0.12.1 - resolution: "regenerator-runtime@npm:0.12.1" - checksum: 348c401336bcebe2be17fd4f24c5b0a1ed75bff3024dc817a69cdc776b48b98c7f6f3b98e1baa4220569440bb9215e1fff3dcb01c8aad3ff2ed3732e30d017bf - languageName: node - linkType: hard - -"regenerator-runtime@npm:^0.13.11": - version: 0.13.11 - resolution: "regenerator-runtime@npm:0.13.11" - checksum: 27481628d22a1c4e3ff551096a683b424242a216fee44685467307f14d58020af1e19660bf2e26064de946bad7eff28950eae9f8209d55723e2d9351e632bbb4 - languageName: node - linkType: hard - -"regenerator-transform@npm:^0.15.1": - version: 0.15.1 - resolution: "regenerator-transform@npm:0.15.1" - dependencies: - "@babel/runtime": ^7.8.4 - checksum: 2d15bdeadbbfb1d12c93f5775493d85874dbe1d405bec323da5c61ec6e701bc9eea36167483e1a5e752de9b2df59ab9a2dfff6bf3784f2b28af2279a673d29a4 - languageName: node - linkType: hard - -"regexp.prototype.flags@npm:^1.4.3": - version: 1.4.3 - resolution: "regexp.prototype.flags@npm:1.4.3" - dependencies: - call-bind: ^1.0.2 - define-properties: ^1.1.3 - functions-have-names: ^1.2.2 - checksum: 51228bae732592adb3ededd5e15426be25f289e9c4ef15212f4da73f4ec3919b6140806374b8894036a86020d054a8d2657d3fee6bb9b4d35d8939c20030b7a6 - languageName: node - linkType: hard - -"regexpp@npm:^3.2.0": - version: 3.2.0 - resolution: "regexpp@npm:3.2.0" - checksum: a78dc5c7158ad9ddcfe01aa9144f46e192ddbfa7b263895a70a5c6c73edd9ce85faf7c0430e59ac38839e1734e275b9c3de5c57ee3ab6edc0e0b1bdebefccef8 - languageName: node - linkType: hard - -"regexpu-core@npm:^5.3.1": - version: 5.3.2 - resolution: "regexpu-core@npm:5.3.2" - dependencies: - "@babel/regjsgen": ^0.8.0 - regenerate: ^1.4.2 - regenerate-unicode-properties: ^10.1.0 - regjsparser: ^0.9.1 - unicode-match-property-ecmascript: ^2.0.0 - unicode-match-property-value-ecmascript: ^2.1.0 - checksum: 95bb97088419f5396e07769b7de96f995f58137ad75fac5811fb5fe53737766dfff35d66a0ee66babb1eb55386ef981feaef392f9df6d671f3c124812ba24da2 - languageName: node - linkType: hard - -"regjsparser@npm:^0.9.1": - version: 0.9.1 - resolution: "regjsparser@npm:0.9.1" - dependencies: - jsesc: ~0.5.0 - bin: - regjsparser: bin/parser - checksum: 5e1b76afe8f1d03c3beaf9e0d935dd467589c3625f6d65fb8ffa14f224d783a0fed4bf49c2c1b8211043ef92b6117313419edf055a098ed8342e340586741afc - languageName: node - linkType: hard - -"rehype-raw@npm:6.1.1": - version: 6.1.1 - resolution: "rehype-raw@npm:6.1.1" - dependencies: - "@types/hast": ^2.0.0 - hast-util-raw: ^7.2.0 - unified: ^10.0.0 - checksum: a1f9d309e609f49fb1f1e06e722705f4dd2e569653a89f756eaccb33b612cf1bb511216a81d10a619d11d047afc161e4b3cb99b957df05a8ba8fdbd5843f949a - languageName: node - linkType: hard - -"relay-runtime@npm:12.0.0": - version: 12.0.0 - resolution: "relay-runtime@npm:12.0.0" - dependencies: - "@babel/runtime": ^7.0.0 - fbjs: ^3.0.0 - invariant: ^2.2.4 - checksum: 51cdc8a5e04188982452ae4e7c6ac7d6375ee769130d24ce8e8f9cdd45aa7e11ecd68670f56e30dcee1b4974585e88ecce19e69a9868b80cda0db7678c3b8f0a - languageName: node - linkType: hard - -"remark-parse@npm:^10.0.0": - version: 10.0.1 - resolution: "remark-parse@npm:10.0.1" - dependencies: - "@types/mdast": ^3.0.0 - mdast-util-from-markdown: ^1.0.0 - unified: ^10.0.0 - checksum: 505088e564ab53ff054433368adbb7b551f69240c7d9768975529837a86f1d0f085e72d6211929c5c42db315273df4afc94f3d3a8662ffdb69468534c6643d29 - languageName: node - linkType: hard - -"remark-rehype@npm:^10.0.0": - version: 10.1.0 - resolution: "remark-rehype@npm:10.1.0" - dependencies: - "@types/hast": ^2.0.0 - "@types/mdast": ^3.0.0 - mdast-util-to-hast: ^12.1.0 - unified: ^10.0.0 - checksum: b9ac8acff3383b204dfdc2599d0bdf86e6ca7e837033209584af2e6aaa6a9013e519a379afa3201299798cab7298c8f4b388de118c312c67234c133318aec084 - languageName: node - linkType: hard - -"remedial@npm:^1.0.7": - version: 1.0.8 - resolution: "remedial@npm:1.0.8" - checksum: 12df7c55eb92501d7f33cfe5f5ad12be13bb6ac0c53f494aaa9963d5a5155bb8be2143e8d5e17afa1a500ef5dc71d13642920d35350f2a31b65a9778afab6869 - languageName: node - linkType: hard - -"remove-accents@npm:0.4.2": - version: 0.4.2 - resolution: "remove-accents@npm:0.4.2" - checksum: 84a6988555dea24115e2d1954db99509588d43fe55a1590f0b5894802776f7b488b3151c37ceb9e4f4b646f26b80b7325dcea2fae58bc3865df146e1fa606711 - languageName: node - linkType: hard - -"remove-trailing-separator@npm:^1.0.1": - version: 1.1.0 - resolution: "remove-trailing-separator@npm:1.1.0" - checksum: d3c20b5a2d987db13e1cca9385d56ecfa1641bae143b620835ac02a6b70ab88f68f117a0021838db826c57b31373d609d52e4f31aca75fc490c862732d595419 - languageName: node - linkType: hard - -"remove-trailing-spaces@npm:^1.0.6": - version: 1.0.8 - resolution: "remove-trailing-spaces@npm:1.0.8" - checksum: 81f615c5cd8dd6a5e3017dcc9af598965575d176d42ef99cfd7b894529991f464e629fd68aba089f5c6bebf5bb8070a5eee56f3b621aba55e8ef524d6a4d4f69 - languageName: node - linkType: hard - -"require-directory@npm:^2.1.1": - version: 2.1.1 - resolution: "require-directory@npm:2.1.1" - checksum: fb47e70bf0001fdeabdc0429d431863e9475e7e43ea5f94ad86503d918423c1543361cc5166d713eaa7029dd7a3d34775af04764bebff99ef413111a5af18c80 - languageName: node - linkType: hard - -"require-main-filename@npm:^2.0.0": - version: 2.0.0 - resolution: "require-main-filename@npm:2.0.0" - checksum: e9e294695fea08b076457e9ddff854e81bffbe248ed34c1eec348b7abbd22a0d02e8d75506559e2265e96978f3c4720bd77a6dad84755de8162b357eb6c778c7 - languageName: node - linkType: hard - -"resize-observer-polyfill@npm:1.5.1": - version: 1.5.1 - resolution: "resize-observer-polyfill@npm:1.5.1" - checksum: 57e7f79489867b00ba43c9c051524a5c8f162a61d5547e99333549afc23e15c44fd43f2f318ea0261ea98c0eb3158cca261e6f48d66e1ed1cd1f340a43977094 - languageName: node - linkType: hard - -"resize-observer@npm:^1.0.0": - version: 1.0.4 - resolution: "resize-observer@npm:1.0.4" - checksum: 43e2f45e40507279cad474f6bd2fe62e92de1fd1d67cd5285ece1fec6c1b664c4d3795b094b2be292244bf542b1b5402578670400beadc2cfedac8fb483a0976 - languageName: node - linkType: hard - -"resolve-from@npm:5.0.0": - version: 5.0.0 - resolution: "resolve-from@npm:5.0.0" - checksum: 4ceeb9113e1b1372d0cd969f3468fa042daa1dd9527b1b6bb88acb6ab55d8b9cd65dbf18819f9f9ddf0db804990901dcdaade80a215e7b2c23daae38e64f5bdf - languageName: node - linkType: hard - -"resolve-from@npm:^4.0.0": - version: 4.0.0 - resolution: "resolve-from@npm:4.0.0" - checksum: f4ba0b8494846a5066328ad33ef8ac173801a51739eb4d63408c847da9a2e1c1de1e6cbbf72699211f3d13f8fc1325648b169bd15eb7da35688e30a5fb0e4a7f - languageName: node - linkType: hard - -"resolve@npm:^1.14.2, resolve@npm:^1.19.0, resolve@npm:^1.22.1": - version: 1.22.1 - resolution: "resolve@npm:1.22.1" - dependencies: - is-core-module: ^2.9.0 - path-parse: ^1.0.7 - supports-preserve-symlinks-flag: ^1.0.0 - bin: - resolve: bin/resolve - checksum: 07af5fc1e81aa1d866cbc9e9460fbb67318a10fa3c4deadc35c3ad8a898ee9a71a86a65e4755ac3195e0ea0cfbe201eb323ebe655ce90526fd61917313a34e4e - languageName: node - linkType: hard - -"resolve@npm:^2.0.0-next.4": - version: 2.0.0-next.4 - resolution: "resolve@npm:2.0.0-next.4" - dependencies: - is-core-module: ^2.9.0 - path-parse: ^1.0.7 - supports-preserve-symlinks-flag: ^1.0.0 - bin: - resolve: bin/resolve - checksum: c438ac9a650f2030fd074219d7f12ceb983b475da2d89ad3d6dd05fbf6b7a0a8cd37d4d10b43cb1f632bc19f22246ab7f36ebda54d84a29bfb2910a0680906d3 - languageName: node - linkType: hard - -"resolve@patch:resolve@^1.14.2#~builtin, resolve@patch:resolve@^1.19.0#~builtin, resolve@patch:resolve@^1.22.1#~builtin": - version: 1.22.1 - resolution: "resolve@patch:resolve@npm%3A1.22.1#~builtin::version=1.22.1&hash=c3c19d" - dependencies: - is-core-module: ^2.9.0 - path-parse: ^1.0.7 - supports-preserve-symlinks-flag: ^1.0.0 - bin: - resolve: bin/resolve - checksum: 5656f4d0bedcf8eb52685c1abdf8fbe73a1603bb1160a24d716e27a57f6cecbe2432ff9c89c2bd57542c3a7b9d14b1882b73bfe2e9d7849c9a4c0b8b39f02b8b - languageName: node - linkType: hard - -"resolve@patch:resolve@^2.0.0-next.4#~builtin": - version: 2.0.0-next.4 - resolution: "resolve@patch:resolve@npm%3A2.0.0-next.4#~builtin::version=2.0.0-next.4&hash=c3c19d" - dependencies: - is-core-module: ^2.9.0 - path-parse: ^1.0.7 - supports-preserve-symlinks-flag: ^1.0.0 - bin: - resolve: bin/resolve - checksum: 4bf9f4f8a458607af90518ff73c67a4bc1a38b5a23fef2bb0ccbd45e8be89820a1639b637b0ba377eb2be9eedfb1739a84cde24fe4cd670c8207d8fea922b011 - languageName: node - linkType: hard - -"response-iterator@npm:^0.2.6": - version: 0.2.6 - resolution: "response-iterator@npm:0.2.6" - checksum: b0db3c0665a0d698d65512951de9623c086b9c84ce015a76076d4bd0bf733779601d0b41f0931d16ae38132fba29e1ce291c1f8e6550fc32daaa2dc3ab4f338d - languageName: node - linkType: hard - -"restore-cursor@npm:^3.1.0": - version: 3.1.0 - resolution: "restore-cursor@npm:3.1.0" - dependencies: - onetime: ^5.1.0 - signal-exit: ^3.0.2 - checksum: f877dd8741796b909f2a82454ec111afb84eb45890eb49ac947d87991379406b3b83ff9673a46012fca0d7844bb989f45cc5b788254cf1a39b6b5a9659de0630 - languageName: node - linkType: hard - -"retry@npm:^0.12.0": - version: 0.12.0 - resolution: "retry@npm:0.12.0" - checksum: 623bd7d2e5119467ba66202d733ec3c2e2e26568074923bc0585b6b99db14f357e79bdedb63cab56cec47491c4a0da7e6021a7465ca6dc4f481d3898fdd3158c - languageName: node - linkType: hard - -"reusify@npm:^1.0.4": - version: 1.0.4 - resolution: "reusify@npm:1.0.4" - checksum: c3076ebcc22a6bc252cb0b9c77561795256c22b757f40c0d8110b1300723f15ec0fc8685e8d4ea6d7666f36c79ccc793b1939c748bf36f18f542744a4e379fcc - languageName: node - linkType: hard - -"rfdc@npm:^1.3.0": - version: 1.3.0 - resolution: "rfdc@npm:1.3.0" - checksum: fb2ba8512e43519983b4c61bd3fa77c0f410eff6bae68b08614437bc3f35f91362215f7b4a73cbda6f67330b5746ce07db5dd9850ad3edc91271ad6deea0df32 - languageName: node - linkType: hard - -"rimraf@npm:^3.0.2": - version: 3.0.2 - resolution: "rimraf@npm:3.0.2" - dependencies: - glob: ^7.1.3 - bin: - rimraf: bin.js - checksum: 87f4164e396f0171b0a3386cc1877a817f572148ee13a7e113b238e48e8a9f2f31d009a92ec38a591ff1567d9662c6b67fd8818a2dbbaed74bc26a87a2a4a9a0 - languageName: node - linkType: hard - -"rollup@npm:^3.18.0": - version: 3.20.0 - resolution: "rollup@npm:3.20.0" - dependencies: - fsevents: ~2.3.2 - dependenciesMeta: - fsevents: - optional: true - bin: - rollup: dist/bin/rollup - checksum: ebf75f48eb81234f8233b4ed145b00841cefba26802d4f069f161247ffba085ca5bb165cc3cd662d9c36cfc135a67660dfff9088d3da2d2c6a70addc15f3233a - languageName: node - linkType: hard - -"run-async@npm:^2.4.0": - version: 2.4.1 - resolution: "run-async@npm:2.4.1" - checksum: a2c88aa15df176f091a2878eb840e68d0bdee319d8d97bbb89112223259cebecb94bc0defd735662b83c2f7a30bed8cddb7d1674eb48ae7322dc602b22d03797 - languageName: node - linkType: hard - -"run-parallel@npm:^1.1.9": - version: 1.2.0 - resolution: "run-parallel@npm:1.2.0" - dependencies: - queue-microtask: ^1.2.2 - checksum: cb4f97ad25a75ebc11a8ef4e33bb962f8af8516bb2001082ceabd8902e15b98f4b84b4f8a9b222e5d57fc3bd1379c483886ed4619367a7680dad65316993021d - languageName: node - linkType: hard - -"rxjs@npm:^7.5.5": - version: 7.8.0 - resolution: "rxjs@npm:7.8.0" - dependencies: - tslib: ^2.1.0 - checksum: 61b4d4fd323c1043d8d6ceb91f24183b28bcf5def4f01ca111511d5c6b66755bc5578587fe714ef5d67cf4c9f2e26f4490d4e1d8cabf9bd5967687835e9866a2 - languageName: node - linkType: hard - -"sade@npm:^1.7.3": - version: 1.8.1 - resolution: "sade@npm:1.8.1" - dependencies: - mri: ^1.1.0 - checksum: 0756e5b04c51ccdc8221ebffd1548d0ce5a783a44a0fa9017a026659b97d632913e78f7dca59f2496aa996a0be0b0c322afd87ca72ccd909406f49dbffa0f45d - languageName: node - linkType: hard - -"safe-buffer@npm:~5.2.0": - version: 5.2.1 - resolution: "safe-buffer@npm:5.2.1" - checksum: b99c4b41fdd67a6aaf280fcd05e9ffb0813654894223afb78a31f14a19ad220bba8aba1cb14eddce1fcfb037155fe6de4e861784eb434f7d11ed58d1e70dd491 - languageName: node - linkType: hard - -"safe-regex-test@npm:^1.0.0": - version: 1.0.0 - resolution: "safe-regex-test@npm:1.0.0" - dependencies: - call-bind: ^1.0.2 - get-intrinsic: ^1.1.3 - is-regex: ^1.1.4 - checksum: bc566d8beb8b43c01b94e67de3f070fd2781685e835959bbbaaec91cc53381145ca91f69bd837ce6ec244817afa0a5e974fc4e40a2957f0aca68ac3add1ddd34 - languageName: node - linkType: hard - -"safer-buffer@npm:>= 2.1.2 < 3, safer-buffer@npm:>= 2.1.2 < 3.0.0": - version: 2.1.2 - resolution: "safer-buffer@npm:2.1.2" - checksum: cab8f25ae6f1434abee8d80023d7e72b598cf1327164ddab31003c51215526801e40b66c5e65d658a0af1e9d6478cadcb4c745f4bd6751f97d8644786c0978b0 - languageName: node - linkType: hard - -"scheduler@npm:^0.23.0": - version: 0.23.0 - resolution: "scheduler@npm:0.23.0" - dependencies: - loose-envify: ^1.1.0 - checksum: d79192eeaa12abef860c195ea45d37cbf2bbf5f66e3c4dcd16f54a7da53b17788a70d109ee3d3dde1a0fd50e6a8fc171f4300356c5aee4fc0171de526bf35f8a - languageName: node - linkType: hard - -"scuid@npm:^1.1.0": - version: 1.1.0 - resolution: "scuid@npm:1.1.0" - checksum: cd094ac3718b0070a222f9a499b280c698fdea10268cc163fa244421099544c1766dd893fdee0e2a8eba5d53ab9d0bcb11067bedff166665030fa6fda25a096b - languageName: node - linkType: hard - -"semver@npm:^6.1.1, semver@npm:^6.1.2, semver@npm:^6.3.0": - version: 6.3.0 - resolution: "semver@npm:6.3.0" - bin: - semver: ./bin/semver.js - checksum: 1b26ecf6db9e8292dd90df4e781d91875c0dcc1b1909e70f5d12959a23c7eebb8f01ea581c00783bbee72ceeaad9505797c381756326073850dc36ed284b21b9 - languageName: node - linkType: hard - -"semver@npm:^7.3.5, semver@npm:^7.3.7": - version: 7.3.8 - resolution: "semver@npm:7.3.8" - dependencies: - lru-cache: ^6.0.0 - bin: - semver: bin/semver.js - checksum: ba9c7cbbf2b7884696523450a61fee1a09930d888b7a8d7579025ad93d459b2d1949ee5bbfeb188b2be5f4ac163544c5e98491ad6152df34154feebc2cc337c1 - languageName: node - linkType: hard - -"sentence-case@npm:^3.0.4": - version: 3.0.4 - resolution: "sentence-case@npm:3.0.4" - dependencies: - no-case: ^3.0.4 - tslib: ^2.0.3 - upper-case-first: ^2.0.2 - checksum: 3cfe6c0143e649132365695706702d7f729f484fa7b25f43435876efe7af2478243eefb052bacbcce10babf9319fd6b5b6bc59b94c80a1c819bcbb40651465d5 - languageName: node - linkType: hard - -"set-blocking@npm:^2.0.0": - version: 2.0.0 - resolution: "set-blocking@npm:2.0.0" - checksum: 6e65a05f7cf7ebdf8b7c75b101e18c0b7e3dff4940d480efed8aad3a36a4005140b660fa1d804cb8bce911cac290441dc728084a30504d3516ac2ff7ad607b02 - languageName: node - linkType: hard - -"setimmediate@npm:^1.0.5": - version: 1.0.5 - resolution: "setimmediate@npm:1.0.5" - checksum: c9a6f2c5b51a2dabdc0247db9c46460152ffc62ee139f3157440bd48e7c59425093f42719ac1d7931f054f153e2d26cf37dfeb8da17a794a58198a2705e527fd - languageName: node - linkType: hard - -"shallowequal@npm:^1.1.0": - version: 1.1.0 - resolution: "shallowequal@npm:1.1.0" - checksum: f4c1de0837f106d2dbbfd5d0720a5d059d1c66b42b580965c8f06bb1db684be8783538b684092648c981294bf817869f743a066538771dbecb293df78f765e00 - languageName: node - linkType: hard - -"shebang-command@npm:^2.0.0": - version: 2.0.0 - resolution: "shebang-command@npm:2.0.0" - dependencies: - shebang-regex: ^3.0.0 - checksum: 6b52fe87271c12968f6a054e60f6bde5f0f3d2db483a1e5c3e12d657c488a15474121a1d55cd958f6df026a54374ec38a4a963988c213b7570e1d51575cea7fa - languageName: node - linkType: hard - -"shebang-regex@npm:^3.0.0": - version: 3.0.0 - resolution: "shebang-regex@npm:3.0.0" - checksum: 1a2bcae50de99034fcd92ad4212d8e01eedf52c7ec7830eedcf886622804fe36884278f2be8be0ea5fde3fd1c23911643a4e0f726c8685b61871c8908af01222 - languageName: node - linkType: hard - -"shell-quote@npm:^1.7.3": - version: 1.8.0 - resolution: "shell-quote@npm:1.8.0" - checksum: 6ef7c5e308b9c77eedded882653a132214fa98b4a1512bb507588cf6cd2fc78bfee73e945d0c3211af028a1eabe09c6a19b96edd8977dc149810797e93809749 - languageName: node - linkType: hard - -"shorthash@npm:0.0.2": - version: 0.0.2 - resolution: "shorthash@npm:0.0.2" - checksum: 4048833f2a7f324350cc1a48a6b64bca268e5a2e9c59cb6cad3607c41fd800bf1739498fe4b8b6737709cdb540fb74125fb7254eba98bdd3dc41e8d9f7990b20 - languageName: node - linkType: hard - -"side-channel@npm:^1.0.4": - version: 1.0.4 - resolution: "side-channel@npm:1.0.4" - dependencies: - call-bind: ^1.0.0 - get-intrinsic: ^1.0.2 - object-inspect: ^1.9.0 - checksum: 351e41b947079c10bd0858364f32bb3a7379514c399edb64ab3dce683933483fc63fb5e4efe0a15a2e8a7e3c436b6a91736ddb8d8c6591b0460a24bb4a1ee245 - languageName: node - linkType: hard - -"signal-exit@npm:^3.0.2, signal-exit@npm:^3.0.7": - version: 3.0.7 - resolution: "signal-exit@npm:3.0.7" - checksum: a2f098f247adc367dffc27845853e9959b9e88b01cb301658cfe4194352d8d2bb32e18467c786a7fe15f1d44b233ea35633d076d5e737870b7139949d1ab6318 - languageName: node - linkType: hard - -"signedsource@npm:^1.0.0": - version: 1.0.0 - resolution: "signedsource@npm:1.0.0" - checksum: 64b2c8d7a48de9009cfd3aff62bb7c88abf3b8e0421f17ebb1d7f5ca9cc9c3ad10f5a1e3ae6cd804e4e6121c87b668202ae9057065f058ddfbf34ea65f63945d - languageName: node - linkType: hard - -"slash@npm:^3.0.0": - version: 3.0.0 - resolution: "slash@npm:3.0.0" - checksum: 94a93fff615f25a999ad4b83c9d5e257a7280c90a32a7cb8b4a87996e4babf322e469c42b7f649fd5796edd8687652f3fb452a86dc97a816f01113183393f11c - languageName: node - linkType: hard - -"slice-ansi@npm:^3.0.0": - version: 3.0.0 - resolution: "slice-ansi@npm:3.0.0" - dependencies: - ansi-styles: ^4.0.0 - astral-regex: ^2.0.0 - is-fullwidth-code-point: ^3.0.0 - checksum: 5ec6d022d12e016347e9e3e98a7eb2a592213a43a65f1b61b74d2c78288da0aded781f665807a9f3876b9daa9ad94f64f77d7633a0458876c3a4fdc4eb223f24 - languageName: node - linkType: hard - -"slice-ansi@npm:^4.0.0": - version: 4.0.0 - resolution: "slice-ansi@npm:4.0.0" - dependencies: - ansi-styles: ^4.0.0 - astral-regex: ^2.0.0 - is-fullwidth-code-point: ^3.0.0 - checksum: 4a82d7f085b0e1b070e004941ada3c40d3818563ac44766cca4ceadd2080427d337554f9f99a13aaeb3b4a94d9964d9466c807b3d7b7541d1ec37ee32d308756 - languageName: node - linkType: hard - -"smart-buffer@npm:^4.2.0": - version: 4.2.0 - resolution: "smart-buffer@npm:4.2.0" - checksum: b5167a7142c1da704c0e3af85c402002b597081dd9575031a90b4f229ca5678e9a36e8a374f1814c8156a725d17008ae3bde63b92f9cfd132526379e580bec8b - languageName: node - linkType: hard - -"snake-case@npm:^3.0.4": - version: 3.0.4 - resolution: "snake-case@npm:3.0.4" - dependencies: - dot-case: ^3.0.4 - tslib: ^2.0.3 - checksum: 0a7a79900bbb36f8aaa922cf111702a3647ac6165736d5dc96d3ef367efc50465cac70c53cd172c382b022dac72ec91710608e5393de71f76d7142e6fd80e8a3 - languageName: node - linkType: hard - -"socks-proxy-agent@npm:^7.0.0": - version: 7.0.0 - resolution: "socks-proxy-agent@npm:7.0.0" - dependencies: - agent-base: ^6.0.2 - debug: ^4.3.3 - socks: ^2.6.2 - checksum: 720554370154cbc979e2e9ce6a6ec6ced205d02757d8f5d93fe95adae454fc187a5cbfc6b022afab850a5ce9b4c7d73e0f98e381879cf45f66317a4895953846 - languageName: node - linkType: hard - -"socks@npm:^2.6.2": - version: 2.7.1 - resolution: "socks@npm:2.7.1" - dependencies: - ip: ^2.0.0 - smart-buffer: ^4.2.0 - checksum: 259d9e3e8e1c9809a7f5c32238c3d4d2a36b39b83851d0f573bfde5f21c4b1288417ce1af06af1452569cd1eb0841169afd4998f0e04ba04656f6b7f0e46d748 - languageName: node - linkType: hard - -"source-map-js@npm:^1.0.2": - version: 1.0.2 - resolution: "source-map-js@npm:1.0.2" - checksum: c049a7fc4deb9a7e9b481ae3d424cc793cb4845daa690bc5a05d428bf41bf231ced49b4cf0c9e77f9d42fdb3d20d6187619fc586605f5eabe995a316da8d377c - languageName: node - linkType: hard - -"source-map@npm:^0.5.7": - version: 0.5.7 - resolution: "source-map@npm:0.5.7" - checksum: 5dc2043b93d2f194142c7f38f74a24670cd7a0063acdaf4bf01d2964b402257ae843c2a8fa822ad5b71013b5fcafa55af7421383da919752f22ff488bc553f4d - languageName: node - linkType: hard - -"space-separated-tokens@npm:^2.0.0": - version: 2.0.2 - resolution: "space-separated-tokens@npm:2.0.2" - checksum: 202e97d7ca1ba0758a0aa4fe226ff98142073bcceeff2da3aad037968878552c3bbce3b3231970025375bbba5aee00c5b8206eda408da837ab2dc9c0f26be990 - languageName: node - linkType: hard - -"sponge-case@npm:^1.0.1": - version: 1.0.1 - resolution: "sponge-case@npm:1.0.1" - dependencies: - tslib: ^2.0.3 - checksum: 64f53d930f63c5a9e59d4cae487c1ffa87d25eab682833b01d572cc885e7e3fdbad4f03409a41f03ecb27f1f8959432253eb48332c7007c3388efddb24ba2792 - languageName: node - linkType: hard - -"ssri@npm:^9.0.0": - version: 9.0.1 - resolution: "ssri@npm:9.0.1" - dependencies: - minipass: ^3.1.1 - checksum: fb58f5e46b6923ae67b87ad5ef1c5ab6d427a17db0bead84570c2df3cd50b4ceb880ebdba2d60726588272890bae842a744e1ecce5bd2a2a582fccd5068309eb - languageName: node - linkType: hard - -"state-local@npm:^1.0.6": - version: 1.0.7 - resolution: "state-local@npm:1.0.7" - checksum: d1afcf1429e7e6eb08685b3a94be8797db847369316d4776fd51f3962b15b984dacc7f8e401ad20968e5798c9565b4b377afedf4e4c4d60fe7495e1cbe14a251 - languageName: node - linkType: hard - -"stop-iteration-iterator@npm:^1.0.0": - version: 1.0.0 - resolution: "stop-iteration-iterator@npm:1.0.0" - dependencies: - internal-slot: ^1.0.4 - checksum: d04173690b2efa40e24ab70e5e51a3ff31d56d699550cfad084104ab3381390daccb36652b25755e420245f3b0737de66c1879eaa2a8d4fc0a78f9bf892fcb42 - languageName: node - linkType: hard - -"streamsearch@npm:^1.1.0": - version: 1.1.0 - resolution: "streamsearch@npm:1.1.0" - checksum: 1cce16cea8405d7a233d32ca5e00a00169cc0e19fbc02aa839959985f267335d435c07f96e5e0edd0eadc6d39c98d5435fb5bbbdefc62c41834eadc5622ad942 - languageName: node - linkType: hard - -"string-env-interpolation@npm:1.0.1, string-env-interpolation@npm:^1.0.1": - version: 1.0.1 - resolution: "string-env-interpolation@npm:1.0.1" - checksum: d126329587f635bee65300e4451e7352b9b67e03daeb62f006ca84244cac12a1f6e45176b018653ba0c3ec3b5d980f9ca59d2eeed99cf799501cdaa7f871dc6f - languageName: node - linkType: hard - -"string-width@npm:^1.0.2 || 2 || 3 || 4, string-width@npm:^4.1.0, string-width@npm:^4.2.0, string-width@npm:^4.2.3": - version: 4.2.3 - resolution: "string-width@npm:4.2.3" - dependencies: - emoji-regex: ^8.0.0 - is-fullwidth-code-point: ^3.0.0 - strip-ansi: ^6.0.1 - checksum: e52c10dc3fbfcd6c3a15f159f54a90024241d0f149cf8aed2982a2d801d2e64df0bf1dc351cf8e95c3319323f9f220c16e740b06faecd53e2462df1d2b5443fb - languageName: node - linkType: hard - -"string.prototype.matchall@npm:^4.0.8": - version: 4.0.8 - resolution: "string.prototype.matchall@npm:4.0.8" - dependencies: - call-bind: ^1.0.2 - define-properties: ^1.1.4 - es-abstract: ^1.20.4 - get-intrinsic: ^1.1.3 - has-symbols: ^1.0.3 - internal-slot: ^1.0.3 - regexp.prototype.flags: ^1.4.3 - side-channel: ^1.0.4 - checksum: 952da3a818de42ad1c10b576140a5e05b4de7b34b8d9dbf00c3ac8c1293e9c0f533613a39c5cda53e0a8221f2e710bc2150e730b1c2278d60004a8a35726efb6 - languageName: node - linkType: hard - -"string.prototype.trim@npm:^1.2.7": - version: 1.2.7 - resolution: "string.prototype.trim@npm:1.2.7" - dependencies: - call-bind: ^1.0.2 - define-properties: ^1.1.4 - es-abstract: ^1.20.4 - checksum: 05b7b2d6af63648e70e44c4a8d10d8cc457536df78b55b9d6230918bde75c5987f6b8604438c4c8652eb55e4fc9725d2912789eb4ec457d6995f3495af190c09 - languageName: node - linkType: hard - -"string.prototype.trimend@npm:^1.0.6": - version: 1.0.6 - resolution: "string.prototype.trimend@npm:1.0.6" - dependencies: - call-bind: ^1.0.2 - define-properties: ^1.1.4 - es-abstract: ^1.20.4 - checksum: 0fdc34645a639bd35179b5a08227a353b88dc089adf438f46be8a7c197fc3f22f8514c1c9be4629b3cd29c281582730a8cbbad6466c60f76b5f99cf2addb132e - languageName: node - linkType: hard - -"string.prototype.trimstart@npm:^1.0.6": - version: 1.0.6 - resolution: "string.prototype.trimstart@npm:1.0.6" - dependencies: - call-bind: ^1.0.2 - define-properties: ^1.1.4 - es-abstract: ^1.20.4 - checksum: 89080feef416621e6ef1279588994305477a7a91648d9436490d56010a1f7adc39167cddac7ce0b9884b8cdbef086987c4dcb2960209f2af8bac0d23ceff4f41 - languageName: node - linkType: hard - -"string_decoder@npm:^1.1.1": - version: 1.3.0 - resolution: "string_decoder@npm:1.3.0" - dependencies: - safe-buffer: ~5.2.0 - checksum: 8417646695a66e73aefc4420eb3b84cc9ffd89572861fe004e6aeb13c7bc00e2f616247505d2dbbef24247c372f70268f594af7126f43548565c68c117bdeb56 - languageName: node - linkType: hard - -"strip-ansi@npm:^6.0.0, strip-ansi@npm:^6.0.1": - version: 6.0.1 - resolution: "strip-ansi@npm:6.0.1" - dependencies: - ansi-regex: ^5.0.1 - checksum: f3cd25890aef3ba6e1a74e20896c21a46f482e93df4a06567cebf2b57edabb15133f1f94e57434e0a958d61186087b1008e89c94875d019910a213181a14fc8c - languageName: node - linkType: hard - -"strip-bom@npm:^3.0.0": - version: 3.0.0 - resolution: "strip-bom@npm:3.0.0" - checksum: 8d50ff27b7ebe5ecc78f1fe1e00fcdff7af014e73cf724b46fb81ef889eeb1015fc5184b64e81a2efe002180f3ba431bdd77e300da5c6685d702780fbf0c8d5b - languageName: node - linkType: hard - -"strip-json-comments@npm:^3.1.0, strip-json-comments@npm:^3.1.1": - version: 3.1.1 - resolution: "strip-json-comments@npm:3.1.1" - checksum: 492f73e27268f9b1c122733f28ecb0e7e8d8a531a6662efbd08e22cccb3f9475e90a1b82cab06a392f6afae6d2de636f977e231296400d0ec5304ba70f166443 - languageName: node - linkType: hard - -"style-to-object@npm:^0.4.0": - version: 0.4.1 - resolution: "style-to-object@npm:0.4.1" - dependencies: - inline-style-parser: 0.1.1 - checksum: 2ea213e98eed21764ae1d1dc9359231a9f2d480d6ba55344c4c15eb275f0809f1845786e66d4caf62414a5cc8f112ce9425a58d251c77224060373e0db48f8c2 - languageName: node - linkType: hard - -"styled-components@npm:5.3.9": - version: 5.3.9 - resolution: "styled-components@npm:5.3.9" - dependencies: - "@babel/helper-module-imports": ^7.0.0 - "@babel/traverse": ^7.4.5 - "@emotion/is-prop-valid": ^1.1.0 - "@emotion/stylis": ^0.8.4 - "@emotion/unitless": ^0.7.4 - babel-plugin-styled-components: ">= 1.12.0" - css-to-react-native: ^3.0.0 - hoist-non-react-statics: ^3.0.0 - shallowequal: ^1.1.0 - supports-color: ^5.5.0 - peerDependencies: - react: ">= 16.8.0" - react-dom: ">= 16.8.0" - react-is: ">= 16.8.0" - checksum: 404311cc7028259218674d3f9f39bdda2342fc02f2ebbba8f057ef560b2ad205c5bd63b82deed4d0bf217ac7eb960d0e1127510b0b606e32cbd5a48c10373ce8 - languageName: node - linkType: hard - -"styled-container-query@npm:1.3.5": - version: 1.3.5 - resolution: "styled-container-query@npm:1.3.5" - dependencies: - classnames: ^2.2.6 - hoist-non-react-statics: ^3.3.2 - resize-observer: ^1.0.0 - shorthash: 0.0.2 - peerDependencies: - react: ^16.9.0 - react-dom: ^16.9.0 - styled-components: ^4.3.2 - checksum: 4bc8e046234ce39b33df199603bf4a3887abb5239966d5b3904b45b79889385320bd0df7129a0805c945947aa692ca6b950296d041ee68b6b667f912926c3b77 - languageName: node - linkType: hard - -"stylis@npm:4.1.3": - version: 4.1.3 - resolution: "stylis@npm:4.1.3" - checksum: d04dbffcb9bf2c5ca8d8dc09534203c75df3bf711d33973ea22038a99cc475412a350b661ebd99cbc01daa50d7eedcf0d130d121800eb7318759a197023442a6 - languageName: node - linkType: hard - -"supports-color@npm:^5.3.0, supports-color@npm:^5.5.0": - version: 5.5.0 - resolution: "supports-color@npm:5.5.0" - dependencies: - has-flag: ^3.0.0 - checksum: 95f6f4ba5afdf92f495b5a912d4abee8dcba766ae719b975c56c084f5004845f6f5a5f7769f52d53f40e21952a6d87411bafe34af4a01e65f9926002e38e1dac - languageName: node - linkType: hard - -"supports-color@npm:^7.1.0": - version: 7.2.0 - resolution: "supports-color@npm:7.2.0" - dependencies: - has-flag: ^4.0.0 - checksum: 3dda818de06ebbe5b9653e07842d9479f3555ebc77e9a0280caf5a14fb877ffee9ed57007c3b78f5a6324b8dbeec648d9e97a24e2ed9fdb81ddc69ea07100f4a - languageName: node - linkType: hard - -"supports-preserve-symlinks-flag@npm:^1.0.0": - version: 1.0.0 - resolution: "supports-preserve-symlinks-flag@npm:1.0.0" - checksum: 53b1e247e68e05db7b3808b99b892bd36fb096e6fba213a06da7fab22045e97597db425c724f2bbd6c99a3c295e1e73f3e4de78592289f38431049e1277ca0ae - languageName: node - linkType: hard - -"swap-case@npm:^2.0.2": - version: 2.0.2 - resolution: "swap-case@npm:2.0.2" - dependencies: - tslib: ^2.0.3 - checksum: 6e21c9e1b3cd5735eb2af679a99ec3efc78a14e3d4d5e3fd594e254b91cfd37185b3d1c6e41b22f53a2cdf5d1b963ce30c0fe8b78337e3fd43d0137084670a5f - languageName: node - linkType: hard - -"symbol-observable@npm:^4.0.0": - version: 4.0.0 - resolution: "symbol-observable@npm:4.0.0" - checksum: 212c7edce6186634d671336a88c0e0bbd626c2ab51ed57498dc90698cce541839a261b969c2a1e8dd43762133d47672e8b62e0b1ce9cf4157934ba45fd172ba8 - languageName: node - linkType: hard - -"tabbable@npm:^6.0.1": - version: 6.1.1 - resolution: "tabbable@npm:6.1.1" - checksum: 348639497262241ce8e0ccb0664ea582a386183107299ee8f27cf7b56bc84f36e09eaf667d3cb4201e789634012a91f7129bcbd49760abe874fbace35b4cf429 - languageName: node - linkType: hard - -"tar@npm:^6.1.11, tar@npm:^6.1.2": - version: 6.1.13 - resolution: "tar@npm:6.1.13" - dependencies: - chownr: ^2.0.0 - fs-minipass: ^2.0.0 - minipass: ^4.0.0 - minizlib: ^2.1.1 - mkdirp: ^1.0.3 - yallist: ^4.0.0 - checksum: 8a278bed123aa9f53549b256a36b719e317c8b96fe86a63406f3c62887f78267cea9b22dc6f7007009738509800d4a4dccc444abd71d762287c90f35b002eb1c - languageName: node - linkType: hard - -"text-table@npm:^0.2.0": - version: 0.2.0 - resolution: "text-table@npm:0.2.0" - checksum: b6937a38c80c7f84d9c11dd75e49d5c44f71d95e810a3250bd1f1797fc7117c57698204adf676b71497acc205d769d65c16ae8fa10afad832ae1322630aef10a - languageName: node - linkType: hard - -"through@npm:^2.3.6, through@npm:^2.3.8": - version: 2.3.8 - resolution: "through@npm:2.3.8" - checksum: a38c3e059853c494af95d50c072b83f8b676a9ba2818dcc5b108ef252230735c54e0185437618596c790bbba8fcdaef5b290405981ffa09dce67b1f1bf190cbd - languageName: node - linkType: hard - -"title-case@npm:^3.0.3": - version: 3.0.3 - resolution: "title-case@npm:3.0.3" - dependencies: - tslib: ^2.0.3 - checksum: e8b7ea006b53cf3208d278455d9f1e22c409459d7f9878da324fa3b18cc0aef8560924c19c744e870394a5d9cddfdbe029ebae9875909ee7f4fc562e7cbfc53e - languageName: node - linkType: hard - -"tmp@npm:^0.0.33": - version: 0.0.33 - resolution: "tmp@npm:0.0.33" - dependencies: - os-tmpdir: ~1.0.2 - checksum: 902d7aceb74453ea02abbf58c203f4a8fc1cead89b60b31e354f74ed5b3fb09ea817f94fb310f884a5d16987dd9fa5a735412a7c2dd088dd3d415aa819ae3a28 - languageName: node - linkType: hard - -"to-fast-properties@npm:^2.0.0": - version: 2.0.0 - resolution: "to-fast-properties@npm:2.0.0" - checksum: be2de62fe58ead94e3e592680052683b1ec986c72d589e7b21e5697f8744cdbf48c266fa72f6c15932894c10187b5f54573a3bcf7da0bfd964d5caf23d436168 - languageName: node - linkType: hard - -"to-regex-range@npm:^5.0.1": - version: 5.0.1 - resolution: "to-regex-range@npm:5.0.1" - dependencies: - is-number: ^7.0.0 - checksum: f76fa01b3d5be85db6a2a143e24df9f60dd047d151062d0ba3df62953f2f697b16fe5dad9b0ac6191c7efc7b1d9dcaa4b768174b7b29da89d4428e64bc0a20ed - languageName: node - linkType: hard - -"tr46@npm:~0.0.3": - version: 0.0.3 - resolution: "tr46@npm:0.0.3" - checksum: 726321c5eaf41b5002e17ffbd1fb7245999a073e8979085dacd47c4b4e8068ff5777142fc6726d6ca1fd2ff16921b48788b87225cbc57c72636f6efa8efbffe3 - languageName: node - linkType: hard - -"trim-lines@npm:^3.0.0": - version: 3.0.1 - resolution: "trim-lines@npm:3.0.1" - checksum: e241da104682a0e0d807222cc1496b92e716af4db7a002f4aeff33ae6a0024fef93165d49eab11aa07c71e1347c42d46563f91dfaa4d3fb945aa535cdead53ed - languageName: node - linkType: hard - -"trough@npm:^2.0.0": - version: 2.1.0 - resolution: "trough@npm:2.1.0" - checksum: a577bb561c2b401cc0e1d9e188fcfcdf63b09b151ff56a668da12197fe97cac15e3d77d5b51f426ccfd94255744a9118e9e9935afe81a3644fa1be9783c82886 - languageName: node - linkType: hard - -"ts-invariant@npm:^0.10.3": - version: 0.10.3 - resolution: "ts-invariant@npm:0.10.3" - dependencies: - tslib: ^2.1.0 - checksum: bb07d56fe4aae69d8860e0301dfdee2d375281159054bc24bf1e49e513fb0835bf7f70a11351344d213a79199c5e695f37ebbf5a447188a377ce0cd81d91ddb5 - languageName: node - linkType: hard - -"ts-invariant@npm:^0.4.0": - version: 0.4.4 - resolution: "ts-invariant@npm:0.4.4" - dependencies: - tslib: ^1.9.3 - checksum: 58b32fb6b7c479e602e55b9eb63bb99a203c5db09367d3aa7c3cbe000ba62f919eea7f031f55172df9b6d362a6f1a87e906df84b04b8c74c88e507ac58f7a554 - languageName: node - linkType: hard - -"ts-log@npm:^2.2.3": - version: 2.2.5 - resolution: "ts-log@npm:2.2.5" - checksum: 28f78ab15b8555d56c089dbc243327d8ce4331219956242a29fc4cb3bad6bb0cb8234dd17a292381a1b1dba99a7e4849a2181b2e1a303e8247e9f4ca4e284f2d - languageName: node - linkType: hard - -"tsconfig-paths@npm:^3.14.1": - version: 3.14.2 - resolution: "tsconfig-paths@npm:3.14.2" - dependencies: - "@types/json5": ^0.0.29 - json5: ^1.0.2 - minimist: ^1.2.6 - strip-bom: ^3.0.0 - checksum: a6162eaa1aed680537f93621b82399c7856afd10ec299867b13a0675e981acac4e0ec00896860480efc59fc10fd0b16fdc928c0b885865b52be62cadac692447 - languageName: node - linkType: hard - -"tslib@npm:^1.10.0, tslib@npm:^1.8.1, tslib@npm:^1.9.3": - version: 1.14.1 - resolution: "tslib@npm:1.14.1" - checksum: dbe628ef87f66691d5d2959b3e41b9ca0045c3ee3c7c7b906cc1e328b39f199bb1ad9e671c39025bd56122ac57dfbf7385a94843b1cc07c60a4db74795829acd - languageName: node - linkType: hard - -"tslib@npm:^2.0.0, tslib@npm:^2.0.3, tslib@npm:^2.1.0, tslib@npm:^2.3.0, tslib@npm:^2.3.1, tslib@npm:^2.4.0, tslib@npm:^2.5.0, tslib@npm:~2.5.0": - version: 2.5.0 - resolution: "tslib@npm:2.5.0" - checksum: ae3ed5f9ce29932d049908ebfdf21b3a003a85653a9a140d614da6b767a93ef94f460e52c3d787f0e4f383546981713f165037dc2274df212ea9f8a4541004e1 - languageName: node - linkType: hard - -"tslib@npm:~2.4.0": - version: 2.4.1 - resolution: "tslib@npm:2.4.1" - checksum: 19480d6e0313292bd6505d4efe096a6b31c70e21cf08b5febf4da62e95c265c8f571f7b36fcc3d1a17e068032f59c269fab3459d6cd3ed6949eafecf64315fca - languageName: node - linkType: hard - -"tsutils@npm:^3.21.0": - version: 3.21.0 - resolution: "tsutils@npm:3.21.0" - dependencies: - tslib: ^1.8.1 - peerDependencies: - typescript: ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" - checksum: 1843f4c1b2e0f975e08c4c21caa4af4f7f65a12ac1b81b3b8489366826259323feb3fc7a243123453d2d1a02314205a7634e048d4a8009921da19f99755cdc48 - languageName: node - linkType: hard - -"type-check@npm:^0.4.0, type-check@npm:~0.4.0": - version: 0.4.0 - resolution: "type-check@npm:0.4.0" - dependencies: - prelude-ls: ^1.2.1 - checksum: ec688ebfc9c45d0c30412e41ca9c0cdbd704580eb3a9ccf07b9b576094d7b86a012baebc95681999dd38f4f444afd28504cb3a89f2ef16b31d4ab61a0739025a - languageName: node - linkType: hard - -"type-fest@npm:^0.20.2": - version: 0.20.2 - resolution: "type-fest@npm:0.20.2" - checksum: 4fb3272df21ad1c552486f8a2f8e115c09a521ad7a8db3d56d53718d0c907b62c6e9141ba5f584af3f6830d0872c521357e512381f24f7c44acae583ad517d73 - languageName: node - linkType: hard - -"type-fest@npm:^0.21.3": - version: 0.21.3 - resolution: "type-fest@npm:0.21.3" - checksum: e6b32a3b3877f04339bae01c193b273c62ba7bfc9e325b8703c4ee1b32dc8fe4ef5dfa54bf78265e069f7667d058e360ae0f37be5af9f153b22382cd55a9afe0 - languageName: node - linkType: hard - -"typed-array-length@npm:^1.0.4": - version: 1.0.4 - resolution: "typed-array-length@npm:1.0.4" - dependencies: - call-bind: ^1.0.2 - for-each: ^0.3.3 - is-typed-array: ^1.1.9 - checksum: 2228febc93c7feff142b8c96a58d4a0d7623ecde6c7a24b2b98eb3170e99f7c7eff8c114f9b283085cd59dcd2bd43aadf20e25bba4b034a53c5bb292f71f8956 - languageName: node - linkType: hard - -"typescript@npm:4.9.4": - version: 4.9.4 - resolution: "typescript@npm:4.9.4" - bin: - tsc: bin/tsc - tsserver: bin/tsserver - checksum: e782fb9e0031cb258a80000f6c13530288c6d63f1177ed43f770533fdc15740d271554cdae86701c1dd2c83b082cea808b07e97fd68b38a172a83dbf9e0d0ef9 - languageName: node - linkType: hard - -"typescript@npm:5.0.2": - version: 5.0.2 - resolution: "typescript@npm:5.0.2" - bin: - tsc: bin/tsc - tsserver: bin/tsserver - checksum: bef1dcd166acfc6934b2ec4d72f93edb8961a5fab36b8dd2aaf6f4f4cd5c0210f2e0850aef4724f3b4913d5aef203a94a28ded731b370880c8bcff7e4ff91fc1 - languageName: node - linkType: hard - -"typescript@patch:typescript@4.9.4#~builtin": - version: 4.9.4 - resolution: "typescript@patch:typescript@npm%3A4.9.4#~builtin::version=4.9.4&hash=23ec76" - bin: - tsc: bin/tsc - tsserver: bin/tsserver - checksum: 3e2ab0772908676d9b9cb83398c70003a3b08e1c6b3b122409df9f4b520f2fdaefa20c3d7d57dce283fed760ac94b3ce94d4a7fa875127b67852904425a1f0dc - languageName: node - linkType: hard - -"typescript@patch:typescript@5.0.2#~builtin": - version: 5.0.2 - resolution: "typescript@patch:typescript@npm%3A5.0.2#~builtin::version=5.0.2&hash=1f5320" - bin: - tsc: bin/tsc - tsserver: bin/tsserver - checksum: bdbf3d0aac0d6cf010fbe0536753dc19f278eb4aba88140dcd25487dfe1c56ca8b33abc0dcd42078790a939b08ebc4046f3e9bb961d77d3d2c3cfa9829da4d53 - languageName: node - linkType: hard - -"ua-parser-js@npm:^0.7.30": - version: 0.7.34 - resolution: "ua-parser-js@npm:0.7.34" - checksum: ddb7b8b590af49f37eaac37579ac98274f59fff3990610f45e33893aa62ce5b8fc265459cb78b9c9fa3fbbbaad5b2d7939303f18cbd7e8c25c96e57009443c42 - languageName: node - linkType: hard - -"unbox-primitive@npm:^1.0.2": - version: 1.0.2 - resolution: "unbox-primitive@npm:1.0.2" - dependencies: - call-bind: ^1.0.2 - has-bigints: ^1.0.2 - has-symbols: ^1.0.3 - which-boxed-primitive: ^1.0.2 - checksum: b7a1cf5862b5e4b5deb091672ffa579aa274f648410009c81cca63fed3b62b610c4f3b773f912ce545bb4e31edc3138975b5bc777fc6e4817dca51affb6380e9 - languageName: node - linkType: hard - -"unc-path-regex@npm:^0.1.2": - version: 0.1.2 - resolution: "unc-path-regex@npm:0.1.2" - checksum: a05fa2006bf4606051c10fc7968f08ce7b28fa646befafa282813aeb1ac1a56f65cb1b577ca7851af2726198d59475bb49b11776036257b843eaacee2860a4ec - languageName: node - linkType: hard - -"unicode-canonical-property-names-ecmascript@npm:^2.0.0": - version: 2.0.0 - resolution: "unicode-canonical-property-names-ecmascript@npm:2.0.0" - checksum: 39be078afd014c14dcd957a7a46a60061bc37c4508ba146517f85f60361acf4c7539552645ece25de840e17e293baa5556268d091ca6762747fdd0c705001a45 - languageName: node - linkType: hard - -"unicode-match-property-ecmascript@npm:^2.0.0": - version: 2.0.0 - resolution: "unicode-match-property-ecmascript@npm:2.0.0" - dependencies: - unicode-canonical-property-names-ecmascript: ^2.0.0 - unicode-property-aliases-ecmascript: ^2.0.0 - checksum: 1f34a7434a23df4885b5890ac36c5b2161a809887000be560f56ad4b11126d433c0c1c39baf1016bdabed4ec54829a6190ee37aa24919aa116dc1a5a8a62965a - languageName: node - linkType: hard - -"unicode-match-property-value-ecmascript@npm:^2.1.0": - version: 2.1.0 - resolution: "unicode-match-property-value-ecmascript@npm:2.1.0" - checksum: 8d6f5f586b9ce1ed0e84a37df6b42fdba1317a05b5df0c249962bd5da89528771e2d149837cad11aa26bcb84c35355cb9f58a10c3d41fa3b899181ece6c85220 - languageName: node - linkType: hard - -"unicode-property-aliases-ecmascript@npm:^2.0.0": - version: 2.1.0 - resolution: "unicode-property-aliases-ecmascript@npm:2.1.0" - checksum: 243524431893649b62cc674d877bd64ef292d6071dd2fd01ab4d5ad26efbc104ffcd064f93f8a06b7e4ec54c172bf03f6417921a0d8c3a9994161fe1f88f815b - languageName: node - linkType: hard - -"unified@npm:^10.0.0": - version: 10.1.2 - resolution: "unified@npm:10.1.2" - dependencies: - "@types/unist": ^2.0.0 - bail: ^2.0.0 - extend: ^3.0.0 - is-buffer: ^2.0.0 - is-plain-obj: ^4.0.0 - trough: ^2.0.0 - vfile: ^5.0.0 - checksum: 053e7c65ede644607f87bd625a299e4b709869d2f76ec8138569e6e886903b6988b21cd9699e471eda42bee189527be0a9dac05936f1d069a5e65d0125d5d756 - languageName: node - linkType: hard - -"unique-filename@npm:^2.0.0": - version: 2.0.1 - resolution: "unique-filename@npm:2.0.1" - dependencies: - unique-slug: ^3.0.0 - checksum: 807acf3381aff319086b64dc7125a9a37c09c44af7620bd4f7f3247fcd5565660ac12d8b80534dcbfd067e6fe88a67e621386dd796a8af828d1337a8420a255f - languageName: node - linkType: hard - -"unique-slug@npm:^3.0.0": - version: 3.0.0 - resolution: "unique-slug@npm:3.0.0" - dependencies: - imurmurhash: ^0.1.4 - checksum: 49f8d915ba7f0101801b922062ee46b7953256c93ceca74303bd8e6413ae10aa7e8216556b54dc5382895e8221d04f1efaf75f945c2e4a515b4139f77aa6640c - languageName: node - linkType: hard - -"unist-util-generated@npm:^2.0.0": - version: 2.0.1 - resolution: "unist-util-generated@npm:2.0.1" - checksum: 6221ad0571dcc9c8964d6b054f39ef6571ed59cc0ce3e88ae97ea1c70afe76b46412a5ffaa91f96814644ac8477e23fb1b477d71f8d70e625728c5258f5c0d99 - languageName: node - linkType: hard - -"unist-util-is@npm:^5.0.0": - version: 5.2.1 - resolution: "unist-util-is@npm:5.2.1" - dependencies: - "@types/unist": ^2.0.0 - checksum: ae76fdc3d35352cd92f1bedc3a0d407c3b9c42599a52ab9141fe89bdd786b51f0ec5a2ab68b93fb532e239457cae62f7e39eaa80229e1cb94875da2eafcbe5c4 - languageName: node - linkType: hard - -"unist-util-position@npm:^4.0.0": - version: 4.0.4 - resolution: "unist-util-position@npm:4.0.4" - dependencies: - "@types/unist": ^2.0.0 - checksum: e7487b6cec9365299695e3379ded270a1717074fa11fd2407c9b934fb08db6fe1d9077ddeaf877ecf1813665f8ccded5171693d3d9a7a01a125ec5cdd5e88691 - languageName: node - linkType: hard - -"unist-util-stringify-position@npm:^3.0.0": - version: 3.0.3 - resolution: "unist-util-stringify-position@npm:3.0.3" - dependencies: - "@types/unist": ^2.0.0 - checksum: dbd66c15183607ca942a2b1b7a9f6a5996f91c0d30cf8966fb88955a02349d9eefd3974e9010ee67e71175d784c5a9fea915b0aa0b0df99dcb921b95c4c9e124 - languageName: node - linkType: hard - -"unist-util-visit-parents@npm:^5.1.1": - version: 5.1.3 - resolution: "unist-util-visit-parents@npm:5.1.3" - dependencies: - "@types/unist": ^2.0.0 - unist-util-is: ^5.0.0 - checksum: 8ecada5978994f846b64658cf13b4092cd78dea39e1ba2f5090a5de842ba4852712c02351a8ae95250c64f864635e7b02aedf3b4a093552bb30cf1bd160efbaa - languageName: node - linkType: hard - -"unist-util-visit@npm:^4.0.0": - version: 4.1.2 - resolution: "unist-util-visit@npm:4.1.2" - dependencies: - "@types/unist": ^2.0.0 - unist-util-is: ^5.0.0 - unist-util-visit-parents: ^5.1.1 - checksum: 95a34e3f7b5b2d4b68fd722b6229972099eb97b6df18913eda44a5c11df8b1e27efe7206dd7b88c4ed244a48c474a5b2e2629ab79558ff9eb936840295549cee - languageName: node - linkType: hard - -"unixify@npm:^1.0.0": - version: 1.0.0 - resolution: "unixify@npm:1.0.0" - dependencies: - normalize-path: ^2.1.1 - checksum: 3be30e48579fc6c7390bd59b4ab9e745fede0c164dfb7351cf710bd1dbef8484b1441186205af6bcb13b731c0c88caf9b33459f7bf8c89e79c046e656ae433f0 - languageName: node - linkType: hard - -"update-browserslist-db@npm:^1.0.10": - version: 1.0.10 - resolution: "update-browserslist-db@npm:1.0.10" - dependencies: - escalade: ^3.1.1 - picocolors: ^1.0.0 - peerDependencies: - browserslist: ">= 4.21.0" - bin: - browserslist-lint: cli.js - checksum: 12db73b4f63029ac407b153732e7cd69a1ea8206c9100b482b7d12859cd3cd0bc59c602d7ae31e652706189f1acb90d42c53ab24a5ba563ed13aebdddc5561a0 - languageName: node - linkType: hard - -"upper-case-first@npm:^2.0.2": - version: 2.0.2 - resolution: "upper-case-first@npm:2.0.2" - dependencies: - tslib: ^2.0.3 - checksum: 4487db4701effe3b54ced4b3e4aa4d9ab06c548f97244d04aafb642eedf96a76d5a03cf5f38f10f415531d5792d1ac6e1b50f2a76984dc6964ad530f12876409 - languageName: node - linkType: hard - -"upper-case@npm:^2.0.2": - version: 2.0.2 - resolution: "upper-case@npm:2.0.2" - dependencies: - tslib: ^2.0.3 - checksum: 508723a2b03ab90cf1d6b7e0397513980fab821cbe79c87341d0e96cedefadf0d85f9d71eac24ab23f526a041d585a575cfca120a9f920e44eb4f8a7cf89121c - languageName: node - linkType: hard - -"uri-js@npm:^4.2.2": - version: 4.4.1 - resolution: "uri-js@npm:4.4.1" - dependencies: - punycode: ^2.1.0 - checksum: 7167432de6817fe8e9e0c9684f1d2de2bb688c94388f7569f7dbdb1587c9f4ca2a77962f134ec90be0cc4d004c939ff0d05acc9f34a0db39a3c797dada262633 - languageName: node - linkType: hard - -"urlpattern-polyfill@npm:^6.0.2": - version: 6.0.2 - resolution: "urlpattern-polyfill@npm:6.0.2" - dependencies: - braces: ^3.0.2 - checksum: 564fb223761b67ea76d015f11dfec145db98c71cc35641015d1c9ec164da494b1fab614e652a844e14a72cda31236b9c3a59b22fdcca71166c315ab059fab676 - languageName: node - linkType: hard - -"use-composed-ref@npm:^1.3.0": - version: 1.3.0 - resolution: "use-composed-ref@npm:1.3.0" - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - checksum: f771cbadfdc91e03b7ab9eb32d0fc0cc647755711801bf507e891ad38c4bbc5f02b2509acadf9c965ec9c5f2f642fd33bdfdfb17b0873c4ad0a9b1f5e5e724bf - languageName: node - linkType: hard - -"use-immer@npm:0.8.1": - version: 0.8.1 - resolution: "use-immer@npm:0.8.1" - peerDependencies: - immer: ">=2.0.0" - react: ^16.8.0 || ^17.0.1 || ^18.0.0 - checksum: 9ffc1a201a92b6b026c420718e6a00e72ba48b62420bb515927b379bb1d791b5b4766b57c755b4851c0e1f80000e639bc1cf8e73424e44466741c159391d35dd - languageName: node - linkType: hard - -"use-isomorphic-layout-effect@npm:^1.1.1": - version: 1.1.2 - resolution: "use-isomorphic-layout-effect@npm:1.1.2" - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - peerDependenciesMeta: - "@types/react": - optional: true - checksum: a6532f7fc9ae222c3725ff0308aaf1f1ddbd3c00d685ef9eee6714fd0684de5cb9741b432fbf51e61a784e2955424864f7ea9f99734a02f237b17ad3e18ea5cb - languageName: node - linkType: hard - -"use-latest@npm:^1.2.1": - version: 1.2.1 - resolution: "use-latest@npm:1.2.1" - dependencies: - use-isomorphic-layout-effect: ^1.1.1 - peerDependencies: - react: ^16.8.0 || ^17.0.0 || ^18.0.0 - peerDependenciesMeta: - "@types/react": - optional: true - checksum: ed3f2ddddf6f21825e2ede4c2e0f0db8dcce5129802b69d1f0575fc1b42380436e8c76a6cd885d4e9aa8e292e60fb8b959c955f33c6a9123b83814a1a1875367 - languageName: node - linkType: hard - -"util-deprecate@npm:^1.0.1": - version: 1.0.2 - resolution: "util-deprecate@npm:1.0.2" - checksum: 474acf1146cb2701fe3b074892217553dfcf9a031280919ba1b8d651a068c9b15d863b7303cb15bd00a862b498e6cf4ad7b4a08fb134edd5a6f7641681cb54a2 - languageName: node - linkType: hard - -"uvu@npm:^0.5.0": - version: 0.5.6 - resolution: "uvu@npm:0.5.6" - dependencies: - dequal: ^2.0.0 - diff: ^5.0.0 - kleur: ^4.0.3 - sade: ^1.7.3 - bin: - uvu: bin.js - checksum: 09460a37975627de9fcad396e5078fb844d01aaf64a6399ebfcfd9e55f1c2037539b47611e8631f89be07656962af0cf48c334993db82b9ae9c3d25ce3862168 - languageName: node - linkType: hard - -"value-or-promise@npm:1.0.12, value-or-promise@npm:^1.0.11, value-or-promise@npm:^1.0.12": - version: 1.0.12 - resolution: "value-or-promise@npm:1.0.12" - checksum: f53a66c75b7447c90bbaf946a757ca09c094629cb80ba742f59c980ec3a69be0a385a0e75505dedb4e757862f1a994ca4beaf083a831f24d3ffb3d4bb18cd1e1 - languageName: node - linkType: hard - -"vfile-location@npm:^4.0.0": - version: 4.1.0 - resolution: "vfile-location@npm:4.1.0" - dependencies: - "@types/unist": ^2.0.0 - vfile: ^5.0.0 - checksum: c894e8e5224170d1f85288f4a1d1ebcee0780823ea2b49d881648ab360ebf01b37ecb09b1c4439a75f9a51f31a9f9742cd045e987763e367c352a1ef7c50d446 - languageName: node - linkType: hard - -"vfile-message@npm:^3.0.0": - version: 3.1.4 - resolution: "vfile-message@npm:3.1.4" - dependencies: - "@types/unist": ^2.0.0 - unist-util-stringify-position: ^3.0.0 - checksum: d0ee7da1973ad76513c274e7912adbed4d08d180eaa34e6bd40bc82459f4b7bc50fcaff41556135e3339995575eac5f6f709aba9332b80f775618ea4880a1367 - languageName: node - linkType: hard - -"vfile@npm:^5.0.0": - version: 5.3.7 - resolution: "vfile@npm:5.3.7" - dependencies: - "@types/unist": ^2.0.0 - is-buffer: ^2.0.0 - unist-util-stringify-position: ^3.0.0 - vfile-message: ^3.0.0 - checksum: 642cce703afc186dbe7cabf698dc954c70146e853491086f5da39e1ce850676fc96b169fcf7898aa3ff245e9313aeec40da93acd1e1fcc0c146dc4f6308b4ef9 - languageName: node - linkType: hard - -"vite@npm:4.2.1": - version: 4.2.1 - resolution: "vite@npm:4.2.1" - dependencies: - esbuild: ^0.17.5 - fsevents: ~2.3.2 - postcss: ^8.4.21 - resolve: ^1.22.1 - rollup: ^3.18.0 - peerDependencies: - "@types/node": ">= 14" - less: "*" - sass: "*" - stylus: "*" - sugarss: "*" - terser: ^5.4.0 - dependenciesMeta: - fsevents: - optional: true - peerDependenciesMeta: - "@types/node": - optional: true - less: - optional: true - sass: - optional: true - stylus: - optional: true - sugarss: - optional: true - terser: - optional: true - bin: - vite: bin/vite.js - checksum: 70eb162ffc299017a3c310e3adc95e9661def6b17aafd1f8e5e02e516766060435590dbe3df1e4e95acc3583c728a76e91f07c546221d1e701f1b2b021293f45 - languageName: node - linkType: hard - -"wcwidth@npm:^1.0.1": - version: 1.0.1 - resolution: "wcwidth@npm:1.0.1" - dependencies: - defaults: ^1.0.3 - checksum: 814e9d1ddcc9798f7377ffa448a5a3892232b9275ebb30a41b529607691c0491de47cba426e917a4d08ded3ee7e9ba2f3fe32e62ee3cd9c7d3bafb7754bd553c - languageName: node - linkType: hard - -"web-namespaces@npm:^2.0.0": - version: 2.0.1 - resolution: "web-namespaces@npm:2.0.1" - checksum: b6d9f02f1a43d0ef0848a812d89c83801d5bbad57d8bb61f02eb6d7eb794c3736f6cc2e1191664bb26136594c8218ac609f4069722c6f56d9fc2d808fa9271c6 - languageName: node - linkType: hard - -"web-streams-polyfill@npm:^3.2.1": - version: 3.2.1 - resolution: "web-streams-polyfill@npm:3.2.1" - checksum: b119c78574b6d65935e35098c2afdcd752b84268e18746606af149e3c424e15621b6f1ff0b42b2676dc012fc4f0d313f964b41a4b5031e525faa03997457da02 - languageName: node - linkType: hard - -"webcrypto-core@npm:^1.7.7": - version: 1.7.7 - resolution: "webcrypto-core@npm:1.7.7" - dependencies: - "@peculiar/asn1-schema": ^2.3.6 - "@peculiar/json-schema": ^1.1.12 - asn1js: ^3.0.1 - pvtsutils: ^1.3.2 - tslib: ^2.4.0 - checksum: 1dc5aedb250372dd95e175a671b990ae50e36974f99c4efc85d88e6528c1bc52dd964d44a41b68043c21fb26aabfe8aad4f05a1c39ca28d61de5ca7388413d52 - languageName: node - linkType: hard - -"webidl-conversions@npm:^3.0.0": - version: 3.0.1 - resolution: "webidl-conversions@npm:3.0.1" - checksum: c92a0a6ab95314bde9c32e1d0a6dfac83b578f8fa5f21e675bc2706ed6981bc26b7eb7e6a1fab158e5ce4adf9caa4a0aee49a52505d4d13c7be545f15021b17c - languageName: node - linkType: hard - -"whatwg-fetch@npm:^3.4.1": - version: 3.6.2 - resolution: "whatwg-fetch@npm:3.6.2" - checksum: ee976b7249e7791edb0d0a62cd806b29006ad7ec3a3d89145921ad8c00a3a67e4be8f3fb3ec6bc7b58498724fd568d11aeeeea1f7827e7e1e5eae6c8a275afed - languageName: node - linkType: hard - -"whatwg-url@npm:^5.0.0": - version: 5.0.0 - resolution: "whatwg-url@npm:5.0.0" - dependencies: - tr46: ~0.0.3 - webidl-conversions: ^3.0.0 - checksum: b8daed4ad3356cc4899048a15b2c143a9aed0dfae1f611ebd55073310c7b910f522ad75d727346ad64203d7e6c79ef25eafd465f4d12775ca44b90fa82ed9e2c - languageName: node - linkType: hard - -"which-boxed-primitive@npm:^1.0.2": - version: 1.0.2 - resolution: "which-boxed-primitive@npm:1.0.2" - dependencies: - is-bigint: ^1.0.1 - is-boolean-object: ^1.1.0 - is-number-object: ^1.0.4 - is-string: ^1.0.5 - is-symbol: ^1.0.3 - checksum: 53ce774c7379071729533922adcca47220228405e1895f26673bbd71bdf7fb09bee38c1d6399395927c6289476b5ae0629863427fd151491b71c4b6cb04f3a5e - languageName: node - linkType: hard - -"which-collection@npm:^1.0.1": - version: 1.0.1 - resolution: "which-collection@npm:1.0.1" - dependencies: - is-map: ^2.0.1 - is-set: ^2.0.1 - is-weakmap: ^2.0.1 - is-weakset: ^2.0.1 - checksum: c815bbd163107ef9cb84f135e6f34453eaf4cca994e7ba85ddb0d27cea724c623fae2a473ceccfd5549c53cc65a5d82692de418166df3f858e1e5dc60818581c - languageName: node - linkType: hard - -"which-module@npm:^2.0.0": - version: 2.0.0 - resolution: "which-module@npm:2.0.0" - checksum: 809f7fd3dfcb2cdbe0180b60d68100c88785084f8f9492b0998c051d7a8efe56784492609d3f09ac161635b78ea29219eb1418a98c15ce87d085bce905705c9c - languageName: node - linkType: hard - -"which-typed-array@npm:^1.1.9": - version: 1.1.9 - resolution: "which-typed-array@npm:1.1.9" - dependencies: - available-typed-arrays: ^1.0.5 - call-bind: ^1.0.2 - for-each: ^0.3.3 - gopd: ^1.0.1 - has-tostringtag: ^1.0.0 - is-typed-array: ^1.1.10 - checksum: fe0178ca44c57699ca2c0e657b64eaa8d2db2372a4e2851184f568f98c478ae3dc3fdb5f7e46c384487046b0cf9e23241423242b277e03e8ba3dabc7c84c98ef - languageName: node - linkType: hard - -"which@npm:^2.0.1, which@npm:^2.0.2": - version: 2.0.2 - resolution: "which@npm:2.0.2" - dependencies: - isexe: ^2.0.0 - bin: - node-which: ./bin/node-which - checksum: 1a5c563d3c1b52d5f893c8b61afe11abc3bab4afac492e8da5bde69d550de701cf9806235f20a47b5c8fa8a1d6a9135841de2596535e998027a54589000e66d1 - languageName: node - linkType: hard - -"wide-align@npm:^1.1.5": - version: 1.1.5 - resolution: "wide-align@npm:1.1.5" - dependencies: - string-width: ^1.0.2 || 2 || 3 || 4 - checksum: d5fc37cd561f9daee3c80e03b92ed3e84d80dde3365a8767263d03dacfc8fa06b065ffe1df00d8c2a09f731482fcacae745abfbb478d4af36d0a891fad4834d3 - languageName: node - linkType: hard - -"word-wrap@npm:^1.2.3": - version: 1.2.3 - resolution: "word-wrap@npm:1.2.3" - checksum: 30b48f91fcf12106ed3186ae4fa86a6a1842416df425be7b60485de14bec665a54a68e4b5156647dec3a70f25e84d270ca8bc8cd23182ed095f5c7206a938c1f - languageName: node - linkType: hard - -"wrap-ansi@npm:^6.2.0": - version: 6.2.0 - resolution: "wrap-ansi@npm:6.2.0" - dependencies: - ansi-styles: ^4.0.0 - string-width: ^4.1.0 - strip-ansi: ^6.0.0 - checksum: 6cd96a410161ff617b63581a08376f0cb9162375adeb7956e10c8cd397821f7eb2a6de24eb22a0b28401300bf228c86e50617cd568209b5f6775b93c97d2fe3a - languageName: node - linkType: hard - -"wrap-ansi@npm:^7.0.0": - version: 7.0.0 - resolution: "wrap-ansi@npm:7.0.0" - dependencies: - ansi-styles: ^4.0.0 - string-width: ^4.1.0 - strip-ansi: ^6.0.0 - checksum: a790b846fd4505de962ba728a21aaeda189b8ee1c7568ca5e817d85930e06ef8d1689d49dbf0e881e8ef84436af3a88bc49115c2e2788d841ff1b8b5b51a608b - languageName: node - linkType: hard - -"wrappy@npm:1": - version: 1.0.2 - resolution: "wrappy@npm:1.0.2" - checksum: 159da4805f7e84a3d003d8841557196034155008f817172d4e986bd591f74aa82aa7db55929a54222309e01079a65a92a9e6414da5a6aa4b01ee44a511ac3ee5 - languageName: node - linkType: hard - -"ws@npm:8.12.1": - version: 8.12.1 - resolution: "ws@npm:8.12.1" - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: ">=5.0.2" - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - checksum: 97301c1c4d838fc81bd413f370f75c12aabe44527b31323b761eab3043a9ecb7e32ffd668548382c9a6a5ad3a1c3a9249608e8338e6b939f2f9540f1e21970b5 - languageName: node - linkType: hard - -"ws@npm:^8.12.0": - version: 8.13.0 - resolution: "ws@npm:8.13.0" - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: ">=5.0.2" - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - checksum: 53e991bbf928faf5dc6efac9b8eb9ab6497c69feeb94f963d648b7a3530a720b19ec2e0ec037344257e05a4f35bd9ad04d9de6f289615ffb133282031b18c61c - languageName: node - linkType: hard - -"y18n@npm:^4.0.0": - version: 4.0.3 - resolution: "y18n@npm:4.0.3" - checksum: 014dfcd9b5f4105c3bb397c1c8c6429a9df004aa560964fb36732bfb999bfe83d45ae40aeda5b55d21b1ee53d8291580a32a756a443e064317953f08025b1aa4 - languageName: node - linkType: hard - -"y18n@npm:^5.0.5": - version: 5.0.8 - resolution: "y18n@npm:5.0.8" - checksum: 54f0fb95621ee60898a38c572c515659e51cc9d9f787fb109cef6fde4befbe1c4602dc999d30110feee37456ad0f1660fa2edcfde6a9a740f86a290999550d30 - languageName: node - linkType: hard - -"yallist@npm:^3.0.2": - version: 3.1.1 - resolution: "yallist@npm:3.1.1" - checksum: 48f7bb00dc19fc635a13a39fe547f527b10c9290e7b3e836b9a8f1ca04d4d342e85714416b3c2ab74949c9c66f9cebb0473e6bc353b79035356103b47641285d - languageName: node - linkType: hard - -"yallist@npm:^4.0.0": - version: 4.0.0 - resolution: "yallist@npm:4.0.0" - checksum: 343617202af32df2a15a3be36a5a8c0c8545208f3d3dfbc6bb7c3e3b7e8c6f8e7485432e4f3b88da3031a6e20afa7c711eded32ddfb122896ac5d914e75848d5 - languageName: node - linkType: hard - -"yaml-ast-parser@npm:^0.0.43": - version: 0.0.43 - resolution: "yaml-ast-parser@npm:0.0.43" - checksum: fb5df4c067b6ccbd00953a46faf6ff27f0e290d623c712dc41f330251118f110e22cfd184bbff498bd969cbcda3cd27e0f9d0adb9e6d90eb60ccafc0d8e28077 - languageName: node - linkType: hard - -"yaml@npm:^1.10.0": - version: 1.10.2 - resolution: "yaml@npm:1.10.2" - checksum: ce4ada136e8a78a0b08dc10b4b900936912d15de59905b2bf415b4d33c63df1d555d23acb2a41b23cf9fb5da41c256441afca3d6509de7247daa062fd2c5ea5f - languageName: node - linkType: hard - -"yargs-parser@npm:^18.1.2": - version: 18.1.3 - resolution: "yargs-parser@npm:18.1.3" - dependencies: - camelcase: ^5.0.0 - decamelize: ^1.2.0 - checksum: 60e8c7d1b85814594d3719300ecad4e6ae3796748b0926137bfec1f3042581b8646d67e83c6fc80a692ef08b8390f21ddcacb9464476c39bbdf52e34961dd4d9 - languageName: node - linkType: hard - -"yargs-parser@npm:^21.1.1": - version: 21.1.1 - resolution: "yargs-parser@npm:21.1.1" - checksum: ed2d96a616a9e3e1cc7d204c62ecc61f7aaab633dcbfab2c6df50f7f87b393993fe6640d017759fe112d0cb1e0119f2b4150a87305cc873fd90831c6a58ccf1c - languageName: node - linkType: hard - -"yargs@npm:^15.3.1": - version: 15.4.1 - resolution: "yargs@npm:15.4.1" - dependencies: - cliui: ^6.0.0 - decamelize: ^1.2.0 - find-up: ^4.1.0 - get-caller-file: ^2.0.1 - require-directory: ^2.1.1 - require-main-filename: ^2.0.0 - set-blocking: ^2.0.0 - string-width: ^4.2.0 - which-module: ^2.0.0 - y18n: ^4.0.0 - yargs-parser: ^18.1.2 - checksum: 40b974f508d8aed28598087720e086ecd32a5fd3e945e95ea4457da04ee9bdb8bdd17fd91acff36dc5b7f0595a735929c514c40c402416bbb87c03f6fb782373 - languageName: node - linkType: hard - -"yargs@npm:^17.0.0": - version: 17.7.1 - resolution: "yargs@npm:17.7.1" - dependencies: - cliui: ^8.0.1 - escalade: ^3.1.1 - get-caller-file: ^2.0.5 - require-directory: ^2.1.1 - string-width: ^4.2.3 - y18n: ^5.0.5 - yargs-parser: ^21.1.1 - checksum: 3d8a43c336a4942bc68080768664aca85c7bd406f018bad362fd255c41c8f4e650277f42fd65d543fce99e084124ddafee7bbfc1a5c6a8fda4cec78609dcf8d4 - languageName: node - linkType: hard - -"yocto-queue@npm:^0.1.0": - version: 0.1.0 - resolution: "yocto-queue@npm:0.1.0" - checksum: f77b3d8d00310def622123df93d4ee654fc6a0096182af8bd60679ddcdfb3474c56c6c7190817c84a2785648cdee9d721c0154eb45698c62176c322fb46fc700 - languageName: node - linkType: hard - -"zen-observable-ts@npm:^0.8.12, zen-observable-ts@npm:^0.8.21": - version: 0.8.21 - resolution: "zen-observable-ts@npm:0.8.21" - dependencies: - tslib: ^1.9.3 - zen-observable: ^0.8.0 - checksum: 2931628598937effcc77acf88ac8d3468c0584bbc4488726ae2c94f6a02615ff80e9d6dc0943b71bc874466ab371837737ce8245eed3bfea38daa466a2fdc6ce - languageName: node - linkType: hard - -"zen-observable-ts@npm:^1.2.5": - version: 1.2.5 - resolution: "zen-observable-ts@npm:1.2.5" - dependencies: - zen-observable: 0.8.15 - checksum: 3b707b7a0239a9bc40f73ba71b27733a689a957c1f364fabb9fa9cbd7d04b7c2faf0d517bf17004e3ed3f4330ac613e84c0d32313e450ddaa046f3350af44541 - languageName: node - linkType: hard - -"zen-observable@npm:0.8.11": - version: 0.8.11 - resolution: "zen-observable@npm:0.8.11" - checksum: 4b5e61c46cc5fc3906a5f30b6d3ac4c3c92f5101ff2867fd5ab1b147484a4117b440980d86cba22f3a44c9107ea19c6e9cd01789ec641a56b390e58550e1fcd6 - languageName: node - linkType: hard - -"zen-observable@npm:0.8.15, zen-observable@npm:^0.8.0": - version: 0.8.15 - resolution: "zen-observable@npm:0.8.15" - checksum: b7289084bc1fc74a559b7259faa23d3214b14b538a8843d2b001a35e27147833f4107590b1b44bf5bc7f6dfe6f488660d3a3725f268e09b3925b3476153b7821 - languageName: node - linkType: hard - -"zwitch@npm:^2.0.0": - version: 2.0.4 - resolution: "zwitch@npm:2.0.4" - checksum: f22ec5fc2d5f02c423c93d35cdfa83573a3a3bd98c66b927c368ea4d0e7252a500df2a90a6b45522be536a96a73404393c958e945fdba95e6832c200791702b6 - languageName: node - linkType: hard diff --git a/pkg/ui/window.go b/pkg/ui/window.go deleted file mode 100644 index ddb4bb208..000000000 --- a/pkg/ui/window.go +++ /dev/null @@ -1,48 +0,0 @@ -//go:build ui || generate - -package ui - -import ( - "context" - - "github.com/wailsapp/wails/v2/pkg/runtime" -) - -const ( - Width = 1024 - Height = 768 -) - -// Window struct -type Window struct { - ctx context.Context -} - -// startup is called when the app starts. The context is saved -// so we can call the runtime methods. -func (this *Window) startup(ctx context.Context) { - this.ctx = ctx -} - -func (this *Window) width() int { - return Width -} - -func (this *Window) height() int { - return Height -} - -// Close closes the application -func (this *Window) Close() { - runtime.Quit(this.ctx) -} - -// SetClipboard allows to copy provided text to OS clipboard -func (this *Window) SetClipboard(text string) error { - return runtime.ClipboardSetText(this.ctx, text) -} - -// NewWindow creates a new App application struct -func NewWindow() *Window { - return &Window{} -} diff --git a/plural/stacks/data.yaml b/plural/stacks/data.yaml deleted file mode 100644 index 980fc56f9..000000000 --- a/plural/stacks/data.yaml +++ /dev/null @@ -1,29 +0,0 @@ -name: data -description: A full open source datastack deployable on Plural. -displayName: Data -featured: true -collections: -- provider: AWS - bundles: - - name: airbyte-aws - repo: airbyte - - name: dagster-aws - repo: dagster - - name: superset-aws - repo: superset -- provider: GCP - bundles: - - name: airbyte-gcp - repo: airbyte - - name: dagster-gcp - repo: dagster - - name: superset-gcp - repo: superset -- provider: AZURE - bundles: - - name: airbyte-azure - repo: airbyte - - name: dagster-azure - repo: dagster - - name: superset-azure - repo: superset \ No newline at end of file diff --git a/plural/stacks/devops.yaml b/plural/stacks/devops.yaml deleted file mode 100644 index 83a91a94c..000000000 --- a/plural/stacks/devops.yaml +++ /dev/null @@ -1,35 +0,0 @@ -name: devops -description: All the tools you need for your software engineering back office on Plural. -featured: true -displayName: DevOps -collections: -- provider: AWS - bundles: - - name: argo-cd-aws - repo: argo-cd - - name: aws-sentry - repo: sentry - - name: aws-grafana - repo: grafana - - name: kubecost-aws - repo: kubecost -- provider: GCP - bundles: - - name: argo-cd-gcp - repo: argo-cd - - name: gcp-sentry - repo: sentry - - name: gcp-grafana - repo: grafana - - name: kubecost-gcp - repo: kubecost -- provider: AZURE - bundles: - - name: argo-cd-azure - repo: argo-cd - - name: azure-sentry - repo: sentry - - name: azure-grafana - repo: grafana - - name: kubecost-azure - repo: kubecost \ No newline at end of file diff --git a/plural/stacks/security.yaml b/plural/stacks/security.yaml deleted file mode 100644 index 2b25e15d2..000000000 --- a/plural/stacks/security.yaml +++ /dev/null @@ -1,29 +0,0 @@ -name: security -description: End-to-end K8s security using Plural. -featured: true -displayName: Security -collections: -- provider: AWS - bundles: - - name: kubescape-aws - repo: kubescape - - name: istio-aws - repo: istio - - name: vault-aws - repo: vault -- provider: GCP - bundles: - - name: kubescape-gcp - repo: kubescape - - name: istio-gcp - repo: istio - - name: vault-gcp - repo: vault -- provider: AZURE - bundles: - - name: kubescape-azure - repo: kubescape - - name: istio-azure - repo: istio - - name: vault-azure - repo: vault \ No newline at end of file diff --git a/wails.json b/wails.json deleted file mode 100644 index 6bbc76bac..000000000 --- a/wails.json +++ /dev/null @@ -1,15 +0,0 @@ -{ - "$schema": "https://wails.io/schemas/config.v2.json", - "name": "plural", - "appargs": "install", - "outputfilename": "plural", - "frontend:dir": "pkg/ui/web", - "frontend:install": "yarn install", - "frontend:build": "yarn build", - "frontend:dev:watcher": "yarn dev", - "frontend:dev:serverUrl": "auto", - "author": { - "name": "Sebastian Florek", - "email": "sebastian@plural.sh" - } -} From 97c979e1f68dedc03a23f5ed828ab5ec2a089602 Mon Sep 17 00:00:00 2001 From: Marcin Maciaszczyk Date: Tue, 10 Dec 2024 10:36:01 +0100 Subject: [PATCH 34/37] go mod tidy --- go.mod | 61 +- go.sum | 2080 +------------------------------------------------------- 2 files changed, 5 insertions(+), 2136 deletions(-) diff --git a/go.mod b/go.mod index d06c92e3c..f1f076aa9 100644 --- a/go.mod +++ b/go.mod @@ -22,21 +22,14 @@ require ( github.com/aws/aws-sdk-go-v2/service/iam v1.32.0 github.com/aws/aws-sdk-go-v2/service/sts v1.28.6 github.com/briandowns/spinner v1.23.0 - github.com/buger/goterm v1.0.4 github.com/chartmuseum/helm-push v0.10.3 - github.com/databus23/helm-diff/v3 v3.6.0 github.com/fatih/color v1.16.0 - github.com/gin-gonic/gin v1.9.1 github.com/go-git/go-git/v5 v5.11.0 github.com/gofrs/flock v0.8.1 github.com/google/go-github/v45 v45.2.0 - github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 github.com/hashicorp/go-retryablehttp v0.7.7 - github.com/hashicorp/hcl v1.0.0 github.com/hashicorp/terraform-plugin-sdk/v2 v2.24.1 - github.com/helm/helm-mapkubeapis v0.4.1 github.com/imdario/mergo v0.3.16 - github.com/inancgumus/screen v0.0.0-20190314163918-06e984b86ed3 github.com/joho/godotenv v1.3.0 github.com/ktrysmt/go-bitbucket v0.9.55 github.com/likexian/doh v0.7.1 @@ -44,7 +37,6 @@ require ( github.com/mikesmitty/edkey v0.0.0-20170222072505-3356ea4e686a github.com/mitchellh/go-homedir v1.1.0 github.com/mitchellh/mapstructure v1.5.0 - github.com/norwoodj/helm-docs v1.11.2 github.com/olekukonko/tablewriter v0.0.5 github.com/packethost/packngo v0.29.0 github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c @@ -54,17 +46,11 @@ require ( github.com/pluralsh/plural-operator v0.5.5 github.com/pluralsh/polly v0.1.10 github.com/posthog/posthog-go v0.0.0-20230801140217-d607812dee69 - github.com/rodaine/hclencoder v0.0.1 github.com/samber/lo v1.46.0 - github.com/spf13/viper v1.18.2 github.com/urfave/cli v1.22.14 - github.com/wailsapp/wails/v2 v2.4.1 github.com/xanzy/go-gitlab v0.73.1 github.com/yuin/gopher-lua v0.0.0-20220504180219-658193537a64 - go.mercari.io/hcledit v0.0.8 golang.org/x/crypto v0.25.0 - golang.org/x/exp v0.0.0-20240103183307-be819d1f06fc - golang.org/x/mod v0.18.0 golang.org/x/oauth2 v0.19.0 gopkg.in/yaml.v2 v2.4.0 gopkg.in/yaml.v3 v3.0.1 @@ -73,8 +59,6 @@ require ( k8s.io/api v0.30.1 k8s.io/apimachinery v0.31.0-beta.0 k8s.io/client-go v0.30.1 - layeh.com/gopher-luar v1.0.10 - sigs.k8s.io/application v0.8.3 sigs.k8s.io/controller-runtime v0.18.2 sigs.k8s.io/yaml v1.4.0 ) @@ -87,9 +71,6 @@ require ( github.com/Azure/azure-sdk-for-go/sdk/internal v1.8.0 // indirect github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/network/armnetwork v1.1.0 // indirect github.com/AzureAD/microsoft-authentication-library-for-go v1.2.2 // indirect - github.com/agext/levenshtein v1.2.2 // indirect - github.com/apparentlymart/go-textseg/v13 v13.0.0 // indirect - github.com/aryann/difflib v0.0.0-20170710044230-e206f873d14a // indirect github.com/aws/aws-sdk-go-v2/aws/protocol/eventstream v1.6.2 // indirect github.com/aws/aws-sdk-go-v2/credentials v1.17.11 // indirect github.com/aws/aws-sdk-go-v2/feature/ec2/imds v1.16.1 // indirect @@ -104,12 +85,9 @@ require ( github.com/aws/aws-sdk-go-v2/service/sso v1.20.5 // indirect github.com/aws/aws-sdk-go-v2/service/ssooidc v1.23.4 // indirect github.com/aws/smithy-go v1.20.2 // indirect - github.com/bep/debounce v1.2.1 // indirect github.com/blang/semver/v4 v4.0.0 // indirect - github.com/bytedance/sonic v1.9.1 // indirect github.com/cenkalti/backoff v2.2.1+incompatible // indirect github.com/cenkalti/backoff/v4 v4.3.0 // indirect - github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311 // indirect github.com/cloudflare/circl v1.3.7 // indirect github.com/containerd/errdefs v0.1.0 // indirect github.com/containerd/log v0.1.0 // indirect @@ -123,67 +101,40 @@ require ( github.com/docker/go-metrics v0.0.1 // indirect github.com/emicklei/go-restful/v3 v3.12.0 // indirect github.com/evanphx/json-patch/v5 v5.9.0 // indirect - github.com/fatih/camelcase v1.0.0 // indirect github.com/felixge/httpsnoop v1.0.4 // indirect - github.com/fsnotify/fsnotify v1.7.0 // indirect github.com/fxamacker/cbor/v2 v2.7.0 // indirect - github.com/gabriel-vasile/mimetype v1.4.2 // indirect github.com/go-gorp/gorp/v3 v3.1.0 // indirect github.com/go-logr/stdr v1.2.2 // indirect - github.com/go-ole/go-ole v1.2.6 // indirect github.com/go-resty/resty/v2 v2.9.1 // indirect - github.com/goccy/go-json v0.10.2 // indirect github.com/golang-jwt/jwt/v5 v5.2.1 // indirect github.com/google/gnostic-models v0.6.8 // indirect github.com/google/s2a-go v0.1.7 // indirect + github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 // indirect github.com/googleapis/enterprise-certificate-proxy v0.3.2 // indirect github.com/gorilla/websocket v1.5.0 // indirect github.com/hashicorp/errwrap v1.1.0 // indirect github.com/hashicorp/go-multierror v1.1.1 // indirect github.com/hashicorp/go-uuid v1.0.3 // indirect - github.com/hashicorp/hcl/v2 v2.15.0 // indirect - github.com/jchv/go-winloader v0.0.0-20210711035445-715c2860da7e // indirect - github.com/klauspost/cpuid/v2 v2.2.4 // indirect github.com/kylelemons/godebug v1.1.0 // indirect - github.com/labstack/echo/v4 v4.9.0 // indirect - github.com/labstack/gommon v0.3.1 // indirect - github.com/leaanthony/go-ansi-parser v1.0.1 // indirect - github.com/leaanthony/gosod v1.0.3 // indirect - github.com/leaanthony/slicer v1.5.0 // indirect github.com/likexian/gokit v0.25.15 // indirect - github.com/magiconair/properties v1.8.7 // indirect github.com/miekg/dns v1.1.50 // indirect github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f // indirect github.com/osteele/liquid v1.4.0 // indirect github.com/osteele/tuesday v1.0.3 // indirect - github.com/pelletier/go-toml/v2 v2.2.0 // indirect github.com/pjbgf/sha1cd v0.3.0 // indirect github.com/pluralsh/controller-reconcile-helper v0.0.4 // indirect - github.com/sagikazarmark/locafero v0.4.0 // indirect - github.com/sagikazarmark/slog-shim v0.1.0 // indirect github.com/skeema/knownhosts v1.2.1 // indirect github.com/sosodev/duration v1.3.1 // indirect - github.com/sourcegraph/conc v0.3.0 // indirect - github.com/spf13/afero v1.11.0 // indirect github.com/stretchr/objx v0.5.2 // indirect - github.com/subosito/gotenv v1.6.0 // indirect - github.com/tkrajina/go-reflector v0.5.5 // indirect - github.com/twitchyliquid64/golang-asm v0.15.1 // indirect - github.com/valyala/bytebufferpool v1.0.0 // indirect - github.com/valyala/fasttemplate v1.2.1 // indirect github.com/vektah/gqlparser/v2 v2.5.16 // indirect - github.com/wailsapp/mimetype v1.4.1 // indirect github.com/x448/float16 v0.8.4 // indirect - github.com/zclconf/go-cty v1.13.2 // indirect go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.46.1 // indirect go.opentelemetry.io/otel v1.22.0 // indirect go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.22.0 // indirect go.opentelemetry.io/otel/metric v1.22.0 // indirect go.opentelemetry.io/otel/sdk v1.22.0 // indirect go.opentelemetry.io/otel/trace v1.22.0 // indirect - go.uber.org/multierr v1.11.0 // indirect - golang.org/x/arch v0.3.0 // indirect google.golang.org/genproto v0.0.0-20231211222908-989df2bf70f3 // indirect google.golang.org/genproto/googleapis/api v0.0.0-20231120223509-83a465c0220f // indirect google.golang.org/genproto/googleapis/rpc v0.0.0-20231212172506-995d672761c0 // indirect @@ -222,7 +173,6 @@ require ( github.com/evanphx/json-patch v5.7.0+incompatible github.com/exponent-io/jsonpath v0.0.0-20151013193312-d6023ce2651d // indirect github.com/ghodss/yaml v1.0.0 // indirect - github.com/gin-contrib/sse v0.1.0 // indirect github.com/go-errors/errors v1.5.1 // indirect github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 // indirect github.com/go-git/go-billy/v5 v5.5.0 // indirect @@ -230,15 +180,12 @@ require ( github.com/go-openapi/jsonpointer v0.19.6 // indirect github.com/go-openapi/jsonreference v0.20.2 // indirect github.com/go-openapi/swag v0.22.4 // indirect - github.com/go-playground/locales v0.14.1 // indirect - github.com/go-playground/universal-translator v0.18.1 // indirect - github.com/go-playground/validator/v10 v10.14.0 // indirect github.com/gobwas/glob v0.2.3 // indirect github.com/gogo/protobuf v1.3.2 // indirect github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da // indirect github.com/golang/protobuf v1.5.4 // indirect github.com/google/btree v1.1.2 // indirect - github.com/google/go-cmp v0.6.0 + github.com/google/go-cmp v0.6.0 // indirect github.com/google/go-querystring v1.1.0 // indirect github.com/google/gofuzz v1.2.0 // indirect github.com/google/uuid v1.6.0 // indirect @@ -262,7 +209,6 @@ require ( github.com/klauspost/compress v1.17.4 // indirect github.com/lann/builder v0.0.0-20180802200727-47ae307949d0 // indirect github.com/lann/ps v0.0.0-20150810152359-62de8c46ede0 // indirect - github.com/leodido/go-urn v1.2.4 // indirect github.com/lib/pq v1.10.9 // indirect github.com/liggitt/tabwriter v0.0.0-20181228230101-89fcab3d43de // indirect github.com/mailru/easyjson v0.7.7 // indirect @@ -299,12 +245,11 @@ require ( github.com/schollz/progressbar/v3 v3.14.1 // indirect github.com/sergi/go-diff v1.3.1 // indirect github.com/shopspring/decimal v1.3.1 // indirect - github.com/sirupsen/logrus v1.9.3 + github.com/sirupsen/logrus v1.9.3 // indirect github.com/spf13/cast v1.6.0 // indirect github.com/spf13/cobra v1.8.1 // indirect github.com/spf13/pflag v1.0.6-0.20210604193023-d5e0c0615ace // indirect github.com/stretchr/testify v1.9.0 - github.com/ugorji/go/codec v1.2.11 // indirect github.com/xanzy/ssh-agent v0.3.3 // indirect github.com/xeipuuv/gojsonpointer v0.0.0-20190905194746-02993c407bfb // indirect github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 // indirect diff --git a/go.sum b/go.sum index 686db7cac..f5138c410 100644 --- a/go.sum +++ b/go.sum @@ -1,622 +1,24 @@ cloud.google.com/go v0.26.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.34.0/go.mod h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw= -cloud.google.com/go v0.38.0/go.mod h1:990N+gfupTy94rShfmMCWGDn0LpTmnzTp2qbd1dvSRU= -cloud.google.com/go v0.44.1/go.mod h1:iSa0KzasP4Uvy3f1mN/7PiObzGgflwredwwASm/v6AU= -cloud.google.com/go v0.44.2/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= -cloud.google.com/go v0.44.3/go.mod h1:60680Gw3Yr4ikxnPRS/oxxkBccT6SA1yMk63TGekxKY= -cloud.google.com/go v0.45.1/go.mod h1:RpBamKRgapWJb87xiFSdk4g1CME7QZg3uwTez+TSTjc= -cloud.google.com/go v0.46.3/go.mod h1:a6bKKbmY7er1mI7TEI4lsAkts/mkhTSZK8w33B4RAg0= -cloud.google.com/go v0.50.0/go.mod h1:r9sluTvynVuxRIOHXQEHMFffphuXHOMZMycpNR5e6To= -cloud.google.com/go v0.52.0/go.mod h1:pXajvRH/6o3+F9jDHZWQ5PbGhn+o8w9qiu/CffaVdO4= -cloud.google.com/go v0.53.0/go.mod h1:fp/UouUEsRkN6ryDKNW/Upv/JBKnv6WDthjR6+vze6M= -cloud.google.com/go v0.54.0/go.mod h1:1rq2OEkV3YMf6n/9ZvGWI3GWw0VoqH/1x2nd8Is/bPc= -cloud.google.com/go v0.56.0/go.mod h1:jr7tqZxxKOVYizybht9+26Z/gUq7tiRzu+ACVAMbKVk= -cloud.google.com/go v0.57.0/go.mod h1:oXiQ6Rzq3RAkkY7N6t3TcE6jE+CIBBbA36lwQ1JyzZs= -cloud.google.com/go v0.62.0/go.mod h1:jmCYTdRCQuc1PHIIJ/maLInMho30T/Y0M4hTdTShOYc= -cloud.google.com/go v0.65.0/go.mod h1:O5N8zS7uWy9vkA9vayVHs65eM1ubvY4h553ofrNHObY= -cloud.google.com/go v0.72.0/go.mod h1:M+5Vjvlc2wnp6tjzE102Dw08nGShTscUx2nZMufOKPI= -cloud.google.com/go v0.74.0/go.mod h1:VV1xSbzvo+9QJOxLDaJfTjx5e+MePCpCWwvftOeQmWk= -cloud.google.com/go v0.75.0/go.mod h1:VGuuCn7PG0dwsd5XPVm2Mm3wlh3EL55/79EKB6hlPTY= -cloud.google.com/go v0.78.0/go.mod h1:QjdrLG0uq+YwhjoVOLsS1t7TW8fs36kLs4XO5R5ECHg= -cloud.google.com/go v0.79.0/go.mod h1:3bzgcEeQlzbuEAYu4mrWhKqWjmpprinYgKJLgKHnbb8= -cloud.google.com/go v0.81.0/go.mod h1:mk/AM35KwGk/Nm2YSeZbxXdrNK3KZOYHmLkOqC2V6E0= -cloud.google.com/go v0.83.0/go.mod h1:Z7MJUsANfY0pYPdw0lbnivPx4/vhy/e2FEkSkF7vAVY= -cloud.google.com/go v0.84.0/go.mod h1:RazrYuxIK6Kb7YrzzhPoLmCVzl7Sup4NrbKPg8KHSUM= -cloud.google.com/go v0.87.0/go.mod h1:TpDYlFy7vuLzZMMZ+B6iRiELaY7z/gJPaqbMx6mlWcY= -cloud.google.com/go v0.90.0/go.mod h1:kRX0mNRHe0e2rC6oNakvwQqzyDmg57xJ+SZU1eT2aDQ= -cloud.google.com/go v0.93.3/go.mod h1:8utlLll2EF5XMAV15woO4lSbWQlk8rer9aLOfLh7+YI= -cloud.google.com/go v0.94.1/go.mod h1:qAlAugsXlC+JWO+Bke5vCtc9ONxjQT3drlTTnAplMW4= -cloud.google.com/go v0.97.0/go.mod h1:GF7l59pYBVlXQIBLx3a761cZ41F9bBH3JUlihCt2Udc= -cloud.google.com/go v0.99.0/go.mod h1:w0Xx2nLzqWJPuozYQX+hFfCSI8WioryfRDzkoI/Y2ZA= -cloud.google.com/go v0.100.1/go.mod h1:fs4QogzfH5n2pBXBP9vRiU+eCny7lD2vmFZy79Iuw1U= -cloud.google.com/go v0.100.2/go.mod h1:4Xra9TjzAeYHrl5+oeLlzbM2k3mjVhZh4UqTZ//w99A= -cloud.google.com/go v0.102.0/go.mod h1:oWcCzKlqJ5zgHQt9YsaeTY9KzIvjyy0ArmiBUgpQ+nc= -cloud.google.com/go v0.102.1/go.mod h1:XZ77E9qnTEnrgEOvr4xzfdX5TRo7fB4T2F4O6+34hIU= -cloud.google.com/go v0.104.0/go.mod h1:OO6xxXdJyvuJPcEPBLN9BJPD+jep5G1+2U5B5gkRYtA= -cloud.google.com/go v0.105.0/go.mod h1:PrLgOJNe5nfE9UMxKxgXj4mD3voiP+YQ6gdt6KMFOKM= -cloud.google.com/go v0.107.0/go.mod h1:wpc2eNrD7hXUTy8EKS10jkxpZBjASrORK7goS+3YX2I= -cloud.google.com/go v0.110.0/go.mod h1:SJnCLqQ0FCFGSZMUNUf84MV3Aia54kn7pi8st7tMzaY= -cloud.google.com/go v0.110.2/go.mod h1:k04UEeEtb6ZBRTv3dZz4CeJC3jKGxyhl0sAiVVquxiw= cloud.google.com/go v0.110.10 h1:LXy9GEO+timppncPIAZoOj3l58LIU9k+kn48AN7IO3Y= cloud.google.com/go v0.110.10/go.mod h1:v1OoFqYxiBkUrruItNM3eT4lLByNjxmJSV/xDKJNnic= -cloud.google.com/go/accessapproval v1.4.0/go.mod h1:zybIuC3KpDOvotz59lFe5qxRZx6C75OtwbisN56xYB4= -cloud.google.com/go/accessapproval v1.5.0/go.mod h1:HFy3tuiGvMdcd/u+Cu5b9NkO1pEICJ46IR82PoUdplw= -cloud.google.com/go/accessapproval v1.6.0/go.mod h1:R0EiYnwV5fsRFiKZkPHr6mwyk2wxUJ30nL4j2pcFY2E= -cloud.google.com/go/accesscontextmanager v1.3.0/go.mod h1:TgCBehyr5gNMz7ZaH9xubp+CE8dkrszb4oK9CWyvD4o= -cloud.google.com/go/accesscontextmanager v1.4.0/go.mod h1:/Kjh7BBu/Gh83sv+K60vN9QE5NJcd80sU33vIe2IFPE= -cloud.google.com/go/accesscontextmanager v1.6.0/go.mod h1:8XCvZWfYw3K/ji0iVnp+6pu7huxoQTLmxAbVjbloTtM= -cloud.google.com/go/accesscontextmanager v1.7.0/go.mod h1:CEGLewx8dwa33aDAZQujl7Dx+uYhS0eay198wB/VumQ= -cloud.google.com/go/aiplatform v1.22.0/go.mod h1:ig5Nct50bZlzV6NvKaTwmplLLddFx0YReh9WfTO5jKw= -cloud.google.com/go/aiplatform v1.24.0/go.mod h1:67UUvRBKG6GTayHKV8DBv2RtR1t93YRu5B1P3x99mYY= -cloud.google.com/go/aiplatform v1.27.0/go.mod h1:Bvxqtl40l0WImSb04d0hXFU7gDOiq9jQmorivIiWcKg= -cloud.google.com/go/aiplatform v1.35.0/go.mod h1:7MFT/vCaOyZT/4IIFfxH4ErVg/4ku6lKv3w0+tFTgXQ= -cloud.google.com/go/aiplatform v1.36.1/go.mod h1:WTm12vJRPARNvJ+v6P52RDHCNe4AhvjcIZ/9/RRHy/k= -cloud.google.com/go/aiplatform v1.37.0/go.mod h1:IU2Cv29Lv9oCn/9LkFiiuKfwrRTq+QQMbW+hPCxJGZw= -cloud.google.com/go/analytics v0.11.0/go.mod h1:DjEWCu41bVbYcKyvlws9Er60YE4a//bK6mnhWvQeFNI= -cloud.google.com/go/analytics v0.12.0/go.mod h1:gkfj9h6XRf9+TS4bmuhPEShsh3hH8PAZzm/41OOhQd4= -cloud.google.com/go/analytics v0.17.0/go.mod h1:WXFa3WSym4IZ+JiKmavYdJwGG/CvpqiqczmL59bTD9M= -cloud.google.com/go/analytics v0.18.0/go.mod h1:ZkeHGQlcIPkw0R/GW+boWHhCOR43xz9RN/jn7WcqfIE= -cloud.google.com/go/analytics v0.19.0/go.mod h1:k8liqf5/HCnOUkbawNtrWWc+UAzyDlW89doe8TtoDsE= -cloud.google.com/go/apigateway v1.3.0/go.mod h1:89Z8Bhpmxu6AmUxuVRg/ECRGReEdiP3vQtk4Z1J9rJk= -cloud.google.com/go/apigateway v1.4.0/go.mod h1:pHVY9MKGaH9PQ3pJ4YLzoj6U5FUDeDFBllIz7WmzJoc= -cloud.google.com/go/apigateway v1.5.0/go.mod h1:GpnZR3Q4rR7LVu5951qfXPJCHquZt02jf7xQx7kpqN8= -cloud.google.com/go/apigeeconnect v1.3.0/go.mod h1:G/AwXFAKo0gIXkPTVfZDd2qA1TxBXJ3MgMRBQkIi9jc= -cloud.google.com/go/apigeeconnect v1.4.0/go.mod h1:kV4NwOKqjvt2JYR0AoIWo2QGfoRtn/pkS3QlHp0Ni04= -cloud.google.com/go/apigeeconnect v1.5.0/go.mod h1:KFaCqvBRU6idyhSNyn3vlHXc8VMDJdRmwDF6JyFRqZ8= -cloud.google.com/go/apigeeregistry v0.4.0/go.mod h1:EUG4PGcsZvxOXAdyEghIdXwAEi/4MEaoqLMLDMIwKXY= -cloud.google.com/go/apigeeregistry v0.5.0/go.mod h1:YR5+s0BVNZfVOUkMa5pAR2xGd0A473vA5M7j247o1wM= -cloud.google.com/go/apigeeregistry v0.6.0/go.mod h1:BFNzW7yQVLZ3yj0TKcwzb8n25CFBri51GVGOEUcgQsc= -cloud.google.com/go/apikeys v0.4.0/go.mod h1:XATS/yqZbaBK0HOssf+ALHp8jAlNHUgyfprvNcBIszU= -cloud.google.com/go/apikeys v0.5.0/go.mod h1:5aQfwY4D+ewMMWScd3hm2en3hCj+BROlyrt3ytS7KLI= -cloud.google.com/go/apikeys v0.6.0/go.mod h1:kbpXu5upyiAlGkKrJgQl8A0rKNNJ7dQ377pdroRSSi8= -cloud.google.com/go/appengine v1.4.0/go.mod h1:CS2NhuBuDXM9f+qscZ6V86m1MIIqPj3WC/UoEuR1Sno= -cloud.google.com/go/appengine v1.5.0/go.mod h1:TfasSozdkFI0zeoxW3PTBLiNqRmzraodCWatWI9Dmak= -cloud.google.com/go/appengine v1.6.0/go.mod h1:hg6i0J/BD2cKmDJbaFSYHFyZkgBEfQrDg/X0V5fJn84= -cloud.google.com/go/appengine v1.7.0/go.mod h1:eZqpbHFCqRGa2aCdope7eC0SWLV1j0neb/QnMJVWx6A= -cloud.google.com/go/appengine v1.7.1/go.mod h1:IHLToyb/3fKutRysUlFO0BPt5j7RiQ45nrzEJmKTo6E= -cloud.google.com/go/area120 v0.5.0/go.mod h1:DE/n4mp+iqVyvxHN41Vf1CR602GiHQjFPusMFW6bGR4= -cloud.google.com/go/area120 v0.6.0/go.mod h1:39yFJqWVgm0UZqWTOdqkLhjoC7uFfgXRC8g/ZegeAh0= -cloud.google.com/go/area120 v0.7.0/go.mod h1:a3+8EUD1SX5RUcCs3MY5YasiO1z6yLiNLRiFrykbynY= -cloud.google.com/go/area120 v0.7.1/go.mod h1:j84i4E1RboTWjKtZVWXPqvK5VHQFJRF2c1Nm69pWm9k= -cloud.google.com/go/artifactregistry v1.6.0/go.mod h1:IYt0oBPSAGYj/kprzsBjZ/4LnG/zOcHyFHjWPCi6SAQ= -cloud.google.com/go/artifactregistry v1.7.0/go.mod h1:mqTOFOnGZx8EtSqK/ZWcsm/4U8B77rbcLP6ruDU2Ixk= -cloud.google.com/go/artifactregistry v1.8.0/go.mod h1:w3GQXkJX8hiKN0v+at4b0qotwijQbYUqF2GWkZzAhC0= -cloud.google.com/go/artifactregistry v1.9.0/go.mod h1:2K2RqvA2CYvAeARHRkLDhMDJ3OXy26h3XW+3/Jh2uYc= -cloud.google.com/go/artifactregistry v1.11.1/go.mod h1:lLYghw+Itq9SONbCa1YWBoWs1nOucMH0pwXN1rOBZFI= -cloud.google.com/go/artifactregistry v1.11.2/go.mod h1:nLZns771ZGAwVLzTX/7Al6R9ehma4WUEhZGWV6CeQNQ= -cloud.google.com/go/artifactregistry v1.12.0/go.mod h1:o6P3MIvtzTOnmvGagO9v/rOjjA0HmhJ+/6KAXrmYDCI= -cloud.google.com/go/artifactregistry v1.13.0/go.mod h1:uy/LNfoOIivepGhooAUpL1i30Hgee3Cu0l4VTWHUC08= -cloud.google.com/go/asset v1.5.0/go.mod h1:5mfs8UvcM5wHhqtSv8J1CtxxaQq3AdBxxQi2jGW/K4o= -cloud.google.com/go/asset v1.7.0/go.mod h1:YbENsRK4+xTiL+Ofoj5Ckf+O17kJtgp3Y3nn4uzZz5s= -cloud.google.com/go/asset v1.8.0/go.mod h1:mUNGKhiqIdbr8X7KNayoYvyc4HbbFO9URsjbytpUaW0= -cloud.google.com/go/asset v1.9.0/go.mod h1:83MOE6jEJBMqFKadM9NLRcs80Gdw76qGuHn8m3h8oHQ= -cloud.google.com/go/asset v1.10.0/go.mod h1:pLz7uokL80qKhzKr4xXGvBQXnzHn5evJAEAtZiIb0wY= -cloud.google.com/go/asset v1.11.1/go.mod h1:fSwLhbRvC9p9CXQHJ3BgFeQNM4c9x10lqlrdEUYXlJo= -cloud.google.com/go/asset v1.12.0/go.mod h1:h9/sFOa4eDIyKmH6QMpm4eUK3pDojWnUhTgJlk762Hg= -cloud.google.com/go/asset v1.13.0/go.mod h1:WQAMyYek/b7NBpYq/K4KJWcRqzoalEsxz/t/dTk4THw= -cloud.google.com/go/assuredworkloads v1.5.0/go.mod h1:n8HOZ6pff6re5KYfBXcFvSViQjDwxFkAkmUFffJRbbY= -cloud.google.com/go/assuredworkloads v1.6.0/go.mod h1:yo2YOk37Yc89Rsd5QMVECvjaMKymF9OP+QXWlKXUkXw= -cloud.google.com/go/assuredworkloads v1.7.0/go.mod h1:z/736/oNmtGAyU47reJgGN+KVoYoxeLBoj4XkKYscNI= -cloud.google.com/go/assuredworkloads v1.8.0/go.mod h1:AsX2cqyNCOvEQC8RMPnoc0yEarXQk6WEKkxYfL6kGIo= -cloud.google.com/go/assuredworkloads v1.9.0/go.mod h1:kFuI1P78bplYtT77Tb1hi0FMxM0vVpRC7VVoJC3ZoT0= -cloud.google.com/go/assuredworkloads v1.10.0/go.mod h1:kwdUQuXcedVdsIaKgKTp9t0UJkE5+PAVNhdQm4ZVq2E= -cloud.google.com/go/automl v1.5.0/go.mod h1:34EjfoFGMZ5sgJ9EoLsRtdPSNZLcfflJR39VbVNS2M0= -cloud.google.com/go/automl v1.6.0/go.mod h1:ugf8a6Fx+zP0D59WLhqgTDsQI9w07o64uf/Is3Nh5p8= -cloud.google.com/go/automl v1.7.0/go.mod h1:RL9MYCCsJEOmt0Wf3z9uzG0a7adTT1fe+aObgSpkCt8= -cloud.google.com/go/automl v1.8.0/go.mod h1:xWx7G/aPEe/NP+qzYXktoBSDfjO+vnKMGgsApGJJquM= -cloud.google.com/go/automl v1.12.0/go.mod h1:tWDcHDp86aMIuHmyvjuKeeHEGq76lD7ZqfGLN6B0NuU= -cloud.google.com/go/baremetalsolution v0.3.0/go.mod h1:XOrocE+pvK1xFfleEnShBlNAXf+j5blPPxrhjKgnIFc= -cloud.google.com/go/baremetalsolution v0.4.0/go.mod h1:BymplhAadOO/eBa7KewQ0Ppg4A4Wplbn+PsFKRLo0uI= -cloud.google.com/go/baremetalsolution v0.5.0/go.mod h1:dXGxEkmR9BMwxhzBhV0AioD0ULBmuLZI8CdwalUxuss= -cloud.google.com/go/batch v0.3.0/go.mod h1:TR18ZoAekj1GuirsUsR1ZTKN3FC/4UDnScjT8NXImFE= -cloud.google.com/go/batch v0.4.0/go.mod h1:WZkHnP43R/QCGQsZ+0JyG4i79ranE2u8xvjq/9+STPE= -cloud.google.com/go/batch v0.7.0/go.mod h1:vLZN95s6teRUqRQ4s3RLDsH8PvboqBK+rn1oevL159g= -cloud.google.com/go/beyondcorp v0.2.0/go.mod h1:TB7Bd+EEtcw9PCPQhCJtJGjk/7TC6ckmnSFS+xwTfm4= -cloud.google.com/go/beyondcorp v0.3.0/go.mod h1:E5U5lcrcXMsCuoDNyGrpyTm/hn7ne941Jz2vmksAxW8= -cloud.google.com/go/beyondcorp v0.4.0/go.mod h1:3ApA0mbhHx6YImmuubf5pyW8srKnCEPON32/5hj+RmM= -cloud.google.com/go/beyondcorp v0.5.0/go.mod h1:uFqj9X+dSfrheVp7ssLTaRHd2EHqSL4QZmH4e8WXGGU= -cloud.google.com/go/bigquery v1.0.1/go.mod h1:i/xbL2UlR5RvWAURpBYZTtm/cXjCha9lbfbpx4poX+o= -cloud.google.com/go/bigquery v1.3.0/go.mod h1:PjpwJnslEMmckchkHFfq+HTD2DmtT67aNFKH1/VBDHE= -cloud.google.com/go/bigquery v1.4.0/go.mod h1:S8dzgnTigyfTmLBfrtrhyYhwRxG72rYxvftPBK2Dvzc= -cloud.google.com/go/bigquery v1.5.0/go.mod h1:snEHRnqQbz117VIFhE8bmtwIDY80NLUZUMb4Nv6dBIg= -cloud.google.com/go/bigquery v1.7.0/go.mod h1://okPTzCYNXSlb24MZs83e2Do+h+VXtc4gLoIoXIAPc= -cloud.google.com/go/bigquery v1.8.0/go.mod h1:J5hqkt3O0uAFnINi6JXValWIb1v0goeZM77hZzJN/fQ= -cloud.google.com/go/bigquery v1.42.0/go.mod h1:8dRTJxhtG+vwBKzE5OseQn/hiydoQN3EedCaOdYmxRA= -cloud.google.com/go/bigquery v1.43.0/go.mod h1:ZMQcXHsl+xmU1z36G2jNGZmKp9zNY5BUua5wDgmNCfw= -cloud.google.com/go/bigquery v1.44.0/go.mod h1:0Y33VqXTEsbamHJvJHdFmtqHvMIY28aK1+dFsvaChGc= -cloud.google.com/go/bigquery v1.47.0/go.mod h1:sA9XOgy0A8vQK9+MWhEQTY6Tix87M/ZurWFIxmF9I/E= -cloud.google.com/go/bigquery v1.48.0/go.mod h1:QAwSz+ipNgfL5jxiaK7weyOhzdoAy1zFm0Nf1fysJac= -cloud.google.com/go/bigquery v1.49.0/go.mod h1:Sv8hMmTFFYBlt/ftw2uN6dFdQPzBlREY9yBh7Oy7/4Q= -cloud.google.com/go/bigquery v1.50.0/go.mod h1:YrleYEh2pSEbgTBZYMJ5SuSr0ML3ypjRB1zgf7pvQLU= -cloud.google.com/go/billing v1.4.0/go.mod h1:g9IdKBEFlItS8bTtlrZdVLWSSdSyFUZKXNS02zKMOZY= -cloud.google.com/go/billing v1.5.0/go.mod h1:mztb1tBc3QekhjSgmpf/CV4LzWXLzCArwpLmP2Gm88s= -cloud.google.com/go/billing v1.6.0/go.mod h1:WoXzguj+BeHXPbKfNWkqVtDdzORazmCjraY+vrxcyvI= -cloud.google.com/go/billing v1.7.0/go.mod h1:q457N3Hbj9lYwwRbnlD7vUpyjq6u5U1RAOArInEiD5Y= -cloud.google.com/go/billing v1.12.0/go.mod h1:yKrZio/eu+okO/2McZEbch17O5CB5NpZhhXG6Z766ss= -cloud.google.com/go/billing v1.13.0/go.mod h1:7kB2W9Xf98hP9Sr12KfECgfGclsH3CQR0R08tnRlRbc= -cloud.google.com/go/binaryauthorization v1.1.0/go.mod h1:xwnoWu3Y84jbuHa0zd526MJYmtnVXn0syOjaJgy4+dM= -cloud.google.com/go/binaryauthorization v1.2.0/go.mod h1:86WKkJHtRcv5ViNABtYMhhNWRrD1Vpi//uKEy7aYEfI= -cloud.google.com/go/binaryauthorization v1.3.0/go.mod h1:lRZbKgjDIIQvzYQS1p99A7/U1JqvqeZg0wiI5tp6tg0= -cloud.google.com/go/binaryauthorization v1.4.0/go.mod h1:tsSPQrBd77VLplV70GUhBf/Zm3FsKmgSqgm4UmiDItk= -cloud.google.com/go/binaryauthorization v1.5.0/go.mod h1:OSe4OU1nN/VswXKRBmciKpo9LulY41gch5c68htf3/Q= -cloud.google.com/go/certificatemanager v1.3.0/go.mod h1:n6twGDvcUBFu9uBgt4eYvvf3sQ6My8jADcOVwHmzadg= -cloud.google.com/go/certificatemanager v1.4.0/go.mod h1:vowpercVFyqs8ABSmrdV+GiFf2H/ch3KyudYQEMM590= -cloud.google.com/go/certificatemanager v1.6.0/go.mod h1:3Hh64rCKjRAX8dXgRAyOcY5vQ/fE1sh8o+Mdd6KPgY8= -cloud.google.com/go/channel v1.8.0/go.mod h1:W5SwCXDJsq/rg3tn3oG0LOxpAo6IMxNa09ngphpSlnk= -cloud.google.com/go/channel v1.9.0/go.mod h1:jcu05W0my9Vx4mt3/rEHpfxc9eKi9XwsdDL8yBMbKUk= -cloud.google.com/go/channel v1.11.0/go.mod h1:IdtI0uWGqhEeatSB62VOoJ8FSUhJ9/+iGkJVqp74CGE= -cloud.google.com/go/channel v1.12.0/go.mod h1:VkxCGKASi4Cq7TbXxlaBezonAYpp1GCnKMY6tnMQnLU= -cloud.google.com/go/cloudbuild v1.3.0/go.mod h1:WequR4ULxlqvMsjDEEEFnOG5ZSRSgWOywXYDb1vPE6U= -cloud.google.com/go/cloudbuild v1.4.0/go.mod h1:5Qwa40LHiOXmz3386FrjrYM93rM/hdRr7b53sySrTqA= -cloud.google.com/go/cloudbuild v1.6.0/go.mod h1:UIbc/w9QCbH12xX+ezUsgblrWv+Cv4Tw83GiSMHOn9M= -cloud.google.com/go/cloudbuild v1.7.0/go.mod h1:zb5tWh2XI6lR9zQmsm1VRA+7OCuve5d8S+zJUul8KTg= -cloud.google.com/go/cloudbuild v1.9.0/go.mod h1:qK1d7s4QlO0VwfYn5YuClDGg2hfmLZEb4wQGAbIgL1s= -cloud.google.com/go/clouddms v1.3.0/go.mod h1:oK6XsCDdW4Ib3jCCBugx+gVjevp2TMXFtgxvPSee3OM= -cloud.google.com/go/clouddms v1.4.0/go.mod h1:Eh7sUGCC+aKry14O1NRljhjyrr0NFC0G2cjwX0cByRk= -cloud.google.com/go/clouddms v1.5.0/go.mod h1:QSxQnhikCLUw13iAbffF2CZxAER3xDGNHjsTAkQJcQA= -cloud.google.com/go/cloudtasks v1.5.0/go.mod h1:fD92REy1x5woxkKEkLdvavGnPJGEn8Uic9nWuLzqCpY= -cloud.google.com/go/cloudtasks v1.6.0/go.mod h1:C6Io+sxuke9/KNRkbQpihnW93SWDU3uXt92nu85HkYI= -cloud.google.com/go/cloudtasks v1.7.0/go.mod h1:ImsfdYWwlWNJbdgPIIGJWC+gemEGTBK/SunNQQNCAb4= -cloud.google.com/go/cloudtasks v1.8.0/go.mod h1:gQXUIwCSOI4yPVK7DgTVFiiP0ZW/eQkydWzwVMdHxrI= -cloud.google.com/go/cloudtasks v1.9.0/go.mod h1:w+EyLsVkLWHcOaqNEyvcKAsWp9p29dL6uL9Nst1cI7Y= -cloud.google.com/go/cloudtasks v1.10.0/go.mod h1:NDSoTLkZ3+vExFEWu2UJV1arUyzVDAiZtdWcsUyNwBs= -cloud.google.com/go/compute v0.1.0/go.mod h1:GAesmwr110a34z04OlxYkATPBEfVhkymfTBXtfbBFow= -cloud.google.com/go/compute v1.3.0/go.mod h1:cCZiE1NHEtai4wiufUhW8I8S1JKkAnhnQJWM7YD99wM= -cloud.google.com/go/compute v1.5.0/go.mod h1:9SMHyhJlzhlkJqrPAc839t2BZFTSk6Jdj6mkzQJeu0M= -cloud.google.com/go/compute v1.6.0/go.mod h1:T29tfhtVbq1wvAPo0E3+7vhgmkOYeXjhFvz/FMzPu0s= -cloud.google.com/go/compute v1.6.1/go.mod h1:g85FgpzFvNULZ+S8AYq87axRKuf2Kh7deLqV/jJ3thU= -cloud.google.com/go/compute v1.7.0/go.mod h1:435lt8av5oL9P3fv1OEzSbSUe+ybHXGMPQHHZWZxy9U= -cloud.google.com/go/compute v1.10.0/go.mod h1:ER5CLbMxl90o2jtNbGSbtfOpQKR0t15FOtRsugnLrlU= -cloud.google.com/go/compute v1.12.0/go.mod h1:e8yNOBcBONZU1vJKCvCoDw/4JQsA0dpM4x/6PIIOocU= -cloud.google.com/go/compute v1.12.1/go.mod h1:e8yNOBcBONZU1vJKCvCoDw/4JQsA0dpM4x/6PIIOocU= -cloud.google.com/go/compute v1.13.0/go.mod h1:5aPTS0cUNMIc1CE546K+Th6weJUNQErARyZtRXDJ8GE= -cloud.google.com/go/compute v1.14.0/go.mod h1:YfLtxrj9sU4Yxv+sXzZkyPjEyPBZfXHUvjxega5vAdo= -cloud.google.com/go/compute v1.15.1/go.mod h1:bjjoF/NtFUrkD/urWfdHaKuOPDR5nWIs63rR+SXhcpA= -cloud.google.com/go/compute v1.18.0/go.mod h1:1X7yHxec2Ga+Ss6jPyjxRxpu2uu7PLgsOVXvgU0yacs= -cloud.google.com/go/compute v1.19.0/go.mod h1:rikpw2y+UMidAe9tISo04EHNOIf42RLYF/q8Bs93scU= -cloud.google.com/go/compute v1.19.1/go.mod h1:6ylj3a05WF8leseCdIf77NK0g1ey+nj5IKd5/kvShxE= -cloud.google.com/go/compute v1.19.3/go.mod h1:qxvISKp/gYnXkSAD1ppcSOveRAmzxicEv/JlizULFrI= -cloud.google.com/go/compute v1.20.1/go.mod h1:4tCnrn48xsqlwSAiLf1HXMQk8CONslYbdiEZc9FEIbM= cloud.google.com/go/compute v1.23.3 h1:6sVlXXBmbd7jNX0Ipq0trII3e4n1/MsADLK6a+aiVlk= cloud.google.com/go/compute v1.23.3/go.mod h1:VCgBUoMnIVIR0CscqQiPJLAG25E3ZRZMzcFZeQ+h8CI= -cloud.google.com/go/compute/metadata v0.1.0/go.mod h1:Z1VN+bulIf6bt4P/C37K4DyZYZEXYonfTBHHFPO/4UU= -cloud.google.com/go/compute/metadata v0.2.0/go.mod h1:zFmK7XCadkQkj6TtorcaGlCW1hT1fIilQDwofLpJ20k= -cloud.google.com/go/compute/metadata v0.2.1/go.mod h1:jgHgmJd2RKBGzXqF5LR2EZMGxBkeanZ9wwa75XHJgOM= cloud.google.com/go/compute/metadata v0.2.3 h1:mg4jlk7mCAj6xXp9UJ4fjI9VUI5rubuGBW5aJ7UnBMY= cloud.google.com/go/compute/metadata v0.2.3/go.mod h1:VAV5nSsACxMJvgaAuX6Pk2AawlZn8kiOGuCv6gTkwuA= -cloud.google.com/go/contactcenterinsights v1.3.0/go.mod h1:Eu2oemoePuEFc/xKFPjbTuPSj0fYJcPls9TFlPNnHHY= -cloud.google.com/go/contactcenterinsights v1.4.0/go.mod h1:L2YzkGbPsv+vMQMCADxJoT9YiTTnSEd6fEvCeHTYVck= -cloud.google.com/go/contactcenterinsights v1.6.0/go.mod h1:IIDlT6CLcDoyv79kDv8iWxMSTZhLxSCofVV5W6YFM/w= -cloud.google.com/go/container v1.6.0/go.mod h1:Xazp7GjJSeUYo688S+6J5V+n/t+G5sKBTFkKNudGRxg= -cloud.google.com/go/container v1.7.0/go.mod h1:Dp5AHtmothHGX3DwwIHPgq45Y8KmNsgN3amoYfxVkLo= -cloud.google.com/go/container v1.13.1/go.mod h1:6wgbMPeQRw9rSnKBCAJXnds3Pzj03C4JHamr8asWKy4= -cloud.google.com/go/container v1.14.0/go.mod h1:3AoJMPhHfLDxLvrlVWaK57IXzaPnLaZq63WX59aQBfM= -cloud.google.com/go/container v1.15.0/go.mod h1:ft+9S0WGjAyjDggg5S06DXj+fHJICWg8L7isCQe9pQA= -cloud.google.com/go/containeranalysis v0.5.1/go.mod h1:1D92jd8gRR/c0fGMlymRgxWD3Qw9C1ff6/T7mLgVL8I= -cloud.google.com/go/containeranalysis v0.6.0/go.mod h1:HEJoiEIu+lEXM+k7+qLCci0h33lX3ZqoYFdmPcoO7s4= -cloud.google.com/go/containeranalysis v0.7.0/go.mod h1:9aUL+/vZ55P2CXfuZjS4UjQ9AgXoSw8Ts6lemfmxBxI= -cloud.google.com/go/containeranalysis v0.9.0/go.mod h1:orbOANbwk5Ejoom+s+DUCTTJ7IBdBQJDcSylAx/on9s= -cloud.google.com/go/datacatalog v1.3.0/go.mod h1:g9svFY6tuR+j+hrTw3J2dNcmI0dzmSiyOzm8kpLq0a0= -cloud.google.com/go/datacatalog v1.5.0/go.mod h1:M7GPLNQeLfWqeIm3iuiruhPzkt65+Bx8dAKvScX8jvs= -cloud.google.com/go/datacatalog v1.6.0/go.mod h1:+aEyF8JKg+uXcIdAmmaMUmZ3q1b/lKLtXCmXdnc0lbc= -cloud.google.com/go/datacatalog v1.7.0/go.mod h1:9mEl4AuDYWw81UGc41HonIHH7/sn52H0/tc8f8ZbZIE= -cloud.google.com/go/datacatalog v1.8.0/go.mod h1:KYuoVOv9BM8EYz/4eMFxrr4DUKhGIOXxZoKYF5wdISM= -cloud.google.com/go/datacatalog v1.8.1/go.mod h1:RJ58z4rMp3gvETA465Vg+ag8BGgBdnRPEMMSTr5Uv+M= -cloud.google.com/go/datacatalog v1.12.0/go.mod h1:CWae8rFkfp6LzLumKOnmVh4+Zle4A3NXLzVJ1d1mRm0= -cloud.google.com/go/datacatalog v1.13.0/go.mod h1:E4Rj9a5ZtAxcQJlEBTLgMTphfP11/lNaAshpoBgemX8= -cloud.google.com/go/dataflow v0.6.0/go.mod h1:9QwV89cGoxjjSR9/r7eFDqqjtvbKxAK2BaYU6PVk9UM= -cloud.google.com/go/dataflow v0.7.0/go.mod h1:PX526vb4ijFMesO1o202EaUmouZKBpjHsTlCtB4parQ= -cloud.google.com/go/dataflow v0.8.0/go.mod h1:Rcf5YgTKPtQyYz8bLYhFoIV/vP39eL7fWNcSOyFfLJE= -cloud.google.com/go/dataform v0.3.0/go.mod h1:cj8uNliRlHpa6L3yVhDOBrUXH+BPAO1+KFMQQNSThKo= -cloud.google.com/go/dataform v0.4.0/go.mod h1:fwV6Y4Ty2yIFL89huYlEkwUPtS7YZinZbzzj5S9FzCE= -cloud.google.com/go/dataform v0.5.0/go.mod h1:GFUYRe8IBa2hcomWplodVmUx/iTL0FrsauObOM3Ipr0= -cloud.google.com/go/dataform v0.6.0/go.mod h1:QPflImQy33e29VuapFdf19oPbE4aYTJxr31OAPV+ulA= -cloud.google.com/go/dataform v0.7.0/go.mod h1:7NulqnVozfHvWUBpMDfKMUESr+85aJsC/2O0o3jWPDE= -cloud.google.com/go/datafusion v1.4.0/go.mod h1:1Zb6VN+W6ALo85cXnM1IKiPw+yQMKMhB9TsTSRDo/38= -cloud.google.com/go/datafusion v1.5.0/go.mod h1:Kz+l1FGHB0J+4XF2fud96WMmRiq/wj8N9u007vyXZ2w= -cloud.google.com/go/datafusion v1.6.0/go.mod h1:WBsMF8F1RhSXvVM8rCV3AeyWVxcC2xY6vith3iw3S+8= -cloud.google.com/go/datalabeling v0.5.0/go.mod h1:TGcJ0G2NzcsXSE/97yWjIZO0bXj0KbVlINXMG9ud42I= -cloud.google.com/go/datalabeling v0.6.0/go.mod h1:WqdISuk/+WIGeMkpw/1q7bK/tFEZxsrFJOJdY2bXvTQ= -cloud.google.com/go/datalabeling v0.7.0/go.mod h1:WPQb1y08RJbmpM3ww0CSUAGweL0SxByuW2E+FU+wXcM= -cloud.google.com/go/dataplex v1.3.0/go.mod h1:hQuRtDg+fCiFgC8j0zV222HvzFQdRd+SVX8gdmFcZzA= -cloud.google.com/go/dataplex v1.4.0/go.mod h1:X51GfLXEMVJ6UN47ESVqvlsRplbLhcsAt0kZCCKsU0A= -cloud.google.com/go/dataplex v1.5.2/go.mod h1:cVMgQHsmfRoI5KFYq4JtIBEUbYwc3c7tXmIDhRmNNVQ= -cloud.google.com/go/dataplex v1.6.0/go.mod h1:bMsomC/aEJOSpHXdFKFGQ1b0TDPIeL28nJObeO1ppRs= -cloud.google.com/go/dataproc v1.7.0/go.mod h1:CKAlMjII9H90RXaMpSxQ8EU6dQx6iAYNPcYPOkSbi8s= -cloud.google.com/go/dataproc v1.8.0/go.mod h1:5OW+zNAH0pMpw14JVrPONsxMQYMBqJuzORhIBfBn9uI= -cloud.google.com/go/dataproc v1.12.0/go.mod h1:zrF3aX0uV3ikkMz6z4uBbIKyhRITnxvr4i3IjKsKrw4= -cloud.google.com/go/dataqna v0.5.0/go.mod h1:90Hyk596ft3zUQ8NkFfvICSIfHFh1Bc7C4cK3vbhkeo= -cloud.google.com/go/dataqna v0.6.0/go.mod h1:1lqNpM7rqNLVgWBJyk5NF6Uen2PHym0jtVJonplVsDA= -cloud.google.com/go/dataqna v0.7.0/go.mod h1:Lx9OcIIeqCrw1a6KdO3/5KMP1wAmTc0slZWwP12Qq3c= -cloud.google.com/go/datastore v1.0.0/go.mod h1:LXYbyblFSglQ5pkeyhO+Qmw7ukd3C+pD7TKLgZqpHYE= -cloud.google.com/go/datastore v1.1.0/go.mod h1:umbIZjpQpHh4hmRpGhH4tLFup+FVzqBi1b3c64qFpCk= -cloud.google.com/go/datastore v1.10.0/go.mod h1:PC5UzAmDEkAmkfaknstTYbNpgE49HAgW2J1gcgUfmdM= -cloud.google.com/go/datastore v1.11.0/go.mod h1:TvGxBIHCS50u8jzG+AW/ppf87v1of8nwzFNgEZU1D3c= -cloud.google.com/go/datastream v1.2.0/go.mod h1:i/uTP8/fZwgATHS/XFu0TcNUhuA0twZxxQ3EyCUQMwo= -cloud.google.com/go/datastream v1.3.0/go.mod h1:cqlOX8xlyYF/uxhiKn6Hbv6WjwPPuI9W2M9SAXwaLLQ= -cloud.google.com/go/datastream v1.4.0/go.mod h1:h9dpzScPhDTs5noEMQVWP8Wx8AFBRyS0s8KWPx/9r0g= -cloud.google.com/go/datastream v1.5.0/go.mod h1:6TZMMNPwjUqZHBKPQ1wwXpb0d5VDVPl2/XoS5yi88q4= -cloud.google.com/go/datastream v1.6.0/go.mod h1:6LQSuswqLa7S4rPAOZFVjHIG3wJIjZcZrw8JDEDJuIs= -cloud.google.com/go/datastream v1.7.0/go.mod h1:uxVRMm2elUSPuh65IbZpzJNMbuzkcvu5CjMqVIUHrww= -cloud.google.com/go/deploy v1.4.0/go.mod h1:5Xghikd4VrmMLNaF6FiRFDlHb59VM59YoDQnOUdsH/c= -cloud.google.com/go/deploy v1.5.0/go.mod h1:ffgdD0B89tToyW/U/D2eL0jN2+IEV/3EMuXHA0l4r+s= -cloud.google.com/go/deploy v1.6.0/go.mod h1:f9PTHehG/DjCom3QH0cntOVRm93uGBDt2vKzAPwpXQI= -cloud.google.com/go/deploy v1.8.0/go.mod h1:z3myEJnA/2wnB4sgjqdMfgxCA0EqC3RBTNcVPs93mtQ= -cloud.google.com/go/dialogflow v1.15.0/go.mod h1:HbHDWs33WOGJgn6rfzBW1Kv807BE3O1+xGbn59zZWI4= -cloud.google.com/go/dialogflow v1.16.1/go.mod h1:po6LlzGfK+smoSmTBnbkIZY2w8ffjz/RcGSS+sh1el0= -cloud.google.com/go/dialogflow v1.17.0/go.mod h1:YNP09C/kXA1aZdBgC/VtXX74G/TKn7XVCcVumTflA+8= -cloud.google.com/go/dialogflow v1.18.0/go.mod h1:trO7Zu5YdyEuR+BhSNOqJezyFQ3aUzz0njv7sMx/iek= -cloud.google.com/go/dialogflow v1.19.0/go.mod h1:JVmlG1TwykZDtxtTXujec4tQ+D8SBFMoosgy+6Gn0s0= -cloud.google.com/go/dialogflow v1.29.0/go.mod h1:b+2bzMe+k1s9V+F2jbJwpHPzrnIyHihAdRFMtn2WXuM= -cloud.google.com/go/dialogflow v1.31.0/go.mod h1:cuoUccuL1Z+HADhyIA7dci3N5zUssgpBJmCzI6fNRB4= -cloud.google.com/go/dialogflow v1.32.0/go.mod h1:jG9TRJl8CKrDhMEcvfcfFkkpp8ZhgPz3sBGmAUYJ2qE= -cloud.google.com/go/dlp v1.6.0/go.mod h1:9eyB2xIhpU0sVwUixfBubDoRwP+GjeUoxxeueZmqvmM= -cloud.google.com/go/dlp v1.7.0/go.mod h1:68ak9vCiMBjbasxeVD17hVPxDEck+ExiHavX8kiHG+Q= -cloud.google.com/go/dlp v1.9.0/go.mod h1:qdgmqgTyReTz5/YNSSuueR8pl7hO0o9bQ39ZhtgkWp4= -cloud.google.com/go/documentai v1.7.0/go.mod h1:lJvftZB5NRiFSX4moiye1SMxHx0Bc3x1+p9e/RfXYiU= -cloud.google.com/go/documentai v1.8.0/go.mod h1:xGHNEB7CtsnySCNrCFdCyyMz44RhFEEX2Q7UD0c5IhU= -cloud.google.com/go/documentai v1.9.0/go.mod h1:FS5485S8R00U10GhgBC0aNGrJxBP8ZVpEeJ7PQDZd6k= -cloud.google.com/go/documentai v1.10.0/go.mod h1:vod47hKQIPeCfN2QS/jULIvQTugbmdc0ZvxxfQY1bg4= -cloud.google.com/go/documentai v1.16.0/go.mod h1:o0o0DLTEZ+YnJZ+J4wNfTxmDVyrkzFvttBXXtYRMHkM= -cloud.google.com/go/documentai v1.18.0/go.mod h1:F6CK6iUH8J81FehpskRmhLq/3VlwQvb7TvwOceQ2tbs= -cloud.google.com/go/domains v0.6.0/go.mod h1:T9Rz3GasrpYk6mEGHh4rymIhjlnIuB4ofT1wTxDeT4Y= -cloud.google.com/go/domains v0.7.0/go.mod h1:PtZeqS1xjnXuRPKE/88Iru/LdfoRyEHYA9nFQf4UKpg= -cloud.google.com/go/domains v0.8.0/go.mod h1:M9i3MMDzGFXsydri9/vW+EWz9sWb4I6WyHqdlAk0idE= -cloud.google.com/go/edgecontainer v0.1.0/go.mod h1:WgkZ9tp10bFxqO8BLPqv2LlfmQF1X8lZqwW4r1BTajk= -cloud.google.com/go/edgecontainer v0.2.0/go.mod h1:RTmLijy+lGpQ7BXuTDa4C4ssxyXT34NIuHIgKuP4s5w= -cloud.google.com/go/edgecontainer v0.3.0/go.mod h1:FLDpP4nykgwwIfcLt6zInhprzw0lEi2P1fjO6Ie0qbc= -cloud.google.com/go/edgecontainer v1.0.0/go.mod h1:cttArqZpBB2q58W/upSG++ooo6EsblxDIolxa3jSjbY= -cloud.google.com/go/errorreporting v0.3.0/go.mod h1:xsP2yaAp+OAW4OIm60An2bbLpqIhKXdWR/tawvl7QzU= -cloud.google.com/go/essentialcontacts v1.3.0/go.mod h1:r+OnHa5jfj90qIfZDO/VztSFqbQan7HV75p8sA+mdGI= -cloud.google.com/go/essentialcontacts v1.4.0/go.mod h1:8tRldvHYsmnBCHdFpvU+GL75oWiBKl80BiqlFh9tp+8= -cloud.google.com/go/essentialcontacts v1.5.0/go.mod h1:ay29Z4zODTuwliK7SnX8E86aUF2CTzdNtvv42niCX0M= -cloud.google.com/go/eventarc v1.7.0/go.mod h1:6ctpF3zTnaQCxUjHUdcfgcA1A2T309+omHZth7gDfmc= -cloud.google.com/go/eventarc v1.8.0/go.mod h1:imbzxkyAU4ubfsaKYdQg04WS1NvncblHEup4kvF+4gw= -cloud.google.com/go/eventarc v1.10.0/go.mod h1:u3R35tmZ9HvswGRBnF48IlYgYeBcPUCjkr4BTdem2Kw= -cloud.google.com/go/eventarc v1.11.0/go.mod h1:PyUjsUKPWoRBCHeOxZd/lbOOjahV41icXyUY5kSTvVY= -cloud.google.com/go/filestore v1.3.0/go.mod h1:+qbvHGvXU1HaKX2nD0WEPo92TP/8AQuCVEBXNY9z0+w= -cloud.google.com/go/filestore v1.4.0/go.mod h1:PaG5oDfo9r224f8OYXURtAsY+Fbyq/bLYoINEK8XQAI= -cloud.google.com/go/filestore v1.5.0/go.mod h1:FqBXDWBp4YLHqRnVGveOkHDf8svj9r5+mUDLupOWEDs= -cloud.google.com/go/filestore v1.6.0/go.mod h1:di5unNuss/qfZTw2U9nhFqo8/ZDSc466dre85Kydllg= -cloud.google.com/go/firestore v1.1.0/go.mod h1:ulACoGHTpvq5r8rxGJ4ddJZBZqakUQqClKRT5SZwBmk= -cloud.google.com/go/firestore v1.9.0/go.mod h1:HMkjKHNTtRyZNiMzu7YAsLr9K3X2udY2AMwDaMEQiiE= -cloud.google.com/go/functions v1.6.0/go.mod h1:3H1UA3qiIPRWD7PeZKLvHZ9SaQhR26XIJcC0A5GbvAk= -cloud.google.com/go/functions v1.7.0/go.mod h1:+d+QBcWM+RsrgZfV9xo6KfA1GlzJfxcfZcRPEhDDfzg= -cloud.google.com/go/functions v1.8.0/go.mod h1:RTZ4/HsQjIqIYP9a9YPbU+QFoQsAlYgrwOXJWHn1POY= -cloud.google.com/go/functions v1.9.0/go.mod h1:Y+Dz8yGguzO3PpIjhLTbnqV1CWmgQ5UwtlpzoyquQ08= -cloud.google.com/go/functions v1.10.0/go.mod h1:0D3hEOe3DbEvCXtYOZHQZmD+SzYsi1YbI7dGvHfldXw= -cloud.google.com/go/functions v1.12.0/go.mod h1:AXWGrF3e2C/5ehvwYo/GH6O5s09tOPksiKhz+hH8WkA= -cloud.google.com/go/functions v1.13.0/go.mod h1:EU4O007sQm6Ef/PwRsI8N2umygGqPBS/IZQKBQBcJ3c= -cloud.google.com/go/gaming v1.5.0/go.mod h1:ol7rGcxP/qHTRQE/RO4bxkXq+Fix0j6D4LFPzYTIrDM= -cloud.google.com/go/gaming v1.6.0/go.mod h1:YMU1GEvA39Qt3zWGyAVA9bpYz/yAhTvaQ1t2sK4KPUA= -cloud.google.com/go/gaming v1.7.0/go.mod h1:LrB8U7MHdGgFG851iHAfqUdLcKBdQ55hzXy9xBJz0+w= -cloud.google.com/go/gaming v1.8.0/go.mod h1:xAqjS8b7jAVW0KFYeRUxngo9My3f33kFmua++Pi+ggM= -cloud.google.com/go/gaming v1.9.0/go.mod h1:Fc7kEmCObylSWLO334NcO+O9QMDyz+TKC4v1D7X+Bc0= -cloud.google.com/go/gkebackup v0.2.0/go.mod h1:XKvv/4LfG829/B8B7xRkk8zRrOEbKtEam6yNfuQNH60= -cloud.google.com/go/gkebackup v0.3.0/go.mod h1:n/E671i1aOQvUxT541aTkCwExO/bTer2HDlj4TsBRAo= -cloud.google.com/go/gkebackup v0.4.0/go.mod h1:byAyBGUwYGEEww7xsbnUTBHIYcOPy/PgUWUtOeRm9Vg= -cloud.google.com/go/gkeconnect v0.5.0/go.mod h1:c5lsNAg5EwAy7fkqX/+goqFsU1Da/jQFqArp+wGNr/o= -cloud.google.com/go/gkeconnect v0.6.0/go.mod h1:Mln67KyU/sHJEBY8kFZ0xTeyPtzbq9StAVvEULYK16A= -cloud.google.com/go/gkeconnect v0.7.0/go.mod h1:SNfmVqPkaEi3bF/B3CNZOAYPYdg7sU+obZ+QTky2Myw= -cloud.google.com/go/gkehub v0.9.0/go.mod h1:WYHN6WG8w9bXU0hqNxt8rm5uxnk8IH+lPY9J2TV7BK0= -cloud.google.com/go/gkehub v0.10.0/go.mod h1:UIPwxI0DsrpsVoWpLB0stwKCP+WFVG9+y977wO+hBH0= -cloud.google.com/go/gkehub v0.11.0/go.mod h1:JOWHlmN+GHyIbuWQPl47/C2RFhnFKH38jH9Ascu3n0E= -cloud.google.com/go/gkehub v0.12.0/go.mod h1:djiIwwzTTBrF5NaXCGv3mf7klpEMcST17VBTVVDcuaw= -cloud.google.com/go/gkemulticloud v0.3.0/go.mod h1:7orzy7O0S+5kq95e4Hpn7RysVA7dPs8W/GgfUtsPbrA= -cloud.google.com/go/gkemulticloud v0.4.0/go.mod h1:E9gxVBnseLWCk24ch+P9+B2CoDFJZTyIgLKSalC7tuI= -cloud.google.com/go/gkemulticloud v0.5.0/go.mod h1:W0JDkiyi3Tqh0TJr//y19wyb1yf8llHVto2Htf2Ja3Y= -cloud.google.com/go/grafeas v0.2.0/go.mod h1:KhxgtF2hb0P191HlY5besjYm6MqTSTj3LSI+M+ByZHc= -cloud.google.com/go/gsuiteaddons v1.3.0/go.mod h1:EUNK/J1lZEZO8yPtykKxLXI6JSVN2rg9bN8SXOa0bgM= -cloud.google.com/go/gsuiteaddons v1.4.0/go.mod h1:rZK5I8hht7u7HxFQcFei0+AtfS9uSushomRlg+3ua1o= -cloud.google.com/go/gsuiteaddons v1.5.0/go.mod h1:TFCClYLd64Eaa12sFVmUyG62tk4mdIsI7pAnSXRkcFo= -cloud.google.com/go/iam v0.1.0/go.mod h1:vcUNEa0pEm0qRVpmWepWaFMIAI8/hjB9mO8rNCJtF6c= -cloud.google.com/go/iam v0.3.0/go.mod h1:XzJPvDayI+9zsASAFO68Hk07u3z+f+JrT2xXNdp4bnY= -cloud.google.com/go/iam v0.5.0/go.mod h1:wPU9Vt0P4UmCux7mqtRu6jcpPAb74cP1fh50J3QpkUc= -cloud.google.com/go/iam v0.6.0/go.mod h1:+1AH33ueBne5MzYccyMHtEKqLE4/kJOibtffMHDMFMc= -cloud.google.com/go/iam v0.7.0/go.mod h1:H5Br8wRaDGNc8XP3keLc4unfUUZeyH3Sfl9XpQEYOeg= -cloud.google.com/go/iam v0.8.0/go.mod h1:lga0/y3iH6CX7sYqypWJ33hf7kkfXJag67naqGESjkE= -cloud.google.com/go/iam v0.11.0/go.mod h1:9PiLDanza5D+oWFZiH1uG+RnRCfEGKoyl6yo4cgWZGY= -cloud.google.com/go/iam v0.12.0/go.mod h1:knyHGviacl11zrtZUoDuYpDgLjvr28sLQaG0YB2GYAY= -cloud.google.com/go/iam v0.13.0/go.mod h1:ljOg+rcNfzZ5d6f1nAUJ8ZIxOaZUVoS14bKCtaLZ/D0= cloud.google.com/go/iam v1.1.5 h1:1jTsCu4bcsNsE4iiqNT5SHwrDRCfRmIaaaVFhRveTJI= cloud.google.com/go/iam v1.1.5/go.mod h1:rB6P/Ic3mykPbFio+vo7403drjlgvoWfYpJhMXEbzv8= -cloud.google.com/go/iap v1.4.0/go.mod h1:RGFwRJdihTINIe4wZ2iCP0zF/qu18ZwyKxrhMhygBEc= -cloud.google.com/go/iap v1.5.0/go.mod h1:UH/CGgKd4KyohZL5Pt0jSKE4m3FR51qg6FKQ/z/Ix9A= -cloud.google.com/go/iap v1.6.0/go.mod h1:NSuvI9C/j7UdjGjIde7t7HBz+QTwBcapPE07+sSRcLk= -cloud.google.com/go/iap v1.7.0/go.mod h1:beqQx56T9O1G1yNPph+spKpNibDlYIiIixiqsQXxLIo= -cloud.google.com/go/iap v1.7.1/go.mod h1:WapEwPc7ZxGt2jFGB/C/bm+hP0Y6NXzOYGjpPnmMS74= -cloud.google.com/go/ids v1.1.0/go.mod h1:WIuwCaYVOzHIj2OhN9HAwvW+DBdmUAdcWlFxRl+KubM= -cloud.google.com/go/ids v1.2.0/go.mod h1:5WXvp4n25S0rA/mQWAg1YEEBBq6/s+7ml1RDCW1IrcY= -cloud.google.com/go/ids v1.3.0/go.mod h1:JBdTYwANikFKaDP6LtW5JAi4gubs57SVNQjemdt6xV4= -cloud.google.com/go/iot v1.3.0/go.mod h1:r7RGh2B61+B8oz0AGE+J72AhA0G7tdXItODWsaA2oLs= -cloud.google.com/go/iot v1.4.0/go.mod h1:dIDxPOn0UvNDUMD8Ger7FIaTuvMkj+aGk94RPP0iV+g= -cloud.google.com/go/iot v1.5.0/go.mod h1:mpz5259PDl3XJthEmh9+ap0affn/MqNSP4My77Qql9o= -cloud.google.com/go/iot v1.6.0/go.mod h1:IqdAsmE2cTYYNO1Fvjfzo9po179rAtJeVGUvkLN3rLE= -cloud.google.com/go/kms v1.4.0/go.mod h1:fajBHndQ+6ubNw6Ss2sSd+SWvjL26RNo/dr7uxsnnOA= -cloud.google.com/go/kms v1.5.0/go.mod h1:QJS2YY0eJGBg3mnDfuaCyLauWwBJiHRboYxJ++1xJNg= -cloud.google.com/go/kms v1.6.0/go.mod h1:Jjy850yySiasBUDi6KFUwUv2n1+o7QZFyuUJg6OgjA0= -cloud.google.com/go/kms v1.8.0/go.mod h1:4xFEhYFqvW+4VMELtZyxomGSYtSQKzM178ylFW4jMAg= -cloud.google.com/go/kms v1.9.0/go.mod h1:qb1tPTgfF9RQP8e1wq4cLFErVuTJv7UsSC915J8dh3w= -cloud.google.com/go/kms v1.10.0/go.mod h1:ng3KTUtQQU9bPX3+QGLsflZIHlkbn8amFAMY63m8d24= -cloud.google.com/go/kms v1.10.1/go.mod h1:rIWk/TryCkR59GMC3YtHtXeLzd634lBbKenvyySAyYI= -cloud.google.com/go/language v1.4.0/go.mod h1:F9dRpNFQmJbkaop6g0JhSBXCNlO90e1KWx5iDdxbWic= -cloud.google.com/go/language v1.6.0/go.mod h1:6dJ8t3B+lUYfStgls25GusK04NLh3eDLQnWM3mdEbhI= -cloud.google.com/go/language v1.7.0/go.mod h1:DJ6dYN/W+SQOjF8e1hLQXMF21AkH2w9wiPzPCJa2MIE= -cloud.google.com/go/language v1.8.0/go.mod h1:qYPVHf7SPoNNiCL2Dr0FfEFNil1qi3pQEyygwpgVKB8= -cloud.google.com/go/language v1.9.0/go.mod h1:Ns15WooPM5Ad/5no/0n81yUetis74g3zrbeJBE+ptUY= -cloud.google.com/go/lifesciences v0.5.0/go.mod h1:3oIKy8ycWGPUyZDR/8RNnTOYevhaMLqh5vLUXs9zvT8= -cloud.google.com/go/lifesciences v0.6.0/go.mod h1:ddj6tSX/7BOnhxCSd3ZcETvtNr8NZ6t/iPhY2Tyfu08= -cloud.google.com/go/lifesciences v0.8.0/go.mod h1:lFxiEOMqII6XggGbOnKiyZ7IBwoIqA84ClvoezaA/bo= -cloud.google.com/go/logging v1.6.1/go.mod h1:5ZO0mHHbvm8gEmeEUHrmDlTDSu5imF6MUP9OfilNXBw= -cloud.google.com/go/logging v1.7.0/go.mod h1:3xjP2CjkM3ZkO73aj4ASA5wRPGGCRrPIAeNqVNkzY8M= -cloud.google.com/go/longrunning v0.1.1/go.mod h1:UUFxuDWkv22EuY93jjmDMFT5GPQKeFVJBIF6QlTqdsE= -cloud.google.com/go/longrunning v0.3.0/go.mod h1:qth9Y41RRSUE69rDcOn6DdK3HfQfsUI0YSmW3iIlLJc= -cloud.google.com/go/longrunning v0.4.1/go.mod h1:4iWDqhBZ70CvZ6BfETbvam3T8FMvLK+eFj0E6AaRQTo= cloud.google.com/go/longrunning v0.5.4 h1:w8xEcbZodnA2BbW6sVirkkoC+1gP8wS57EUUgGS0GVg= cloud.google.com/go/longrunning v0.5.4/go.mod h1:zqNVncI0BOP8ST6XQD1+VcvuShMmq7+xFSzOL++V0dI= -cloud.google.com/go/managedidentities v1.3.0/go.mod h1:UzlW3cBOiPrzucO5qWkNkh0w33KFtBJU281hacNvsdE= -cloud.google.com/go/managedidentities v1.4.0/go.mod h1:NWSBYbEMgqmbZsLIyKvxrYbtqOsxY1ZrGM+9RgDqInM= -cloud.google.com/go/managedidentities v1.5.0/go.mod h1:+dWcZ0JlUmpuxpIDfyP5pP5y0bLdRwOS4Lp7gMni/LA= -cloud.google.com/go/maps v0.1.0/go.mod h1:BQM97WGyfw9FWEmQMpZ5T6cpovXXSd1cGmFma94eubI= -cloud.google.com/go/maps v0.6.0/go.mod h1:o6DAMMfb+aINHz/p/jbcY+mYeXBoZoxTfdSQ8VAJaCw= -cloud.google.com/go/maps v0.7.0/go.mod h1:3GnvVl3cqeSvgMcpRlQidXsPYuDGQ8naBis7MVzpXsY= -cloud.google.com/go/mediatranslation v0.5.0/go.mod h1:jGPUhGTybqsPQn91pNXw0xVHfuJ3leR1wj37oU3y1f4= -cloud.google.com/go/mediatranslation v0.6.0/go.mod h1:hHdBCTYNigsBxshbznuIMFNe5QXEowAuNmmC7h8pu5w= -cloud.google.com/go/mediatranslation v0.7.0/go.mod h1:LCnB/gZr90ONOIQLgSXagp8XUW1ODs2UmUMvcgMfI2I= -cloud.google.com/go/memcache v1.4.0/go.mod h1:rTOfiGZtJX1AaFUrOgsMHX5kAzaTQ8azHiuDoTPzNsE= -cloud.google.com/go/memcache v1.5.0/go.mod h1:dk3fCK7dVo0cUU2c36jKb4VqKPS22BTkf81Xq617aWM= -cloud.google.com/go/memcache v1.6.0/go.mod h1:XS5xB0eQZdHtTuTF9Hf8eJkKtR3pVRCcvJwtm68T3rA= -cloud.google.com/go/memcache v1.7.0/go.mod h1:ywMKfjWhNtkQTxrWxCkCFkoPjLHPW6A7WOTVI8xy3LY= -cloud.google.com/go/memcache v1.9.0/go.mod h1:8oEyzXCu+zo9RzlEaEjHl4KkgjlNDaXbCQeQWlzNFJM= -cloud.google.com/go/metastore v1.5.0/go.mod h1:2ZNrDcQwghfdtCwJ33nM0+GrBGlVuh8rakL3vdPY3XY= -cloud.google.com/go/metastore v1.6.0/go.mod h1:6cyQTls8CWXzk45G55x57DVQ9gWg7RiH65+YgPsNh9s= -cloud.google.com/go/metastore v1.7.0/go.mod h1:s45D0B4IlsINu87/AsWiEVYbLaIMeUSoxlKKDqBGFS8= -cloud.google.com/go/metastore v1.8.0/go.mod h1:zHiMc4ZUpBiM7twCIFQmJ9JMEkDSyZS9U12uf7wHqSI= -cloud.google.com/go/metastore v1.10.0/go.mod h1:fPEnH3g4JJAk+gMRnrAnoqyv2lpUCqJPWOodSaf45Eo= -cloud.google.com/go/monitoring v1.7.0/go.mod h1:HpYse6kkGo//7p6sT0wsIC6IBDET0RhIsnmlA53dvEk= -cloud.google.com/go/monitoring v1.8.0/go.mod h1:E7PtoMJ1kQXWxPjB6mv2fhC5/15jInuulFdYYtlcvT4= -cloud.google.com/go/monitoring v1.12.0/go.mod h1:yx8Jj2fZNEkL/GYZyTLS4ZtZEZN8WtDEiEqG4kLK50w= -cloud.google.com/go/monitoring v1.13.0/go.mod h1:k2yMBAB1H9JT/QETjNkgdCGD9bPF712XiLTVr+cBrpw= -cloud.google.com/go/networkconnectivity v1.4.0/go.mod h1:nOl7YL8odKyAOtzNX73/M5/mGZgqqMeryi6UPZTk/rA= -cloud.google.com/go/networkconnectivity v1.5.0/go.mod h1:3GzqJx7uhtlM3kln0+x5wyFvuVH1pIBJjhCpjzSt75o= -cloud.google.com/go/networkconnectivity v1.6.0/go.mod h1:OJOoEXW+0LAxHh89nXd64uGG+FbQoeH8DtxCHVOMlaM= -cloud.google.com/go/networkconnectivity v1.7.0/go.mod h1:RMuSbkdbPwNMQjB5HBWD5MpTBnNm39iAVpC3TmsExt8= -cloud.google.com/go/networkconnectivity v1.10.0/go.mod h1:UP4O4sWXJG13AqrTdQCD9TnLGEbtNRqjuaaA7bNjF5E= -cloud.google.com/go/networkconnectivity v1.11.0/go.mod h1:iWmDD4QF16VCDLXUqvyspJjIEtBR/4zq5hwnY2X3scM= -cloud.google.com/go/networkmanagement v1.4.0/go.mod h1:Q9mdLLRn60AsOrPc8rs8iNV6OHXaGcDdsIQe1ohekq8= -cloud.google.com/go/networkmanagement v1.5.0/go.mod h1:ZnOeZ/evzUdUsnvRt792H0uYEnHQEMaz+REhhzJRcf4= -cloud.google.com/go/networkmanagement v1.6.0/go.mod h1:5pKPqyXjB/sgtvB5xqOemumoQNB7y95Q7S+4rjSOPYY= -cloud.google.com/go/networksecurity v0.5.0/go.mod h1:xS6fOCoqpVC5zx15Z/MqkfDwH4+m/61A3ODiDV1xmiQ= -cloud.google.com/go/networksecurity v0.6.0/go.mod h1:Q5fjhTr9WMI5mbpRYEbiexTzROf7ZbDzvzCrNl14nyU= -cloud.google.com/go/networksecurity v0.7.0/go.mod h1:mAnzoxx/8TBSyXEeESMy9OOYwo1v+gZ5eMRnsT5bC8k= -cloud.google.com/go/networksecurity v0.8.0/go.mod h1:B78DkqsxFG5zRSVuwYFRZ9Xz8IcQ5iECsNrPn74hKHU= -cloud.google.com/go/notebooks v1.2.0/go.mod h1:9+wtppMfVPUeJ8fIWPOq1UnATHISkGXGqTkxeieQ6UY= -cloud.google.com/go/notebooks v1.3.0/go.mod h1:bFR5lj07DtCPC7YAAJ//vHskFBxA5JzYlH68kXVdk34= -cloud.google.com/go/notebooks v1.4.0/go.mod h1:4QPMngcwmgb6uw7Po99B2xv5ufVoIQ7nOGDyL4P8AgA= -cloud.google.com/go/notebooks v1.5.0/go.mod h1:q8mwhnP9aR8Hpfnrc5iN5IBhrXUy8S2vuYs+kBJ/gu0= -cloud.google.com/go/notebooks v1.7.0/go.mod h1:PVlaDGfJgj1fl1S3dUwhFMXFgfYGhYQt2164xOMONmE= -cloud.google.com/go/notebooks v1.8.0/go.mod h1:Lq6dYKOYOWUCTvw5t2q1gp1lAp0zxAxRycayS0iJcqQ= -cloud.google.com/go/optimization v1.1.0/go.mod h1:5po+wfvX5AQlPznyVEZjGJTMr4+CAkJf2XSTQOOl9l4= -cloud.google.com/go/optimization v1.2.0/go.mod h1:Lr7SOHdRDENsh+WXVmQhQTrzdu9ybg0NecjHidBq6xs= -cloud.google.com/go/optimization v1.3.1/go.mod h1:IvUSefKiwd1a5p0RgHDbWCIbDFgKuEdB+fPPuP0IDLI= -cloud.google.com/go/orchestration v1.3.0/go.mod h1:Sj5tq/JpWiB//X/q3Ngwdl5K7B7Y0KZ7bfv0wL6fqVA= -cloud.google.com/go/orchestration v1.4.0/go.mod h1:6W5NLFWs2TlniBphAViZEVhrXRSMgUGDfW7vrWKvsBk= -cloud.google.com/go/orchestration v1.6.0/go.mod h1:M62Bevp7pkxStDfFfTuCOaXgaaqRAga1yKyoMtEoWPQ= -cloud.google.com/go/orgpolicy v1.4.0/go.mod h1:xrSLIV4RePWmP9P3tBl8S93lTmlAxjm06NSm2UTmKvE= -cloud.google.com/go/orgpolicy v1.5.0/go.mod h1:hZEc5q3wzwXJaKrsx5+Ewg0u1LxJ51nNFlext7Tanwc= -cloud.google.com/go/orgpolicy v1.10.0/go.mod h1:w1fo8b7rRqlXlIJbVhOMPrwVljyuW5mqssvBtU18ONc= -cloud.google.com/go/osconfig v1.7.0/go.mod h1:oVHeCeZELfJP7XLxcBGTMBvRO+1nQ5tFG9VQTmYS2Fs= -cloud.google.com/go/osconfig v1.8.0/go.mod h1:EQqZLu5w5XA7eKizepumcvWx+m8mJUhEwiPqWiZeEdg= -cloud.google.com/go/osconfig v1.9.0/go.mod h1:Yx+IeIZJ3bdWmzbQU4fxNl8xsZ4amB+dygAwFPlvnNo= -cloud.google.com/go/osconfig v1.10.0/go.mod h1:uMhCzqC5I8zfD9zDEAfvgVhDS8oIjySWh+l4WK6GnWw= -cloud.google.com/go/osconfig v1.11.0/go.mod h1:aDICxrur2ogRd9zY5ytBLV89KEgT2MKB2L/n6x1ooPw= -cloud.google.com/go/oslogin v1.4.0/go.mod h1:YdgMXWRaElXz/lDk1Na6Fh5orF7gvmJ0FGLIs9LId4E= -cloud.google.com/go/oslogin v1.5.0/go.mod h1:D260Qj11W2qx/HVF29zBg+0fd6YCSjSqLUkY/qEenQU= -cloud.google.com/go/oslogin v1.6.0/go.mod h1:zOJ1O3+dTU8WPlGEkFSh7qeHPPSoxrcMbbK1Nm2iX70= -cloud.google.com/go/oslogin v1.7.0/go.mod h1:e04SN0xO1UNJ1M5GP0vzVBFicIe4O53FOfcixIqTyXo= -cloud.google.com/go/oslogin v1.9.0/go.mod h1:HNavntnH8nzrn8JCTT5fj18FuJLFJc4NaZJtBnQtKFs= -cloud.google.com/go/phishingprotection v0.5.0/go.mod h1:Y3HZknsK9bc9dMi+oE8Bim0lczMU6hrX0UpADuMefr0= -cloud.google.com/go/phishingprotection v0.6.0/go.mod h1:9Y3LBLgy0kDTcYET8ZH3bq/7qni15yVUoAxiFxnlSUA= -cloud.google.com/go/phishingprotection v0.7.0/go.mod h1:8qJI4QKHoda/sb/7/YmMQ2omRLSLYSu9bU0EKCNI+Lk= -cloud.google.com/go/policytroubleshooter v1.3.0/go.mod h1:qy0+VwANja+kKrjlQuOzmlvscn4RNsAc0e15GGqfMxg= -cloud.google.com/go/policytroubleshooter v1.4.0/go.mod h1:DZT4BcRw3QoO8ota9xw/LKtPa8lKeCByYeKTIf/vxdE= -cloud.google.com/go/policytroubleshooter v1.5.0/go.mod h1:Rz1WfV+1oIpPdN2VvvuboLVRsB1Hclg3CKQ53j9l8vw= -cloud.google.com/go/policytroubleshooter v1.6.0/go.mod h1:zYqaPTsmfvpjm5ULxAyD/lINQxJ0DDsnWOP/GZ7xzBc= -cloud.google.com/go/privatecatalog v0.5.0/go.mod h1:XgosMUvvPyxDjAVNDYxJ7wBW8//hLDDYmnsNcMGq1K0= -cloud.google.com/go/privatecatalog v0.6.0/go.mod h1:i/fbkZR0hLN29eEWiiwue8Pb+GforiEIBnV9yrRUOKI= -cloud.google.com/go/privatecatalog v0.7.0/go.mod h1:2s5ssIFO69F5csTXcwBP7NPFTZvps26xGzvQ2PQaBYg= -cloud.google.com/go/privatecatalog v0.8.0/go.mod h1:nQ6pfaegeDAq/Q5lrfCQzQLhubPiZhSaNhIgfJlnIXs= -cloud.google.com/go/pubsub v1.0.1/go.mod h1:R0Gpsv3s54REJCy4fxDixWD93lHJMoZTyQ2kNxGRt3I= -cloud.google.com/go/pubsub v1.1.0/go.mod h1:EwwdRX2sKPjnvnqCa270oGRyludottCI76h+R3AArQw= -cloud.google.com/go/pubsub v1.2.0/go.mod h1:jhfEVHT8odbXTkndysNHCcx0awwzvfOlguIAii9o8iA= -cloud.google.com/go/pubsub v1.3.1/go.mod h1:i+ucay31+CNRpDW4Lu78I4xXG+O1r/MAHgjpRVR+TSU= -cloud.google.com/go/pubsub v1.26.0/go.mod h1:QgBH3U/jdJy/ftjPhTkyXNj543Tin1pRYcdcPRnFIRI= -cloud.google.com/go/pubsub v1.27.1/go.mod h1:hQN39ymbV9geqBnfQq6Xf63yNhUAhv9CZhzp5O6qsW0= -cloud.google.com/go/pubsub v1.28.0/go.mod h1:vuXFpwaVoIPQMGXqRyUQigu/AX1S3IWugR9xznmcXX8= -cloud.google.com/go/pubsub v1.30.0/go.mod h1:qWi1OPS0B+b5L+Sg6Gmc9zD1Y+HaM0MdUr7LsupY1P4= -cloud.google.com/go/pubsublite v1.5.0/go.mod h1:xapqNQ1CuLfGi23Yda/9l4bBCKz/wC3KIJ5gKcxveZg= -cloud.google.com/go/pubsublite v1.6.0/go.mod h1:1eFCS0U11xlOuMFV/0iBqw3zP12kddMeCbj/F3FSj9k= -cloud.google.com/go/pubsublite v1.7.0/go.mod h1:8hVMwRXfDfvGm3fahVbtDbiLePT3gpoiJYJY+vxWxVM= -cloud.google.com/go/recaptchaenterprise v1.3.1/go.mod h1:OdD+q+y4XGeAlxRaMn1Y7/GveP6zmq76byL6tjPE7d4= -cloud.google.com/go/recaptchaenterprise/v2 v2.1.0/go.mod h1:w9yVqajwroDNTfGuhmOjPDN//rZGySaf6PtFVcSCa7o= -cloud.google.com/go/recaptchaenterprise/v2 v2.2.0/go.mod h1:/Zu5jisWGeERrd5HnlS3EUGb/D335f9k51B/FVil0jk= -cloud.google.com/go/recaptchaenterprise/v2 v2.3.0/go.mod h1:O9LwGCjrhGHBQET5CA7dd5NwwNQUErSgEDit1DLNTdo= -cloud.google.com/go/recaptchaenterprise/v2 v2.4.0/go.mod h1:Am3LHfOuBstrLrNCBrlI5sbwx9LBg3te2N6hGvHn2mE= -cloud.google.com/go/recaptchaenterprise/v2 v2.5.0/go.mod h1:O8LzcHXN3rz0j+LBC91jrwI3R+1ZSZEWrfL7XHgNo9U= -cloud.google.com/go/recaptchaenterprise/v2 v2.6.0/go.mod h1:RPauz9jeLtB3JVzg6nCbe12qNoaa8pXc4d/YukAmcnA= -cloud.google.com/go/recaptchaenterprise/v2 v2.7.0/go.mod h1:19wVj/fs5RtYtynAPJdDTb69oW0vNHYDBTbB4NvMD9c= -cloud.google.com/go/recommendationengine v0.5.0/go.mod h1:E5756pJcVFeVgaQv3WNpImkFP8a+RptV6dDLGPILjvg= -cloud.google.com/go/recommendationengine v0.6.0/go.mod h1:08mq2umu9oIqc7tDy8sx+MNJdLG0fUi3vaSVbztHgJ4= -cloud.google.com/go/recommendationengine v0.7.0/go.mod h1:1reUcE3GIu6MeBz/h5xZJqNLuuVjNg1lmWMPyjatzac= -cloud.google.com/go/recommender v1.5.0/go.mod h1:jdoeiBIVrJe9gQjwd759ecLJbxCDED4A6p+mqoqDvTg= -cloud.google.com/go/recommender v1.6.0/go.mod h1:+yETpm25mcoiECKh9DEScGzIRyDKpZ0cEhWGo+8bo+c= -cloud.google.com/go/recommender v1.7.0/go.mod h1:XLHs/W+T8olwlGOgfQenXBTbIseGclClff6lhFVe9Bs= -cloud.google.com/go/recommender v1.8.0/go.mod h1:PkjXrTT05BFKwxaUxQmtIlrtj0kph108r02ZZQ5FE70= -cloud.google.com/go/recommender v1.9.0/go.mod h1:PnSsnZY7q+VL1uax2JWkt/UegHssxjUVVCrX52CuEmQ= -cloud.google.com/go/redis v1.7.0/go.mod h1:V3x5Jq1jzUcg+UNsRvdmsfuFnit1cfe3Z/PGyq/lm4Y= -cloud.google.com/go/redis v1.8.0/go.mod h1:Fm2szCDavWzBk2cDKxrkmWBqoCiL1+Ctwq7EyqBCA/A= -cloud.google.com/go/redis v1.9.0/go.mod h1:HMYQuajvb2D0LvMgZmLDZW8V5aOC/WxstZHiy4g8OiA= -cloud.google.com/go/redis v1.10.0/go.mod h1:ThJf3mMBQtW18JzGgh41/Wld6vnDDc/F/F35UolRZPM= -cloud.google.com/go/redis v1.11.0/go.mod h1:/X6eicana+BWcUda5PpwZC48o37SiFVTFSs0fWAJ7uQ= -cloud.google.com/go/resourcemanager v1.3.0/go.mod h1:bAtrTjZQFJkiWTPDb1WBjzvc6/kifjj4QBYuKCCoqKA= -cloud.google.com/go/resourcemanager v1.4.0/go.mod h1:MwxuzkumyTX7/a3n37gmsT3py7LIXwrShilPh3P1tR0= -cloud.google.com/go/resourcemanager v1.5.0/go.mod h1:eQoXNAiAvCf5PXxWxXjhKQoTMaUSNrEfg+6qdf/wots= -cloud.google.com/go/resourcemanager v1.6.0/go.mod h1:YcpXGRs8fDzcUl1Xw8uOVmI8JEadvhRIkoXXUNVYcVo= -cloud.google.com/go/resourcemanager v1.7.0/go.mod h1:HlD3m6+bwhzj9XCouqmeiGuni95NTrExfhoSrkC/3EI= cloud.google.com/go/resourcemanager v1.9.4 h1:JwZ7Ggle54XQ/FVYSBrMLOQIKoIT/uer8mmNvNLK51k= cloud.google.com/go/resourcemanager v1.9.4/go.mod h1:N1dhP9RFvo3lUfwtfLWVxfUWq8+KUQ+XLlHLH3BoFJ0= -cloud.google.com/go/resourcesettings v1.3.0/go.mod h1:lzew8VfESA5DQ8gdlHwMrqZs1S9V87v3oCnKCWoOuQU= -cloud.google.com/go/resourcesettings v1.4.0/go.mod h1:ldiH9IJpcrlC3VSuCGvjR5of/ezRrOxFtpJoJo5SmXg= -cloud.google.com/go/resourcesettings v1.5.0/go.mod h1:+xJF7QSG6undsQDfsCJyqWXyBwUoJLhetkRMDRnIoXA= -cloud.google.com/go/retail v1.8.0/go.mod h1:QblKS8waDmNUhghY2TI9O3JLlFk8jybHeV4BF19FrE4= -cloud.google.com/go/retail v1.9.0/go.mod h1:g6jb6mKuCS1QKnH/dpu7isX253absFl6iE92nHwlBUY= -cloud.google.com/go/retail v1.10.0/go.mod h1:2gDk9HsL4HMS4oZwz6daui2/jmKvqShXKQuB2RZ+cCc= -cloud.google.com/go/retail v1.11.0/go.mod h1:MBLk1NaWPmh6iVFSz9MeKG/Psyd7TAgm6y/9L2B4x9Y= -cloud.google.com/go/retail v1.12.0/go.mod h1:UMkelN/0Z8XvKymXFbD4EhFJlYKRx1FGhQkVPU5kF14= -cloud.google.com/go/run v0.2.0/go.mod h1:CNtKsTA1sDcnqqIFR3Pb5Tq0usWxJJvsWOCPldRU3Do= -cloud.google.com/go/run v0.3.0/go.mod h1:TuyY1+taHxTjrD0ZFk2iAR+xyOXEA0ztb7U3UNA0zBo= -cloud.google.com/go/run v0.8.0/go.mod h1:VniEnuBwqjigv0A7ONfQUaEItaiCRVujlMqerPPiktM= -cloud.google.com/go/run v0.9.0/go.mod h1:Wwu+/vvg8Y+JUApMwEDfVfhetv30hCG4ZwDR/IXl2Qg= -cloud.google.com/go/scheduler v1.4.0/go.mod h1:drcJBmxF3aqZJRhmkHQ9b3uSSpQoltBPGPxGAWROx6s= -cloud.google.com/go/scheduler v1.5.0/go.mod h1:ri073ym49NW3AfT6DZi21vLZrG07GXr5p3H1KxN5QlI= -cloud.google.com/go/scheduler v1.6.0/go.mod h1:SgeKVM7MIwPn3BqtcBntpLyrIJftQISRrYB5ZtT+KOk= -cloud.google.com/go/scheduler v1.7.0/go.mod h1:jyCiBqWW956uBjjPMMuX09n3x37mtyPJegEWKxRsn44= -cloud.google.com/go/scheduler v1.8.0/go.mod h1:TCET+Y5Gp1YgHT8py4nlg2Sew8nUHMqcpousDgXJVQc= -cloud.google.com/go/scheduler v1.9.0/go.mod h1:yexg5t+KSmqu+njTIh3b7oYPheFtBWGcbVUYF1GGMIc= -cloud.google.com/go/secretmanager v1.6.0/go.mod h1:awVa/OXF6IiyaU1wQ34inzQNc4ISIDIrId8qE5QGgKA= -cloud.google.com/go/secretmanager v1.8.0/go.mod h1:hnVgi/bN5MYHd3Gt0SPuTPPp5ENina1/LxM+2W9U9J4= -cloud.google.com/go/secretmanager v1.9.0/go.mod h1:b71qH2l1yHmWQHt9LC80akm86mX8AL6X1MA01dW8ht4= -cloud.google.com/go/secretmanager v1.10.0/go.mod h1:MfnrdvKMPNra9aZtQFvBcvRU54hbPD8/HayQdlUgJpU= -cloud.google.com/go/security v1.5.0/go.mod h1:lgxGdyOKKjHL4YG3/YwIL2zLqMFCKs0UbQwgyZmfJl4= -cloud.google.com/go/security v1.7.0/go.mod h1:mZklORHl6Bg7CNnnjLH//0UlAlaXqiG7Lb9PsPXLfD0= -cloud.google.com/go/security v1.8.0/go.mod h1:hAQOwgmaHhztFhiQ41CjDODdWP0+AE1B3sX4OFlq+GU= -cloud.google.com/go/security v1.9.0/go.mod h1:6Ta1bO8LXI89nZnmnsZGp9lVoVWXqsVbIq/t9dzI+2Q= -cloud.google.com/go/security v1.10.0/go.mod h1:QtOMZByJVlibUT2h9afNDWRZ1G96gVywH8T5GUSb9IA= -cloud.google.com/go/security v1.12.0/go.mod h1:rV6EhrpbNHrrxqlvW0BWAIawFWq3X90SduMJdFwtLB8= -cloud.google.com/go/security v1.13.0/go.mod h1:Q1Nvxl1PAgmeW0y3HTt54JYIvUdtcpYKVfIB8AOMZ+0= -cloud.google.com/go/securitycenter v1.13.0/go.mod h1:cv5qNAqjY84FCN6Y9z28WlkKXyWsgLO832YiWwkCWcU= -cloud.google.com/go/securitycenter v1.14.0/go.mod h1:gZLAhtyKv85n52XYWt6RmeBdydyxfPeTrpToDPw4Auc= -cloud.google.com/go/securitycenter v1.15.0/go.mod h1:PeKJ0t8MoFmmXLXWm41JidyzI3PJjd8sXWaVqg43WWk= -cloud.google.com/go/securitycenter v1.16.0/go.mod h1:Q9GMaLQFUD+5ZTabrbujNWLtSLZIZF7SAR0wWECrjdk= -cloud.google.com/go/securitycenter v1.18.1/go.mod h1:0/25gAzCM/9OL9vVx4ChPeM/+DlfGQJDwBy/UC8AKK0= -cloud.google.com/go/securitycenter v1.19.0/go.mod h1:LVLmSg8ZkkyaNy4u7HCIshAngSQ8EcIRREP3xBnyfag= -cloud.google.com/go/servicecontrol v1.4.0/go.mod h1:o0hUSJ1TXJAmi/7fLJAedOovnujSEvjKCAFNXPQ1RaU= -cloud.google.com/go/servicecontrol v1.5.0/go.mod h1:qM0CnXHhyqKVuiZnGKrIurvVImCs8gmqWsDoqe9sU1s= -cloud.google.com/go/servicecontrol v1.10.0/go.mod h1:pQvyvSRh7YzUF2efw7H87V92mxU8FnFDawMClGCNuAA= -cloud.google.com/go/servicecontrol v1.11.0/go.mod h1:kFmTzYzTUIuZs0ycVqRHNaNhgR+UMUpw9n02l/pY+mc= -cloud.google.com/go/servicecontrol v1.11.1/go.mod h1:aSnNNlwEFBY+PWGQ2DoM0JJ/QUXqV5/ZD9DOLB7SnUk= -cloud.google.com/go/servicedirectory v1.4.0/go.mod h1:gH1MUaZCgtP7qQiI+F+A+OpeKF/HQWgtAddhTbhL2bs= -cloud.google.com/go/servicedirectory v1.5.0/go.mod h1:QMKFL0NUySbpZJ1UZs3oFAmdvVxhhxB6eJ/Vlp73dfg= -cloud.google.com/go/servicedirectory v1.6.0/go.mod h1:pUlbnWsLH9c13yGkxCmfumWEPjsRs1RlmJ4pqiNjVL4= -cloud.google.com/go/servicedirectory v1.7.0/go.mod h1:5p/U5oyvgYGYejufvxhgwjL8UVXjkuw7q5XcG10wx1U= -cloud.google.com/go/servicedirectory v1.8.0/go.mod h1:srXodfhY1GFIPvltunswqXpVxFPpZjf8nkKQT7XcXaY= -cloud.google.com/go/servicedirectory v1.9.0/go.mod h1:29je5JjiygNYlmsGz8k6o+OZ8vd4f//bQLtvzkPPT/s= -cloud.google.com/go/servicemanagement v1.4.0/go.mod h1:d8t8MDbezI7Z2R1O/wu8oTggo3BI2GKYbdG4y/SJTco= -cloud.google.com/go/servicemanagement v1.5.0/go.mod h1:XGaCRe57kfqu4+lRxaFEAuqmjzF0r+gWHjWqKqBvKFo= -cloud.google.com/go/servicemanagement v1.6.0/go.mod h1:aWns7EeeCOtGEX4OvZUWCCJONRZeFKiptqKf1D0l/Jc= -cloud.google.com/go/servicemanagement v1.8.0/go.mod h1:MSS2TDlIEQD/fzsSGfCdJItQveu9NXnUniTrq/L8LK4= -cloud.google.com/go/serviceusage v1.3.0/go.mod h1:Hya1cozXM4SeSKTAgGXgj97GlqUvF5JaoXacR1JTP/E= -cloud.google.com/go/serviceusage v1.4.0/go.mod h1:SB4yxXSaYVuUBYUml6qklyONXNLt83U0Rb+CXyhjEeU= -cloud.google.com/go/serviceusage v1.5.0/go.mod h1:w8U1JvqUqwJNPEOTQjrMHkw3IaIFLoLsPLvsE3xueec= cloud.google.com/go/serviceusage v1.6.0 h1:rXyq+0+RSIm3HFypctp7WoXxIA563rn206CfMWdqXX4= cloud.google.com/go/serviceusage v1.6.0/go.mod h1:R5wwQcbOWsyuOfbP9tGdAnCAc6B9DRwPG1xtWMDeuPA= -cloud.google.com/go/shell v1.3.0/go.mod h1:VZ9HmRjZBsjLGXusm7K5Q5lzzByZmJHf1d0IWHEN5X4= -cloud.google.com/go/shell v1.4.0/go.mod h1:HDxPzZf3GkDdhExzD/gs8Grqk+dmYcEjGShZgYa9URw= -cloud.google.com/go/shell v1.6.0/go.mod h1:oHO8QACS90luWgxP3N9iZVuEiSF84zNyLytb+qE2f9A= -cloud.google.com/go/spanner v1.41.0/go.mod h1:MLYDBJR/dY4Wt7ZaMIQ7rXOTLjYrmxLE/5ve9vFfWos= -cloud.google.com/go/spanner v1.44.0/go.mod h1:G8XIgYdOK+Fbcpbs7p2fiprDw4CaZX63whnSMLVBxjk= -cloud.google.com/go/spanner v1.45.0/go.mod h1:FIws5LowYz8YAE1J8fOS7DJup8ff7xJeetWEo5REA2M= -cloud.google.com/go/speech v1.6.0/go.mod h1:79tcr4FHCimOp56lwC01xnt/WPJZc4v3gzyT7FoBkCM= -cloud.google.com/go/speech v1.7.0/go.mod h1:KptqL+BAQIhMsj1kOP2la5DSEEerPDuOP/2mmkhHhZQ= -cloud.google.com/go/speech v1.8.0/go.mod h1:9bYIl1/tjsAnMgKGHKmBZzXKEkGgtU+MpdDPTE9f7y0= -cloud.google.com/go/speech v1.9.0/go.mod h1:xQ0jTcmnRFFM2RfX/U+rk6FQNUF6DQlydUSyoooSpco= -cloud.google.com/go/speech v1.14.1/go.mod h1:gEosVRPJ9waG7zqqnsHpYTOoAS4KouMRLDFMekpJ0J0= -cloud.google.com/go/speech v1.15.0/go.mod h1:y6oH7GhqCaZANH7+Oe0BhgIogsNInLlz542tg3VqeYI= -cloud.google.com/go/storage v1.0.0/go.mod h1:IhtSnM/ZTZV8YYJWCY8RULGVqBDmpoyjwiyrjsg+URw= -cloud.google.com/go/storage v1.5.0/go.mod h1:tpKbwo567HUNpVclU5sGELwQWBDZ8gh0ZeosJ0Rtdos= -cloud.google.com/go/storage v1.6.0/go.mod h1:N7U0C8pVQ/+NIKOBQyamJIeKQKkZ+mxpohlUTyfDhBk= -cloud.google.com/go/storage v1.8.0/go.mod h1:Wv1Oy7z6Yz3DshWRJFhqM/UCfaWIRTdp0RXyy7KQOVs= -cloud.google.com/go/storage v1.10.0/go.mod h1:FLPqc6j+Ki4BU591ie1oL6qBQGu2Bl/tZ9ullr3+Kg0= -cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3fOKtUw0Xmo= -cloud.google.com/go/storage v1.22.1/go.mod h1:S8N1cAStu7BOeFfE8KAQzmyyLkK8p/vmRq6kuBTW58Y= -cloud.google.com/go/storage v1.23.0/go.mod h1:vOEEDNFnciUMhBeT6hsJIn3ieU5cFRmzeLgDvXzfIXc= -cloud.google.com/go/storage v1.27.0/go.mod h1:x9DOL8TK/ygDUMieqwfhdpQryTeEkhGKMi80i/iqR2s= -cloud.google.com/go/storage v1.28.1/go.mod h1:Qnisd4CqDdo6BGs2AD5LLnEsmSQ80wQ5ogcBBKhU86Y= -cloud.google.com/go/storage v1.29.0/go.mod h1:4puEjyTKnku6gfKoTfNOU/W+a9JyuVNxjpS5GBrB8h4= cloud.google.com/go/storage v1.35.1 h1:B59ahL//eDfx2IIKFBeT5Atm9wnNmj3+8xG/W4WB//w= cloud.google.com/go/storage v1.35.1/go.mod h1:M6M/3V/D3KpzMTJyPOR/HU6n2Si5QdaXYEsng2xgOs8= -cloud.google.com/go/storagetransfer v1.5.0/go.mod h1:dxNzUopWy7RQevYFHewchb29POFv3/AaBgnhqzqiK0w= -cloud.google.com/go/storagetransfer v1.6.0/go.mod h1:y77xm4CQV/ZhFZH75PLEXY0ROiS7Gh6pSKrM8dJyg6I= -cloud.google.com/go/storagetransfer v1.7.0/go.mod h1:8Giuj1QNb1kfLAiWM1bN6dHzfdlDAVC9rv9abHot2W4= -cloud.google.com/go/storagetransfer v1.8.0/go.mod h1:JpegsHHU1eXg7lMHkvf+KE5XDJ7EQu0GwNJbbVGanEw= -cloud.google.com/go/talent v1.1.0/go.mod h1:Vl4pt9jiHKvOgF9KoZo6Kob9oV4lwd/ZD5Cto54zDRw= -cloud.google.com/go/talent v1.2.0/go.mod h1:MoNF9bhFQbiJ6eFD3uSsg0uBALw4n4gaCaEjBw9zo8g= -cloud.google.com/go/talent v1.3.0/go.mod h1:CmcxwJ/PKfRgd1pBjQgU6W3YBwiewmUzQYH5HHmSCmM= -cloud.google.com/go/talent v1.4.0/go.mod h1:ezFtAgVuRf8jRsvyE6EwmbTK5LKciD4KVnHuDEFmOOA= -cloud.google.com/go/talent v1.5.0/go.mod h1:G+ODMj9bsasAEJkQSzO2uHQWXHHXUomArjWQQYkqK6c= -cloud.google.com/go/texttospeech v1.4.0/go.mod h1:FX8HQHA6sEpJ7rCMSfXuzBcysDAuWusNNNvN9FELDd8= -cloud.google.com/go/texttospeech v1.5.0/go.mod h1:oKPLhR4n4ZdQqWKURdwxMy0uiTS1xU161C8W57Wkea4= -cloud.google.com/go/texttospeech v1.6.0/go.mod h1:YmwmFT8pj1aBblQOI3TfKmwibnsfvhIBzPXcW4EBovc= -cloud.google.com/go/tpu v1.3.0/go.mod h1:aJIManG0o20tfDQlRIej44FcwGGl/cD0oiRyMKG19IQ= -cloud.google.com/go/tpu v1.4.0/go.mod h1:mjZaX8p0VBgllCzF6wcU2ovUXN9TONFLd7iz227X2Xg= -cloud.google.com/go/tpu v1.5.0/go.mod h1:8zVo1rYDFuW2l4yZVY0R0fb/v44xLh3llq7RuV61fPM= -cloud.google.com/go/trace v1.3.0/go.mod h1:FFUE83d9Ca57C+K8rDl/Ih8LwOzWIV1krKgxg6N0G28= -cloud.google.com/go/trace v1.4.0/go.mod h1:UG0v8UBqzusp+z63o7FK74SdFE+AXpCLdFb1rshXG+Y= -cloud.google.com/go/trace v1.8.0/go.mod h1:zH7vcsbAhklH8hWFig58HvxcxyQbaIqMarMg9hn5ECA= -cloud.google.com/go/trace v1.9.0/go.mod h1:lOQqpE5IaWY0Ixg7/r2SjixMuc6lfTFeO4QGM4dQWOk= -cloud.google.com/go/translate v1.3.0/go.mod h1:gzMUwRjvOqj5i69y/LYLd8RrNQk+hOmIXTi9+nb3Djs= -cloud.google.com/go/translate v1.4.0/go.mod h1:06Dn/ppvLD6WvA5Rhdp029IX2Mi3Mn7fpMRLPvXT5Wg= -cloud.google.com/go/translate v1.5.0/go.mod h1:29YDSYveqqpA1CQFD7NQuP49xymq17RXNaUDdc0mNu0= -cloud.google.com/go/translate v1.6.0/go.mod h1:lMGRudH1pu7I3n3PETiOB2507gf3HnfLV8qlkHZEyos= -cloud.google.com/go/translate v1.7.0/go.mod h1:lMGRudH1pu7I3n3PETiOB2507gf3HnfLV8qlkHZEyos= -cloud.google.com/go/video v1.8.0/go.mod h1:sTzKFc0bUSByE8Yoh8X0mn8bMymItVGPfTuUBUyRgxk= -cloud.google.com/go/video v1.9.0/go.mod h1:0RhNKFRF5v92f8dQt0yhaHrEuH95m068JYOvLZYnJSw= -cloud.google.com/go/video v1.12.0/go.mod h1:MLQew95eTuaNDEGriQdcYn0dTwf9oWiA4uYebxM5kdg= -cloud.google.com/go/video v1.13.0/go.mod h1:ulzkYlYgCp15N2AokzKjy7MQ9ejuynOJdf1tR5lGthk= -cloud.google.com/go/video v1.14.0/go.mod h1:SkgaXwT+lIIAKqWAJfktHT/RbgjSuY6DobxEp0C5yTQ= -cloud.google.com/go/video v1.15.0/go.mod h1:SkgaXwT+lIIAKqWAJfktHT/RbgjSuY6DobxEp0C5yTQ= -cloud.google.com/go/videointelligence v1.6.0/go.mod h1:w0DIDlVRKtwPCn/C4iwZIJdvC69yInhW0cfi+p546uU= -cloud.google.com/go/videointelligence v1.7.0/go.mod h1:k8pI/1wAhjznARtVT9U1llUaFNPh7muw8QyOUpavru4= -cloud.google.com/go/videointelligence v1.8.0/go.mod h1:dIcCn4gVDdS7yte/w+koiXn5dWVplOZkE+xwG9FgK+M= -cloud.google.com/go/videointelligence v1.9.0/go.mod h1:29lVRMPDYHikk3v8EdPSaL8Ku+eMzDljjuvRs105XoU= -cloud.google.com/go/videointelligence v1.10.0/go.mod h1:LHZngX1liVtUhZvi2uNS0VQuOzNi2TkY1OakiuoUOjU= -cloud.google.com/go/vision v1.2.0/go.mod h1:SmNwgObm5DpFBme2xpyOyasvBc1aPdjvMk2bBk0tKD0= -cloud.google.com/go/vision/v2 v2.2.0/go.mod h1:uCdV4PpN1S0jyCyq8sIM42v2Y6zOLkZs+4R9LrGYwFo= -cloud.google.com/go/vision/v2 v2.3.0/go.mod h1:UO61abBx9QRMFkNBbf1D8B1LXdS2cGiiCRx0vSpZoUo= -cloud.google.com/go/vision/v2 v2.4.0/go.mod h1:VtI579ll9RpVTrdKdkMzckdnwMyX2JILb+MhPqRbPsY= -cloud.google.com/go/vision/v2 v2.5.0/go.mod h1:MmaezXOOE+IWa+cS7OhRRLK2cNv1ZL98zhqFFZaaH2E= -cloud.google.com/go/vision/v2 v2.6.0/go.mod h1:158Hes0MvOS9Z/bDMSFpjwsUrZ5fPrdwuyyvKSGAGMY= -cloud.google.com/go/vision/v2 v2.7.0/go.mod h1:H89VysHy21avemp6xcf9b9JvZHVehWbET0uT/bcuY/0= -cloud.google.com/go/vmmigration v1.2.0/go.mod h1:IRf0o7myyWFSmVR1ItrBSFLFD/rJkfDCUTO4vLlJvsE= -cloud.google.com/go/vmmigration v1.3.0/go.mod h1:oGJ6ZgGPQOFdjHuocGcLqX4lc98YQ7Ygq8YQwHh9A7g= -cloud.google.com/go/vmmigration v1.5.0/go.mod h1:E4YQ8q7/4W9gobHjQg4JJSgXXSgY21nA5r8swQV+Xxc= -cloud.google.com/go/vmmigration v1.6.0/go.mod h1:bopQ/g4z+8qXzichC7GW1w2MjbErL54rk3/C843CjfY= -cloud.google.com/go/vmwareengine v0.1.0/go.mod h1:RsdNEf/8UDvKllXhMz5J40XxDrNJNN4sagiox+OI208= -cloud.google.com/go/vmwareengine v0.2.2/go.mod h1:sKdctNJxb3KLZkE/6Oui94iw/xs9PRNC2wnNLXsHvH8= -cloud.google.com/go/vmwareengine v0.3.0/go.mod h1:wvoyMvNWdIzxMYSpH/R7y2h5h3WFkx6d+1TIsP39WGY= -cloud.google.com/go/vpcaccess v1.4.0/go.mod h1:aQHVbTWDYUR1EbTApSVvMq1EnT57ppDmQzZ3imqIk4w= -cloud.google.com/go/vpcaccess v1.5.0/go.mod h1:drmg4HLk9NkZpGfCmZ3Tz0Bwnm2+DKqViEpeEpOq0m8= -cloud.google.com/go/vpcaccess v1.6.0/go.mod h1:wX2ILaNhe7TlVa4vC5xce1bCnqE3AeH27RV31lnmZes= -cloud.google.com/go/webrisk v1.4.0/go.mod h1:Hn8X6Zr+ziE2aNd8SliSDWpEnSS1u4R9+xXZmFiHmGE= -cloud.google.com/go/webrisk v1.5.0/go.mod h1:iPG6fr52Tv7sGk0H6qUFzmL3HHZev1htXuWDEEsqMTg= -cloud.google.com/go/webrisk v1.6.0/go.mod h1:65sW9V9rOosnc9ZY7A7jsy1zoHS5W9IAXv6dGqhMQMc= -cloud.google.com/go/webrisk v1.7.0/go.mod h1:mVMHgEYH0r337nmt1JyLthzMr6YxwN1aAIEc2fTcq7A= -cloud.google.com/go/webrisk v1.8.0/go.mod h1:oJPDuamzHXgUc+b8SiHRcVInZQuybnvEW72PqTc7sSg= -cloud.google.com/go/websecurityscanner v1.3.0/go.mod h1:uImdKm2wyeXQevQJXeh8Uun/Ym1VqworNDlBXQevGMo= -cloud.google.com/go/websecurityscanner v1.4.0/go.mod h1:ebit/Fp0a+FWu5j4JOmJEV8S8CzdTkAS77oDsiSqYWQ= -cloud.google.com/go/websecurityscanner v1.5.0/go.mod h1:Y6xdCPy81yi0SQnDY1xdNTNpfY1oAgXUlcfN3B3eSng= -cloud.google.com/go/workflows v1.6.0/go.mod h1:6t9F5h/unJz41YqfBmqSASJSXccBLtD1Vwf+KmJENM0= -cloud.google.com/go/workflows v1.7.0/go.mod h1:JhSrZuVZWuiDfKEFxU0/F1PQjmpnpcoISEXH2bcHC3M= -cloud.google.com/go/workflows v1.8.0/go.mod h1:ysGhmEajwZxGn1OhGOGKsTXc5PyxOc0vfKf5Af+to4M= -cloud.google.com/go/workflows v1.9.0/go.mod h1:ZGkj1aFIOd9c8Gerkjjq7OW7I5+l6cSvT3ujaO/WwSA= -cloud.google.com/go/workflows v1.10.0/go.mod h1:fZ8LmRmZQWacon9UCX1r/g/DfAXx5VcPALq2CxzdePw= dario.cat/mergo v1.0.1 h1:Ra4+bf83h2ztPIQYNP99R6m+Y7KfnARDfID+a+vLl4s= dario.cat/mergo v1.0.1/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk= -dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU= filippo.io/age v1.1.1 h1:pIpO7l151hCnQ4BdyBujnGP2YlUo0uj6sAVNHGBvXHg= filippo.io/age v1.1.1/go.mod h1:l03SrzDUrBkdBx8+IILdnn2KZysqQdbEBUQ4p3sqEQE= -gioui.org v0.0.0-20210308172011-57750fc8a0a6/go.mod h1:RSH6KIUZ0p2xy5zHDxgAM4zumjgTw83q2ge/PI+yyw8= -git.sr.ht/~sbinet/gg v0.3.1/go.mod h1:KGYtlADtqsqANL9ueOFkWymvzUvLMQllU5Ixo+8v3pc= github.com/99designs/gqlgen v0.17.49 h1:b3hNGexHd33fBSAd4NDT/c3NCcQzcAVkknhN9ym36YQ= github.com/99designs/gqlgen v0.17.49/go.mod h1:tC8YFVZMed81x7UJ7ORUwXF4Kn6SXuucFqQBhN8+BU0= github.com/AdaLogics/go-fuzz-headers v0.0.0-20230811130428-ced1acdcaa24 h1:bvDV9vkmnHYOMsOr4WLk+Vo07yKIzd94sVoIqshQ4bU= @@ -643,13 +45,11 @@ github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/storage/armstorage v1.3.0 github.com/Azure/azure-sdk-for-go/sdk/resourcemanager/storage/armstorage v1.3.0/go.mod h1:+OgGVo0Httq7N5oayfvaLQ/Jq+2gJdqfp++Hyyl7Tws= github.com/Azure/azure-storage-blob-go v0.15.0 h1:rXtgp8tN1p29GvpGgfJetavIG0V7OgcSXPpwp3tx6qk= github.com/Azure/azure-storage-blob-go v0.15.0/go.mod h1:vbjsVbX0dlxnRc4FFMPsS9BsJWPcne7GB7onqlPvz58= -github.com/Azure/go-ansiterm v0.0.0-20170929234023-d6e3b3328b78/go.mod h1:LmzpDX56iTiv29bbRTIsUNlaFfuhWRQBWjQdVyAevI8= -github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161 h1:L/gRVlceqvL25UVaW/CKtUDjefjrs0SPonmDGUVOYP0= github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161/go.mod h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E= github.com/Azure/go-autorest v14.2.0+incompatible h1:V5VMDjClD3GiElqLWO7mz2MxNAK/vTfRHdAubSIPRgs= github.com/Azure/go-autorest v14.2.0+incompatible/go.mod h1:r+4oMnoxhatjLLJ6zxSWATqVooLgysK6ZNox3g/xq24= -github.com/Azure/go-autorest/autorest v0.11.24 h1:1fIGgHKqVm54KIPT+q8Zmd1QlVsmHqeUGso5qm2BqqE= +github.com/Azure/go-autorest/autorest v0.11.18 h1:90Y4srNYrwOtAgVo3ndrQkTYn6kf1Eg/AjTFJ8Is2aM= github.com/Azure/go-autorest/autorest/adal v0.9.13/go.mod h1:W/MM4U6nLxnIskrw4UwWzlHfGjwUS50aOsc/I3yuU8M= github.com/Azure/go-autorest/autorest/adal v0.9.23 h1:Yepx8CvFxwNKpH6ja7RZ+sKX+DWYNldbLiALMC3BTz8= github.com/Azure/go-autorest/autorest/adal v0.9.23/go.mod h1:5pcMqFkdPhviJdlEy3kC/v1ZLnQl0MH6XA5YCcMhy4c= @@ -665,21 +65,15 @@ github.com/AzureAD/microsoft-authentication-library-for-go v1.2.2/go.mod h1:wP83 github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU= github.com/BurntSushi/toml v1.3.2 h1:o7IhLm0Msx3BaB+n3Ag7L8EVlByGnpq14C4YWiu/gL8= github.com/BurntSushi/toml v1.3.2/go.mod h1:CxXYINrC8qIiEnFrOxCa7Jy5BFHlXnUU2pbicEuybxQ= -github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo= github.com/DATA-DOG/go-sqlmock v1.5.2 h1:OcvFkGmslmlZibjAjaHm3L//6LiuBgolP7OputlJIzU= github.com/DATA-DOG/go-sqlmock v1.5.2/go.mod h1:88MAG/4G7SMwSE3CeA0ZKzrT5CiOU3OJ+JlNzwDqpNU= -github.com/JohnCGriffin/overflow v0.0.0-20211019200055-46fa312c352c/go.mod h1:X0CRv0ky0k6m906ixxpzmDRLvX58TFUKS2eePweuyxk= github.com/MakeNowJust/heredoc v1.0.0 h1:cXCdzVdstXyiTqTvfqk9SDHpKNjxuom+DOlyEeQ4pzQ= github.com/MakeNowJust/heredoc v1.0.0/go.mod h1:mG5amYoWBHf8vpLOuehzbGGw0EHxpZZ6lCpQ4fNJ8LE= github.com/Masterminds/goutils v1.1.1 h1:5nUrii3FMTL5diU80unEVvNevw1nH4+ZV4DSLVJLSYI= github.com/Masterminds/goutils v1.1.1/go.mod h1:8cTjp+g8YejhMuvIA5y2vz3BpJxksy863GQaJW2MFNU= -github.com/Masterminds/semver v1.5.0 h1:H65muMkzWKEuNDnfl9d70GUjFniHKHRbFPGBuZ3QEww= -github.com/Masterminds/semver v1.5.0/go.mod h1:MB6lktGJrhw8PrUyiEoblNEGEQ+RzHPF078ddwwvV3Y= -github.com/Masterminds/semver/v3 v3.1.1/go.mod h1:VPu/7SZ7ePZ3QOrcuXROw5FAcLl4a0cBrbBpGY/8hQs= github.com/Masterminds/semver/v3 v3.2.0/go.mod h1:qvl/7zhW3nngYb5+80sSMF+FG2BjYrf8m9wsX0PNOMQ= github.com/Masterminds/semver/v3 v3.2.1 h1:RN9w6+7QoMeJVGyfmbcgs28Br8cvmnucEXnY0rYXWg0= github.com/Masterminds/semver/v3 v3.2.1/go.mod h1:qvl/7zhW3nngYb5+80sSMF+FG2BjYrf8m9wsX0PNOMQ= -github.com/Masterminds/sprig/v3 v3.2.2/go.mod h1:UoaO7Yp8KlPnJIYWTFkMaqPUYKTfGFPhxNuwnnxkKlk= github.com/Masterminds/sprig/v3 v3.2.3 h1:eL2fZNezLomi0uOLqjQoN6BfsDD+fyLtgbJMAj9n6YA= github.com/Masterminds/sprig/v3 v3.2.3/go.mod h1:rXcFaZ2zZbLRJv/xSysmlgIM1u11eBaRMhvYXJNkGuM= github.com/Masterminds/squirrel v1.5.4 h1:uUcX/aBc8O7Fg9kaISIUsHXdKuqehiXAMQTYX8afzqM= @@ -689,59 +83,20 @@ github.com/Microsoft/go-winio v0.6.2 h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERo github.com/Microsoft/go-winio v0.6.2/go.mod h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU= github.com/Microsoft/hcsshim v0.11.7 h1:vl/nj3Bar/CvJSYo7gIQPyRWc9f3c6IeSNavBTSZNZQ= github.com/Microsoft/hcsshim v0.11.7/go.mod h1:MV8xMfmECjl5HdO7U/3/hFVnkmSBjAjmA09d4bExKcU= -github.com/NYTimes/gziphandler v0.0.0-20170623195520-56545f4a5d46/go.mod h1:3wb06e3pkSAbeQ52E9H9iFoQsEEwGN64994WTCIhntQ= -github.com/NYTimes/gziphandler v1.1.1/go.mod h1:n/CVRwUEOgIxrgPvAQhUUr9oeUtvrhMomdKFjzJNB0c= github.com/Netflix/go-expect v0.0.0-20220104043353-73e0943537d2 h1:+vx7roKuyA63nhn5WAunQHLTznkw5W8b1Xc0dNjp83s= github.com/Netflix/go-expect v0.0.0-20220104043353-73e0943537d2/go.mod h1:HBCaDeC1lPdgDeDbhX8XFpy1jqjK0IBG8W5K+xYqA0w= -github.com/OneOfOne/xxhash v1.2.2/go.mod h1:HSdplMjZKSmBqAxg5vPj2TmRDmfkzw+cTzAElWljhcU= github.com/ProtonMail/go-crypto v0.0.0-20230828082145-3c4c8a2d2371 h1:kkhsdkhsCvIsutKu5zLMgWtgh9YxGCNAw8Ad8hjwfYg= github.com/ProtonMail/go-crypto v0.0.0-20230828082145-3c4c8a2d2371/go.mod h1:EjAoLdwvbIOoOQr3ihjnSoLZRtE8azugULFRteWMNc0= -github.com/PuerkitoBio/purell v1.1.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= -github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= -github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= github.com/Yamashou/gqlgenc v0.23.2 h1:WPxYPrwc6W4Z1eY4qKxoH3nb5PC4jAMWqQA0G8toQMI= github.com/Yamashou/gqlgenc v0.23.2/go.mod h1:oMc4EQBQeDwLIODvgcvpaSp6rO+KMf47FuOhplv5D3A= -github.com/agext/levenshtein v1.2.1/go.mod h1:JEDfjyjHDjOF/1e4FlBE/PkbqA9OfWu2ki2W0IB5558= -github.com/agext/levenshtein v1.2.2 h1:0S/Yg6LYmFJ5stwQeRp6EeOcCbj7xiqQSdNelsXvaqE= -github.com/agext/levenshtein v1.2.2/go.mod h1:JEDfjyjHDjOF/1e4FlBE/PkbqA9OfWu2ki2W0IB5558= -github.com/agnivade/levenshtein v1.0.1/go.mod h1:CURSv5d9Uaml+FovSIICkLbAUZ9S4RqaHDIsdSBg7lM= -github.com/ajstarks/deck v0.0.0-20200831202436-30c9fc6549a9/go.mod h1:JynElWSGnm/4RlzPXRlREEwqTHAN3T56Bv2ITsFT3gY= -github.com/ajstarks/deck/generate v0.0.0-20210309230005-c3f852c02e19/go.mod h1:T13YZdzov6OU0A1+RfKZiZN9ca6VeKdBdyDV+BY97Tk= -github.com/ajstarks/svgo v0.0.0-20180226025133-644b8db467af/go.mod h1:K08gAheRH3/J6wwsYMMT4xOr94bZjxIelGM0+d/wbFw= -github.com/ajstarks/svgo v0.0.0-20211024235047-1546f124cd8b/go.mod h1:1KcenG0jGWcpt8ov532z81sp/kMMUG485J2InIOyADM= -github.com/alecthomas/kingpin/v2 v2.3.1/go.mod h1:oYL5vtsvEHZGHxU7DMp32Dvx+qL+ptGn6lWaot2vCNE= -github.com/alecthomas/kingpin/v2 v2.3.2/go.mod h1:0gyi0zQnjuFk8xrkNKamJoyUo382HRL7ATRpFZCw6tE= github.com/alecthomas/template v0.0.0-20160405071501-a0175ee3bccc/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= -github.com/alecthomas/template v0.0.0-20190718012654-fb15b899a751/go.mod h1:LOuyumcjzFXgccqObfd/Ljyb9UuFJ6TxHnclSeseNhc= github.com/alecthomas/units v0.0.0-20151022065526-2efee857e7cf/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= -github.com/alecthomas/units v0.0.0-20190717042225-c3de453c63f4/go.mod h1:ybxpYRFXyAe+OPACYpWeL0wqObRcbAqCMya13uyzqw0= -github.com/alecthomas/units v0.0.0-20190924025748-f65c72e2690d/go.mod h1:rBZYJk541a8SKzHPHnH3zbiI+7dagKZ0cgpgrD7Fyho= -github.com/alecthomas/units v0.0.0-20211218093645-b94a6e3cc137/go.mod h1:OMCwj8VM1Kc9e19TLln2VL61YJF0x1XFtfdL4JdbSyE= github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883 h1:bvNMNQO63//z+xNgfBlViaCIJKLlCJ6/fmUseuG0wVQ= github.com/andreyvit/diff v0.0.0-20170406064948-c7f18ee00883/go.mod h1:rCTlJbsFo29Kk6CurOXKm700vrz8f0KW0JNfpkRJY/8= -github.com/andybalholm/brotli v1.0.4/go.mod h1:fO7iG3H7G2nSZ7m0zPUDn85XEX2GTukHGRSepvi9Eig= github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be h1:9AeTilPcZAjCFIImctFaOjnTIavg87rW78vTPkQqLI8= github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be/go.mod h1:ySMOLuWl6zY27l47sB3qLNK6tF2fkHG55UZxx8oIVo4= -github.com/antihax/optional v1.0.0/go.mod h1:uupD/76wgC+ih3iEmQUL+0Ugr19nfwCT1kdvxnR2qWY= -github.com/antlr/antlr4/runtime/Go/antlr/v4 v4.0.0-20230305170008-8188dc5388df/go.mod h1:pSwJ0fSY5KhvocuWSx4fz3BA8OrA1bQn+K1Eli3BRwM= -github.com/apache/arrow/go/v10 v10.0.1/go.mod h1:YvhnlEePVnBS4+0z3fhPfUy7W1Ikj0Ih0vcRo/gZ1M0= -github.com/apache/arrow/go/v11 v11.0.0/go.mod h1:Eg5OsL5H+e299f7u5ssuXsuHQVEGC4xei5aX110hRiI= -github.com/apache/thrift v0.16.0/go.mod h1:PHK3hniurgQaNMZYaCLEqXKsYK8upmhPbmdP2FXSqgU= -github.com/apparentlymart/go-dump v0.0.0-20180507223929-23540a00eaa3/go.mod h1:oL81AME2rN47vu18xqj1S1jPIPuN7afo62yKTNn3XMM= -github.com/apparentlymart/go-textseg v1.0.0/go.mod h1:z96Txxhf3xSFMPmb5X/1W05FF/Nj9VFpLOpjS5yuumk= -github.com/apparentlymart/go-textseg/v12 v12.0.0/go.mod h1:S/4uRK2UtaQttw1GenVJEynmyUenKwP++x/+DdGV/Ec= -github.com/apparentlymart/go-textseg/v13 v13.0.0 h1:Y+KvPE1NYz0xl601PVImeQfFyEy6iT90AvPUL1NNfNw= -github.com/apparentlymart/go-textseg/v13 v13.0.0/go.mod h1:ZK2fH7c4NqDTLtiYLvIkEghdlcqw7yxLeM89kiTRPUo= -github.com/armon/circbuf v0.0.0-20150827004946-bbbad097214e/go.mod h1:3U/XgcO3hCbHZ8TKRvWD2dDTCfh9M9ya+I9JpbB7O8o= -github.com/armon/consul-api v0.0.0-20180202201655-eb2c6b5be1b6/go.mod h1:grANhF5doyWs3UAsr3K4I6qtAmlQcZDesFNEHPZAzj8= -github.com/armon/go-metrics v0.0.0-20180917152333-f0300d1749da/go.mod h1:Q73ZrmVTwzkszR9V5SSuryQ31EELlFMUz1kKyl939pY= -github.com/armon/go-radix v0.0.0-20180808171621-7fddfc383310/go.mod h1:ufUuZ+zHj4x4TnLV4JWEpy2hxWSpsRywHrMgIH9cCH8= github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio= github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5/go.mod h1:wHh0iHkYZB8zMSxRWpUBQtwG5a7fFgvEO+odwuTv2gs= -github.com/aryann/difflib v0.0.0-20170710044230-e206f873d14a h1:pv34s756C4pEXnjgPfGYgdhg/ZdajGhyOvzx8k+23nw= -github.com/aryann/difflib v0.0.0-20170710044230-e206f873d14a/go.mod h1:DAHtR1m6lCRdSC2Tm3DSWRPvIPr6xNKyeHdqDQSQT+A= -github.com/asaskevich/govalidator v0.0.0-20180720115003-f9ffefc3facf/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= -github.com/asaskevich/govalidator v0.0.0-20190424111038-f61b66f89f4a/go.mod h1:lB+ZfQJz7igIIfQNfa7Ml4HSf2uFQQRzpGGRXenZAgY= github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 h1:DklsrG3dyBCFEj5IhUbnKptjxatkF07cF2ak3yi77so= github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2/go.mod h1:WaHUgvxTVq04UNunO+XhnAqY/wQc+bxr74GqbsZ/Jqw= github.com/aws/aws-sdk-go-v2 v1.27.1 h1:xypCL2owhog46iFxBKKpBcw+bPTX/RJzwNj8uSilENw= @@ -784,54 +139,28 @@ github.com/aws/aws-sdk-go-v2/service/sts v1.28.6 h1:cwIxeBttqPN3qkaAjcEcsh8NYr8n github.com/aws/aws-sdk-go-v2/service/sts v1.28.6/go.mod h1:FZf1/nKNEkHdGGJP/cI2MoIMquumuRK6ol3QQJNDxmw= github.com/aws/smithy-go v1.20.2 h1:tbp628ireGtzcHDDmLT/6ADHidqnwgF57XOXZe6tp4Q= github.com/aws/smithy-go v1.20.2/go.mod h1:krry+ya/rV9RDcV/Q16kpu6ypI4K2czasz0NC3qS14E= -github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= -github.com/benbjohnson/clock v1.3.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= github.com/beorn7/perks v0.0.0-20180321164747-3a771d992973/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= github.com/beorn7/perks v1.0.0/go.mod h1:KWe93zE9D1o94FZ5RNwFwVgaQK1VOXiVxmqh+CedLV8= github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM= github.com/beorn7/perks v1.0.1/go.mod h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw= -github.com/bep/debounce v1.2.1 h1:v67fRdBA9UQu2NhLFXrSg0Brw7CexQekrBwDMM8bzeY= -github.com/bep/debounce v1.2.1/go.mod h1:H8yggRPQKLUhUoqrJC1bO2xNya7vanpDl7xR3ISbCJ0= -github.com/bgentry/speakeasy v0.1.0/go.mod h1:+zsyZBPWlz7T6j88CTgSN5bM796AkVf0kBD4zp0CCIs= -github.com/bketelsen/crypt v0.0.3-0.20200106085610-5cbc8cc4026c/go.mod h1:MKsuJmJgSg28kpZDP6UIiPt0e0Oz0kqKNGyRaWEPv84= -github.com/blang/semver v3.5.0+incompatible/go.mod h1:kRBLl5iJ+tD4TcOOxsy/0fnwebNt5EWlYSAyrTnjyyk= github.com/blang/semver/v4 v4.0.0 h1:1PFHFE6yCCTv8C1TeyNNarDzntLi7wMI5i/pzqYIsAM= github.com/blang/semver/v4 v4.0.0/go.mod h1:IbckMUScFkM3pff0VJDNKRiT6TG/YpiHIM2yvyW5YoQ= -github.com/boombuler/barcode v1.0.0/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl3JlRe0mD8= -github.com/boombuler/barcode v1.0.1/go.mod h1:paBWMcWSl3LHKBqUq+rly7CNSldXjb2rDl3JlRe0mD8= github.com/briandowns/spinner v1.23.0 h1:alDF2guRWqa/FOZZYWjlMIx2L6H0wyewPxo/CH4Pt2A= github.com/briandowns/spinner v1.23.0/go.mod h1:rPG4gmXeN3wQV/TsAY4w8lPdIM6RX3yqeBQJSrbXjuE= github.com/bshuster-repo/logrus-logstash-hook v1.0.0 h1:e+C0SB5R1pu//O4MQ3f9cFuPGoOVeF2fE4Og9otCc70= github.com/bshuster-repo/logrus-logstash-hook v1.0.0/go.mod h1:zsTqEiSzDgAa/8GZR7E1qaXrhYNDKBYy5/dWPTIflbk= -github.com/buger/goterm v1.0.4 h1:Z9YvGmOih81P0FbVtEYTFF6YsSgxSUKEhf/f9bTMXbY= -github.com/buger/goterm v1.0.4/go.mod h1:HiFWV3xnkolgrBV3mY8m0X0Pumt4zg4QhbdOzQtB8tE= github.com/bwesterb/go-ristretto v1.2.3/go.mod h1:fUIoIZaG73pV5biE2Blr2xEzDoMj7NFEuV9ekS419A0= -github.com/bytedance/sonic v1.5.0/go.mod h1:ED5hyg4y6t3/9Ku1R6dU/4KyJ48DZ4jPhfY1O2AihPM= -github.com/bytedance/sonic v1.9.1 h1:6iJ6NqdoxCDr6mbY8h18oSO+cShGSMRGCEo7F2h0x8s= -github.com/bytedance/sonic v1.9.1/go.mod h1:i736AoUSYt75HyZLoJW9ERYxcy6eaN6h4BZXU064P/U= github.com/cenkalti/backoff v2.2.1+incompatible h1:tNowT99t7UNflLxfYYSlKYsBpXdEet03Pg2g16Swow4= github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= -github.com/cenkalti/backoff/v4 v4.1.1/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= -github.com/cenkalti/backoff/v4 v4.1.3/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= -github.com/cenkalti/backoff/v4 v4.2.1/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= github.com/cenkalti/backoff/v4 v4.3.0 h1:MyRJ/UdXutAwSAT+s3wNd7MfTIcy71VQueUuFK343L8= github.com/cenkalti/backoff/v4 v4.3.0/go.mod h1:Y3VNntkOUPxTVeUxJ/G5vcM//AlwfmyYozVcomhLiZE= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -github.com/census-instrumentation/opencensus-proto v0.3.0/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= -github.com/census-instrumentation/opencensus-proto v0.4.1/go.mod h1:4T9NM4+4Vw91VeyqjLS6ao50K5bOcLKN6Q42XnYaRYw= -github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= -github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/cespare/xxhash/v2 v2.1.2/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= -github.com/cespare/xxhash/v2 v2.2.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/cespare/xxhash/v2 v2.3.0 h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs= github.com/cespare/xxhash/v2 v2.3.0/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= github.com/chai2010/gettext-go v1.0.2 h1:1Lwwip6Q2QGsAdl/ZKPCwTe9fe0CjlUbqj5bFNSjIRk= github.com/chai2010/gettext-go v1.0.2/go.mod h1:y+wnP2cHYaVj19NZhYKAwEMH2CI1gNHeQQ+5AjwawxA= github.com/chartmuseum/helm-push v0.10.3 h1:0NQq4FJvy7gXm7nlUg2aucv7LTI5wszyI71oYm1zkzk= github.com/chartmuseum/helm-push v0.10.3/go.mod h1:zVskBtjr1r6F3yx6TGrNeqvs2lWcvKeJqUcDMEzle6k= -github.com/chenzhuoyu/base64x v0.0.0-20211019084208-fb5309c8db06/go.mod h1:DH46F32mSOjUmXrMHnKwZdA8wcEefY7UVqBKYGjpdQY= -github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311 h1:qSGYFH7+jGhDF8vLC+iwCD4WpbV1EBDSzWkJODFLams= -github.com/chenzhuoyu/base64x v0.0.0-20221115062448-fe3a3abad311/go.mod h1:b583jCggY9gE99b6G5LEC39OIiVsWj+R97kbl5odCEk= github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI= github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI= github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU= @@ -844,21 +173,6 @@ github.com/cloudflare/circl v1.3.3/go.mod h1:5XYMA4rFBvNIrhs50XuiBJ15vF2pZn4nnUK github.com/cloudflare/circl v1.3.7 h1:qlCDlTPz2n9fu58M0Nh1J/JzcFpfgkFHHX3O35r5vcU= github.com/cloudflare/circl v1.3.7/go.mod h1:sRTcRWXGLrKw6yIGJ+l7amYJFfAXbZG0kBSc8r4zxgA= github.com/cncf/udpa/go v0.0.0-20191209042840-269d4d468f6f/go.mod h1:M8M6+tZqaGXZJjfX53e64911xZQV5JYwmTeXPW+k8Sc= -github.com/cncf/udpa/go v0.0.0-20200629203442-efcf912fb354/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= -github.com/cncf/udpa/go v0.0.0-20201120205902-5459f2c99403/go.mod h1:WmhPx2Nbnhtbo57+VJT5O0JRkEi1Wbu0z5j0R8u5Hbk= -github.com/cncf/udpa/go v0.0.0-20210930031921-04548b0d99d4/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI= -github.com/cncf/udpa/go v0.0.0-20220112060539-c52dc94e7fbe/go.mod h1:6pvJx4me5XPnfI9Z40ddWsdw2W/uZgQLFXToKeRcDiI= -github.com/cncf/xds/go v0.0.0-20210312221358-fbca930ec8ed/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20210805033703-aa0b78936158/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20211001041855-01bcc9b48dfe/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20220314180256-7f1daf1720fc/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20230105202645-06c439db220b/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20230310173818-32f1caf87195/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cncf/xds/go v0.0.0-20230607035331-e9ce68804cb4/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/cockroachdb/datadriven v0.0.0-20190809214429-80d97fb3cbaa/go.mod h1:zn76sxSg3SzpJ0PPJaLDCu+Bu0Lg3sKTORVIj19EIF8= -github.com/cockroachdb/datadriven v1.0.2/go.mod h1:a9RdTaap04u637JoCzcUoIcDmvwSUtcUFtT/C3kJlTU= github.com/containerd/cgroups v1.1.0 h1:v8rEWFl6EoqHB+swVNjVoCJE8o3jX7e8nqBGPLaDFBM= github.com/containerd/cgroups v1.1.0/go.mod h1:6ppBcbh/NOOUU+dMKrykgaBnK9lCIBxHqJDGwsa1mIw= github.com/containerd/containerd v1.7.20 h1:Sl6jQYk3TRavaU83h66QMbI2Nqg9Jm6qzwX57Vsn1SQ= @@ -871,49 +185,24 @@ github.com/containerd/log v0.1.0 h1:TCJt7ioM2cr/tfR8GPbGf9/VRAX8D2B4PjzCpfX540I= github.com/containerd/log v0.1.0/go.mod h1:VRRf09a7mHDIRezVKTRCrOq78v577GXq3bSa3EhrzVo= github.com/containerd/platforms v0.2.1 h1:zvwtM3rz2YHPQsF2CHYM8+KtB5dvhISiXh5ZpSBQv6A= github.com/containerd/platforms v0.2.1/go.mod h1:XHCb+2/hzowdiut9rkudds9bE5yJ7npe7dG/wG+uFPw= -github.com/coreos/bbolt v1.3.2/go.mod h1:iRUV2dpdMOn7Bo10OQBFzIJO9kkE559Wcmn+qkEiiKk= -github.com/coreos/etcd v3.3.10+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= -github.com/coreos/etcd v3.3.13+incompatible/go.mod h1:uF7uidLiAD3TWHmW31ZFd/JWoc32PjwdhPthX9715RE= -github.com/coreos/go-etcd v2.0.0+incompatible/go.mod h1:Jez6KQU2B/sWsbdaef3ED8NzMklzPG4d5KIOhIy30Tk= -github.com/coreos/go-oidc v2.1.0+incompatible/go.mod h1:CgnwVTmzoESiwO9qyAFEMiHoZ1nMCKZlZ9V6mm3/LKc= -github.com/coreos/go-oidc v2.2.1+incompatible/go.mod h1:CgnwVTmzoESiwO9qyAFEMiHoZ1nMCKZlZ9V6mm3/LKc= -github.com/coreos/go-semver v0.2.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= -github.com/coreos/go-semver v0.3.0/go.mod h1:nnelYz7RCh+5ahJtPPxZlU+153eP4D4r3EedlOD2RNk= -github.com/coreos/go-semver v0.3.1/go.mod h1:irMmmIw/7yzSRPWryHsK7EYSg09caPQL03VsM8rvUec= -github.com/coreos/go-systemd v0.0.0-20180511133405-39ca1b05acc7/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= -github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e h1:Wf6HqHfScWJN9/ZjdUKyjop4mf3Qdd+1TvvltAvM3m8= -github.com/coreos/go-systemd v0.0.0-20190321100706-95778dfbb74e/go.mod h1:F5haX7vjVVG0kc13fIWeqUViNPyEJxv/OmvnBo0Yme4= -github.com/coreos/go-systemd/v22 v22.1.0/go.mod h1:xO0FLkIi5MaZafQlIrOotqXZ90ih+1atmu1JpKERPPk= -github.com/coreos/go-systemd/v22 v22.3.2/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= github.com/coreos/go-systemd/v22 v22.5.0 h1:RrqgGjYQKalulkV8NGVIfkXQf6YYmOyiJKk8iXXhfZs= github.com/coreos/go-systemd/v22 v22.5.0/go.mod h1:Y58oyj3AT4RCenI/lSvhwexgC+NSVTIJ3seZv2GcEnc= -github.com/coreos/pkg v0.0.0-20160727233714-3ac0863d7acf/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= -github.com/coreos/pkg v0.0.0-20180108230652-97fdf19511ea/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= -github.com/coreos/pkg v0.0.0-20180928190104-399ea9e2e55f/go.mod h1:E3G3o1h8I7cfcXa63jLwjI0eiQQMgzzUDFVpN/nH/eA= -github.com/cpuguy83/go-md2man v1.0.10/go.mod h1:SmD6nW6nTyfqj6ABTjUi3V3JVMnlJmwcJI5acqYI6dE= github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= -github.com/cpuguy83/go-md2man/v2 v2.0.0/go.mod h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU= github.com/cpuguy83/go-md2man/v2 v2.0.2/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= github.com/cpuguy83/go-md2man/v2 v2.0.4 h1:wfIWP927BUkWJb2NmU/kNDYIBTh/ziUX91+lVfRxZq4= github.com/cpuguy83/go-md2man/v2 v2.0.4/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= -github.com/creack/pty v1.1.7/go.mod h1:lj5s0c3V2DBrqTV7llrYr5NG6My20zk30Fl46Y7DoTY= github.com/creack/pty v1.1.9/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= -github.com/creack/pty v1.1.11/go.mod h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E= github.com/creack/pty v1.1.17/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4= github.com/creack/pty v1.1.18 h1:n56/Zwd5o6whRC5PMGretI4IdRLlmBXYNjScPaBgsbY= github.com/creack/pty v1.1.18/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4= github.com/cyphar/filepath-securejoin v0.2.4 h1:Ugdm7cg7i6ZK6x3xDF1oEu1nfkyfH53EtKeQYTC3kyg= github.com/cyphar/filepath-securejoin v0.2.4/go.mod h1:aPGpWjXOXUn2NCNjFvBE6aRxGGx79pTxQpKOJNYHHl4= -github.com/databus23/helm-diff/v3 v3.6.0 h1:ivkIa5ciGaEXzz/JvQVN+CwZjZn4Kvbw7xb1CE5KmrM= -github.com/databus23/helm-diff/v3 v3.6.0/go.mod h1:4uMSSmex9P76xAOzVuQeNs7ZRfJBDe97oFE5iTzWkFk= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/dgrijalva/jwt-go v3.2.0+incompatible/go.mod h1:E3ru+11k8xSBh+hMPgOLZmtrrCbhqsmaPHjLKYnJCaQ= github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f h1:lO4WD4F/rVNCu3HqELle0jiPLLBs70cWOduZpkS1E78= github.com/dgryski/go-rendezvous v0.0.0-20200823014737-9f7001d12a5f/go.mod h1:cuUVRXasLTGF7a8hSLbxyZXjz+1KgoB3wDUb6vlszIc= -github.com/dgryski/go-sip13 v0.0.0-20181026042036-e10d5fee7954/go.mod h1:vAd38F8PWV+bWy6jNmig1y/TA+kYO4g3RSRF0IAv0no= github.com/distribution/distribution/v3 v3.0.0-beta.1 h1:X+ELTxPuZ1Xe5MsD3kp2wfGUhc8I+MPfRis8dZ818Ic= github.com/distribution/distribution/v3 v3.0.0-beta.1/go.mod h1:O9O8uamhHzWWQVTjuQpyYUVm/ShPHPUDgvQMpHGVBDs= github.com/distribution/reference v0.6.0 h1:0IXCQ5g4/QMHHkarYzh5l+u8T3t73zM5QvfrDyIgxBk= @@ -935,22 +224,10 @@ github.com/docker/go-events v0.0.0-20190806004212-e31b211e4f1c h1:+pKlWGMw7gf6bQ github.com/docker/go-events v0.0.0-20190806004212-e31b211e4f1c/go.mod h1:Uw6UezgYA44ePAFQYUehOuCzmy5zmg/+nl2ZfMWGkpA= github.com/docker/go-metrics v0.0.1 h1:AgB/0SvBxihN0X8OR4SjsblXkbMvalQ8cjmtKQ2rQV8= github.com/docker/go-metrics v0.0.1/go.mod h1:cG1hvH2utMXtqgqqYE9plW6lDxS3/5ayHzueweSI3Vw= -github.com/docker/go-units v0.3.3/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= -github.com/docker/go-units v0.4.0/go.mod h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk= github.com/docker/libtrust v0.0.0-20150114040149-fa567046d9b1 h1:ZClxb8laGDf5arXfYcAtECDFgAgHklGI8CxgjHnXKJ4= github.com/docker/libtrust v0.0.0-20150114040149-fa567046d9b1/go.mod h1:cyGadeNEkKy96OOhEzfZl+yxihPEzKnqJwvfuSUqbZE= -github.com/docker/spdystream v0.0.0-20160310174837-449fdfce4d96/go.mod h1:Qh8CwZgvJUkLughtfhJv5dyTYa91l1fOUCrgjqmcifM= -github.com/docopt/docopt-go v0.0.0-20180111231733-ee0de3bc6815/go.mod h1:WwZ+bS3ebgob9U8Nd0kOddGdZWjyMGR8Wziv+TBNwSE= -github.com/dustin/go-humanize v0.0.0-20171111073723-bb3d318650d4/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= -github.com/dustin/go-humanize v1.0.0/go.mod h1:HtrtbFcZ19U5GC7JDqmcUSB87Iq5E25KnS6fMYU6eOk= -github.com/dustin/go-humanize v1.0.1/go.mod h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto= -github.com/elazarl/goproxy v0.0.0-20170405201442-c4fc26588b6e/go.mod h1:/Zj4wYkgs4iZTTu3o/KG3Itv/qCCa8VVMlb3i9OVuzc= github.com/elazarl/goproxy v0.0.0-20230808193330-2592e75ae04a h1:mATvB/9r/3gvcejNsXKSkQ6lcIaNec2nyfOdlTBR2lU= github.com/elazarl/goproxy v0.0.0-20230808193330-2592e75ae04a/go.mod h1:Ro8st/ElPeALwNFlcTpWmkr6IoMFfkjXAvTHpevnDsM= -github.com/emicklei/go-restful v2.9.5+incompatible/go.mod h1:otzb+WCGbkyDHkqmQmT5YD2WR4BBwUdeQoFo8l/7tVs= -github.com/emicklei/go-restful/v3 v3.8.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= -github.com/emicklei/go-restful/v3 v3.9.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= -github.com/emicklei/go-restful/v3 v3.11.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= github.com/emicklei/go-restful/v3 v3.12.0 h1:y2DdzBAURM29NFF94q6RaY4vjIH1rtwDapwQtU84iWk= github.com/emicklei/go-restful/v3 v3.12.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= github.com/emirpasic/gods v1.18.1 h1:FXtiHYKDGKCW2KzwZKx0iC0PQmdlorYgdFG9jPXJ1Bc= @@ -958,73 +235,33 @@ github.com/emirpasic/gods v1.18.1/go.mod h1:8tpGGwCnJ5H4r6BWwaV6OrWmMoPhUl5jm/FM github.com/envoyproxy/go-control-plane v0.9.0/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.1-0.20191026205805-5f8ba28d4473/go.mod h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4= github.com/envoyproxy/go-control-plane v0.9.4/go.mod h1:6rpuAdCZL397s3pYoYcLgu1mIlRU8Am5FuJP05cCM98= -github.com/envoyproxy/go-control-plane v0.9.7/go.mod h1:cwu0lG7PUMfa9snN8LXBig5ynNVH9qI8YYLbd1fK2po= -github.com/envoyproxy/go-control-plane v0.9.9-0.20201210154907-fd9021fe5dad/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= -github.com/envoyproxy/go-control-plane v0.9.9-0.20210217033140-668b12f5399d/go.mod h1:cXg6YxExXjJnVBQHBLXeUAgxn2UodCpnH306RInaBQk= -github.com/envoyproxy/go-control-plane v0.9.9-0.20210512163311-63b5d3c536b0/go.mod h1:hliV/p42l8fGbc6Y9bQ70uLwIvmJyVE5k4iMKlh8wCQ= -github.com/envoyproxy/go-control-plane v0.9.10-0.20210907150352-cf90f659a021/go.mod h1:AFq3mo9L8Lqqiid3OhADV3RfLJnjiw63cSpi+fDTRC0= -github.com/envoyproxy/go-control-plane v0.10.2-0.20220325020618-49ff273808a1/go.mod h1:KJwIaB5Mv44NWtYuAOFCVOjcI94vtpEz2JU/D2v6IjE= -github.com/envoyproxy/go-control-plane v0.10.3/go.mod h1:fJJn/j26vwOu972OllsvAgJJM//w9BV6Fxbg2LuVd34= -github.com/envoyproxy/go-control-plane v0.11.0/go.mod h1:VnHyVMpzcLvCFt9yUz1UnCwHLhwx1WguiVDV7pTG/tI= -github.com/envoyproxy/go-control-plane v0.11.1-0.20230524094728-9239064ad72f/go.mod h1:sfYdkwUW4BA3PbKjySwjJy+O4Pu0h62rlqCMHNk+K+Q= github.com/envoyproxy/protoc-gen-validate v0.1.0/go.mod h1:iSmxcyjqTsJpI2R4NaDN7+kN2VEUnK/pcBlmesArF7c= -github.com/envoyproxy/protoc-gen-validate v0.6.7/go.mod h1:dyJXwwfPK2VSqiB9Klm1J6romD608Ba7Hij42vrOBCo= -github.com/envoyproxy/protoc-gen-validate v0.9.1/go.mod h1:OKNgG7TCp5pF4d6XftA0++PMirau2/yoOwVac3AbF2w= -github.com/envoyproxy/protoc-gen-validate v0.10.0/go.mod h1:DRjgyB0I43LtJapqN6NiRwroiAU2PaFuvk/vjgh61ss= -github.com/envoyproxy/protoc-gen-validate v0.10.1/go.mod h1:DRjgyB0I43LtJapqN6NiRwroiAU2PaFuvk/vjgh61ss= -github.com/evanphx/json-patch v0.5.2/go.mod h1:ZWS5hhDbVDyob71nXKNL0+PWn6ToqBHMikGIFbs31qQ= -github.com/evanphx/json-patch v4.2.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= -github.com/evanphx/json-patch v4.12.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= -github.com/evanphx/json-patch v5.6.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= github.com/evanphx/json-patch v5.7.0+incompatible h1:vgGkfT/9f8zE6tvSCe74nfpAVDQ2tG6yudJd8LBksgI= github.com/evanphx/json-patch v5.7.0+incompatible/go.mod h1:50XU6AFN0ol/bzJsmQLiYLvXMP4fmwYFNcr97nuDLSk= -github.com/evanphx/json-patch/v5 v5.6.0/go.mod h1:G79N1coSVB93tBe7j6PhzjmR3/2VvlbKOFpnXhI9Bw4= github.com/evanphx/json-patch/v5 v5.9.0 h1:kcBlZQbplgElYIlo/n1hJbls2z/1awpXxpRi0/FOJfg= github.com/evanphx/json-patch/v5 v5.9.0/go.mod h1:VNkHZ/282BpEyt/tObQO8s5CMPmYYq14uClGH4abBuQ= github.com/exponent-io/jsonpath v0.0.0-20151013193312-d6023ce2651d h1:105gxyaGwCFad8crR9dcMQWvV9Hvulu6hwUh4tWPJnM= github.com/exponent-io/jsonpath v0.0.0-20151013193312-d6023ce2651d/go.mod h1:ZZMPRZwes7CROmyNKgQzC3XPs6L/G2EJLHddWejkmf4= -github.com/fatih/camelcase v1.0.0 h1:hxNvNX/xYBp0ovncs8WyWZrOrpBNub/JfaMvbURyft8= -github.com/fatih/camelcase v1.0.0/go.mod h1:yN2Sb0lFhZJUdVvtELVWefmrXpuZESvPmqwoZc+/fpc= -github.com/fatih/color v1.7.0/go.mod h1:Zm6kSWBoL9eyXnKyktHP6abPY2pDugNf5KwzbycvMj4= github.com/fatih/color v1.13.0/go.mod h1:kLAiJbzzSOZDVNGyDpeOxJ47H46qBXwg5ILebYFFOfk= github.com/fatih/color v1.16.0 h1:zmkK9Ngbjj+K0yRhTVONQh1p/HknKYSlNT+vZCzyokM= github.com/fatih/color v1.16.0/go.mod h1:fL2Sau1YI5c0pdGEVCbKQbLXB6edEj1ZgiY4NijnWvE= -github.com/felixge/httpsnoop v1.0.3/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= github.com/felixge/httpsnoop v1.0.4 h1:NFTV2Zj1bL4mc9sqWACXbQFVBBg2W3GPvqp8/ESS2Wg= github.com/felixge/httpsnoop v1.0.4/go.mod h1:m8KPJKqk1gH5J9DgRY2ASl2lWCfGKXixSwevea8zH2U= -github.com/fogleman/gg v1.2.1-0.20190220221249-0403632d5b90/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= -github.com/fogleman/gg v1.3.0/go.mod h1:R/bRT+9gY/C5z7JzPU0zXsXHKM4/ayA+zqcVNZzPa1k= github.com/form3tech-oss/jwt-go v3.2.2+incompatible/go.mod h1:pbq4aXjuKjdthFRnoDwaVPLA+WlJuPGy+QneDUgJi2k= github.com/foxcpp/go-mockdns v1.0.0 h1:7jBqxd3WDWwi/6WhDvacvH1XsN3rOLXyHM1uhvIx6FI= github.com/foxcpp/go-mockdns v1.0.0/go.mod h1:lgRN6+KxQBawyIghpnl5CezHFGS9VLzvtVlwxvzXTQ4= github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8= github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0= -github.com/fsnotify/fsnotify v1.4.7/go.mod h1:jwhsz4b93w/PPRr/qN1Yymfu8t87LnFCMoQvtojpjFo= -github.com/fsnotify/fsnotify v1.4.9/go.mod h1:znqG4EE+3YCdAaPaxE2ZRY/06pZUdp0tY4IgpuI1SZQ= -github.com/fsnotify/fsnotify v1.6.0/go.mod h1:sl3t1tCWJFWoRz9R8WJCbQihKKwmorjAbSClcnxKAGw= github.com/fsnotify/fsnotify v1.7.0 h1:8JEhPFa5W2WU7YfeZzPNqzMP6Lwt7L2715Ggo0nosvA= github.com/fsnotify/fsnotify v1.7.0/go.mod h1:40Bi/Hjc2AVfZrqy+aj+yEI+/bRxZnMJyTJwOpGvigM= github.com/fxamacker/cbor/v2 v2.7.0 h1:iM5WgngdRBanHcxugY4JySA0nk1wZorNOpTgCMedv5E= github.com/fxamacker/cbor/v2 v2.7.0/go.mod h1:pxXPTn3joSm21Gbwsv0w9OSA2y1HFR9qXEeXQVeNoDQ= -github.com/gabriel-vasile/mimetype v1.4.2 h1:w5qFW6JKBz9Y393Y4q372O9A7cUSequkh1Q7OhCmWKU= -github.com/gabriel-vasile/mimetype v1.4.2/go.mod h1:zApsH/mKG4w07erKIaJPFiX0Tsq9BFQgN3qGY5GnNgA= github.com/ghodss/yaml v1.0.0 h1:wQHKEahhL6wmXdzwWG11gIVCkOv05bNOh+Rxn0yngAk= github.com/ghodss/yaml v1.0.0/go.mod h1:4dBDuWmgqj2HViK6kFavaiC9ZROes6MMH2rRYeMEF04= -github.com/gin-contrib/sse v0.1.0 h1:Y/yl/+YNO8GZSjAhjMsSuLt29uWRFHdHYUb5lYOV9qE= -github.com/gin-contrib/sse v0.1.0/go.mod h1:RHrZQHXnP2xjPF+u1gW/2HnVO7nvIa9PG3Gm+fLHvGI= -github.com/gin-gonic/gin v1.9.1 h1:4idEAncQnU5cB7BeOkPtxjfCSye0AAm1R0RVIqJ+Jmg= -github.com/gin-gonic/gin v1.9.1/go.mod h1:hPrL7YrpYKXt5YId3A/Tnip5kqbEAP+KLuI3SUcPTeU= github.com/gliderlabs/ssh v0.3.5 h1:OcaySEmAQJgyYcArR+gGGTHCyE7nvhEMTlYY+Dp8CpY= github.com/gliderlabs/ssh v0.3.5/go.mod h1:8XB4KraRrX39qHhT6yxPsHedjA08I/uBVwj4xC+/+z4= -github.com/globalsign/mgo v0.0.0-20180905125535-1ca0a4f7cbcb/go.mod h1:xkRDCp4j0OGD1HRkm4kmhM+pmpv3AKq5SU7GMg4oO/Q= -github.com/globalsign/mgo v0.0.0-20181015135952-eeefdecb41b8/go.mod h1:xkRDCp4j0OGD1HRkm4kmhM+pmpv3AKq5SU7GMg4oO/Q= github.com/go-errors/errors v1.5.1 h1:ZwEMSLRCapFLflTpT7NKaAc7ukJ8ZPEjzlxt8rPN8bk= github.com/go-errors/errors v1.5.1/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3BopGUQ5a5Og= -github.com/go-fonts/dejavu v0.1.0/go.mod h1:4Wt4I4OU2Nq9asgDCteaAaWZOV24E+0/Pwo0gppep4g= -github.com/go-fonts/latin-modern v0.2.0/go.mod h1:rQVLdDMK+mK1xscDwsqM5J8U2jrRa3T0ecnM9pNujks= -github.com/go-fonts/liberation v0.1.1/go.mod h1:K6qoJYypsmfVjWg8KOVDQhLc8UDgIK2HYqyqAO9z7GY= -github.com/go-fonts/liberation v0.2.0/go.mod h1:K6qoJYypsmfVjWg8KOVDQhLc8UDgIK2HYqyqAO9z7GY= -github.com/go-fonts/stix v0.1.0/go.mod h1:w/c1f0ldAUlJmLBvlbkvVXLAD+tAMqobIIQpmnUIzUY= github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 h1:+zs/tPmkDkHx3U66DAb0lQFJrpS6731Oaa12ikc+DiI= github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376/go.mod h1:an3vInlBmSxCcxctByoQdvwPiA7DTK7jaaFDBTtu0ic= github.com/go-git/go-billy/v5 v5.5.0 h1:yEY4yhzCDuMGSv83oGxiBotRzhwhNr8VZyphhiu+mTU= @@ -1033,109 +270,33 @@ github.com/go-git/go-git-fixtures/v4 v4.3.2-0.20231010084843-55a94097c399 h1:eMj github.com/go-git/go-git-fixtures/v4 v4.3.2-0.20231010084843-55a94097c399/go.mod h1:1OCfN199q1Jm3HZlxleg+Dw/mwps2Wbk9frAWm+4FII= github.com/go-git/go-git/v5 v5.11.0 h1:XIZc1p+8YzypNr34itUfSvYJcv+eYdTnTvOZ2vD3cA4= github.com/go-git/go-git/v5 v5.11.0/go.mod h1:6GFcX2P3NM7FPBfpePbpLd21XxsgdAt+lKqXmCUiUCY= -github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU= -github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= -github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8= github.com/go-gorp/gorp/v3 v3.1.0 h1:ItKF/Vbuj31dmV4jxA1qblpSwkl9g1typ24xoe70IGs= github.com/go-gorp/gorp/v3 v3.1.0/go.mod h1:dLEjIyyRNiXvNZ8PSmzpt1GsWAUK8kjVhEpjH8TixEw= github.com/go-kit/kit v0.8.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= -github.com/go-kit/kit v0.9.0/go.mod h1:xBxKIO96dXMWWy0MnWVtmwkA9/13aqxPnvrjFYMA2as= -github.com/go-kit/log v0.1.0/go.mod h1:zbhenjAZHb184qTLMA9ZjW7ThYL0H2mk7Q6pNt4vbaY= -github.com/go-kit/log v0.2.0/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0= -github.com/go-kit/log v0.2.1/go.mod h1:NwTd00d/i8cPZ3xOwwiv2PO5MOcx78fFErGNcVmBjv0= -github.com/go-latex/latex v0.0.0-20210118124228-b3d85cf34e07/go.mod h1:CO1AlKB2CSIqUrmQPqA0gdRIlnLEY0gK5JGjh37zN5U= -github.com/go-latex/latex v0.0.0-20210823091927-c0d11ff05a81/go.mod h1:SX0U8uGpxhq9o2S/CELCSUxEWWAuoCUcVCQWv7G2OCk= github.com/go-logfmt/logfmt v0.3.0/go.mod h1:Qt1PoO58o5twSAckw1HlFXLmHsOX5/0LbT9GBnD5lWE= github.com/go-logfmt/logfmt v0.4.0/go.mod h1:3RMwSq7FuexP4Kalkev3ejPJsZTpXXBr9+V4qmtdjCk= -github.com/go-logfmt/logfmt v0.5.0/go.mod h1:wCYkCAKZfumFQihp8CzCvQ3paCTfi41vtzG1KdI/P7A= -github.com/go-logfmt/logfmt v0.5.1/go.mod h1:WYhtIu8zTZfxdn5+rREduYbwxfcBr/Vr6KEVveWlfTs= -github.com/go-logr/logr v0.1.0/go.mod h1:ixOQHD9gLJUVQQ2ZOR7zLEifBX6tGkNJF4QyIY7sIas= -github.com/go-logr/logr v0.2.0/go.mod h1:z6/tIYblkpsD+a4lm/fGIIU9mZ+XfAiaFtq7xTgseGU= -github.com/go-logr/logr v1.2.0/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= github.com/go-logr/logr v1.2.2/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= -github.com/go-logr/logr v1.2.3/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= -github.com/go-logr/logr v1.2.4/go.mod h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A= -github.com/go-logr/logr v1.3.0/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= -github.com/go-logr/logr v1.4.1/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY= github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag= github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE= -github.com/go-logr/zapr v1.2.3/go.mod h1:eIauM6P8qSvTw5o2ez6UEAfGjQKrxQTl5EoK+Qa2oG4= -github.com/go-logr/zapr v1.2.4/go.mod h1:FyHWQIzQORZ0QVE1BtVHv3cKtNLuXsbNLtpuhNapBOA= github.com/go-logr/zapr v1.3.0 h1:XGdV8XW8zdwFiwOA2Dryh1gj2KRQyOOoNmBy4EplIcQ= github.com/go-logr/zapr v1.3.0/go.mod h1:YKepepNBd1u/oyhd/yQmtjVXmm9uML4IXUgMOwR8/Gg= -github.com/go-ole/go-ole v1.2.6 h1:/Fpf6oFPoeFik9ty7siob0G6Ke8QvQEuVcuChpwXzpY= -github.com/go-ole/go-ole v1.2.6/go.mod h1:pprOEPIfldk/42T2oK7lQ4v4JSDwmV0As9GaiUsvbm0= -github.com/go-openapi/analysis v0.0.0-20180825180245-b006789cd277/go.mod h1:k70tL6pCuVxPJOHXQ+wIac1FUrvNkHolPie/cLEU6hI= -github.com/go-openapi/analysis v0.17.0/go.mod h1:IowGgpVeD0vNm45So8nr+IcQ3pxVtpRoBWb8PVZO0ik= -github.com/go-openapi/analysis v0.18.0/go.mod h1:IowGgpVeD0vNm45So8nr+IcQ3pxVtpRoBWb8PVZO0ik= -github.com/go-openapi/analysis v0.19.2/go.mod h1:3P1osvZa9jKjb8ed2TPng3f0i/UY9snX6gxi44djMjk= -github.com/go-openapi/analysis v0.19.5/go.mod h1:hkEAkxagaIvIP7VTn8ygJNkd4kAYON2rCu0v0ObL0AU= -github.com/go-openapi/errors v0.17.0/go.mod h1:LcZQpmvG4wyF5j4IhA73wkLFQg+QJXOQHVjmcZxhka0= -github.com/go-openapi/errors v0.18.0/go.mod h1:LcZQpmvG4wyF5j4IhA73wkLFQg+QJXOQHVjmcZxhka0= -github.com/go-openapi/errors v0.19.2/go.mod h1:qX0BLWsyaKfvhluLejVpVNwNRdXZhEbTA4kxxpKBC94= -github.com/go-openapi/jsonpointer v0.17.0/go.mod h1:cOnomiV+CVVwFLk0A/MExoFMjwdsUdVpsRhURCKh+3M= -github.com/go-openapi/jsonpointer v0.18.0/go.mod h1:cOnomiV+CVVwFLk0A/MExoFMjwdsUdVpsRhURCKh+3M= -github.com/go-openapi/jsonpointer v0.19.2/go.mod h1:3akKfEdA7DF1sugOqz1dVQHBcuDBPKZGEoHC/NkiQRg= -github.com/go-openapi/jsonpointer v0.19.3/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= github.com/go-openapi/jsonpointer v0.19.6 h1:eCs3fxoIi3Wh6vtgmLTOjdhSpiqphQ+DaPn38N2ZdrE= github.com/go-openapi/jsonpointer v0.19.6/go.mod h1:osyAmYz/mB/C3I+WsTTSgw1ONzaLJoLCyoi6/zppojs= -github.com/go-openapi/jsonreference v0.17.0/go.mod h1:g4xxGn04lDIRh0GJb5QlpE3HfopLOL6uZrK/VgnsK9I= -github.com/go-openapi/jsonreference v0.18.0/go.mod h1:g4xxGn04lDIRh0GJb5QlpE3HfopLOL6uZrK/VgnsK9I= -github.com/go-openapi/jsonreference v0.19.2/go.mod h1:jMjeRr2HHw6nAVajTXJ4eiUwohSTlpa0o73RUL1owJc= -github.com/go-openapi/jsonreference v0.19.3/go.mod h1:rjx6GuL8TTa9VaixXglHmQmIL98+wF9xc8zWvFonSJ8= -github.com/go-openapi/jsonreference v0.20.1/go.mod h1:Bl1zwGIM8/wsvqjsOQLJ/SH+En5Ap4rVB5KVcIDZG2k= github.com/go-openapi/jsonreference v0.20.2 h1:3sVjiK66+uXK/6oQ8xgcRKcFgQ5KXa2KvnJRumpMGbE= github.com/go-openapi/jsonreference v0.20.2/go.mod h1:Bl1zwGIM8/wsvqjsOQLJ/SH+En5Ap4rVB5KVcIDZG2k= -github.com/go-openapi/loads v0.17.0/go.mod h1:72tmFy5wsWx89uEVddd0RjRWPZm92WRLhf7AC+0+OOU= -github.com/go-openapi/loads v0.18.0/go.mod h1:72tmFy5wsWx89uEVddd0RjRWPZm92WRLhf7AC+0+OOU= -github.com/go-openapi/loads v0.19.0/go.mod h1:72tmFy5wsWx89uEVddd0RjRWPZm92WRLhf7AC+0+OOU= -github.com/go-openapi/loads v0.19.2/go.mod h1:QAskZPMX5V0C2gvfkGZzJlINuP7Hx/4+ix5jWFxsNPs= -github.com/go-openapi/loads v0.19.4/go.mod h1:zZVHonKd8DXyxyw4yfnVjPzBjIQcLt0CCsn0N0ZrQsk= -github.com/go-openapi/runtime v0.0.0-20180920151709-4f900dc2ade9/go.mod h1:6v9a6LTXWQCdL8k1AO3cvqx5OtZY/Y9wKTgaoP6YRfA= -github.com/go-openapi/runtime v0.19.0/go.mod h1:OwNfisksmmaZse4+gpV3Ne9AyMOlP1lt4sK4FXt0O64= -github.com/go-openapi/runtime v0.19.4/go.mod h1:X277bwSUBxVlCYR3r7xgZZGKVvBd/29gLDlFGtJ8NL4= -github.com/go-openapi/spec v0.17.0/go.mod h1:XkF/MOi14NmjsfZ8VtAKf8pIlbZzyoTvZsdfssdxcBI= -github.com/go-openapi/spec v0.18.0/go.mod h1:XkF/MOi14NmjsfZ8VtAKf8pIlbZzyoTvZsdfssdxcBI= -github.com/go-openapi/spec v0.19.2/go.mod h1:sCxk3jxKgioEJikev4fgkNmwS+3kuYdJtcsZsD5zxMY= -github.com/go-openapi/spec v0.19.3/go.mod h1:FpwSN1ksY1eteniUU7X0N/BgJ7a4WvBFVA8Lj9mJglo= -github.com/go-openapi/strfmt v0.17.0/go.mod h1:P82hnJI0CXkErkXi8IKjPbNBM6lV6+5pLP5l494TcyU= -github.com/go-openapi/strfmt v0.18.0/go.mod h1:P82hnJI0CXkErkXi8IKjPbNBM6lV6+5pLP5l494TcyU= -github.com/go-openapi/strfmt v0.19.0/go.mod h1:+uW+93UVvGGq2qGaZxdDeJqSAqBqBdl+ZPMF/cC8nDY= -github.com/go-openapi/strfmt v0.19.3/go.mod h1:0yX7dbo8mKIvc3XSKp7MNfxw4JytCfCD6+bY1AVL9LU= -github.com/go-openapi/swag v0.17.0/go.mod h1:AByQ+nYG6gQg71GINrmuDXCPWdL640yX49/kXLo40Tg= -github.com/go-openapi/swag v0.18.0/go.mod h1:AByQ+nYG6gQg71GINrmuDXCPWdL640yX49/kXLo40Tg= -github.com/go-openapi/swag v0.19.2/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= -github.com/go-openapi/swag v0.19.5/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= github.com/go-openapi/swag v0.22.3/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14= github.com/go-openapi/swag v0.22.4 h1:QLMzNJnMGPRNDCbySlcj1x01tzU8/9LTTL9hZZZogBU= github.com/go-openapi/swag v0.22.4/go.mod h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14= -github.com/go-openapi/validate v0.18.0/go.mod h1:Uh4HdOzKt19xGIGm1qHf/ofbX1YQ4Y+MYsct2VUrAJ4= -github.com/go-openapi/validate v0.19.2/go.mod h1:1tRCw7m3jtI8eNWEEliiAqUIcBztB2KDnRCRMUi7GTA= -github.com/go-openapi/validate v0.19.5/go.mod h1:8DJv2CVJQ6kGNpFW6eV9N3JviE1C85nY1c2z52x1Gk4= -github.com/go-pdf/fpdf v0.5.0/go.mod h1:HzcnA+A23uwogo0tp9yU+l3V+KXhiESpt1PMayhOh5M= -github.com/go-pdf/fpdf v0.6.0/go.mod h1:HzcnA+A23uwogo0tp9yU+l3V+KXhiESpt1PMayhOh5M= -github.com/go-playground/assert/v2 v2.2.0 h1:JvknZsQTYeFEAhQwI4qEt9cyV5ONwRHC+lYKSsYSR8s= -github.com/go-playground/assert/v2 v2.2.0/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= -github.com/go-playground/locales v0.14.1 h1:EWaQ/wswjilfKLTECiXz7Rh+3BjFhfDFKv/oXslEjJA= -github.com/go-playground/locales v0.14.1/go.mod h1:hxrqLVvrK65+Rwrd5Fc6F2O76J/NuW9t0sjnWqG1slY= -github.com/go-playground/universal-translator v0.18.1 h1:Bcnm0ZwsGyWbCzImXv+pAJnYK9S473LQFuzCbDbfSFY= -github.com/go-playground/universal-translator v0.18.1/go.mod h1:xekY+UJKNuX9WP91TpwSH2VMlDf28Uj24BCp08ZFTUY= -github.com/go-playground/validator/v10 v10.14.0 h1:vgvQWe3XCz3gIeFDm/HnTIbj6UGmg/+t63MyGU2n5js= -github.com/go-playground/validator/v10 v10.14.0/go.mod h1:9iXMNT7sEkjXb0I+enO7QXmzG6QCsPWY4zveKFVRSyU= github.com/go-resty/resty/v2 v2.9.1 h1:PIgGx4VrHvag0juCJ4dDv3MiFRlDmP0vicBucwf+gLM= github.com/go-resty/resty/v2 v2.9.1/go.mod h1:4/GYJVjh9nhkhGR6AUNW3XhpDYNUr+Uvy9gV/VGZIy4= github.com/go-sql-driver/mysql v1.6.0 h1:BCTh4TKNUYmOmMUcQ3IipzF5prigylS7XXjEkfCHuOE= github.com/go-sql-driver/mysql v1.6.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LBy8hT2VhHyBg= github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= -github.com/go-task/slim-sprig v0.0.0-20210107165309-348f09dbbbc0/go.mod h1:fyg7847qk6SyHyPtNmDHnmrv/HOrqktSC+C9fM+CJOE= github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572 h1:tfuBGBXKqDEevZMzYi5KSi8KkcZtzBcTgAUUtapy0OI= -github.com/go-task/slim-sprig v0.0.0-20230315185526-52ccab3ef572/go.mod h1:9Pwr4B2jHnOSGXyyzV8ROjYa2ojvAY6HCGYYfMoC3Ls= github.com/go-task/slim-sprig/v3 v3.0.0 h1:sUs3vkvUymDpBKi3qH1YSqBQk9+9D/8M2mN1vB6EwHI= github.com/go-task/slim-sprig/v3 v3.0.0/go.mod h1:W848ghGpv3Qj3dhTPRyJypKRiqCdHZiAzKg9hl15HA8= -github.com/go-test/deep v1.0.3 h1:ZrJSEWsXzPOxaZnFteGEfooLba+ju3FYIbOrS+rQd68= -github.com/go-test/deep v1.0.3/go.mod h1:wGDj63lr65AM2AQyKZd/NYHGb0R+1RLqB8NKt3aSFNA= github.com/gobuffalo/logger v1.0.6 h1:nnZNpxYo0zx+Aj9RfMPBm+x9zAU2OayFh/xrAWi34HU= github.com/gobuffalo/logger v1.0.6/go.mod h1:J31TBEHR1QLV2683OXTAItYIg8pv2JMHnF/quuAbMjs= github.com/gobuffalo/packd v1.0.1 h1:U2wXfRr4E9DH8IdsDLlRFwTZTK7hLfq9qT/QHXGVe/0= @@ -1144,91 +305,48 @@ github.com/gobuffalo/packr/v2 v2.8.3 h1:xE1yzvnO56cUC0sTpKR3DIbxZgB54AftTFMhB2XE github.com/gobuffalo/packr/v2 v2.8.3/go.mod h1:0SahksCVcx4IMnigTjiFuyldmTrdTctXsOdiU5KwbKc= github.com/gobwas/glob v0.2.3 h1:A4xDbljILXROh+kObIiy5kIaPYD8e96x1tgBhUI5J+Y= github.com/gobwas/glob v0.2.3/go.mod h1:d3Ez4x06l9bZtSvzIay5+Yzi0fmZzPgnTbPcKjJAkT8= -github.com/goccy/go-json v0.9.11/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= -github.com/goccy/go-json v0.10.2 h1:CrxCmQqYDkv1z7lO7Wbh2HN93uovUHgrECaO5ZrCXAU= -github.com/goccy/go-json v0.10.2/go.mod h1:6MelG93GURQebXPDq3khkgXZkazVtN9CRI+MGFi0w8I= -github.com/godbus/dbus/v5 v5.0.3/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= -github.com/godbus/dbus/v5 v5.0.4/go.mod h1:xhWf0FNVPg57R7Z0UbKHbJfkEywrmjJnf7w5xrFpKfA= github.com/gofrs/flock v0.8.1 h1:+gYjHKf32LDeiEEFhQaotPbLuUXjY5ZqxKgXy7n59aw= github.com/gofrs/flock v0.8.1/go.mod h1:F1TvTiK9OcQqauNUHlbJvyl9Qa1QvF/gOUDKA14jxHU= github.com/gogo/protobuf v1.1.1/go.mod h1:r8qH/GZQm5c6nD/R0oafs1akxWv10x8SbQlK7atdtwQ= -github.com/gogo/protobuf v1.2.1/go.mod h1:hp+jE20tsWTFYpLwKvXlhS1hjn+gTNwPg2I6zVXpSg4= -github.com/gogo/protobuf v1.2.2-0.20190723190241-65acae22fc9d/go.mod h1:SlYgWuQ5SjCEi6WLHjHCa1yvBfUnHcTbrrZtXPKa29o= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= -github.com/golang-jwt/jwt v3.2.2+incompatible h1:IfV12K8xAKAnZqdXVzCZ+TOjboZ2keLg81eXfW3O+oY= -github.com/golang-jwt/jwt/v4 v4.4.2/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= +github.com/golang-jwt/jwt v3.2.1+incompatible h1:73Z+4BJcrTC+KczS6WvTPvRGOp1WmfEP4Q1lOd9Z/+c= github.com/golang-jwt/jwt/v4 v4.5.0 h1:7cYmW1XlMY7h7ii7UhUyChSgS5wUJEnm9uZVTGqOWzg= github.com/golang-jwt/jwt/v4 v4.5.0/go.mod h1:m21LjoU+eqJr34lmDMbreY2eSTRJ1cv77w39/MY0Ch0= github.com/golang-jwt/jwt/v5 v5.2.1 h1:OuVbFODueb089Lh128TAcimifWaLhJwVflnrgM17wHk= github.com/golang-jwt/jwt/v5 v5.2.1/go.mod h1:pqrtFR0X4osieyHYxtmOUWsAWrfe1Q5UVIyoH402zdk= -github.com/golang/freetype v0.0.0-20170609003504-e2365dfdc4a0/go.mod h1:E/TSTwGwJL78qG/PmXZO1EjYhfJinVAhrmmHX6Z8B9k= github.com/golang/glog v0.0.0-20160126235308-23def4e6c14b/go.mod h1:SBH7ygxi8pfUlaOkMMuAQtPIUF8ecWP5IEl/CR7VP2Q= -github.com/golang/glog v1.0.0/go.mod h1:EWib/APOK0SL3dFbYqvxE3UYd8E6s1ouQ7iEp/0LWV4= -github.com/golang/glog v1.1.0/go.mod h1:pfYeQZ3JWZoXTV5sFc986z3HTpwQs9At6P4ImfuP3NQ= -github.com/golang/groupcache v0.0.0-20160516000752-02826c3e7903/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20190129154638-5b532d6fd5ef/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20190702054246-869f871628b6/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= -github.com/golang/groupcache v0.0.0-20191227052852-215e87163ea7/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20200121045136-8c9f03a8e57e/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da h1:oI5xCqsCo564l8iNU+DwB5epxmsaqB+rhGL0m5jtYqE= github.com/golang/groupcache v0.0.0-20210331224755-41bb18bfe9da/go.mod h1:cIg4eruTrX1D+g88fzRXU5OdNfaM+9IcxsU14FzY7Hc= github.com/golang/mock v1.1.1/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/mock v1.2.0/go.mod h1:oTYuIxOrZwtPieC+H1uAHpcLFnEyAGVDL/k47Jfbm0A= -github.com/golang/mock v1.3.1/go.mod h1:sBzyDLLjw3U8JLTeZvSv8jJB+tU5PVekmnlKIyFUx0Y= -github.com/golang/mock v1.4.0/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= -github.com/golang/mock v1.4.1/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= -github.com/golang/mock v1.4.3/go.mod h1:UOMv5ysSaYNkG+OFQykRIcU/QvvxJf3p21QfJ2Bt3cw= -github.com/golang/mock v1.4.4/go.mod h1:l3mdAwkq5BuhzHwde/uurv3sEJeZMXNpwsxVWU71h+4= -github.com/golang/mock v1.5.0/go.mod h1:CWnOUgYIOo4TcNZ0wHX3YZCqsaM1I1Jvs6v3mP3KVu8= -github.com/golang/mock v1.6.0/go.mod h1:p6yTPP+5HYm5mzsMV8JkE6ZKdX+/wYM6Hr+LicevLPs= github.com/golang/protobuf v1.0.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.1.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.2.0/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.1/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= github.com/golang/protobuf v1.3.2/go.mod h1:6lQm79b+lXiMfvg/cZm0SGofjICqVBUtrP5yJMmIC1U= -github.com/golang/protobuf v1.3.3/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= -github.com/golang/protobuf v1.3.4/go.mod h1:vzj43D7+SQXF/4pzW/hwtAqwc6iTitCiVSaWz5lYuqw= -github.com/golang/protobuf v1.3.5/go.mod h1:6O5/vntMXwX2lRkT1hjjk0nAC1IDOTvTlVgjlRvqsdk= github.com/golang/protobuf v1.4.0-rc.1/go.mod h1:ceaxUfeHdC40wWswd/P6IGgMaK3YpKi5j83Wpe3EHw8= github.com/golang/protobuf v1.4.0-rc.1.0.20200221234624-67d41d38c208/go.mod h1:xKAWHe0F5eneWXFV3EuXVDTCmh+JuBKY0li0aMyXATA= github.com/golang/protobuf v1.4.0-rc.2/go.mod h1:LlEzMj4AhA7rCAGe4KMBDvJI+AwstrUpVNzEA03Pprs= github.com/golang/protobuf v1.4.0-rc.4.0.20200313231945-b860323f09d0/go.mod h1:WU3c8KckQ9AFe+yFwt9sWVRKCVIyN9cPHBJSNnbL67w= github.com/golang/protobuf v1.4.0/go.mod h1:jodUvKwWbYaEsadDk5Fwe5c77LiNKVO9IDvqG2KuDX0= github.com/golang/protobuf v1.4.1/go.mod h1:U8fpvMrcmy5pZrNK1lt4xCsGvpyWQ/VVv6QDs8UjoX8= -github.com/golang/protobuf v1.4.2/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= github.com/golang/protobuf v1.4.3/go.mod h1:oDoupMAO8OvCJWAcko0GGGIgR6R6ocIYbsSw735rRwI= -github.com/golang/protobuf v1.5.0/go.mod h1:FsONVRAS9T7sI+LIUmWTfcYkHO4aIWwzhcaSAoJOfIk= -github.com/golang/protobuf v1.5.1/go.mod h1:DopwsBzvsk0Fs44TXzsVbJyPhcCPeIwnvohx4u74HPM= -github.com/golang/protobuf v1.5.2/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= -github.com/golang/protobuf v1.5.3/go.mod h1:XVQd3VNwM+JqD3oG2Ue2ip4fOMUkwXdXDdiuN0vRsmY= github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= -github.com/golang/snappy v0.0.3/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/golang/snappy v0.0.4/go.mod h1:/XxbfmMg8lxefKM7IXC3fBNl/7bRcc72aCRzEWrmP2Q= -github.com/google/btree v0.0.0-20180813153112-4030bb1f1f0c/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/btree v1.0.0/go.mod h1:lNA+9X1NB3Zf8V7Ke586lFgjr2dZNuvo3lPJSGZ5JPQ= -github.com/google/btree v1.0.1/go.mod h1:xXMiIv4Fb/0kKde4SpL7qlzvu5cMJDRkFDxJfI9uaxA= github.com/google/btree v1.1.2 h1:xf4v41cLI2Z6FxbKm+8Bu+m8ifhj15JuZ9sa0jZCMUU= github.com/google/btree v1.1.2/go.mod h1:qOPhT0dTNdNzV6Z/lhRX0YXUafgPLFUh+gZMl761Gm4= -github.com/google/cel-go v0.16.1/go.mod h1:HXZKzB0LXqer5lHHgfWAnlYwJaQBDKMjxjulNQzhwhY= -github.com/google/flatbuffers v2.0.8+incompatible/go.mod h1:1AeVuKshWv4vARoZatz6mlQ0JxURH0Kv5+zNeJKJCa8= github.com/google/gnostic-models v0.6.8 h1:yo/ABAfM5IMRsS1VnXjTBvUb61tFIHozhlYvRgGre9I= github.com/google/gnostic-models v0.6.8/go.mod h1:5n7qKqH0f5wFt+aWF8CW6pZLLNOfYuF5OpfBSENuI8U= github.com/google/go-cmp v0.2.0/go.mod h1:oXzfMopK8JAjlY9xF4vHSVASa0yLyX7SntLO5aqRK0M= github.com/google/go-cmp v0.3.0/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.3.1/go.mod h1:8QqcDgzrUqlUb/G2PQTWiueGozuR1884gddMywk6iLU= github.com/google/go-cmp v0.4.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.4.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.0/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.1/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.2/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.3/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.4/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.5/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= github.com/google/go-cmp v0.5.6/go.mod h1:v8dTdLbMG2kIc/vJvl+f65V22dbkXbowE6jgT/gNBxE= -github.com/google/go-cmp v0.5.7/go.mod h1:n+brtR0CgQNWTVd5ZUFpTBC8YFBDLK/h/bpaJ8/DtOE= -github.com/google/go-cmp v0.5.8/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= @@ -1237,174 +355,75 @@ github.com/google/go-github/v45 v45.2.0/go.mod h1:FObaZJEDSTa/WGCzZ2Z3eoCDXWJKMe github.com/google/go-querystring v1.1.0 h1:AnCroh3fv4ZBgVIf1Iwtovgjaw/GiKJo8M8yD/fhyJ8= github.com/google/go-querystring v1.1.0/go.mod h1:Kcdr2DB4koayq7X8pmAG4sNG59So17icRSOU623lUBU= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/google/gofuzz v1.1.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/google/martian v2.1.0+incompatible h1:/CP5g8u/VJHijgedC/Legn3BAbAaWPgecwXBIDzw5no= -github.com/google/martian v2.1.0+incompatible/go.mod h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs= -github.com/google/martian/v3 v3.0.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= -github.com/google/martian/v3 v3.1.0/go.mod h1:y5Zk1BBys9G+gd6Jrk0W3cC1+ELVxBWuIGO+w/tUAp0= -github.com/google/martian/v3 v3.2.1/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= github.com/google/martian/v3 v3.3.2 h1:IqNFLAmvJOgVlpdEBiQbDc2EwKW77amAycfTuWKdfvw= github.com/google/martian/v3 v3.3.2/go.mod h1:oBOf6HBosgwRXnUGWUB05QECsc6uvmMiJ3+6W4l/CUk= -github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= -github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc= -github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200212024743-f11f1df84d12/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200229191704-1ebb73c60ed3/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200430221834-fc25d7d30c6d/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20200708004538-1a94d8640e99/go.mod h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM= -github.com/google/pprof v0.0.0-20201023163331-3e6fc7fc9c4c/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20201203190320-1bf35d6f28c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20201218002935-b9804c9f04c2/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210122040257-d980be63207e/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210226084205-cbba55b83ad5/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210407192527-94a9f03dee38/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210601050228-01bbb1931b22/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210609004039-a478d1d731e9/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= -github.com/google/pprof v0.0.0-20210720184732-4bb14d4b1be1/go.mod h1:kpwsk12EmLew5upagYY7GY0pfYCcupk39gWOCRROcvE= github.com/google/pprof v0.0.0-20240525223248-4bfdf5a9a2af h1:kmjWCqn2qkEml422C2Rrd27c3VGxi6a/6HNq8QmHRKM= github.com/google/pprof v0.0.0-20240525223248-4bfdf5a9a2af/go.mod h1:K1liHPHnj73Fdn/EKuT8nrFqBihUSKXoLYU0BuatOYo= -github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm40UhjYkI= -github.com/google/s2a-go v0.1.0/go.mod h1:OJpEgntRZo8ugHpF9hkoLJbS5dSI20XZeXJ9JVywLlM= -github.com/google/s2a-go v0.1.3/go.mod h1:Ej+mSEMGRnqRzjc7VtF+jdBwYG5fuJfiZ8ELkjEwM0A= -github.com/google/s2a-go v0.1.4/go.mod h1:Ej+mSEMGRnqRzjc7VtF+jdBwYG5fuJfiZ8ELkjEwM0A= github.com/google/s2a-go v0.1.7 h1:60BLSyTrOV4/haCDW4zb1guZItoSq8foHCXrAnjBo/o= github.com/google/s2a-go v0.1.7/go.mod h1:50CgR4k1jNlWBu4UfS4AcfhVe1r6pdZPygJ3R8F0Qdw= github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 h1:El6M4kTTCOh6aBiKaUGG7oYTSPP8MxqL4YI3kZKwcP4= github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3pAXIBCelhxNneeOaAeabZDe5s4K6zSpQ= -github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.1/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.1.2/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.2.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.3.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/googleapis/enterprise-certificate-proxy v0.0.0-20220520183353-fd19c99a87aa/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8= -github.com/googleapis/enterprise-certificate-proxy v0.1.0/go.mod h1:17drOmN3MwGY7t0e+Ei9b45FFGA3fBs3x36SsCg1hq8= -github.com/googleapis/enterprise-certificate-proxy v0.2.0/go.mod h1:8C0jb7/mgJe/9KK8Lm7X9ctZC2t60YyIpYEI16jx0Qg= -github.com/googleapis/enterprise-certificate-proxy v0.2.1/go.mod h1:AwSRAtLfXpU5Nm3pW+v7rGDHp09LsPtGY9MduiEsR9k= -github.com/googleapis/enterprise-certificate-proxy v0.2.3/go.mod h1:AwSRAtLfXpU5Nm3pW+v7rGDHp09LsPtGY9MduiEsR9k= github.com/googleapis/enterprise-certificate-proxy v0.3.2 h1:Vie5ybvEvT75RniqhfFxPRy3Bf7vr3h0cechB90XaQs= github.com/googleapis/enterprise-certificate-proxy v0.3.2/go.mod h1:VLSiSSBs/ksPL8kq3OBOQ6WRI2QnaFynd1DCjZ62+V0= -github.com/googleapis/gax-go/v2 v2.0.4/go.mod h1:0Wqv26UfaUD9n4G6kQubkQ+KchISgw+vpHVxEJEs9eg= -github.com/googleapis/gax-go/v2 v2.0.5/go.mod h1:DWXyrwAJ9X0FpwwEdw+IPEYBICEFu5mhpdKc/us6bOk= -github.com/googleapis/gax-go/v2 v2.1.0/go.mod h1:Q3nei7sK6ybPYH7twZdmQpAd1MKb7pfu6SK+H1/DsU0= -github.com/googleapis/gax-go/v2 v2.1.1/go.mod h1:hddJymUZASv3XPyGkUpKj8pPO47Rmb0eJc8R6ouapiM= -github.com/googleapis/gax-go/v2 v2.2.0/go.mod h1:as02EH8zWkzwUoLbBaFeQ+arQaj/OthfcblKl4IGNaM= -github.com/googleapis/gax-go/v2 v2.3.0/go.mod h1:b8LNqSzNabLiUpXKkY7HAR5jr6bIT99EXz9pXxye9YM= -github.com/googleapis/gax-go/v2 v2.4.0/go.mod h1:XOTVJ59hdnfJLIP/dh8n5CGryZR2LxK9wbMD5+iXC6c= -github.com/googleapis/gax-go/v2 v2.5.1/go.mod h1:h6B0KMMFNtI2ddbGJn3T3ZbwkeT6yqEF02fYlzkUCyo= -github.com/googleapis/gax-go/v2 v2.6.0/go.mod h1:1mjbznJAPHFpesgE5ucqfYEscaz5kMdcIDwU/6+DDoY= -github.com/googleapis/gax-go/v2 v2.7.0/go.mod h1:TEop28CZZQ2y+c0VxMUmu1lV+fQx57QpBWsYpwqHJx8= -github.com/googleapis/gax-go/v2 v2.7.1/go.mod h1:4orTrqY6hXxxaUL4LHIPl6lGo8vAE38/qKbhSAKP6QI= -github.com/googleapis/gax-go/v2 v2.8.0/go.mod h1:4orTrqY6hXxxaUL4LHIPl6lGo8vAE38/qKbhSAKP6QI= -github.com/googleapis/gax-go/v2 v2.10.0/go.mod h1:4UOEnMCrxsSqQ940WnTiD6qJ63le2ev3xfyagutxiPw= -github.com/googleapis/gax-go/v2 v2.11.0/go.mod h1:DxmR61SGKkGLa2xigwuZIQpkCI2S5iydzRfb3peWZJI= github.com/googleapis/gax-go/v2 v2.12.0 h1:A+gCJKdRfqXkr+BIRGtZLibNXf0m1f9E4HG56etFpas= github.com/googleapis/gax-go/v2 v2.12.0/go.mod h1:y+aIqrI5eb1YGMVJfuV3185Ts/D7qKpsEkdD5+I6QGU= -github.com/googleapis/gnostic v0.0.0-20170729233727-0c5108395e2d/go.mod h1:sJBsCZ4ayReDTBIg8b9dl28c5xFWyhBTVRp3pOg5EKY= -github.com/googleapis/go-type-adapters v1.0.0/go.mod h1:zHW75FOG2aur7gAO2B+MLby+cLsWGBF62rFAi7WjWO4= -github.com/googleapis/google-cloud-go-testing v0.0.0-20200911160855-bcd43fbb19e8/go.mod h1:dvDLG8qkwmyD9a/MJJN3XJcT3xFxOKAvTZGvuZmac9g= -github.com/gopherjs/gopherjs v0.0.0-20181017120253-0766667cb4d1/go.mod h1:wJfORRmW1u3UXTncJ5qlYoELFm8eSnnEO6hX4iZ3EWY= github.com/gorilla/handlers v1.5.2 h1:cLTUSsNkgcwhgRqvCNmdbRWG0A3N4F+M2nWKdScwyEE= github.com/gorilla/handlers v1.5.2/go.mod h1:dX+xVpaxdSw+q0Qek8SSsl3dfMk3jNddUkMzo0GtH0w= github.com/gorilla/mux v1.8.1 h1:TuBL49tXwgrFYWhqrNgrUNEY92u81SPhu7sTdzQEiWY= github.com/gorilla/mux v1.8.1/go.mod h1:AKf9I4AEqPTmMytcMc0KkNouC66V3BtZ4qD5fmWSiMQ= -github.com/gorilla/websocket v0.0.0-20170926233335-4201258b820c/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= -github.com/gorilla/websocket v1.4.0/go.mod h1:E7qHFY5m1UJ88s3WnNqhKjPHQ0heANvMoAMk2YaljkQ= -github.com/gorilla/websocket v1.4.2/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/gorilla/websocket v1.5.0 h1:PPwGk2jz7EePpoHN/+ClbZu8SPxiqlu12wZP/3sWmnc= github.com/gorilla/websocket v1.5.0/go.mod h1:YR8l580nyteQvAITg2hZ9XVh4b55+EU/adAjf1fMHhE= github.com/gosuri/uitable v0.0.4 h1:IG2xLKRvErL3uhY6e1BylFzG+aJiwQviDDTfOKeKTpY= github.com/gosuri/uitable v0.0.4/go.mod h1:tKR86bXuXPZazfOTG1FIzvjIdXzd0mo4Vtn16vt0PJo= -github.com/gregjones/httpcache v0.0.0-20180305231024-9cad4c3443a7/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79 h1:+ngKgrYPPJrOjhax5N+uePQ0Fh1Z7PheYoUI/0nzkPA= github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79/go.mod h1:FecbI9+v66THATjSRHfNgh1IVFe/9kFxbXtjV0ctIMA= -github.com/grpc-ecosystem/go-grpc-middleware v1.0.0/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= -github.com/grpc-ecosystem/go-grpc-middleware v1.0.1-0.20190118093823-f849b5445de4/go.mod h1:FiyG127CGDf3tlThmgyCl78X/SZQqEOJBCDaAfeWzPs= -github.com/grpc-ecosystem/go-grpc-middleware v1.3.0/go.mod h1:z0ButlSOZa5vEBq9m2m2hlwIgKw+rp3sdCBRoJY+30Y= -github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0/go.mod h1:8NvIoxWQoOIhqOTXgfV/d3M/q6VIi02HzZEHgUlZvzk= -github.com/grpc-ecosystem/grpc-gateway v1.9.0/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= -github.com/grpc-ecosystem/grpc-gateway v1.9.5/go.mod h1:vNeuVxBJEsws4ogUvrchl83t/GYV9WGTSLVdBhOQFDY= github.com/grpc-ecosystem/grpc-gateway v1.16.0 h1:gmcG1KaJ57LophUzW0Hy8NmPhnMZb4M0+kPpLofRdBo= -github.com/grpc-ecosystem/grpc-gateway v1.16.0/go.mod h1:BDjrQk3hbvj6Nolgz8mAMFbcEtjT1g+wF4CSlocrBnw= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.7.0/go.mod h1:hgWBS7lorOAVIJEQMi4ZsPv9hVvWI6+ch50m39Pf2Ks= -github.com/grpc-ecosystem/grpc-gateway/v2 v2.11.3/go.mod h1:o//XUCC/F+yRGJoPO/VU0GSB0f8Nhgmxx0VIRUvaC0w= github.com/grpc-ecosystem/grpc-gateway/v2 v2.16.0 h1:YBftPWNWd4WwGqtY2yeZL2ef8rHAxPBD8KFhJpmcqms= github.com/grpc-ecosystem/grpc-gateway/v2 v2.16.0/go.mod h1:YN5jB8ie0yfIUg6VvR9Kz84aCaG7AsGZnLjhHbUqwPg= -github.com/hashicorp/consul/api v1.1.0/go.mod h1:VmuI/Lkw1nC05EYQWNKwWGbkg+FbDBtguAZLlVdkD9Q= -github.com/hashicorp/consul/sdk v0.1.1/go.mod h1:VKf9jXwCTEY1QZP2MOLRhb5i/I/ssyNV1vwHyQBF0x8= github.com/hashicorp/errwrap v1.0.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= github.com/hashicorp/errwrap v1.1.0 h1:OxrOeh75EUXMY8TBjag2fzXGZ40LB6IKw45YeGUDY2I= github.com/hashicorp/errwrap v1.1.0/go.mod h1:YH+1FKiLXxHSkmPseP+kNlulaMuP3n2brvKWEqk/Jc4= -github.com/hashicorp/go-cleanhttp v0.5.1/go.mod h1:JpRdi6/HCYpAwUzNwuwqhbovhLtngrth3wmdIIUrZ80= github.com/hashicorp/go-cleanhttp v0.5.2 h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9neXJWAZQ= github.com/hashicorp/go-cleanhttp v0.5.2/go.mod h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48= github.com/hashicorp/go-hclog v1.6.3 h1:Qr2kF+eVWjTiYmU7Y31tYlP1h0q/X3Nl3tPGdaB11/k= github.com/hashicorp/go-hclog v1.6.3/go.mod h1:W4Qnvbt70Wk/zYJryRzDRU/4r0kIg0PVHBcfoyhpF5M= -github.com/hashicorp/go-immutable-radix v1.0.0/go.mod h1:0y9vanUI8NX6FsYoO3zeMjhV/C5i9g4Q3DwcSNZ4P60= -github.com/hashicorp/go-msgpack v0.5.3/go.mod h1:ahLV/dePpqEmjfWmKiqvPkv/twdG7iPBM1vqhUKIvfM= -github.com/hashicorp/go-multierror v1.0.0/go.mod h1:dHtQlpGsu+cZNNAkkCN/P3hoUDHhCYQXV3UM06sGGrk= github.com/hashicorp/go-multierror v1.1.1 h1:H5DkEtf6CXdFp0N0Em5UCwQpXMWke8IA0+lD48awMYo= github.com/hashicorp/go-multierror v1.1.1/go.mod h1:iw975J/qwKPdAO1clOe2L8331t/9/fmwbPZ6JB6eMoM= github.com/hashicorp/go-retryablehttp v0.7.7 h1:C8hUCYzor8PIfXHa4UrZkU4VvK8o9ISHxT2Q8+VepXU= github.com/hashicorp/go-retryablehttp v0.7.7/go.mod h1:pkQpWZeYWskR+D1tR2O5OcBFOxfA7DoAO6xtkuQnHTk= -github.com/hashicorp/go-rootcerts v1.0.0/go.mod h1:K6zTfqpRlCUIjkwsN4Z+hiSfzSTQa6eBIzfwKfwNnHU= -github.com/hashicorp/go-sockaddr v1.0.0/go.mod h1:7Xibr9yA9JjQq1JpNB2Vw7kxv8xerXegt+ozgdvDeDU= -github.com/hashicorp/go-syslog v1.0.0/go.mod h1:qPfqrKkXGihmCqbJM2mZgkZGvKG1dFdvsLplgctolz4= -github.com/hashicorp/go-uuid v1.0.0/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= -github.com/hashicorp/go-uuid v1.0.1/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= github.com/hashicorp/go-uuid v1.0.3 h1:2gKiV6YVmrJ1i2CKKa9obLvRieoRGviZFL26PcT/Co8= github.com/hashicorp/go-uuid v1.0.3/go.mod h1:6SBZvOh/SIDV7/2o3Jml5SYk/TvGqwFJ/bN7x4byOro= -github.com/hashicorp/go.net v0.0.1/go.mod h1:hjKkEWcCURg++eb33jQU7oqQcI9XDCnUzHA0oac0k90= -github.com/hashicorp/golang-lru v0.5.0/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= -github.com/hashicorp/golang-lru v0.5.1/go.mod h1:/m3WP610KZHVQ1SGc6re/UDhFvYD7pJ4Ao+sR/qLZy8= github.com/hashicorp/golang-lru v0.5.4 h1:YDjusn29QI/Das2iO9M0BHnIbxPeyuCHsjMW+lJfyTc= github.com/hashicorp/golang-lru/arc/v2 v2.0.5 h1:l2zaLDubNhW4XO3LnliVj0GXO3+/CGNJAg1dcN2Fpfw= github.com/hashicorp/golang-lru/arc/v2 v2.0.5/go.mod h1:ny6zBSQZi2JxIeYcv7kt2sH2PXJtirBN7RDhRpxPkxU= github.com/hashicorp/golang-lru/v2 v2.0.7 h1:a+bsQ5rvGLjzHuww6tVxozPZFVghXaHOwFs4luLUK2k= github.com/hashicorp/golang-lru/v2 v2.0.7/go.mod h1:QeFd9opnmA6QUJc5vARoKUSoFhyfM2/ZepoAG6RGpeM= -github.com/hashicorp/hcl v1.0.0 h1:0Anlzjpi4vEasTeNFn2mLJgTSwt0+6sfsiTG8qcWGx4= -github.com/hashicorp/hcl v1.0.0/go.mod h1:E5yfLk+7swimpb2L/Alb/PJmXilQ/rhwaUYs4T20WEQ= -github.com/hashicorp/hcl/v2 v2.8.2/go.mod h1:bQTN5mpo+jewjJgh8jr0JUguIi7qPHUF6yIfAEN3jqY= -github.com/hashicorp/hcl/v2 v2.15.0 h1:CPDXO6+uORPjKflkWCCwoWc9uRp+zSIPcCQ+BrxV7m8= -github.com/hashicorp/hcl/v2 v2.15.0/go.mod h1:JRmR89jycNkrrqnMmvPDMd56n1rQJ2Q6KocSLCMCXng= github.com/hashicorp/logutils v1.0.0 h1:dLEQVugN8vlakKOUE3ihGLTZJRB4j+M2cdTm/ORI65Y= github.com/hashicorp/logutils v1.0.0/go.mod h1:QIAnNjmIWmVIIkWDTG1z5v++HQmx9WQRO+LraFDTW64= -github.com/hashicorp/mdns v1.0.0/go.mod h1:tL+uN++7HEJ6SQLQ2/p+z2pH24WQKWjBPkE0mNTz8vQ= -github.com/hashicorp/memberlist v0.1.3/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2pPBoIllUwCN7I= -github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc= github.com/hashicorp/terraform-plugin-log v0.7.0 h1:SDxJUyT8TwN4l5b5/VkiTIaQgY6R+Y2BQ0sRZftGKQs= github.com/hashicorp/terraform-plugin-log v0.7.0/go.mod h1:p4R1jWBXRTvL4odmEkFfDdhUjHf9zcs/BCoNHAc7IK4= github.com/hashicorp/terraform-plugin-sdk/v2 v2.24.1 h1:zHcMbxY0+rFO9gY99elV/XC/UnQVg7FhRCbj1i5b7vM= github.com/hashicorp/terraform-plugin-sdk/v2 v2.24.1/go.mod h1:+tNlb0wkfdsDJ7JEiERLz4HzM19HyiuIoGzTsM7rPpw= -github.com/helm/helm-mapkubeapis v0.4.1 h1:Xu03dMzVv/zqp+Vw1+2ZHufnDQRqoGa8Ml4N/GBgqME= -github.com/helm/helm-mapkubeapis v0.4.1/go.mod h1:o2qnBCfz2cbUod9QlbPjjXtsQI/X7QQjwU/rk7m1T2M= github.com/hinshun/vt10x v0.0.0-20220119200601-820417d04eec h1:qv2VnGeEQHchGaZ/u7lxST/RaJw+cv273q79D81Xbog= github.com/hinshun/vt10x v0.0.0-20220119200601-820417d04eec/go.mod h1:Q48J4R4DvxnHolD5P8pOtXigYlRuPLGl6moFx3ulM68= -github.com/hpcloud/tail v1.0.0/go.mod h1:ab1qPbhIpdTxEkNHXyeSf5vhxWSCs/tWer42PpOxQnU= -github.com/huandu/xstrings v1.3.1/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE= github.com/huandu/xstrings v1.3.3/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE= github.com/huandu/xstrings v1.4.0 h1:D17IlohoQq4UcpqD7fDk80P7l+lwAmlFaBHgOipl2FU= github.com/huandu/xstrings v1.4.0/go.mod h1:y5/lhBue+AyNmUVz9RLU9xbLR0o4KIIExikq4ovT0aE= -github.com/iancoleman/strcase v0.2.0/go.mod h1:iwCmte+B7n89clKwxIoIXy/HfoL7AsD47ZCWhYzw7ho= -github.com/ianlancetaylor/demangle v0.0.0-20181102032728-5e5cf60278f6/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= -github.com/ianlancetaylor/demangle v0.0.0-20200824232613-28f6c0f3b639/go.mod h1:aSSvb/t6k1mPoxDqO4vJh6VOCGPwU4O0C2/Eqndh1Sc= -github.com/imdario/mergo v0.3.6/go.mod h1:2EnlNZ0deacrJVfApfmtdGgDfMuh/nq6Ok1EcJh5FfA= github.com/imdario/mergo v0.3.11/go.mod h1:jmQim1M+e3UYxmgPu/WyfjB3N3VflVyUjjjwH0dnCYA= github.com/imdario/mergo v0.3.16 h1:wwQJbIsHYGMUyLSPrEq1CT16AhnhNJQ51+4fdHUnCl4= github.com/imdario/mergo v0.3.16/go.mod h1:WBLT9ZmE3lPoWsEzCh9LPo3TiwVN+ZKEjmz+hD27ysY= -github.com/inancgumus/screen v0.0.0-20190314163918-06e984b86ed3 h1:fO9A67/izFYFYky7l1pDP5Dr0BTCRkaQJUG6Jm5ehsk= -github.com/inancgumus/screen v0.0.0-20190314163918-06e984b86ed3/go.mod h1:Ey4uAp+LvIl+s5jRbOHLcZpUDnkjLBROl15fZLwPlTM= -github.com/inconshreveable/mousetrap v1.0.0/go.mod h1:PxqpIevigyE2G7u3NXJIT2ANytuPF1OarO4DADm73n8= github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 h1:BQSFePA1RWJOlocH6Fxy8MmwDt+yVQYULKfN0RoTN8A= github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99/go.mod h1:1lJo3i6rXxKeerYnT8Nvf0QmHCRC1n8sfWVwXF2Frvo= -github.com/jchv/go-winloader v0.0.0-20210711035445-715c2860da7e h1:Q3+PugElBCf4PFpxhErSzU3/PY5sFL5Z6rfv4AbGAck= -github.com/jchv/go-winloader v0.0.0-20210711035445-715c2860da7e/go.mod h1:alcuEEnZsY1WQsagKhZDsoPCRoOijYqhZvPwLG0kzVs= -github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= github.com/jmespath/go-jmespath v0.4.0 h1:BEgLn5cpjn8UN1mAw4NjwDrS35OdebyEtFe+9YPoQUg= github.com/jmespath/go-jmespath v0.4.0/go.mod h1:T8mJZnbsbmF+m6zOOFylbeCJqk5+pHWvzYPziyZiYoo= github.com/jmespath/go-jmespath/internal/testify v1.5.1 h1:shLQSRRSCCPj3f2gpwzGwWFoC7ycTf1rcQZHOlsJ6N8= @@ -1413,25 +432,13 @@ github.com/jmoiron/sqlx v1.3.5 h1:vFFPA71p1o5gAeqtEAwLU4dnX2napprKtHr7PYIcN3g= github.com/jmoiron/sqlx v1.3.5/go.mod h1:nRVWtLre0KfCLJvgxzCsLVMogSvQ1zNJtpYr2Ccp0mQ= github.com/joho/godotenv v1.3.0 h1:Zjp+RcGpHhGlrMbJzXTrZZPrWj+1vfm90La1wgB6Bhc= github.com/joho/godotenv v1.3.0/go.mod h1:7hK45KPybAkOC6peb+G5yklZfMxEjkZhHbwpqxOKXbg= -github.com/jonboulle/clockwork v0.1.0/go.mod h1:Ii8DK3G1RaLaWxj9trq07+26W01tbo22gdxWY5EU2bo= -github.com/jonboulle/clockwork v0.2.2/go.mod h1:Pkfl5aHPm1nk2H9h0bjmnJD/BcgbGXUBGnn1kMkgxc8= github.com/josharian/intern v1.0.0 h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY= github.com/josharian/intern v1.0.0/go.mod h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y= -github.com/jpillora/backoff v1.0.0/go.mod h1:J/6gKK9jxlEcS3zixgDgUAsiuZ7yrSoa/FX5e0EB2j4= github.com/json-iterator/go v1.1.6/go.mod h1:+SdeFBvtyEkXs7REEP0seUULqWtbJapLOCVDaaPEHmU= github.com/json-iterator/go v1.1.7/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/json-iterator/go v1.1.8/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/json-iterator/go v1.1.10/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= -github.com/json-iterator/go v1.1.11/go.mod h1:KdQUCv79m/52Kvf8AW2vK1V8akMuk1QjK/uOdHXbAo4= github.com/json-iterator/go v1.1.12 h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM= github.com/json-iterator/go v1.1.12/go.mod h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo= -github.com/jstemmer/go-junit-report v0.0.0-20190106144839-af01ea7f8024/go.mod h1:6v2b51hI/fHJwM22ozAgKL4VKDeJcHhJFhtBdhmNjmU= -github.com/jstemmer/go-junit-report v0.9.1/go.mod h1:Brl9GWCQeLvo8nXZwPNNblvFj/XSXhF0NWZEnDohbsk= -github.com/jtolds/gls v4.20.0+incompatible/go.mod h1:QJZ7F/aHp+rZTRtaJ1ow/lLfFfVYBRgL+9YlvaHOwJU= github.com/julienschmidt/httprouter v1.2.0/go.mod h1:SYymIcj16QtmaHHD7aYtjjsJG7VTCxuUUipMqKk8s4w= -github.com/julienschmidt/httprouter v1.3.0/go.mod h1:JR6WtHb+2LUe8TCKY3cZOxFyyO8IZAc4RVcycCCAKdM= -github.com/jung-kurt/gofpdf v1.0.0/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes= -github.com/jung-kurt/gofpdf v1.0.3-0.20190309125859-24315acbbda5/go.mod h1:7Id9E/uU8ce6rXgefFLlgrJj/GYY22cpxn+r32jIOes= github.com/k0kubun/colorstring v0.0.0-20150214042306-9440f1994b88/go.mod h1:3w7q1U84EfirKl04SVQ/s7nPm1ZPhiXd34z40TNz36k= github.com/k0kubun/go-ansi v0.0.0-20180517002512-3bf9e2903213/go.mod h1:vNUNkEQ1e29fT/6vq2aBdFsgNPmy8qMdSay1npru+Sw= github.com/k0kubun/pp v3.0.1+incompatible/go.mod h1:GWse8YhT0p8pT4ir3ZgBbfZild3tgzSScAn6HmfYukg= @@ -1441,55 +448,28 @@ github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51 h1:Z9n2FFNU github.com/kballard/go-shellquote v0.0.0-20180428030007-95032a82bc51/go.mod h1:CzGEWj7cYgsdH8dAjBGEr58BoE7ScuLd+fwFZ44+/x8= github.com/kevinburke/ssh_config v1.2.0 h1:x584FjTGwHzMwvHx18PXxbBVzfnxogHaAReU4gf13a4= github.com/kevinburke/ssh_config v1.2.0/go.mod h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM= -github.com/kisielk/errcheck v1.1.0/go.mod h1:EZBBE59ingxPouuu3KfxchcWSUPOHkagtvWXihfKN4Q= -github.com/kisielk/errcheck v1.2.0/go.mod h1:/BMXB+zMLi60iA8Vv6Ksmxu/1UDYcXs4uQLJ+jE2L00= github.com/kisielk/errcheck v1.5.0/go.mod h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8= github.com/kisielk/gotool v1.0.0/go.mod h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck= -github.com/klauspost/asmfmt v1.3.2/go.mod h1:AG8TuvYojzulgDAMCnYn50l/5QV3Bs/tp6j0HLHbNSE= -github.com/klauspost/compress v1.15.9/go.mod h1:PhcZ0MbTNciWF3rruxRgKxI5NkcHHrHUDtV4Yw2GlzU= github.com/klauspost/compress v1.17.4 h1:Ej5ixsIri7BrIjBkRZLTo6ghwrEtHFk7ijlczPW4fZ4= github.com/klauspost/compress v1.17.4/go.mod h1:/dCuZOvVtNoHsyb+cuJD3itjs3NbnF6KH9zAO4BDxPM= -github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= -github.com/klauspost/cpuid/v2 v2.2.4 h1:acbojRNwl3o09bUq+yDCtZFc1aiwaAAxtcn8YkZXnvk= -github.com/klauspost/cpuid/v2 v2.2.4/go.mod h1:RVVoqg1df56z8g3pUjL/3lE5UfnlrJX8tyFgg4nqhuY= github.com/konsorten/go-windows-terminal-sequences v1.0.1/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/konsorten/go-windows-terminal-sequences v1.0.3/go.mod h1:T0+1ngSBFLxvqU3pZ+m/2kptfBszLMUkC4ZK/EgS/cQ= -github.com/kr/fs v0.1.0/go.mod h1:FFnZGqtBN9Gxj7eW1uZ42v5BccTP0vu6NEaFoC2HwRg= github.com/kr/logfmt v0.0.0-20140226030751-b84e30acd515/go.mod h1:+0opPa2QZZtGFBFZlji/RkVcI2GknAs/DXo4wKdlNEc= github.com/kr/pretty v0.1.0/go.mod h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo= -github.com/kr/pretty v0.2.0/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= github.com/kr/pretty v0.2.1/go.mod h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI= -github.com/kr/pretty v0.3.0/go.mod h1:640gp4NfQd8pI5XOwp5fnNeVWj67G7CFk/SaSQn7NBk= github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE= github.com/kr/pretty v0.3.1/go.mod h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk= github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ= -github.com/kr/pty v1.1.5/go.mod h1:9r2w37qlBe7rQ6e1fg1S/9xpWHSnaqNdHD3WcMdbPDA= github.com/kr/text v0.1.0/go.mod h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI= github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY= github.com/kr/text v0.2.0/go.mod h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE= github.com/ktrysmt/go-bitbucket v0.9.55 h1:eOrF7wWmG4wz5iPr7ymgyWLoti2OfmrhU2tmT6yhAu8= github.com/ktrysmt/go-bitbucket v0.9.55/go.mod h1:y5wrrDHCGUFAtuC43GyLBeFigq7rwrh4HqeDOOyZT+A= -github.com/kylelemons/godebug v0.0.0-20170820004349-d65d576e9348/go.mod h1:B69LEHPfb2qLo0BaaOLcbitczOKLWTsrBG9LczfCD4k= github.com/kylelemons/godebug v1.1.0 h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc= github.com/kylelemons/godebug v1.1.0/go.mod h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw= -github.com/labstack/echo/v4 v4.9.0 h1:wPOF1CE6gvt/kmbMR4dGzWvHMPT+sAEUJOwOTtvITVY= -github.com/labstack/echo/v4 v4.9.0/go.mod h1:xkCDAdFCIf8jsFQ5NnbK7oqaF/yU1A1X20Ltm0OvSks= -github.com/labstack/gommon v0.3.1 h1:OomWaJXm7xR6L1HmEtGyQf26TEn7V6X88mktX9kee9o= -github.com/labstack/gommon v0.3.1/go.mod h1:uW6kP17uPlLJsD3ijUYn3/M5bAxtlZhMI6m3MFxTMTM= github.com/lann/builder v0.0.0-20180802200727-47ae307949d0 h1:SOEGU9fKiNWd/HOJuq6+3iTQz8KNCLtVX6idSoTLdUw= github.com/lann/builder v0.0.0-20180802200727-47ae307949d0/go.mod h1:dXGbAdH5GtBTC4WfIxhKZfyBF/HBFgRZSWwZ9g/He9o= github.com/lann/ps v0.0.0-20150810152359-62de8c46ede0 h1:P6pPBnrTSX3DEVR4fDembhRWSsG5rVo6hYhAB/ADZrk= github.com/lann/ps v0.0.0-20150810152359-62de8c46ede0/go.mod h1:vmVJ0l/dxyfGW6FmdpVm2joNMFikkuWg0EoCKLGUMNw= -github.com/leaanthony/debme v1.2.1 h1:9Tgwf+kjcrbMQ4WnPcEIUcQuIZYqdWftzZkBr+i/oOc= -github.com/leaanthony/debme v1.2.1/go.mod h1:3V+sCm5tYAgQymvSOfYQ5Xx2JCr+OXiD9Jkw3otUjiA= -github.com/leaanthony/go-ansi-parser v1.0.1 h1:97v6c5kYppVsbScf4r/VZdXyQ21KQIfeQOk2DgKxGG4= -github.com/leaanthony/go-ansi-parser v1.0.1/go.mod h1:7arTzgVI47srICYhvgUV4CGd063sGEeoSlych5yeSPM= -github.com/leaanthony/gosod v1.0.3 h1:Fnt+/B6NjQOVuCWOKYRREZnjGyvg+mEhd1nkkA04aTQ= -github.com/leaanthony/gosod v1.0.3/go.mod h1:BJ2J+oHsQIyIQpnLPjnqFGTMnOZXDbvWtRCSG7jGxs4= -github.com/leaanthony/slicer v1.5.0 h1:aHYTN8xbCCLxJmkNKiLB6tgcMARl4eWmH9/F+S/0HtY= -github.com/leaanthony/slicer v1.5.0/go.mod h1:FwrApmf8gOrpzEWM2J/9Lh79tyq8KTX5AzRtwV7m4AY= -github.com/leodido/go-urn v1.2.4 h1:XlAE/cm/ms7TE/VMVoduSpNBoyc2dOxHs5MZSwAN63Q= -github.com/leodido/go-urn v1.2.4/go.mod h1:7ZrI8mTSeBSHl/UaRyKQW1qZeMgak41ANeCNaVckg+4= github.com/lib/pq v1.2.0/go.mod h1:5WUZQaWbwv1U+lTReE5YruASi9Al49XbQIvNi/34Woo= github.com/lib/pq v1.10.9 h1:YXG7RB+JIjhP29X+OtkiDnYaXQwpS4JEWq7dtCCRUEw= github.com/lib/pq v1.10.9/go.mod h1:AlVN5x4E4T544tWzH6hKfbfQvm3HdbOxrmggDNAPY9o= @@ -1501,18 +481,6 @@ github.com/likexian/gokit v0.25.15 h1:QjospM1eXhdMMHwZRpMKKAHY/Wig9wgcREmLtf9Nsl github.com/likexian/gokit v0.25.15/go.mod h1:S2QisdsxLEHWeD/XI0QMVeggp+jbxYqUxMvSBil7MRg= github.com/linode/linodego v1.26.0 h1:2tOZ3Wxn4YvGBRgZi3Vz6dab+L16XUntJ9sJxh3ZBio= github.com/linode/linodego v1.26.0/go.mod h1:kD7Bf1piWg/AXb9TA0ThAVwzR+GPf6r2PvbTbVk7PMA= -github.com/lyft/protoc-gen-star v0.6.0/go.mod h1:TGAoBVkt8w7MPG72TrKIu85MIdXwDuzJYeZuUPFPNwA= -github.com/lyft/protoc-gen-star v0.6.1/go.mod h1:TGAoBVkt8w7MPG72TrKIu85MIdXwDuzJYeZuUPFPNwA= -github.com/lyft/protoc-gen-star/v2 v2.0.1/go.mod h1:RcCdONR2ScXaYnQC5tUzxzlpA3WVYF7/opLeUgcQs/o= -github.com/magiconair/properties v1.8.0/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= -github.com/magiconair/properties v1.8.1/go.mod h1:PppfXfuXeibc/6YijjN8zIbojt8czPbwD3XqdrwzmxQ= -github.com/magiconair/properties v1.8.7 h1:IeQXZAiQcpL9mgcAe1Nu6cX9LLw6ExEHKjN0VQdvPDY= -github.com/magiconair/properties v1.8.7/go.mod h1:Dhd985XPs7jluiymwWYZ0G4Z61jb3vdS329zhj2hYo0= -github.com/mailru/easyjson v0.0.0-20180823135443-60711f1a8329/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/mailru/easyjson v0.0.0-20190312143242-1de009706dbe/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/mailru/easyjson v0.0.0-20190614124828-94de47d64c63/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/mailru/easyjson v0.0.0-20190626092158-b2ccc519800e/go.mod h1:C1wdFJiN94OJF2b5HbByQZoLdCWB1Yqtg26g4irojpc= -github.com/mailru/easyjson v0.7.0/go.mod h1:KAzv3t3aY1NaHWoQz1+4F1ccyAH66Jk7yos7ldAVICs= github.com/mailru/easyjson v0.7.7 h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0= github.com/mailru/easyjson v0.7.7/go.mod h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc= github.com/markbates/errx v1.1.0 h1:QDFeR+UP95dO12JgW+tgi2UVfo0V8YBHiUIOaeBPiEI= @@ -1521,65 +489,47 @@ github.com/markbates/oncer v1.0.0 h1:E83IaVAHygyndzPimgUYJjbshhDTALZyXxvk9FOlQRY github.com/markbates/oncer v1.0.0/go.mod h1:Z59JA581E9GP6w96jai+TGqafHPW+cPfRxz2aSZ0mcI= github.com/markbates/safe v1.0.1 h1:yjZkbvRM6IzKj9tlu/zMJLS0n/V351OZWRnF3QfaUxI= github.com/markbates/safe v1.0.1/go.mod h1:nAqgmRi7cY2nqMc92/bSEeQA+R4OheNU2T1kNSCBdG0= -github.com/matryer/is v1.4.0 h1:sosSmIWwkYITGrxZ25ULNDeKiMNzFSr4V/eqBQP0PeE= -github.com/matryer/is v1.4.0/go.mod h1:8I/i5uYgLzgsgEloJE1U6xx5HkBQpAZvepWuujKwMRU= github.com/mattn/go-colorable v0.0.9/go.mod h1:9vuHe8Xs5qXnSaW/c/ABM9alt+Vo+STaOChaDxuIBZU= github.com/mattn/go-colorable v0.1.2/go.mod h1:U0ppj6V5qS13XJ6of8GYAs25YV2eR4EVcfRqFIhoBtE= github.com/mattn/go-colorable v0.1.9/go.mod h1:u6P/XSegPjTcexA+o6vUJrdnUu04hMope9wVRipJSqc= -github.com/mattn/go-colorable v0.1.11/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= github.com/mattn/go-colorable v0.1.12/go.mod h1:u5H1YNBxpqRaxsYJYSkiCWKzEfiAb1Gb520KVy5xxl4= github.com/mattn/go-colorable v0.1.13 h1:fFA4WZxdEF4tXPZVKMLwD8oUnCTTo08duU7wxecdEvA= github.com/mattn/go-colorable v0.1.13/go.mod h1:7S9/ev0klgBDR4GtXTXX8a3vIGJpMovkB8vQcUbaXHg= github.com/mattn/go-ieproxy v0.0.1 h1:qiyop7gCflfhwCzGyeT0gro3sF9AIg9HU98JORTkqfI= github.com/mattn/go-ieproxy v0.0.1/go.mod h1:pYabZ6IHcRpFh7vIaLfK7rdcWgFEb3SFJ6/gNWuh88E= github.com/mattn/go-isatty v0.0.3/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= -github.com/mattn/go-isatty v0.0.4/go.mod h1:M+lRXTBqGeGNdLjl/ufCoiOlB5xdOkqRJdNxMWT7Zi4= github.com/mattn/go-isatty v0.0.8/go.mod h1:Iq45c/XA43vh69/j3iqttzPXn0bhXyGjM0Hdxcsrc5s= github.com/mattn/go-isatty v0.0.12/go.mod h1:cbi8OIDigv2wuxKPP5vlRcQ1OAZbq2CE4Kysco4FUpU= github.com/mattn/go-isatty v0.0.14/go.mod h1:7GGIvUiUoEMVVmxf/4nioHXj79iQHKdU27kJ6hsGG94= github.com/mattn/go-isatty v0.0.16/go.mod h1:kYGgaQfpe5nmfYZH+SKPsOc2e4SrIfOl2e/yFXSvRLM= github.com/mattn/go-isatty v0.0.20 h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY= github.com/mattn/go-isatty v0.0.20/go.mod h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y= -github.com/mattn/go-runewidth v0.0.2/go.mod h1:LwmH8dsx7+W8Uxz3IHJYH5QSwggIsqBzpuz5H//U1FU= github.com/mattn/go-runewidth v0.0.9/go.mod h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI= github.com/mattn/go-runewidth v0.0.14 h1:+xnbZSEeDbOIg5/mE6JF0w6n9duR1l3/WmbinWVwUuU= github.com/mattn/go-runewidth v0.0.14/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w= github.com/mattn/go-sqlite3 v1.14.6/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU= -github.com/mattn/go-sqlite3 v1.14.14/go.mod h1:NyWgC/yNuGj7Q9rpYnZvas74GogHl5/Z4A/KQRfk6bU= github.com/mattn/go-sqlite3 v1.14.15 h1:vfoHhTN1af61xCRSWzFIWzx2YskyMTwHLrExkBOjvxI= github.com/mattn/go-sqlite3 v1.14.15/go.mod h1:2eHXhiwb8IkHr+BDWZGa96P6+rkvnG63S2DGjv9HUNg= github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0= -github.com/matttproud/golang_protobuf_extensions v1.0.4/go.mod h1:BSXmuO+STAnVfrANrmjBb36TMTDstsz7MSK+HVaYKv4= github.com/mgutz/ansi v0.0.0-20170206155736-9520e82c474b/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE= github.com/mgutz/ansi v0.0.0-20200706080929-d51e80ef957d h1:5PJl274Y63IEHC+7izoQE9x6ikvDFZS2mDVS3drnohI= github.com/mgutz/ansi v0.0.0-20200706080929-d51e80ef957d/go.mod h1:01TrycV0kFyexm33Z7vhZRXopbI8J3TDReVlkTgMUxE= -github.com/miekg/dns v1.0.14/go.mod h1:W1PPwlIAgtquWBMBEV9nkV9Cazfe8ScdGz/Lj7v3Nrg= github.com/miekg/dns v1.1.50 h1:DQUfb9uc6smULcREF09Uc+/Gd46YWqJd5DbpPE9xkcA= github.com/miekg/dns v1.1.50/go.mod h1:e3IlAVfNqAllflbibAZEWOXOQ+Ynzk/dDozDxY7XnME= github.com/mikesmitty/edkey v0.0.0-20170222072505-3356ea4e686a h1:eU8j/ClY2Ty3qdHnn0TyW3ivFoPC/0F1gQZz8yTxbbE= github.com/mikesmitty/edkey v0.0.0-20170222072505-3356ea4e686a/go.mod h1:v8eSC2SMp9/7FTKUncp7fH9IwPfw+ysMObcEz5FWheQ= -github.com/minio/asm2plan9s v0.0.0-20200509001527-cdd76441f9d8/go.mod h1:mC1jAcsrzbxHt8iiaC+zU4b1ylILSosueou12R++wfY= -github.com/minio/c2goasm v0.0.0-20190812172519-36a3d3bbc4f3/go.mod h1:RagcQ7I8IeTMnF8JTXieKnO4Z6JCsikNEzj0DwauVzE= -github.com/mitchellh/cli v1.0.0/go.mod h1:hNIlj7HEI86fIcpObd7a0FcrxTWetlwJDGcceTlRvqc= github.com/mitchellh/colorstring v0.0.0-20190213212951-d06e56a500db h1:62I3jR2EmQ4l5rM/4FEfDWcRD+abF5XlKShorW5LRoQ= github.com/mitchellh/colorstring v0.0.0-20190213212951-d06e56a500db/go.mod h1:l0dey0ia/Uv7NcFFVbCLtqEBQbrT4OCwCSKTEv6enCw= github.com/mitchellh/copystructure v1.0.0/go.mod h1:SNtv71yrdKgLRyLFxmLdkAbkKEFWgYaq1OVrnRcwhnw= github.com/mitchellh/copystructure v1.2.0 h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw= github.com/mitchellh/copystructure v1.2.0/go.mod h1:qLl+cE2AmVv+CoeAwDPye/v+N2HKCj9FbZEVFJRxO9s= -github.com/mitchellh/go-homedir v1.0.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= github.com/mitchellh/go-homedir v1.1.0 h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y= github.com/mitchellh/go-homedir v1.1.0/go.mod h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0= -github.com/mitchellh/go-testing-interface v1.0.0/go.mod h1:kRemZodwjscx+RGhAo8eIhFbs2+BFgRtFPeD/KE+zxI= github.com/mitchellh/go-testing-interface v1.14.1 h1:jrgshOhYAUVNMAJiKbEu7EqAwgJJ2JqpQmpLJOu07cU= github.com/mitchellh/go-testing-interface v1.14.1/go.mod h1:gfgS7OtZj6MA4U1UrDRp04twqAjfvlZyCfX3sDjEym8= -github.com/mitchellh/go-wordwrap v0.0.0-20150314170334-ad45545899c7/go.mod h1:ZXFpozHsX6DPmq2I0TCekCxypsnAUbP2oI0UX1GXzOo= github.com/mitchellh/go-wordwrap v1.0.1 h1:TLuKupo69TCn6TQSyGxwI1EblZZEsQ0vMlAFQflz0v0= github.com/mitchellh/go-wordwrap v1.0.1/go.mod h1:R62XHJLzvMFRBbcrT7m7WgmE1eOyTSsCt+hzestvNj0= -github.com/mitchellh/gox v0.4.0/go.mod h1:Sd9lOJ0+aimLBi73mGofS1ycjY8lL3uZM3JPS42BGNg= -github.com/mitchellh/iochan v1.0.0/go.mod h1:JwYml1nuB7xOzsp52dPpHFffvOCDupsG0QubkSMEySY= -github.com/mitchellh/mapstructure v0.0.0-20160808181253-ca63d7c062ee/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/mitchellh/mapstructure v0.0.0-20180220230111-00c29f56e238/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= -github.com/mitchellh/mapstructure v1.1.2/go.mod h1:FVVH3fgwuzCH5S8UJGiWEs2h04kUh9fWfEaFds41c1Y= github.com/mitchellh/mapstructure v1.5.0 h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY= github.com/mitchellh/mapstructure v1.5.0/go.mod h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo= github.com/mitchellh/reflectwalk v1.0.0/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= @@ -1587,12 +537,10 @@ github.com/mitchellh/reflectwalk v1.0.2 h1:G2LzWKi524PWgd3mLHV8Y5k7s6XUvT0Gef6zx github.com/mitchellh/reflectwalk v1.0.2/go.mod h1:mSTlrgnPZtwu0c4WaC2kGObEpuNDbx0jmZXqmk4esnw= github.com/moby/locker v1.0.1 h1:fOXqR41zeveg4fFODix+1Ch4mj/gT0NE1XJbp/epuBg= github.com/moby/locker v1.0.1/go.mod h1:S7SDdo5zpBK84bzzVlKr2V0hz+7x9hWbYC/kq7oQppc= -github.com/moby/spdystream v0.2.0/go.mod h1:f7i0iNDQJ059oMTcWxx8MA/zKFIuD/lY+0GqbN2Wy8c= github.com/moby/spdystream v0.4.0 h1:Vy79D6mHeJJjiPdFEL2yku1kl0chZpJfZcPpb16BRl8= github.com/moby/spdystream v0.4.0/go.mod h1:xBAYlnt/ay+11ShkdFKNAG7LsyK/tmNBVvVOwrfMgdI= github.com/moby/sys/mountinfo v0.6.2 h1:BzJjoreD5BMFNmD9Rus6gdd1pLuecOFPt8wC+Vygl78= github.com/moby/sys/mountinfo v0.6.2/go.mod h1:IJb6JQeOklcdMU9F5xQ8ZALD+CUr5VlGpwtX+VE0rpI= -github.com/moby/term v0.0.0-20221205130635-1aeaba878587/go.mod h1:8FzsFHVUBGZdbDsJw/ot+X+d5HLUbvklYLJ9uGfcI3Y= github.com/moby/term v0.5.0 h1:xt8Q1nalod/v7BqbG21f8mQPqH+xAaC9C3N3wfWbVP0= github.com/moby/term v0.5.0/go.mod h1:8FzsFHVUBGZdbDsJw/ot+X+d5HLUbvklYLJ9uGfcI3Y= github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= @@ -1604,100 +552,41 @@ github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9G github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= github.com/monochromegane/go-gitignore v0.0.0-20200626010858-205db1a8cc00 h1:n6/2gBQ3RWajuToeY6ZtZTIKv2v7ThUy5KKusIT0yc0= github.com/monochromegane/go-gitignore v0.0.0-20200626010858-205db1a8cc00/go.mod h1:Pm3mSP3c5uWn86xMLZ5Sa7JB9GsEZySvHYXCTK4E9q4= -github.com/munnerz/goautoneg v0.0.0-20120707110453-a547fc61f48d/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= -github.com/mwitkow/go-conntrack v0.0.0-20190716064945-2f068394615f/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U= github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f h1:y5//uYreIhSUg3J1GEMiLbxo1LJaP8RfCpH6pymGZus= github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw= -github.com/nxadm/tail v1.4.4/go.mod h1:kenIhsEOeOJmVchQTgglprH7qJGnHDVpk1VPCcaMI8A= -github.com/nxadm/tail v1.4.8/go.mod h1:+ncqLTQzXmGhMZNUePPaPqPvBxHAIsmXswZKocGu+AU= -github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= github.com/oleiade/reflections v1.0.1 h1:D1XO3LVEYroYskEsoSiGItp9RUxG6jWnCVvrqH0HHQM= github.com/oleiade/reflections v1.0.1/go.mod h1:rdFxbxq4QXVZWj0F+e9jqjDkc7dbp97vkRixKo2JR60= -github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= github.com/olekukonko/tablewriter v0.0.5 h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec= github.com/olekukonko/tablewriter v0.0.5/go.mod h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY= -github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.10.1/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= -github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= -github.com/onsi/ginkgo v1.16.4/go.mod h1:dX+/inL/fNMqNlz0e9LfyB9TswhZpCVdJM/Z6Vvnwo0= github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= -github.com/onsi/ginkgo/v2 v2.1.3/go.mod h1:vw5CSIxN1JObi/U8gcbwft7ZxR2dgaR70JSE3/PpL4c= -github.com/onsi/ginkgo/v2 v2.1.4/go.mod h1:um6tUpWM/cxCK3/FK8BXqEiUMUwRgSM4JXG47RKZmLU= -github.com/onsi/ginkgo/v2 v2.1.6/go.mod h1:MEH45j8TBi6u9BMogfbp0stKC5cdGjumZj5Y7AG4VIk= -github.com/onsi/ginkgo/v2 v2.3.0/go.mod h1:Eew0uilEqZmIEZr8JrvYlvOM7Rr6xzTmMV8AyFNU9d0= -github.com/onsi/ginkgo/v2 v2.4.0/go.mod h1:iHkDK1fKGcBoEHT5W7YBq4RFWaQulw+caOMkAt4OrFo= -github.com/onsi/ginkgo/v2 v2.5.0/go.mod h1:Luc4sArBICYCS8THh8v3i3i5CuSZO+RaQRaJoeNwomw= -github.com/onsi/ginkgo/v2 v2.7.0/go.mod h1:yjiuMwPokqY1XauOgju45q3sJt6VzQ/Fict1LFVcsAo= -github.com/onsi/ginkgo/v2 v2.8.1/go.mod h1:N1/NbDngAFcSLdyZ+/aYTYGSlq9qMCS/cNKGJjy+csc= -github.com/onsi/ginkgo/v2 v2.9.0/go.mod h1:4xkjoL/tZv4SMWeww56BU5kAt19mVB47gTWxmrTcxyk= -github.com/onsi/ginkgo/v2 v2.9.1/go.mod h1:FEcmzVcCHl+4o9bQZVab+4dC9+j+91t2FHSzmGAPfuo= -github.com/onsi/ginkgo/v2 v2.9.2/go.mod h1:WHcJJG2dIlcCqVfBAwUCrJxSPFb6v4azBwgxeMeDuts= -github.com/onsi/ginkgo/v2 v2.9.4/go.mod h1:gCQYp2Q+kSoIj7ykSVb9nskRSsR6PUj4AiLywzIhbKM= -github.com/onsi/ginkgo/v2 v2.9.5/go.mod h1:tvAoo1QUJwNEU2ITftXTpR7R1RbCzoZUOs3RonqW57k= -github.com/onsi/ginkgo/v2 v2.9.7/go.mod h1:cxrmXWykAwTwhQsJOPfdIDiJ+l2RYq7U8hFU+M/1uw0= -github.com/onsi/ginkgo/v2 v2.11.0/go.mod h1:ZhrRA5XmEE3x3rhlzamx/JJvujdZoJ2uvgI7kR0iZvM= -github.com/onsi/ginkgo/v2 v2.13.0/go.mod h1:TE309ZR8s5FsKKpuB1YAQYBzCaAfUgatB/xlT/ETL/o= github.com/onsi/ginkgo/v2 v2.19.0 h1:9Cnnf7UHo57Hy3k6/m5k3dRfGTMXGvxhHFvkDTCTpvA= github.com/onsi/ginkgo/v2 v2.19.0/go.mod h1:rlwLi9PilAFJ8jCg9UE1QP6VBpd6/xj3SRC0d6TU0To= -github.com/onsi/gomega v1.7.0/go.mod h1:ex+gbHU/CVuBBDIJjb2X0qEXbFg53c61hWP/1CpauHY= -github.com/onsi/gomega v1.7.1/go.mod h1:XdKZgCCFLUoM/7CFJVPcG8C1xQ1AJ0vpAezJrB7JYyY= -github.com/onsi/gomega v1.10.1/go.mod h1:iN09h71vgCQne3DLsj+A5owkum+a2tYe+TOCB1ybHNo= -github.com/onsi/gomega v1.17.0/go.mod h1:HnhC7FXeEQY45zxNK3PPoIUhzk/80Xly9PcubAlGdZY= -github.com/onsi/gomega v1.19.0/go.mod h1:LY+I3pBVzYsTBU1AnDwOSxaYi9WoWiqgwooUqq9yPro= -github.com/onsi/gomega v1.20.1/go.mod h1:DtrZpjmvpn2mPm4YWQa0/ALMDj9v4YxLgojwPeREyVo= -github.com/onsi/gomega v1.21.1/go.mod h1:iYAIXgPSaDHak0LCMA+AWBpIKBr8WZicMxnE8luStNc= -github.com/onsi/gomega v1.22.1/go.mod h1:x6n7VNe4hw0vkyYUM4mjIXx3JbLiPaBPNgB7PRQ1tuM= -github.com/onsi/gomega v1.24.0/go.mod h1:Z/NWtiqwBrwUt4/2loMmHL63EDLnYHmVbuBpDr2vQAg= -github.com/onsi/gomega v1.24.1/go.mod h1:3AOiACssS3/MajrniINInwbfOOtfZvplPzuRSmvt1jM= -github.com/onsi/gomega v1.26.0/go.mod h1:r+zV744Re+DiYCIPRlYOTxn0YkOLcAnW8k1xXdMPGhM= -github.com/onsi/gomega v1.27.1/go.mod h1:aHX5xOykVYzWOV4WqQy0sy8BQptgukenXpCXfadcIAw= -github.com/onsi/gomega v1.27.3/go.mod h1:5vG284IBtfDAmDyrK+eGyZmUgUlmi+Wngqo557cZ6Gw= -github.com/onsi/gomega v1.27.4/go.mod h1:riYq/GJKh8hhoM01HN6Vmuy93AarCXCBGpvFDK3q3fQ= -github.com/onsi/gomega v1.27.6/go.mod h1:PIQNjfQwkP3aQAH7lf7j87O/5FiNr+ZR8+ipb+qQlhg= -github.com/onsi/gomega v1.27.7/go.mod h1:1p8OOlwo2iUUDsHnOrjE5UKYJ+e3W8eQ3qSlRahPmr4= -github.com/onsi/gomega v1.27.8/go.mod h1:2J8vzI/s+2shY9XHRApDkdgPo1TKT7P2u6fXeJKFnNQ= -github.com/onsi/gomega v1.27.10/go.mod h1:RsS8tutOdbdgzbPtzzATp12yT7kM5I5aElG3evPbQ0M= -github.com/onsi/gomega v1.29.0/go.mod h1:9sxs+SwGrKI0+PWe4Fxa9tFQQBG5xSsSbMXOI8PPpoQ= github.com/onsi/gomega v1.33.1 h1:dsYjIxxSR755MDmKVsaFQTE22ChNBcuuTWgkUDSubOk= github.com/onsi/gomega v1.33.1/go.mod h1:U4R44UsT+9eLIaYRB2a5qajjtQYn0hauxvRm16AVYg0= github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= github.com/opencontainers/go-digest v1.0.0/go.mod h1:0JzlMkj0TRzQZfJkVvzbP0HBR3IKzErnv2BNG4W4MAM= github.com/opencontainers/image-spec v1.1.0 h1:8SG7/vwALn54lVB/0yZ/MMwhFrPYtpEHQb2IpWsCzug= github.com/opencontainers/image-spec v1.1.0/go.mod h1:W4s4sFTMaBeK1BQLXbG4AdM2szdn85PY75RI83NrTrM= -github.com/opentracing/opentracing-go v1.1.0/go.mod h1:UkNAQd3GIcIGf0SeVgPpRdFStlNbqXla1AfSYxPUl2o= github.com/osteele/liquid v1.4.0 h1:WS6lT3MFWUAxNbveF22tMLluOWNghGnKCZHLn7NbJGs= github.com/osteele/liquid v1.4.0/go.mod h1:VmzQQHa5v4E0GvGzqccfAfLgMwRk2V+s1QbxYx9dGak= github.com/osteele/tuesday v1.0.3 h1:SrCmo6sWwSgnvs1bivmXLvD7Ko9+aJvvkmDjB5G4FTU= github.com/osteele/tuesday v1.0.3/go.mod h1:pREKpE+L03UFuR+hiznj3q7j3qB1rUZ4XfKejwWFF2M= github.com/packethost/packngo v0.29.0 h1:gRIhciVZQ/zLNrIdIdbOUyB/Tw5IgoaXyhP4bvE+D2s= github.com/packethost/packngo v0.29.0/go.mod h1:/UHguFdPs6Lf6FOkkSEPnRY5tgS0fsVM+Zv/bvBrmt0= -github.com/pascaldekloe/goe v0.0.0-20180627143212-57f6aae5913c/go.mod h1:lzWF7FIEvWOWxwDKqyGYQf6ZUaNfKdP144TG7ZOy1lc= -github.com/pborman/uuid v1.2.0/go.mod h1:X/NO0urCmaxf9VXbdlT7C2Yzkj2IKimNn4k+gtPdI/k= -github.com/pelletier/go-toml v1.2.0/go.mod h1:5z9KED0ma1S8pY6P1sdut58dfprrGBbd/94hg7ilaic= -github.com/pelletier/go-toml/v2 v2.2.0 h1:QLgLl2yMN7N+ruc31VynXs1vhMZa7CeHHejIeBAsoHo= -github.com/pelletier/go-toml/v2 v2.2.0/go.mod h1:1t835xjRzz80PqgE6HHgN2JOsmgYu/h4qDAS4n929Rs= github.com/peterbourgon/diskv v2.0.1+incompatible h1:UBdAOUP5p4RWqPBg048CAvpKN+vxiaj6gdUUzhl4XmI= github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5 h1:Ii+DKncOVM8Cu1Hc+ETb5K+23HdAMvESYE3ZJ5b5cMI= github.com/phayes/freeport v0.0.0-20220201140144-74d24b5ae9f5/go.mod h1:iIss55rKnNBTvrwdmkUpLnDpZoAHvWaiq5+iMmen4AE= -github.com/phpdave11/gofpdf v1.4.2/go.mod h1:zpO6xFn9yxo3YLyMvW8HcKWVdbNqgIfOOp2dXMnm1mY= -github.com/phpdave11/gofpdi v1.0.12/go.mod h1:vBmVV0Do6hSBHC8uKUQ71JGW+ZGQq74llk/7bXwjDoI= -github.com/phpdave11/gofpdi v1.0.13/go.mod h1:vBmVV0Do6hSBHC8uKUQ71JGW+ZGQq74llk/7bXwjDoI= -github.com/pierrec/lz4/v4 v4.1.15/go.mod h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4= github.com/pjbgf/sha1cd v0.3.0 h1:4D5XXmUUBUl/xQ6IjCkEAbqXskkq/4O7LmGn0AqMDs4= github.com/pjbgf/sha1cd v0.3.0/go.mod h1:nZ1rrWOcGJ5uZgEEVL1VUM9iRQiZvWdbZjkKyFzPPsI= github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c h1:+mdjkGKdHQG3305AYmdv1U2eRNDiU2ErMBj1gwrq8eQ= github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c/go.mod h1:7rwL4CYBLnjLxUqIJNnCWiEdr3bn6IUYi15bNlnbCCU= -github.com/pkg/diff v0.0.0-20210226163009-20ebb0f2a09e/go.mod h1:pJLUxLENpZxwdsKMEsNbx1VGcRFpLqf3715MtcvvzbA= github.com/pkg/errors v0.8.0/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/errors v0.8.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= -github.com/pkg/sftp v1.10.1/go.mod h1:lYOWFsE0bwd1+KfKJaKeuokY15vzFx25BLbzYYoAxZI= -github.com/pkg/sftp v1.13.1/go.mod h1:3HaPG6Dq1ILlpPZRO0HVMrsydcdLt6HRDccSgb87qRg= github.com/pluralsh/console/go/client v1.23.0 h1:aS6CuC0o5ONSoRKFbm/rb6JVDD858KIs0t+HLLMMX/w= github.com/pluralsh/console/go/client v1.23.0/go.mod h1:lpoWASYsM9keNePS3dpFiEisUHEfObIVlSL3tzpKn8k= github.com/pluralsh/console/go/controller v0.0.0-20241106170618-0c255ee72c4c h1:1bSNjddgWG/C0Zgm0BoOOngTlv+sFPvBjxo18I7jEdw= @@ -1706,8 +595,6 @@ github.com/pluralsh/controller-reconcile-helper v0.0.4 h1:1o+7qYSyoeqKFjx+WgQTxD github.com/pluralsh/controller-reconcile-helper v0.0.4/go.mod h1:AfY0gtteD6veBjmB6jiRx/aR4yevEf6K0M13/pGan/s= github.com/pluralsh/gqlclient v1.12.2 h1:BrEFAASktf4quFw57CIaLAd+NZUTLhG08fe6tnhBQN4= github.com/pluralsh/gqlclient v1.12.2/go.mod h1:OEjN9L63x8m3A3eQBv5kVkFgiY9fp2aZ0cgOF0uII58= -github.com/pluralsh/helm-docs v1.11.3-0.20230914191425-6d14ebab8817 h1:J7SGxH6nJGdRoNtqdzhyr2VMpbl4asolul7xqqW++EA= -github.com/pluralsh/helm-docs v1.11.3-0.20230914191425-6d14ebab8817/go.mod h1:rLqec59NO7YF57Rq9VlubQHMp7wcRTJhzpkcgs4lOG4= github.com/pluralsh/oauth v0.9.2 h1:tM9hBK4tCnJUeCOgX0ctxBBCS3hiCDPoxkJLODtedmQ= github.com/pluralsh/oauth v0.9.2/go.mod h1:aTUw/75rzcsbvW+/TLvWtHVDXFIdtFrDtUncOq9vHyM= github.com/pluralsh/plural-operator v0.5.5 h1:57GxniNjUa3hpHgvFr9oDonFgvDUC8XDD5B0e7Xduzk= @@ -1717,100 +604,50 @@ github.com/pluralsh/polly v0.1.10/go.mod h1:W9IBX3e3xEjJuRjAQRfFJpH+UkNjddVY5YjM github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndrE9hABlRI= github.com/posthog/posthog-go v0.0.0-20230801140217-d607812dee69 h1:01dHVodha5BzrMtVmcpPeA4VYbZEsTXQ6m4123zQXJk= github.com/posthog/posthog-go v0.0.0-20230801140217-d607812dee69/go.mod h1:migYMxlAqcnQy+3eN8mcL0b2tpKy6R+8Zc0lxwk4dKM= github.com/poy/onpar v1.1.2 h1:QaNrNiZx0+Nar5dLgTVp5mXkyoVFIbepjyEoGSnhbAY= github.com/poy/onpar v1.1.2/go.mod h1:6X8FLNoxyr9kkmnlqpK6LSoiOtrO6MICtWwEuWkLjzg= -github.com/pquerna/cachecontrol v0.0.0-20171018203845-0dec1b30a021/go.mod h1:prYjPmNq4d1NPVmpShWobRqXY3q7Vp+80DqgxxUrUIA= -github.com/pquerna/cachecontrol v0.1.0/go.mod h1:NrUG3Z7Rdu85UNR3vm7SOsl1nFIeSiQnrHV5K9mBcUI= github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= -github.com/prometheus/client_golang v0.9.3/go.mod h1:/TN21ttK/J9q6uSwhBd54HahCDft0ttaMvbicHlPoso= github.com/prometheus/client_golang v1.0.0/go.mod h1:db9x61etRT2tGnBNRi70OPL5FsnadC4Ky3P0J6CfImo= github.com/prometheus/client_golang v1.1.0/go.mod h1:I1FGZT9+L76gKKOs5djB6ezCbFQP1xR9D75/vuwEF3g= -github.com/prometheus/client_golang v1.7.1/go.mod h1:PY5Wy2awLA44sXw4AOSfFBetzPP4j5+D6mVACh+pe2M= -github.com/prometheus/client_golang v1.11.0/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= -github.com/prometheus/client_golang v1.11.1/go.mod h1:Z6t4BnS23TR94PD6BsDNk8yVqroYurpAkEiz0P2BEV0= -github.com/prometheus/client_golang v1.12.1/go.mod h1:3Z9XVyYiZYEO+YQWt3RD2R3jrbd179Rt297l4aS6nDY= -github.com/prometheus/client_golang v1.14.0/go.mod h1:8vpkKitgIVNcqrRBWh1C4TIUQgYNtG/XQE4E/Zae36Y= -github.com/prometheus/client_golang v1.15.1/go.mod h1:e9yaBhRPU2pPNsZwE+JdQl0KEt1N9XgF6zxWmaC0xOk= -github.com/prometheus/client_golang v1.16.0/go.mod h1:Zsulrv/L9oM40tJ7T815tM89lFEugiJ9HzIqaAx4LKc= github.com/prometheus/client_golang v1.19.0 h1:ygXvpU1AoN1MhdzckN+PyD9QJOSD4x7kmXYlnfbA6JU= github.com/prometheus/client_golang v1.19.0/go.mod h1:ZRM9uEAypZakd+q/x7+gmsvXdURP+DABIEIjnmDdp+k= github.com/prometheus/client_model v0.0.0-20180712105110-5c3871d89910/go.mod h1:MbSGuTsp3dbXC40dX6PRTWyKYBIrTGTE9sqQNg2J8bo= github.com/prometheus/client_model v0.0.0-20190129233127-fd36f4220a90/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= github.com/prometheus/client_model v0.0.0-20190812154241-14fe0d1b01d4/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.2.0/go.mod h1:xMI15A0UPsDsEKsMN9yxemIoYk6Tm2C1GtYGdfGttqA= -github.com/prometheus/client_model v0.3.0/go.mod h1:LDGWKZIo7rky3hgvBe+caln+Dr3dPggB5dvjtD7w9+w= -github.com/prometheus/client_model v0.4.0/go.mod h1:oMQmHW1/JoDwqLtg57MGgP/Fb1CJEYF2imWWhWtMkYU= github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E= github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY= -github.com/prometheus/common v0.0.0-20181113130724-41aa239b4cce/go.mod h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro= -github.com/prometheus/common v0.4.0/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.4.1/go.mod h1:TNfzLD0ON7rHzMJeJkieUDPYmFC7Snx/y86RQel1bk4= github.com/prometheus/common v0.6.0/go.mod h1:eBmuwkDJBwy6iBfxCBob6t6dR6ENT/y+J+Zk0j9GMYc= -github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= -github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc= -github.com/prometheus/common v0.32.1/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= -github.com/prometheus/common v0.37.0/go.mod h1:phzohg0JFMnBEFGxTDbfu3QyL5GI8gTQJFhYO5B3mfA= -github.com/prometheus/common v0.42.0/go.mod h1:xBwqVerjNdUDjgODMpudtOMwlOwf2SaTr1yjz4b7Zbc= -github.com/prometheus/common v0.44.0/go.mod h1:ofAIvZbQ1e/nugmZGz4/qCb9Ap1VoSTIO7x0VV9VvuY= github.com/prometheus/common v0.52.2 h1:LW8Vk7BccEdONfrJBDffQGRtpSzi5CQaRZGtboOO2ck= github.com/prometheus/common v0.52.2/go.mod h1:lrWtQx+iDfn2mbH5GUzlH9TSHyfZpHkSiG1W7y3sF2Q= github.com/prometheus/procfs v0.0.0-20181005140218-185b4288413d/go.mod h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk= -github.com/prometheus/procfs v0.0.0-20190507164030-5867b95ac084/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/procfs v0.0.2/go.mod h1:TjEm7ze935MbeOT/UhFTIMYKhuLP4wbCsTZCD3I8kEA= github.com/prometheus/procfs v0.0.3/go.mod h1:4A/X28fw3Fc593LaREMrKMqOKvUAntwMDaekg4FpcdQ= -github.com/prometheus/procfs v0.1.3/go.mod h1:lV6e/gmhEcM9IjHGsFOCxxuZ+z1YqCvr4OA4YeYWdaU= -github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= -github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= -github.com/prometheus/procfs v0.8.0/go.mod h1:z7EfXMXOkbkqb9IINtpCn86r/to3BnA0uaxHdg830/4= -github.com/prometheus/procfs v0.9.0/go.mod h1:+pB4zwohETzFnmlpe6yd2lSc+0/46IYZRB/chUwxUZY= -github.com/prometheus/procfs v0.10.1/go.mod h1:nwNm2aOCAYw8uTR/9bWRREkZFxAUcWzPHWJq+XBB/FM= github.com/prometheus/procfs v0.13.0 h1:GqzLlQyfsPbaEHaQkO7tbDlriv/4o5Hudv6OXHGKX7o= github.com/prometheus/procfs v0.13.0/go.mod h1:cd4PFCR54QLnGKPaKGA6l+cfuNXtht43ZKY6tow0Y1g= -github.com/prometheus/tsdb v0.7.1/go.mod h1:qhTCs0VvXwvX/y3TZrWD7rabWM+ijKTux40TwIPHuXU= github.com/redis/go-redis/extra/rediscmd/v9 v9.0.5 h1:EaDatTxkdHG+U3Bk4EUr+DZ7fOGwTfezUiUJMaIcaho= github.com/redis/go-redis/extra/rediscmd/v9 v9.0.5/go.mod h1:fyalQWdtzDBECAQFBJuQe5bzQ02jGd5Qcbgb97Flm7U= github.com/redis/go-redis/extra/redisotel/v9 v9.0.5 h1:EfpWLLCyXw8PSM2/XNJLjI3Pb27yVE+gIAfeqp8LUCc= github.com/redis/go-redis/extra/redisotel/v9 v9.0.5/go.mod h1:WZjPDy7VNzn77AAfnAfVjZNvfJTYfPetfZk5yoSTLaQ= github.com/redis/go-redis/v9 v9.1.0 h1:137FnGdk+EQdCbye1FW+qOEcY5S+SpY9T0NiuqvtfMY= github.com/redis/go-redis/v9 v9.1.0/go.mod h1:urWj3He21Dj5k4TK1y59xH8Uj6ATueP8AH1cY3lZl4c= -github.com/remyoudompheng/bigfft v0.0.0-20170806203942-52369c62f446/go.mod h1:uYEyJGbgTkfkS4+E/PavXkNJcbFIpEtjt2B0KDQ5+9M= -github.com/remyoudompheng/bigfft v0.0.0-20200410134404-eec4a21b6bb0/go.mod h1:qqbHyh8v60DhA7CoWK5oRCqLrMHRGoxYCSS9EjAz6Eo= github.com/rivo/uniseg v0.2.0/go.mod h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc= github.com/rivo/uniseg v0.4.4/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ= github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88= -github.com/rodaine/hclencoder v0.0.1 h1:1jK2rGFxSDT1eU9oVjK4ewrIhMWTcc0yCfZMiN6xRJM= -github.com/rodaine/hclencoder v0.0.1/go.mod h1:XKt85p0Ifyt0pr1KVeB3eL+dUFAKa+IA637lLahBcOQ= -github.com/rogpeppe/fastuuid v0.0.0-20150106093220-6724a57986af/go.mod h1:XWv6SoW27p1b0cqNHllgS5HIMJraePCO15w5zCzIWYg= -github.com/rogpeppe/fastuuid v1.2.0/go.mod h1:jVj6XXZzXRy/MSR5jhDC/2q6DgLz+nrA6LYCDYWNEvQ= -github.com/rogpeppe/go-internal v1.3.0/go.mod h1:M8bDsm7K2OlrFYOpmOWEs/qY81heoFRclV5y23lUDJ4= -github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTEfhy4qGm1nDQc= -github.com/rogpeppe/go-internal v1.9.0/go.mod h1:WtVeX8xhTBvf0smdhujwtBcq4Qrzq/fJaraNFVN+nFs= -github.com/rogpeppe/go-internal v1.10.0/go.mod h1:UQnix2H7Ngw/k4C5ijL5+65zddjncjaFoBhdsK/akog= github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8= github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4= github.com/rubenv/sql-migrate v1.5.2 h1:bMDqOnrJVV/6JQgQ/MxOpU+AdO8uzYYA/TxFUBzFtS0= github.com/rubenv/sql-migrate v1.5.2/go.mod h1:H38GW8Vqf8F0Su5XignRyaRcbXbJunSWxs+kmzlg0Is= -github.com/russross/blackfriday v1.5.2/go.mod h1:JO/DiYxRf+HjHt06OyowR9PTA263kcR/rfWxYHBV53g= github.com/russross/blackfriday/v2 v2.0.1/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/russross/blackfriday/v2 v2.1.0 h1:JIOH55/0cWyOuilr9/qlrm0BSXldqnqwMsf35Ld67mk= github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= -github.com/ruudk/golang-pdf417 v0.0.0-20181029194003-1af4ab5afa58/go.mod h1:6lfFZQK844Gfx8o5WFuvpxWRwnSoipWe/p622j1v06w= -github.com/ruudk/golang-pdf417 v0.0.0-20201230142125-a7e3863a1245/go.mod h1:pQAZKsJ8yyVxGRWYNEm9oFB8ieLgKFnamEyDmSA0BRk= -github.com/ryanuber/columnize v0.0.0-20160712163229-9b3edd62028f/go.mod h1:sm1tb6uqfes/u+d4ooFouqFdy9/2g9QGwK3SQygK0Ts= -github.com/sagikazarmark/locafero v0.4.0 h1:HApY1R9zGo4DBgr7dqsTH/JJxLTTsOt7u6keLGt6kNQ= -github.com/sagikazarmark/locafero v0.4.0/go.mod h1:Pe1W6UlPYUk/+wc/6KFhbORCfqzgYEpgQ3O5fPuL3H4= -github.com/sagikazarmark/slog-shim v0.1.0 h1:diDBnUNK9N/354PgrxMywXnAwEr1QZcOr6gto+ugjYE= -github.com/sagikazarmark/slog-shim v0.1.0/go.mod h1:SrcSrq8aKtyuqEI1uvTDTK1arOWRIczQRv+GVI1AkeQ= github.com/samber/lo v1.46.0 h1:w8G+oaCPgz1PoCJztqymCFaKwXt+5cCXn51uPxExFfQ= github.com/samber/lo v1.46.0/go.mod h1:RmDH9Ct32Qy3gduHQuKJ3gW1fMHAnE/fAzQuf6He5cU= github.com/schollz/progressbar/v3 v3.14.1 h1:VD+MJPCr4s3wdhTc7OEJ/Z3dAeBzJ7yKH/P4lC5yRTI= github.com/schollz/progressbar/v3 v3.14.1/go.mod h1:Zc9xXneTzWXF81TGoqL71u0sBPjULtEHYtj/WVgVy8E= -github.com/sean-/seed v0.0.0-20170313163322-e2103e2c3529/go.mod h1:DxrIzT+xaE7yg65j358z/aeFdxmN0P9QXhEzd20vsDc= -github.com/sergi/go-diff v1.0.0/go.mod h1:0CfEIISq7TuYL3j771MWULgwwjU+GofnZX9QAmXWZgo= github.com/sergi/go-diff v1.3.1 h1:xkr+Oxo4BOQKmkn/B9eMK0g5Kg/983T9DqqPHwYqD+8= github.com/sergi/go-diff v1.3.1/go.mod h1:aMJSSKb2lpPvRNec0+w3fl7LP9IOFzdc9Pa4NFbPK1I= github.com/shopspring/decimal v1.2.0/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o= @@ -1818,57 +655,23 @@ github.com/shopspring/decimal v1.3.1 h1:2Usl1nmF/WZucqkFZhnfFYxxxu8LG21F6nPQBE5g github.com/shopspring/decimal v1.3.1/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o= github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= github.com/sirupsen/logrus v1.2.0/go.mod h1:LxeOpSwHxABJmUn/MG1IvRgCAasNZTLOkJPxbbu5VWo= -github.com/sirupsen/logrus v1.4.2/go.mod h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE= -github.com/sirupsen/logrus v1.6.0/go.mod h1:7uNnSEd1DgxDLC74fIahvMZmmYsHGZGEOFrfsX/uA88= github.com/sirupsen/logrus v1.7.0/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= -github.com/sirupsen/logrus v1.8.1/go.mod h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0= -github.com/sirupsen/logrus v1.9.0/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= github.com/sirupsen/logrus v1.9.3 h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ= github.com/sirupsen/logrus v1.9.3/go.mod h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ= github.com/skeema/knownhosts v1.2.1 h1:SHWdIUa82uGZz+F+47k8SY4QhhI291cXCpopT1lK2AQ= github.com/skeema/knownhosts v1.2.1/go.mod h1:xYbVRSPxqBZFrdmDyMmsOs+uX1UZC3nTN3ThzgDxUwo= -github.com/smartystreets/assertions v0.0.0-20180927180507-b2de0cb4f26d/go.mod h1:OnSkiWE9lh6wB0YB77sQom3nweQdgAjqCqsofrRNTgc= -github.com/smartystreets/goconvey v1.6.4/go.mod h1:syvi0/a8iFYH4r/RixwvyeAJjdLS9QV7WQ/tjFTllLA= -github.com/soheilhy/cmux v0.1.4/go.mod h1:IM3LyeVVIOuxMH7sFAkER9+bJ4dT7Ms6E4xg4kGIyLM= -github.com/soheilhy/cmux v0.1.5/go.mod h1:T7TcVDs9LWfQgPlPsdngu6I6QIoyIFZDDC6sNE1GqG0= github.com/sosodev/duration v1.3.1 h1:qtHBDMQ6lvMQsL15g4aopM4HEfOaYuhWBw3NPTtlqq4= github.com/sosodev/duration v1.3.1/go.mod h1:RQIBBX0+fMLc/D9+Jb/fwvVmo0eZvDDEERAikUR6SDg= -github.com/sourcegraph/conc v0.3.0 h1:OQTbbt6P72L20UqAkXXuLOj79LfEanQ+YQFNpLA9ySo= -github.com/sourcegraph/conc v0.3.0/go.mod h1:Sdozi7LEKbFPqYX2/J+iBAM6HpqSLTASQIKqDmF7Mt0= -github.com/spaolacci/murmur3 v0.0.0-20180118202830-f09979ecbc72/go.mod h1:JwIasOWyU6f++ZhiEuf87xNszmSA2myDM2Kzu9HwQUA= -github.com/spf13/afero v1.1.2/go.mod h1:j4pytiNVoe2o6bmDsKpLACNPDBIoEAkihy7loJ1B0CQ= -github.com/spf13/afero v1.2.2/go.mod h1:9ZxEEn6pIJ8Rxe320qSDBk6AsU0r9pR7Q4OcevTdifk= -github.com/spf13/afero v1.3.3/go.mod h1:5KUK8ByomD5Ti5Artl0RtHeI5pTF7MIDuXL3yY520V4= -github.com/spf13/afero v1.6.0/go.mod h1:Ai8FlHk4v/PARR026UzYexafAt9roJ7LcLMAmO6Z93I= -github.com/spf13/afero v1.9.2/go.mod h1:iUV7ddyEEZPO5gA3zD4fJt6iStLlL+Lg4m2cihcDf8Y= -github.com/spf13/afero v1.11.0 h1:WJQKhtpdm3v2IzqG8VMqrr6Rf3UYpEF239Jy9wNepM8= -github.com/spf13/afero v1.11.0/go.mod h1:GH9Y3pIexgf1MTIWtNGyogA5MwRIDXGUr+hbWNoBjkY= -github.com/spf13/cast v1.3.0/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= github.com/spf13/cast v1.3.1/go.mod h1:Qx5cxh0v+4UWYiBimWS+eyWzqEqokIECu5etghLkUJE= github.com/spf13/cast v1.6.0 h1:GEiTHELF+vaR5dhz3VqZfFSzZjYbgeKDpBxQVS4GYJ0= github.com/spf13/cast v1.6.0/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo= -github.com/spf13/cobra v0.0.3/go.mod h1:1l0Ry5zgKvJasoi3XT1TypsSe7PqH0Sj9dhYf7v3XqQ= -github.com/spf13/cobra v0.0.5/go.mod h1:3K3wKZymM7VvHMDS9+Akkh4K60UwM26emMESw8tLCHU= -github.com/spf13/cobra v1.1.3/go.mod h1:pGADOWyqRD/YMrPZigI/zbliZ2wVD/23d+is3pSWzOo= -github.com/spf13/cobra v1.7.0/go.mod h1:uLxZILRyS/50WlhOIKD7W6V5bgeIt+4sICxh6uRMrb0= github.com/spf13/cobra v1.8.1 h1:e5/vxKd/rZsfSJMUX1agtjeTDf+qv1/JdBF8gg5k9ZM= github.com/spf13/cobra v1.8.1/go.mod h1:wHxEcudfqmLYa8iTfL+OuZPbBZkmvliBWKIezN3kD9Y= -github.com/spf13/jwalterweatherman v1.0.0/go.mod h1:cQK4TGJAtQXfYWX+Ddv3mKDzgVb68N+wFjFa4jdeBTo= -github.com/spf13/pflag v1.0.1/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= -github.com/spf13/pflag v1.0.2/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= -github.com/spf13/pflag v1.0.3/go.mod h1:DYY7MBk1bdzusC3SYhjObp+wFpr4gzcvqqNjLnInEg4= github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= github.com/spf13/pflag v1.0.6-0.20210604193023-d5e0c0615ace h1:9PNP1jnUjRhfmGMlkXHjYPishpcw4jpSt/V/xYY3FMA= github.com/spf13/pflag v1.0.6-0.20210604193023-d5e0c0615ace/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= -github.com/spf13/viper v1.3.2/go.mod h1:ZiWeW+zYFKm7srdB9IoDzzZXaJaI5eL9QjNiN/DMA2s= -github.com/spf13/viper v1.4.0/go.mod h1:PTJ7Z/lr49W6bUbkmS1V3by4uWynFiR9p7+dSq/yZzE= -github.com/spf13/viper v1.7.0/go.mod h1:8WkrPz2fc9jxqZNCJI/76HCieCp4Q8HaLFoCha5qpdg= -github.com/spf13/viper v1.18.2 h1:LUXCnvUvSM6FXAsj6nnfc8Q2tp1dIgUfY9Kc8GsSOiQ= -github.com/spf13/viper v1.18.2/go.mod h1:EKmWIqdnk5lOcmR72yw6hS+8OPYcwD0jteitLMVB+yk= -github.com/stoewer/go-strcase v1.2.0/go.mod h1:IBiWB2sKIp3wVVQ3Y035++gc+knqhUQag1KpM8ahLw8= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.1.1/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= -github.com/stretchr/objx v0.2.0/go.mod h1:qt09Ya8vawLte6SNmTgCsAVtYtaKzEcn8ATUoHMkEqE= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY= @@ -1884,44 +687,14 @@ github.com/stretchr/testify v1.7.2/go.mod h1:R6va5+xMeoiuVRoj+gSkQ7d3FALtqAAGI1F github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= github.com/stretchr/testify v1.8.2/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= -github.com/stretchr/testify v1.8.3/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= github.com/stretchr/testify v1.8.4/go.mod h1:sz/lmYIOXD/1dqDmKjjqLyZ2RngseejIcXlSw2iwfAo= github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= -github.com/subosito/gotenv v1.2.0/go.mod h1:N0PQaV/YGNqwC0u51sEeR/aUtSLEXKX9iv69rRypqCw= -github.com/subosito/gotenv v1.6.0 h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8= -github.com/subosito/gotenv v1.6.0/go.mod h1:Dk4QP5c2W3ibzajGcXpNraDfq2IrhjMIvMSWPKKo0FU= -github.com/tidwall/pretty v1.0.0/go.mod h1:XNkn88O1ChpSDQmQeStsy+sBenx6DDtFZJxhVysOjyk= -github.com/tkrajina/go-reflector v0.5.5 h1:gwoQFNye30Kk7NrExj8zm3zFtrGPqOkzFMLuQZg1DtQ= -github.com/tkrajina/go-reflector v0.5.5/go.mod h1:ECbqLgccecY5kPmPmXg1MrHW585yMcDkVl6IvJe64T4= -github.com/tmc/grpc-websocket-proxy v0.0.0-20170815181823-89b8d40f7ca8/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= -github.com/tmc/grpc-websocket-proxy v0.0.0-20190109142713-0ad062ec5ee5/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= -github.com/tmc/grpc-websocket-proxy v0.0.0-20201229170055-e5319fda7802/go.mod h1:ncp9v5uamzpCO7NfCPTXjqaC+bZgJeR0sMTm6dMHP7U= -github.com/tmc/grpc-websocket-proxy v0.0.0-20220101234140-673ab2c3ae75/go.mod h1:KO6IkyS8Y3j8OdNO85qEYBsRPuteD+YciPomcXdrMnk= -github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS4MhqMhdFk5YI= -github.com/twitchyliquid64/golang-asm v0.15.1/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2+aY1QWCk3Cedj/Gdt08= -github.com/ugorji/go v1.1.4/go.mod h1:uQMGLiO92mf5W77hV/PUCpI3pbzQx3CRekS0kk+RGrc= -github.com/ugorji/go/codec v0.0.0-20181204163529-d75b2dcb6bc8/go.mod h1:VFNgLljTbGfSG7qAOspJ7OScBnGdDN/yBr0sguwnwf0= -github.com/ugorji/go/codec v1.2.11 h1:BMaWp1Bb6fHwEtbplGBGJ498wD+LKlNSl25MjdZY4dU= -github.com/ugorji/go/codec v1.2.11/go.mod h1:UNopzCgEMSXjBc6AOMqYvWC1ktqTAfzJZUZgYf6w6lg= -github.com/urfave/cli v1.20.0/go.mod h1:70zkFmudgCuE/ngEzBv17Jvp/497gISqfk5gWijbERA= github.com/urfave/cli v1.22.5/go.mod h1:Gos4lmkARVdJ6EkW0WaNv/tZAAMe9V7XWyB60NtXRu0= github.com/urfave/cli v1.22.14 h1:ebbhrRiGK2i4naQJr+1Xj92HXZCrK7MsyTS/ob3HnAk= github.com/urfave/cli v1.22.14/go.mod h1:X0eDS6pD6Exaclxm99NJ3FiCDRED7vIHpx2mDOHLvkA= -github.com/valyala/bytebufferpool v1.0.0 h1:GqA5TC/0021Y/b9FG4Oi9Mr3q7XYx6KllzawFIhcdPw= -github.com/valyala/bytebufferpool v1.0.0/go.mod h1:6bBcMArwyJ5K/AmCkWv1jt77kVWyCJ6HpOuEn7z0Csc= -github.com/valyala/fasttemplate v1.2.1 h1:TVEnxayobAdVkhQfrfes2IzOB6o+z4roRkPF52WA1u4= -github.com/valyala/fasttemplate v1.2.1/go.mod h1:KHLXt3tVN2HBp8eijSv/kGJopbvo7S+qRAEEKiv+SiQ= -github.com/vektah/gqlparser v1.1.2/go.mod h1:1ycwN7Ij5njmMkPPAOaRFY4rET2Enx7IkVv3vaXspKw= github.com/vektah/gqlparser/v2 v2.5.16 h1:1gcmLTvs3JLKXckwCwlUagVn/IlV2bwqle0vJ0vy5p8= github.com/vektah/gqlparser/v2 v2.5.16/go.mod h1:1lz1OeCqgQbQepsGxPVywrjdBHW2T08PUS3pJqepRww= -github.com/vmihailenco/msgpack v3.3.3+incompatible/go.mod h1:fy3FlTQTDXWkZ7Bh6AcGMlsjHatGryHQYUTf1ShIgkk= -github.com/vmihailenco/msgpack/v4 v4.3.12/go.mod h1:gborTTJjAo/GWTqqRjrLCn9pgNN+NXzzngzBKDPIqw4= -github.com/vmihailenco/tagparser v0.1.1/go.mod h1:OeAg3pn3UbLjkWt+rN9oFYB6u/cQgqMEUPoW2WPyhdI= -github.com/wailsapp/mimetype v1.4.1 h1:pQN9ycO7uo4vsUUuPeHEYoUkLVkaRntMnHJxVwYhwHs= -github.com/wailsapp/mimetype v1.4.1/go.mod h1:9aV5k31bBOv5z6u+QP8TltzvNGJPmNJD4XlAL3U+j3o= -github.com/wailsapp/wails/v2 v2.4.1 h1:Ns7MOKWQM6l0ttBxpd5VcgYrH+GNPOnoDfnsBpbDnzM= -github.com/wailsapp/wails/v2 v2.4.1/go.mod h1:jbOZbcr/zm79PxXxAjP8UoVlDd9wLW3uDs+isIthDfs= github.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM= github.com/x448/float16 v0.8.4/go.mod h1:14CWIYCyZA/cWjXOioeEpHeN/83MdbZDRQHoFcYsOfg= github.com/xanzy/go-gitlab v0.73.1 h1:UMagqUZLJdjss1SovIC+kJCH4k2AZWXl58gJd38Y/hI= @@ -1935,77 +708,28 @@ github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415 h1:EzJWgHo github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1:GwrjFmJcFw6At/Gs6z4yjiIwzuJ1/+UwLxMQDVQXShQ= github.com/xeipuuv/gojsonschema v1.2.0 h1:LhYJRs+L4fBtjZUfuSZIKGeVu0QRy8e5Xi7D17UxZ74= github.com/xeipuuv/gojsonschema v1.2.0/go.mod h1:anYRn/JVcOK2ZgGU+IjEV4nwlhoK5sQluxsYJ78Id3Y= -github.com/xhit/go-str2duration v1.2.0/go.mod h1:3cPSlfZlUHVlneIVfePFWcJZsuwf+P1v2SRTV4cUmp4= -github.com/xhit/go-str2duration/v2 v2.1.0/go.mod h1:ohY8p+0f07DiV6Em5LKB0s2YpLtXVyJfNt1+BlmyAsU= -github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= github.com/xlab/treeprint v1.2.0 h1:HzHnuAF1plUN2zGlAFHbSQP2qJ0ZAD3XF5XD7OesXRQ= github.com/xlab/treeprint v1.2.0/go.mod h1:gj5Gd3gPdKtR1ikdDK6fnFLdmIS0X30kTTuNd/WEJu0= -github.com/xordataexchange/crypt v0.0.3-0.20170626215501-b2862e3d0a77/go.mod h1:aYKd//L2LvnjZzWKhF00oedf4jCCReLcmhLdhm1A27Q= -github.com/yuin/goldmark v1.1.25/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.1.27/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= -github.com/yuin/goldmark v1.1.32/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.2.1/go.mod h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74= github.com/yuin/goldmark v1.3.5/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= -github.com/yuin/goldmark v1.4.1/go.mod h1:mwnBkeHKe2W/ZEtQ+71ViKU8L12m81fl3OWwC1Zlc8k= github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= -github.com/yuin/gopher-lua v0.0.0-20190206043414-8bfc7677f583/go.mod h1:gqRgreBUhTSL0GeU64rtZ3Uq3wtjOa/TB2YfrtkCbVQ= github.com/yuin/gopher-lua v0.0.0-20220504180219-658193537a64 h1:5mLPGnFdSsevFRFc9q3yYbBkB6tsm4aCwwQV/j1JQAQ= github.com/yuin/gopher-lua v0.0.0-20220504180219-658193537a64/go.mod h1:GBR0iDaNXjAgGg9zfCvksxSRnQx76gclCIb7kdAd1Pw= -github.com/zclconf/go-cty v1.2.0/go.mod h1:hOPWgoHbaTUnI5k4D2ld+GRpFJSCe6bCM7m1q/N4PQ8= -github.com/zclconf/go-cty v1.7.1/go.mod h1:VDR4+I79ubFBGm1uJac1226K5yANQFHeauxPBoP54+o= -github.com/zclconf/go-cty v1.13.2 h1:4GvrUxe/QUDYuJKAav4EYqdM47/kZa672LwmXFmEKT0= -github.com/zclconf/go-cty v1.13.2/go.mod h1:YKQzy/7pZ7iq2jNFzy5go57xdxdWoLLpaEp4u238AE0= -github.com/zeebo/assert v1.3.0/go.mod h1:Pq9JiuJQpG8JLJdtkwrJESF0Foym2/D9XMU5ciN/wJ0= -github.com/zeebo/xxh3 v1.0.2/go.mod h1:5NWz9Sef7zIDm2JHfFlcQvNekmcEl9ekUZQQKCYaDcA= -go.etcd.io/bbolt v1.3.2/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= -go.etcd.io/bbolt v1.3.3/go.mod h1:IbVyRI1SCnLcuJnV2u8VeU0CEYM7e686BmAb1XKL+uU= -go.etcd.io/bbolt v1.3.7/go.mod h1:N9Mkw9X8x5fupy0IKsmuqVtoGDyxsaDlbk4Rd05IAQw= -go.etcd.io/etcd v0.0.0-20191023171146-3cf2f69b5738/go.mod h1:dnLIgRNXwCJa5e+c6mIZCrds/GIG4ncV9HhK5PX7jPg= -go.etcd.io/etcd/api/v3 v3.5.9/go.mod h1:uyAal843mC8uUVSLWz6eHa/d971iDGnCRpmKd2Z+X8k= -go.etcd.io/etcd/client/pkg/v3 v3.5.9/go.mod h1:y+CzeSmkMpWN2Jyu1npecjB9BBnABxGM4pN8cGuJeL4= -go.etcd.io/etcd/client/v2 v2.305.9/go.mod h1:0NBdNx9wbxtEQLwAQtrDHwx58m02vXpDcgSYI2seohQ= -go.etcd.io/etcd/client/v3 v3.5.9/go.mod h1:i/Eo5LrZ5IKqpbtpPDuaUnDOUv471oDg8cjQaUr2MbA= -go.etcd.io/etcd/pkg/v3 v3.5.0-alpha.0/go.mod h1:tV31atvwzcybuqejDoY3oaNRTtlD2l/Ot78Pc9w7DMY= -go.etcd.io/etcd/raft/v3 v3.5.9/go.mod h1:WnFkqzFdZua4LVlVXQEGhmooLeyS7mqzS4Pf4BCVqXg= -go.etcd.io/etcd/server/v3 v3.5.9/go.mod h1:GgI1fQClQCFIzuVjlvdbMxNbnISt90gdfYyqiAIt65g= -go.etcd.io/gofail v0.1.0/go.mod h1:VZBCXYGZhHAinaBiiqYvuDynvahNsAyLFwB3kEHKz1M= -go.mercari.io/hcledit v0.0.8 h1:ZYitdauqspPYXJKQepKDD7WFem6flYS47fK6cGcnmXg= -go.mercari.io/hcledit v0.0.8/go.mod h1:hxXqCyKJ6WA+Oeo7KZuMr9SZLq/GGFD627ovBcIUAq0= -go.mongodb.org/mongo-driver v1.0.3/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM= -go.mongodb.org/mongo-driver v1.1.1/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM= -go.mongodb.org/mongo-driver v1.1.2/go.mod h1:u7ryQJ+DOzQmeO7zB6MHyr8jkEQvC8vH7qLUO4lqsUM= -go.opencensus.io v0.21.0/go.mod h1:mSImk1erAIZhrmZN+AvHh14ztQfjbGwt4TtuofqLduU= -go.opencensus.io v0.22.0/go.mod h1:+kGneAE2xo2IficOXnaByMWTGM9T73dGwxeWcUqIpI8= -go.opencensus.io v0.22.2/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.3/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.4/go.mod h1:yxeiOL68Rb0Xd1ddK5vPZ/oVn4vY4Ynel7k9FzqtOIw= -go.opencensus.io v0.22.5/go.mod h1:5pWMHQbX5EPX2/62yrJeAkowc+lfs/XD7Uxpq3pI6kk= -go.opencensus.io v0.23.0/go.mod h1:XItmlyltB5F7CS4xOC1DcqMoFqwtC6OG2xF7mCv7P7E= go.opencensus.io v0.24.0 h1:y73uSU6J157QMP2kn2r30vwW1A2W2WFwSCGnAVxeaD0= go.opencensus.io v0.24.0/go.mod h1:vNK8G9p7aAivkbmorf4v+7Hgx+Zs0yY+0fOtgBfjQKo= go.opentelemetry.io/contrib/exporters/autoexport v0.46.1 h1:ysCfPZB9AjUlMa1UHYup3c9dAOCMQX/6sxSfPBUoxHw= go.opentelemetry.io/contrib/exporters/autoexport v0.46.1/go.mod h1:ha0aiYm+DOPsLHjh0zoQ8W8sLT+LJ58J3j47lGpSLrU= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.25.0/go.mod h1:E5NNboN0UqSAki0Atn9kVwaN7I+l25gGxDqBueo/74E= -go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc v0.35.0/go.mod h1:h8TWwRAhQpOd0aM5nYsRD8+flnkj+526GEIVlarH7eY= -go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.35.1/go.mod h1:9NiG9I2aHTKkcxqCILhjtyNA1QEiCjdBACv4IvrFQ+c= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.46.1 h1:aFJWCqJMNjENlcleuuOkGAPH82y0yULBScfXcIEdS24= go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.46.1/go.mod h1:sEGXWArGqc3tVa+ekntsN65DmVbVeW+7lTKTjZF3/Fo= -go.opentelemetry.io/otel v1.0.1/go.mod h1:OPEOD4jIT2SlZPMmwT6FqZz2C0ZNdQqiWcoK6M0SNFU= -go.opentelemetry.io/otel v1.8.0/go.mod h1:2pkj+iMj0o03Y+cW6/m8Y4WkRdYN3AvCXCnzRMp9yvM= -go.opentelemetry.io/otel v1.10.0/go.mod h1:NbvWjCthWHKBEUMpf0/v8ZRZlni86PpGFEMA9pnQSnQ= go.opentelemetry.io/otel v1.22.0 h1:xS7Ku+7yTFvDfDraDIJVpw7XPyuHlB9MCiqqX5mcJ6Y= go.opentelemetry.io/otel v1.22.0/go.mod h1:eoV4iAi3Ea8LkAEI9+GFT44O6T/D0GWAVFyZVCC6pMI= -go.opentelemetry.io/otel/exporters/otlp/internal/retry v1.10.0/go.mod h1:78XhIg8Ht9vR4tbLNUhXsiOnE2HOuSeKAiAcoVQEpOY= go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v0.44.0 h1:jd0+5t/YynESZqsSyPz+7PAFdEop0dlN0+PkyHYo8oI= go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetricgrpc v0.44.0/go.mod h1:U707O40ee1FpQGyhvqnzmCJm1Wh6OX6GGBVn0E6Uyyk= go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v0.44.0 h1:bflGWrfYyuulcdxf14V6n9+CoQcu5SAAdHmDPAJnlps= go.opentelemetry.io/otel/exporters/otlp/otlpmetric/otlpmetrichttp v0.44.0/go.mod h1:qcTO4xHAxZLaLxPd60TdE88rxtItPHgHWqOhOGRr0as= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.0.1/go.mod h1:Kv8liBeVNFkkkbilbgWRpV+wWuu+H5xdOT6HAgd30iw= -go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.10.0/go.mod h1:Krqnjl22jUJ0HgMzw5eveuCvFDXY4nSYb4F8t5gdrag= go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.22.0 h1:9M3+rhx7kZCIQQhQRYaZCdNu1V73tm4TvXs2ntl98C4= go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.22.0/go.mod h1:noq80iT8rrHP1SfybmPiRGc9dc5M8RPmGvtwo7Oo7tc= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.0.1/go.mod h1:xOvWoTOrQjxjW61xtOmD/WKGRYb/P4NzRo3bs65U6Rk= -go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.10.0/go.mod h1:OfUCyyIiDvNXHWpcWgbF+MWvqPZiNa3YDEnivcnYsV0= go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.21.0 h1:tIqheXEFWAZ7O8A7m+J0aPTmpJN3YQ7qetUAdkkkKpk= go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.21.0/go.mod h1:nUeKExfxAQVbiVFn32YXpXZZHZ61Cc3s3Rn1pDBGAb0= go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.21.0 h1:digkEZCJWobwBqMwC0cwCq8/wkkRy/OowZg5OArWZrM= @@ -2016,886 +740,203 @@ go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v0.44.0 h1:dEZWPjVN22urgY go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v0.44.0/go.mod h1:sTt30Evb7hJB/gEk27qLb1+l9n4Tb8HvHkR0Wx3S6CU= go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.21.0 h1:VhlEQAPp9R1ktYfrPk5SOryw1e9LDDTZCbIPFrho0ec= go.opentelemetry.io/otel/exporters/stdout/stdouttrace v1.21.0/go.mod h1:kB3ufRbfU+CQ4MlUcqtW8Z7YEOBeK2DJ6CmR5rYYF3E= -go.opentelemetry.io/otel/metric v0.31.0/go.mod h1:ohmwj9KTSIeBnDBm/ZwH2PSZxZzoOaG2xZeekTRzL5A= go.opentelemetry.io/otel/metric v1.22.0 h1:lypMQnGyJYeuYPhOM/bgjbFM6WE44W1/T45er4d8Hhg= go.opentelemetry.io/otel/metric v1.22.0/go.mod h1:evJGjVpZv0mQ5QBRJoBF64yMuOf4xCWdXjK8pzFvliY= -go.opentelemetry.io/otel/sdk v1.0.1/go.mod h1:HrdXne+BiwsOHYYkBE5ysIcv2bvdZstxzmCQhxTcZkI= -go.opentelemetry.io/otel/sdk v1.10.0/go.mod h1:vO06iKzD5baltJz1zarxMCNHFpUlUiOy4s65ECtn6kE= go.opentelemetry.io/otel/sdk v1.22.0 h1:6coWHw9xw7EfClIC/+O31R8IY3/+EiRFHevmHafB2Gw= go.opentelemetry.io/otel/sdk v1.22.0/go.mod h1:iu7luyVGYovrRpe2fmj3CVKouQNdTOkxtLzPvPz1DOc= go.opentelemetry.io/otel/sdk/metric v1.21.0 h1:smhI5oD714d6jHE6Tie36fPx4WDFIg+Y6RfAY4ICcR0= go.opentelemetry.io/otel/sdk/metric v1.21.0/go.mod h1:FJ8RAsoPGv/wYMgBdUJXOm+6pzFY3YdljnXtv1SBE8Q= -go.opentelemetry.io/otel/trace v1.0.1/go.mod h1:5g4i4fKLaX2BQpSBsxw8YYcgKpMMSW3x7ZTuYBr3sUk= -go.opentelemetry.io/otel/trace v1.8.0/go.mod h1:0Bt3PXY8w+3pheS3hQUt+wow8b1ojPaTBoTCh2zIFI4= -go.opentelemetry.io/otel/trace v1.10.0/go.mod h1:Sij3YYczqAdz+EhmGhE6TpTxUO5/F/AzrK+kxfGqySM= go.opentelemetry.io/otel/trace v1.22.0 h1:Hg6pPujv0XG9QaVbGOBVHunyuLcCC3jN7WEhPx83XD0= go.opentelemetry.io/otel/trace v1.22.0/go.mod h1:RbbHXVqKES9QhzZq/fE5UnOSILqRt40a21sPw2He1xo= -go.opentelemetry.io/proto/otlp v0.7.0/go.mod h1:PqfVotwruBrMGOCsRd/89rSnXhoiJIqeYNgFYFoEGnI= -go.opentelemetry.io/proto/otlp v0.9.0/go.mod h1:1vKfU9rv61e9EVGthD1zNvUbiwPcimSsOPU9brfSHJg= -go.opentelemetry.io/proto/otlp v0.15.0/go.mod h1:H7XAot3MsfNsj7EXtrA2q5xSNQ10UqI405h3+duxN4U= -go.opentelemetry.io/proto/otlp v0.19.0/go.mod h1:H7XAot3MsfNsj7EXtrA2q5xSNQ10UqI405h3+duxN4U= go.opentelemetry.io/proto/otlp v1.0.0 h1:T0TX0tmXU8a3CbNXzEKGeU5mIVOdf0oykP+u2lIVU/I= go.opentelemetry.io/proto/otlp v1.0.0/go.mod h1:Sy6pihPLfYHkr3NkUbEhGHFhINUSI/v80hjKIs5JXpM= go.starlark.net v0.0.0-20230525235612-a134d8f9ddca h1:VdD38733bfYv5tUZwEIskMM93VanwNIi5bIKnDrJdEY= go.starlark.net v0.0.0-20230525235612-a134d8f9ddca/go.mod h1:jxU+3+j+71eXOW14274+SmmuW82qJzl6iZSeqEtTGds= -go.uber.org/atomic v1.3.2/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= -go.uber.org/atomic v1.4.0/go.mod h1:gD2HeocX3+yG+ygLZcrzQJaqmWj9AIm7n08wl/qW/PE= -go.uber.org/atomic v1.6.0/go.mod h1:sABNBOSYdrvTF6hTgEIbc7YasKWGhgEQZyfxyTvoXHQ= -go.uber.org/atomic v1.7.0/go.mod h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc= -go.uber.org/atomic v1.10.0/go.mod h1:LUxbIzbOniOlMKjJjyPfpl4v+PKK2cNJn91OQbhoJI0= -go.uber.org/goleak v1.1.10/go.mod h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A= -go.uber.org/goleak v1.1.11/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= -go.uber.org/goleak v1.1.12/go.mod h1:cwTWslyiVhfpKIDGSZEM2HlOvcqm+tG4zioyIeLoqMQ= -go.uber.org/goleak v1.2.0/go.mod h1:XJYK+MuIchqpmGmUSAzotztawfKvYLUIgg7guXrwVUo= -go.uber.org/goleak v1.2.1/go.mod h1:qlT2yGI9QafXHhZZLxlSuNsMw3FFLxBr+tBRlmO1xH4= go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= -go.uber.org/multierr v1.1.0/go.mod h1:wR5kodmAFQ0UK8QlbwjlSNy0Z68gJhDJUG5sjR94q/0= -go.uber.org/multierr v1.5.0/go.mod h1:FeouvMocqHpRaaGuG9EjoKcStLC43Zu/fmqdUMPcKYU= -go.uber.org/multierr v1.6.0/go.mod h1:cdWPpRnG4AhwMwsgIHip0KRBQjJy5kYEpYjJxpXp9iU= -go.uber.org/multierr v1.10.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= go.uber.org/multierr v1.11.0 h1:blXXJkSxSSfBVBlC76pxqeO+LN3aDfLQo+309xJstO0= go.uber.org/multierr v1.11.0/go.mod h1:20+QtiLqy0Nd6FdQB9TLXag12DsQkrbs3htMFfDN80Y= -go.uber.org/tools v0.0.0-20190618225709-2cfd321de3ee/go.mod h1:vJERXedbb3MVM5f9Ejo0C68/HhF8uaILCdgjnY+goOA= -go.uber.org/zap v1.10.0/go.mod h1:vwi/ZaCAaUcBkycHslxD9B2zi4UTXhF60s6SWpuDF0Q= -go.uber.org/zap v1.16.0/go.mod h1:MA8QOfq0BHJwdXa996Y4dYkAqRKB8/1K1QMMZVaNZjQ= -go.uber.org/zap v1.17.0/go.mod h1:MXVU+bhUf/A7Xi2HNOnopQOrmycQ5Ih87HtOu4q5SSo= -go.uber.org/zap v1.19.0/go.mod h1:xg/QME4nWcxGxrpdeYfq7UvYrLh66cuVKdrbD1XF/NI= -go.uber.org/zap v1.24.0/go.mod h1:2kMP+WWQ8aoFoedH3T2sq6iJ2yDWpHbP0f6MQbS9Gkg= -go.uber.org/zap v1.25.0/go.mod h1:JIAUzQIH94IC4fOJQm7gMmBJP5k7wQfdcnYdPoEXJYk= go.uber.org/zap v1.27.0 h1:aJMhYGrd5QSmlpLMr2MftRKl7t8J8PTZPA732ud/XR8= go.uber.org/zap v1.27.0/go.mod h1:GB2qFLM7cTU87MWRP2mPIjqfIDnGu+VIO4V/SdhGo2E= -golang.org/x/arch v0.0.0-20210923205945-b76863e36670/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8= -golang.org/x/arch v0.3.0 h1:02VY4/ZcO/gBOH6PUaoiptASxtXU10jazRCP865E97k= -golang.org/x/arch v0.3.0/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8= golang.org/x/crypto v0.0.0-20180904163835-0709b304e793/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20181029021203-45a5f77698d3/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= -golang.org/x/crypto v0.0.0-20181203042331-505ab145d0a9/go.mod h1:6SG95UA2DQfeDnfUPMdvaQW0Q7yPrPDi9nlGo2tz2b4= golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190320223903-b7391e95e576/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= -golang.org/x/crypto v0.0.0-20190426145343-a29dc8fdc734/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190510104115-cbcb75029529/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190611184440-5c40567a22f8/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190617133340-57b3e21c3d56/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190820162420-60c769a6c586/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20190911031432-227b76d455e7/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= -golang.org/x/crypto v0.0.0-20200414173820-0848c9571904/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200420201142-3c4aac89819a/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20201002170205-7f63de1d35b0/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= golang.org/x/crypto v0.0.0-20201016220609-9e8e0b390897/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.0.0-20210421170649-83a5a9bb288b/go.mod h1:T9bdIzuCu7OtxOm1hfPfRQxPLYneinmdGuTeoZ9dtd4= golang.org/x/crypto v0.0.0-20210921155107-089bfa567519/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.0.0-20211108221036-ceb1ce70b4fa/go.mod h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc= -golang.org/x/crypto v0.0.0-20220314234659-1baeb1ce4c0b/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.0.0-20220411220226-7b82a4e95df4/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= golang.org/x/crypto v0.0.0-20220622213112-05595931fe9d/go.mod h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4= -golang.org/x/crypto v0.1.0/go.mod h1:RecgLatLF4+eUMCP1PoPZQb+cVrJcOPbHkTkbkB9sbw= golang.org/x/crypto v0.3.0/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4= golang.org/x/crypto v0.3.1-0.20221117191849-2c476679df9a/go.mod h1:hebNnKkNXi2UzZN1eVRvBB7co0a+JxK6XbPiWVs/3J4= golang.org/x/crypto v0.6.0/go.mod h1:OFC/31mSvZgRz0V1QTNCzfAI1aIRzbiufJtkMIlEp58= golang.org/x/crypto v0.7.0/go.mod h1:pYwdfH91IfpZVANVyUOhSIPZaFoJGxTFbZhFTx+dXZU= -golang.org/x/crypto v0.9.0/go.mod h1:yrmDGqONDYtNj3tH8X9dzUun2m2lzPa9ngI6/RUPGR0= -golang.org/x/crypto v0.11.0/go.mod h1:xgJhtzW8F9jGdVFWZESrid1U1bjeNy4zgy5cRr/CIio= -golang.org/x/crypto v0.12.0/go.mod h1:NF0Gs7EO5K4qLn+Ylc+fih8BSTeIjAP05siRnAh98yw= golang.org/x/crypto v0.13.0/go.mod h1:y6Z2r+Rw4iayiXXAIxJIDAJ1zMW4yaTpebo8fPOliYc= -golang.org/x/crypto v0.14.0/go.mod h1:MVFd36DqK4CsrnJYDkBA3VC4m2GkXAM0PvzMCn4JQf4= -golang.org/x/crypto v0.16.0/go.mod h1:gCAAfMLgwOJRpTjQ2zCCt2OcSfYMTeZVSRtQlPC7Nq4= -golang.org/x/crypto v0.19.0/go.mod h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU= -golang.org/x/crypto v0.21.0/go.mod h1:0BP7YvVV9gBbVKyeTG0Gyn+gZm94bibOW5BjDEYAOMs= golang.org/x/crypto v0.25.0 h1:ypSNr+bnYL2YhwoMt2zPxHFmbAN1KZs/njMG3hxUp30= golang.org/x/crypto v0.25.0/go.mod h1:T+wALwcMOSE0kXgUAnPAHqTLW+XHgcELELW8VaDgm/M= -golang.org/x/exp v0.0.0-20180321215751-8460e604b9de/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20180807140117-3d87b88a115f/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20190125153040-c74c464bbbf2/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA= -golang.org/x/exp v0.0.0-20190312203227-4b39c73a6495/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= -golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8= -golang.org/x/exp v0.0.0-20190829153037-c13cbed26979/go.mod h1:86+5VVa7VpoJ4kLfm080zCjGlMRFzhUhsZKEZO7MGek= -golang.org/x/exp v0.0.0-20191002040644-a1355ae1e2c3/go.mod h1:NOZ3BPKG0ec/BKJQgnvsSFpcKLM5xXVWnvZS97DWHgE= -golang.org/x/exp v0.0.0-20191030013958-a1ab85dbe136/go.mod h1:JXzH8nQsPlswgeRAPE3MuO9GYsAcnJvJ4vnMwN/5qkY= -golang.org/x/exp v0.0.0-20191129062945-2f5052295587/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= -golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= -golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= -golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= -golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= -golang.org/x/exp v0.0.0-20220722155223-a9213eeb770e/go.mod h1:Kr81I6Kryrl9sr8s2FK3vxD90NdsKWRuOIl2O4CvYbA= -golang.org/x/exp v0.0.0-20220827204233-334a2380cb91/go.mod h1:cyybsKvd6eL0RnXn6p/Grxp8F5bW7iYuBgsNCOHpMYE= golang.org/x/exp v0.0.0-20240103183307-be819d1f06fc h1:ao2WRsKSzW6KuUY9IWPwWahcHCgR0s52IfwutMfEbdM= golang.org/x/exp v0.0.0-20240103183307-be819d1f06fc/go.mod h1:iRJReGqOEeBhDZGkGbynYwcHlctCvnjTYIamk7uXpHI= -golang.org/x/image v0.0.0-20180708004352-c73c2afc3b81/go.mod h1:ux5Hcp/YLpHSI86hEcLt0YII63i6oz57MZXIpbrjZUs= -golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= -golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= -golang.org/x/image v0.0.0-20190910094157-69e4b8554b2a/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= -golang.org/x/image v0.0.0-20200119044424-58c23975cae1/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= -golang.org/x/image v0.0.0-20200430140353-33d19683fad8/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= -golang.org/x/image v0.0.0-20200618115811-c13761719519/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= -golang.org/x/image v0.0.0-20201208152932-35266b937fa6/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= -golang.org/x/image v0.0.0-20210216034530-4410531fe030/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= -golang.org/x/image v0.0.0-20210607152325-775e3b0c77b9/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM= -golang.org/x/image v0.0.0-20210628002857-a66eb6448b8d/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM= -golang.org/x/image v0.0.0-20211028202545-6944b10bf410/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM= -golang.org/x/image v0.0.0-20220302094943-723b81ca9867/go.mod h1:023OzeP/+EPmXeapQh35lcL3II3LrY8Ic+EFFKVhULM= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190227174305-5b3e6a55c961/go.mod h1:wehouNa3lNwaWXcvxsM5YxQ5yQlVC4a0KAMCusXpPoU= -golang.org/x/lint v0.0.0-20190301231843-5614ed5bae6f/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= golang.org/x/lint v0.0.0-20190313153728-d0100b6bd8b3/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190409202823-959b441ac422/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190909230951-414d861bb4ac/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20190930215403-16217165b5de/go.mod h1:6SW0HCj/g11FgYtHlgUYUwCkIfeOF89ocIRzGO/8vkc= -golang.org/x/lint v0.0.0-20191125180803-fdd1cda4f05f/go.mod h1:5qLYkcX4OjUUV8bRuDixDT3tpyyb+LUpUlRWLxfhWrs= -golang.org/x/lint v0.0.0-20200130185559-910be7a94367/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/lint v0.0.0-20200302205851-738671d3881b/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/lint v0.0.0-20201208152925-83fdc39ff7b5/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/lint v0.0.0-20210508222113-6edffad5e616/go.mod h1:3xt1FjdF8hUf6vQPIChWIBhFzV8gjjsPE/fR3IyQdNY= -golang.org/x/mobile v0.0.0-20190312151609-d3739f865fa6/go.mod h1:z+o9i4GpDbdi3rU15maQ/Ox0txvL9dWGYEHz965HBQE= -golang.org/x/mobile v0.0.0-20190719004257-d2bd2a29d028/go.mod h1:E/iHnbuqvinMTCcRqshq8CkpyQDoeVncDDYHnLhea+o= -golang.org/x/mod v0.0.0-20190513183733-4bf6d317e70e/go.mod h1:mXi4GBBbnImb6dmsKGUJ2LatrhH/nqhxcFungHvyanc= -golang.org/x/mod v0.1.0/go.mod h1:0QHyrYULN0/3qlju5TqG8bIK38QM8yzMo5ekMj3DlcY= -golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= -golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.5.0/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro= -golang.org/x/mod v0.5.1/go.mod h1:5OXOZSfqPIIbmVBIIKWRFfZjPR0E5r58TLhUjH0a2Ro= -golang.org/x/mod v0.6.0-dev.0.20220106191415-9b9b3d81d5e3/go.mod h1:3p9vT2HGsQu2K1YbXdKPJLVgG5VJdoTa1poYQBtP1AY= golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4= -golang.org/x/mod v0.6.0/go.mod h1:4mET923SAdbXp2ki8ey+zGs1SLqsuM2Y0uvdZR/fUNI= -golang.org/x/mod v0.7.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/mod v0.9.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/mod v0.10.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/mod v0.12.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= -golang.org/x/mod v0.14.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= -golang.org/x/mod v0.15.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/mod v0.18.0 h1:5+9lSbEzPSdWkH32vYPBwEpX8KwDbM52Ud9xBUvNlb0= golang.org/x/mod v0.18.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/net v0.0.0-20180218175443-cbe0f9307d01/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180811021610-c39426892332/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20180906233101-161cd47e91fd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181005035420-146acd28ed58/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181023162649-9b4f9f5ad519/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20181114220301-adae6a3d119a/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181201002055-351d144fa1fc/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20181220203305-927f97764cc3/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= -golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190213061140-3a22650c66bd/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190311183353-d8887717615a/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190320064053-1272bf9dcd53/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190501004415-9ce7a6920f09/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190503192946-f4e77d36d62c/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= -golang.org/x/net v0.0.0-20190522155817-f3200d17e092/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= -golang.org/x/net v0.0.0-20190603091049-60506f45cf65/go.mod h1:HSz+uSET+XFnRR8LxR5pz3Of3rY3CfYBVs4xY44aLks= golang.org/x/net v0.0.0-20190613194153-d28f0bde5980/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190628185345-da137c7871d7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190724013045-ca1201d0de80/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190813141303-74dc4d7220e7/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20190827160401-ba9fcec4b297/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20191004110552-13f9640d40b9/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20191112182307-2180aed22343/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20191209160850-c0dbc17a3553/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200114155413-6afb5195e5aa/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200202094626-16171245cfb2/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200222125558-5a598a2470a0/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200301022130-244492dfa37a/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= -golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200501053045-e0ff5e5a1de5/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200506145744-7e3656a0809f/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200513185701-a91f0712d120/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200520004742-59133d7f0dd7/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A= -golang.org/x/net v0.0.0-20200625001655-4c5254603344/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20200707034311-ab3426394381/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= -golang.org/x/net v0.0.0-20200822124328-c89045814202/go.mod h1:/O7V0waA8r7cgGh81Ro3o1hOxt32SMVPicZroKQ2sZA= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20201031054903-ff519b6c9102/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20201202161906-c7110b5ffcbb/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.0.0-20201209123823-ac852fbbde11/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20201224014010-6772e930b67b/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210119194325-5f4716e94777/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= -golang.org/x/net v0.0.0-20210316092652-d523dce5a7f4/go.mod h1:RBQZq4jEuRlivfhVLdyRGr576XBO4/greRjx4P4O3yc= golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM= -golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT/9KSuxbyM7479/AVlXFRxuMCk= -golang.org/x/net v0.0.0-20210503060351-7fd8e65b6420/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20210505024714-0287a6fb4125/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20210525063256-abc453219eb5/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210610132358-84b48f89b13b/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210726213435-c6fcb2dbf985/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20210813160813-60bc85c4be6d/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20211123203042-d83791d6bcd9/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20220127200216-cd36cc0744dd/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.0.0-20220325170049-de3da57026de/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.0.0-20220412020605-290c469a71a5/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.0.0-20220425223048-2871e0cb64e4/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= -golang.org/x/net v0.0.0-20220607020251-c690dde0001d/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.0.0-20220617184016-355a448f1bc9/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.0.0-20220624214902-1bab6f366d9e/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.0.0-20220909164309-bea034e7d591/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= -golang.org/x/net v0.0.0-20221012135044-0b7e1fb9d458/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= -golang.org/x/net v0.0.0-20221014081412-f15817d10f9b/go.mod h1:YDH+HFinaLZZlnHAfSS6ZXJJ9M9t4Dl22yv3iI2vPwk= -golang.org/x/net v0.1.0/go.mod h1:Cx3nUiGt4eDBEyega/BKRp+/AlGL8hYe7U9odMt2Cco= golang.org/x/net v0.2.0/go.mod h1:KqCZLdyyvdV855qA2rE3GC2aiw5xGR5TEjj8smXukLY= -golang.org/x/net v0.3.0/go.mod h1:MBQ8lrhLObU/6UmLb4fmbmk5OcyYmqtbGd/9yIeKjEE= -golang.org/x/net v0.4.0/go.mod h1:MBQ8lrhLObU/6UmLb4fmbmk5OcyYmqtbGd/9yIeKjEE= -golang.org/x/net v0.5.0/go.mod h1:DivGGAXEgPSlEBzxGzZI+ZLohi+xUj054jfeKui00ws= golang.org/x/net v0.6.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= -golang.org/x/net v0.7.0/go.mod h1:2Tu9+aMcznHK/AK1HMvgo6xiTLG5rD5rZLDS+rp2Bjs= golang.org/x/net v0.8.0/go.mod h1:QVkue5JL9kW//ek3r6jTKnTFis1tRmNAW2P1shuFdJc= -golang.org/x/net v0.9.0/go.mod h1:d48xBJpPfHeWQsugry2m+kC02ZBRGRgulfHnEXEuWns= golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= -golang.org/x/net v0.12.0/go.mod h1:zEVYFnQC7m/vmpQFELhcD1EWkZlX69l4oqgmer6hfKA= -golang.org/x/net v0.14.0/go.mod h1:PpSgVXXLK0OxS0F31C1/tv6XNguvCrnXIDrFMspZIUI= golang.org/x/net v0.15.0/go.mod h1:idbUs1IY1+zTqbi8yxTbhexhEEk5ur9LInksu6HrEpk= -golang.org/x/net v0.17.0/go.mod h1:NxSsAGuq816PNPmqtQdLE42eU2Fs7NoRIZrHJAlaCOE= -golang.org/x/net v0.19.0/go.mod h1:CfAk/cbD4CthTvqiEl8NpboMuiuOYsAr/7NOjZJtv1U= -golang.org/x/net v0.21.0/go.mod h1:bIjVDfnllIU7BJ2DNgfnXvpSvtn8VRwhlsaeUTyUS44= -golang.org/x/net v0.23.0/go.mod h1:JKghWKKOSdJwpW2GEx0Ja7fmaKnMsbu+MWVZTokSYmg= golang.org/x/net v0.26.0 h1:soB7SVo0PWrY4vPW/+ay0jKDNScG2X9wFeYlXIvJsOQ= golang.org/x/net v0.26.0/go.mod h1:5YKkiSynbBIh3p6iOc/vibscux0x38BZDkn8sCUPxHE= golang.org/x/oauth2 v0.0.0-20180227000427-d7d64896b5ff/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= -golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20191202225959-858c2ad4c8b6/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20200107190931-bf48bf16ab8d/go.mod h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw= -golang.org/x/oauth2 v0.0.0-20200902213428-5d25da1a8d43/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20201109201403-9fd604954f58/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20201208152858-08078c50e5b5/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210218202405-ba52d332ba99/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210220000619-9bb904979d93/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210313182246-cd4f82c27b84/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210514164344-f6687ab2804c/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210628180205-a41e5a781914/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210805134026-6f1e6394065a/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20210819190943-2bc19b11175f/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20211104180415-d3ed0bb246c8/go.mod h1:KelEdhl1UZF7XfJ4dDtk6s++YSgaE7mD/BuKKDLBl4A= -golang.org/x/oauth2 v0.0.0-20220223155221-ee480838109b/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= -golang.org/x/oauth2 v0.0.0-20220309155454-6242fa91716a/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= -golang.org/x/oauth2 v0.0.0-20220411215720-9780585627b5/go.mod h1:DAh4E804XQdzx2j+YRIaUnCqCV2RuMz24cGBJ5QYIrc= -golang.org/x/oauth2 v0.0.0-20220608161450-d0670ef3b1eb/go.mod h1:jaDAt6Dkxork7LmZnYtzbRWj0W47D86a3TGe0YHBvmE= -golang.org/x/oauth2 v0.0.0-20220622183110-fd043fe589d2/go.mod h1:jaDAt6Dkxork7LmZnYtzbRWj0W47D86a3TGe0YHBvmE= -golang.org/x/oauth2 v0.0.0-20220822191816-0ebed06d0094/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= -golang.org/x/oauth2 v0.0.0-20220909003341-f21342109be1/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= -golang.org/x/oauth2 v0.0.0-20221006150949-b44042a4b9c1/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= -golang.org/x/oauth2 v0.0.0-20221014153046-6fdb5e3db783/go.mod h1:h4gKUeWbJ4rQPri7E0u6Gs4e9Ri2zaLxzw5DI5XGrYg= -golang.org/x/oauth2 v0.4.0/go.mod h1:RznEsdpjGAINPTOF0UH/t+xJ75L18YO3Ho6Pyn+uRec= -golang.org/x/oauth2 v0.5.0/go.mod h1:9/XBHVqLaWO3/BRHs5jbpYCnOZVjj5V0ndyaAM7KB4I= -golang.org/x/oauth2 v0.6.0/go.mod h1:ycmewcwgD4Rpr3eZJLSB4Kyyljb3qDh40vJ8STE5HKw= -golang.org/x/oauth2 v0.7.0/go.mod h1:hPLQkd9LyjfXTiRohC/41GhcFqxisoUQ99sCUOHO9x4= -golang.org/x/oauth2 v0.8.0/go.mod h1:yr7u4HXZRm1R1kBWqr/xKNqewf0plRYoB7sla+BCIXE= -golang.org/x/oauth2 v0.10.0/go.mod h1:kTpgurOux7LqtuxjuyZa4Gj2gdezIt/jQtGnNFfypQI= golang.org/x/oauth2 v0.19.0 h1:9+E/EZBCbTLNrbN35fHv/a/d/mOBatymz1zbtQrXpIg= golang.org/x/oauth2 v0.19.0/go.mod h1:vYi7skDa1x015PmRRYZ7+s1cWyPgrPiSYRe4rnsexc8= golang.org/x/sync v0.0.0-20180314180146-1d60e4601c6f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181108010431-42b317875d0f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20181221193216-37e7f081c4d4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20190227155943-e225da77a7e6/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20200317015054-43a5402ce75a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20220601150217-0de741cfad7f/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20220819030929-7fc1605a5dde/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.0.0-20220929204114-8fcdb60fdcc0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.2.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= -golang.org/x/sync v0.5.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= -golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sync v0.7.0 h1:YsImfSBoP9QPYL0xyKJPq0gcaJdG3rInoqxTWbfQu9M= golang.org/x/sync v0.7.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20180224232135-f6cff0780e54/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180823144017-11551d06cbcc/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181026203630-95b1ffbd15a5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181107165924-66b7b1311ac8/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20181116152217-5ac8a444bdc5/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20181205085412-a5c9d58dba9a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190204203706-41f3e6584952/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= -golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190321052220-f7bb7a8bee54/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190422165155-953cdadca894/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190502145724-3ef323f4f1fd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190502175342-a43fa875dd82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190507160741-ecd444e8653b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190606165138-5da285871e9c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190616124812-15dcb6c0061f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190624142023-c5567b49c5d0/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190726091711-fc99dfbffb4e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20190801041406-cbf593c0f2f3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190826190057-c7b8b68b1456/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190904154756-749cb33beabd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20190916202348-b4ddaad3f8a3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191001151750-bb3f8db39f24/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191005200804-aed5e4c7ecf9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191105231009-c1f44814a5cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20191112214154-59a1497f0cea/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191120155948-bd437916bb0e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191204072324-ce4227a45e2e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20191228213918-04cbcbbfeed8/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200106162015-b016eb3dc98e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200113162924-86b910548bc1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200116001909-b77594299b42/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200122134326-e047566fdf82/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200202164722-d101bd2416d5/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200212091648-12a6c2dcc1e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200223170610-d5e6a3e2c0ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200302150141-5c8b2ff67527/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200323222414-85ca7c5b95cd/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200331124033-c3d80250170d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200501052902-10377860bb8e/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200511232937-7e40ca221e25/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200515095857-1151b9dac4a9/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200615200032-f1bc736245b1/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200625212154-ddb9806d33ae/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200803210538-64077c9b5642/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200810151505-1b9f1253b3ed/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20200905004654-be1d3432aa8f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201009025420-dfb3f7c4e634/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20201201145000-ef89a241ccb3/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210104204734-6f8348627aad/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210112080510-489259a85091/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210119212857-b64e53b001e4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210220050731-9a76102bfb43/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210225134936-a50acf3fe073/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210304124612-50617c2ba197/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210305230114-8fe3ee5dd75b/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210315160823-c6e025ad8005/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210320140829-1e4c9ba3b0c4/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210330210617-4fbd30eecc44/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210331175145-43e1dd70ce54/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210403161142-5e06dd20ab57/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= -golang.org/x/sys v0.0.0-20210423185535-09eb48e85fd7/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20210510120138-977fb7262007/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210514084401-e8d321eab015/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210603081109-ebe580a85c40/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210603125802-9665404d3644/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210615035016-665e8c7367d1/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210630005230-0f9fa26af87c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210806184541-e5e7981a1069/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210816183151-1e6c022a8912/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210823070655-63515b42dcdf/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20210908233432-aa78b53d3365/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20210927094055-39ccf1dd6fa6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211007075335-d3039528d8ac/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211019181941-9d821ace8654/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211103235746-7861aae1554b/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211124211545-fe61309f8881/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211210111614-af8b64212486/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20211216021012-1d35b9e2eb4e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220114195835-da31bd327af9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220128215802-99c3d69c2c27/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220209214540-3681064d5158/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220227234510-4e6760a101f9/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220319134239-a9b59b0215f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220328115105-d36c6a25d886/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220330033206-e17cdc41300f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220412211240-33da011f77ad/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220422013727-9388b58f7150/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220502124256-b6088ccd6cba/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220503163025-988cb79eb6c6/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220610221304-9f5ed59c137d/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220615213510-4f61da869c0c/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220624220833-87e55d714810/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220704084225-05e143d24a9e/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220728004956-3c1f35247d10/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220829200755-d48e67d00261/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.0.0-20220908164124-27713097b956/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.2.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.3.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.4.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.5.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.7.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.9.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.10.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.11.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.12.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.13.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.14.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.15.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/sys v0.18.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= golang.org/x/sys v0.22.0 h1:RI27ohtqKCnwULzJLqkv897zojh5/DwS/ENaMzUOaWI= golang.org/x/sys v0.22.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= -golang.org/x/telemetry v0.0.0-20240208230135-b75ee8823808/go.mod h1:KG1lNk5ZFNssSZLrpVb4sMXKMpGwGXOxSG3rnu2gZQQ= golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210503060354-a79de5458b56/go.mod h1:tfny5GFUkzUvx4ps4ajbZsCe5lw1metzhBm9T3x7oIY= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.0.0-20220526004731-065cf7ba2467/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.1.0/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= golang.org/x/term v0.2.0/go.mod h1:TVmDHMZPmdnySmBfhjOoOdhjzdE1h4u1VwSiw2l1Nuc= -golang.org/x/term v0.3.0/go.mod h1:q750SLmJuPmVoN1blW3UFBPREJfb1KmY3vwxfr+nFDA= -golang.org/x/term v0.4.0/go.mod h1:9P2UbLfCdcvo3p/nzKvsmas4TnlujnuoV9hGgYzW1lQ= golang.org/x/term v0.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k= golang.org/x/term v0.6.0/go.mod h1:m6U89DPEgQRMq3DNkDClhWw02AUbt2daBVO4cn4Hv9U= -golang.org/x/term v0.7.0/go.mod h1:P32HKFT3hSsZrRxla30E9HqToFYAQPCMs/zFMBUFqPY= golang.org/x/term v0.8.0/go.mod h1:xPskH00ivmX89bAKVGSKKtLOWNx2+17Eiy94tnKShWo= -golang.org/x/term v0.10.0/go.mod h1:lpqdcUyK/oCiQxvxVrppt5ggO2KCZ5QblwqPnfZ6d5o= -golang.org/x/term v0.11.0/go.mod h1:zC9APTIj3jG3FdV/Ons+XE1riIZXG4aZ4GTHiPZJPIU= golang.org/x/term v0.12.0/go.mod h1:owVbMEjm3cBLCHdkQu9b1opXd4ETQWc3BhuQGKgXgvU= -golang.org/x/term v0.13.0/go.mod h1:LTmsnFJwVN6bCy1rVCoS+qHT1HhALEFxKncY3WNNh4U= golang.org/x/term v0.14.0/go.mod h1:TySc+nGkYR6qt8km8wUhuFRTVSMIX3XPR58y2lC8vww= -golang.org/x/term v0.15.0/go.mod h1:BDl952bC7+uMoWR75FIrCDx79TPU9oHkTZ9yRbYOrX0= -golang.org/x/term v0.17.0/go.mod h1:lLRBjIVuehSbZlaOtGMbcMncT+aqLLLmKrsjNrUguwk= -golang.org/x/term v0.18.0/go.mod h1:ILwASektA3OnRv7amZ1xhE/KTR+u50pbXfZ03+6Nx58= golang.org/x/term v0.22.0 h1:BbsgPEJULsl2fV/AT3v15Mjva5yXKQDyKf+TbDz7QJk= golang.org/x/term v0.22.0/go.mod h1:F3qCibpT5AMpCRfhfT53vVJwhLtIVHhB9XDjfFvnMI4= -golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= -golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.4/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.3.5/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.6/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= -golang.org/x/text v0.3.8/go.mod h1:E6s5w1FMmriuDzIBO73fBruAKo1PCIq6d2Q6DHfQ8WQ= golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.5.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.6.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= golang.org/x/text v0.8.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= golang.org/x/text v0.9.0/go.mod h1:e1OnstbJyHTd6l/uOt8jFFHp6TRDWZR/bV3emEE/zU8= -golang.org/x/text v0.11.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= -golang.org/x/text v0.12.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= golang.org/x/text v0.13.0/go.mod h1:TvPlkZtksWOMsz7fbANvkp4WM8x/WCo/om8BMLbz+aE= -golang.org/x/text v0.14.0/go.mod h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU= golang.org/x/text v0.16.0 h1:a94ExnEXNtEwYLGJSIUxnWoxoRz/ZcCsV63ROupILh4= golang.org/x/text v0.16.0/go.mod h1:GhwF1Be+LQoKShO3cGOHzqOgRrGaYc9AvblQOmPVHnI= -golang.org/x/time v0.0.0-20180412165947-fbb02b2291d2/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20210220033141-f8bda1e9f3ba/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.0.0-20211116232009-f0f3c7e86c11/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.0.0-20220922220347-f3bd1da661af/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.1.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= -golang.org/x/time v0.3.0/go.mod h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ= golang.org/x/time v0.5.0 h1:o7cqy6amK/52YcAKIPlM3a+Fpj35zvRj2TP+e1xFSfk= golang.org/x/time v0.5.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM= -golang.org/x/tools v0.0.0-20180221164845-07fd8470d635/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20180525024113-a5b4c53f6e8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190125232054-d66bd3c5d5a6/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= -golang.org/x/tools v0.0.0-20190206041539-40960b6deb8e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20190226205152-f727befe758c/go.mod h1:9Yl7xja0Znq3iFh3HoIrodX9oNMXvdceNzlUR8zjMvY= golang.org/x/tools v0.0.0-20190311212946-11955173bddd/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190312151545-0bb0c0a6e846/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190312170243-e65039ee4138/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190328211700-ab21143f2384/go.mod h1:LCzVGOaR6xXOjkQ3onu1FJEFr0SW1gC7cKk1uF8kGRs= -golang.org/x/tools v0.0.0-20190425150028-36563e24a262/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190506145303-2d16b83fe98c/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= golang.org/x/tools v0.0.0-20190524140312-2c0ae7006135/go.mod h1:RgjU9mgBXZiqYHBnxXauZ1Gv1EHHAz9KjViQ78xBX0Q= -golang.org/x/tools v0.0.0-20190606124116-d0a3d012864b/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190614205625-5aca471b1d59/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190617190820-da514acc4774/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190621195816-6e04913cbbac/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190628153133-6cdbf07be9d0/go.mod h1:/rFqwRUd4F7ZHNgwSSTFct+R/Kf4OFW1sUzUTQQTgfc= -golang.org/x/tools v0.0.0-20190816200558-6889da9d5479/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20190911174233-4f2ddba30aff/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20190920225731-5eefd052ad72/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20190927191325-030b2cf1153e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191012152004-8de300cfc20a/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191029041327-9cc4af7d6b2c/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191029190741-b9c20aec41a5/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191108193012-7d206e10da11/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191112195655-aa38f8e97acc/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191113191852-77e3bb0ad9e7/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191115202509-3a792d9c32b2/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191125144606-a911d9008d1f/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191130070609-6e064ea0cf2d/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= -golang.org/x/tools v0.0.0-20191216173652-a0e659d51361/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20191227053925-7b8e75db28f4/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200117161641-43d50277825c/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200122220014-bf1340f18c4a/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200130002326-2f3ba24bd6e7/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200204074204-1cc6d1ef6c74/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200207183749-b753a1ba74fa/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200227222343-706bc42d1f0d/go.mod h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28= -golang.org/x/tools v0.0.0-20200304193943-95d2e580d8eb/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= -golang.org/x/tools v0.0.0-20200312045724-11d5b4c81c7d/go.mod h1:o4KQGtdN14AW+yjsvvwRTJJuXz8XRtIHtEnmAXLyFUw= -golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8= -golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200505023115-26f46d2f7ef8/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200512131952-2bc93b1c0c88/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200515010526-7d3b6ebf133d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200618134242-20370b0cb4b2/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= -golang.org/x/tools v0.0.0-20200729194436-6467de6f59a7/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200804011535-6c149bb5ef0d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200825202427-b303f430e36d/go.mod h1:njjCfa9FT2d7l9Bc6FUM5FLjQPp3cFF28FI3qnDFljA= -golang.org/x/tools v0.0.0-20200904185747-39188db58858/go.mod h1:Cj7w3i3Rnn0Xh82ur9kSqwfTHTeVxaDqrfMjpcNT6bE= -golang.org/x/tools v0.0.0-20201110124207-079ba7bd75cd/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20201124115921-2c860bdd6e78/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20201201161351-ac6f37ff4c2a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20201208233053-a543418bbed2/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20201224043029-2b0845dc783e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20210105154028-b0ab187a4818/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.0.0-20210108195828-e2f9c7f1fc8e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= -golang.org/x/tools v0.1.1/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.3/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.4/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= golang.org/x/tools v0.1.6-0.20210726203631-07bc1bf47fb2/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.1.9/go.mod h1:nABZi5QlRsZVlzPpHl034qft6wpY4eDcsTt5AaioBiU= -golang.org/x/tools v0.1.10/go.mod h1:Uh6Zz+xoGYZom868N8YTex3t7RhtHDBrE8Gzo9bV56E= golang.org/x/tools v0.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= -golang.org/x/tools v0.2.0/go.mod h1:y4OqIKeOV/fWJetJ8bXPU1sEVniLMIyDAZWeHdV+NTA= -golang.org/x/tools v0.3.0/go.mod h1:/rWhSS2+zyEVwoJf8YAX6L2f0ntZ7Kn/mGgAWcipA5k= -golang.org/x/tools v0.4.0/go.mod h1:UE5sM2OK9E/d67R0ANs2xJizIymRP5gJU295PvKXxjQ= golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= -golang.org/x/tools v0.7.0/go.mod h1:4pg6aUX35JBAogB10C9AtvVL+qowtN4pT3CGSQex14s= -golang.org/x/tools v0.8.0/go.mod h1:JxBZ99ISMI5ViVkT1tr6tdNmXeTrcpVSD3vZ1RsRdN4= -golang.org/x/tools v0.9.1/go.mod h1:owI94Op576fPu3cIGQeHs3joujW/2Oc6MtlxbF5dfNc= -golang.org/x/tools v0.9.3/go.mod h1:owI94Op576fPu3cIGQeHs3joujW/2Oc6MtlxbF5dfNc= -golang.org/x/tools v0.12.0/go.mod h1:Sc0INKfu04TlqNoRA1hgpFZbhYXHPr4V5DzpSBTPqQM= -golang.org/x/tools v0.13.0/go.mod h1:HvlwmtVNQAhOuCjW7xxvovg8wbNq7LwfXh/k7wXUl58= -golang.org/x/tools v0.16.1/go.mod h1:kYVVN6I1mBNoB1OX+noeBjbRk4IUEPa7JJ+TJMEooJ0= -golang.org/x/tools v0.18.0/go.mod h1:GL7B4CwcLLeo59yx/9UWWuNOW1n3VZ4f5axWfML7Lcg= golang.org/x/tools v0.22.0 h1:gqSGLZqv+AI9lIQzniJ0nZDRG5GBPsSi+DRNHWNz6yA= golang.org/x/tools v0.22.0/go.mod h1:aCwcsjqvq7Yqt6TNyX7QMU2enbQ/Gt0bo6krSeEri+c= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20220411194840-2f41105eb62f/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -golang.org/x/xerrors v0.0.0-20220517211312-f3a8303e98df/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= -golang.org/x/xerrors v0.0.0-20220609144429-65e65417b02f/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2 h1:H2TDz8ibqkAF6YGhCdN3jS9O0/s90v0rJh3X/OLHEUk= golang.org/x/xerrors v0.0.0-20220907171357-04be3eba64a2/go.mod h1:K8+ghG5WaK9qNqU5K3HdILfMLy1f3aNYFI/wnl100a8= gomodules.xyz/jsonpatch/v2 v2.4.0 h1:Ci3iUJyx9UeRx7CeFN8ARgGbkESwJK+KB9lLcWxY/Zw= gomodules.xyz/jsonpatch/v2 v2.4.0/go.mod h1:AH3dM2RI6uoBZxn3LVrfvJ3E0/9dG4cSrbuBJT4moAY= -gonum.org/v1/gonum v0.0.0-20180816165407-929014505bf4/go.mod h1:Y+Yx5eoAFn32cQvJDxZx5Dpnq+c3wtXuadVZAcxbbBo= -gonum.org/v1/gonum v0.0.0-20190331200053-3d26580ed485/go.mod h1:2ltnJ7xHfj0zHS40VVPYEAAMTa3ZGguvHGBSJeRWqE0= -gonum.org/v1/gonum v0.8.2/go.mod h1:oe/vMfY3deqTw+1EZJhuvEW2iwGF1bW9wwu7XCu0+v0= -gonum.org/v1/gonum v0.9.3/go.mod h1:TZumC3NeyVQskjXqmyWt4S3bINhy7B4eYwW69EbyX+0= -gonum.org/v1/gonum v0.11.0/go.mod h1:fSG4YDCxxUZQJ7rKsQrj0gMOg00Il0Z96/qMA4bVQhA= -gonum.org/v1/netlib v0.0.0-20190313105609-8cb42192e0e0/go.mod h1:wa6Ws7BG/ESfp6dHfk7C6KdzKA7wR7u/rKwOGE66zvw= -gonum.org/v1/netlib v0.0.0-20190331212654-76723241ea4e/go.mod h1:kS+toOQn6AQKjmKJ7gzohV1XkqsFehRA2FbsbkopSuQ= -gonum.org/v1/plot v0.0.0-20190515093506-e2840ee46a6b/go.mod h1:Wt8AAjI+ypCyYX3nZBvf6cAIx93T+c/OS2HFAYskSZc= -gonum.org/v1/plot v0.9.0/go.mod h1:3Pcqqmp6RHvJI72kgb8fThyUnav364FOsdDo2aGW5lY= -gonum.org/v1/plot v0.10.1/go.mod h1:VZW5OlhkL1mysU9vaqNHnsy86inf6Ot+jB3r+BczCEo= -google.golang.org/api v0.4.0/go.mod h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE= -google.golang.org/api v0.7.0/go.mod h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M= -google.golang.org/api v0.8.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= -google.golang.org/api v0.9.0/go.mod h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg= -google.golang.org/api v0.13.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= -google.golang.org/api v0.14.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= -google.golang.org/api v0.15.0/go.mod h1:iLdEw5Ide6rF15KTC1Kkl0iskquN2gFfn9o9XIsbkAI= -google.golang.org/api v0.17.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.18.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.19.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.20.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.22.0/go.mod h1:BwFmGc8tA3vsd7r/7kR8DY7iEEGSU04BFxCo5jP/sfE= -google.golang.org/api v0.24.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= -google.golang.org/api v0.28.0/go.mod h1:lIXQywCXRcnZPGlsd8NbLnOjtAoL6em04bJ9+z0MncE= -google.golang.org/api v0.29.0/go.mod h1:Lcubydp8VUV7KeIHD9z2Bys/sm/vGKnG1UHuDBSrHWM= -google.golang.org/api v0.30.0/go.mod h1:QGmEvQ87FHZNiUVJkT14jQNYJ4ZJjdRF23ZXz5138Fc= -google.golang.org/api v0.35.0/go.mod h1:/XrVsuzM0rZmrsbjJutiuftIzeuTQcEeaYcSk/mQ1dg= -google.golang.org/api v0.36.0/go.mod h1:+z5ficQTmoYpPn8LCUNVpK5I7hwkpjbcgqA7I34qYtE= -google.golang.org/api v0.40.0/go.mod h1:fYKFpnQN0DsDSKRVRcQSDQNtqWPfM9i+zNPxepjRCQ8= -google.golang.org/api v0.41.0/go.mod h1:RkxM5lITDfTzmyKFPt+wGrCJbVfniCr2ool8kTBzRTU= -google.golang.org/api v0.43.0/go.mod h1:nQsDGjRXMo4lvh5hP0TKqF244gqhGcr/YSIykhUk/94= -google.golang.org/api v0.47.0/go.mod h1:Wbvgpq1HddcWVtzsVLyfLp8lDg6AA241LmgIL59tHXo= -google.golang.org/api v0.48.0/go.mod h1:71Pr1vy+TAZRPkPs/xlCf5SsU8WjuAWv1Pfjbtukyy4= -google.golang.org/api v0.50.0/go.mod h1:4bNT5pAuq5ji4SRZm+5QIkjny9JAyVD/3gaSihNefaw= -google.golang.org/api v0.51.0/go.mod h1:t4HdrdoNgyN5cbEfm7Lum0lcLDLiise1F8qDKX00sOU= -google.golang.org/api v0.54.0/go.mod h1:7C4bFFOvVDGXjfDTAsgGwDgAxRDeQ4X8NvUedIt6z3k= -google.golang.org/api v0.55.0/go.mod h1:38yMfeP1kfjsl8isn0tliTjIb1rJXcQi4UXlbqivdVE= -google.golang.org/api v0.56.0/go.mod h1:38yMfeP1kfjsl8isn0tliTjIb1rJXcQi4UXlbqivdVE= -google.golang.org/api v0.57.0/go.mod h1:dVPlbZyBo2/OjBpmvNdpn2GRm6rPy75jyU7bmhdrMgI= -google.golang.org/api v0.61.0/go.mod h1:xQRti5UdCmoCEqFxcz93fTl338AVqDgyaDRuOZ3hg9I= -google.golang.org/api v0.63.0/go.mod h1:gs4ij2ffTRXwuzzgJl/56BdwJaA194ijkfn++9tDuPo= -google.golang.org/api v0.67.0/go.mod h1:ShHKP8E60yPsKNw/w8w+VYaj9H6buA5UqDp8dhbQZ6g= -google.golang.org/api v0.70.0/go.mod h1:Bs4ZM2HGifEvXwd50TtW70ovgJffJYw2oRCOFU/SkfA= -google.golang.org/api v0.71.0/go.mod h1:4PyU6e6JogV1f9eA4voyrTY2batOLdgZ5qZ5HOCc4j8= -google.golang.org/api v0.74.0/go.mod h1:ZpfMZOVRMywNyvJFeqL9HRWBgAuRfSjJFpe9QtRRyDs= -google.golang.org/api v0.75.0/go.mod h1:pU9QmyHLnzlpar1Mjt4IbapUCy8J+6HD6GeELN69ljA= -google.golang.org/api v0.77.0/go.mod h1:pU9QmyHLnzlpar1Mjt4IbapUCy8J+6HD6GeELN69ljA= -google.golang.org/api v0.78.0/go.mod h1:1Sg78yoMLOhlQTeF+ARBoytAcH1NNyyl390YMy6rKmw= -google.golang.org/api v0.80.0/go.mod h1:xY3nI94gbvBrE0J6NHXhxOmW97HG7Khjkku6AFB3Hyg= -google.golang.org/api v0.84.0/go.mod h1:NTsGnUFJMYROtiquksZHBWtHfeMC7iYthki7Eq3pa8o= -google.golang.org/api v0.85.0/go.mod h1:AqZf8Ep9uZ2pyTvgL+x0D3Zt0eoT9b5E8fmzfu6FO2g= -google.golang.org/api v0.90.0/go.mod h1:+Sem1dnrKlrXMR/X0bPnMWyluQe4RsNoYfmNLhOIkzw= -google.golang.org/api v0.93.0/go.mod h1:+Sem1dnrKlrXMR/X0bPnMWyluQe4RsNoYfmNLhOIkzw= -google.golang.org/api v0.95.0/go.mod h1:eADj+UBuxkh5zlrSntJghuNeg8HwQ1w5lTKkuqaETEI= -google.golang.org/api v0.96.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= -google.golang.org/api v0.97.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= -google.golang.org/api v0.98.0/go.mod h1:w7wJQLTM+wvQpNf5JyEcBoxK0RH7EDrh/L4qfsuJ13s= -google.golang.org/api v0.99.0/go.mod h1:1YOf74vkVndF7pG6hIHuINsM7eWwpVTAfNMNiL91A08= -google.golang.org/api v0.100.0/go.mod h1:ZE3Z2+ZOr87Rx7dqFsdRQkRBk36kDtp/h+QpHbB7a70= -google.golang.org/api v0.102.0/go.mod h1:3VFl6/fzoA+qNuS1N1/VfXY4LjoXN/wzeIp7TweWwGo= -google.golang.org/api v0.103.0/go.mod h1:hGtW6nK1AC+d9si/UBhw8Xli+QMOf6xyNAyJw4qU9w0= -google.golang.org/api v0.106.0/go.mod h1:2Ts0XTHNVWxypznxWOYUeI4g3WdP9Pk2Qk58+a/O9MY= -google.golang.org/api v0.107.0/go.mod h1:2Ts0XTHNVWxypznxWOYUeI4g3WdP9Pk2Qk58+a/O9MY= -google.golang.org/api v0.108.0/go.mod h1:2Ts0XTHNVWxypznxWOYUeI4g3WdP9Pk2Qk58+a/O9MY= -google.golang.org/api v0.110.0/go.mod h1:7FC4Vvx1Mooxh8C5HWjzZHcavuS2f6pmJpZx60ca7iI= -google.golang.org/api v0.111.0/go.mod h1:qtFHvU9mhgTJegR31csQ+rwxyUTHOKFqCKWp1J0fdw0= -google.golang.org/api v0.114.0/go.mod h1:ifYI2ZsFK6/uGddGfAD5BMxlnkBqCmqHSDUVi45N5Yg= -google.golang.org/api v0.118.0/go.mod h1:76TtD3vkgmZ66zZzp72bUUklpmQmKlhh6sYtIjYK+5E= -google.golang.org/api v0.122.0/go.mod h1:gcitW0lvnyWjSp9nKxAbdHKIZ6vF4aajGueeslZOyms= -google.golang.org/api v0.124.0/go.mod h1:xu2HQurE5gi/3t1aFCvhPD781p0a3p11sdunTJ2BlP4= -google.golang.org/api v0.126.0/go.mod h1:mBwVAtz+87bEN6CbA1GtZPDOqY2R5ONPqJeIlvyo4Aw= google.golang.org/api v0.153.0 h1:N1AwGhielyKFaUqH07/ZSIQR3uNPcV7NVw0vj+j4iR4= google.golang.org/api v0.153.0/go.mod h1:3qNJX5eOmhiWYc67jRA/3GsDw97UFb5ivv7Y2PrriAY= google.golang.org/appengine v1.0.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.1.0/go.mod h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM= google.golang.org/appengine v1.4.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.5.0/go.mod h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4= -google.golang.org/appengine v1.6.1/go.mod h1:i06prIuMbXzDqacNJfV5OdTW448YApPu5ww/cMBSeb0= -google.golang.org/appengine v1.6.5/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/appengine v1.6.6/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= -google.golang.org/appengine v1.6.7/go.mod h1:8WjMMxjGQR8xUklV/ARdw2HLXBOI7O7uCIDZVag1xfc= google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc= -google.golang.org/genproto v0.0.0-20190307195333-5fe7a883aa19/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190418145605-e7d98fc518a7/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190425155659-357c62f0e4bb/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190502173448-54afdca5d873/go.mod h1:VzzqZJRnGkLBvHegQrXjBqPurQTc5/KpmUdxsrq26oE= -google.golang.org/genproto v0.0.0-20190801165951-fa694d86fc64/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc= -google.golang.org/genproto v0.0.0-20190911173649-1774047e7e51/go.mod h1:IbNlFCBrqXvoKpeg0TB2l7cyZUmoaFKYIwrEpbDKLA8= -google.golang.org/genproto v0.0.0-20191108220845-16a3f7862a1a/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20191115194625-c23dd37a84c9/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20191216164720-4f79533eabd1/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20191230161307-f3c370f40bfb/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200115191322-ca5a22157cba/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200122232147-0452cf42e150/go.mod h1:n3cpQtvxv34hfy77yVDNjmbRyujviMdxYliBSkLhpCc= -google.golang.org/genproto v0.0.0-20200204135345-fa8e72b47b90/go.mod h1:GmwEX6Z4W5gMy59cAlVYjN9JhxgbQH6Gn+gFDQe2lzA= -google.golang.org/genproto v0.0.0-20200212174721-66ed5ce911ce/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200224152610-e50cd9704f63/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200228133532-8c2c7df3a383/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200305110556-506484158171/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200312145019-da6875a35672/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200331122359-1ee6d9798940/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200423170343-7949de9c1215/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200430143042-b979b6f78d84/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200511104702-f5ebc3bea380/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c= -google.golang.org/genproto v0.0.0-20200515170657-fc4c6c6a6587/go.mod h1:YsZOwe1myG/8QRHRsmBRE1LrgQY60beZKjly0O1fX9U= google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo= -google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA= -google.golang.org/genproto v0.0.0-20200729003335-053ba62fc06f/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20200804131852-c06518451d9c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20200825200019-8632dd797987/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20200904004341-0bd0a958aa1d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201109203340-2640f1f9cdfb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201201144952-b05cb90ed32e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201210142538-e3217bee35cc/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20201214200347-8c77b98c765d/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210108203827-ffc7fda8c3d7/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210222152913-aa3ee6e6a81c/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210226172003-ab064af71705/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210303154014-9728d6b83eeb/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210310155132-4ce2db91004e/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210319143718-93e7006c17a6/go.mod h1:FWY/as6DDZQgahTzZj3fqbO1CbirC29ZNUFHwi0/+no= -google.golang.org/genproto v0.0.0-20210329143202-679c6ae281ee/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= -google.golang.org/genproto v0.0.0-20210402141018-6c239bbf2bb1/go.mod h1:9lPAdzaEmUacj36I+k7YKbEc5CXzPIeORRgDAUOu28A= -google.golang.org/genproto v0.0.0-20210513213006-bf773b8c8384/go.mod h1:P3QM42oQyzQSnHPnZ/vqoCdDmzH28fzWByN9asMeM8A= -google.golang.org/genproto v0.0.0-20210602131652-f16073e35f0c/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= -google.golang.org/genproto v0.0.0-20210604141403-392c879c8b08/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= -google.golang.org/genproto v0.0.0-20210608205507-b6d2f5bf0d7d/go.mod h1:UODoCrxHCcBojKKwX1terBiRUaqAsFqJiF615XL43r0= -google.golang.org/genproto v0.0.0-20210624195500-8bfb893ecb84/go.mod h1:SzzZ/N+nwJDaO1kznhnlzqS8ocJICar6hYhVyhi++24= -google.golang.org/genproto v0.0.0-20210713002101-d411969a0d9a/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k= -google.golang.org/genproto v0.0.0-20210716133855-ce7ef5c701ea/go.mod h1:AxrInvYm1dci+enl5hChSFPOmmUF1+uAa/UsgNRWd7k= -google.golang.org/genproto v0.0.0-20210728212813-7823e685a01f/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= -google.golang.org/genproto v0.0.0-20210805201207-89edb61ffb67/go.mod h1:ob2IJxKrgPT52GcgX759i1sleT07tiKowYBGbczaW48= -google.golang.org/genproto v0.0.0-20210813162853-db860fec028c/go.mod h1:cFeNkxwySK631ADgubI+/XFU/xp8FD5KIVV4rj8UC5w= -google.golang.org/genproto v0.0.0-20210821163610-241b8fcbd6c8/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= -google.golang.org/genproto v0.0.0-20210828152312-66f60bf46e71/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= -google.golang.org/genproto v0.0.0-20210831024726-fe130286e0e2/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= -google.golang.org/genproto v0.0.0-20210903162649-d08c68adba83/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= -google.golang.org/genproto v0.0.0-20210909211513-a8c4777a87af/go.mod h1:eFjDcFEctNawg4eG61bRv87N7iHBWyVhJu7u1kqDUXY= -google.golang.org/genproto v0.0.0-20210924002016-3dee208752a0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20211118181313-81c1377c94b1/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20211206160659-862468c7d6e0/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20211208223120-3a66f561d7aa/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20211221195035-429b39de9b1c/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20220126215142-9970aeb2e350/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20220207164111-0872dc986b00/go.mod h1:5CzLGKJ67TSI2B9POpiiyGha0AjJvZIUgRMt1dSmuhc= -google.golang.org/genproto v0.0.0-20220218161850-94dd64e39d7c/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= -google.golang.org/genproto v0.0.0-20220222213610-43724f9ea8cf/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= -google.golang.org/genproto v0.0.0-20220304144024-325a89244dc8/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= -google.golang.org/genproto v0.0.0-20220310185008-1973136f34c6/go.mod h1:kGP+zUP2Ddo0ayMi4YuN7C3WZyJvGLZRh8Z5wnAqvEI= -google.golang.org/genproto v0.0.0-20220324131243-acbaeb5b85eb/go.mod h1:hAL49I2IFola2sVEjAn7MEwsja0xp51I0tlGAf9hz4E= -google.golang.org/genproto v0.0.0-20220329172620-7be39ac1afc7/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= -google.golang.org/genproto v0.0.0-20220407144326-9054f6ed7bac/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= -google.golang.org/genproto v0.0.0-20220413183235-5e96e2839df9/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= -google.golang.org/genproto v0.0.0-20220414192740-2d67ff6cf2b4/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= -google.golang.org/genproto v0.0.0-20220421151946-72621c1f0bd3/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= -google.golang.org/genproto v0.0.0-20220429170224-98d788798c3e/go.mod h1:8w6bsBMX6yCPbAVTeqQHvzxW0EIFigd5lZyahWgyfDo= -google.golang.org/genproto v0.0.0-20220502173005-c8bf987b8c21/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= -google.golang.org/genproto v0.0.0-20220505152158-f39f71e6c8f3/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= -google.golang.org/genproto v0.0.0-20220518221133-4f43b3371335/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= -google.golang.org/genproto v0.0.0-20220523171625-347a074981d8/go.mod h1:RAyBrSAP7Fh3Nc84ghnVLDPuV51xc9agzmm4Ph6i0Q4= -google.golang.org/genproto v0.0.0-20220608133413-ed9918b62aac/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= -google.golang.org/genproto v0.0.0-20220616135557-88e70c0c3a90/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= -google.golang.org/genproto v0.0.0-20220617124728-180714bec0ad/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= -google.golang.org/genproto v0.0.0-20220624142145-8cd45d7dbd1f/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= -google.golang.org/genproto v0.0.0-20220628213854-d9e0b6570c03/go.mod h1:KEWEmljWE5zPzLBa/oHl6DaEt9LmfH6WtH1OHIvleBA= -google.golang.org/genproto v0.0.0-20220722212130-b98a9ff5e252/go.mod h1:GkXuJDJ6aQ7lnJcRF+SJVgFdQhypqgl3LB1C9vabdRE= -google.golang.org/genproto v0.0.0-20220801145646-83ce21fca29f/go.mod h1:iHe1svFLAZg9VWz891+QbRMwUv9O/1Ww+/mngYeThbc= -google.golang.org/genproto v0.0.0-20220815135757-37a418bb8959/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= -google.golang.org/genproto v0.0.0-20220817144833-d7fd3f11b9b1/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= -google.golang.org/genproto v0.0.0-20220822174746-9e6da59bd2fc/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= -google.golang.org/genproto v0.0.0-20220829144015-23454907ede3/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= -google.golang.org/genproto v0.0.0-20220829175752-36a9c930ecbf/go.mod h1:dbqgFATTzChvnt+ujMdZwITVAJHFtfyN1qUhDqEiIlk= -google.golang.org/genproto v0.0.0-20220913154956-18f8339a66a5/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= -google.golang.org/genproto v0.0.0-20220914142337-ca0e39ece12f/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= -google.golang.org/genproto v0.0.0-20220915135415-7fd63a7952de/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= -google.golang.org/genproto v0.0.0-20220916172020-2692e8806bfa/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= -google.golang.org/genproto v0.0.0-20220919141832-68c03719ef51/go.mod h1:0Nb8Qy+Sk5eDzHnzlStwW3itdNaWoZA5XeSG+R3JHSo= -google.golang.org/genproto v0.0.0-20220920201722-2b89144ce006/go.mod h1:ht8XFiar2npT/g4vkk7O0WYS1sHOHbdujxbEp7CJWbw= -google.golang.org/genproto v0.0.0-20220926165614-551eb538f295/go.mod h1:woMGP53BroOrRY3xTxlbr8Y3eB/nzAvvFM83q7kG2OI= -google.golang.org/genproto v0.0.0-20220926220553-6981cbe3cfce/go.mod h1:woMGP53BroOrRY3xTxlbr8Y3eB/nzAvvFM83q7kG2OI= -google.golang.org/genproto v0.0.0-20221010155953-15ba04fc1c0e/go.mod h1:3526vdqwhZAwq4wsRUaVG555sVgsNmIjRtO7t/JH29U= -google.golang.org/genproto v0.0.0-20221014173430-6e2ab493f96b/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM= -google.golang.org/genproto v0.0.0-20221014213838-99cd37c6964a/go.mod h1:1vXfmgAz9N9Jx0QA82PqRVauvCz1SGSz739p0f183jM= -google.golang.org/genproto v0.0.0-20221024153911-1573dae28c9c/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s= -google.golang.org/genproto v0.0.0-20221024183307-1bc688fe9f3e/go.mod h1:9qHF0xnpdSfF6knlcsnpzUu5y+rpwgbvsyGAZPBMg4s= -google.golang.org/genproto v0.0.0-20221027153422-115e99e71e1c/go.mod h1:CGI5F/G+E5bKwmfYo09AXuVN4dD894kIKUFmVbP2/Fo= -google.golang.org/genproto v0.0.0-20221109142239-94d6d90a7d66/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= -google.golang.org/genproto v0.0.0-20221114212237-e4508ebdbee1/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= -google.golang.org/genproto v0.0.0-20221117204609-8f9c96812029/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= -google.golang.org/genproto v0.0.0-20221118155620-16455021b5e6/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= -google.golang.org/genproto v0.0.0-20221201164419-0e50fba7f41c/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= -google.golang.org/genproto v0.0.0-20221201204527-e3fa12d562f3/go.mod h1:rZS5c/ZVYMaOGBfO68GWtjOw/eLaZM1X6iVtgjZ+EWg= -google.golang.org/genproto v0.0.0-20221202195650-67e5cbc046fd/go.mod h1:cTsE614GARnxrLsqKREzmNYJACSWWpAWdNMwnD7c2BE= -google.golang.org/genproto v0.0.0-20221227171554-f9683d7f8bef/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= -google.golang.org/genproto v0.0.0-20230110181048-76db0878b65f/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= -google.golang.org/genproto v0.0.0-20230112194545-e10362b5ecf9/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= -google.golang.org/genproto v0.0.0-20230113154510-dbe35b8444a5/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= -google.golang.org/genproto v0.0.0-20230123190316-2c411cf9d197/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= -google.golang.org/genproto v0.0.0-20230124163310-31e0e69b6fc2/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= -google.golang.org/genproto v0.0.0-20230125152338-dcaf20b6aeaa/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= -google.golang.org/genproto v0.0.0-20230127162408-596548ed4efa/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= -google.golang.org/genproto v0.0.0-20230209215440-0dfe4f8abfcc/go.mod h1:RGgjbofJ8xD9Sq1VVhDM1Vok1vRONV+rg+CjzG4SZKM= -google.golang.org/genproto v0.0.0-20230216225411-c8e22ba71e44/go.mod h1:8B0gmkoRebU8ukX6HP+4wrVQUY1+6PkQ44BSyIlflHA= -google.golang.org/genproto v0.0.0-20230222225845-10f96fb3dbec/go.mod h1:3Dl5ZL0q0isWJt+FVcfpQyirqemEuLAK/iFvg1UP1Hw= -google.golang.org/genproto v0.0.0-20230223222841-637eb2293923/go.mod h1:3Dl5ZL0q0isWJt+FVcfpQyirqemEuLAK/iFvg1UP1Hw= -google.golang.org/genproto v0.0.0-20230303212802-e74f57abe488/go.mod h1:TvhZT5f700eVlTNwND1xoEZQeWTB2RY/65kplwl/bFA= -google.golang.org/genproto v0.0.0-20230306155012-7f2fa6fef1f4/go.mod h1:NWraEVixdDnqcqQ30jipen1STv2r/n24Wb7twVTGR4s= -google.golang.org/genproto v0.0.0-20230320184635-7606e756e683/go.mod h1:NWraEVixdDnqcqQ30jipen1STv2r/n24Wb7twVTGR4s= -google.golang.org/genproto v0.0.0-20230323212658-478b75c54725/go.mod h1:UUQDJDOlWu4KYeJZffbWgBkS1YFobzKbLVfK69pe0Ak= -google.golang.org/genproto v0.0.0-20230330154414-c0448cd141ea/go.mod h1:UUQDJDOlWu4KYeJZffbWgBkS1YFobzKbLVfK69pe0Ak= -google.golang.org/genproto v0.0.0-20230331144136-dcfb400f0633/go.mod h1:UUQDJDOlWu4KYeJZffbWgBkS1YFobzKbLVfK69pe0Ak= -google.golang.org/genproto v0.0.0-20230403163135-c38d8f061ccd/go.mod h1:UUQDJDOlWu4KYeJZffbWgBkS1YFobzKbLVfK69pe0Ak= -google.golang.org/genproto v0.0.0-20230410155749-daa745c078e1/go.mod h1:nKE/iIaLqn2bQwXBg8f1g2Ylh6r5MN5CmZvuzZCgsCU= -google.golang.org/genproto v0.0.0-20230525234025-438c736192d0/go.mod h1:9ExIQyXL5hZrHzQceCwuSYwZZ5QZBazOcprJ5rgs3lY= -google.golang.org/genproto v0.0.0-20230526161137-0005af68ea54/go.mod h1:zqTuNwFlFRsw5zIts5VnzLQxSRqh+CGOTVMlYbY0Eyk= -google.golang.org/genproto v0.0.0-20230530153820-e85fd2cbaebc/go.mod h1:xZnkP7mREFX5MORlOPEzLMr+90PPZQ2QWzrVTWfAq64= google.golang.org/genproto v0.0.0-20231211222908-989df2bf70f3 h1:1hfbdAfFbkmpg41000wDVqr7jUpK/Yo+LPnIxxGzmkg= google.golang.org/genproto v0.0.0-20231211222908-989df2bf70f3/go.mod h1:5RBcpGRxr25RbDzY5w+dmaqpSEvl8Gwl1x2CICf60ic= -google.golang.org/genproto/googleapis/api v0.0.0-20230525234020-1aefcd67740a/go.mod h1:ts19tUU+Z0ZShN1y3aPyq2+O3d5FUNNgT6FtOzmrNn8= -google.golang.org/genproto/googleapis/api v0.0.0-20230525234035-dd9d682886f9/go.mod h1:vHYtlOoi6TsQ3Uk2yxR7NI5z8uoV+3pZtR4jmHIkRig= -google.golang.org/genproto/googleapis/api v0.0.0-20230526203410-71b5a4ffd15e/go.mod h1:vHYtlOoi6TsQ3Uk2yxR7NI5z8uoV+3pZtR4jmHIkRig= -google.golang.org/genproto/googleapis/api v0.0.0-20230530153820-e85fd2cbaebc/go.mod h1:vHYtlOoi6TsQ3Uk2yxR7NI5z8uoV+3pZtR4jmHIkRig= google.golang.org/genproto/googleapis/api v0.0.0-20231120223509-83a465c0220f h1:2yNACc1O40tTnrsbk9Cv6oxiW8pxI/pXj0wRtdlYmgY= google.golang.org/genproto/googleapis/api v0.0.0-20231120223509-83a465c0220f/go.mod h1:Uy9bTZJqmfrw2rIBxgGLnamc78euZULUBrLZ9XTITKI= -google.golang.org/genproto/googleapis/bytestream v0.0.0-20230530153820-e85fd2cbaebc/go.mod h1:ylj+BE99M198VPbBh6A8d9n3w8fChvyLK3wwBOjXBFA= -google.golang.org/genproto/googleapis/rpc v0.0.0-20230525234015-3fc162c6f38a/go.mod h1:xURIpW9ES5+/GZhnV6beoEtxQrnkRGIfP5VQG2tCBLc= -google.golang.org/genproto/googleapis/rpc v0.0.0-20230525234030-28d5490b6b19/go.mod h1:66JfowdXAEgad5O9NnYcsNPLCPZJD++2L9X0PCMODrA= -google.golang.org/genproto/googleapis/rpc v0.0.0-20230526203410-71b5a4ffd15e/go.mod h1:66JfowdXAEgad5O9NnYcsNPLCPZJD++2L9X0PCMODrA= -google.golang.org/genproto/googleapis/rpc v0.0.0-20230530153820-e85fd2cbaebc/go.mod h1:66JfowdXAEgad5O9NnYcsNPLCPZJD++2L9X0PCMODrA= google.golang.org/genproto/googleapis/rpc v0.0.0-20231212172506-995d672761c0 h1:/jFB8jK5R3Sq3i/lmeZO0cATSzFfZaJq1J2Euan3XKU= google.golang.org/genproto/googleapis/rpc v0.0.0-20231212172506-995d672761c0/go.mod h1:FUoWkonphQm3RhTS+kOEhF8h0iDpm4tdXolVCeZ9KKA= google.golang.org/grpc v1.19.0/go.mod h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c= -google.golang.org/grpc v1.20.1/go.mod h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38= -google.golang.org/grpc v1.21.0/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= -google.golang.org/grpc v1.21.1/go.mod h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM= google.golang.org/grpc v1.23.0/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= -google.golang.org/grpc v1.23.1/go.mod h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg= google.golang.org/grpc v1.25.1/go.mod h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY= -google.golang.org/grpc v1.26.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= google.golang.org/grpc v1.27.0/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.27.1/go.mod h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk= -google.golang.org/grpc v1.28.0/go.mod h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60= -google.golang.org/grpc v1.29.1/go.mod h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk= -google.golang.org/grpc v1.30.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/grpc v1.31.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/grpc v1.31.1/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/grpc v1.32.0/go.mod h1:N36X2cJ7JwdamYAgDz+s+rVMFjt3numwzf/HckM8pak= -google.golang.org/grpc v1.33.1/go.mod h1:fr5YgcSWrqhRRxogOsw7RzIpsmvOZ6IcH4kBYTpR3n0= google.golang.org/grpc v1.33.2/go.mod h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc= -google.golang.org/grpc v1.34.0/go.mod h1:WotjhfgOW/POjDeRt8vscBtXq+2VjORFy659qA51WJ8= -google.golang.org/grpc v1.35.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= -google.golang.org/grpc v1.36.0/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= -google.golang.org/grpc v1.36.1/go.mod h1:qjiiYl8FncCW8feJPdyg3v6XW24KsRHe+dy9BAGRRjU= -google.golang.org/grpc v1.37.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= -google.golang.org/grpc v1.37.1/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= -google.golang.org/grpc v1.38.0/go.mod h1:NREThFqKR1f3iQ6oBuvc5LadQuXVGo9rkm5ZGrQdJfM= -google.golang.org/grpc v1.39.0/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= -google.golang.org/grpc v1.39.1/go.mod h1:PImNr+rS9TWYb2O4/emRugxiyHZ5JyHW5F+RPnDzfrE= -google.golang.org/grpc v1.40.0/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= -google.golang.org/grpc v1.40.1/go.mod h1:ogyxbiOoUXAkP+4+xa6PZSE9DZgIHtSpzjDTB9KAK34= -google.golang.org/grpc v1.41.0/go.mod h1:U3l9uK9J0sini8mHphKoXyaqDA/8VyGnDee1zzIUK6k= -google.golang.org/grpc v1.42.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= -google.golang.org/grpc v1.44.0/go.mod h1:k+4IHHFw41K8+bbowsex27ge2rCb65oeWqe4jJ590SU= -google.golang.org/grpc v1.45.0/go.mod h1:lN7owxKUQEqMfSyQikvvk5tf/6zMPsrK+ONuO11+0rQ= -google.golang.org/grpc v1.46.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= -google.golang.org/grpc v1.46.2/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= -google.golang.org/grpc v1.47.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= -google.golang.org/grpc v1.48.0/go.mod h1:vN9eftEi1UMyUsIF80+uQXhHjbXYbm0uXoFCACuMGWk= -google.golang.org/grpc v1.49.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= -google.golang.org/grpc v1.50.0/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= -google.golang.org/grpc v1.50.1/go.mod h1:ZgQEeidpAuNRZ8iRrlBKXZQP1ghovWIVhdJRyCDK+GI= -google.golang.org/grpc v1.51.0/go.mod h1:wgNDFcnuBGmxLKI/qn4T+m5BtEBYXJPvibbUPsAIPww= -google.golang.org/grpc v1.52.0/go.mod h1:pu6fVzoFb+NBYNAvQL08ic+lvB2IojljRYuun5vorUY= -google.golang.org/grpc v1.52.3/go.mod h1:pu6fVzoFb+NBYNAvQL08ic+lvB2IojljRYuun5vorUY= -google.golang.org/grpc v1.53.0/go.mod h1:OnIrk0ipVdj4N5d9IUoFUx72/VlD7+jUsHwZgwSMQpw= -google.golang.org/grpc v1.54.0/go.mod h1:PUSEXI6iWghWaB6lXM4knEgpJNu2qUcKfDtNci3EC2g= -google.golang.org/grpc v1.55.0/go.mod h1:iYEXKGkEBhg1PjZQvoYEVPTDkHo1/bjTnfwTeGONTY8= -google.golang.org/grpc v1.56.3/go.mod h1:I9bI3vqKfayGqPUAwGdOSu7kt6oIJLixfffKrpXqQ9s= google.golang.org/grpc v1.60.1 h1:26+wFr+cNqSGFcOXcabYC0lUVJVRa2Sb2ortSK7VrEU= google.golang.org/grpc v1.60.1/go.mod h1:OlCHIeLYqSSsLi6i49B5QGdzaMZK9+M7LXN2FKz4eGM= -google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.1.0/go.mod h1:6Kw0yEErY5E/yWrBtf03jp27GLLJujG4z/JK95pnjjw= google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8= google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0= google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM= @@ -2904,175 +945,63 @@ google.golang.org/protobuf v1.21.0/go.mod h1:47Nbq4nVaFHyn7ilMalzfO3qCViNmqZ2kzi google.golang.org/protobuf v1.22.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.23.0/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= google.golang.org/protobuf v1.23.1-0.20200526195155-81db48ad09cc/go.mod h1:EGpADcykh3NcUnDUJcl1+ZksZNG86OlYog2l/sGQquU= -google.golang.org/protobuf v1.24.0/go.mod h1:r/3tXBNzIEhYS9I1OUVjXDlt8tc493IdKGjtUeSXeh4= google.golang.org/protobuf v1.25.0/go.mod h1:9JNX74DMeImyA3h4bdi1ymwjUzf21/xIlbajtzgsN7c= -google.golang.org/protobuf v1.26.0-rc.1/go.mod h1:jlhhOSvTdKEhbULTjvd4ARK9grFBp09yW+WbY/TyQbw= -google.golang.org/protobuf v1.26.0/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.27.1/go.mod h1:9q0QmTI4eRPtz6boOQmLYwt+qCgq0jsYwAQnmE0givc= -google.golang.org/protobuf v1.28.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= -google.golang.org/protobuf v1.28.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= -google.golang.org/protobuf v1.29.1/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= -google.golang.org/protobuf v1.30.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= -google.golang.org/protobuf v1.31.0/go.mod h1:HV8QOd/L58Z+nl8r43ehVNZIU/HEI6OcFqwMG9pJV4I= -google.golang.org/protobuf v1.33.0/go.mod h1:c6P6GXX6sHbq/GpV6MGZEdwhWPcYBgnhAHhKbcUYpos= google.golang.org/protobuf v1.34.2 h1:6xV6lTsCfpGD21XK49h7MhtcApnLqkfYgPcdHftf6hg= google.golang.org/protobuf v1.34.2/go.mod h1:qYOHts0dSfpeUzUFpOMr/WGzszTmLH+DiWniOlNbLDw= gopkg.in/alecthomas/kingpin.v2 v2.2.6/go.mod h1:FMv+mEhP44yOT+4EoQTLFTRgOQ1FBLkstjWtayDeSgw= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= -gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk= gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q= -gopkg.in/cheggaaa/pb.v1 v1.0.25/go.mod h1:V/YB90LKu/1FcN3WVnfiiE5oMCibMjukxqG/qStrOgw= -gopkg.in/errgo.v2 v2.1.0/go.mod h1:hNsd1EY+bozCKY1Ytp96fpM3vjJbqLJn88ws8XvfDNI= gopkg.in/evanphx/json-patch.v4 v4.12.0 h1:n6jtcsulIzXPJaxegRbvFNNrZDjbij7ny3gmSPG+6V4= gopkg.in/evanphx/json-patch.v4 v4.12.0/go.mod h1:p8EYWUEYMpynmqDbY58zCKCFZw8pRWMG4EsWvDvM72M= -gopkg.in/fsnotify.v1 v1.4.7/go.mod h1:Tz8NjZHkW78fSQdbUxIjBTcgA1z1m8ZHf0WmKUhAMys= gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= -gopkg.in/ini.v1 v1.51.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= gopkg.in/ini.v1 v1.67.0 h1:Dgnx+6+nfE+IfzjUEISNeydPJh9AXNNsWbGP9KzCsOA= gopkg.in/ini.v1 v1.67.0/go.mod h1:pNLf8WUiyNEtQjuu5G5vTm06TEv9tsIgeAvK8hOrP4k= -gopkg.in/natefinch/lumberjack.v2 v2.0.0/go.mod h1:l0ndWWf7gzL7RNwBG7wST/UCcT4T24xpD6X8LsfU/+k= -gopkg.in/natefinch/lumberjack.v2 v2.2.1/go.mod h1:YD8tP3GAjkrDg1eZH7EGmyESg/lsYskCTPBJVb9jqSc= -gopkg.in/resty.v1 v1.12.0/go.mod h1:mDo4pnntr5jdWRML875a/NmxYqAlA73dVijT2AXvQQo= -gopkg.in/square/go-jose.v2 v2.2.2/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= -gopkg.in/square/go-jose.v2 v2.6.0/go.mod h1:M9dMgbHiYLoDGQrXy7OpJDJWiKiU//h+vD76mk0e1AI= -gopkg.in/tomb.v1 v1.0.0-20141024135613-dd632973f1e7/go.mod h1:dt/ZhP58zS4L8KSrWDmTeBkI65Dw0HsyUHuEVlX15mw= gopkg.in/warnings.v0 v0.1.2 h1:wFXVbFY8DY5/xOe1ECiWdKCzZlxgshcYVNkBHstARME= gopkg.in/warnings.v0 v0.1.2/go.mod h1:jksf8JmL6Qr/oQM2OXTHunEvvTAsrWBLb6OOjuVWRNI= -gopkg.in/yaml.v2 v2.0.0-20170812160011-eb3733d160e7/go.mod h1:JAlM8MvJe8wmxCU4Bli9HhUf9+ttbYbLASfIpnQbh74= gopkg.in/yaml.v2 v2.2.1/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.2/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.3/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.4/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= -gopkg.in/yaml.v2 v2.2.5/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.2.8/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.3.0/go.mod h1:hI93XBmqTisBFMUTm0b8Fm+jr3Dg1NNxqwp+5A1VGuI= gopkg.in/yaml.v2 v2.4.0 h1:D8xgwECY7CYvx+Y2n4sBz93Jn9JRvxdiyyo8CTfuKaY= gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.0-20200615113413-eeeca48fe776/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gotest.tools v2.2.0+incompatible/go.mod h1:DsYFclhRJ6vuDpmuTbkuFWG+y2sxOXAzmJt81HFBacw= gotest.tools/v3 v3.4.0 h1:ZazjZUfuVeZGLAmlKKuyv3IKP5orXcwtOwDQH6YVr6o= gotest.tools/v3 v3.4.0/go.mod h1:CtbdzLSsqVhDgMtKsx03ird5YTGB3ar27v0u/yKBW5g= helm.sh/helm/v3 v3.14.3 h1:HmvRJlwyyt9HjgmAuxHbHv3PhMz9ir/XNWHyXfmnOP4= helm.sh/helm/v3 v3.14.3/go.mod h1:v6myVbyseSBJTzhmeE39UcPLNv6cQK6qss3dvgAySaE= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= -honnef.co/go/tools v0.0.1-2019.2.3/go.mod h1:a3bituU0lyd329TUQxRnasdCoJDkEUEAqEt0JzvZhAg= -honnef.co/go/tools v0.0.1-2020.1.3/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -honnef.co/go/tools v0.0.1-2020.1.4/go.mod h1:X/FiERA/W4tHapMX5mGpAtMSVEeEUOyHaw9vFzvIQ3k= -honnef.co/go/tools v0.1.3/go.mod h1:NgwopIslSNH47DimFoV78dnkksY2EFtX0ajyb3K/las= -k8s.io/api v0.17.0/go.mod h1:npsyOePkeP0CPwyGfXDHxvypiYMJxBWAMpQxCaJ4ZxI= -k8s.io/api v0.28.9/go.mod h1:AnCsDYf3SHjfa8mPG5LGYf+iF4mie+3peLQR51MMCgw= -k8s.io/api v0.29.0/go.mod h1:sdVmXoz2Bo/cb77Pxi71IPTSErEW32xa4aXwKH7gfBA= k8s.io/api v0.30.1 h1:kCm/6mADMdbAxmIh0LBjS54nQBE+U4KmbCfIkF5CpJY= k8s.io/api v0.30.1/go.mod h1:ddbN2C0+0DIiPntan/bye3SW3PdwLa11/0yqwvuRrJM= -k8s.io/apiextensions-apiserver v0.17.0/go.mod h1:XiIFUakZywkUl54fVXa7QTEHcqQz9HG55nHd1DCoHj8= -k8s.io/apiextensions-apiserver v0.28.9/go.mod h1:Rjhvq5y3JESdZgV2UOByldyefCfRrUguVpBLYOAIbVs= k8s.io/apiextensions-apiserver v0.30.0 h1:jcZFKMqnICJfRxTgnC4E+Hpcq8UEhT8B2lhBcQ+6uAs= k8s.io/apiextensions-apiserver v0.30.0/go.mod h1:N9ogQFGcrbWqAY9p2mUAL5mGxsLqwgtUce127VtRX5Y= -k8s.io/apimachinery v0.17.0/go.mod h1:b9qmWdKlLuU9EBh+06BtLcSf/Mu89rWL33naRxs1uZg= -k8s.io/apimachinery v0.28.9/go.mod h1:zUG757HaKs6Dc3iGtKjzIpBfqTM4yiRsEe3/E7NX15o= -k8s.io/apimachinery v0.29.0/go.mod h1:eVBxQ/cwiJxH58eK/jd/vAk4mrxmVlnpBH5J2GbMeis= k8s.io/apimachinery v0.31.0-beta.0 h1:KoBE9f7sPz67HclZC/JgH1pIBvOlMZQAwoHQuriE/5E= k8s.io/apimachinery v0.31.0-beta.0/go.mod h1:rsPdaZJfTfLsNJSQzNHQvYoTmxhoOEofxtOsF3rtsMo= -k8s.io/apiserver v0.17.0/go.mod h1:ABM+9x/prjINN6iiffRVNCBR2Wk7uY4z+EtEGZD48cg= -k8s.io/apiserver v0.28.9/go.mod h1:D51I37WBZojJhmLcjNVE4GSVrjiUHP+yq+N5KvKn2wY= k8s.io/apiserver v0.30.0 h1:QCec+U72tMQ+9tR6A0sMBB5Vh6ImCEkoKkTDRABWq6M= k8s.io/apiserver v0.30.0/go.mod h1:smOIBq8t0MbKZi7O7SyIpjPsiKJ8qa+llcFCluKyqiY= k8s.io/cli-runtime v0.29.5 h1:gnDrFEA4Xr8lAdc5U4tVfU7RGAmM/yvVvW9f0ao7g2s= k8s.io/cli-runtime v0.29.5/go.mod h1:6KuWJyLIpbh2II874fA1SnmGHvZCitsHRR1XDowsMC0= k8s.io/client-go v0.29.0 h1:KmlDtFcrdUzOYrBhXHgKw5ycWzc3ryPX5mQe0SkG3y8= k8s.io/client-go v0.29.0/go.mod h1:yLkXH4HKMAywcrD82KMSmfYg2DlE8mepPR4JGSo5n38= -k8s.io/code-generator v0.17.0/go.mod h1:DVmfPQgxQENqDIzVR2ddLXMH34qeszkKSdH/N+s+38s= -k8s.io/code-generator v0.28.9/go.mod h1:WiJgVNDFAlT90nq6IOxhZ1gxL2JexbcfAx9ZBsyQ3Do= -k8s.io/component-base v0.17.0/go.mod h1:rKuRAokNMY2nn2A6LP/MiwpoaMRHpfRnrPaUJJj1Yoc= -k8s.io/component-base v0.28.9/go.mod h1:QtWzscEhCKRfHV24/S+11BwWjVxhC6fd3RYoEgZcWFU= k8s.io/component-base v0.30.0 h1:cj6bp38g0ainlfYtaOQuRELh5KSYjhKxM+io7AUIk4o= k8s.io/component-base v0.30.0/go.mod h1:V9x/0ePFNaKeKYA3bOvIbrNoluTSG+fSJKjLdjOoeXQ= -k8s.io/gengo v0.0.0-20190822140433-26a664648505/go.mod h1:ezvh/TsK7cY6rbqRK0oQQ8IAqLxYwwyPxAX1Pzy0ii0= -k8s.io/gengo v0.0.0-20220902162205-c0856e24416d/go.mod h1:FiNAH4ZV3gBg2Kwh89tzAEV2be7d5xI0vBa/VySYy3E= -k8s.io/gengo/v2 v2.0.0-20240228010128-51d4e06bde70/go.mod h1:VH3AT8AaQOqiGjMF9p0/IM1Dj+82ZwjfxUP1IxaHE+8= -k8s.io/helm v2.14.3+incompatible/go.mod h1:LZzlS4LQBHfciFOurYBFkCMTaZ0D1l+p0teMg7TSULI= k8s.io/helm v2.17.0+incompatible h1:Bpn6o1wKLYqKM3+Osh8e+1/K2g/GsQJ4F4yNF2+deao= k8s.io/helm v2.17.0+incompatible/go.mod h1:LZzlS4LQBHfciFOurYBFkCMTaZ0D1l+p0teMg7TSULI= -k8s.io/klog v0.3.0/go.mod h1:Gq+BEi5rUBO/HRz0bTSXDUcqjScdoY3a9IHpCEIOOfk= -k8s.io/klog v1.0.0/go.mod h1:4Bi6QPql/J/LkTDqv7R/cd3hPo4k2DG6Ptcz060Ez5I= -k8s.io/klog/v2 v2.0.0/go.mod h1:PBfzABfn139FHAV07az/IF9Wp1bkk3vpT2XSJ76fSDE= -k8s.io/klog/v2 v2.2.0/go.mod h1:Od+F08eJP+W3HUb4pSrPpgp9DGU4GzlpG/TmITuYh/Y= -k8s.io/klog/v2 v2.80.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= -k8s.io/klog/v2 v2.100.1/go.mod h1:y1WjHnz7Dj687irZUWR/WLkLc5N1YHtjLdmgWjndZn0= -k8s.io/klog/v2 v2.110.1/go.mod h1:YGtd1984u+GgbuZ7e08/yBuAfKLSO0+uR1Fhi6ExXjo= -k8s.io/klog/v2 v2.120.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE= k8s.io/klog/v2 v2.130.1 h1:n9Xl7H1Xvksem4KFG4PYbdQCQxqc/tTUyrgXaOhHSzk= k8s.io/klog/v2 v2.130.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE= -k8s.io/kms v0.28.9/go.mod h1:VgyAIRMFqZX9lHyixecU/JTI0wnPD1wCIlquvlXRJ+Y= k8s.io/kube-openapi v0.0.0-20240228011516-70dd3763d340 h1:BZqlfIlq5YbRMFko6/PM7FjZpUb45WallggurYhKGag= k8s.io/kube-openapi v0.0.0-20240228011516-70dd3763d340/go.mod h1:yD4MZYeKMBwQKVht279WycxKyM84kkAx2DPrTXaeb98= k8s.io/kubectl v0.29.3 h1:RuwyyIU42MAISRIePaa8Q7A3U74Q9P4MoJbDFz9o3us= k8s.io/kubectl v0.29.3/go.mod h1:yCxfY1dbwgVdEt2zkJ6d5NNLOhhWgTyrqACIoFhpdd4= -k8s.io/utils v0.0.0-20191114184206-e782cd3c129f/go.mod h1:sZAwmy6armz5eXlNoLmJcl4F1QuKu7sr+mFQ0byX7Ew= -k8s.io/utils v0.0.0-20230406110748-d93618cff8a2/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= -k8s.io/utils v0.0.0-20230726121419-3b25d923346b/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= k8s.io/utils v0.0.0-20240711033017-18e509b52bc8 h1:pUdcCO1Lk/tbT5ztQWOBi5HBgbBP1J8+AsQnQCKsi8A= k8s.io/utils v0.0.0-20240711033017-18e509b52bc8/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= -layeh.com/gopher-luar v1.0.10 h1:55b0mpBhN9XSshEd2Nz6WsbYXctyBT35azk4POQNSXo= -layeh.com/gopher-luar v1.0.10/go.mod h1:TPnIVCZ2RJBndm7ohXyaqfhzjlZ+OA2SZR/YwL8tECk= -lukechampine.com/uint128 v1.1.1/go.mod h1:c4eWIwlEGaxC/+H1VguhU4PHXNWDCDMUlWdIWl2j1gk= -lukechampine.com/uint128 v1.2.0/go.mod h1:c4eWIwlEGaxC/+H1VguhU4PHXNWDCDMUlWdIWl2j1gk= -modernc.org/cc v1.0.0/go.mod h1:1Sk4//wdnYJiUIxnW8ddKpaOJCF37yAdqYnkxUpaYxw= -modernc.org/cc/v3 v3.36.0/go.mod h1:NFUHyPn4ekoC/JHeZFfZurN6ixxawE1BnVonP/oahEI= -modernc.org/cc/v3 v3.36.2/go.mod h1:NFUHyPn4ekoC/JHeZFfZurN6ixxawE1BnVonP/oahEI= -modernc.org/cc/v3 v3.36.3/go.mod h1:NFUHyPn4ekoC/JHeZFfZurN6ixxawE1BnVonP/oahEI= -modernc.org/ccgo/v3 v3.0.0-20220428102840-41399a37e894/go.mod h1:eI31LL8EwEBKPpNpA4bU1/i+sKOwOrQy8D87zWUcRZc= -modernc.org/ccgo/v3 v3.0.0-20220430103911-bc99d88307be/go.mod h1:bwdAnOoaIt8Ax9YdWGjxWsdkPcZyRPHqrOvJxaKAKGw= -modernc.org/ccgo/v3 v3.16.4/go.mod h1:tGtX0gE9Jn7hdZFeU88slbTh1UtCYKusWOoCJuvkWsQ= -modernc.org/ccgo/v3 v3.16.6/go.mod h1:tGtX0gE9Jn7hdZFeU88slbTh1UtCYKusWOoCJuvkWsQ= -modernc.org/ccgo/v3 v3.16.8/go.mod h1:zNjwkizS+fIFDrDjIAgBSCLkWbJuHF+ar3QRn+Z9aws= -modernc.org/ccgo/v3 v3.16.9/go.mod h1:zNMzC9A9xeNUepy6KuZBbugn3c0Mc9TeiJO4lgvkJDo= -modernc.org/ccorpus v1.11.6/go.mod h1:2gEUTrWqdpH2pXsmTM1ZkjeSrUWDpjMu2T6m29L/ErQ= -modernc.org/golex v1.0.0/go.mod h1:b/QX9oBD/LhixY6NDh+IdGv17hgB+51fET1i2kPSmvk= -modernc.org/httpfs v1.0.6/go.mod h1:7dosgurJGp0sPaRanU53W4xZYKh14wfzX420oZADeHM= -modernc.org/libc v0.0.0-20220428101251-2d5f3daf273b/go.mod h1:p7Mg4+koNjc8jkqwcoFBJx7tXkpj00G77X7A72jXPXA= -modernc.org/libc v1.16.0/go.mod h1:N4LD6DBE9cf+Dzf9buBlzVJndKr/iJHG97vGLHYnb5A= -modernc.org/libc v1.16.1/go.mod h1:JjJE0eu4yeK7tab2n4S1w8tlWd9MxXLRzheaRnAKymU= -modernc.org/libc v1.16.17/go.mod h1:hYIV5VZczAmGZAnG15Vdngn5HSF5cSkbvfz2B7GRuVU= -modernc.org/libc v1.16.19/go.mod h1:p7Mg4+koNjc8jkqwcoFBJx7tXkpj00G77X7A72jXPXA= -modernc.org/libc v1.17.0/go.mod h1:XsgLldpP4aWlPlsjqKRdHPqCxCjISdHfM/yeWC5GyW0= -modernc.org/libc v1.17.1/go.mod h1:FZ23b+8LjxZs7XtFMbSzL/EhPxNbfZbErxEHc7cbD9s= -modernc.org/mathutil v1.0.0/go.mod h1:wU0vUrJsVWBZ4P6e7xtFJEhFSNsfRLJ8H458uRjg03k= -modernc.org/mathutil v1.2.2/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E= -modernc.org/mathutil v1.4.1/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E= -modernc.org/mathutil v1.5.0/go.mod h1:mZW8CKdRPY1v87qxC/wUdX5O1qDzXMP5TH3wjfpga6E= -modernc.org/memory v1.1.1/go.mod h1:/0wo5ibyrQiaoUoH7f9D8dnglAmILJ5/cxZlRECf+Nw= -modernc.org/memory v1.2.0/go.mod h1:/0wo5ibyrQiaoUoH7f9D8dnglAmILJ5/cxZlRECf+Nw= -modernc.org/memory v1.2.1/go.mod h1:PkUhL0Mugw21sHPeskwZW4D6VscE/GQJOnIpCnW6pSU= -modernc.org/opt v0.1.1/go.mod h1:WdSiB5evDcignE70guQKxYUl14mgWtbClRi5wmkkTX0= -modernc.org/opt v0.1.3/go.mod h1:WdSiB5evDcignE70guQKxYUl14mgWtbClRi5wmkkTX0= -modernc.org/sqlite v1.18.1/go.mod h1:6ho+Gow7oX5V+OiOQ6Tr4xeqbx13UZ6t+Fw9IRUG4d4= -modernc.org/strutil v1.0.0/go.mod h1:lstksw84oURvj9y3tn8lGvRxyRC1S2+g5uuIzNfIOBs= -modernc.org/strutil v1.1.1/go.mod h1:DE+MQQ/hjKBZS2zNInV5hhcipt5rLPWkmpbGeW5mmdw= -modernc.org/strutil v1.1.3/go.mod h1:MEHNA7PdEnEwLvspRMtWTNnp2nnyvMfkimT1NKNAGbw= -modernc.org/tcl v1.13.1/go.mod h1:XOLfOwzhkljL4itZkK6T72ckMgvj0BDsnKNdZVUOecw= -modernc.org/token v1.0.0/go.mod h1:UGzOrNV1mAFSEB63lOFHIpNRUVMvYTc6yu1SMY/XTDM= -modernc.org/xc v1.0.0/go.mod h1:mRNCo0bvLjGhHO9WsyuKVU4q0ceiDDDoEeWDJHrNx8I= -modernc.org/z v1.5.1/go.mod h1:eWFB510QWW5Th9YGZT81s+LwvaAs3Q2yr4sP0rmLkv8= oras.land/oras-go v1.2.6 h1:z8cmxQXBU8yZ4mkytWqXfo6tZcamPwjsuxYU81xJ8Lk= oras.land/oras-go v1.2.6/go.mod h1:OVPc1PegSEe/K8YiLfosrlqlqTN9PUyFvOw5Y9gwrT8= -rsc.io/binaryregexp v0.2.0/go.mod h1:qTv7/COck+e2FymRvadv62gMdZztPaShugOCi3I+8D8= -rsc.io/pdf v0.1.1/go.mod h1:n8OzWcQ6Sp37PL01nO98y4iUCRdTGarVfzxY20ICaU4= -rsc.io/quote/v3 v3.1.0/go.mod h1:yEA65RcK8LyAZtP9Kv3t0HmxON59tX3rD+tICJqUlj0= -rsc.io/sampler v1.3.0/go.mod h1:T1hPZKmBbMNahiBKFy5HrXp6adAjACjK9JXDnKaTXpA= -sigs.k8s.io/apiserver-network-proxy/konnectivity-client v0.1.2/go.mod h1:+qG7ISXqCDVVcyO8hLn12AKVYYUjM7ftlqsqmrhMZE0= -sigs.k8s.io/application v0.8.3 h1:5UETobiVhxTkKn3pIESImXiMNmSg3VkM5+JvmYGDPko= -sigs.k8s.io/application v0.8.3/go.mod h1:Mv+ht9RE/QNtITYCzRbt3XTIN6t6so6cInmiyg6wOIg= sigs.k8s.io/controller-runtime v0.16.6 h1:FiXwTuFF5ZJKmozfP2Z0j7dh6kmxP4Ou1KLfxgKKC3I= sigs.k8s.io/controller-runtime v0.16.6/go.mod h1:+dQzkZxnylD0u49e0a+7AR+vlibEBaThmPca7lTyUsI= sigs.k8s.io/json v0.0.0-20221116044647-bc3834ca7abd h1:EDPBXCAspyGV4jQlpZSudPeMmr1bNJefnuqLsRAsHZo= @@ -3081,12 +1010,7 @@ sigs.k8s.io/kustomize/api v0.17.1 h1:MYJBOP/yQ3/5tp4/sf6HiiMfNNyO97LmtnirH9SLNr4 sigs.k8s.io/kustomize/api v0.17.1/go.mod h1:ffn5491s2EiNrJSmgqcWGzQUVhc/pB0OKNI0HsT/0tA= sigs.k8s.io/kustomize/kyaml v0.17.0 h1:G2bWs03V9Ur2PinHLzTUJ8Ded+30SzXZKiO92SRDs3c= sigs.k8s.io/kustomize/kyaml v0.17.0/go.mod h1:6lxkYF1Cv9Ic8g/N7I86cvxNc5iinUo/P2vKsHNmpyE= -sigs.k8s.io/structured-merge-diff v1.0.1-0.20191108220359-b1b620dd3f06/go.mod h1:/ULNhyfzRopfcjskuui0cTITekDduZ7ycKN3oUT9R18= -sigs.k8s.io/structured-merge-diff/v4 v4.2.3/go.mod h1:qjx8mGObPmV2aSZepjQjbmb2ihdVs8cGKBraizNC69E= sigs.k8s.io/structured-merge-diff/v4 v4.4.1 h1:150L+0vs/8DA78h1u02ooW1/fFq/Lwr+sGiqlzvrtq4= sigs.k8s.io/structured-merge-diff/v4 v4.4.1/go.mod h1:N8hJocpFajUSSeSJ9bOZ77VzejKZaXsTtZo4/u7Io08= -sigs.k8s.io/yaml v1.1.0/go.mod h1:UJmg0vDUVViEyp3mgSv9WPwZCDxu4rQW1olrI1uml+o= -sigs.k8s.io/yaml v1.2.0/go.mod h1:yfXDCHCao9+ENCvLSE62v9VSji2MKu5jeNfTrofGhJc= -sigs.k8s.io/yaml v1.3.0/go.mod h1:GeOyir5tyXNByN85N/dRIT9es5UQNerPYEKK56eTBm8= sigs.k8s.io/yaml v1.4.0 h1:Mk1wCc2gy/F0THH0TAp1QYyJNzRm2KCLy3o5ASXVI5E= sigs.k8s.io/yaml v1.4.0/go.mod h1:Ejl7/uTz7PSA4eKMyQCUTnhZYNmLIl+5c2lQPGR2BPY= From 64650334bdcd66269eb2c6b7fba83d86b4eb50f8 Mon Sep 17 00:00:00 2001 From: Marcin Maciaszczyk Date: Tue, 10 Dec 2024 10:41:49 +0100 Subject: [PATCH 35/37] remove unused code --- pkg/bundle/tests/tests.go | 15 --------------- pkg/crypto/hmac.go | 13 ------------- 2 files changed, 28 deletions(-) delete mode 100644 pkg/bundle/tests/tests.go delete mode 100644 pkg/crypto/hmac.go diff --git a/pkg/bundle/tests/tests.go b/pkg/bundle/tests/tests.go deleted file mode 100644 index 9e677f204..000000000 --- a/pkg/bundle/tests/tests.go +++ /dev/null @@ -1,15 +0,0 @@ -package tests - -import ( - "github.com/pluralsh/plural-cli/pkg/api" - "github.com/pluralsh/plural-cli/pkg/manifest" - "github.com/pluralsh/plural-cli/pkg/utils" -) - -func Perform(ctx *manifest.Context, test *api.RecipeTest) error { - utils.Highlight("\nRunning %s test [%s] ==>\n", test.Name, test.Type) - if test.Type == "GIT" { - return testGit(ctx, test) - } - return nil -} diff --git a/pkg/crypto/hmac.go b/pkg/crypto/hmac.go deleted file mode 100644 index ea979c231..000000000 --- a/pkg/crypto/hmac.go +++ /dev/null @@ -1,13 +0,0 @@ -package crypto - -import ( - "crypto/hmac" - "crypto/sha1" - "encoding/hex" -) - -func Hmac(data string, secret string) string { - h := hmac.New(sha1.New, []byte(secret)) - h.Write([]byte(data)) - return hex.EncodeToString(h.Sum(nil)) -} From f8de7c4c579fc60c4f715fd12f94fd42c31c1c0b Mon Sep 17 00:00:00 2001 From: Marcin Maciaszczyk Date: Tue, 10 Dec 2024 11:07:22 +0100 Subject: [PATCH 36/37] genmock --- pkg/test/mocks/Client.go | 30 ------- pkg/test/mocks/Kube.go | 170 --------------------------------------- 2 files changed, 200 deletions(-) diff --git a/pkg/test/mocks/Client.go b/pkg/test/mocks/Client.go index 96cc9d187..1a9a758b5 100644 --- a/pkg/test/mocks/Client.go +++ b/pkg/test/mocks/Client.go @@ -434,36 +434,6 @@ func (_m *Client) GetInstallation(name string) (*api.Installation, error) { return r0, r1 } -// GetInstallations provides a mock function with no fields -func (_m *Client) GetInstallations() ([]*api.Installation, error) { - ret := _m.Called() - - if len(ret) == 0 { - panic("no return value specified for GetInstallations") - } - - var r0 []*api.Installation - var r1 error - if rf, ok := ret.Get(0).(func() ([]*api.Installation, error)); ok { - return rf() - } - if rf, ok := ret.Get(0).(func() []*api.Installation); ok { - r0 = rf() - } else { - if ret.Get(0) != nil { - r0 = ret.Get(0).([]*api.Installation) - } - } - - if rf, ok := ret.Get(1).(func() error); ok { - r1 = rf() - } else { - r1 = ret.Error(1) - } - - return r0, r1 -} - // GetKeyBackup provides a mock function with given fields: name func (_m *Client) GetKeyBackup(name string) (*api.KeyBackup, error) { ret := _m.Called(name) diff --git a/pkg/test/mocks/Kube.go b/pkg/test/mocks/Kube.go index 91a5a2921..82261562f 100644 --- a/pkg/test/mocks/Kube.go +++ b/pkg/test/mocks/Kube.go @@ -14,8 +14,6 @@ import ( v1 "k8s.io/api/core/v1" v1alpha1 "github.com/pluralsh/plural-operator/apis/platform/v1alpha1" - - vpnv1alpha1 "github.com/pluralsh/plural-operator/apis/vpn/v1alpha1" ) // Kube is an autogenerated mock type for the Kube type @@ -423,174 +421,6 @@ func (_m *Kube) SecretList(namespace string, opts metav1.ListOptions) (*v1.Secre return r0, r1 } -// WireguardPeer provides a mock function with given fields: namespace, name -func (_m *Kube) WireguardPeer(namespace string, name string) (*vpnv1alpha1.WireguardPeer, error) { - ret := _m.Called(namespace, name) - - if len(ret) == 0 { - panic("no return value specified for WireguardPeer") - } - - var r0 *vpnv1alpha1.WireguardPeer - var r1 error - if rf, ok := ret.Get(0).(func(string, string) (*vpnv1alpha1.WireguardPeer, error)); ok { - return rf(namespace, name) - } - if rf, ok := ret.Get(0).(func(string, string) *vpnv1alpha1.WireguardPeer); ok { - r0 = rf(namespace, name) - } else { - if ret.Get(0) != nil { - r0 = ret.Get(0).(*vpnv1alpha1.WireguardPeer) - } - } - - if rf, ok := ret.Get(1).(func(string, string) error); ok { - r1 = rf(namespace, name) - } else { - r1 = ret.Error(1) - } - - return r0, r1 -} - -// WireguardPeerCreate provides a mock function with given fields: namespace, wireguardPeer -func (_m *Kube) WireguardPeerCreate(namespace string, wireguardPeer *vpnv1alpha1.WireguardPeer) (*vpnv1alpha1.WireguardPeer, error) { - ret := _m.Called(namespace, wireguardPeer) - - if len(ret) == 0 { - panic("no return value specified for WireguardPeerCreate") - } - - var r0 *vpnv1alpha1.WireguardPeer - var r1 error - if rf, ok := ret.Get(0).(func(string, *vpnv1alpha1.WireguardPeer) (*vpnv1alpha1.WireguardPeer, error)); ok { - return rf(namespace, wireguardPeer) - } - if rf, ok := ret.Get(0).(func(string, *vpnv1alpha1.WireguardPeer) *vpnv1alpha1.WireguardPeer); ok { - r0 = rf(namespace, wireguardPeer) - } else { - if ret.Get(0) != nil { - r0 = ret.Get(0).(*vpnv1alpha1.WireguardPeer) - } - } - - if rf, ok := ret.Get(1).(func(string, *vpnv1alpha1.WireguardPeer) error); ok { - r1 = rf(namespace, wireguardPeer) - } else { - r1 = ret.Error(1) - } - - return r0, r1 -} - -// WireguardPeerDelete provides a mock function with given fields: namespace, name -func (_m *Kube) WireguardPeerDelete(namespace string, name string) error { - ret := _m.Called(namespace, name) - - if len(ret) == 0 { - panic("no return value specified for WireguardPeerDelete") - } - - var r0 error - if rf, ok := ret.Get(0).(func(string, string) error); ok { - r0 = rf(namespace, name) - } else { - r0 = ret.Error(0) - } - - return r0 -} - -// WireguardPeerList provides a mock function with given fields: namespace -func (_m *Kube) WireguardPeerList(namespace string) (*vpnv1alpha1.WireguardPeerList, error) { - ret := _m.Called(namespace) - - if len(ret) == 0 { - panic("no return value specified for WireguardPeerList") - } - - var r0 *vpnv1alpha1.WireguardPeerList - var r1 error - if rf, ok := ret.Get(0).(func(string) (*vpnv1alpha1.WireguardPeerList, error)); ok { - return rf(namespace) - } - if rf, ok := ret.Get(0).(func(string) *vpnv1alpha1.WireguardPeerList); ok { - r0 = rf(namespace) - } else { - if ret.Get(0) != nil { - r0 = ret.Get(0).(*vpnv1alpha1.WireguardPeerList) - } - } - - if rf, ok := ret.Get(1).(func(string) error); ok { - r1 = rf(namespace) - } else { - r1 = ret.Error(1) - } - - return r0, r1 -} - -// WireguardServer provides a mock function with given fields: namespace, name -func (_m *Kube) WireguardServer(namespace string, name string) (*vpnv1alpha1.WireguardServer, error) { - ret := _m.Called(namespace, name) - - if len(ret) == 0 { - panic("no return value specified for WireguardServer") - } - - var r0 *vpnv1alpha1.WireguardServer - var r1 error - if rf, ok := ret.Get(0).(func(string, string) (*vpnv1alpha1.WireguardServer, error)); ok { - return rf(namespace, name) - } - if rf, ok := ret.Get(0).(func(string, string) *vpnv1alpha1.WireguardServer); ok { - r0 = rf(namespace, name) - } else { - if ret.Get(0) != nil { - r0 = ret.Get(0).(*vpnv1alpha1.WireguardServer) - } - } - - if rf, ok := ret.Get(1).(func(string, string) error); ok { - r1 = rf(namespace, name) - } else { - r1 = ret.Error(1) - } - - return r0, r1 -} - -// WireguardServerList provides a mock function with given fields: namespace -func (_m *Kube) WireguardServerList(namespace string) (*vpnv1alpha1.WireguardServerList, error) { - ret := _m.Called(namespace) - - if len(ret) == 0 { - panic("no return value specified for WireguardServerList") - } - - var r0 *vpnv1alpha1.WireguardServerList - var r1 error - if rf, ok := ret.Get(0).(func(string) (*vpnv1alpha1.WireguardServerList, error)); ok { - return rf(namespace) - } - if rf, ok := ret.Get(0).(func(string) *vpnv1alpha1.WireguardServerList); ok { - r0 = rf(namespace) - } else { - if ret.Get(0) != nil { - r0 = ret.Get(0).(*vpnv1alpha1.WireguardServerList) - } - } - - if rf, ok := ret.Get(1).(func(string) error); ok { - r1 = rf(namespace) - } else { - r1 = ret.Error(1) - } - - return r0, r1 -} - // NewKube creates a new instance of Kube. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations. // The first argument is typically a *testing.T value. func NewKube(t interface { From 810779da3084d0d798db4bcc0537b143b325e429 Mon Sep 17 00:00:00 2001 From: Marcin Maciaszczyk Date: Tue, 10 Dec 2024 11:16:57 +0100 Subject: [PATCH 37/37] remove unused code --- pkg/bundle/tests/git.go | 73 --------------------------------------- pkg/bundle/tests/utils.go | 20 ----------- 2 files changed, 93 deletions(-) delete mode 100644 pkg/bundle/tests/git.go delete mode 100644 pkg/bundle/tests/utils.go diff --git a/pkg/bundle/tests/git.go b/pkg/bundle/tests/git.go deleted file mode 100644 index a7eb3cc75..000000000 --- a/pkg/bundle/tests/git.go +++ /dev/null @@ -1,73 +0,0 @@ -package tests - -import ( - "fmt" - "os" - - "github.com/go-git/go-git/v5/plumbing/transport" - "github.com/pluralsh/plural-cli/pkg/api" - "github.com/pluralsh/plural-cli/pkg/manifest" - "github.com/pluralsh/plural-cli/pkg/utils/git" -) - -func testGit(ctx *manifest.Context, test *api.RecipeTest) error { - args := collectArguments(test.Args, ctx) - auth, err := authMethod(args) - if err != nil { - return err - } - url := args["url"].Val.(string) - dir, err := os.MkdirTemp("", "repo") - if err != nil { - return err - } - - defer os.RemoveAll(dir) - fmt.Println("~~> Attempting to clone repo in a temporary directory...") - _, err = git.Clone(auth, url, dir) - return err -} - -func authMethod(args map[string]*ContextValue) (transport.AuthMethod, error) { - if arg, ok := args["password"]; ok && arg.Present { - if pass, ok := arg.Val.(string); ok && pass != "" { - if user, ok := args["username"].Val.(string); ok { - return git.BasicAuth(user, pass) - } - return nil, fmt.Errorf("No valid username/password pair for basic auth") - } - } - - urlArg := args["url"] - if !urlArg.Present { - return nil, fmt.Errorf("requires a git url") - } - - url, ok := urlArg.Val.(string) - if !ok { - return nil, fmt.Errorf("No valid git url") - } - - privateKeyArg := args["private_key"] - if !privateKeyArg.Present { - return nil, fmt.Errorf("requires a ssh private key for authentication") - } - - pk, ok := privateKeyArg.Val.(string) - if !ok { - return nil, fmt.Errorf("No valid git ssh private key") - } - - passphrase := "" - if passArg, ok := args["passphrase"]; ok && passArg.Present { - if pass, ok := passArg.Val.(string); ok { - passphrase = pass - } - } - - user, _, _, _, err := git.UrlComponents(url) - if err != nil { - return nil, err - } - return git.SSHAuth(user, pk, passphrase) -} diff --git a/pkg/bundle/tests/utils.go b/pkg/bundle/tests/utils.go deleted file mode 100644 index d21942746..000000000 --- a/pkg/bundle/tests/utils.go +++ /dev/null @@ -1,20 +0,0 @@ -package tests - -import ( - "github.com/pluralsh/plural-cli/pkg/api" - "github.com/pluralsh/plural-cli/pkg/manifest" -) - -type ContextValue struct { - Val interface{} - Present bool -} - -func collectArguments(args []*api.TestArgument, ctx *manifest.Context) map[string]*ContextValue { - res := make(map[string]*ContextValue) - for _, arg := range args { - val, ok := ctx.Configuration[arg.Repo][arg.Key] - res[arg.Name] = &ContextValue{val, ok} - } - return res -}

    JiM{fi+2rry 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 IFJRg9Ea|Tq*#H0l diff --git a/pkg/ui/web/public/fonts/ABCMonumentGroteskSemi-Mono-Regular.woff b/pkg/ui/web/public/fonts/ABCMonumentGroteskSemi-Mono-Regular.woff deleted file mode 100644 index a1b692338863ab342366d5eeac2e6d093714c64a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 58548 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 diff --git a/pkg/ui/web/public/fonts/monument-bold-italic.woff b/pkg/ui/web/public/fonts/monument-bold-italic.woff deleted file mode 100644 index b7ab6626d833a7bc7b49d609cc99cfd57fb906a4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 68804 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≧~)xBd^o{6ehq+)V=j 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 C$k#Oh diff --git a/pkg/ui/web/public/fonts/monument-bold.woff b/pkg/ui/web/public/fonts/monument-bold.woff deleted file mode 100644 index d80582c8facffa4d1e4441c68e3d3a0ae9e8224a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 66320 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 S0VRl?Z_u}JXcaW*=l=pNHFpI7 diff --git a/pkg/ui/web/public/fonts/monument-bold.woff2 b/pkg/ui/web/public/fonts/monument-bold.woff2 deleted file mode 100644 index 19f2cd5195b22b46d68a932f066b3a9574a61b50..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 50112 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%0A8Af_|RA2-Wi&hpP}8J{=1YMGdC;l}Rofm?gL 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
    rs7{dVD^KuVQlBrZReFEvwj&pg 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 Ji+;lTtrk102pTZ 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 z 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 diff --git a/pkg/ui/web/public/fonts/monument-medium.woff b/pkg/ui/web/public/fonts/monument-medium.woff deleted file mode 100644 index 2eb30c9e5340ef13108a97f062ac929310c99caa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 69176 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

  • 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�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 YlD?dNJe{3%WEA|_e92gG*~&Ti-#jjvt^fc4 From 308b7dfdc7058b20220094e47d26c258f1b52829 Mon Sep 17 00:00:00 2001 From: Marcin Maciaszczyk Date: Thu, 5 Dec 2024 09:33:40 +0100 Subject: [PATCH 17/37] remove unused client methods --- pkg/api/charts.go | 83 -------------- pkg/api/client.go | 7 -- pkg/api/installations.go | 8 -- pkg/api/recipes.go | 71 ------------ pkg/api/repos.go | 210 ------------------------------------ pkg/api/scaffolds.go | 11 -- pkg/api/terraform.go | 58 ---------- pkg/application/register.go | 7 +- pkg/manifest/link.go | 51 --------- pkg/manifest/manifest.go | 27 ----- pkg/manifest/types.go | 1 - pkg/provider/aws.go | 20 ---- pkg/provider/azure.go | 26 ----- pkg/provider/equinix.go | 29 ----- pkg/provider/gcp.go | 29 ----- pkg/provider/kind.go | 30 ------ pkg/provider/linode.go | 4 - pkg/provider/provider.go | 17 --- pkg/provider/test.go | 4 - pkg/utils/kind.go | 31 ------ pkg/wkspace/minimal.go | 16 --- 21 files changed, 2 insertions(+), 738 deletions(-) delete mode 100644 pkg/api/recipes.go delete mode 100644 pkg/api/terraform.go delete mode 100644 pkg/manifest/link.go delete mode 100644 pkg/utils/kind.go diff --git a/pkg/api/charts.go b/pkg/api/charts.go index 12f83b559..dcda98393 100644 --- a/pkg/api/charts.go +++ b/pkg/api/charts.go @@ -5,89 +5,6 @@ import ( "github.com/pluralsh/gqlclient/pkg/utils" ) -type packageCacheEntry struct { - Charts []*ChartInstallation - Terraform []*TerraformInstallation -} - -var packageCache = make(map[string]*packageCacheEntry) - -func (client *client) GetVersions(chartId string) ([]*Version, error) { - versions := make([]*Version, 0) - resp, err := client.pluralClient.GetVersions(client.ctx, chartId) - if err != nil { - return nil, err - } - for _, version := range resp.Versions.Edges { - versions = append(versions, convertVersion(version.Node)) - } - return versions, err -} - -func (client *client) GetChartInstallations(repoId string) ([]*ChartInstallation, error) { - insts := make([]*ChartInstallation, 0) - resp, err := client.pluralClient.GetChartInstallations(client.ctx, repoId) - if err != nil { - return nil, err - } - - for _, edge := range resp.ChartInstallations.Edges { - if edge.Node != nil { - insts = append(insts, convertChartInstallation(edge.Node)) - } - } - - return insts, err -} - -func ClearPackageCache() { - packageCache = make(map[string]*packageCacheEntry) -} - -func (client *client) GetPackageInstallations(repoId string) (charts []*ChartInstallation, tfs []*TerraformInstallation, err error) { - if entry, ok := packageCache[repoId]; ok { - return entry.Charts, entry.Terraform, nil - } - - resp, err := client.pluralClient.GetPackageInstallations(client.ctx, repoId) - if err != nil { - return - } - - charts = make([]*ChartInstallation, 0) - for _, edge := range resp.ChartInstallations.Edges { - if edge.Node != nil { - charts = append(charts, convertChartInstallation(edge.Node)) - } - } - - tfs = make([]*TerraformInstallation, 0) - for _, edge := range resp.TerraformInstallations.Edges { - node := edge.Node - if node != nil { - tfInstall := &TerraformInstallation{ - Id: utils.ConvertStringPointer(node.ID), - Terraform: convertTerraform(node.Terraform), - - Version: convertVersion(node.Version), - } - - tfs = append(tfs, tfInstall) - } - } - - if err == nil { - packageCache[repoId] = &packageCacheEntry{Charts: charts, Terraform: tfs} - } - - return -} - -func (client *client) UninstallChart(id string) (err error) { - _, err = client.pluralClient.UninstallChart(client.ctx, id) - return -} - func convertVersion(version *gqlclient.VersionFragment) *Version { if version == nil { return nil diff --git a/pkg/api/client.go b/pkg/api/client.go index 3e608082b..79fa7f58d 100644 --- a/pkg/api/client.go +++ b/pkg/api/client.go @@ -38,13 +38,7 @@ type Client interface { DeleteEabCredential(cluster string, provider string) error CreateEvent(event *UserEventAttributes) error GetTfProviders() ([]string, error) - GetTfProviderScaffold(name string, version string) (string, error) GetRepository(repo string) (*Repository, error) - CreateRepository(name string, publisher string, input *gqlclient.RepositoryAttributes) error - AcquireLock(repo string) (*ApplyLock, error) - ReleaseLock(repo string, lock string) (*ApplyLock, error) - ListRepositories(query string) ([]*Repository, error) - Scaffolds(in *ScaffoldInputs) ([]*ScaffoldFile, error) UpdateVersion(spec *VersionSpec, tags []string) error CreateDomain(name string) error CreateInstallation(id string) (string, error) @@ -57,7 +51,6 @@ type Client interface { GetHelp(prompt string) (string, error) Clusters() ([]*Cluster, error) Cluster(id string) (*Cluster, error) - Release(name string, tags []string) error Chat(history []*ChatMessage) (*ChatMessage, error) CreateTrust(issuer, trust string) error DeleteTrust(id string) error diff --git a/pkg/api/installations.go b/pkg/api/installations.go index c80201c2f..e8cce82e1 100644 --- a/pkg/api/installations.go +++ b/pkg/api/installations.go @@ -26,14 +26,6 @@ func (client *client) GetInstallation(name string) (*Installation, error) { } -func (client *client) GetInstallationById(id string) (*Installation, error) { - resp, err := client.pluralClient.GetInstallationByID(client.ctx, &id) - if err != nil { - return nil, err - } - return convertInstallation(resp.Installation), nil -} - func (client *client) DeleteInstallation(id string) error { _, err := client.pluralClient.DeleteInstallation(client.ctx, id) return err diff --git a/pkg/api/recipes.go b/pkg/api/recipes.go deleted file mode 100644 index 2cdd5d95a..000000000 --- a/pkg/api/recipes.go +++ /dev/null @@ -1,71 +0,0 @@ -package api - -type RecipeInput struct { - Name string - Description string - Provider string - Restricted bool - Primary bool - Tests []RecipeTestInput `yaml:"tests" json:"tests,omitempty"` - Sections []RecipeSectionInput - Dependencies []DependencyInput - OidcSettings *OIDCSettings `yaml:"oidcSettings,omitempty"` -} - -type DependencyInput struct { - Name string - Repo string -} - -type RecipeTestInput struct { - Name string - Message string - Type string - Args []*TestArgInput -} - -type TestArgInput struct { - Name string - Repo string - Key string -} - -type RecipeSectionInput struct { - Name string - Items []RecipeItemInput - Configuration []ConfigurationItemInput -} - -type RecipeItemInput struct { - Name string - Type string -} - -type ConditionInput struct { - Field string - Value string - Operation string -} - -type ValidationInput struct { - Type string - Regex string - Message string -} - -type ConfigurationItemInput struct { - Name string - Default string - Type string - Documentation string - Placeholder string - Longform string - Optional bool - FunctionName string `yaml:"functionName,omitempty" json:"functionName,omitempty"` - Condition *ConditionInput - Validation *ValidationInput -} - -type RecipeEdge struct { - Node *Recipe -} diff --git a/pkg/api/repos.go b/pkg/api/repos.go index 96c1d23de..c114a17c8 100644 --- a/pkg/api/repos.go +++ b/pkg/api/repos.go @@ -1,18 +1,9 @@ package api import ( - "context" - "os" - "path/filepath" - "strings" - _ "github.com/AlecAivazis/survey/v2" - "sigs.k8s.io/yaml" - "github.com/pluralsh/gqlclient" "github.com/pluralsh/gqlclient/pkg/utils" - fileutils "github.com/pluralsh/plural-cli/pkg/utils" - "github.com/samber/lo" ) type ResourceDefinitionInput struct { @@ -94,204 +85,3 @@ func convertRepository(repo *gqlclient.RepositoryFragment) *Repository { }, } } - -func (client *client) CreateRepository(name, publisher string, input *gqlclient.RepositoryAttributes) error { - var uploads []gqlclient.Upload - - iconUpload, err := getIconReader(input.Icon, "icon") - if err != nil { - return err - } - - if iconUpload != nil { - input.Icon = lo.ToPtr("icon") - uploads = append(uploads, *iconUpload) - } - - darkIconUpload, err := getIconReader(input.DarkIcon, "darkicon") - if err != nil { - return err - } - - if darkIconUpload != nil { - input.DarkIcon = lo.ToPtr("darkicon") - uploads = append(uploads, *darkIconUpload) - } - - if input.Docs != nil && *input.Docs != "" { - tarFile, err := tarDir(name, *input.Docs, "") - if err != nil { - return err - } - defer os.Remove(tarFile) - - docsUpload, err := getIconReader(lo.ToPtr(tarFile), "docs") - if err != nil { - return err - } - input.Docs = lo.ToPtr("docs") - uploads = append(uploads, *docsUpload) - } - - if input.Notes != nil && *input.Notes != "" { - file, _ := filepath.Abs(*input.Notes) - notes, err := fileutils.ReadFile(file) - if err != nil { - return err - } - - input.Notes = ¬es - } - client.pluralClient.Client.CustomDo = gqlclient.WithFiles(uploads, client.httpClient) - _, err = client.pluralClient.CreateRepository(context.Background(), name, publisher, *input) - return err -} - -func (client *client) AcquireLock(repo string) (*ApplyLock, error) { - resp, err := client.pluralClient.AcquireLock(client.ctx, repo) - if err != nil { - return nil, err - } - - return &ApplyLock{ - Id: resp.AcquireLock.ID, - Lock: utils.ConvertStringPointer(resp.AcquireLock.Lock), - }, err -} - -func (client *client) ReleaseLock(repo, lock string) (*ApplyLock, error) { - resp, err := client.pluralClient.ReleaseLock(client.ctx, repo, gqlclient.LockAttributes{Lock: lock}) - if err != nil { - return nil, err - } - - return &ApplyLock{ - Id: resp.ReleaseLock.ID, - Lock: utils.ConvertStringPointer(resp.ReleaseLock.Lock), - }, nil -} - -func (client *client) ListRepositories(query string) ([]*Repository, error) { - resp, err := client.pluralClient.ListRepositories(client.ctx, &query) - if err != nil { - return nil, err - } - - res := make([]*Repository, 0) - for _, edge := range resp.Repositories.Edges { - rep := &Repository{ - Id: edge.Node.ID, - Name: edge.Node.Name, - Description: utils.ConvertStringPointer(edge.Node.Description), - Icon: utils.ConvertStringPointer(edge.Node.Icon), - DarkIcon: utils.ConvertStringPointer(edge.Node.DarkIcon), - Notes: utils.ConvertStringPointer(edge.Node.Notes), - Publisher: &Publisher{ - Name: edge.Node.Publisher.Name, - }, - Recipes: []*Recipe{}, - } - for _, rcp := range edge.Node.Recipes { - rep.Recipes = append(rep.Recipes, &Recipe{Name: rcp.Name}) - } - res = append(res, rep) - } - - return res, err -} - -func (client *client) Release(name string, tags []string) error { - _, err := client.pluralClient.Release(context.Background(), name, tags) - return err -} - -func (client *client) Scaffolds(in *ScaffoldInputs) ([]*ScaffoldFile, error) { - scaffolds, err := client.pluralClient.Scaffolds(context.Background(), in.Application, in.Publisher, gqlclient.Category(strings.ToUpper(in.Category)), &in.Ingress, &in.Postgres) - if err != nil { - return nil, err - } - - resp := make([]*ScaffoldFile, 0) - - for _, scaffold := range scaffolds.Scaffold { - resp = append(resp, &ScaffoldFile{ - Path: utils.ConvertStringPointer(scaffold.Path), - Content: utils.ConvertStringPointer(scaffold.Content), - }) - } - - return resp, err -} - -func getIconReader(icon *string, field string) (*gqlclient.Upload, error) { - if icon == nil { - return nil, nil - } - if *icon == "" { - return nil, nil - } - - file, err := filepath.Abs(*icon) - if err != nil { - return nil, err - } - f, err := os.Open(file) - if err != nil { - return nil, err - } - - return &gqlclient.Upload{ - Field: field, - Name: file, - R: f, - }, nil -} - -func ConstructRepositoryInput(marshalled []byte) (input *RepositoryInput, err error) { - input = &RepositoryInput{} - err = yaml.Unmarshal(marshalled, input) - return -} - -func ConstructGqlClientRepositoryInput(marshalled []byte) (*gqlclient.RepositoryAttributes, error) { - repoInput, err := ConstructRepositoryInput(marshalled) - if err != nil { - return nil, err - } - - category := gqlclient.Category(repoInput.Category) - - var releaseStatus *gqlclient.ReleaseStatus - if repoInput.ReleaseStatus != "" { - releaseStatus = lo.ToPtr(gqlclient.ReleaseStatus(repoInput.ReleaseStatus)) - } - - resp := &gqlclient.RepositoryAttributes{ - Category: &category, - DarkIcon: &repoInput.DarkIcon, - Description: &repoInput.Description, - ReleaseStatus: releaseStatus, - Contributors: lo.ToSlicePtr(repoInput.Contributors), - GitURL: &repoInput.GitUrl, - Homepage: &repoInput.Homepage, - Icon: &repoInput.Icon, - Docs: &repoInput.Docs, - Name: &repoInput.Name, - Notes: &repoInput.Notes, - Private: &repoInput.Private, - Tags: []*gqlclient.TagAttributes{}, - } - if repoInput.OauthSettings != nil { - resp.OauthSettings = &gqlclient.OauthSettingsAttributes{ - AuthMethod: gqlclient.OidcAuthMethod(repoInput.OauthSettings.AuthMethod), - URIFormat: repoInput.OauthSettings.UriFormat, - } - } - for _, tag := range repoInput.Tags { - resp.Tags = append(resp.Tags, &gqlclient.TagAttributes{ - Tag: tag.Tag, - }) - } - - return resp, nil -} diff --git a/pkg/api/scaffolds.go b/pkg/api/scaffolds.go index 3b7f0b515..d6d142d0e 100644 --- a/pkg/api/scaffolds.go +++ b/pkg/api/scaffolds.go @@ -1,7 +1,5 @@ package api -import "github.com/pluralsh/gqlclient" - func (client *client) GetTfProviders() ([]string, error) { resp, err := client.pluralClient.GetTfProviders(client.ctx) if err != nil { @@ -14,12 +12,3 @@ func (client *client) GetTfProviders() ([]string, error) { return result, nil } - -func (client *client) GetTfProviderScaffold(name, version string) (string, error) { - resp, err := client.pluralClient.GetTfProviderScaffold(client.ctx, gqlclient.Provider(name), &version) - if err != nil { - return "", err - } - - return *resp.TerraformProvider.Content, err -} diff --git a/pkg/api/terraform.go b/pkg/api/terraform.go deleted file mode 100644 index 5c708c934..000000000 --- a/pkg/api/terraform.go +++ /dev/null @@ -1,58 +0,0 @@ -package api - -import ( - "os" - "path/filepath" - - "github.com/pluralsh/gqlclient" - - "github.com/pluralsh/gqlclient/pkg/utils" - tarutils "github.com/pluralsh/plural-cli/pkg/utils" - "github.com/pluralsh/plural-cli/pkg/utils/pathing" -) - -func (client *client) GetTerraformVersions(id string) ([]*Version, error) { - resp, err := client.pluralClient.GetTerraformVersions(client.ctx, id) - if err != nil { - return nil, err - } - - versions := make([]*Version, 0) - for _, version := range resp.Versions.Edges { - versions = append(versions, convertVersion(version.Node)) - } - - return versions, nil -} - -func tarDir(name, dir, regex string) (res string, err error) { - fullPath, err := filepath.Abs(dir) - if err != nil { - return - } - - cwd, _ := os.Getwd() - res = pathing.SanitizeFilepath(filepath.Join(cwd, name+".tgz")) - f, err := os.Create(res) - if err != nil { - return - } - defer f.Close() - - err = tarutils.Tar(fullPath, f, regex) - return -} - -func convertTerraform(ter *gqlclient.TerraformFragment) *Terraform { - if ter == nil { - return nil - } - return &Terraform{ - Id: utils.ConvertStringPointer(ter.ID), - Name: utils.ConvertStringPointer(ter.Name), - Description: utils.ConvertStringPointer(ter.Description), - ValuesTemplate: utils.ConvertStringPointer(ter.ValuesTemplate), - Dependencies: convertDependencies(ter.Dependencies), - Package: utils.ConvertStringPointer(ter.Package), - } -} diff --git a/pkg/application/register.go b/pkg/application/register.go index 03b452a38..b3c57b22c 100644 --- a/pkg/application/register.go +++ b/pkg/application/register.go @@ -2,16 +2,13 @@ package application import ( v1 "k8s.io/apimachinery/pkg/apis/meta/v1" - runtime "k8s.io/apimachinery/pkg/runtime" - schema "k8s.io/apimachinery/pkg/runtime/schema" - serializer "k8s.io/apimachinery/pkg/runtime/serializer" + "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/runtime/schema" utilruntime "k8s.io/apimachinery/pkg/util/runtime" "sigs.k8s.io/application/api/v1beta1" ) var Scheme = runtime.NewScheme() -var Codecs = serializer.NewCodecFactory(Scheme) -var ParameterCodec = runtime.NewParameterCodec(Scheme) var localSchemeBuilder = runtime.SchemeBuilder{ v1beta1.AddToScheme, } diff --git a/pkg/manifest/link.go b/pkg/manifest/link.go deleted file mode 100644 index 96fe72d35..000000000 --- a/pkg/manifest/link.go +++ /dev/null @@ -1,51 +0,0 @@ -package manifest - -import ( - "path/filepath" -) - -type Links struct { - Terraform map[string]string - Helm map[string]string -} - -func (man *Manifest) AddLink(tool, name, path string) { - links := man.Links - if links == nil { - links = &Links{ - Terraform: map[string]string{}, - Helm: map[string]string{}, - } - } - - absPath, _ := filepath.Abs(path) - - if tool == "terraform" { - links.Terraform[name] = absPath - } - - if tool == "helm" { - links.Helm[name] = absPath - } - - man.Links = links -} - -func (man *Manifest) Unlink(tool, name string) { - links := man.Links - if links == nil { - return - } - - if tool == "terraform" { - delete(links.Terraform, name) - } else if tool == "helm" { - delete(links.Helm, name) - } - - man.Links = links -} - -func (man *Manifest) UnlinkAll() { - man.Links = nil -} diff --git a/pkg/manifest/manifest.go b/pkg/manifest/manifest.go index 7b4c08829..ab507ce82 100644 --- a/pkg/manifest/manifest.go +++ b/pkg/manifest/manifest.go @@ -28,15 +28,6 @@ func ProjectManifestPath() string { return pathing.SanitizeFilepath(filepath.Join(root, "workspace.yaml")) } -func ManifestPath(repo string) (string, error) { - root, found := utils.ProjectRoot() - if !found { - return "", fmt.Errorf("You're not within an installation repo") - } - - return pathing.SanitizeFilepath(filepath.Join(root, repo, "manifest.yaml")), nil -} - func (pMan *ProjectManifest) Write(path string) error { versioned := &VersionedProjectManifest{ ApiVersion: "plural.sh/v1alpha1", @@ -100,24 +91,6 @@ func (man *Manifest) Write(path string) error { return os.WriteFile(path, io, 0644) } -func Read(path string) (man *Manifest, err error) { - contents, err := os.ReadFile(path) - if err != nil { - return - } - - versioned := &VersionedManifest{} - err = yaml.Unmarshal(contents, versioned) - if err != nil || versioned.Spec == nil { - man = &Manifest{} - err = yaml.Unmarshal(contents, man) - return - } - - man = versioned.Spec - return -} - func (pMan *ProjectManifest) Configure(cloud bool, cluster string) Writer { utils.Highlight("\nLet's get some final information about your workspace set up\n\n") diff --git a/pkg/manifest/types.go b/pkg/manifest/types.go index 6e87ef2aa..f52258a77 100644 --- a/pkg/manifest/types.go +++ b/pkg/manifest/types.go @@ -37,7 +37,6 @@ type Manifest struct { Terraform []*TerraformManifest Dependencies []*Dependency Context map[string]interface{} - Links *Links `yaml:"links,omitempty"` } type Owner struct { diff --git a/pkg/provider/aws.go b/pkg/provider/aws.go index da7b248ad..47efc9ac2 100644 --- a/pkg/provider/aws.go +++ b/pkg/provider/aws.go @@ -21,7 +21,6 @@ import ( "github.com/pluralsh/plural-cli/pkg/config" "github.com/pluralsh/plural-cli/pkg/kubernetes" "github.com/pluralsh/plural-cli/pkg/manifest" - "github.com/pluralsh/plural-cli/pkg/template" "github.com/pluralsh/plural-cli/pkg/utils" plrlErrors "github.com/pluralsh/plural-cli/pkg/utils/errors" @@ -209,25 +208,6 @@ func (aws *AWSProvider) CreateBucket() error { return aws.mkBucket(aws.bucket) } -func (aws *AWSProvider) CreateBackend(prefix string, version string, ctx map[string]interface{}) (string, error) { - if err := aws.mkBucket(aws.bucket); err != nil { - return "", plrlErrors.ErrorWrap(err, fmt.Sprintf("Failed to create terraform state bucket %s", aws.bucket)) - } - - ctx["Region"] = aws.Region() - ctx["Bucket"] = aws.Bucket() - ctx["Prefix"] = prefix - ctx["__CLUSTER__"] = aws.Cluster() - if _, ok := ctx["Cluster"]; !ok { - ctx["Cluster"] = fmt.Sprintf("\"%s\"", aws.Cluster()) - } - scaffold, err := GetProviderScaffold(api.ToGQLClientProvider(api.ProviderAWS), version) - if err != nil { - return "", err - } - return template.RenderString(scaffold, ctx) -} - func (aws *AWSProvider) KubeConfig() error { if kubernetes.InKubernetes() { return nil diff --git a/pkg/provider/azure.go b/pkg/provider/azure.go index 8893246b6..18bbdee53 100644 --- a/pkg/provider/azure.go +++ b/pkg/provider/azure.go @@ -27,7 +27,6 @@ import ( "github.com/pluralsh/plural-cli/pkg/kubernetes" "github.com/pluralsh/plural-cli/pkg/manifest" "github.com/pluralsh/plural-cli/pkg/provider/permissions" - "github.com/pluralsh/plural-cli/pkg/template" "github.com/pluralsh/plural-cli/pkg/utils" pluralerr "github.com/pluralsh/plural-cli/pkg/utils/errors" ) @@ -213,31 +212,6 @@ func (az *AzureProvider) CreateBucket() error { return nil } -func (az *AzureProvider) CreateBackend(prefix string, version string, ctx map[string]interface{}) (string, error) { - if err := az.CreateBucket(); err != nil { - return "", err - } - - ctx["Region"] = az.Region() - ctx["Bucket"] = az.Bucket() - ctx["Prefix"] = prefix - ctx["ResourceGroup"] = az.Project() - ctx["__CLUSTER__"] = az.Cluster() - ctx["Context"] = az.Context() - if cluster, ok := ctx["cluster"]; ok { - ctx["Cluster"] = cluster - ctx["ClusterCreated"] = true - } else { - ctx["Cluster"] = fmt.Sprintf(`"%s"`, az.Cluster()) - } - - scaffold, err := GetProviderScaffold(api.ToGQLClientProvider(api.ProviderAzure), version) - if err != nil { - return "", err - } - return template.RenderString(scaffold, ctx) -} - func (az *AzureProvider) createContainer(bucket string) (err error) { acc, err := az.upsertStorageAccount(utils.ToString(az.Context()["StorageAccount"])) if err != nil { diff --git a/pkg/provider/equinix.go b/pkg/provider/equinix.go index 40fe3b0ba..a51902e15 100644 --- a/pkg/provider/equinix.go +++ b/pkg/provider/equinix.go @@ -32,8 +32,6 @@ import ( "github.com/pluralsh/plural-cli/pkg/config" "github.com/pluralsh/plural-cli/pkg/manifest" "github.com/pluralsh/plural-cli/pkg/provider/permissions" - "github.com/pluralsh/plural-cli/pkg/template" - "github.com/pluralsh/plural-cli/pkg/utils" pluralErrors "github.com/pluralsh/plural-cli/pkg/utils/errors" "github.com/pluralsh/plural-cli/pkg/utils/git" "github.com/pluralsh/plural-cli/pkg/utils/pathing" @@ -121,33 +119,6 @@ func (equinix *EQUINIXProvider) CreateBucket() error { return nil } -func (equinix *EQUINIXProvider) CreateBackend(prefix string, version string, ctx map[string]interface{}) (string, error) { - - ctx["Region"] = equinix.Region() - ctx["Bucket"] = equinix.Bucket() - ctx["Prefix"] = prefix - ctx["ClusterCreated"] = false - ctx["__CLUSTER__"] = equinix.Cluster() - if cluster, ok := ctx["cluster"]; ok { - ctx["Cluster"] = cluster - ctx["ClusterCreated"] = true - } else { - ctx["Cluster"] = fmt.Sprintf(`"%s"`, equinix.Cluster()) - } - - if err := utils.WriteFile(pathing.SanitizeFilepath(filepath.Join(equinix.Bucket(), ".gitignore")), []byte("!/**")); err != nil { - return "", err - } - if err := utils.WriteFile(pathing.SanitizeFilepath(filepath.Join(equinix.Bucket(), ".gitattributes")), []byte("/** filter=plural-crypt diff=plural-crypt\n.gitattributes !filter !diff")); err != nil { - return "", err - } - scaffold, err := GetProviderScaffold(api.ToGQLClientProvider(api.ProviderEquinix), version) - if err != nil { - return "", err - } - return template.RenderString(scaffold, ctx) -} - func (equinix *EQUINIXProvider) KubeConfig() error { // TODO: deal with current configured KUBECONFIG // TODO: deal with KUBECONFIG env var if it is set, as then the output KUBECONFIG file will be used diff --git a/pkg/provider/gcp.go b/pkg/provider/gcp.go index 1e521ea81..a69d4d2e9 100644 --- a/pkg/provider/gcp.go +++ b/pkg/provider/gcp.go @@ -29,7 +29,6 @@ import ( "github.com/pluralsh/plural-cli/pkg/manifest" "github.com/pluralsh/plural-cli/pkg/provider/permissions" provUtils "github.com/pluralsh/plural-cli/pkg/provider/utils" - "github.com/pluralsh/plural-cli/pkg/template" "github.com/pluralsh/plural-cli/pkg/utils" utilerr "github.com/pluralsh/plural-cli/pkg/utils/errors" ) @@ -253,34 +252,6 @@ func (gcp *GCPProvider) CreateBucket() error { return utilerr.ErrorWrap(err, fmt.Sprintf("Failed to create terraform state bucket %s", gcp.Bucket())) } -func (gcp *GCPProvider) CreateBackend(prefix string, version string, ctx map[string]interface{}) (string, error) { - if err := gcp.CreateBucket(); err != nil { - return "", err - } - - ctx["Project"] = gcp.Project() - // Location is here for backwards compatibility - ctx["Location"] = gcp.Context()["Location"] - ctx["Region"] = gcp.Region() - ctx["Bucket"] = gcp.Bucket() - _, location := gcp.clusterLocation() - ctx["ClusterLocation"] = location - ctx["Prefix"] = prefix - ctx["ClusterCreated"] = false - ctx["__CLUSTER__"] = gcp.Cluster() - if cluster, ok := ctx["cluster"]; ok { - ctx["Cluster"] = cluster - ctx["ClusterCreated"] = true - } else { - ctx["Cluster"] = fmt.Sprintf(`"%s"`, gcp.Cluster()) - } - scaffold, err := GetProviderScaffold(api.ToGQLClientProvider(api.ProviderGCP), version) - if err != nil { - return "", err - } - return template.RenderString(scaffold, ctx) -} - func (gcp *GCPProvider) mkBucket(name string) error { bkt := gcp.storageClient.Bucket(name) if _, err := bkt.Attrs(context.Background()); err != nil { diff --git a/pkg/provider/kind.go b/pkg/provider/kind.go index e8f5782bd..8d78864c7 100644 --- a/pkg/provider/kind.go +++ b/pkg/provider/kind.go @@ -3,7 +3,6 @@ package provider import ( "fmt" "os/exec" - "path/filepath" "github.com/pluralsh/plural-cli/pkg/api" "github.com/pluralsh/plural-cli/pkg/kubernetes" @@ -14,9 +13,7 @@ import ( "github.com/pluralsh/plural-cli/pkg/config" "github.com/pluralsh/plural-cli/pkg/manifest" "github.com/pluralsh/plural-cli/pkg/provider/permissions" - "github.com/pluralsh/plural-cli/pkg/template" "github.com/pluralsh/plural-cli/pkg/utils" - "github.com/pluralsh/plural-cli/pkg/utils/pathing" ) type KINDProvider struct { @@ -73,33 +70,6 @@ func kindFromManifest(man *manifest.ProjectManifest) (*KINDProvider, error) { func (kind *KINDProvider) CreateBucket() error { return nil } -func (kind *KINDProvider) CreateBackend(prefix string, version string, ctx map[string]interface{}) (string, error) { - - ctx["Region"] = kind.Region() - ctx["Bucket"] = kind.Bucket() - ctx["Prefix"] = prefix - ctx["ClusterCreated"] = false - ctx["__CLUSTER__"] = kind.Cluster() - if cluster, ok := ctx["cluster"]; ok { - ctx["Cluster"] = cluster - ctx["ClusterCreated"] = true - } else { - ctx["Cluster"] = fmt.Sprintf(`"%s"`, kind.Cluster()) - } - - if err := utils.WriteFile(pathing.SanitizeFilepath(filepath.Join(kind.Bucket(), ".gitignore")), []byte("!/**")); err != nil { - return "", err - } - if err := utils.WriteFile(pathing.SanitizeFilepath(filepath.Join(kind.Bucket(), ".gitattributes")), []byte("/** filter=plural-crypt diff=plural-crypt\n.gitattributes !filter !diff")); err != nil { - return "", err - } - scaffold, err := GetProviderScaffold(api.ToGQLClientProvider(api.ProviderKind), version) - if err != nil { - return "", err - } - return template.RenderString(scaffold, ctx) -} - func (kind *KINDProvider) KubeConfig() error { if kubernetes.InKubernetes() { return nil diff --git a/pkg/provider/linode.go b/pkg/provider/linode.go index 088b4991b..73c9e1010 100644 --- a/pkg/provider/linode.go +++ b/pkg/provider/linode.go @@ -173,10 +173,6 @@ func (l *LinodeProvider) CreateBucket() error { return godotenv.Load(envPath) } -func (l *LinodeProvider) CreateBackend(prefix string, version string, ctx map[string]interface{}) (string, error) { - return "", nil -} - func (l *LinodeProvider) KubeConfig() error { if kubernetes.InKubernetes() { return nil diff --git a/pkg/provider/provider.go b/pkg/provider/provider.go index 08754fea5..0810ff906 100644 --- a/pkg/provider/provider.go +++ b/pkg/provider/provider.go @@ -25,7 +25,6 @@ type Provider interface { Bucket() string KubeConfig() error KubeContext() string - CreateBackend(prefix string, version string, ctx map[string]interface{}) (string, error) CreateBucket() error Context() map[string]interface{} Preflights() []*Preflight @@ -59,22 +58,6 @@ var ( filterProviders = containers.ToSet([]string{"GENERIC", "KIND", "LINODE"}) ) -func GetProviderScaffold(provider, version string) (string, error) { - if providers.Scaffolds == nil { - providers.Scaffolds = make(map[string]string) - } - _, ok := providers.Scaffolds[provider] - if !ok { - client := api.NewClient() - scaffold, err := client.GetTfProviderScaffold(provider, version) - providers.Scaffolds[provider] = scaffold - if err != nil { - return "", api.GetErrorResponse(err, "GetTfProviderScaffold") - } - } - return providers.Scaffolds[provider], nil -} - func GetProvider() (Provider, error) { path := manifest.ProjectManifestPath() if project, err := manifest.ReadProject(path); err == nil { diff --git a/pkg/provider/test.go b/pkg/provider/test.go index 2b4a578a2..90d092515 100644 --- a/pkg/provider/test.go +++ b/pkg/provider/test.go @@ -46,10 +46,6 @@ func (t TestProvider) KubeContext() string { func (t TestProvider) CreateBucket() error { return nil } -func (t TestProvider) CreateBackend(prefix string, version string, ctx map[string]interface{}) (string, error) { - return "test", nil -} - func (t TestProvider) Context() map[string]interface{} { return map[string]interface{}{} } diff --git a/pkg/utils/kind.go b/pkg/utils/kind.go deleted file mode 100644 index bb6705f8c..000000000 --- a/pkg/utils/kind.go +++ /dev/null @@ -1,31 +0,0 @@ -package utils - -import ( - "os/exec" - "strings" -) - -const noKindClustersError = "No kind clusters found." - -func IsKindClusterAlreadyExists(name string) bool { - cmd := exec.Command("kind", "get", "clusters") - out, err := ExecuteWithOutput(cmd) - if err != nil { - return false - } - if strings.Contains(out, noKindClustersError) { - return false - } - - return strings.Contains(out, name) -} - -func GetKindClusterKubeconfig(name string, internal bool) (string, error) { - kubeconfigArgs := []string{"get", "kubeconfig", "--name", name} - if internal { - kubeconfigArgs = append(kubeconfigArgs, "--internal") - } - - cmd := exec.Command("kind", kubeconfigArgs...) - return ExecuteWithOutput(cmd) -} diff --git a/pkg/wkspace/minimal.go b/pkg/wkspace/minimal.go index e4168b3e4..2f6e7b81f 100644 --- a/pkg/wkspace/minimal.go +++ b/pkg/wkspace/minimal.go @@ -52,22 +52,6 @@ type MinimalWorkspace struct { HelmConfig *action.Configuration } -func Minimal(name string, helmConfig *action.Configuration) (*MinimalWorkspace, error) { - root, err := git.Root() - if err != nil { - return nil, err - } - - prov, err := provider.GetProvider() - if err != nil { - return nil, err - } - - project, _ := manifest.ReadProject(pathing.SanitizeFilepath(filepath.Join(root, "workspace.yaml"))) - conf := config.Read() - return &MinimalWorkspace{Name: name, Provider: prov, Config: &conf, Manifest: project, HelmConfig: helmConfig}, nil -} - func FormatValues(w io.Writer, vals string, output *output.Output) (err error) { tmpl, err := template.New("gotpl").Parse(vals) if err != nil { From d81f1cc249e306e06335a9d01f8e176bb6f303e8 Mon Sep 17 00:00:00 2001 From: Marcin Maciaszczyk Date: Thu, 5 Dec 2024 09:45:21 +0100 Subject: [PATCH 18/37] update readme --- README.md | 77 +++++++++---------------------------------------------- 1 file changed, 12 insertions(+), 65 deletions(-) diff --git a/README.md b/README.md index 8e3d3095f..85669b1be 100644 --- a/README.md +++ b/README.md @@ -1,82 +1,29 @@ # Plural CLI -The plural cli automates all gitops operations for your deployments of plural applications. The core workflow should mostly be as simple as: - -```bash -plural build -plural deploy -``` - -And if you want to teardown your infrastructure, you can simply run: - -```bash -plural destroy -``` - -To add, update or reconfigure any applications deployed by plural. But it goes even deeper and solves things like: - -* Secret management (via a similar mechanism as git-crypt) -* Application Health checking - `plural watch APP` -* Log tailing - `plural logs list APP` and `plural logs tail APP LOGSTREAM` -* Setting up secure proxies into databases, private web UIs - `plural proxy list APP` and `plural proxy connect APP NAME` +Deploying your services using the Plural CLI. ## Installation -There are a number of means to install plural, the simplest is to use our homebrew tap if you're using mac: +The Plural CLI is available on homebrew, a single line install can be done with: ```bash brew install pluralsh/plural/plural ``` -More detailed instructions for other platforms can be found at https://docs.plural.sh/getting-started#1.-install-plural-cli-and-dependencies - -Plural does require a few other cli's to be installed, namely: -* helm -* terraform -* kubectl -* cloud provider cli for the infrastructure you're deploying to, like `awscli`, `gcloud`, etc -* [kind](https://kind.sigs.k8s.io/) if using kind to deploy a local cluster for testing - -## Setup - -The core workflow is all git based, so you should create a git repository on github or wherever you're using SCM, clone it locally, then run: +If you are using a machine that is not compatible with homebrew, +we recommend simply downloading a pre-built release on github and installing it onto your machines path. The releases can be found here: https://github.com/pluralsh/plural-cli/releases. -```bash -plural init -``` +## Requirements -You'll want to then install a bundle for whatever application you'd like, we'll use https://github.com/airbytehq/airbyte as an example. You can search for the bundles using: +Plural does require a few other CLI's to be installed, namely: +* `helm` +* `terraform` +* `kubectl` +* cloud provider CLI for the infrastructure you're deploying to, like `aws`, `az`, `gcloud` etc. +## Quickstart -```bash -plural bundle list airbyte -``` - -And chose one (using aws as an example cloud provider target) like: - -```bash -plural bundle install airbyte airbyte-aws -``` - -This will set the basic configuration parameters for all the infrastructure needed to install airbyte. Then just run: - -```bash -plural build -plural deploy --commit "deploying my first plural app!" -``` - -To install it. - - -## Installing the Plural Console - -We highly recommend installing the [plural console](https://github.com/pluralsh/console) alongside your plural applications. That can be done easily with: - -```bash -plural bundle install console console-aws -plural build -plural deploy --commit "deploying the plural console" -``` +Detailed instructions can be found at https://docs.plural.sh/deployments/cli-quickstart. ## Reaching Out From 01de04077b175210e18ece48899aef363f29e55f Mon Sep 17 00:00:00 2001 From: Marcin Maciaszczyk Date: Thu, 5 Dec 2024 09:47:49 +0100 Subject: [PATCH 19/37] run genmock --- pkg/test/mocks/Client.go | 1089 +------------------------------ pkg/test/mocks/ConsoleClient.go | 18 +- pkg/test/mocks/Kube.go | 8 +- 3 files changed, 41 insertions(+), 1074 deletions(-) diff --git a/pkg/test/mocks/Client.go b/pkg/test/mocks/Client.go index 81e29523b..96cc9d187 100644 --- a/pkg/test/mocks/Client.go +++ b/pkg/test/mocks/Client.go @@ -1,4 +1,4 @@ -// Code generated by mockery v2.46.3. DO NOT EDIT. +// Code generated by mockery v2.50.0. DO NOT EDIT. package mocks @@ -14,36 +14,6 @@ type Client struct { mock.Mock } -// AcquireLock provides a mock function with given fields: repo -func (_m *Client) AcquireLock(repo string) (*api.ApplyLock, error) { - ret := _m.Called(repo) - - if len(ret) == 0 { - panic("no return value specified for AcquireLock") - } - - var r0 *api.ApplyLock - var r1 error - if rf, ok := ret.Get(0).(func(string) (*api.ApplyLock, error)); ok { - return rf(repo) - } - if rf, ok := ret.Get(0).(func(string) *api.ApplyLock); ok { - r0 = rf(repo) - } else { - if ret.Get(0) != nil { - r0 = ret.Get(0).(*api.ApplyLock) - } - } - - if rf, ok := ret.Get(1).(func(string) error); ok { - r1 = rf(repo) - } else { - r1 = ret.Error(1) - } - - return r0, r1 -} - // Chat provides a mock function with given fields: history func (_m *Client) Chat(history []*api.ChatMessage) (*api.ChatMessage, error) { ret := _m.Called(history) @@ -104,7 +74,7 @@ func (_m *Client) Cluster(id string) (*api.Cluster, error) { return r0, r1 } -// Clusters provides a mock function with given fields: +// Clusters provides a mock function with no fields func (_m *Client) Clusters() ([]*api.Cluster, error) { ret := _m.Called() @@ -134,7 +104,7 @@ func (_m *Client) Clusters() ([]*api.Cluster, error) { return r0, r1 } -// CreateAccessToken provides a mock function with given fields: +// CreateAccessToken provides a mock function with no fields func (_m *Client) CreateAccessToken() (string, error) { ret := _m.Called() @@ -162,70 +132,6 @@ func (_m *Client) CreateAccessToken() (string, error) { return r0, r1 } -// CreateArtifact provides a mock function with given fields: repo, attrs -func (_m *Client) CreateArtifact(repo string, attrs api.ArtifactAttributes) (api.Artifact, error) { - ret := _m.Called(repo, attrs) - - if len(ret) == 0 { - panic("no return value specified for CreateArtifact") - } - - var r0 api.Artifact - var r1 error - if rf, ok := ret.Get(0).(func(string, api.ArtifactAttributes) (api.Artifact, error)); ok { - return rf(repo, attrs) - } - if rf, ok := ret.Get(0).(func(string, api.ArtifactAttributes) api.Artifact); ok { - r0 = rf(repo, attrs) - } else { - r0 = ret.Get(0).(api.Artifact) - } - - if rf, ok := ret.Get(1).(func(string, api.ArtifactAttributes) error); ok { - r1 = rf(repo, attrs) - } else { - r1 = ret.Error(1) - } - - return r0, r1 -} - -// CreateCrd provides a mock function with given fields: repo, chart, file -func (_m *Client) CreateCrd(repo string, chart string, file string) error { - ret := _m.Called(repo, chart, file) - - if len(ret) == 0 { - panic("no return value specified for CreateCrd") - } - - var r0 error - if rf, ok := ret.Get(0).(func(string, string, string) error); ok { - r0 = rf(repo, chart, file) - } else { - r0 = ret.Error(0) - } - - return r0 -} - -// CreateDependency provides a mock function with given fields: source, dest -func (_m *Client) CreateDependency(source string, dest string) error { - ret := _m.Called(source, dest) - - if len(ret) == 0 { - panic("no return value specified for CreateDependency") - } - - var r0 error - if rf, ok := ret.Get(0).(func(string, string) error); ok { - r0 = rf(source, dest) - } else { - r0 = ret.Error(0) - } - - return r0 -} - // CreateDomain provides a mock function with given fields: name func (_m *Client) CreateDomain(name string) error { ret := _m.Called(name) @@ -326,80 +232,6 @@ func (_m *Client) CreateKeyBackup(attrs api.KeyBackupAttributes) error { return r0 } -// CreateRecipe provides a mock function with given fields: repoName, attrs -func (_m *Client) CreateRecipe(repoName string, attrs gqlclient.RecipeAttributes) (string, error) { - ret := _m.Called(repoName, attrs) - - if len(ret) == 0 { - panic("no return value specified for CreateRecipe") - } - - var r0 string - var r1 error - if rf, ok := ret.Get(0).(func(string, gqlclient.RecipeAttributes) (string, error)); ok { - return rf(repoName, attrs) - } - if rf, ok := ret.Get(0).(func(string, gqlclient.RecipeAttributes) string); ok { - r0 = rf(repoName, attrs) - } else { - r0 = ret.Get(0).(string) - } - - if rf, ok := ret.Get(1).(func(string, gqlclient.RecipeAttributes) error); ok { - r1 = rf(repoName, attrs) - } else { - r1 = ret.Error(1) - } - - return r0, r1 -} - -// CreateRepository provides a mock function with given fields: name, publisher, input -func (_m *Client) CreateRepository(name string, publisher string, input *gqlclient.RepositoryAttributes) error { - ret := _m.Called(name, publisher, input) - - if len(ret) == 0 { - panic("no return value specified for CreateRepository") - } - - var r0 error - if rf, ok := ret.Get(0).(func(string, string, *gqlclient.RepositoryAttributes) error); ok { - r0 = rf(name, publisher, input) - } else { - r0 = ret.Error(0) - } - - return r0 -} - -// CreateStack provides a mock function with given fields: attributes -func (_m *Client) CreateStack(attributes gqlclient.StackAttributes) (string, error) { - ret := _m.Called(attributes) - - if len(ret) == 0 { - panic("no return value specified for CreateStack") - } - - var r0 string - var r1 error - if rf, ok := ret.Get(0).(func(gqlclient.StackAttributes) (string, error)); ok { - return rf(attributes) - } - if rf, ok := ret.Get(0).(func(gqlclient.StackAttributes) string); ok { - r0 = rf(attributes) - } else { - r0 = ret.Get(0).(string) - } - - if rf, ok := ret.Get(1).(func(gqlclient.StackAttributes) error); ok { - r1 = rf(attributes) - } else { - r1 = ret.Error(1) - } - - return r0, r1 -} - // CreateTrust provides a mock function with given fields: issuer, trust func (_m *Client) CreateTrust(issuer string, trust string) error { ret := _m.Called(issuer, trust) @@ -418,24 +250,6 @@ func (_m *Client) CreateTrust(issuer string, trust string) error { return r0 } -// CreateUpgrade provides a mock function with given fields: queue, repository, attrs -func (_m *Client) CreateUpgrade(queue string, repository string, attrs gqlclient.UpgradeAttributes) error { - ret := _m.Called(queue, repository, attrs) - - if len(ret) == 0 { - panic("no return value specified for CreateUpgrade") - } - - var r0 error - if rf, ok := ret.Get(0).(func(string, string, gqlclient.UpgradeAttributes) error); ok { - r0 = rf(queue, repository, attrs) - } else { - r0 = ret.Error(0) - } - - return r0 -} - // DeleteEabCredential provides a mock function with given fields: cluster, provider func (_m *Client) DeleteEabCredential(cluster string, provider string) error { ret := _m.Called(cluster, provider) @@ -454,42 +268,6 @@ func (_m *Client) DeleteEabCredential(cluster string, provider string) error { return r0 } -// DeleteInstallation provides a mock function with given fields: id -func (_m *Client) DeleteInstallation(id string) error { - ret := _m.Called(id) - - if len(ret) == 0 { - panic("no return value specified for DeleteInstallation") - } - - var r0 error - if rf, ok := ret.Get(0).(func(string) error); ok { - r0 = rf(id) - } else { - r0 = ret.Error(0) - } - - return r0 -} - -// DeleteShell provides a mock function with given fields: -func (_m *Client) DeleteShell() error { - ret := _m.Called() - - if len(ret) == 0 { - panic("no return value specified for DeleteShell") - } - - var r0 error - if rf, ok := ret.Get(0).(func() error); ok { - r0 = rf() - } else { - r0 = ret.Error(0) - } - - return r0 -} - // DeleteTrust provides a mock function with given fields: id func (_m *Client) DeleteTrust(id string) error { ret := _m.Called(id) @@ -508,25 +286,7 @@ func (_m *Client) DeleteTrust(id string) error { return r0 } -// DestroyCluster provides a mock function with given fields: domain, name, provider -func (_m *Client) DestroyCluster(domain string, name string, provider string) error { - ret := _m.Called(domain, name, provider) - - if len(ret) == 0 { - panic("no return value specified for DestroyCluster") - } - - var r0 error - if rf, ok := ret.Get(0).(func(string, string, string) error); ok { - r0 = rf(domain, name, provider) - } else { - r0 = ret.Error(0) - } - - return r0 -} - -// DeviceLogin provides a mock function with given fields: +// DeviceLogin provides a mock function with no fields func (_m *Client) DeviceLogin() (*api.DeviceLogin, error) { ret := _m.Called() @@ -556,67 +316,7 @@ func (_m *Client) DeviceLogin() (*api.DeviceLogin, error) { return r0, r1 } -// GetChartInstallations provides a mock function with given fields: repoId -func (_m *Client) GetChartInstallations(repoId string) ([]*api.ChartInstallation, error) { - ret := _m.Called(repoId) - - if len(ret) == 0 { - panic("no return value specified for GetChartInstallations") - } - - var r0 []*api.ChartInstallation - var r1 error - if rf, ok := ret.Get(0).(func(string) ([]*api.ChartInstallation, error)); ok { - return rf(repoId) - } - if rf, ok := ret.Get(0).(func(string) []*api.ChartInstallation); ok { - r0 = rf(repoId) - } else { - if ret.Get(0) != nil { - r0 = ret.Get(0).([]*api.ChartInstallation) - } - } - - if rf, ok := ret.Get(1).(func(string) error); ok { - r1 = rf(repoId) - } else { - r1 = ret.Error(1) - } - - return r0, r1 -} - -// GetCharts provides a mock function with given fields: repoId -func (_m *Client) GetCharts(repoId string) ([]*api.Chart, error) { - ret := _m.Called(repoId) - - if len(ret) == 0 { - panic("no return value specified for GetCharts") - } - - var r0 []*api.Chart - var r1 error - if rf, ok := ret.Get(0).(func(string) ([]*api.Chart, error)); ok { - return rf(repoId) - } - if rf, ok := ret.Get(0).(func(string) []*api.Chart); ok { - r0 = rf(repoId) - } else { - if ret.Get(0) != nil { - r0 = ret.Get(0).([]*api.Chart) - } - } - - if rf, ok := ret.Get(1).(func(string) error); ok { - r1 = rf(repoId) - } else { - r1 = ret.Error(1) - } - - return r0, r1 -} - -// GetConsoleInstances provides a mock function with given fields: +// GetConsoleInstances provides a mock function with no fields func (_m *Client) GetConsoleInstances() ([]*gqlclient.ConsoleInstanceFragment, error) { ret := _m.Called() @@ -734,37 +434,7 @@ func (_m *Client) GetInstallation(name string) (*api.Installation, error) { return r0, r1 } -// GetInstallationById provides a mock function with given fields: id -func (_m *Client) GetInstallationById(id string) (*api.Installation, error) { - ret := _m.Called(id) - - if len(ret) == 0 { - panic("no return value specified for GetInstallationById") - } - - var r0 *api.Installation - var r1 error - if rf, ok := ret.Get(0).(func(string) (*api.Installation, error)); ok { - return rf(id) - } - if rf, ok := ret.Get(0).(func(string) *api.Installation); ok { - r0 = rf(id) - } else { - if ret.Get(0) != nil { - r0 = ret.Get(0).(*api.Installation) - } - } - - if rf, ok := ret.Get(1).(func(string) error); ok { - r1 = rf(id) - } else { - r1 = ret.Error(1) - } - - return r0, r1 -} - -// GetInstallations provides a mock function with given fields: +// GetInstallations provides a mock function with no fields func (_m *Client) GetInstallations() ([]*api.Installation, error) { ret := _m.Called() @@ -824,317 +494,42 @@ func (_m *Client) GetKeyBackup(name string) (*api.KeyBackup, error) { return r0, r1 } -// GetPackageInstallations provides a mock function with given fields: repoId -func (_m *Client) GetPackageInstallations(repoId string) ([]*api.ChartInstallation, []*api.TerraformInstallation, error) { - ret := _m.Called(repoId) +// GetRepository provides a mock function with given fields: repo +func (_m *Client) GetRepository(repo string) (*api.Repository, error) { + ret := _m.Called(repo) if len(ret) == 0 { - panic("no return value specified for GetPackageInstallations") + panic("no return value specified for GetRepository") } - var r0 []*api.ChartInstallation - var r1 []*api.TerraformInstallation - var r2 error - if rf, ok := ret.Get(0).(func(string) ([]*api.ChartInstallation, []*api.TerraformInstallation, error)); ok { - return rf(repoId) + var r0 *api.Repository + var r1 error + if rf, ok := ret.Get(0).(func(string) (*api.Repository, error)); ok { + return rf(repo) } - if rf, ok := ret.Get(0).(func(string) []*api.ChartInstallation); ok { - r0 = rf(repoId) + if rf, ok := ret.Get(0).(func(string) *api.Repository); ok { + r0 = rf(repo) } else { if ret.Get(0) != nil { - r0 = ret.Get(0).([]*api.ChartInstallation) - } - } - - if rf, ok := ret.Get(1).(func(string) []*api.TerraformInstallation); ok { - r1 = rf(repoId) - } else { - if ret.Get(1) != nil { - r1 = ret.Get(1).([]*api.TerraformInstallation) + r0 = ret.Get(0).(*api.Repository) } } - if rf, ok := ret.Get(2).(func(string) error); ok { - r2 = rf(repoId) + if rf, ok := ret.Get(1).(func(string) error); ok { + r1 = rf(repo) } else { - r2 = ret.Error(2) + r1 = ret.Error(1) } - return r0, r1, r2 + return r0, r1 } -// GetRecipe provides a mock function with given fields: repo, name -func (_m *Client) GetRecipe(repo string, name string) (*api.Recipe, error) { - ret := _m.Called(repo, name) +// GetTfProviders provides a mock function with no fields +func (_m *Client) GetTfProviders() ([]string, error) { + ret := _m.Called() if len(ret) == 0 { - panic("no return value specified for GetRecipe") - } - - var r0 *api.Recipe - var r1 error - if rf, ok := ret.Get(0).(func(string, string) (*api.Recipe, error)); ok { - return rf(repo, name) - } - if rf, ok := ret.Get(0).(func(string, string) *api.Recipe); ok { - r0 = rf(repo, name) - } else { - if ret.Get(0) != nil { - r0 = ret.Get(0).(*api.Recipe) - } - } - - if rf, ok := ret.Get(1).(func(string, string) error); ok { - r1 = rf(repo, name) - } else { - r1 = ret.Error(1) - } - - return r0, r1 -} - -// GetRecipeByID provides a mock function with given fields: id -func (_m *Client) GetRecipeByID(id string) (*api.Recipe, error) { - ret := _m.Called(id) - - if len(ret) == 0 { - panic("no return value specified for GetRecipeByID") - } - - var r0 *api.Recipe - var r1 error - if rf, ok := ret.Get(0).(func(string) (*api.Recipe, error)); ok { - return rf(id) - } - if rf, ok := ret.Get(0).(func(string) *api.Recipe); ok { - r0 = rf(id) - } else { - if ret.Get(0) != nil { - r0 = ret.Get(0).(*api.Recipe) - } - } - - if rf, ok := ret.Get(1).(func(string) error); ok { - r1 = rf(id) - } else { - r1 = ret.Error(1) - } - - return r0, r1 -} - -// GetRepository provides a mock function with given fields: repo -func (_m *Client) GetRepository(repo string) (*api.Repository, error) { - ret := _m.Called(repo) - - if len(ret) == 0 { - panic("no return value specified for GetRepository") - } - - var r0 *api.Repository - var r1 error - if rf, ok := ret.Get(0).(func(string) (*api.Repository, error)); ok { - return rf(repo) - } - if rf, ok := ret.Get(0).(func(string) *api.Repository); ok { - r0 = rf(repo) - } else { - if ret.Get(0) != nil { - r0 = ret.Get(0).(*api.Repository) - } - } - - if rf, ok := ret.Get(1).(func(string) error); ok { - r1 = rf(repo) - } else { - r1 = ret.Error(1) - } - - return r0, r1 -} - -// GetShell provides a mock function with given fields: -func (_m *Client) GetShell() (api.CloudShell, error) { - ret := _m.Called() - - if len(ret) == 0 { - panic("no return value specified for GetShell") - } - - var r0 api.CloudShell - var r1 error - if rf, ok := ret.Get(0).(func() (api.CloudShell, error)); ok { - return rf() - } - if rf, ok := ret.Get(0).(func() api.CloudShell); ok { - r0 = rf() - } else { - r0 = ret.Get(0).(api.CloudShell) - } - - if rf, ok := ret.Get(1).(func() error); ok { - r1 = rf() - } else { - r1 = ret.Error(1) - } - - return r0, r1 -} - -// GetStack provides a mock function with given fields: name, provider -func (_m *Client) GetStack(name string, provider string) (*api.Stack, error) { - ret := _m.Called(name, provider) - - if len(ret) == 0 { - panic("no return value specified for GetStack") - } - - var r0 *api.Stack - var r1 error - if rf, ok := ret.Get(0).(func(string, string) (*api.Stack, error)); ok { - return rf(name, provider) - } - if rf, ok := ret.Get(0).(func(string, string) *api.Stack); ok { - r0 = rf(name, provider) - } else { - if ret.Get(0) != nil { - r0 = ret.Get(0).(*api.Stack) - } - } - - if rf, ok := ret.Get(1).(func(string, string) error); ok { - r1 = rf(name, provider) - } else { - r1 = ret.Error(1) - } - - return r0, r1 -} - -// GetTerraform provides a mock function with given fields: repoId -func (_m *Client) GetTerraform(repoId string) ([]*api.Terraform, error) { - ret := _m.Called(repoId) - - if len(ret) == 0 { - panic("no return value specified for GetTerraform") - } - - var r0 []*api.Terraform - var r1 error - if rf, ok := ret.Get(0).(func(string) ([]*api.Terraform, error)); ok { - return rf(repoId) - } - if rf, ok := ret.Get(0).(func(string) []*api.Terraform); ok { - r0 = rf(repoId) - } else { - if ret.Get(0) != nil { - r0 = ret.Get(0).([]*api.Terraform) - } - } - - if rf, ok := ret.Get(1).(func(string) error); ok { - r1 = rf(repoId) - } else { - r1 = ret.Error(1) - } - - return r0, r1 -} - -// GetTerraformInstallations provides a mock function with given fields: repoId -func (_m *Client) GetTerraformInstallations(repoId string) ([]*api.TerraformInstallation, error) { - ret := _m.Called(repoId) - - if len(ret) == 0 { - panic("no return value specified for GetTerraformInstallations") - } - - var r0 []*api.TerraformInstallation - var r1 error - if rf, ok := ret.Get(0).(func(string) ([]*api.TerraformInstallation, error)); ok { - return rf(repoId) - } - if rf, ok := ret.Get(0).(func(string) []*api.TerraformInstallation); ok { - r0 = rf(repoId) - } else { - if ret.Get(0) != nil { - r0 = ret.Get(0).([]*api.TerraformInstallation) - } - } - - if rf, ok := ret.Get(1).(func(string) error); ok { - r1 = rf(repoId) - } else { - r1 = ret.Error(1) - } - - return r0, r1 -} - -// GetTerraformVersions provides a mock function with given fields: id -func (_m *Client) GetTerraformVersions(id string) ([]*api.Version, error) { - ret := _m.Called(id) - - if len(ret) == 0 { - panic("no return value specified for GetTerraformVersions") - } - - var r0 []*api.Version - var r1 error - if rf, ok := ret.Get(0).(func(string) ([]*api.Version, error)); ok { - return rf(id) - } - if rf, ok := ret.Get(0).(func(string) []*api.Version); ok { - r0 = rf(id) - } else { - if ret.Get(0) != nil { - r0 = ret.Get(0).([]*api.Version) - } - } - - if rf, ok := ret.Get(1).(func(string) error); ok { - r1 = rf(id) - } else { - r1 = ret.Error(1) - } - - return r0, r1 -} - -// GetTfProviderScaffold provides a mock function with given fields: name, version -func (_m *Client) GetTfProviderScaffold(name string, version string) (string, error) { - ret := _m.Called(name, version) - - if len(ret) == 0 { - panic("no return value specified for GetTfProviderScaffold") - } - - var r0 string - var r1 error - if rf, ok := ret.Get(0).(func(string, string) (string, error)); ok { - return rf(name, version) - } - if rf, ok := ret.Get(0).(func(string, string) string); ok { - r0 = rf(name, version) - } else { - r0 = ret.Get(0).(string) - } - - if rf, ok := ret.Get(1).(func(string, string) error); ok { - r1 = rf(name, version) - } else { - r1 = ret.Error(1) - } - - return r0, r1 -} - -// GetTfProviders provides a mock function with given fields: -func (_m *Client) GetTfProviders() ([]string, error) { - ret := _m.Called() - - if len(ret) == 0 { - panic("no return value specified for GetTfProviders") + panic("no return value specified for GetTfProviders") } var r0 []string @@ -1159,37 +554,7 @@ func (_m *Client) GetTfProviders() ([]string, error) { return r0, r1 } -// GetVersions provides a mock function with given fields: chartId -func (_m *Client) GetVersions(chartId string) ([]*api.Version, error) { - ret := _m.Called(chartId) - - if len(ret) == 0 { - panic("no return value specified for GetVersions") - } - - var r0 []*api.Version - var r1 error - if rf, ok := ret.Get(0).(func(string) ([]*api.Version, error)); ok { - return rf(chartId) - } - if rf, ok := ret.Get(0).(func(string) []*api.Version); ok { - r0 = rf(chartId) - } else { - if ret.Get(0) != nil { - r0 = ret.Get(0).([]*api.Version) - } - } - - if rf, ok := ret.Get(1).(func(string) error); ok { - r1 = rf(chartId) - } else { - r1 = ret.Error(1) - } - - return r0, r1 -} - -// GrabAccessToken provides a mock function with given fields: +// GrabAccessToken provides a mock function with no fields func (_m *Client) GrabAccessToken() (string, error) { ret := _m.Called() @@ -1252,73 +617,7 @@ func (_m *Client) ImpersonateServiceAccount(email string) (string, string, error return r0, r1, r2 } -// InstallRecipe provides a mock function with given fields: id -func (_m *Client) InstallRecipe(id string) error { - ret := _m.Called(id) - - if len(ret) == 0 { - panic("no return value specified for InstallRecipe") - } - - var r0 error - if rf, ok := ret.Get(0).(func(string) error); ok { - r0 = rf(id) - } else { - r0 = ret.Error(0) - } - - return r0 -} - -// InstallVersion provides a mock function with given fields: tp, repo, pkg, vsn -func (_m *Client) InstallVersion(tp string, repo string, pkg string, vsn string) error { - ret := _m.Called(tp, repo, pkg, vsn) - - if len(ret) == 0 { - panic("no return value specified for InstallVersion") - } - - var r0 error - if rf, ok := ret.Get(0).(func(string, string, string, string) error); ok { - r0 = rf(tp, repo, pkg, vsn) - } else { - r0 = ret.Error(0) - } - - return r0 -} - -// ListArtifacts provides a mock function with given fields: repo -func (_m *Client) ListArtifacts(repo string) ([]api.Artifact, error) { - ret := _m.Called(repo) - - if len(ret) == 0 { - panic("no return value specified for ListArtifacts") - } - - var r0 []api.Artifact - var r1 error - if rf, ok := ret.Get(0).(func(string) ([]api.Artifact, error)); ok { - return rf(repo) - } - if rf, ok := ret.Get(0).(func(string) []api.Artifact); ok { - r0 = rf(repo) - } else { - if ret.Get(0) != nil { - r0 = ret.Get(0).([]api.Artifact) - } - } - - if rf, ok := ret.Get(1).(func(string) error); ok { - r1 = rf(repo) - } else { - r1 = ret.Error(1) - } - - return r0, r1 -} - -// ListKeyBackups provides a mock function with given fields: +// ListKeyBackups provides a mock function with no fields func (_m *Client) ListKeyBackups() ([]*api.KeyBackup, error) { ret := _m.Called() @@ -1378,96 +677,6 @@ func (_m *Client) ListKeys(emails []string) ([]*api.PublicKey, error) { return r0, r1 } -// ListRecipes provides a mock function with given fields: repo, provider -func (_m *Client) ListRecipes(repo string, provider string) ([]*api.Recipe, error) { - ret := _m.Called(repo, provider) - - if len(ret) == 0 { - panic("no return value specified for ListRecipes") - } - - var r0 []*api.Recipe - var r1 error - if rf, ok := ret.Get(0).(func(string, string) ([]*api.Recipe, error)); ok { - return rf(repo, provider) - } - if rf, ok := ret.Get(0).(func(string, string) []*api.Recipe); ok { - r0 = rf(repo, provider) - } else { - if ret.Get(0) != nil { - r0 = ret.Get(0).([]*api.Recipe) - } - } - - if rf, ok := ret.Get(1).(func(string, string) error); ok { - r1 = rf(repo, provider) - } else { - r1 = ret.Error(1) - } - - return r0, r1 -} - -// ListRepositories provides a mock function with given fields: query -func (_m *Client) ListRepositories(query string) ([]*api.Repository, error) { - ret := _m.Called(query) - - if len(ret) == 0 { - panic("no return value specified for ListRepositories") - } - - var r0 []*api.Repository - var r1 error - if rf, ok := ret.Get(0).(func(string) ([]*api.Repository, error)); ok { - return rf(query) - } - if rf, ok := ret.Get(0).(func(string) []*api.Repository); ok { - r0 = rf(query) - } else { - if ret.Get(0) != nil { - r0 = ret.Get(0).([]*api.Repository) - } - } - - if rf, ok := ret.Get(1).(func(string) error); ok { - r1 = rf(query) - } else { - r1 = ret.Error(1) - } - - return r0, r1 -} - -// ListStacks provides a mock function with given fields: featured -func (_m *Client) ListStacks(featured bool) ([]*api.Stack, error) { - ret := _m.Called(featured) - - if len(ret) == 0 { - panic("no return value specified for ListStacks") - } - - var r0 []*api.Stack - var r1 error - if rf, ok := ret.Get(0).(func(bool) ([]*api.Stack, error)); ok { - return rf(featured) - } - if rf, ok := ret.Get(0).(func(bool) []*api.Stack); ok { - r0 = rf(featured) - } else { - if ret.Get(0) != nil { - r0 = ret.Get(0).([]*api.Stack) - } - } - - if rf, ok := ret.Get(1).(func(bool) error); ok { - r1 = rf(featured) - } else { - r1 = ret.Error(1) - } - - return r0, r1 -} - // Login provides a mock function with given fields: email, pwd func (_m *Client) Login(email string, pwd string) (string, error) { ret := _m.Called(email, pwd) @@ -1526,25 +735,7 @@ func (_m *Client) LoginMethod(email string) (*api.LoginMethod, error) { return r0, r1 } -// MarkSynced provides a mock function with given fields: repo -func (_m *Client) MarkSynced(repo string) error { - ret := _m.Called(repo) - - if len(ret) == 0 { - panic("no return value specified for MarkSynced") - } - - var r0 error - if rf, ok := ret.Get(0).(func(string) error); ok { - r0 = rf(repo) - } else { - r0 = ret.Error(0) - } - - return r0 -} - -// Me provides a mock function with given fields: +// Me provides a mock function with no fields func (_m *Client) Me() (*api.Me, error) { ret := _m.Called() @@ -1648,202 +839,6 @@ func (_m *Client) PollLoginToken(token string) (string, error) { return r0, r1 } -// PromoteCluster provides a mock function with given fields: -func (_m *Client) PromoteCluster() error { - ret := _m.Called() - - if len(ret) == 0 { - panic("no return value specified for PromoteCluster") - } - - var r0 error - if rf, ok := ret.Get(0).(func() error); ok { - r0 = rf() - } else { - r0 = ret.Error(0) - } - - return r0 -} - -// Release provides a mock function with given fields: name, tags -func (_m *Client) Release(name string, tags []string) error { - ret := _m.Called(name, tags) - - if len(ret) == 0 { - panic("no return value specified for Release") - } - - var r0 error - if rf, ok := ret.Get(0).(func(string, []string) error); ok { - r0 = rf(name, tags) - } else { - r0 = ret.Error(0) - } - - return r0 -} - -// ReleaseLock provides a mock function with given fields: repo, lock -func (_m *Client) ReleaseLock(repo string, lock string) (*api.ApplyLock, error) { - ret := _m.Called(repo, lock) - - if len(ret) == 0 { - panic("no return value specified for ReleaseLock") - } - - var r0 *api.ApplyLock - var r1 error - if rf, ok := ret.Get(0).(func(string, string) (*api.ApplyLock, error)); ok { - return rf(repo, lock) - } - if rf, ok := ret.Get(0).(func(string, string) *api.ApplyLock); ok { - r0 = rf(repo, lock) - } else { - if ret.Get(0) != nil { - r0 = ret.Get(0).(*api.ApplyLock) - } - } - - if rf, ok := ret.Get(1).(func(string, string) error); ok { - r1 = rf(repo, lock) - } else { - r1 = ret.Error(1) - } - - return r0, r1 -} - -// ResetInstallations provides a mock function with given fields: -func (_m *Client) ResetInstallations() (int, error) { - ret := _m.Called() - - if len(ret) == 0 { - panic("no return value specified for ResetInstallations") - } - - var r0 int - var r1 error - if rf, ok := ret.Get(0).(func() (int, error)); ok { - return rf() - } - if rf, ok := ret.Get(0).(func() int); ok { - r0 = rf() - } else { - r0 = ret.Get(0).(int) - } - - if rf, ok := ret.Get(1).(func() error); ok { - r1 = rf() - } else { - r1 = ret.Error(1) - } - - return r0, r1 -} - -// Scaffolds provides a mock function with given fields: in -func (_m *Client) Scaffolds(in *api.ScaffoldInputs) ([]*api.ScaffoldFile, error) { - ret := _m.Called(in) - - if len(ret) == 0 { - panic("no return value specified for Scaffolds") - } - - var r0 []*api.ScaffoldFile - var r1 error - if rf, ok := ret.Get(0).(func(*api.ScaffoldInputs) ([]*api.ScaffoldFile, error)); ok { - return rf(in) - } - if rf, ok := ret.Get(0).(func(*api.ScaffoldInputs) []*api.ScaffoldFile); ok { - r0 = rf(in) - } else { - if ret.Get(0) != nil { - r0 = ret.Get(0).([]*api.ScaffoldFile) - } - } - - if rf, ok := ret.Get(1).(func(*api.ScaffoldInputs) error); ok { - r1 = rf(in) - } else { - r1 = ret.Error(1) - } - - return r0, r1 -} - -// TransferOwnership provides a mock function with given fields: name, email -func (_m *Client) TransferOwnership(name string, email string) error { - ret := _m.Called(name, email) - - if len(ret) == 0 { - panic("no return value specified for TransferOwnership") - } - - var r0 error - if rf, ok := ret.Get(0).(func(string, string) error); ok { - r0 = rf(name, email) - } else { - r0 = ret.Error(0) - } - - return r0 -} - -// UninstallChart provides a mock function with given fields: id -func (_m *Client) UninstallChart(id string) error { - ret := _m.Called(id) - - if len(ret) == 0 { - panic("no return value specified for UninstallChart") - } - - var r0 error - if rf, ok := ret.Get(0).(func(string) error); ok { - r0 = rf(id) - } else { - r0 = ret.Error(0) - } - - return r0 -} - -// UninstallTerraform provides a mock function with given fields: id -func (_m *Client) UninstallTerraform(id string) error { - ret := _m.Called(id) - - if len(ret) == 0 { - panic("no return value specified for UninstallTerraform") - } - - var r0 error - if rf, ok := ret.Get(0).(func(string) error); ok { - r0 = rf(id) - } else { - r0 = ret.Error(0) - } - - return r0 -} - -// UnlockRepository provides a mock function with given fields: name -func (_m *Client) UnlockRepository(name string) error { - ret := _m.Called(name) - - if len(ret) == 0 { - panic("no return value specified for UnlockRepository") - } - - var r0 error - if rf, ok := ret.Get(0).(func(string) error); ok { - r0 = rf(name) - } else { - r0 = ret.Error(0) - } - - return r0 -} - // UpdateConsoleInstance provides a mock function with given fields: id, attrs func (_m *Client) UpdateConsoleInstance(id string, attrs gqlclient.ConsoleInstanceUpdateAttributes) error { ret := _m.Called(id, attrs) @@ -1880,34 +875,6 @@ func (_m *Client) UpdateVersion(spec *api.VersionSpec, tags []string) error { return r0 } -// UploadTerraform provides a mock function with given fields: dir, repoName -func (_m *Client) UploadTerraform(dir string, repoName string) (api.Terraform, error) { - ret := _m.Called(dir, repoName) - - if len(ret) == 0 { - panic("no return value specified for UploadTerraform") - } - - var r0 api.Terraform - var r1 error - if rf, ok := ret.Get(0).(func(string, string) (api.Terraform, error)); ok { - return rf(dir, repoName) - } - if rf, ok := ret.Get(0).(func(string, string) api.Terraform); ok { - r0 = rf(dir, repoName) - } else { - r0 = ret.Get(0).(api.Terraform) - } - - if rf, ok := ret.Get(1).(func(string, string) error); ok { - r1 = rf(dir, repoName) - } else { - r1 = ret.Error(1) - } - - return r0, r1 -} - // NewClient creates a new instance of Client. It also registers a testing interface on the mock and a cleanup function to assert the mocks expectations. // The first argument is typically a *testing.T value. func NewClient(t interface { diff --git a/pkg/test/mocks/ConsoleClient.go b/pkg/test/mocks/ConsoleClient.go index 62abed716..51f4875ee 100644 --- a/pkg/test/mocks/ConsoleClient.go +++ b/pkg/test/mocks/ConsoleClient.go @@ -1,4 +1,4 @@ -// Code generated by mockery v2.46.3. DO NOT EDIT. +// Code generated by mockery v2.50.0. DO NOT EDIT. package mocks @@ -407,7 +407,7 @@ func (_m *ConsoleClient) DetachCluster(id string) error { return r0 } -// ExtUrl provides a mock function with given fields: +// ExtUrl provides a mock function with no fields func (_m *ConsoleClient) ExtUrl() string { ret := _m.Called() @@ -513,7 +513,7 @@ func (_m *ConsoleClient) GetDeployToken(clusterId *string, clusterName *string) return r0, r1 } -// GetGlobalSettings provides a mock function with given fields: +// GetGlobalSettings provides a mock function with no fields func (_m *ConsoleClient) GetGlobalSettings() (*client.DeploymentSettingsFragment, error) { ret := _m.Called() @@ -723,7 +723,7 @@ func (_m *ConsoleClient) ListClusterServices(clusterId *string, handle *string) return r0, r1 } -// ListClusters provides a mock function with given fields: +// ListClusters provides a mock function with no fields func (_m *ConsoleClient) ListClusters() (*client.ListClusters, error) { ret := _m.Called() @@ -783,7 +783,7 @@ func (_m *ConsoleClient) ListNotificationSinks(after *string, first *int64) (*cl return r0, r1 } -// ListProviders provides a mock function with given fields: +// ListProviders provides a mock function with no fields func (_m *ConsoleClient) ListProviders() (*client.ListProviders, error) { ret := _m.Called() @@ -813,7 +813,7 @@ func (_m *ConsoleClient) ListProviders() (*client.ListProviders, error) { return r0, r1 } -// ListRepositories provides a mock function with given fields: +// ListRepositories provides a mock function with no fields func (_m *ConsoleClient) ListRepositories() (*client.ListGitRepositories, error) { ret := _m.Called() @@ -873,7 +873,7 @@ func (_m *ConsoleClient) ListStackRuns(stackID string) (*client.ListStackRuns, e return r0, r1 } -// MyCluster provides a mock function with given fields: +// MyCluster provides a mock function with no fields func (_m *ConsoleClient) MyCluster() (*client.MyCluster, error) { ret := _m.Called() @@ -963,7 +963,7 @@ func (_m *ConsoleClient) SaveServiceContext(name string, attributes client.Servi return r0, r1 } -// Token provides a mock function with given fields: +// Token provides a mock function with no fields func (_m *ConsoleClient) Token() string { ret := _m.Called() @@ -1101,7 +1101,7 @@ func (_m *ConsoleClient) UpdateRepository(id string, attrs client.GitAttributes) return r0, r1 } -// Url provides a mock function with given fields: +// Url provides a mock function with no fields func (_m *ConsoleClient) Url() string { ret := _m.Called() diff --git a/pkg/test/mocks/Kube.go b/pkg/test/mocks/Kube.go index f9a3511be..91a5a2921 100644 --- a/pkg/test/mocks/Kube.go +++ b/pkg/test/mocks/Kube.go @@ -1,4 +1,4 @@ -// Code generated by mockery v2.46.3. DO NOT EDIT. +// Code generated by mockery v2.50.0. DO NOT EDIT. package mocks @@ -77,7 +77,7 @@ func (_m *Kube) FinalizeNamespace(namespace string) error { return r0 } -// GetClient provides a mock function with given fields: +// GetClient provides a mock function with no fields func (_m *Kube) GetClient() *client_gokubernetes.Clientset { ret := _m.Called() @@ -97,7 +97,7 @@ func (_m *Kube) GetClient() *client_gokubernetes.Clientset { return r0 } -// GetRestClient provides a mock function with given fields: +// GetRestClient provides a mock function with no fields func (_m *Kube) GetRestClient() *rest.RESTClient { ret := _m.Called() @@ -207,7 +207,7 @@ func (_m *Kube) Node(name string) (*v1.Node, error) { return r0, r1 } -// Nodes provides a mock function with given fields: +// Nodes provides a mock function with no fields func (_m *Kube) Nodes() (*v1.NodeList, error) { ret := _m.Called() From dc4be37170b2af2b9bbb4b93f7bdaa5e85206676 Mon Sep 17 00:00:00 2001 From: Marcin Maciaszczyk Date: Thu, 5 Dec 2024 11:02:47 +0100 Subject: [PATCH 20/37] update linter and fix errors --- .github/workflows/ci.yaml | 14 ++-- Makefile | 4 +- cmd/command/vpn/vpn.go | 2 +- pkg/api/charts.go | 116 ------------------------------ pkg/bundle/configuration.go | 2 +- pkg/bundle/oidc.go | 73 ------------------- pkg/client/plural.go | 4 +- pkg/scaffold/template/template.go | 22 ------ pkg/scm/bitbucket.go | 6 +- pkg/up/ping.go | 5 +- pkg/utils/git/remote.go | 9 +-- pkg/utils/print.go | 32 +++------ pkg/utils/validation.go | 5 +- pkg/wkspace/validator.go | 33 --------- 14 files changed, 33 insertions(+), 294 deletions(-) delete mode 100644 pkg/api/charts.go diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 575dd302c..8da180597 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -18,7 +18,7 @@ jobs: actions: read steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Docker meta id: meta uses: docker/metadata-action@v4 @@ -164,7 +164,7 @@ jobs: actions: read steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Docker meta id: meta uses: docker/metadata-action@v4 @@ -229,7 +229,7 @@ jobs: actions: read # only required for a private repository by github/codeql-action/upload-sarif to get the Action run status steps: - name: Checkout code - uses: actions/checkout@v3 + uses: actions/checkout@v4 - name: Run Trivy vulnerability scanner in fs mode uses: aquasecurity/trivy-action@master with: @@ -248,7 +248,7 @@ jobs: name: Unit test runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - uses: actions/setup-go@v5 with: go-version-file: go.mod @@ -264,17 +264,17 @@ jobs: - name: golangci-lint uses: golangci/golangci-lint-action@v4 with: - version: v1.59.1 + version: v1.62.2 build: name: GoReleaser build runs-on: ubuntu-latest steps: - name: Checkout - uses: actions/checkout@v3 + uses: actions/checkout@v4 with: fetch-depth: 0 - name: Setup Go - uses: actions/setup-go@v4.1.0 + uses: actions/setup-go@v5 with: go-version-file: go.mod - name: GoReleaser (Build) diff --git a/Makefile b/Makefile index 1060b3235..ac94b9eea 100644 --- a/Makefile +++ b/Makefile @@ -167,7 +167,7 @@ test: setup-tests .PHONY: format format: ## formats all go code to prep for linting - docker run --rm -v $(PWD):/app -w /app golangci/golangci-lint:v1.59.1 golangci-lint run --fix + docker run --rm -v $(PWD):/app -w /app golangci/golangci-lint:v1.62.2 golangci-lint run --fix .PHONY: genmock genmock: ## generates mocks before running tests @@ -175,7 +175,7 @@ genmock: ## generates mocks before running tests .PHONY: lint lint: - docker run --rm -v $(PWD):/app -w /app golangci/golangci-lint:v1.59.1 golangci-lint run + docker run --rm -v $(PWD):/app -w /app golangci/golangci-lint:v1.62.2 golangci-lint run .PHONY: delete-tag delete-tag: diff --git a/cmd/command/vpn/vpn.go b/cmd/command/vpn/vpn.go index 1c9bef2b6..a190a5fc6 100644 --- a/cmd/command/vpn/vpn.go +++ b/cmd/command/vpn/vpn.go @@ -274,7 +274,7 @@ func (p *Plural) handleWireguardPeerDelete(c *cli.Context) error { return err } - utils.Highlight(fmt.Sprintf("Deleted peer %s successfully\n", peer.Name)) + utils.Highlight("Deleted peer %s successfully\n", peer.Name) return nil } diff --git a/pkg/api/charts.go b/pkg/api/charts.go deleted file mode 100644 index dcda98393..000000000 --- a/pkg/api/charts.go +++ /dev/null @@ -1,116 +0,0 @@ -package api - -import ( - "github.com/pluralsh/gqlclient" - "github.com/pluralsh/gqlclient/pkg/utils" -) - -func convertVersion(version *gqlclient.VersionFragment) *Version { - if version == nil { - return nil - } - v := &Version{ - Id: version.ID, - Version: version.Version, - Helm: version.Helm, - } - if version.Readme != nil { - v.Readme = *version.Readme - } - if version.Package != nil { - v.Package = *version.Package - } - if version.ValuesTemplate != nil { - v.ValuesTemplate = *version.ValuesTemplate - } - v.TemplateType = gqlclient.TemplateTypeGotemplate - if version.TemplateType != nil { - v.TemplateType = *version.TemplateType - } - if version.InsertedAt != nil { - v.InsertedAt = *version.InsertedAt - } - - v.Crds = make([]Crd, 0) - for _, crd := range version.Crds { - v.Crds = append(v.Crds, convertCrd(crd)) - } - v.Dependencies = convertDependencies(version.Dependencies) - return v -} - -func convertCrd(crd *gqlclient.CrdFragment) Crd { - c := Crd{ - Id: crd.ID, - Name: crd.Name, - Blob: utils.ConvertStringPointer(crd.Blob), - } - - return c -} - -func convertDependencies(depFragment *gqlclient.DependenciesFragment) *Dependencies { - if depFragment == nil { - return nil - } - dep := &Dependencies{ - Outputs: depFragment.Outputs, - Secrets: utils.ConvertStringArrayPointer(depFragment.Secrets), - Providers: convertProviders(depFragment.Providers), - ProviderWirings: depFragment.ProviderWirings, - } - if depFragment.ProviderVsn != nil { - dep.ProviderVsn = *depFragment.ProviderVsn - } - if depFragment.CliVsn != nil { - dep.CliVsn = *depFragment.CliVsn - } - if depFragment.Application != nil { - dep.Application = *depFragment.Application - } - if depFragment.Wait != nil { - dep.Wait = *depFragment.Wait - } - dep.Dependencies = make([]*Dependency, 0) - for _, dependency := range depFragment.Dependencies { - dep.Dependencies = append(dep.Dependencies, &Dependency{ - Type: string(*dependency.Type), - Repo: utils.ConvertStringPointer(dependency.Repo), - Name: utils.ConvertStringPointer(dependency.Name), - }) - } - if depFragment.Wirings != nil { - dep.Wirings = &Wirings{ - Terraform: utils.ConvertMapInterfaceToString(depFragment.Wirings.Terraform), - Helm: utils.ConvertMapInterfaceToString(depFragment.Wirings.Helm), - } - } - - return dep -} - -func convertProviders(providers []*gqlclient.Provider) []string { - p := make([]string, 0) - for _, provider := range providers { - p = append(p, string(*provider)) - } - - return p -} - -func convertChartInstallation(fragment *gqlclient.ChartInstallationFragment) *ChartInstallation { - if fragment == nil { - return nil - } - return &ChartInstallation{ - Id: *fragment.ID, - Chart: &Chart{ - Id: utils.ConvertStringPointer(fragment.Chart.ID), - Name: fragment.Chart.Name, - Description: utils.ConvertStringPointer(fragment.Chart.Description), - LatestVersion: utils.ConvertStringPointer(fragment.Chart.LatestVersion), - Dependencies: convertDependencies(fragment.Chart.Dependencies), - }, - Version: convertVersion(fragment.Version), - } -} diff --git a/pkg/bundle/configuration.go b/pkg/bundle/configuration.go index 3dda77dbb..becd686e3 100644 --- a/pkg/bundle/configuration.go +++ b/pkg/bundle/configuration.go @@ -105,7 +105,7 @@ func Configure(ctx map[string]interface{}, item *api.ConfigurationItem, context } fmt.Println("") - utils.Highlight(item.Name) + utils.Highlight(item.Name) //nolint:govet fmt.Printf("\n>> %s\n", item.Documentation) def := getDefault(item.Default, item, proj) diff --git a/pkg/bundle/oidc.go b/pkg/bundle/oidc.go index cbd7d39b3..7b594280d 100644 --- a/pkg/bundle/oidc.go +++ b/pkg/bundle/oidc.go @@ -1,18 +1,10 @@ package bundle import ( - "fmt" - "strings" - - "github.com/AlecAivazis/survey/v2" - "github.com/pluralsh/plural-cli/pkg/api" - "github.com/pluralsh/plural-cli/pkg/manifest" "github.com/pluralsh/plural-cli/pkg/utils" ) -var oidcConfirmed bool - func SetupOIDC(repo string, client api.Client, redirectUris []string, authMethod string) error { inst, err := client.GetInstallation(repo) if err != nil { @@ -54,68 +46,3 @@ func mergeOidcAttributes(inst *api.Installation, attributes *api.OidcProviderAtt } attributes.Bindings = bindings } - -func formatRedirectUris(settings *api.OIDCSettings, ctx map[string]interface{}) ([]string, error) { - res := make([]string, 0) - domain := "" - - if settings.DomainKey != "" { - d, ok := ctx[settings.DomainKey] - if !ok { - return res, fmt.Errorf("No domain setting for %s in context", settings.DomainKey) - } - - domain = d.(string) - } - - proj, err := manifest.FetchProject() - if err != nil { - return res, err - } - - fmtUri := func(uri string) string { - if domain != "" { - uri = strings.ReplaceAll(uri, "{domain}", domain) - } - - if settings.Subdomain { - uri = strings.ReplaceAll(uri, "{subdomain}", proj.Network.Subdomain) - } - - return uri - } - - if settings.UriFormat != "" { - return []string{fmtUri(settings.UriFormat)}, err - } - - for _, uri := range settings.UriFormats { - res = append(res, fmtUri(uri)) - } - - return res, nil -} - -func confirmOidc(confirm *bool) (bool, error) { - if confirm != nil && *confirm { - oidcConfirmed = true - } - - if oidcConfirmed { - return true, nil - } - - value, ok := utils.GetEnvBoolValue("PLURAL_CONFIRM_OIDC") - if ok { - confirm = &value - } else { - if err := survey.AskOne(&survey.Confirm{ - Message: "Enable plural OIDC", - Default: true, - }, confirm, survey.WithValidator(survey.Required)); err != nil { - return false, err - } - } - - return *confirm, nil -} diff --git a/pkg/client/plural.go b/pkg/client/plural.go index 14c9fd8cf..b65dd7218 100644 --- a/pkg/client/plural.go +++ b/pkg/client/plural.go @@ -18,8 +18,6 @@ import ( "github.com/pluralsh/plural-cli/pkg/utils" ) -const DemoingErrorMsg = "You're currently running a gcp demo cluster. Spin that down by deleting you shell at https://app.plural.sh/shell before beginning a local installation" - type Plural struct { api.Client ConsoleClient console.ConsoleClient @@ -119,7 +117,7 @@ func (p *Plural) HandleInit(c *cli.Context) error { return api.GetErrorResponse(err, "Me") } if me.Demoing { - return fmt.Errorf(DemoingErrorMsg) + return fmt.Errorf("You're currently running a gcp demo cluster. Spin that down by deleting you shell at https://app.plural.sh/shell before beginning a local installation") } if _, err := os.Stat(manifest.ProjectManifestPath()); err == nil && git && !common.Affirm("This repository's workspace.yaml already exists. Would you like to use it?", "PLURAL_INIT_AFFIRM_CURRENT_REPO") { diff --git a/pkg/scaffold/template/template.go b/pkg/scaffold/template/template.go index 1e5098cd1..019b61619 100644 --- a/pkg/scaffold/template/template.go +++ b/pkg/scaffold/template/template.go @@ -4,38 +4,16 @@ import ( "bytes" "fmt" "os" - "path/filepath" "strings" - "github.com/pluralsh/gqlclient" "github.com/pluralsh/plural-cli/pkg/config" "github.com/pluralsh/plural-cli/pkg/output" "github.com/pluralsh/plural-cli/pkg/template" "github.com/pluralsh/plural-cli/pkg/utils" - "github.com/pluralsh/plural-cli/pkg/utils/pathing" "github.com/pluralsh/plural-cli/pkg/wkspace" "gopkg.in/yaml.v2" ) -func templateInfo(path string) (t gqlclient.TemplateType, contents string, err error) { - gopath := pathing.SanitizeFilepath(filepath.Join(path, "values.yaml.tpl")) - if utils.Exists(gopath) { - contents, err = utils.ReadFile(gopath) - t = gqlclient.TemplateTypeGotemplate - return - } - - luapath := pathing.SanitizeFilepath(filepath.Join(path, "values.yaml.lua")) - if utils.Exists(gopath) { - contents, err = utils.ReadFile(luapath) - t = gqlclient.TemplateTypeLua - return - } - - err = fmt.Errorf("could not find values.yaml.tpl or values.yaml.lua in directory, perhaps your link is to the wrong folder?") - return -} - func TmpValuesFile(path string) (f *os.File, err error) { conf := config.Read() if strings.HasSuffix(path, "lua") { diff --git a/pkg/scm/bitbucket.go b/pkg/scm/bitbucket.go index 87121f823..2487dfe4f 100644 --- a/pkg/scm/bitbucket.go +++ b/pkg/scm/bitbucket.go @@ -17,8 +17,6 @@ var ( BitbucketClientSecret string ) -const emailError = "Can't find the user email address" - type Link struct { Name string `json:"name"` Href string `json:"href"` @@ -66,7 +64,7 @@ func (b *Bitbucket) Setup() (Context, error) { emailAddress := "" emailValues, ok := emails.(map[string]interface{}) if !ok { - return Context{}, fmt.Errorf(emailError) + return Context{}, fmt.Errorf("Can't find the user email address") } emailAddress, err = getEmailAddress(emailValues) if err != nil { @@ -243,7 +241,7 @@ func getEmailAddress(values map[string]interface{}) (string, error) { } } if emailAddress == "" { - return "", fmt.Errorf(emailError) + return "", fmt.Errorf("Can't find the user email address") } return emailAddress, nil } diff --git a/pkg/up/ping.go b/pkg/up/ping.go index 7bc8a7832..3b72c7a68 100644 --- a/pkg/up/ping.go +++ b/pkg/up/ping.go @@ -60,8 +60,7 @@ func doTestDns(domain string) error { func ping(url string) error { ping := fmt.Sprintf("Pinging %s...\n", url) - success := "Found status code 200, console up!\n" - return retrier(ping, success, func() error { + return retrier(ping, "Found status code 200, console up!\n", func() error { resp, err := http.Get(url) if err == nil && resp.StatusCode == 200 { return nil @@ -82,7 +81,7 @@ func retrier(retryMsg, successMsg string, f func() error) error { fmt.Print(retryMsg) err := f() if err == nil { - utils.Success(successMsg) + utils.Success(successMsg) //nolint:govet done <- true return } diff --git a/pkg/utils/git/remote.go b/pkg/utils/git/remote.go index 311ff87d6..db8af2238 100644 --- a/pkg/utils/git/remote.go +++ b/pkg/utils/git/remote.go @@ -1,6 +1,7 @@ package git import ( + e "errors" "fmt" "os" "strings" @@ -29,16 +30,16 @@ func Repair(root string) error { return Sync(root, "committing new encrypted files", false) } - return fmt.Errorf("There were non-repairable changes in your local git repository, you'll need to investigate them manually") + return e.New("There were non-repairable changes in your local git repository, you'll need to investigate them manually") } func Sync(root, msg string, force bool) error { if res, err := git(root, "add", "."); err != nil { - return errors.ErrorWrap(fmt.Errorf(res), "`git add .` failed") + return errors.ErrorWrap(e.New(res), "`git add .` failed") } if res, err := git(root, "commit", "-m", msg); err != nil { - return errors.ErrorWrap(fmt.Errorf(res), "failed to commit changes") + return errors.ErrorWrap(e.New(res), "failed to commit changes") } branch, err := CurrentBranch() @@ -52,7 +53,7 @@ func Sync(root, msg string, force bool) error { } if res, err := git(root, args...); err != nil { - return errors.ErrorWrap(fmt.Errorf(res), fmt.Sprintf("`git push origin %s` failed", branch)) + return errors.ErrorWrap(e.New(res), fmt.Sprintf("`git push origin %s` failed", branch)) } return nil diff --git a/pkg/utils/print.go b/pkg/utils/print.go index c4f7e362b..b3b2c7a06 100644 --- a/pkg/utils/print.go +++ b/pkg/utils/print.go @@ -15,9 +15,9 @@ import ( func ReadLine(prompt string) (string, error) { reader := bufio.NewReader(os.Stdin) - color.New(color.Bold).Printf(prompt) + _, _ = color.New(color.Bold).Printf(prompt) //nolint:govet res, err := reader.ReadString('\n') - return strings.TrimSpace(string(res)), err + return strings.TrimSpace(res), err } func ReadAlphaNum(prompt string) (string, error) { @@ -48,35 +48,30 @@ func ReadLineDefault(prompt string, def string) (string, error) { } func ReadPwd(prompt string) (string, error) { - color.New(color.Bold).Printf(prompt) - pwd, err := term.ReadPassword(int(syscall.Stdin)) + _, _ = color.New(color.Bold).Printf(prompt) //nolint:govet + pwd, err := term.ReadPassword(syscall.Stdin) return strings.TrimSpace(string(pwd)), err } func Warn(line string, args ...interface{}) { - color.New(color.FgYellow, color.Bold).Fprintf(color.Error, line, args...) + _, _ = color.New(color.FgYellow, color.Bold).Fprintf(color.Error, line, args...) } func Success(line string, args ...interface{}) { - color.New(color.FgGreen, color.Bold).Printf(line, args...) + _, _ = color.New(color.FgGreen, color.Bold).Printf(line, args...) } func Error(line string, args ...interface{}) { - color.New(color.FgRed, color.Bold).Fprintf(color.Error, line, args...) + _, _ = color.New(color.FgRed, color.Bold).Fprintf(color.Error, line, args...) } func Highlight(line string, args ...interface{}) { - color.New(color.Bold).Printf(line, args...) -} - -func Note(line string, args ...interface{}) { - Warn("**NOTE** :: ") - Highlight(line, args...) + _, _ = color.New(color.Bold).Printf(line, args...) } func HighlightError(err error) error { if err != nil { - err = fmt.Errorf(color.New(color.FgRed, color.Bold).Sprint(err.Error())) + err = fmt.Errorf(color.New(color.FgRed, color.Bold).Sprint(err.Error())) //nolint:all } return err } @@ -100,15 +95,6 @@ func PrintTable[T any](list []T, headers []string, rowFun func(T) ([]string, err return nil } -func PrintAttributes(attrs map[string]string) { - table := tablewriter.NewWriter(os.Stdout) - table.SetHeader([]string{"Attribute", "Value"}) - for k, v := range attrs { - table.Append([]string{k, v}) - } - table.Render() -} - type Printer interface { PrettyPrint() } diff --git a/pkg/utils/validation.go b/pkg/utils/validation.go index 00a8c8c48..bdd5a90bd 100644 --- a/pkg/utils/validation.go +++ b/pkg/utils/validation.go @@ -1,6 +1,7 @@ package utils import ( + e "errors" "fmt" "os" "regexp" @@ -38,14 +39,14 @@ func ValidateRegex(val, regex, message string) error { return nil } - return errors.ErrorWrap(fmt.Errorf(message), "Validation Failure") + return errors.ErrorWrap(e.New(message), "Validation Failure") } func RegexValidator(regex, message string) survey.Validator { return func(val interface{}) error { str, ok := val.(string) if !ok { - return fmt.Errorf("Result is not a string") + return e.New("Result is not a string") } return ValidateRegex(str, regex, message) diff --git a/pkg/wkspace/validator.go b/pkg/wkspace/validator.go index b75b186da..68fc5ebfc 100644 --- a/pkg/wkspace/validator.go +++ b/pkg/wkspace/validator.go @@ -4,7 +4,6 @@ import ( "fmt" "os/exec" - "github.com/pluralsh/plural-cli/pkg/api" "github.com/pluralsh/plural-cli/pkg/utils" ) @@ -33,35 +32,3 @@ func Preflight() (bool, error) { return true, nil } - -func (wk *Workspace) providersValid(providers []string) error { - if len(providers) == 0 { - return nil - } - - pass := false - for _, provider := range providers { - if wk.match(provider) { - pass = true - } - } - - if !pass { - return fmt.Errorf("provider %s is not supported for any of %v", wk.Provider.Name(), providers) - } - - return nil -} - -func (wk *Workspace) match(prov string) bool { - switch wk.Provider.Name() { - case api.ProviderGCP: - return prov == "GCP" - case api.ProviderAWS: - return prov == "AWS" - case api.ProviderAzure: - return prov == "AZURE" - default: - return false - } -} From 6f4fd932dbb5c25e4b3255178786892e6c460b96 Mon Sep 17 00:00:00 2001 From: Marcin Maciaszczyk Date: Thu, 5 Dec 2024 11:20:44 +0100 Subject: [PATCH 21/37] remove unused code --- pkg/application/apps.go | 9 - pkg/application/details.go | 50 ----- pkg/application/printer.go | 130 ------------- pkg/application/waiter.go | 81 -------- pkg/diff/builder.go | 139 -------------- pkg/diff/default.go | 37 ---- pkg/executor/execution.go | 147 --------------- pkg/wkspace/builder.go | 13 -- pkg/wkspace/minimal.go | 375 ------------------------------------- 9 files changed, 981 deletions(-) delete mode 100644 pkg/application/details.go delete mode 100644 pkg/application/printer.go delete mode 100644 pkg/diff/builder.go delete mode 100644 pkg/diff/default.go delete mode 100644 pkg/executor/execution.go delete mode 100644 pkg/wkspace/builder.go diff --git a/pkg/application/apps.go b/pkg/application/apps.go index d8006e218..5f5291b92 100644 --- a/pkg/application/apps.go +++ b/pkg/application/apps.go @@ -72,12 +72,3 @@ func (c *applicationClient) Watch(ctx context.Context, opts metav1.ListOptions) VersionedParams(&opts, scheme.ParameterCodec). Watch(ctx) } - -func WatchNamespace(ctx context.Context, client ApplicationInterface) (watch.Interface, error) { - apps, err := client.List(ctx, metav1.ListOptions{}) - if err != nil { - return nil, err - } - resourceVersion := apps.ListMeta.ResourceVersion - return client.Watch(ctx, metav1.ListOptions{ResourceVersion: resourceVersion}) -} diff --git a/pkg/application/details.go b/pkg/application/details.go deleted file mode 100644 index 4d957b1a5..000000000 --- a/pkg/application/details.go +++ /dev/null @@ -1,50 +0,0 @@ -package application - -import ( - "context" - "time" - - tm "github.com/buger/goterm" - "github.com/olekukonko/tablewriter" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/client-go/kubernetes" -) - -func additionalDetails(client *kubernetes.Clientset, kind, name, namespace string) { - ctx := context.Background() - if kind == "statefulset" { - ss, err := client.AppsV1().StatefulSets(namespace).Get(ctx, name, metav1.GetOptions{}) - if err != nil { - return - } - - podDetails(ctx, client, ss.Spec.Selector, namespace) - } - - if kind == "deployment" { - dep, err := client.AppsV1().Deployments(namespace).Get(ctx, name, metav1.GetOptions{}) - if err != nil { - return - } - - podDetails(ctx, client, dep.Spec.Selector, namespace) - } -} - -func podDetails(ctx context.Context, client *kubernetes.Clientset, selector *metav1.LabelSelector, namespace string) { - ls, _ := metav1.LabelSelectorAsSelector(selector) - listOptions := metav1.ListOptions{LabelSelector: ls.String()} - pods, err := client.CoreV1().Pods(namespace).List(ctx, listOptions) - if err != nil { - return - } - - tm.Println("\nPod Health:") - table := tablewriter.NewWriter(tm.Screen) - table.SetHeader([]string{"Pod", "Status", "Created"}) - for _, pod := range pods.Items { - table.Append([]string{pod.Name, string(pod.Status.Phase), pod.CreationTimestamp.Format(time.UnixDate)}) - } - - table.Render() -} diff --git a/pkg/application/printer.go b/pkg/application/printer.go deleted file mode 100644 index cb7a38fbb..000000000 --- a/pkg/application/printer.go +++ /dev/null @@ -1,130 +0,0 @@ -package application - -import ( - "fmt" - "strings" - - tm "github.com/buger/goterm" - "k8s.io/client-go/kubernetes" - "sigs.k8s.io/application/api/v1beta1" -) - -func Ready(app *v1beta1.Application) bool { - cond := findReadiness(app) - tm.Printf("Application %s (%s) ", app.Name, app.Spec.Descriptor.Version) - if cond == nil { - warn("WAITING") - tm.Println("") - return false - } - - if cond.Status == "True" { - success("READY") - tm.Println("") - return true - } - - if cond.Status == "False" { - warn("WAITING") - } else if cond.Status == "Unknown" { - highlight("UNKNOWN") - } - - tm.Println("") - return false -} - -func Print(client *kubernetes.Clientset, app *v1beta1.Application) (err error) { - Ready(app) - if _, err := tm.Println(app.Spec.Descriptor.Description); err != nil { - return err - } - if _, err := tm.Printf("\nComponents Ready: %s\n", app.Status.ComponentsReady); err != nil { - return err - } - first := true - for _, comp := range app.Status.ComponentList.Objects { - if comp.Status != "Ready" { - if first { - if _, err := tm.Println("\nUnready Components:"); err != nil { - return err - } - } - kind := strings.ToLower(comp.Kind) - if _, err := tm.Printf("- %s/%s :: %s\n", kind, comp.Name, comp.Status); err != nil { - return err - } - additionalDetails(client, kind, comp.Name, app.Namespace) - if _, err := tm.Printf("\tUse `kubectl describe %s %s -n %s` to investigate\n", kind, comp.Name, app.Namespace); err != nil { - return err - } - first = false - } - } - - first = true - for _, comp := range app.Status.ComponentList.Objects { - if comp.Status == "Ready" { - if first { - if _, err := tm.Println("\nReady Components:"); err != nil { - return err - } - } - if _, err := tm.Printf("- %s/%s :: %s\n", strings.ToLower(comp.Kind), comp.Name, comp.Status); err != nil { - return err - } - first = false - } - } - return -} - -func Flush() { - for idx, str := range strings.SplitAfter(tm.Screen.String(), "\n") { - if idx == tm.Height()-1 { - _, err := tm.Output.WriteString("...") - if err != nil { - return - } - break - } - - _, err := tm.Output.WriteString(str) - if err != nil { - return - } - } - - if err := tm.Output.Flush(); err != nil { - return - } - tm.Screen.Reset() -} - -func findReadiness(app *v1beta1.Application) (condition *v1beta1.Condition) { - for _, cond := range app.Status.Conditions { - if cond.Type == v1beta1.Ready { - condition = &cond - return - } - } - return -} - -func warn(line string, args ...interface{}) { - if _, err := tm.Print(tm.Color(fmt.Sprintf(line, args...), tm.YELLOW)); err != nil { - return - } -} - -func success(line string, args ...interface{}) { - if _, err := tm.Print(tm.Color(fmt.Sprintf(line, args...), tm.GREEN)); err != nil { - return - } -} - -func highlight(line string, args ...interface{}) { - if _, err := tm.Print(tm.Bold(fmt.Sprintf(line, args...))); err != nil { - return - } -} diff --git a/pkg/application/waiter.go b/pkg/application/waiter.go index 646f597c8..33c0ac50a 100644 --- a/pkg/application/waiter.go +++ b/pkg/application/waiter.go @@ -2,20 +2,12 @@ package application import ( "context" - "fmt" - "time" - tm "github.com/buger/goterm" - "github.com/pluralsh/plural-cli/pkg/config" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/client-go/rest" "sigs.k8s.io/application/api/v1beta1" ) -const ( - waitTime = 5 * 60 * time.Second -) - func ListAll(kubeConf *rest.Config) ([]v1beta1.Application, error) { apps, err := NewForConfig(kubeConf) if err != nil { @@ -30,76 +22,3 @@ func ListAll(kubeConf *rest.Config) ([]v1beta1.Application, error) { return l.Items, nil } - -func Waiter(kubeConf *rest.Config, repo string, appFunc func(app *v1beta1.Application) (bool, error), timeout func() error) error { - conf := config.Read() - ctx := context.Background() - apps, err := NewForConfig(kubeConf) - if err != nil { - return err - } - - client := apps.Applications(conf.Namespace(repo)) - app, err := client.Get(ctx, repo, metav1.GetOptions{}) - if err != nil { - return err - } - - tm.Clear() - if ready, err := appFunc(app); ready || err != nil { - return err - } - - watcher, err := WatchNamespace(ctx, client) - if err != nil { - return err - } - - ch := watcher.ResultChan() - for { - select { - case event := <-ch: - tm.Clear() - app, ok := event.Object.(*v1beta1.Application) - if !ok { - return fmt.Errorf("Failed to parse watch event") - } - - if stop, err := appFunc(app); stop || err != nil { - return err - } - case <-time.After(waitTime): - if err := timeout(); err != nil { - return err - } - } - } -} - -func SilentWait(kubeConf *rest.Config, repo string) error { - timeout := func() error { - return fmt.Errorf("Failed to become ready after 5 minutes, try running `plural watch %s` to get an idea where to debug", repo) - } - - return Waiter(kubeConf, repo, func(app *v1beta1.Application) (bool, error) { - cond := findReadiness(app) - if cond.Status == "True" { - fmt.Printf("%s is finally ready!", repo) - return true, nil - } - return false, nil - }, timeout) -} - -func Wait(kubeConf *rest.Config, repo string) error { - timeout := func() error { - return fmt.Errorf("Failed to become ready after 5 minutes, try running `plural watch %s` to get an idea where to debug", repo) - } - - return Waiter(kubeConf, repo, func(app *v1beta1.Application) (bool, error) { - tm.MoveCursor(1, 1) - ready := Ready(app) - Flush() - return ready, nil - }, timeout) -} diff --git a/pkg/diff/builder.go b/pkg/diff/builder.go deleted file mode 100644 index fcf28c713..000000000 --- a/pkg/diff/builder.go +++ /dev/null @@ -1,139 +0,0 @@ -package diff - -import ( - "fmt" - "os" - "path/filepath" - "strings" - - "github.com/hashicorp/hcl" - "github.com/pluralsh/plural-cli/pkg/executor" - "github.com/pluralsh/plural-cli/pkg/utils" - "github.com/pluralsh/plural-cli/pkg/utils/git" - "github.com/pluralsh/plural-cli/pkg/utils/pathing" - "github.com/pluralsh/polly/algorithms" - "github.com/pluralsh/polly/containers" - "github.com/rodaine/hclencoder" -) - -type Diff struct { - Metadata Metadata `hcl:"metadata"` - Steps []*executor.Step `hcl:"step"` -} - -type Metadata struct { - Path string `hcl:"path"` - Name string `hcl:"name"` -} - -func GetDiff(path, name string) (*Diff, error) { - fullpath := pathing.SanitizeFilepath(filepath.Join(path, name+".hcl")) - contents, err := os.ReadFile(fullpath) - diff := Diff{} - if err != nil { - return &diff, nil - } - - err = hcl.Decode(&diff, string(contents)) - return &diff, err -} - -func (e *Diff) Execute() error { - root, err := git.Root() - if err != nil { - return err - } - - path := pathing.SanitizeFilepath(filepath.Join(root, "diffs")) - if err := os.MkdirAll(path, os.ModePerm); err != nil { - return err - } - - if err := utils.EmptyDirectory(path); err != nil { - return err - } - - ignore, err := e.IgnoreFile(root) - if err != nil { - return err - } - - fmt.Printf("deploying %s, hold on to your butts\n", e.Metadata.Path) - for i, step := range e.Steps { - newSha, err := step.Execute(root, ignore) - if err != nil { - if err := e.Flush(root); err != nil { - return err - } - - return err - } - - e.Steps[i].Sha = newSha - } - - return e.Flush(root) -} - -func (e *Diff) IgnoreFile(root string) ([]string, error) { - ignorePath := pathing.SanitizeFilepath(filepath.Join(root, e.Metadata.Path, ".pluralignore")) - contents, err := os.ReadFile(ignorePath) - if err != nil { - return []string{}, err - } - - ignore := strings.Split(string(contents), "\n") - result := []string{} - for _, prefix := range ignore { - ignoreStr := strings.TrimSpace(prefix) - if ignoreStr != "" { - result = append(result, ignoreStr) - } - } - - return result, nil -} - -func DefaultDiff(path string, prev *Diff) (e *Diff) { - byName := map[string]*executor.Step{} - steps := defaultDiff(path) - - for _, step := range prev.Steps { - byName[step.Name] = step - } - - for _, step := range steps { - prev, ok := byName[step.Name] - if ok { - step.Sha = prev.Sha - } - byName[step.Name] = step - } - - // set up a topsort between the two orders of operations - graph := containers.NewGraph[string]() - for i := 0; i < len(steps)-1; i++ { - graph.AddEdge(steps[i].Name, steps[i+1].Name) - } - - for i := 0; i < len(prev.Steps)-1; i++ { - graph.AddEdge(prev.Steps[i].Name, prev.Steps[i+1].Name) - } - - sorted, _ := algorithms.TopsortGraph(graph) - finalizedSteps := algorithms.Map(sorted, func(s string) *executor.Step { return byName[s] }) - return &Diff{ - Metadata: Metadata{Path: path, Name: "diff"}, - Steps: finalizedSteps, - } -} - -func (d *Diff) Flush(root string) error { - io, err := hclencoder.Encode(&d) - if err != nil { - return err - } - - path, _ := filepath.Abs(pathing.SanitizeFilepath(filepath.Join(root, d.Metadata.Path, d.Metadata.Name+".hcl"))) - return os.WriteFile(path, io, 0644) -} diff --git a/pkg/diff/default.go b/pkg/diff/default.go deleted file mode 100644 index d420e98ac..000000000 --- a/pkg/diff/default.go +++ /dev/null @@ -1,37 +0,0 @@ -package diff - -import ( - "path/filepath" - - "github.com/pluralsh/plural-cli/pkg/executor" - "github.com/pluralsh/plural-cli/pkg/utils/pathing" -) - -func defaultDiff(path string) []*executor.Step { - return []*executor.Step{ - { - Name: "terraform-init", - Wkdir: pathing.SanitizeFilepath(filepath.Join(path, "terraform")), - Target: pathing.SanitizeFilepath(filepath.Join(path, "terraform")), - Command: "terraform", - Args: []string{"init", "-upgrade"}, - Sha: "", - }, - { - Name: "terraform", - Wkdir: pathing.SanitizeFilepath(filepath.Join(path, "terraform")), - Target: pathing.SanitizeFilepath(filepath.Join(path, "terraform")), - Command: "plural", - Args: []string{"wkspace", "terraform-diff", path}, - Sha: "", - }, - { - Name: "helm", - Wkdir: pathing.SanitizeFilepath(filepath.Join(path, "helm")), - Target: pathing.SanitizeFilepath(filepath.Join(path, "helm")), - Command: "plural", - Args: []string{"wkspace", "helm-diff", path}, - Sha: "", - }, - } -} diff --git a/pkg/executor/execution.go b/pkg/executor/execution.go deleted file mode 100644 index cb9896c61..000000000 --- a/pkg/executor/execution.go +++ /dev/null @@ -1,147 +0,0 @@ -package executor - -import ( - "fmt" - "os" - "path/filepath" - "strings" - - "github.com/hashicorp/hcl" - "github.com/pluralsh/plural-cli/pkg/utils/git" - "github.com/pluralsh/plural-cli/pkg/utils/pathing" - "github.com/pluralsh/polly/algorithms" - "github.com/pluralsh/polly/containers" - "github.com/rodaine/hclencoder" -) - -type Execution struct { - Metadata Metadata `hcl:"metadata"` - Steps []*Step `hcl:"step"` -} - -type Metadata struct { - Path string `hcl:"path"` - Name string `hcl:"name"` -} - -const ( - pluralIgnore = `terraform/.terraform` -) - -func Ignore(root string) error { - ignoreFile := pathing.SanitizeFilepath(filepath.Join(root, ".pluralignore")) - return os.WriteFile(ignoreFile, []byte(pluralIgnore), 0644) -} - -func GetExecution(path, name string) (*Execution, error) { - fullpath := pathing.SanitizeFilepath(filepath.Join(path, name+".hcl")) - contents, err := os.ReadFile(fullpath) - ex := Execution{} - if err != nil { - return &ex, err - } - - err = hcl.Decode(&ex, string(contents)) - if err != nil { - return &ex, err - } - - return &ex, nil -} - -func (e *Execution) Execute(actionName string, verbose bool) error { - root, err := git.Root() - if err != nil { - return err - } - - ignore, err := e.IgnoreFile(root) - if err != nil { - return err - } - - fmt.Printf("%s %s. This may take a while, so hold on to your butts\n", actionName, e.Metadata.Path) - for i, step := range e.Steps { - prev := step.Verbose - if verbose { - step.Verbose = true - } - - newSha, err := step.Execute(root, ignore) - step.Verbose = prev - if err != nil { - if err := e.Flush(root); err != nil { - return err - } - - return err - } - - e.Steps[i].Sha = newSha - } - - return e.Flush(root) -} - -func (e *Execution) IgnoreFile(root string) ([]string, error) { - ignorePath := pathing.SanitizeFilepath(filepath.Join(root, e.Metadata.Path, ".pluralignore")) - contents, err := os.ReadFile(ignorePath) - if err != nil { - return []string{}, err - } - - ignore := strings.Split(string(contents), "\n") - result := []string{} - for _, prefix := range ignore { - ignoreStr := strings.TrimSpace(prefix) - if ignoreStr != "" { - result = append(result, ignoreStr) - } - } - - return result, nil -} - -func DefaultExecution(path string, prev *Execution) (e *Execution) { - byName := make(map[string]*Step) - steps := defaultSteps(path) - - for _, step := range prev.Steps { - byName[step.Name] = step - } - - for _, step := range steps { - prev, ok := byName[step.Name] - if ok { - step.Sha = prev.Sha - } - byName[step.Name] = step - } - - // set up a topsort between the two orders of operations - graph := containers.NewGraph[string]() - for i := 0; i < len(steps)-1; i++ { - graph.AddEdge(steps[i].Name, steps[i+1].Name) - } - - for i := 0; i < len(prev.Steps)-1; i++ { - graph.AddEdge(prev.Steps[i].Name, prev.Steps[i+1].Name) - } - - sorted, _ := algorithms.TopsortGraph(graph) - finalizedSteps := algorithms.Map(sorted, func(s string) *Step { return byName[s] }) - return &Execution{ - Metadata: Metadata{Path: path, Name: "deploy"}, - Steps: finalizedSteps, - } -} - -func (e *Execution) Flush(root string) error { - io, err := hclencoder.Encode(&e) - if err != nil { - return err - } - - path, _ := filepath.Abs(pathing.SanitizeFilepath(filepath.Join(root, e.Metadata.Path, e.Metadata.Name+".hcl"))) - return os.WriteFile(path, io, 0644) -} diff --git a/pkg/wkspace/builder.go b/pkg/wkspace/builder.go deleted file mode 100644 index 4e8b00afc..000000000 --- a/pkg/wkspace/builder.go +++ /dev/null @@ -1,13 +0,0 @@ -package wkspace - -import ( - "github.com/pluralsh/plural-cli/pkg/config" - "github.com/pluralsh/plural-cli/pkg/manifest" - "github.com/pluralsh/plural-cli/pkg/provider" -) - -type Workspace struct { - Provider provider.Provider - Config *config.Config - Context *manifest.Context -} diff --git a/pkg/wkspace/minimal.go b/pkg/wkspace/minimal.go index 2f6e7b81f..97ad034db 100644 --- a/pkg/wkspace/minimal.go +++ b/pkg/wkspace/minimal.go @@ -1,57 +1,12 @@ package wkspace import ( - "bytes" - "fmt" "io" - "os" - "os/exec" - "path/filepath" - "strings" "text/template" - "time" - helmdiff "github.com/databus23/helm-diff/v3/diff" - diffmanifest "github.com/databus23/helm-diff/v3/manifest" - "github.com/google/go-cmp/cmp" - "github.com/helm/helm-mapkubeapis/pkg/common" - release "github.com/helm/helm-mapkubeapis/pkg/v3" - "github.com/imdario/mergo" - "github.com/mitchellh/go-homedir" - "github.com/pkg/errors" - "helm.sh/helm/v3/pkg/action" - "helm.sh/helm/v3/pkg/chart/loader" - relutil "helm.sh/helm/v3/pkg/releaseutil" - "helm.sh/helm/v3/pkg/storage/driver" - "helm.sh/helm/v3/pkg/strvals" - "sigs.k8s.io/yaml" - - "github.com/pluralsh/plural-cli/pkg/config" - "github.com/pluralsh/plural-cli/pkg/diff" - "github.com/pluralsh/plural-cli/pkg/helm" - "github.com/pluralsh/plural-cli/pkg/manifest" "github.com/pluralsh/plural-cli/pkg/output" - "github.com/pluralsh/plural-cli/pkg/provider" - "github.com/pluralsh/plural-cli/pkg/utils" - "github.com/pluralsh/plural-cli/pkg/utils/git" - "github.com/pluralsh/plural-cli/pkg/utils/pathing" -) - -const ( - valuesYaml = "values.yaml" - defaultValuesYaml = "default-values.yaml" - helm2TestSuccessHook = "test-success" - helm3TestHook = "test" ) -type MinimalWorkspace struct { - Name string - Provider provider.Provider - Config *config.Config - Manifest *manifest.ProjectManifest - HelmConfig *action.Configuration -} - func FormatValues(w io.Writer, vals string, output *output.Output) (err error) { tmpl, err := template.New("gotpl").Parse(vals) if err != nil { @@ -60,333 +15,3 @@ func FormatValues(w io.Writer, vals string, output *output.Output) (err error) { err = tmpl.Execute(w, map[string]interface{}{"Import": *output}) return } - -func (m *MinimalWorkspace) BounceHelm(wait bool, skipArgs, setArgs, setJSONArgs []string) error { - path, err := filepath.Abs(pathing.SanitizeFilepath(filepath.Join("helm", m.Name))) - if err != nil { - return err - } - defaultVals, err := getValues(m.Name) - if err != nil { - return err - } - - for _, arg := range skipArgs { - if err := strvals.ParseInto(arg, defaultVals); err != nil { - return err - } - } - for _, arg := range setArgs { - if err := strvals.ParseInto(arg, defaultVals); err != nil { - return err - } - } - for _, arg := range setJSONArgs { - if err := strvals.ParseJSON(arg, defaultVals); err != nil { - return err - } - } - - namespace := m.Config.Namespace(m.Name) - if m.HelmConfig == nil { - m.HelmConfig, err = helm.GetActionConfig(namespace) - if err != nil { - return err - } - } - - utils.Warn("helm upgrade --install --skip-crds --namespace %s %s %s\n", namespace, m.Name, path) - chart, err := loader.Load(path) - if err != nil { - return err - } - // If a release does not exist, install it. - histClient := action.NewHistory(m.HelmConfig) - histClient.Max = 5 - - if _, err := histClient.Run(m.Name); errors.Is(err, driver.ErrReleaseNotFound) { - instClient := action.NewInstall(m.HelmConfig) - instClient.Namespace = namespace - instClient.ReleaseName = m.Name - instClient.SkipCRDs = true - instClient.Timeout = time.Minute * 10 - instClient.Wait = wait - - if req := chart.Metadata.Dependencies; req != nil { - if err := action.CheckDependencies(chart, req); err != nil { - return err - } - } - _, err := instClient.Run(chart, defaultVals) - return err - } - - client := action.NewUpgrade(m.HelmConfig) - client.Namespace = namespace - client.SkipCRDs = true - client.Timeout = time.Minute * 10 - client.Wait = wait - _, err = client.Run(m.Name, chart, defaultVals) - if err != nil { - current, errReleases := m.HelmConfig.Releases.Last(m.Name) - if errReleases != nil { - return errors.Wrap(err, fmt.Sprintf("can't get the last release %v", errReleases)) - } - if !current.Info.Status.IsPending() { - return err - } - deployedReleases, errDeployed := m.HelmConfig.Releases.ListDeployed() - if errDeployed != nil { - return errors.Wrap(err, fmt.Sprintf("can't get deployed releases %v", errDeployed)) - } - rollback := action.NewRollback(m.HelmConfig) - if len(deployedReleases) > 0 { - relutil.Reverse(deployedReleases, relutil.SortByRevision) - lastDeployed := deployedReleases[0].Version - rollback.Version = lastDeployed - utils.LogInfo().Printf("Rollback current: %d to last deployed %d \n", current.Version, deployedReleases[0].Version) - } - return rollback.Run(m.Name) - } - return err -} - -func getValues(name string) (map[string]interface{}, error) { - values := make(map[string]interface{}) - defaultVals := make(map[string]interface{}) - - path, err := getHelmPath(name) - if err != nil { - return nil, err - } - defaultValuesPath := pathing.SanitizeFilepath(filepath.Join(path, defaultValuesYaml)) - valuesPath := pathing.SanitizeFilepath(filepath.Join(path, valuesYaml)) - valsContent, err := os.ReadFile(valuesPath) - if err != nil { - return nil, err - } - valsContent, err = templateTerraformInputs(name, string(valsContent)) - if err != nil { - return nil, err - } - if err := yaml.Unmarshal(valsContent, &values); err != nil { - return nil, err - } - if utils.Exists(defaultValuesPath) { - defaultValsContent, err := os.ReadFile(defaultValuesPath) - if err != nil { - return nil, err - } - defaultValsContent, err = templateTerraformInputs(name, string(defaultValsContent)) - if err != nil { - return nil, err - } - if err := yaml.Unmarshal(defaultValsContent, &defaultVals); err != nil { - return nil, err - } - } - - err = mergo.Merge(&defaultVals, values, mergo.WithOverride) - if err != nil { - return nil, err - } - return defaultVals, nil -} - -func (m *MinimalWorkspace) TemplateHelm() error { - path, err := filepath.Abs(pathing.SanitizeFilepath(filepath.Join("helm", m.Name))) - if err != nil { - return err - } - namespace := m.Config.Namespace(m.Name) - manifest, err := m.getTemplate(false, false) - if err != nil { - return err - } - utils.Warn("helm template --skip-crds --namespace %s %s %s\n", namespace, m.Name, path) - fmt.Printf("%s", manifest) - return nil -} - -func (m *MinimalWorkspace) DiffHelm() error { - path, err := filepath.Abs(m.Name) - if err != nil { - return err - } - namespace := m.Config.Namespace(m.Name) - utils.Warn("helm diff upgrade --install --show-secrets --reset-values %s %s\n", m.Name, path) - releaseManifest, err := m.getRelease() - if err != nil { - return err - } - installManifest, err := m.getTemplate(true, true) - if err != nil { - return err - } - - diffFolder, err := m.constructDiffFolder() - if err != nil { - return err - } - outfile, err := os.Create(pathing.SanitizeFilepath(pathing.SanitizeFilepath(filepath.Join(diffFolder, "helm")))) - if err != nil { - return err - } - defer func(outfile *os.File) { - _ = outfile.Close() - }(outfile) - - mw := io.MultiWriter(os.Stdout, outfile) - currentSpecs := diffmanifest.Parse(string(releaseManifest), namespace, false, helm3TestHook, helm2TestSuccessHook) - newSpecs := diffmanifest.Parse(string(installManifest), namespace, false, helm3TestHook, helm2TestSuccessHook) - helmdiff.Manifests(currentSpecs, newSpecs, &helmdiff.Options{ - OutputFormat: "diff", - OutputContext: -1, - StripTrailingCR: false, - ShowSecrets: true, - SuppressedKinds: []string{}, - FindRenames: 0, - }, mw) - return nil -} - -func (m *MinimalWorkspace) DiffTerraform() error { - return m.runDiff("terraform", "plan") -} - -func (m *MinimalWorkspace) MapKubeApis() error { - namespace := m.Config.Namespace(m.Name) - utils.Warn("helm mapkubeapis %s --namespace %s\n", m.Name, namespace) - return mapKubeApis(m.Name, namespace) -} - -func (m *MinimalWorkspace) runDiff(command string, args ...string) error { - diffFolder, err := m.constructDiffFolder() - if err != nil { - return err - } - outfile, err := os.Create(pathing.SanitizeFilepath(pathing.SanitizeFilepath(filepath.Join(diffFolder, command)))) - if err != nil { - return err - } - defer func(outfile *os.File) { - _ = outfile.Close() - }(outfile) - - cmd := exec.Command(command, args...) - cmd.Stdout = &diff.TeeWriter{File: outfile} - cmd.Stderr = os.Stdout - return cmd.Run() -} - -func (m *MinimalWorkspace) constructDiffFolder() (string, error) { - root, err := git.Root() - if err != nil { - return "", err - } - - diffFolder, _ := filepath.Abs(pathing.SanitizeFilepath(filepath.Join(root, "diffs", m.Name))) - if err := os.MkdirAll(diffFolder, os.ModePerm); err != nil { - return diffFolder, err - } - - return diffFolder, err -} - -func (m *MinimalWorkspace) getRelease() ([]byte, error) { - namespace := m.Config.Namespace(m.Name) - var err error - if m.HelmConfig == nil { - m.HelmConfig, err = helm.GetActionConfig(namespace) - if err != nil { - return nil, err - } - } - client := action.NewGet(m.HelmConfig) - rel, err := client.Run(m.Name) - if err != nil { - return nil, err - } - return []byte(rel.Manifest), nil -} - -func (m *MinimalWorkspace) getTemplate(isUpgrade, validate bool) ([]byte, error) { - path, err := getHelmPath(m.Name) - if err != nil { - return nil, err - } - defaultVals, err := getValues(m.Name) - if err != nil { - return nil, err - } - - namespace := m.Config.Namespace(m.Name) - - if m.HelmConfig == nil { - m.HelmConfig, err = helm.GetActionConfig(namespace) - if err != nil { - return nil, err - } - } - - return helm.Template(m.HelmConfig, m.Name, namespace, path, isUpgrade, validate, defaultVals) -} - -func templateTerraformInputs(name, vals string) ([]byte, error) { - root, _ := utils.ProjectRoot() - out, err := output.Read(pathing.SanitizeFilepath(filepath.Join(root, name, "output.yaml"))) - if err != nil { - out = output.New() - } - - var buf bytes.Buffer - buf.Grow(5 * 1024) - - err = FormatValues(&buf, vals, out) - if err != nil { - return nil, err - } - - templatedData := buf.String() - - // This is a workaround for https://github.com/golang/go/issues/24963 - // In case terraform outputs are not there it will print '' and break helm templating - sanitized := strings.ReplaceAll(templatedData, "", "") - - if len(templatedData) != len(sanitized) { - msg := "Replaced '' with empty string to sanitize helm values:\n%s" - utils.Warn(msg, cmp.Diff(templatedData, sanitized)) - } - - return []byte(sanitized), nil -} - -func getHelmPath(name string) (string, error) { - root, found := utils.ProjectRoot() - if !found { - return "", fmt.Errorf("couldn't find the root project path") - } - return filepath.Abs(pathing.SanitizeFilepath(filepath.Join(root, name, "helm", name))) -} - -func mapKubeApis(name, namespace string) error { - p, err := homedir.Expand("~/.plural") - if err != nil { - return err - } - mapFile := filepath.Join(p, "Map.yaml") - if !utils.Exists(mapFile) { - err := utils.DownloadFile(mapFile, "https://raw.githubusercontent.com/helm/helm-mapkubeapis/main/config/Map.yaml") - if err != nil { - return err - } - } - options := common.MapOptions{ - DryRun: false, - KubeConfig: common.KubeConfig{}, - MapFile: mapFile, - ReleaseName: name, - ReleaseNamespace: namespace, - } - return release.MapReleaseWithUnSupportedAPIs(options) -} From 8f8bbbcdbaf1e10ab398b3259f519b20835b8be2 Mon Sep 17 00:00:00 2001 From: Marcin Maciaszczyk Date: Thu, 5 Dec 2024 11:30:05 +0100 Subject: [PATCH 22/37] remove kind provider and capi leftovers --- cmd/command/plural/plural.go | 7 -- pkg/api/constants.go | 1 - pkg/common/validation.go | 9 --- pkg/exp/features.go | 22 ------ pkg/provider/kind.go | 128 ----------------------------------- pkg/provider/provider.go | 4 -- 6 files changed, 171 deletions(-) delete mode 100644 pkg/exp/features.go delete mode 100644 pkg/provider/kind.go diff --git a/cmd/command/plural/plural.go b/cmd/command/plural/plural.go index 122f1486c..16b6791d2 100644 --- a/cmd/command/plural/plural.go +++ b/cmd/command/plural/plural.go @@ -19,7 +19,6 @@ import ( "github.com/pluralsh/plural-cli/pkg/common" conf "github.com/pluralsh/plural-cli/pkg/config" "github.com/pluralsh/plural-cli/pkg/crypto" - "github.com/pluralsh/plural-cli/pkg/exp" "github.com/pluralsh/plural-cli/pkg/utils" "github.com/urfave/cli" "helm.sh/helm/v3/pkg/action" @@ -133,12 +132,6 @@ func globalFlags() []cli.Flag { EnvVar: "PLURAL_DEBUG_ENABLE", Destination: &utils.EnableDebug, }, - cli.BoolFlag{ - Name: "bootstrap", - Usage: "enable bootstrap mode", - Destination: &common.BootstrapMode, // TODO Remove - Hidden: !exp.IsFeatureEnabled(exp.EXP_PLURAL_CAPI), - }, } } diff --git a/pkg/api/constants.go b/pkg/api/constants.go index 27bd4ead7..2a87266ce 100644 --- a/pkg/api/constants.go +++ b/pkg/api/constants.go @@ -6,6 +6,5 @@ const ( ProviderAWS = "aws" ProviderAzure = "azure" ProviderEquinix = "equinix" - ProviderKind = "kind" TEST = "test" ) diff --git a/pkg/common/validation.go b/pkg/common/validation.go index 9070cb6e5..400bef282 100644 --- a/pkg/common/validation.go +++ b/pkg/common/validation.go @@ -15,12 +15,6 @@ import ( "github.com/urfave/cli" ) -func init() { - BootstrapMode = false -} - -var BootstrapMode bool - func RequireArgs(fn func(*cli.Context) error, args []string) func(*cli.Context) error { return func(c *cli.Context) error { nargs := c.NArg() @@ -120,9 +114,6 @@ func InitKubeconfig(fn func(*cli.Context) error) func(*cli.Context) error { if err != nil { return err } - if BootstrapMode { - prov = &provider.KINDProvider{Clust: "bootstrap"} - } if err := prov.KubeConfig(); err != nil { return err } diff --git a/pkg/exp/features.go b/pkg/exp/features.go deleted file mode 100644 index 8615b858a..000000000 --- a/pkg/exp/features.go +++ /dev/null @@ -1,22 +0,0 @@ -package exp - -const ( - EXP_PLURAL_CAPI = FeatureFlag("EXP_PLURAL_CAPI") -) - -var ( - providers = []Provider{ - newEnvProvider(), - newPostHogProvider(), - } -) - -func IsFeatureEnabled(feature FeatureFlag) bool { - for _, p := range providers { - if p.IsFeatureEnabled(feature) { - return true - } - } - - return false -} diff --git a/pkg/provider/kind.go b/pkg/provider/kind.go deleted file mode 100644 index 8d78864c7..000000000 --- a/pkg/provider/kind.go +++ /dev/null @@ -1,128 +0,0 @@ -package provider - -import ( - "fmt" - "os/exec" - - "github.com/pluralsh/plural-cli/pkg/api" - "github.com/pluralsh/plural-cli/pkg/kubernetes" - - "github.com/AlecAivazis/survey/v2" - v1 "k8s.io/api/core/v1" - - "github.com/pluralsh/plural-cli/pkg/config" - "github.com/pluralsh/plural-cli/pkg/manifest" - "github.com/pluralsh/plural-cli/pkg/provider/permissions" - "github.com/pluralsh/plural-cli/pkg/utils" -) - -type KINDProvider struct { - Clust string `survey:"cluster"` - Proj string - bucket string - Reg string - ctx map[string]interface{} - writer manifest.Writer -} - -var kindSurvey = []*survey.Question{ - { - Name: "cluster", - Prompt: &survey.Input{Message: "Enter the name of your cluster:"}, - Validate: validCluster, - }, -} - -func mkKind(conf config.Config) (provider *KINDProvider, err error) { - var resp struct { - Cluster string - } - if err = survey.Ask(kindSurvey, &resp); err != nil { - return - } - - provider = &KINDProvider{ - resp.Cluster, - "", - "", - "us-east-1", - map[string]interface{}{}, - nil, - } - - projectManifest := manifest.ProjectManifest{ - Cluster: provider.Cluster(), - Project: provider.Project(), - Provider: api.ProviderKind, - Region: provider.Region(), - Context: provider.Context(), - Owner: &manifest.Owner{Email: conf.Email, Endpoint: conf.Endpoint}, - } - - provider.writer = projectManifest.Configure(cloudFlag, provider.Cluster()) - provider.bucket = projectManifest.Bucket - return -} - -func kindFromManifest(man *manifest.ProjectManifest) (*KINDProvider, error) { - return &KINDProvider{man.Cluster, man.Project, man.Bucket, man.Region, man.Context, nil}, nil -} - -func (kind *KINDProvider) CreateBucket() error { return nil } - -func (kind *KINDProvider) KubeConfig() error { - if kubernetes.InKubernetes() { - return nil - } - cmd := exec.Command( - "kind", "export", "kubeconfig", "--name", kind.Cluster()) - return utils.Execute(cmd) -} - -func (kind *KINDProvider) KubeContext() string { - return fmt.Sprintf("kind-%s", kind.Cluster()) -} - -func (kind *KINDProvider) Name() string { - return api.ProviderKind -} - -func (kind *KINDProvider) Cluster() string { - return kind.Clust -} - -func (kind *KINDProvider) Project() string { - return kind.Proj -} - -func (kind *KINDProvider) Bucket() string { - return kind.bucket -} - -func (kind *KINDProvider) Region() string { - return kind.Reg -} - -func (*KINDProvider) Permissions() (permissions.Checker, error) { - return permissions.NullChecker(), nil -} - -func (kind *KINDProvider) Context() map[string]interface{} { - return kind.ctx -} - -func (prov *KINDProvider) Decommision(node *v1.Node) error { - return nil -} - -func (prov *KINDProvider) Preflights() []*Preflight { - return nil -} - -func (kind *KINDProvider) Flush() error { - if kind.writer == nil { - return nil - } - - return kind.writer() -} diff --git a/pkg/provider/provider.go b/pkg/provider/provider.go index 0810ff906..eac3969b1 100644 --- a/pkg/provider/provider.go +++ b/pkg/provider/provider.go @@ -97,8 +97,6 @@ func FromManifest(man *manifest.ProjectManifest) (Provider, error) { return AzureFromManifest(man, nil) case api.ProviderEquinix: return equinixFromManifest(man) - case api.ProviderKind: - return kindFromManifest(man) case api.TEST: return testFromManifest(man) default: @@ -117,8 +115,6 @@ func New(provider string) (Provider, error) { return mkAzure(conf) case api.ProviderEquinix: return mkEquinix(conf) - case api.ProviderKind: - return mkKind(conf) default: return nil, fmt.Errorf("invalid provider name: %s", provider) } From 9239c2b5c1d16213b3e5ef9350d7b4cf8984c0f8 Mon Sep 17 00:00:00 2001 From: Marcin Maciaszczyk Date: Thu, 5 Dec 2024 11:35:55 +0100 Subject: [PATCH 23/37] avoid double go install in ci --- .github/workflows/ci.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 8da180597..594bfa448 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -265,6 +265,7 @@ jobs: uses: golangci/golangci-lint-action@v4 with: version: v1.62.2 + skip-go-installation: true build: name: GoReleaser build runs-on: ubuntu-latest From ffebdd7ea75fba739adf0751dd4295c5eb35d9e1 Mon Sep 17 00:00:00 2001 From: Marcin Maciaszczyk Date: Thu, 5 Dec 2024 11:41:26 +0100 Subject: [PATCH 24/37] update ci action --- .github/workflows/ci.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 594bfa448..ef4ba7c10 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -265,7 +265,7 @@ jobs: uses: golangci/golangci-lint-action@v4 with: version: v1.62.2 - skip-go-installation: true + skip-cache: true build: name: GoReleaser build runs-on: ubuntu-latest From c61c6cf55838c575ef3715073007dde9879719ff Mon Sep 17 00:00:00 2001 From: Marcin Maciaszczyk Date: Thu, 5 Dec 2024 11:45:53 +0100 Subject: [PATCH 25/37] remove unused code --- pkg/executor/default.go | 65 ----------------------------------------- pkg/exp/env.go | 15 ---------- pkg/exp/posthog.go | 4 --- 3 files changed, 84 deletions(-) delete mode 100644 pkg/executor/default.go delete mode 100644 pkg/exp/env.go diff --git a/pkg/executor/default.go b/pkg/executor/default.go deleted file mode 100644 index 957525e7f..000000000 --- a/pkg/executor/default.go +++ /dev/null @@ -1,65 +0,0 @@ -package executor - -import ( - "path/filepath" - - "github.com/pluralsh/plural-cli/pkg/utils/pathing" -) - -func defaultSteps(path string) []*Step { - app := pathing.SanitizeFilepath(filepath.Base(path)) - sanitizedPath := pathing.SanitizeFilepath(path) - - return []*Step{ - { - Name: "terraform-init", - Wkdir: pathing.SanitizeFilepath(filepath.Join(path, "terraform")), - Target: pathing.SanitizeFilepath(filepath.Join(path, "terraform")), - Command: "terraform", - Args: []string{"init", "-upgrade"}, - Sha: "", - }, - { - Name: "terraform-apply", - Wkdir: pathing.SanitizeFilepath(filepath.Join(path, "terraform")), - Target: pathing.SanitizeFilepath(filepath.Join(path, "terraform")), - Command: "terraform", - Args: []string{"apply", "-auto-approve"}, - Sha: "", - Retries: 2, - }, - { - Name: "terraform-output", - Wkdir: app, - Target: pathing.SanitizeFilepath(filepath.Join(path, "terraform")), - Command: "plural", - Args: []string{"output", "terraform", app}, - Sha: "", - }, - { - Name: "kube-init", - Wkdir: sanitizedPath, - Target: path, - Command: "plural", - Args: []string{"wkspace", "kube-init"}, - Sha: "", - }, - { - Name: "crds", - Wkdir: sanitizedPath, - Target: pathing.SanitizeFilepath(filepath.Join(path, "crds")), - Command: "plural", - Args: []string{"wkspace", "crds", sanitizedPath}, - Sha: "", - }, - { - Name: "bounce", - Wkdir: sanitizedPath, - Target: pathing.SanitizeFilepath(filepath.Join(path, "helm")), - Command: "plural", - Args: []string{"wkspace", "helm", sanitizedPath}, - Sha: "", - Retries: 2, - }, - } -} diff --git a/pkg/exp/env.go b/pkg/exp/env.go deleted file mode 100644 index 1a3904780..000000000 --- a/pkg/exp/env.go +++ /dev/null @@ -1,15 +0,0 @@ -package exp - -import ( - "os" -) - -type EnvProvider struct{} - -func (this *EnvProvider) IsFeatureEnabled(feature FeatureFlag) bool { - return os.Getenv(string(feature)) == "true" -} - -func newEnvProvider() Provider { - return &EnvProvider{} -} diff --git a/pkg/exp/posthog.go b/pkg/exp/posthog.go index 0a09880c2..5786c7743 100644 --- a/pkg/exp/posthog.go +++ b/pkg/exp/posthog.go @@ -44,7 +44,3 @@ func (this *PostHogProvider) init() Provider { return this } - -func newPostHogProvider() Provider { - return (&PostHogProvider{}).init() -} From 17d254b70973d50edc6860768889830f75b87fa1 Mon Sep 17 00:00:00 2001 From: Marcin Maciaszczyk Date: Thu, 5 Dec 2024 11:58:39 +0100 Subject: [PATCH 26/37] remove exec, logs and portforward code --- pkg/kubernetes/exec/exec.go | 91 ------------ pkg/kubernetes/logs/logs.go | 119 ---------------- pkg/kubernetes/logs/logsforobject.go | 158 --------------------- pkg/kubernetes/portforward/helpers.go | 161 ---------------------- pkg/kubernetes/portforward/portforward.go | 92 ------------- pkg/kubernetes/utils/utils.go | 63 --------- 6 files changed, 684 deletions(-) delete mode 100644 pkg/kubernetes/exec/exec.go delete mode 100644 pkg/kubernetes/logs/logs.go delete mode 100644 pkg/kubernetes/logs/logsforobject.go delete mode 100644 pkg/kubernetes/portforward/helpers.go delete mode 100644 pkg/kubernetes/portforward/portforward.go delete mode 100644 pkg/kubernetes/utils/utils.go diff --git a/pkg/kubernetes/exec/exec.go b/pkg/kubernetes/exec/exec.go deleted file mode 100644 index d0b5de625..000000000 --- a/pkg/kubernetes/exec/exec.go +++ /dev/null @@ -1,91 +0,0 @@ -package exec - -import ( - "context" - "fmt" - "io" - "net/url" - "os" - - "github.com/pluralsh/plural-cli/pkg/kubernetes" - "github.com/pluralsh/plural-cli/pkg/kubernetes/utils" - corev1 "k8s.io/api/core/v1" - "k8s.io/apimachinery/pkg/api/meta" - "k8s.io/client-go/tools/remotecommand" - "k8s.io/kubectl/pkg/cmd/util/podcmd" - "k8s.io/kubectl/pkg/scheme" - "k8s.io/kubectl/pkg/util/term" -) - -func Exec(namespace, resource string, commands []string) error { - obj, pod, err := utils.GetPodWithObject(namespace, resource) - if err != nil { - return err - } - if meta.IsListType(obj) { - return fmt.Errorf("cannot exec into multiple objects at a time") - } - if pod.Status.Phase == corev1.PodSucceeded || pod.Status.Phase == corev1.PodFailed { - return fmt.Errorf("cannot exec into a container in a completed pod; current phase is %s", pod.Status.Phase) - } - - container, err := podcmd.FindOrDefaultContainerByName(pod, "", true, os.Stderr) - if err != nil { - return err - } - - t := setupTTY() - sizeQueue := t.MonitorSize(t.GetSize()) - - kube, err := kubernetes.Kubernetes() - if err != nil { - return err - } - - fn := func() error { - req := kube.GetRestClient().Post(). - Resource("pods"). - Name(pod.Name). - Namespace(pod.Namespace). - SubResource("exec") - req.VersionedParams(&corev1.PodExecOptions{ - Container: container.Name, - Command: commands, - Stdin: true, - Stdout: true, - TTY: t.Raw, - }, scheme.ParameterCodec) - - return execute("POST", req.URL(), os.Stdin, os.Stdout, os.Stderr, t.Raw, sizeQueue) - } - - return t.Safe(fn) -} - -func execute(method string, url *url.URL, stdin io.Reader, stdout, stderr io.Writer, tty bool, terminalSizeQueue remotecommand.TerminalSizeQueue) error { - config, err := kubernetes.KubeConfig() - if err != nil { - return err - } - exec, err := remotecommand.NewSPDYExecutor(config, method, url) - if err != nil { - return err - } - return exec.StreamWithContext(context.Background(), remotecommand.StreamOptions{ - Stdin: stdin, - Stdout: stdout, - Stderr: stderr, - Tty: tty, - TerminalSizeQueue: terminalSizeQueue, - }) -} - -func setupTTY() term.TTY { - t := term.TTY{ - Out: os.Stdout, - In: os.Stdin, - Raw: true, - } - - return t -} diff --git a/pkg/kubernetes/logs/logs.go b/pkg/kubernetes/logs/logs.go deleted file mode 100644 index 388db01d8..000000000 --- a/pkg/kubernetes/logs/logs.go +++ /dev/null @@ -1,119 +0,0 @@ -package logs - -import ( - "bufio" - "context" - "fmt" - "io" - "os" - "sync" - "time" - - corev1 "k8s.io/api/core/v1" - "k8s.io/cli-runtime/pkg/genericclioptions" - "k8s.io/client-go/rest" - cmdutil "k8s.io/kubectl/pkg/cmd/util" - "k8s.io/kubectl/pkg/scheme" -) - -const ( - defaultPodLogsTimeout = 20 * time.Second -) - -func Logs(namespace, resource string, tailLines int64) error { - matchVersionKubeConfigFlags := cmdutil.NewMatchVersionFlags(genericclioptions.NewConfigFlags(true).WithDeprecatedPasswordFlag().WithDiscoveryBurst(300).WithDiscoveryQPS(50.0)) - f := cmdutil.NewFactory(matchVersionKubeConfigFlags) - - builder := f.NewBuilder(). - WithScheme(scheme.Scheme, scheme.Scheme.PrioritizedVersionsAllGroups()...). - NamespaceParam(namespace).DefaultNamespace(). - SingleResourceType() - builder.ResourceNames("pods", resource) - infos, err := builder.Do().Infos() - if err != nil { - return err - } - if len(infos) != 1 { - return fmt.Errorf("expected a resource") - } - object := infos[0].Object - - options, err := logOptions(tailLines) - if err != nil { - return err - } - requests, err := logsForObject(object, options, defaultPodLogsTimeout, false) - if err != nil { - return err - } - if len(requests) > 1 { - return parallelConsumeRequest(requests) - } - - return sequentialConsumeRequest(requests) -} - -func parallelConsumeRequest(requests map[corev1.ObjectReference]rest.ResponseWrapper) error { - reader, writer := io.Pipe() - wg := &sync.WaitGroup{} - wg.Add(len(requests)) - for objRef, request := range requests { - go func(objRef corev1.ObjectReference, request rest.ResponseWrapper) { - defer wg.Done() - if err := defaultConsumeRequest(request, os.Stdout); err != nil { - fmt.Fprintf(writer, "error: %v\n", err) - } - - }(objRef, request) - } - - go func() { - wg.Wait() - writer.Close() - }() - - _, err := io.Copy(os.Stdout, reader) - return err -} - -func sequentialConsumeRequest(requests map[corev1.ObjectReference]rest.ResponseWrapper) error { - for _, request := range requests { - if err := defaultConsumeRequest(request, os.Stdout); err != nil { - return err - } - } - - return nil -} - -func logOptions(tailLines int64) (*corev1.PodLogOptions, error) { - logOptions := &corev1.PodLogOptions{ - Follow: true, - TailLines: &tailLines, - } - - return logOptions, nil -} - -func defaultConsumeRequest(request rest.ResponseWrapper, out io.Writer) error { - readCloser, err := request.Stream(context.TODO()) - if err != nil { - return err - } - defer readCloser.Close() - - r := bufio.NewReader(readCloser) - for { - bytes, err := r.ReadBytes('\n') - if _, err := out.Write(bytes); err != nil { - return err - } - - if err != nil { - if err != io.EOF { - return err - } - return nil - } - } -} diff --git a/pkg/kubernetes/logs/logsforobject.go b/pkg/kubernetes/logs/logsforobject.go deleted file mode 100644 index 3575af04e..000000000 --- a/pkg/kubernetes/logs/logsforobject.go +++ /dev/null @@ -1,158 +0,0 @@ -package logs - -import ( - "errors" - "fmt" - "os" - "sort" - "time" - - "github.com/pluralsh/plural-cli/pkg/kubernetes" - corev1 "k8s.io/api/core/v1" - "k8s.io/apimachinery/pkg/runtime" - corev1client "k8s.io/client-go/kubernetes/typed/core/v1" - "k8s.io/client-go/rest" - "k8s.io/client-go/tools/reference" - "k8s.io/kubectl/pkg/cmd/util/podcmd" - "k8s.io/kubectl/pkg/polymorphichelpers" - "k8s.io/kubectl/pkg/scheme" - "k8s.io/kubectl/pkg/util/podutils" -) - -func logsForObject(object, options runtime.Object, timeout time.Duration, allContainers bool) (map[corev1.ObjectReference]rest.ResponseWrapper, error) { - config, err := kubernetes.KubeConfig() - if err != nil { - return nil, err - } - - clientset, err := corev1client.NewForConfig(config) - if err != nil { - return nil, err - } - return logsForObjectWithClient(clientset, object, options, timeout, allContainers) -} - -// this is split for easy test-ability -func logsForObjectWithClient(clientset corev1client.CoreV1Interface, object, options runtime.Object, timeout time.Duration, allContainers bool) (map[corev1.ObjectReference]rest.ResponseWrapper, error) { - opts, ok := options.(*corev1.PodLogOptions) - if !ok { - return nil, errors.New("provided options object is not a PodLogOptions") - } - - switch t := object.(type) { - case *corev1.PodList: - ret := make(map[corev1.ObjectReference]rest.ResponseWrapper) - for i := range t.Items { - currRet, err := logsForObjectWithClient(clientset, &t.Items[i], options, timeout, allContainers) - if err != nil { - return nil, err - } - for k, v := range currRet { - ret[k] = v - } - } - return ret, nil - - case *corev1.Pod: - return logsForPod(t, opts, clientset, timeout, allContainers) - } - - namespace, selector, err := polymorphichelpers.SelectorsForObject(object) - if err != nil { - return nil, fmt.Errorf("cannot get the logs from %T: %w", object, err) - } - - sortBy := func(pods []*corev1.Pod) sort.Interface { return podutils.ByLogging(pods) } - pod, numPods, err := polymorphichelpers.GetFirstPod(clientset, namespace, selector.String(), timeout, sortBy) - if err != nil { - return nil, err - } - if numPods > 1 { - fmt.Fprintf(os.Stderr, "Found %v pods, using pod/%v\n", numPods, pod.Name) - } - - return logsForObjectWithClient(clientset, pod, options, timeout, allContainers) -} - -func logsForPod(t *corev1.Pod, opts *corev1.PodLogOptions, clientset corev1client.CoreV1Interface, timeout time.Duration, allContainers bool) (map[corev1.ObjectReference]rest.ResponseWrapper, error) { - // if allContainers is true, then we're going to locate all containers and then iterate through them. At that point, "allContainers" is false - if !allContainers { - currOpts := new(corev1.PodLogOptions) - if opts != nil { - opts.DeepCopyInto(currOpts) - } - // in case the "kubectl.kubernetes.io/default-container" annotation is present, we preset the opts.Containers to default to selected - // container. This gives users ability to preselect the most interesting container in pod. - if annotations := t.GetAnnotations(); annotations != nil && currOpts.Container == "" { - var defaultContainer string - if len(annotations[podcmd.DefaultContainerAnnotationName]) > 0 { - defaultContainer = annotations[podcmd.DefaultContainerAnnotationName] - } - if len(defaultContainer) > 0 { - if exists, _ := podcmd.FindContainerByName(t, defaultContainer); exists == nil { - fmt.Fprintf(os.Stderr, "Default container name %q not found in pod %s\n", defaultContainer, t.Name) - } else { - currOpts.Container = defaultContainer - } - } - } - - if currOpts.Container == "" { - // Default to the first container name(aligning behavior with `kubectl exec'). - currOpts.Container = t.Spec.Containers[0].Name - if len(t.Spec.Containers) > 1 || len(t.Spec.InitContainers) > 0 || len(t.Spec.EphemeralContainers) > 0 { - fmt.Fprintf(os.Stderr, "Defaulted container %q out of: %s\n", currOpts.Container, podcmd.AllContainerNames(t)) - } - } - - container, fieldPath := podcmd.FindContainerByName(t, currOpts.Container) - if container == nil { - return nil, fmt.Errorf("container %s is not valid for pod %s", currOpts.Container, t.Name) - } - ref, err := reference.GetPartialReference(scheme.Scheme, t, fieldPath) - if err != nil { - return nil, fmt.Errorf("Unable to construct reference to '%#v': %w", t, err) - } - - ret := make(map[corev1.ObjectReference]rest.ResponseWrapper, 1) - ret[*ref] = clientset.Pods(t.Namespace).GetLogs(t.Name, currOpts) - return ret, nil - } - - ret := make(map[corev1.ObjectReference]rest.ResponseWrapper) - for _, c := range t.Spec.InitContainers { - currOpts := opts.DeepCopy() - currOpts.Container = c.Name - currRet, err := logsForObjectWithClient(clientset, t, currOpts, timeout, false) - if err != nil { - return nil, err - } - for k, v := range currRet { - ret[k] = v - } - } - for _, c := range t.Spec.Containers { - currOpts := opts.DeepCopy() - currOpts.Container = c.Name - currRet, err := logsForObjectWithClient(clientset, t, currOpts, timeout, false) - if err != nil { - return nil, err - } - for k, v := range currRet { - ret[k] = v - } - } - for _, c := range t.Spec.EphemeralContainers { - currOpts := opts.DeepCopy() - currOpts.Container = c.Name - currRet, err := logsForObjectWithClient(clientset, t, currOpts, timeout, false) - if err != nil { - return nil, err - } - for k, v := range currRet { - ret[k] = v - } - } - - return ret, nil -} diff --git a/pkg/kubernetes/portforward/helpers.go b/pkg/kubernetes/portforward/helpers.go deleted file mode 100644 index 792a08dca..000000000 --- a/pkg/kubernetes/portforward/helpers.go +++ /dev/null @@ -1,161 +0,0 @@ -package portforward - -import ( - "fmt" - "math" - "strconv" - "strings" - - "github.com/pluralsh/polly/containers" - corev1 "k8s.io/api/core/v1" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/kubectl/pkg/util" -) - -// splitPort splits port string which is in form of [LOCAL PORT]:REMOTE PORT -// and returns local and remote ports separately -func splitPort(port string) (local, remote string) { - parts := strings.Split(port, ":") - if len(parts) == 2 { - return parts[0], parts[1] - } - - return parts[0], parts[0] -} - -// Translates service port to target port -// It rewrites ports as needed if the Service port declares targetPort. -// It returns an error when a named targetPort can't find a match in the pod, or the Service did not declare -// the port. -func translateServicePortToTargetPort(ports []string, svc corev1.Service, pod corev1.Pod) ([]string, error) { - var translated []string - for _, port := range ports { - localPort, remotePort := splitPort(port) - - portnum, err := strconv.Atoi(remotePort) - if err != nil { - svcPort, err := util.LookupServicePortNumberByName(svc, remotePort) - if err != nil { - return nil, err - } - portnum = int(svcPort) - - if localPort == remotePort { - localPort = strconv.Itoa(portnum) - } - } - if portnum > 0 && portnum <= math.MaxInt32 { - containerPort, err := util.LookupContainerPortNumberByServicePort(svc, pod, int32(portnum)) - if err != nil { - // can't resolve a named port, or Service did not declare this port, return an error - return nil, err - } - - // convert the resolved target port back to a string - remotePort = strconv.Itoa(int(containerPort)) - - if localPort != remotePort { - translated = append(translated, fmt.Sprintf("%s:%s", localPort, remotePort)) - } else { - translated = append(translated, remotePort) - } - } else { - return nil, fmt.Errorf("Incorrect conversion between integer types") - } - - } - return translated, nil -} - -// convertPodNamedPortToNumber converts named ports into port numbers -// It returns an error when a named port can't be found in the pod containers -func convertPodNamedPortToNumber(ports []string, pod corev1.Pod) ([]string, error) { - var converted []string - for _, port := range ports { - localPort, remotePort := splitPort(port) - - containerPortStr := remotePort - _, err := strconv.Atoi(remotePort) - if err != nil { - containerPort, err := util.LookupContainerPortNumberByName(pod, remotePort) - if err != nil { - return nil, err - } - - containerPortStr = strconv.Itoa(int(containerPort)) - } - - if localPort != remotePort { - converted = append(converted, fmt.Sprintf("%s:%s", localPort, containerPortStr)) - } else { - converted = append(converted, containerPortStr) - } - } - - return converted, nil -} - -func checkUDPPorts(udpOnlyPorts containers.Set[int], ports []string, obj metav1.Object) error { - for _, port := range ports { - _, remotePort := splitPort(port) - portNum, err := strconv.Atoi(remotePort) - if err != nil { - switch v := obj.(type) { - case *corev1.Service: - svcPort, err := util.LookupServicePortNumberByName(*v, remotePort) - if err != nil { - return err - } - portNum = int(svcPort) - - case *corev1.Pod: - ctPort, err := util.LookupContainerPortNumberByName(*v, remotePort) - if err != nil { - return err - } - portNum = int(ctPort) - - default: - return fmt.Errorf("unknown object: %v", obj) - } - } - if udpOnlyPorts.Has(portNum) { - return fmt.Errorf("UDP protocol is not supported for %s", remotePort) - } - } - return nil -} - -// checkUDPPortInService returns an error if remote port in Service is a UDP port -func checkUDPPortInService(ports []string, svc *corev1.Service) error { - udpPorts := containers.NewSet[int]() - tcpPorts := containers.NewSet[int]() - for _, port := range svc.Spec.Ports { - portNum := int(port.Port) - switch port.Protocol { - case corev1.ProtocolUDP: - udpPorts.Add(portNum) - case corev1.ProtocolTCP: - tcpPorts.Add(portNum) - } - } - return checkUDPPorts(udpPorts.Difference(tcpPorts), ports, svc) -} - -// checkUDPPortInPod returns an error if remote port in Pod is a UDP port -func checkUDPPortInPod(ports []string, pod *corev1.Pod) error { - udpPorts := containers.NewSet[int]() - tcpPorts := containers.NewSet[int]() - for _, ct := range pod.Spec.Containers { - for _, ctPort := range ct.Ports { - portNum := int(ctPort.ContainerPort) - switch ctPort.Protocol { - case corev1.ProtocolUDP: - udpPorts.Add(portNum) - case corev1.ProtocolTCP: - tcpPorts.Add(portNum) - } - } - } - return checkUDPPorts(udpPorts.Difference(tcpPorts), ports, pod) -} diff --git a/pkg/kubernetes/portforward/portforward.go b/pkg/kubernetes/portforward/portforward.go deleted file mode 100644 index 5e722f777..000000000 --- a/pkg/kubernetes/portforward/portforward.go +++ /dev/null @@ -1,92 +0,0 @@ -package portforward - -import ( - "context" - "fmt" - "net/http" - "net/url" - "os" - - "github.com/pluralsh/plural-cli/pkg/kubernetes" - "github.com/pluralsh/plural-cli/pkg/kubernetes/utils" - corev1 "k8s.io/api/core/v1" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/client-go/tools/portforward" - "k8s.io/client-go/transport/spdy" -) - -func PortForward(namespace, resource string, ports []string, stopChan, readyChan chan struct{}) error { - obj, forwardablePod, err := utils.GetPodWithObject(namespace, resource) - if err != nil { - return err - } - podName := forwardablePod.Name - if len(podName) == 0 { - return fmt.Errorf("pod name or resource type/name must be specified") - } - - var podPorts []string - // handle service port mapping to target port if needed - switch t := obj.(type) { - case *corev1.Service: - err = checkUDPPortInService(ports, t) - if err != nil { - return err - } - podPorts, err = translateServicePortToTargetPort(ports, *t, *forwardablePod) - if err != nil { - return err - } - default: - err = checkUDPPortInPod(ports, forwardablePod) - if err != nil { - return err - } - podPorts, err = convertPodNamedPortToNumber(ports, *forwardablePod) - if err != nil { - return err - } - } - if len(podPorts) < 1 { - return fmt.Errorf("at least 1 PORT is required for port-forward") - } - kube, err := kubernetes.Kubernetes() - if err != nil { - return err - } - - pod, err := kube.GetClient().CoreV1().Pods(namespace).Get(context.TODO(), podName, metav1.GetOptions{}) - if err != nil { - return err - } - if pod.Status.Phase != corev1.PodRunning { - return fmt.Errorf("unable to forward port because pod is not running. Current status=%v", pod.Status.Phase) - } - - req := kube.GetRestClient().Post(). - Resource("pods"). - Namespace(namespace). - Name(pod.Name). - SubResource("portforward") - - return forwardPorts(http.MethodPost, req.URL(), podPorts, stopChan, readyChan) -} - -func forwardPorts(method string, url *url.URL, ports []string, stopChan, readyChan chan struct{}) error { - - clientConfig, err := kubernetes.KubeConfig() - if err != nil { - return err - } - - transport, upgrader, err := spdy.RoundTripperFor(clientConfig) - if err != nil { - return err - } - dialer := spdy.NewDialer(upgrader, &http.Client{Transport: transport}, method, url) - fw, err := portforward.New(dialer, ports, stopChan, readyChan, os.Stdout, os.Stderr) - if err != nil { - return err - } - return fw.ForwardPorts() -} diff --git a/pkg/kubernetes/utils/utils.go b/pkg/kubernetes/utils/utils.go deleted file mode 100644 index 94ef17a3e..000000000 --- a/pkg/kubernetes/utils/utils.go +++ /dev/null @@ -1,63 +0,0 @@ -package utils - -import ( - "fmt" - "sort" - "time" - - "github.com/pluralsh/plural-cli/pkg/kubernetes" - corev1 "k8s.io/api/core/v1" - "k8s.io/apimachinery/pkg/runtime" - "k8s.io/cli-runtime/pkg/genericclioptions" - corev1client "k8s.io/client-go/kubernetes/typed/core/v1" - cmdutil "k8s.io/kubectl/pkg/cmd/util" - "k8s.io/kubectl/pkg/polymorphichelpers" - "k8s.io/kubectl/pkg/scheme" - "k8s.io/kubectl/pkg/util/podutils" -) - -const ( - // Amount of time to wait until at least one pod is running - defaultPodWaitTimeout = 60 * time.Second -) - -func GetPodWithObject(namespace, resource string) (runtime.Object, *corev1.Pod, error) { - matchVersionKubeConfigFlags := cmdutil.NewMatchVersionFlags(genericclioptions.NewConfigFlags(true).WithDeprecatedPasswordFlag().WithDiscoveryBurst(300).WithDiscoveryQPS(50.0)) - f := cmdutil.NewFactory(matchVersionKubeConfigFlags) - - builder := f.NewBuilder(). - WithScheme(scheme.Scheme, scheme.Scheme.PrioritizedVersionsAllGroups()...). - NamespaceParam(namespace).DefaultNamespace(). - SingleResourceType() - builder.ResourceNames("pods", resource) - obj, err := builder.Do().Object() - if err != nil { - return nil, nil, err - } - - return attachablePodForObject(obj, defaultPodWaitTimeout) - -} - -func attachablePodForObject(object runtime.Object, timeout time.Duration) (runtime.Object, *corev1.Pod, error) { - if t, ok := object.(*corev1.Pod); ok { - return object, t, nil - } - - clientConfig, err := kubernetes.KubeConfig() - if err != nil { - return nil, nil, err - } - clientset, err := corev1client.NewForConfig(clientConfig) - if err != nil { - return nil, nil, err - } - - namespace, selector, err := polymorphichelpers.SelectorsForObject(object) - if err != nil { - return nil, nil, fmt.Errorf("cannot attach to %T: %w", object, err) - } - sortBy := func(pods []*corev1.Pod) sort.Interface { return sort.Reverse(podutils.ActivePods(pods)) } - pod, _, err := polymorphichelpers.GetFirstPod(clientset, namespace, selector.String(), timeout, sortBy) - return object, pod, err -} From 54c14a1537f7b30a6539206f00bbe87941bf91f9 Mon Sep 17 00:00:00 2001 From: Marcin Maciaszczyk Date: Thu, 5 Dec 2024 14:07:00 +0100 Subject: [PATCH 27/37] fix std.in syscall when building for windows --- pkg/utils/print.go | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/pkg/utils/print.go b/pkg/utils/print.go index b3b2c7a06..abfe9653e 100644 --- a/pkg/utils/print.go +++ b/pkg/utils/print.go @@ -5,7 +5,6 @@ import ( "fmt" "os" "strings" - "syscall" "github.com/fatih/color" "github.com/olekukonko/tablewriter" @@ -49,7 +48,7 @@ func ReadLineDefault(prompt string, def string) (string, error) { func ReadPwd(prompt string) (string, error) { _, _ = color.New(color.Bold).Printf(prompt) //nolint:govet - pwd, err := term.ReadPassword(syscall.Stdin) + pwd, err := term.ReadPassword(int(os.Stdin.Fd())) return strings.TrimSpace(string(pwd)), err } From 46bbbb64106d4ea07d6492f8daf4ebf5b3885ecb Mon Sep 17 00:00:00 2001 From: Marcin Maciaszczyk Date: Tue, 10 Dec 2024 09:29:15 +0100 Subject: [PATCH 28/37] remove test and template commands --- cmd/command/plural/plural.go | 25 ------- pkg/api/client.go | 1 - pkg/api/installations.go | 20 ------ pkg/common/helm.go | 52 --------------- pkg/common/template.go | 105 ------------------------------ pkg/console/agent.go | 4 +- pkg/helm/helm.go | 26 -------- pkg/scaffold/template/template.go | 102 ----------------------------- 8 files changed, 1 insertion(+), 334 deletions(-) delete mode 100644 pkg/common/helm.go delete mode 100644 pkg/common/template.go delete mode 100644 pkg/scaffold/template/template.go diff --git a/cmd/command/plural/plural.go b/cmd/command/plural/plural.go index 16b6791d2..4698661aa 100644 --- a/cmd/command/plural/plural.go +++ b/cmd/command/plural/plural.go @@ -84,31 +84,6 @@ func (p *Plural) getCommands() []cli.Command { Action: common.LatestVersion(common.HandleServe), Category: "Workspace", }, - { - Name: "test", - Usage: "validate a values templace", - Action: common.LatestVersion(common.TestTemplate), - Category: "Publishing", - Flags: []cli.Flag{ - cli.BoolFlag{ - Name: "templateType", - Usage: "Determines the template type. Go template by default", - }, - }, - }, - { - Name: "template", - Aliases: []string{"tpl"}, - Usage: "templates a helm chart to be uploaded to plural", - Flags: []cli.Flag{ - cli.StringFlag{ - Name: "values", - Usage: "the values file", - }, - }, - Action: common.LatestVersion(common.HandleHelmTemplate), - Category: "Publishing", - }, } } diff --git a/pkg/api/client.go b/pkg/api/client.go index 79fa7f58d..0e0823483 100644 --- a/pkg/api/client.go +++ b/pkg/api/client.go @@ -43,7 +43,6 @@ type Client interface { CreateDomain(name string) error CreateInstallation(id string) (string, error) GetInstallation(name string) (*Installation, error) - GetInstallations() ([]*Installation, error) OIDCProvider(id string, attributes *OidcProviderAttributes) error CreateKeyBackup(attrs KeyBackupAttributes) error GetKeyBackup(name string) (*KeyBackup, error) diff --git a/pkg/api/installations.go b/pkg/api/installations.go index e8cce82e1..354143210 100644 --- a/pkg/api/installations.go +++ b/pkg/api/installations.go @@ -26,11 +26,6 @@ func (client *client) GetInstallation(name string) (*Installation, error) { } -func (client *client) DeleteInstallation(id string) error { - _, err := client.pluralClient.DeleteInstallation(client.ctx, id) - return err -} - func (client *client) CreateInstallation(id string) (string, error) { resp, err := client.pluralClient.CreateInstallation(client.ctx, id) if err != nil { @@ -110,21 +105,6 @@ func convertInstallation(installation *gqlclient.InstallationFragment) *Installa return i } -func (client *client) GetInstallations() ([]*Installation, error) { - result := make([]*Installation, 0) - - resp, err := client.pluralClient.GetInstallations(client.ctx) - if err != nil { - return result, err - } - - for _, edge := range resp.Installations.Edges { - result = append(result, convertInstallation(edge.Node)) - } - - return result, err -} - func (client *client) OIDCProvider(id string, attributes *OidcProviderAttributes) error { bindings := make([]*gqlclient.BindingAttributes, 0) for _, bind := range attributes.Bindings { diff --git a/pkg/common/helm.go b/pkg/common/helm.go deleted file mode 100644 index 459fd8d74..000000000 --- a/pkg/common/helm.go +++ /dev/null @@ -1,52 +0,0 @@ -package common - -import ( - "fmt" - "os" - - "github.com/pluralsh/plural-cli/pkg/helm" - scftmpl "github.com/pluralsh/plural-cli/pkg/scaffold/template" - "github.com/urfave/cli" - "sigs.k8s.io/yaml" -) - -func HandleHelmTemplate(c *cli.Context) error { - path := c.String("values") - f, err := scftmpl.TmpValuesFile(path) - if err != nil { - return err - } - - defer func(name string) { - _ = os.Remove(name) - }(f.Name()) - - name := "default" - namespace := "default" - actionConfig, err := helm.GetActionConfig(namespace) - if err != nil { - return err - } - values, err := getValues(f.Name()) - if err != nil { - return err - } - res, err := helm.Template(actionConfig, name, namespace, c.Args().Get(0), false, false, values) - if err != nil { - return err - } - fmt.Println(string(res)) - return nil -} - -func getValues(path string) (map[string]interface{}, error) { - values := make(map[string]interface{}) - valsContent, err := os.ReadFile(path) - if err != nil { - return nil, err - } - if err := yaml.Unmarshal(valsContent, &values); err != nil { - return nil, err - } - return values, nil -} diff --git a/pkg/common/template.go b/pkg/common/template.go deleted file mode 100644 index 7952e374c..000000000 --- a/pkg/common/template.go +++ /dev/null @@ -1,105 +0,0 @@ -package common - -import ( - "bytes" - "io" - "os" - - "github.com/pluralsh/gqlclient" - - "github.com/pluralsh/plural-cli/pkg/api" - "github.com/pluralsh/plural-cli/pkg/config" - lua "github.com/pluralsh/plural-cli/pkg/scaffold/template" - "github.com/pluralsh/plural-cli/pkg/template" - "github.com/urfave/cli" - "gopkg.in/yaml.v2" -) - -func TestTemplate(c *cli.Context) error { - conf := config.Read() - client := api.NewClient() - installations, _ := client.GetInstallations() - repoName := c.Args().Get(0) - templateTypeFlag := c.String("templateType") - templateType := gqlclient.TemplateTypeGotemplate - testTemplate, err := io.ReadAll(os.Stdin) - if err != nil { - return err - } - if templateTypeFlag != "" { - templateType = gqlclient.TemplateType(templateTypeFlag) - } - - for _, installation := range installations { - if installation.Repository.Name != repoName { - continue - } - - var output []byte - vals := genDefaultValues(conf, installation) - - if templateType == gqlclient.TemplateTypeLua { - output, err = luaTmpValues(string(testTemplate), vals) - if err != nil { - return err - } - } else { - output, err = goTmpValues(string(testTemplate), vals) - if err != nil { - return err - } - } - if _, err := os.Stdout.Write(output); err != nil { - return err - } - } - - return nil -} - -func genDefaultValues(conf config.Config, installation *api.Installation) map[string]interface{} { - return map[string]interface{}{ - "Values": installation.Context, - "License": installation.LicenseKey, - "Region": "region", - "Project": "example", - "Cluster": "cluster", - "Provider": "provider", - "Config": conf, - "Context": map[string]interface{}{}, - } -} - -func goTmpValues(valuesTmpl string, defaultValues map[string]interface{}) ([]byte, error) { - var buf bytes.Buffer - buf.Grow(5 * 1024) - tmpl, err := template.MakeTemplate(valuesTmpl) - if err != nil { - return nil, err - } - if err = tmpl.Execute(&buf, defaultValues); err != nil { - return nil, err - } - - return buf.Bytes(), nil -} - -func luaTmpValues(valuesTmpl string, defaultValues map[string]interface{}) ([]byte, error) { - output, err := lua.ExecuteLua(defaultValues, valuesTmpl) - if err != nil { - return nil, err - } - - return yaml.Marshal(output) -} - -type GrafanaDashboard struct { - Title string - Panels []struct { - Title string - Targets []struct { - Expr string - LegendFormat string - } - } -} diff --git a/pkg/console/agent.go b/pkg/console/agent.go index 2fd137371..62e4eccd3 100644 --- a/pkg/console/agent.go +++ b/pkg/console/agent.go @@ -45,9 +45,7 @@ func IsAlreadyAgentInstalled(k8sClient *kubernetes.Clientset) (bool, error) { func InstallAgent(url, token, namespace, version string, values map[string]interface{}) error { settings := cli.New() vals := map[string]interface{}{ - "secrets": map[string]string{ - "deployToken": token, - }, + "secrets": map[string]string{"deployToken": token}, "consoleUrl": url, } vals = algorithms.Merge(vals, values) diff --git a/pkg/helm/helm.go b/pkg/helm/helm.go index 01c9543a3..5c950d39b 100644 --- a/pkg/helm/helm.go +++ b/pkg/helm/helm.go @@ -1,7 +1,6 @@ package helm import ( - "bytes" "context" "fmt" "log" @@ -14,7 +13,6 @@ import ( "github.com/pluralsh/plural-cli/pkg/utils" "gopkg.in/yaml.v2" "helm.sh/helm/v3/pkg/action" - "helm.sh/helm/v3/pkg/chart/loader" "helm.sh/helm/v3/pkg/cli" "helm.sh/helm/v3/pkg/getter" "helm.sh/helm/v3/pkg/helmpath" @@ -48,30 +46,6 @@ func GetActionConfig(namespace string) (*action.Configuration, error) { return actionConfig, nil } -func Template(conf *action.Configuration, name, namespace, path string, isUpgrade, validate bool, values map[string]interface{}) ([]byte, error) { - // load chart from the path - chart, err := loader.Load(path) - if err != nil { - return nil, err - } - - client := action.NewInstall(conf) - client.DryRun = true - client.ReleaseName = name - client.Replace = true // Skip the name check - client.ClientOnly = !validate - client.IsUpgrade = isUpgrade - client.Namespace = namespace - client.IncludeCRDs = false - rel, err := client.Run(chart, values) - if err != nil { - return nil, err - } - var manifests bytes.Buffer - fmt.Fprintln(&manifests, strings.TrimSpace(rel.Manifest)) - return manifests.Bytes(), nil -} - func AddRepo(repoName, repoUrl string) error { repoFile := getEnvVar("HELM_REPOSITORY_CONFIG", helmpath.ConfigPath("repositories.yaml")) err := os.MkdirAll(filepath.Dir(repoFile), os.ModePerm) diff --git a/pkg/scaffold/template/template.go b/pkg/scaffold/template/template.go deleted file mode 100644 index 019b61619..000000000 --- a/pkg/scaffold/template/template.go +++ /dev/null @@ -1,102 +0,0 @@ -package template - -import ( - "bytes" - "fmt" - "os" - "strings" - - "github.com/pluralsh/plural-cli/pkg/config" - "github.com/pluralsh/plural-cli/pkg/output" - "github.com/pluralsh/plural-cli/pkg/template" - "github.com/pluralsh/plural-cli/pkg/utils" - "github.com/pluralsh/plural-cli/pkg/wkspace" - "gopkg.in/yaml.v2" -) - -func TmpValuesFile(path string) (f *os.File, err error) { - conf := config.Read() - if strings.HasSuffix(path, "lua") { - return luaTmpValuesFile(path, &conf) - } - - return goTmpValuesFile(path, &conf) - -} - -func luaTmpValuesFile(path string, conf *config.Config) (f *os.File, err error) { - valuesTmpl, err := utils.ReadFile(path) - if err != nil { - return - } - f, err = os.CreateTemp("", "values.yaml") - if err != nil { - return - } - defer func(f *os.File) { - _ = f.Close() - }(f) - - vals := genDefaultValues(conf) - - output, err := ExecuteLua(vals, valuesTmpl) - if err != nil { - return nil, err - } - - io, err := yaml.Marshal(output) - if err != nil { - return nil, err - } - - fmt.Println(string(io)) - _, err = f.Write(io) - if err != nil { - return nil, err - } - return -} - -func goTmpValuesFile(path string, conf *config.Config) (f *os.File, err error) { - valuesTmpl, err := utils.ReadFile(path) - if err != nil { - return - } - tmpl, err := template.MakeTemplate(valuesTmpl) - if err != nil { - return - } - - vals := genDefaultValues(conf) - var buf bytes.Buffer - - if err = tmpl.Execute(&buf, vals); err != nil { - return - } - - f, err = os.CreateTemp("", "values.yaml") - if err != nil { - return - } - defer func(f *os.File) { - _ = f.Close() - }(f) - - fmt.Println(buf.String()) - err = wkspace.FormatValues(f, buf.String(), output.New()) - return -} - -func genDefaultValues(conf *config.Config) map[string]interface{} { - return map[string]interface{}{ - "Values": map[string]interface{}{}, - "Configuration": map[string]map[string]interface{}{}, - "License": "example-license", - "Region": "region", - "Project": "example", - "Cluster": "cluster", - "Provider": "provider", - "Config": conf, - "Context": map[string]interface{}{}, - } -} From bf9c4360e9ab8395d8581002daab1ea263238da9 Mon Sep 17 00:00:00 2001 From: Marcin Maciaszczyk Date: Tue, 10 Dec 2024 09:34:38 +0100 Subject: [PATCH 29/37] remove vpn commands --- cmd/command/plural/plural.go | 2 - cmd/command/vpn/vpn.go | 294 ---------------------------- cmd/command/vpn/vpn_test.go | 359 ----------------------------------- pkg/kubernetes/kube.go | 53 ------ pkg/vpn/vpn.go | 36 ---- 5 files changed, 744 deletions(-) delete mode 100644 cmd/command/vpn/vpn.go delete mode 100644 cmd/command/vpn/vpn_test.go delete mode 100644 pkg/vpn/vpn.go diff --git a/cmd/command/plural/plural.go b/cmd/command/plural/plural.go index 4698661aa..b798bc827 100644 --- a/cmd/command/plural/plural.go +++ b/cmd/command/plural/plural.go @@ -14,7 +14,6 @@ import ( "github.com/pluralsh/plural-cli/cmd/command/profile" "github.com/pluralsh/plural-cli/cmd/command/up" "github.com/pluralsh/plural-cli/cmd/command/version" - "github.com/pluralsh/plural-cli/cmd/command/vpn" "github.com/pluralsh/plural-cli/pkg/client" "github.com/pluralsh/plural-cli/pkg/common" conf "github.com/pluralsh/plural-cli/pkg/config" @@ -132,7 +131,6 @@ func CreateNewApp(plural *Plural) *cli.App { pr.Command(plural.Plural), cmdinit.Command(plural.Plural), up.Command(plural.Plural), - vpn.Command(plural.Plural), version.Command(), } commands = append(commands, plural.getCommands()...) diff --git a/cmd/command/vpn/vpn.go b/cmd/command/vpn/vpn.go deleted file mode 100644 index a190a5fc6..000000000 --- a/cmd/command/vpn/vpn.go +++ /dev/null @@ -1,294 +0,0 @@ -package vpn - -import ( - "fmt" - "os" - "path/filepath" - "strconv" - - "github.com/pluralsh/plural-cli/pkg/client" - - "github.com/pluralsh/plural-cli/pkg/common" - - "github.com/olekukonko/tablewriter" - "github.com/pluralsh/plural-cli/pkg/config" - "github.com/pluralsh/plural-cli/pkg/utils" - "github.com/pluralsh/plural-cli/pkg/utils/pathing" - "github.com/pluralsh/plural-cli/pkg/vpn" - "github.com/pluralsh/plural-operator/apis/vpn/v1alpha1" - "github.com/pluralsh/polly/algorithms" - "github.com/urfave/cli" - - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" -) - -const ( - wireguardAppName = "wireguard" - wireguardNamespace = "wireguard" - wireguardServerName = "wireguard" -) - -type Plural struct { - client.Plural -} - -func Command(clients client.Plural) cli.Command { - p := Plural{ - Plural: clients, - } - return cli.Command{ - Name: "vpn", - Usage: "interacting with the plural vpn", - Subcommands: p.vpnCommands(), - Category: "Workspace", - } -} - -func (p *Plural) vpnCommands() []cli.Command { - return []cli.Command{ - { - Name: "list", - Usage: "list vpn resources", - Subcommands: p.vpnListCommands(), - }, - { - Name: "create", - Usage: "commands for creating vpn resources", - Subcommands: p.vpnCreateCommands(), - }, - { - Name: "delete", - Usage: "commands for deleting vpn resources", - Subcommands: p.vpnDeleteCommands(), - }, - { - Name: "client-config", - ArgsUsage: "NAME", - Usage: "get the config for a vpn client for a server", - Action: common.LatestVersion(common.RequireArgs(common.Highlighted(p.vpnInstalled(common.InitKubeconfig(p.handleWireguardPeerConfig))), []string{"NAME"})), - Flags: []cli.Flag{ - cli.StringFlag{ - Name: "server", - Usage: "the vpn server to get the client config from", - }, - cli.StringFlag{ - Name: "path", - Usage: "output path for the config wireguard client config. the filename will be NAME.conf", - }, - }, - }, - } -} - -func (p *Plural) vpnListCommands() []cli.Command { - return []cli.Command{ - { - Name: "servers", - Usage: "lists vpn servers", - Action: common.LatestVersion(common.Highlighted(p.vpnInstalled(common.InitKubeconfig(p.handleWireguardServerList)))), - }, - { - Name: "clients", - Usage: "lists vpn clients for a server", - Action: common.LatestVersion(common.Highlighted(p.vpnInstalled(common.InitKubeconfig(p.handleWireguardPeerList)))), - Flags: []cli.Flag{ - cli.StringFlag{ - Name: "server", - Usage: "the vpn server to list clients for", - }, - }, - }, - } -} - -func (p *Plural) vpnCreateCommands() []cli.Command { - return []cli.Command{ - { - Name: "client", - ArgsUsage: "{name}", - Usage: "create a new vpn client for a server", - Action: common.LatestVersion(common.RequireArgs(common.Highlighted(p.vpnInstalled(common.InitKubeconfig(p.handleWireguardPeerCreate))), []string{"{name}"})), - Flags: []cli.Flag{ - cli.StringFlag{ - Name: "server", - Usage: "the vpn server to create the client for", - }, - }, - }, - } -} - -func (p *Plural) vpnDeleteCommands() []cli.Command { - return []cli.Command{ - { - Name: "client", - ArgsUsage: "{name}", - Usage: "delete a vpn client for a server", - Action: common.LatestVersion(common.RequireArgs(common.Highlighted(p.vpnInstalled(common.InitKubeconfig(p.handleWireguardPeerDelete))), []string{"{name}"})), - Flags: []cli.Flag{ - cli.StringFlag{ - Name: "server", - Usage: "the vpn server to delete the clients from", - }, - }, - }, - } -} - -func (p *Plural) handleWireguardServerList(c *cli.Context) error { - conf := config.Read() - servers, err := vpn.ListServers(p.Kube, conf.Namespace(wireguardNamespace)) - if err != nil { - return err - } - - headers := []string{"Name", "Hostname", "Port", "Ready"} - return utils.PrintTable(servers.Items, headers, func(s v1alpha1.WireguardServer) ([]string, error) { - return []string{s.Name, s.Status.Hostname, s.Status.Port, strconv.FormatBool(s.Status.Ready)}, nil - }) -} - -func (p *Plural) handleWireguardPeerList(c *cli.Context) error { - var server string - server = wireguardServerName - if c.String("server") != "" { - server = c.String("server") - } - - conf := config.Read() - peerlist, err := vpn.ListPeers(p.Kube, conf.Namespace(wireguardNamespace)) - if err != nil { - return err - } - - peers := algorithms.Filter(peerlist.Items, func(p v1alpha1.WireguardPeer) bool { return p.Spec.WireguardRef == server }) - headers := []string{"Name", "Address", "Config Secret", "Public Key", "Ready"} - return utils.PrintTable(peers, headers, func(p v1alpha1.WireguardPeer) (res []string, err error) { - res = []string{p.Name, p.Spec.Address, p.Status.ConfigRef.Name, p.Spec.PublicKey, strconv.FormatBool(p.Status.Ready)} - return - }) -} - -func (p *Plural) handleWireguardPeerCreate(c *cli.Context) error { - var serverName string - serverName = wireguardServerName - if c.String("server") != "" { - serverName = c.String("server") - } - - name := c.Args().Get(0) - conf := config.Read() - server, err := vpn.GetServer(p.Kube, conf.Namespace(wireguardNamespace), serverName) - if err != nil { - return err - } - peer, err := vpn.CreatePeer(p.Kube, server.Namespace, - &v1alpha1.WireguardPeer{ - ObjectMeta: metav1.ObjectMeta{ - Name: name, - }, - Spec: v1alpha1.WireguardPeerSpec{ - WireguardRef: server.Name, - }, - }) - if err != nil { - return err - } - - table := tablewriter.NewWriter(os.Stdout) - table.SetHeader([]string{"Name", "Address", "Server", "Config Secret", "Public Key", "Ready"}) - table.Append([]string{ - peer.Name, - peer.Spec.Address, - peer.Spec.WireguardRef, - peer.Status.ConfigRef.Name, - peer.Spec.PublicKey, - strconv.FormatBool(peer.Status.Ready), - }) - table.Render() - return nil -} - -func (p *Plural) handleWireguardPeerConfig(c *cli.Context) error { - var serverName string - serverName = wireguardServerName - if c.String("server") != "" { - serverName = c.String("server") - } - - name := c.Args().Get(0) - conf := config.Read() - - server, err := vpn.GetServer(p.Kube, conf.Namespace(wireguardNamespace), serverName) - if err != nil { - return err - } - - peer, err := vpn.GetPeer(p.Kube, server.Namespace, name) - if err != nil { - return err - } - - if !peer.Status.Ready || peer.Status.ConfigRef.Name == "" || peer.Status.ConfigRef.Key == "" { - return fmt.Errorf("peer config not ready yet") - } - - secret, err := vpn.GetPeerConfigSecret(p.Kube, peer.Namespace, peer.Status.ConfigRef.Name) - if err != nil { - return err - } - - peerConfig, ok := secret.Data[peer.Status.ConfigRef.Key] - if !ok { - return fmt.Errorf("peer config not ready yet") - } - - if c.String("path") != "" { - path := pathing.SanitizeFilepath(filepath.Join(c.String("path"), peer.Name+".conf")) - return utils.WriteFile(path, peerConfig) - } - fmt.Println(string(peerConfig)) - return nil -} - -func (p *Plural) handleWireguardPeerDelete(c *cli.Context) error { - var serverName string - serverName = wireguardServerName - if c.String("server") != "" { - serverName = c.String("server") - } - - name := c.Args().Get(0) - conf := config.Read() - server, err := vpn.GetServer(p.Kube, conf.Namespace(wireguardNamespace), serverName) - if err != nil { - return err - } - - peer, err := vpn.GetPeer(p.Kube, server.Namespace, name) - if err != nil { - return err - } - - if err := vpn.DeletePeer(p.Kube, peer.Namespace, peer.Name); err != nil { - return err - } - - utils.Highlight("Deleted peer %s successfully\n", peer.Name) - return nil -} - -func (p *Plural) vpnInstalled(fn func(*cli.Context) error) func(*cli.Context) error { - return func(c *cli.Context) error { - p.InitPluralClient() - if err := p.InitKube(); err != nil { - return err - } - - if _, err := p.GetInstallation(wireguardAppName); err != nil { - return err - } - - return fn(c) - } -} diff --git a/cmd/command/vpn/vpn_test.go b/cmd/command/vpn/vpn_test.go deleted file mode 100644 index ee745ba74..000000000 --- a/cmd/command/vpn/vpn_test.go +++ /dev/null @@ -1,359 +0,0 @@ -package vpn_test - -import ( - "os" - "testing" - - "github.com/pluralsh/plural-cli/cmd/command/plural" - "github.com/pluralsh/plural-cli/pkg/api" - pluralclient "github.com/pluralsh/plural-cli/pkg/client" - "github.com/pluralsh/plural-cli/pkg/common" - "github.com/pluralsh/plural-cli/pkg/test/mocks" - vpnv1alpha1 "github.com/pluralsh/plural-operator/apis/vpn/v1alpha1" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/mock" - corev1 "k8s.io/api/core/v1" - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" -) - -func TestServerList(t *testing.T) { - tests := []struct { - name string - args []string - servers *vpnv1alpha1.WireguardServerList - expectedResponse string - installation *api.Installation - }{ - { - name: `test "vpn list servers"`, - args: []string{plural.ApplicationName, "vpn", "list", "servers"}, - servers: &vpnv1alpha1.WireguardServerList{ - Items: []vpnv1alpha1.WireguardServer{ - { - ObjectMeta: metav1.ObjectMeta{ - Name: "wireguard", - Namespace: "wireguard", - }, - Spec: vpnv1alpha1.WireguardServerSpec{ - WireguardImage: "dkr.plural.sh/bootstrap/wireguard-server:0.1.2", - }, - Status: vpnv1alpha1.WireguardServerStatus{ - Port: "51820", - Hostname: "k8s-wireguar-wireguar-xxxxxxxxxx-xxxxxxxxxxxxxxxx.elb.us-east-1.amazonaws.com", - Ready: true, - }, - }, - }, - }, - installation: &api.Installation{ - Id: "123", Repository: &api.Repository{Id: "abc", Name: "wireguard", Publisher: &api.Publisher{Name: "Plural"}}, - }, - expectedResponse: `+-----------+-------------------------------------------------------------------------------+-------+-------+ -| NAME | HOSTNAME | PORT | READY | -+-----------+-------------------------------------------------------------------------------+-------+-------+ -| wireguard | k8s-wireguar-wireguar-xxxxxxxxxx-xxxxxxxxxxxxxxxx.elb.us-east-1.amazonaws.com | 51820 | true | -+-----------+-------------------------------------------------------------------------------+-------+-------+ -`, - }, - } - for _, test := range tests { - t.Run(test.name, func(t *testing.T) { - client := mocks.NewClient(t) - kube := mocks.NewKube(t) - client.On("GetInstallation", "wireguard").Return(test.installation, nil) - kube.On("WireguardServerList", "wireguard").Return(test.servers, nil) - app := plural.CreateNewApp(&plural.Plural{ - Plural: pluralclient.Plural{ - Client: client, - Kube: kube, - }, - }) - app.HelpName = plural.ApplicationName - os.Args = test.args - res, err := common.CaptureStdout(app, os.Args) - assert.NoError(t, err) - assert.Equal(t, test.expectedResponse, res) - - }) - } -} - -func TestClientList(t *testing.T) { - tests := []struct { - name string - args []string - peers *vpnv1alpha1.WireguardPeerList - expectedResponse string - installation *api.Installation - }{ - { - name: `test "vpn list clients" without server flag`, - args: []string{plural.ApplicationName, "vpn", "list", "clients"}, - peers: &vpnv1alpha1.WireguardPeerList{ - Items: []vpnv1alpha1.WireguardPeer{ - { - ObjectMeta: metav1.ObjectMeta{ - Name: "test-client-1", - Namespace: "wireguard", - }, - Spec: vpnv1alpha1.WireguardPeerSpec{ - WireguardRef: "wireguard", - Address: "10.8.0.2", - PublicKey: "test-public-key", - }, - Status: vpnv1alpha1.WireguardPeerStatus{ - ConfigRef: corev1.SecretKeySelector{ - LocalObjectReference: corev1.LocalObjectReference{ - Name: "test-client-1-config", - }, - Key: "wg0.conf", - }, - Ready: true, - }, - }, - { - ObjectMeta: metav1.ObjectMeta{ - Name: "test-client-2", - Namespace: "wireguard", - }, - Spec: vpnv1alpha1.WireguardPeerSpec{ - WireguardRef: "wireguard2", - Address: "10.8.0.3", - PublicKey: "test-public-key", - }, - Status: vpnv1alpha1.WireguardPeerStatus{ - ConfigRef: corev1.SecretKeySelector{ - LocalObjectReference: corev1.LocalObjectReference{ - Name: "test-client-2-config", - }, - Key: "wg0.conf", - }, - Ready: false, - }, - }, - }, - }, - installation: &api.Installation{ - Id: "123", Repository: &api.Repository{Id: "abc", Name: "wireguard", Publisher: &api.Publisher{Name: "Plural"}}, - }, - expectedResponse: `+---------------+----------+----------------------+-----------------+-------+ -| NAME | ADDRESS | CONFIG SECRET | PUBLIC KEY | READY | -+---------------+----------+----------------------+-----------------+-------+ -| test-client-1 | 10.8.0.2 | test-client-1-config | test-public-key | true | -+---------------+----------+----------------------+-----------------+-------+ -`, - }, - { - name: `test "vpn list clients" with server flag`, - args: []string{plural.ApplicationName, "vpn", "list", "clients", "--server", "wireguard2"}, - peers: &vpnv1alpha1.WireguardPeerList{ - Items: []vpnv1alpha1.WireguardPeer{ - { - ObjectMeta: metav1.ObjectMeta{ - Name: "test-client-1", - Namespace: "wireguard", - }, - Spec: vpnv1alpha1.WireguardPeerSpec{ - WireguardRef: "wireguard", - Address: "10.8.0.2", - PublicKey: "test-public-key", - }, - Status: vpnv1alpha1.WireguardPeerStatus{ - ConfigRef: corev1.SecretKeySelector{ - LocalObjectReference: corev1.LocalObjectReference{ - Name: "test-client-1-config", - }, - Key: "wg0.conf", - }, - Ready: true, - }, - }, - { - ObjectMeta: metav1.ObjectMeta{ - Name: "test-client-2", - Namespace: "wireguard", - }, - Spec: vpnv1alpha1.WireguardPeerSpec{ - WireguardRef: "wireguard2", - Address: "10.8.0.3", - PublicKey: "test-public-key", - }, - Status: vpnv1alpha1.WireguardPeerStatus{ - ConfigRef: corev1.SecretKeySelector{ - LocalObjectReference: corev1.LocalObjectReference{ - Name: "test-client-2-config", - }, - Key: "wg0.conf", - }, - Ready: false, - }, - }, - }, - }, - installation: &api.Installation{ - Id: "123", Repository: &api.Repository{Id: "abc", Name: "wireguard", Publisher: &api.Publisher{Name: "Plural"}}, - }, - expectedResponse: `+---------------+----------+----------------------+-----------------+-------+ -| NAME | ADDRESS | CONFIG SECRET | PUBLIC KEY | READY | -+---------------+----------+----------------------+-----------------+-------+ -| test-client-2 | 10.8.0.3 | test-client-2-config | test-public-key | false | -+---------------+----------+----------------------+-----------------+-------+ -`, - }, - } - for _, test := range tests { - t.Run(test.name, func(t *testing.T) { - client := mocks.NewClient(t) - kube := mocks.NewKube(t) - client.On("GetInstallation", "wireguard").Return(test.installation, nil) - kube.On("WireguardPeerList", "wireguard").Return(test.peers, nil) - app := plural.CreateNewApp(&plural.Plural{ - Plural: pluralclient.Plural{ - Client: client, - Kube: kube, - }, - }) - app.HelpName = plural.ApplicationName - os.Args = test.args - res, err := common.CaptureStdout(app, os.Args) - assert.NoError(t, err) - assert.Equal(t, test.expectedResponse, res) - - }) - } -} - -func TestClientCreate(t *testing.T) { - tests := []struct { - name string - args []string - peer *vpnv1alpha1.WireguardPeer - expectedResponse string - installation *api.Installation - server *vpnv1alpha1.WireguardServer - expectedError string - }{ - { - name: `test "vpn create client" without specifying server`, - args: []string{plural.ApplicationName, "vpn", "create", "client", "test-client"}, - peer: &vpnv1alpha1.WireguardPeer{ - - ObjectMeta: metav1.ObjectMeta{ - Name: "test-client", - Namespace: "wireguard", - }, - Spec: vpnv1alpha1.WireguardPeerSpec{ - WireguardRef: "wireguard", - Address: "10.8.0.2", - PublicKey: "test-public-key", - }, - Status: vpnv1alpha1.WireguardPeerStatus{ - ConfigRef: corev1.SecretKeySelector{ - LocalObjectReference: corev1.LocalObjectReference{ - Name: "test-client-config", - }, - Key: "wg0.conf", - }, - Ready: true, - }, - }, - installation: &api.Installation{ - Id: "123", Repository: &api.Repository{Id: "abc", Name: "wireguard", Publisher: &api.Publisher{Name: "Plural"}}, - }, - server: &vpnv1alpha1.WireguardServer{ - ObjectMeta: metav1.ObjectMeta{ - Name: "wireguard", - Namespace: "wireguard", - }, - Spec: vpnv1alpha1.WireguardServerSpec{ - WireguardImage: "dkr.plural.sh/bootstrap/wireguard-server:0.1.2", - }, - Status: vpnv1alpha1.WireguardServerStatus{ - Port: "51820", - Hostname: "k8s-wireguar-wireguar-xxxxxxxxxx-xxxxxxxxxxxxxxxx.elb.us-east-1.amazonaws.com", - Ready: true, - }, - }, - expectedResponse: `+-------------+----------+-----------+--------------------+-----------------+-------+ -| NAME | ADDRESS | SERVER | CONFIG SECRET | PUBLIC KEY | READY | -+-------------+----------+-----------+--------------------+-----------------+-------+ -| test-client | 10.8.0.2 | wireguard | test-client-config | test-public-key | true | -+-------------+----------+-----------+--------------------+-----------------+-------+ -`, - }, - { - name: `test "vpn create client" with specifying server flag`, - args: []string{plural.ApplicationName, "vpn", "create", "client", "test-client", "--server", "wireguard2"}, - peer: &vpnv1alpha1.WireguardPeer{ - - ObjectMeta: metav1.ObjectMeta{ - Name: "test-client", - Namespace: "wireguard", - }, - Spec: vpnv1alpha1.WireguardPeerSpec{ - WireguardRef: "wireguard2", - Address: "10.8.0.2", - PublicKey: "test-public-key", - }, - Status: vpnv1alpha1.WireguardPeerStatus{ - ConfigRef: corev1.SecretKeySelector{ - LocalObjectReference: corev1.LocalObjectReference{ - Name: "test-client-config", - }, - Key: "wg0.conf", - }, - Ready: true, - }, - }, - installation: &api.Installation{ - Id: "123", Repository: &api.Repository{Id: "abc", Name: "wireguard", Publisher: &api.Publisher{Name: "Plural"}}, - }, - server: &vpnv1alpha1.WireguardServer{ - ObjectMeta: metav1.ObjectMeta{ - Name: "wireguard2", - Namespace: "wireguard", - }, - Spec: vpnv1alpha1.WireguardServerSpec{ - WireguardImage: "dkr.plural.sh/bootstrap/wireguard-server:0.1.2", - }, - Status: vpnv1alpha1.WireguardServerStatus{ - Port: "51820", - Hostname: "k8s-wireguar-wireguar-xxxxxxxxxx-xxxxxxxxxxxxxxxx.elb.us-east-1.amazonaws.com", - Ready: true, - }, - }, - expectedResponse: `+-------------+----------+------------+--------------------+-----------------+-------+ -| NAME | ADDRESS | SERVER | CONFIG SECRET | PUBLIC KEY | READY | -+-------------+----------+------------+--------------------+-----------------+-------+ -| test-client | 10.8.0.2 | wireguard2 | test-client-config | test-public-key | true | -+-------------+----------+------------+--------------------+-----------------+-------+ -`, - }, - } - for _, test := range tests { - t.Run(test.name, func(t *testing.T) { - client := mocks.NewClient(t) - kube := mocks.NewKube(t) - client.On("GetInstallation", "wireguard").Return(test.installation, nil) - if test.expectedError == "" { - kube.On("WireguardServer", "wireguard", mock.AnythingOfType("string")).Return(test.server, nil) - kube.On("WireguardPeerCreate", "wireguard", mock.AnythingOfType("*v1alpha1.WireguardPeer")).Return(test.peer, nil) - } - app := plural.CreateNewApp(&plural.Plural{ - Plural: pluralclient.Plural{ - Client: client, - Kube: kube, - }, - }) - app.HelpName = plural.ApplicationName - os.Args = test.args - res, err := common.CaptureStdout(app, os.Args) - if test.expectedError != "" { - assert.Equal(t, err.Error(), test.expectedError) - } else { - assert.NoError(t, err) - assert.Equal(t, test.expectedResponse, res) - } - }) - } -} diff --git a/pkg/kubernetes/kube.go b/pkg/kubernetes/kube.go index 4bde24b04..916772f93 100644 --- a/pkg/kubernetes/kube.go +++ b/pkg/kubernetes/kube.go @@ -14,7 +14,6 @@ import ( "github.com/pluralsh/plural-cli/pkg/utils" "github.com/pluralsh/plural-cli/pkg/utils/pathing" platformv1alpha1 "github.com/pluralsh/plural-operator/apis/platform/v1alpha1" - vpnv1alpha1 "github.com/pluralsh/plural-operator/apis/vpn/v1alpha1" pluralv1alpha1 "github.com/pluralsh/plural-operator/generated/client/clientset/versioned" v1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/meta" @@ -59,12 +58,6 @@ type Kube interface { LogTail(namespace string, name string) (*platformv1alpha1.LogTail, error) ProxyList(namespace string) (*platformv1alpha1.ProxyList, error) Proxy(namespace string, name string) (*platformv1alpha1.Proxy, error) - WireguardServerList(namespace string) (*vpnv1alpha1.WireguardServerList, error) - WireguardServer(namespace string, name string) (*vpnv1alpha1.WireguardServer, error) - WireguardPeerList(namespace string) (*vpnv1alpha1.WireguardPeerList, error) - WireguardPeer(namespace string, name string) (*vpnv1alpha1.WireguardPeer, error) - WireguardPeerCreate(namespace string, wireguardPeer *vpnv1alpha1.WireguardPeer) (*vpnv1alpha1.WireguardPeer, error) - WireguardPeerDelete(namespace string, name string) error Apply(path string, force bool) error CreateNamespace(namespace string, managedByPlural bool) error GetClient() *kubernetes.Clientset @@ -124,22 +117,6 @@ func Kubernetes() (Kube, error) { return buildKubeFromConfig(conf) } -func KubernetesWithContext(context string) (Kube, error) { - homedir, err := os.UserHomeDir() - if err != nil { - return nil, err - } - - kubeconfigPath := pathing.SanitizeFilepath(filepath.Join(homedir, ".kube", "config")) - - conf, err := buildConfigFromFlags(context, kubeconfigPath) - if err != nil { - return nil, err - } - - return buildKubeFromConfig(conf) -} - func buildConfigFromFlags(context, kubeconfigPath string) (*rest.Config, error) { return clientcmd.NewNonInteractiveDeferredLoadingClientConfig( &clientcmd.ClientConfigLoadingRules{ExplicitPath: kubeconfigPath}, @@ -245,36 +222,6 @@ func (k *kube) Proxy(namespace string, name string) (*platformv1alpha1.Proxy, er return k.Plural.PlatformV1alpha1().Proxies(namespace).Get(ctx, name, metav1.GetOptions{}) } -func (k *kube) WireguardServerList(namespace string) (*vpnv1alpha1.WireguardServerList, error) { - ctx := context.Background() - return k.Plural.VpnV1alpha1().WireguardServers(namespace).List(ctx, metav1.ListOptions{}) -} - -func (k *kube) WireguardServer(namespace string, name string) (*vpnv1alpha1.WireguardServer, error) { - ctx := context.Background() - return k.Plural.VpnV1alpha1().WireguardServers(namespace).Get(ctx, name, metav1.GetOptions{}) -} - -func (k *kube) WireguardPeerList(namespace string) (*vpnv1alpha1.WireguardPeerList, error) { - ctx := context.Background() - return k.Plural.VpnV1alpha1().WireguardPeers(namespace).List(ctx, metav1.ListOptions{}) -} - -func (k *kube) WireguardPeer(namespace string, name string) (*vpnv1alpha1.WireguardPeer, error) { - ctx := context.Background() - return k.Plural.VpnV1alpha1().WireguardPeers(namespace).Get(ctx, name, metav1.GetOptions{}) -} - -func (k *kube) WireguardPeerCreate(namespace string, wireguardPeer *vpnv1alpha1.WireguardPeer) (*vpnv1alpha1.WireguardPeer, error) { - ctx := context.Background() - return k.Plural.VpnV1alpha1().WireguardPeers(namespace).Create(ctx, wireguardPeer, metav1.CreateOptions{}) -} - -func (k *kube) WireguardPeerDelete(namespace string, name string) error { - ctx := context.Background() - return k.Plural.VpnV1alpha1().WireguardPeers(namespace).Delete(ctx, name, metav1.DeleteOptions{}) -} - func (k *kube) GetClient() *kubernetes.Clientset { return k.Kube } diff --git a/pkg/vpn/vpn.go b/pkg/vpn/vpn.go deleted file mode 100644 index 6bd9abad1..000000000 --- a/pkg/vpn/vpn.go +++ /dev/null @@ -1,36 +0,0 @@ -package vpn - -import ( - "github.com/pluralsh/plural-cli/pkg/kubernetes" - "github.com/pluralsh/plural-operator/apis/vpn/v1alpha1" - - v1 "k8s.io/api/core/v1" -) - -func ListServers(kube kubernetes.Kube, namespace string) (*v1alpha1.WireguardServerList, error) { - return kube.WireguardServerList(namespace) -} - -func GetServer(kube kubernetes.Kube, namespace string, name string) (*v1alpha1.WireguardServer, error) { - return kube.WireguardServer(namespace, name) -} - -func ListPeers(kube kubernetes.Kube, namespace string) (*v1alpha1.WireguardPeerList, error) { - return kube.WireguardPeerList(namespace) -} - -func GetPeer(kube kubernetes.Kube, namespace string, name string) (*v1alpha1.WireguardPeer, error) { - return kube.WireguardPeer(namespace, name) -} - -func GetPeerConfigSecret(kube kubernetes.Kube, namespace string, name string) (*v1.Secret, error) { - return kube.Secret(namespace, name) -} - -func CreatePeer(kube kubernetes.Kube, namespace string, peer *v1alpha1.WireguardPeer) (*v1alpha1.WireguardPeer, error) { - return kube.WireguardPeerCreate(namespace, peer) -} - -func DeletePeer(kube kubernetes.Kube, namespace string, name string) error { - return kube.WireguardPeerDelete(namespace, name) -} From bec7df46cf9dc747061281f8d0f83f5d9beb7c33 Mon Sep 17 00:00:00 2001 From: Marcin Maciaszczyk Date: Tue, 10 Dec 2024 09:49:40 +0100 Subject: [PATCH 30/37] remove some workspace commands --- cmd/command/plural/plural.go | 19 -- pkg/common/common.go | 10 - pkg/common/git.go | 17 -- pkg/scaffold/template/gotpl.go | 44 --- pkg/scaffold/template/lua.go | 64 ----- pkg/scaffold/template/lua_test.go | 451 ------------------------------ pkg/server/applications.go | 25 -- pkg/server/configuration.go | 88 ------ pkg/server/configuration_test.go | 102 ------- pkg/server/context.go | 46 --- pkg/server/context_test.go | 93 ------ pkg/server/git.go | 92 ------ pkg/server/middleware.go | 17 -- pkg/server/provider.go | 126 --------- pkg/server/server.go | 70 ----- pkg/server/server_test.go | 57 ---- pkg/server/setup.go | 189 ------------- pkg/server/types.go | 59 ---- pkg/server/utils.go | 59 ---- pkg/utils/git/remote.go | 15 - pkg/wkspace/minimal.go | 17 -- 21 files changed, 1660 deletions(-) delete mode 100644 pkg/scaffold/template/gotpl.go delete mode 100644 pkg/scaffold/template/lua.go delete mode 100644 pkg/scaffold/template/lua_test.go delete mode 100644 pkg/server/applications.go delete mode 100644 pkg/server/configuration.go delete mode 100644 pkg/server/configuration_test.go delete mode 100644 pkg/server/context.go delete mode 100644 pkg/server/context_test.go delete mode 100644 pkg/server/git.go delete mode 100644 pkg/server/middleware.go delete mode 100644 pkg/server/provider.go delete mode 100644 pkg/server/server.go delete mode 100644 pkg/server/server_test.go delete mode 100644 pkg/server/setup.go delete mode 100644 pkg/server/types.go delete mode 100644 pkg/server/utils.go delete mode 100644 pkg/wkspace/minimal.go diff --git a/cmd/command/plural/plural.go b/cmd/command/plural/plural.go index b798bc827..9cb51170a 100644 --- a/cmd/command/plural/plural.go +++ b/cmd/command/plural/plural.go @@ -36,13 +36,6 @@ type Plural struct { func (p *Plural) getCommands() []cli.Command { return []cli.Command{ - { - Name: "readme", - Aliases: []string{"b"}, - Usage: "generates the readme for your installation repo", - Category: "Workspace", - Action: common.LatestVersion(common.DownloadReadme), - }, { Name: "preflights", Usage: "runs provider preflight checks", @@ -71,18 +64,6 @@ func (p *Plural) getCommands() []cli.Command { Action: common.LatestVersion(common.HandleImport), Category: "User Profile", }, - { - Name: "repair", - Usage: "commits any new encrypted changes in your local workspace automatically", - Action: common.LatestVersion(common.HandleRepair), - Category: "Workspace", - }, - { - Name: "serve", - Usage: "launch the server", - Action: common.LatestVersion(common.HandleServe), - Category: "Workspace", - }, } } diff --git a/pkg/common/common.go b/pkg/common/common.go index cf705a70c..730b65d50 100644 --- a/pkg/common/common.go +++ b/pkg/common/common.go @@ -13,10 +13,8 @@ import ( "github.com/pluralsh/plural-cli/pkg/config" "github.com/pluralsh/plural-cli/pkg/crypto" "github.com/pluralsh/plural-cli/pkg/provider" - "github.com/pluralsh/plural-cli/pkg/server" "github.com/pluralsh/plural-cli/pkg/utils" "github.com/pluralsh/plural-cli/pkg/utils/pathing" - "github.com/pluralsh/plural-cli/pkg/wkspace" "github.com/urfave/cli" "github.com/pluralsh/plural-cli/pkg/utils/git" @@ -153,10 +151,6 @@ func HandleClone(c *cli.Context) error { return nil } -func DownloadReadme(c *cli.Context) error { - return wkspace.DownloadReadme() -} - func HandleImport(c *cli.Context) error { dir, err := filepath.Abs(c.Args().Get(0)) if err != nil { @@ -189,10 +183,6 @@ func HandleImport(c *cli.Context) error { return nil } -func HandleServe(c *cli.Context) error { - return server.Run() -} - func GetIdAndName(input string) (id, name *string) { if strings.HasPrefix(input, "@") { h := strings.Trim(input, "@") diff --git a/pkg/common/git.go b/pkg/common/git.go index 8321612bb..8f2b7a3e2 100644 --- a/pkg/common/git.go +++ b/pkg/common/git.go @@ -1,27 +1,10 @@ package common import ( - "fmt" "os" "os/exec" - - "github.com/pluralsh/plural-cli/pkg/utils/git" - "github.com/urfave/cli" ) -func HandleRepair(c *cli.Context) error { - repoRoot, err := git.Root() - if err != nil { - return err - } - - if err := git.Repair(repoRoot); err != nil { - fmt.Println(err) - } - - return nil -} - func GitConfig(name, val string) error { cmd := GitCommand("config", name, val) return cmd.Run() diff --git a/pkg/scaffold/template/gotpl.go b/pkg/scaffold/template/gotpl.go deleted file mode 100644 index b7d7e851a..000000000 --- a/pkg/scaffold/template/gotpl.go +++ /dev/null @@ -1,44 +0,0 @@ -package template - -import ( - "bytes" - - "github.com/imdario/mergo" - "gopkg.in/yaml.v2" - - "github.com/pluralsh/plural-cli/pkg/template" - "github.com/pluralsh/plural-cli/pkg/utils" -) - -func FromGoTemplate(vals map[string]interface{}, globals map[string]interface{}, output map[string]map[string]interface{}, chartName, tplate string) error { - var buf bytes.Buffer - buf.Grow(5 * 1024) - - tmpl, err := template.MakeTemplate(tplate) - if err != nil { - return err - } - - if err := tmpl.Execute(&buf, vals); err != nil { - return err - } - - var subVals = map[string]interface{}{} - subVals["enabled"] = true - if err := yaml.Unmarshal(buf.Bytes(), &subVals); err != nil { - return err - } - - // need to handle globals in a dedicated way - if glob, ok := subVals["global"]; ok { - globMap := utils.CleanUpInterfaceMap(glob.(map[interface{}]interface{})) - if err := mergo.Merge(&globals, globMap); err != nil { - return err - } - delete(subVals, "global") - } - - output[chartName] = subVals - buf.Reset() - return nil -} diff --git a/pkg/scaffold/template/lua.go b/pkg/scaffold/template/lua.go deleted file mode 100644 index 57c84cec0..000000000 --- a/pkg/scaffold/template/lua.go +++ /dev/null @@ -1,64 +0,0 @@ -package template - -import ( - "fmt" - - "github.com/Masterminds/sprig/v3" - "github.com/imdario/mergo" - lua "github.com/yuin/gopher-lua" - luar "layeh.com/gopher-luar" - - "github.com/pluralsh/plural-cli/pkg/template" - "github.com/pluralsh/plural-cli/pkg/utils" -) - -func ExecuteLua(vals map[string]interface{}, tplate string) (map[string]interface{}, error) { - output := map[string]interface{}{} - L := lua.NewState() - defer L.Close() - - L.SetGlobal("Var", luar.New(L, vals)) - - for name, function := range template.GetFuncMap() { - L.SetGlobal(name, luar.New(L, function)) - } - for name, function := range sprig.GenericFuncMap() { - L.SetGlobal(name, luar.New(L, function)) - } - - if err := L.DoString(tplate); err != nil { - return nil, err - } - outTable, ok := L.GetGlobal("output").(*lua.LTable) - if !ok { - return nil, fmt.Errorf("the output variable is missing in the lua script") - } - if err := utils.MapLua(outTable, &output); err != nil { - return nil, err - } - - return output, nil - -} - -func FromLuaTemplate(vals map[string]interface{}, globals map[string]interface{}, output map[string]map[string]interface{}, chartName, tplate string) error { - var subVals = map[string]interface{}{} - subVals["enabled"] = true - subVals, err := ExecuteLua(vals, tplate) - if err != nil { - return err - } - - // need to handle globals in a dedicated way - if glob, ok := subVals["global"]; ok { - globMap := utils.CleanUpInterfaceMap(glob.(map[interface{}]interface{})) - if err := mergo.Merge(&globals, globMap); err != nil { - return err - } - delete(subVals, "global") - } - - output[chartName] = subVals - - return nil -} diff --git a/pkg/scaffold/template/lua_test.go b/pkg/scaffold/template/lua_test.go deleted file mode 100644 index 8af20de34..000000000 --- a/pkg/scaffold/template/lua_test.go +++ /dev/null @@ -1,451 +0,0 @@ -package template_test - -import ( - "os" - "path" - "testing" - - "github.com/stretchr/testify/assert" - "gopkg.in/yaml.v2" - - "github.com/pluralsh/plural-cli/pkg/config" - "github.com/pluralsh/plural-cli/pkg/scaffold/template" - pluraltest "github.com/pluralsh/plural-cli/pkg/test" - "github.com/pluralsh/plural-cli/pkg/utils/git" -) - -func TestFromLuaTemplateComplex(t *testing.T) { - tests := []struct { - name string - vals map[string]interface{} - script string - keyContent string - expectedResponse string - expectedError string - }{ - { - name: `test complex azure`, - keyContent: `key: "gKNJBnflqQA6lfUKLWMwl7CMJk4j+qqG9jnGYdTvwTk="`, - vals: map[string]interface{}{ - "Values": map[string]interface{}{"console_dns": "https://onplural.sh"}, - "Configuration": "", - "License": "abc", - "Region": "US", - "Project": "test", - "Cluster": "test", - "Provider": "azure", - "Config": map[string]interface{}{"Email": "test@plural.sh"}, - "Context": map[string]interface{}{"SubscriptionId": "abc", "TenantId": "bca"}, - "console": map[string]interface{}{"secrets": map[string]interface{}{"admin_password": "abc", "jwt": "abc", "admin_email": "", "erlang": "abc"}}, - }, - script: func() string { - io, err := os.ReadFile("../../test/lua/values.yaml.lua") - if err != nil { - t.Fatal(err) - } - return string(io) - }(), - - expectedResponse: `global: - application: - links: - - description: console web ui - url: https://onplural.sh -test: - consoleIdentityClientId: '{{ .Import.Terraform.console_msi_client_id }}' - consoleIdentityId: '{{ .Import.Terraform.console_msi_id }}' - enabled: true - extraEnv: - - name: ARM_USE_MSI - value: true - - name: ARM_SUBSCRIPTION_ID - value: abc - - name: ARM_TENANT_ID - value: bca - ingress: - annotations: - kubernetes.io/tls-acme: "true" - console_dns: https://onplural.sh - ingressClass: nginx - license: abc - podLabels: - aadpodidbinding: console - provider: azure - replicaCount: 2 - secrets: - admin_email: "" - admin_password: abc - branch_name: master - cluster_name: test - config: | - apiVersion: platform.plural.sh/v1alpha1 - kind: Config - metadata: null - spec: - email: test@plural.sh - token: abc - consoleToken: "" - namespacePrefix: test - endpoint: http://example.com - lockProfile: abc - reportErrors: false - erlang: abc - git_access_token: "" - git_email: console@plural.sh - git_url: git@git.test.com:portfolio/space.space_name.git - git_user: console - id_rsa: "" - id_rsa_pub: "" - jwt: abc - key: | - key: "gKNJBnflqQA6lfUKLWMwl7CMJk4j+qqG9jnGYdTvwTk=" - repo_root: "" - ssh_passphrase: "" - serviceAccount: - annotations: - eks.amazonaws.com/role-arn: arn:aws:iam::test:role/test-console - create: true -`, - }, - { - name: `test complex aws`, - keyContent: `key: "gKNJBnflqQA6lfUKLWMwl7CMJk4j+qqG9jnGYdTvwTk="`, - vals: map[string]interface{}{ - "Values": map[string]interface{}{"console_dns": "https://onplural.sh"}, - "Configuration": "", - "License": "abc", - "Region": "US", - "Project": "test", - "Cluster": "test", - "Provider": "aws", - "Config": map[string]interface{}{"Email": "test@plural.sh"}, - "Context": map[string]interface{}{"SubscriptionId": "abc", "TenantId": "bca"}, - "console": map[string]interface{}{"secrets": map[string]interface{}{"admin_password": "abc", "jwt": "abc", "admin_email": "", "erlang": "abc"}}, - }, - script: func() string { - io, err := os.ReadFile("../../test/lua/values.yaml.lua") - if err != nil { - t.Fatal(err) - } - return string(io) - }(), - - expectedResponse: `global: - application: - links: - - description: console web ui - url: https://onplural.sh -test: - enabled: true - ingress: - annotations: - kubernetes.io/tls-acme: "true" - console_dns: https://onplural.sh - ingressClass: nginx - license: abc - provider: aws - replicaCount: 2 - secrets: - admin_email: "" - admin_password: abc - branch_name: master - cluster_name: test - config: | - apiVersion: platform.plural.sh/v1alpha1 - kind: Config - metadata: null - spec: - email: test@plural.sh - token: abc - consoleToken: "" - namespacePrefix: test - endpoint: http://example.com - lockProfile: abc - reportErrors: false - erlang: abc - git_access_token: "" - git_email: console@plural.sh - git_url: git@git.test.com:portfolio/space.space_name.git - git_user: console - id_rsa: "" - id_rsa_pub: "" - jwt: abc - key: | - key: "gKNJBnflqQA6lfUKLWMwl7CMJk4j+qqG9jnGYdTvwTk=" - repo_root: "" - ssh_passphrase: "" - serviceAccount: - annotations: - eks.amazonaws.com/role-arn: arn:aws:iam::test:role/test-console - create: true -`, - }, - } - for _, test := range tests { - t.Run(test.name, func(t *testing.T) { - dir, err := os.MkdirTemp("", "config") - assert.NoError(t, err) - defer os.RemoveAll(dir) - - os.Setenv("HOME", dir) - defer os.Unsetenv("HOME") - - err = os.Chdir(dir) - assert.NoError(t, err) - defaultConfig := pluraltest.GenDefaultConfig() - err = defaultConfig.Save(config.ConfigName) - assert.NoError(t, err) - - _, err = git.Init() - assert.NoError(t, err) - _, err = git.GitRaw("config", "--global", "user.email", "test@plural.com") - assert.NoError(t, err) - _, err = git.GitRaw("config", "--global", "user.name", "test") - assert.NoError(t, err) - _, err = git.GitRaw("add", "-A") - assert.NoError(t, err) - _, err = git.GitRaw("commit", "-m", "init") - assert.NoError(t, err) - _, err = git.GitRaw("remote", "add", "origin", "git@git.test.com:portfolio/space.space_name.git") - assert.NoError(t, err) - - err = os.MkdirAll(path.Join(dir, ".plural"), os.ModePerm) - assert.NoError(t, err) - err = os.WriteFile(path.Join(dir, ".plural", "key"), []byte(test.keyContent), 0644) - assert.NoError(t, err) - - globals := map[string]interface{}{} - values := make(map[string]map[string]interface{}) - - err = template.FromLuaTemplate(test.vals, globals, values, "test", test.script) - if test.expectedError != "" { - assert.Equal(t, test.expectedError, err.Error()) - } else { - assert.NoError(t, err) - } - values["global"] = globals - res, err := yaml.Marshal(values) - assert.NoError(t, err) - response := string(res) - assert.Equal(t, test.expectedResponse, response) - }) - } -} - -func TestFromLuaTemplate(t *testing.T) { - tests := []struct { - name string - vals map[string]interface{} - script string - expectedResponse string - expectedError string - }{ - { - name: `test globals`, - vals: map[string]interface{}{ - "Values": map[string]interface{}{"console_dns": "https://onplural.sh"}, - }, - script: `output = { - global={ - application={ - links={ - { description= "console web ui", - url=Var.Values.console_dns - } - } - } - } -}`, - expectedResponse: `global: - application: - links: - - description: console web ui - url: https://onplural.sh -test: {} -`, - }, - { - name: `test env var`, - vals: map[string]interface{}{ - "Context": map[string]interface{}{"SubscriptionId": "abc", "TenantId": "cda"}, - }, - script: `output = { - extraEnv={ - { - name="ARM_USE_MSI", - value = 'true' - - }, - { - name="ARM_SUBSCRIPTION_ID", - value=Var.Context.SubscriptionId - }, - { - name="ARM_TENANT_ID", - value= Var.Context.TenantId - } - } -}`, - expectedResponse: `global: {} -test: - extraEnv: - - name: ARM_USE_MSI - value: "true" - - name: ARM_SUBSCRIPTION_ID - value: abc - - name: ARM_TENANT_ID - value: cda -`, - }, - { - name: `test annotations`, - vals: map[string]interface{}{ - "Context": map[string]interface{}{"SubscriptionId": "abc", "TenantId": "cda"}, - }, - script: `output = { - ingress={ - annotations={ - ['kubernetes.io/tls-acme']='true', - } - } -}`, - expectedResponse: `global: {} -test: - ingress: - annotations: - kubernetes.io/tls-acme: "true" -`, - }, - { - name: `test importValue`, - vals: map[string]interface{}{ - "Values": map[string]interface{}{"console_dns": "https://onplural.sh"}, - }, - script: `output = {} - output.consoleIdentityId=importValue("Terraform", "console_msi_id") - output.consoleIdentityClientId=importValue("Terraform", "console_msi_client_id") -`, - expectedResponse: `global: {} -test: - consoleIdentityClientId: '{{ .Import.Terraform.console_msi_client_id }}' - consoleIdentityId: '{{ .Import.Terraform.console_msi_id }}' -`, - }, - { - name: `test when output doesn't exist`, - vals: map[string]interface{}{ - "Values": map[string]interface{}{"console_dns": "https://onplural.sh"}, - }, - script: ` - somethingElse={} -`, - expectedError: `the output variable is missing in the lua script`, - }, - { - name: `test encryption key`, - vals: map[string]interface{}{}, - script: ` - output={ - secrets={ - key='' - } - } - output.secrets.key=dedupe(Var, "console.secrets.key", readFile(pathJoin(homeDir(), ".plural", "key"))) .. "\n" -`, - expectedResponse: `global: {} -test: - secrets: - key: | - key: 3fWQQvTe5w9Gu6uoJzw1C5SxnARtNT/QOvvISRFoxRs= -`, - }, - { - name: `test encryption key when already exists`, - vals: map[string]interface{}{ - "console": map[string]interface{}{"secrets": map[string]interface{}{ - "key": "key: abc", - }}, - }, - script: ` - output={ - secrets={ - key='' - } - } - output.secrets.key=dedupe(Var, "console.secrets.key", readFile(pathJoin(homeDir(), ".plural", "key"))) .. "\n" -`, - expectedResponse: `global: {} -test: - secrets: - key: | - key: abc -`, - }, - { - name: `test kebab case`, - vals: map[string]interface{}{ - "Values": map[string]interface{}{ - "console_dns": "console.onplural.sh", - "testBase": map[string]interface{}{ - "cypressEmail": "test@plural.sh", - "cypressPassword": "xyz", - }, - }, - }, - script: ` - output={ - - } - output["test-base"]={ - enabled=true, - secret={ - CYPRESS_EMAIL=Var.Values.testBase.cypressEmail, - CYPRESS_PASSWORD=Var.Values.testBase.cypressPassword, - CYPRESS_BASE_URL= "https://" .. Var.Values.console_dns .. "/", - } - } -`, - expectedResponse: `global: {} -test: - test-base: - enabled: true - secret: - CYPRESS_BASE_URL: https://console.onplural.sh/ - CYPRESS_EMAIL: test@plural.sh - CYPRESS_PASSWORD: xyz -`, - }, - } - for _, test := range tests { - t.Run(test.name, func(t *testing.T) { - dir, err := os.MkdirTemp("", "config") - assert.NoError(t, err) - defer os.RemoveAll(dir) - - os.Setenv("HOME", dir) - defer os.Unsetenv("HOME") - - err = os.Chdir(dir) - assert.NoError(t, err) - err = os.MkdirAll(path.Join(dir, ".plural"), os.ModePerm) - assert.NoError(t, err) - err = os.WriteFile(path.Join(dir, ".plural", "key"), []byte("key: 3fWQQvTe5w9Gu6uoJzw1C5SxnARtNT/QOvvISRFoxRs="), 0644) - assert.NoError(t, err) - - globals := map[string]interface{}{} - values := make(map[string]map[string]interface{}) - err = template.FromLuaTemplate(test.vals, globals, values, "test", test.script) - if test.expectedError != "" { - assert.Equal(t, test.expectedError, err.Error()) - } else { - assert.NoError(t, err) - - values["global"] = globals - res, err := yaml.Marshal(values) - assert.NoError(t, err) - response := string(res) - assert.Equal(t, test.expectedResponse, response) - } - }) - } -} diff --git a/pkg/server/applications.go b/pkg/server/applications.go deleted file mode 100644 index f0620b75e..000000000 --- a/pkg/server/applications.go +++ /dev/null @@ -1,25 +0,0 @@ -package server - -import ( - "net/http" - - "github.com/gin-gonic/gin" - "github.com/pluralsh/plural-cli/pkg/application" - "github.com/pluralsh/plural-cli/pkg/kubernetes" -) - -func listApplications(c *gin.Context) error { - kubeConf, err := kubernetes.KubeConfig() - if err != nil { - return err - } - - apps, err := application.ListAll(kubeConf) - if err != nil { - return err - } - - c.Header("Content-Type", "application/json") - c.JSON(http.StatusOK, apps) - return nil -} diff --git a/pkg/server/configuration.go b/pkg/server/configuration.go deleted file mode 100644 index c4e0c69a5..000000000 --- a/pkg/server/configuration.go +++ /dev/null @@ -1,88 +0,0 @@ -package server - -import ( - "net/http" - "path/filepath" - - "github.com/gin-gonic/gin" - "github.com/pluralsh/plural-cli/pkg/manifest" - "github.com/pluralsh/plural-cli/pkg/utils/git" -) - -type Configuration struct { - Workspace WorkspaceConfiguration `json:"workspace"` - Git GitConfiguration `json:"git"` - ContextConfiguration map[string]map[string]interface{} `json:"context_configuration,omitempty"` - Buckets []string `json:"buckets"` - Domains []string `json:"domains"` -} - -type WorkspaceConfiguration struct { - Network *NetworkConfiguration `json:"network,omitempty"` - BucketPrefix string `json:"bucket_prefix,omitempty"` - Cluster string `json:"cluster,omitempty"` -} - -type NetworkConfiguration struct { - PluralDns bool `json:"plural_dns,omitempty"` - Subdomain string `json:"subdomain,omitempty"` -} - -type GitConfiguration struct { - Url string `json:"url,omitempty"` - Root string `json:"root,omitempty"` - Name string `json:"name,omitempty"` - Branch string `json:"branch,omitempty"` -} - -func configuration(c *gin.Context) error { - path := manifest.ProjectManifestPath() - project, err := manifest.ReadProject(path) - if err != nil { - return err - } - - context, err := manifest.ReadContext(manifest.ContextPath()) - if err != nil { - return err - } - - configuration := Configuration{ - Workspace: WorkspaceConfiguration{ - BucketPrefix: project.BucketPrefix, - Cluster: project.Cluster, - }, - ContextConfiguration: context.Configuration, - Buckets: context.Buckets, - Domains: context.Domains, - } - if project.Network != nil { - configuration.Workspace.Network = &NetworkConfiguration{ - PluralDns: project.Network.PluralDns, - Subdomain: project.Network.Subdomain, - } - } - repoRoot, err := git.Root() - if err != nil { - return err - } - branch, err := git.CurrentBranch() - if err != nil { - return err - } - url, err := git.GetURL() - if err != nil { - return err - } - - configuration.Git = GitConfiguration{ - Url: url, - Root: repoRoot, - Name: filepath.Base(repoRoot), - Branch: branch, - } - - c.Header("Content-Type", "application/json") - c.JSON(http.StatusOK, configuration) - return nil -} diff --git a/pkg/server/configuration_test.go b/pkg/server/configuration_test.go deleted file mode 100644 index 69e47318f..000000000 --- a/pkg/server/configuration_test.go +++ /dev/null @@ -1,102 +0,0 @@ -package server_test - -import ( - "encoding/json" - "fmt" - "net/http" - "net/http/httptest" - "os" - "path" - "path/filepath" - "strings" - "testing" - - "github.com/pluralsh/plural-cli/pkg/manifest" - "github.com/pluralsh/plural-cli/pkg/server" - "github.com/pluralsh/plural-cli/pkg/utils/git" - "github.com/stretchr/testify/assert" -) - -func TestGetConfiguration(t *testing.T) { - tests := []struct { - name string - expectedHTTPStatus int - expectedResponse string - }{ - { - name: `update configuration console email address`, - expectedHTTPStatus: http.StatusOK, - expectedResponse: `{"workspace":{},"git":{"url":"git@git.test.com:portfolio/space.space_name.git","root":"%s","name":"%s","branch":"master"},"context_configuration":{"console":{"email":"test@plural.sh","git_user":"test"},"minio":{"host":"minio.plural.sh","url":"https://test.plural.sh"}},"buckets":["example-bucket"],"domains":["domain.example.com"]}`, - }, - } - for _, test := range tests { - t.Run(test.name, func(t *testing.T) { - - // create temp environment - dir, err := os.MkdirTemp("", "config") - assert.NoError(t, err) - defer os.RemoveAll(dir) - - err = os.Chdir(dir) - assert.NoError(t, err) - - pm := genProjectManifest() - io, err := json.Marshal(pm) - assert.NoError(t, err) - err = os.WriteFile(path.Join(dir, "workspace.yaml"), io, 0644) - assert.NoError(t, err) - - context := manifest.NewContext() - context.Configuration = genDefaultContextConfiguration() - context.Buckets = []string{"example-bucket"} - context.Domains = []string{"domain.example.com"} - err = context.Write(path.Join(dir, "context.yaml")) - assert.NoError(t, err) - - // To don't override ~/.gitconfig - os.Setenv("HOME", dir) - defer os.Unsetenv("HOME") - _, err = git.Init() - assert.NoError(t, err) - _, err = git.GitRaw("config", "--global", "user.email", "test@plural.com") - assert.NoError(t, err) - _, err = git.GitRaw("config", "--global", "user.name", "test") - assert.NoError(t, err) - _, err = git.GitRaw("add", "-A") - assert.NoError(t, err) - _, err = git.GitRaw("commit", "-m", "init") - assert.NoError(t, err) - _, err = git.GitRaw("remote", "add", "origin", "git@git.test.com:portfolio/space.space_name.git") - assert.NoError(t, err) - - req := httptest.NewRequest(http.MethodGet, "/v1/configuration", strings.NewReader("")) - res := httptest.NewRecorder() - r := server.SetUpRouter() - r.ServeHTTP(res, req) - - if res.Code != test.expectedHTTPStatus { - t.Fatalf("Expected HTTP status code %d, got %d: %s", test.expectedHTTPStatus, res.Code, res.Body.String()) - } - - realDir, err := filepath.EvalSymlinks(dir) - assert.NoError(t, err) - test.expectedResponse = fmt.Sprintf(test.expectedResponse, realDir, filepath.Base(dir)) - - if res.Code == http.StatusOK { - CompareWithResult(t, res, test.expectedResponse) - } - }) - } -} - -func genProjectManifest() *manifest.VersionedProjectManifest { - return &manifest.VersionedProjectManifest{ - ApiVersion: "plural.sh/v1alpha1", - Kind: "ProjectManifest", - Spec: &manifest.ProjectManifest{ - Cluster: "abc", - Bucket: "def", - Project: "test", - }, - } -} diff --git a/pkg/server/context.go b/pkg/server/context.go deleted file mode 100644 index afb8d6ebe..000000000 --- a/pkg/server/context.go +++ /dev/null @@ -1,46 +0,0 @@ -package server - -import ( - "fmt" - "net/http" - - "github.com/gin-gonic/gin" - "github.com/pluralsh/plural-cli/pkg/manifest" - "github.com/samber/lo" -) - -type ConfigurationUpdate struct { - Configuration map[string]map[string]interface{} `json:"configuration,omitempty"` - Buckets []string `json:"buckets"` - Domains []string `json:"domains"` - Bundles []*manifest.Bundle `json:"bundles"` -} - -func contextConfiguration(c *gin.Context) error { - var update ConfigurationUpdate - if err := c.BindJSON(&update); err != nil { - return err - } - - context, err := manifest.ReadContext(manifest.ContextPath()) - if err != nil { - return err - } - - for k, v := range update.Configuration { - context.Configuration[k] = v - } - - context.Buckets = lo.Uniq(append(context.Buckets, update.Buckets...)) - context.Domains = lo.Uniq(append(context.Domains, update.Domains...)) - context.Bundles = lo.UniqBy(append(context.Bundles, update.Bundles...), func(b *manifest.Bundle) string { - return fmt.Sprintf("%s:%s", b.Repository, b.Name) - }) - - if err := context.Write(manifest.ContextPath()); err != nil { - return err - } - - c.JSON(http.StatusOK, context) - return nil -} diff --git a/pkg/server/context_test.go b/pkg/server/context_test.go deleted file mode 100644 index b8772eb44..000000000 --- a/pkg/server/context_test.go +++ /dev/null @@ -1,93 +0,0 @@ -package server_test - -import ( - "encoding/json" - "net/http" - "net/http/httptest" - "os" - "path" - "strings" - "testing" - - "github.com/stretchr/testify/assert" - - "github.com/pluralsh/plural-cli/pkg/manifest" - "github.com/pluralsh/plural-cli/pkg/server" -) - -func TestContextConfiguration(t *testing.T) { - tests := []struct { - name string - body string - expectedHTTPStatus int - expectedResponse string - }{ - { - name: `update configuration console email address`, - body: `{"configuration": {"console":{"email":"newEmail@plural.sh"}}}`, - expectedHTTPStatus: http.StatusOK, - expectedResponse: `{"bundles":[],"buckets":[],"domains":[],"smtp":null,"configuration":{"console":{"email":"newEmail@plural.sh"},"minio":{"host":"minio.plural.sh","url":"https://test.plural.sh"}}}`, - }, - { - name: `add new entry to configuration`, - body: `{"configuration": {"newEntry":{"test":"test"}}}`, - expectedHTTPStatus: http.StatusOK, - expectedResponse: `{"bundles":[],"buckets":[],"domains":[],"smtp":null,"configuration":{"console":{"email":"test@plural.sh","git_user":"test"},"minio":{"host":"minio.plural.sh","url":"https://test.plural.sh"},"newEntry":{"test":"test"}}}`, - }, - { - name: `remove minio url from configuration`, - body: `{"configuration": {"console":{"email":"test@plural.sh","git_user":"test"},"minio":{"host":"minio.plural.sh"}}}`, - expectedHTTPStatus: http.StatusOK, - expectedResponse: `{"bundles":[],"buckets":[],"domains":[],"smtp":null,"configuration":{"console":{"email":"test@plural.sh","git_user":"test"},"minio":{"host":"minio.plural.sh"}}}`, - }, - } - for _, test := range tests { - t.Run(test.name, func(t *testing.T) { - dir, err := os.MkdirTemp("", "config") - assert.NoError(t, err) - defer os.RemoveAll(dir) - - err = os.Chdir(dir) - assert.NoError(t, err) - - context := manifest.NewContext() - context.Configuration = genDefaultContextConfiguration() - err = context.Write(path.Join(dir, "context.yaml")) - assert.NoError(t, err) - - req := httptest.NewRequest(http.MethodPost, "/v1/context/configuration", strings.NewReader(test.body)) - res := httptest.NewRecorder() - r := server.SetUpRouter() - r.ServeHTTP(res, req) - - if res.Code != test.expectedHTTPStatus { - t.Fatalf("Expected HTTP status code %d, got %d: %s", test.expectedHTTPStatus, res.Code, res.Body.String()) - } - - if res.Code == http.StatusOK { - CompareWithResult(t, res, test.expectedResponse) - } - - context, err = manifest.ReadContext(manifest.ContextPath()) - assert.NoError(t, err) - - contextBytes, err := json.Marshal(context) - assert.NoError(t, err) - assert.Equal(t, test.expectedResponse, string(contextBytes)) - - }) - } -} - -func genDefaultContextConfiguration() map[string]map[string]interface{} { - configMap := make(map[string]map[string]interface{}) - configMap["console"] = map[string]interface{}{ - "email": "test@plural.sh", - "git_user": "test", - } - configMap["minio"] = map[string]interface{}{ - "url": "https://test.plural.sh", - "host": "minio.plural.sh", - } - return configMap -} diff --git a/pkg/server/git.go b/pkg/server/git.go deleted file mode 100644 index 5b8a624d5..000000000 --- a/pkg/server/git.go +++ /dev/null @@ -1,92 +0,0 @@ -package server - -import ( - "fmt" - "os" - "path/filepath" - - "github.com/mitchellh/go-homedir" - - "github.com/pluralsh/plural-cli/pkg/utils" - "github.com/pluralsh/plural-cli/pkg/utils/git" - "github.com/pluralsh/plural-cli/pkg/utils/pathing" -) - -func gitExists() (bool, error) { - dir, err := homedir.Expand("~/workspace") - if err != nil { - return false, err - } - - return utils.Exists(dir), nil -} - -func setupGit(setup *SetupRequest) error { - p, err := homedir.Expand("~/.ssh") - if err != nil { - return err - } - - if err := os.MkdirAll(p, 0700); err != nil { - return err - } - - if err := os.WriteFile(pathing.SanitizeFilepath(filepath.Join(p, "id_rsa")), []byte(setup.SshPrivateKey), 0600); err != nil { - return fmt.Errorf("error writing ssh private key: %w", err) - } - if err := os.WriteFile(pathing.SanitizeFilepath(filepath.Join(p, "id_rsa.pub")), []byte(setup.SshPublicKey), 0644); err != nil { - return fmt.Errorf("error writing ssh public key: %w", err) - } - - if err := execCmd("ssh-add", pathing.SanitizeFilepath(filepath.Join(p, "id_rsa"))); err != nil { - return fmt.Errorf("error adding ssh key to agent: %w", err) - } - - dir, err := homedir.Expand("~/workspace") - if err != nil { - return fmt.Errorf("error getting the workspace: %w", err) - } - - if err := execCmd("git", "clone", setup.GitUrl, dir); err != nil { - return fmt.Errorf("error cloning the repository: %w", err) - } - - if err := os.Chdir(dir); err != nil { - return fmt.Errorf("error changing directory: %w", err) - } - if err := gitConfig("user.email", setup.User.Email); err != nil { - return fmt.Errorf("error during git config: %w", err) - } - - name := "plural-shell" - if setup.User.GitUser != "" { - name = setup.User.GitUser - } - if err := gitConfig("user.name", name); err != nil { - return fmt.Errorf("error during git config: %w", err) - } - - if err := execCmd("plural", "crypto", "init"); err != nil { - return fmt.Errorf("error running plural crypt init: %w", err) - } - - return execCmd("plural", "crypto", "unlock") -} - -func gitConfig(args ...string) error { - cmdArgs := append([]string{"config", "--global"}, args...) - return execCmd("git", cmdArgs...) -} - -func syncGit() error { - dir, err := homedir.Expand("~/workspace") - if err != nil { - return err - } - - if err := os.Chdir(dir); err != nil { - return err - } - - return git.Sync(dir, "pushing local cloud shell changes", true) -} diff --git a/pkg/server/middleware.go b/pkg/server/middleware.go deleted file mode 100644 index 6fe97e67e..000000000 --- a/pkg/server/middleware.go +++ /dev/null @@ -1,17 +0,0 @@ -package server - -import ( - "net/http" - - "github.com/gin-gonic/gin" -) - -func ErrorHandler() gin.HandlerFunc { - return func(c *gin.Context) { - c.Next() - - for _, err := range c.Errors { - c.JSON(http.StatusInternalServerError, gin.H{"error": err.Error()}) - } - } -} diff --git a/pkg/server/provider.go b/pkg/server/provider.go deleted file mode 100644 index 366b69dc4..000000000 --- a/pkg/server/provider.go +++ /dev/null @@ -1,126 +0,0 @@ -package server - -import ( - "bytes" - "context" - "fmt" - "os" - "text/template" - - "github.com/mitchellh/go-homedir" - - prov "github.com/pluralsh/plural-cli/pkg/provider" -) - -const azureEnvFile = ` -export AZURE_CLIENT_ID={{ .ClientId }} -export AZURE_TENANT_ID={{ .TenantId }} -export AZURE_CLIENT_SECRET={{ .ClientSecret }} -export ARM_CLIENT_ID={{ .ClientId }} -export ARM_TENANT_ID={{ .TenantId }} -export ARM_CLIENT_SECRET={{ .ClientSecret }} -export ARM_USE_MSI=true -export ARM_SUBSCRIPTION_ID={{ .SubscriptionId }} -` - -func setupProvider(setup *SetupRequest) error { - if marked("cloud") { - return nil - } - - if setup.Provider == "aws" { - return setupAws(setup) - } - - if setup.Provider == "gcp" { - return setupGcp(setup) - } - - if setup.Provider == "azure" { - return setupAzure(setup) - } - - return nil -} - -func setupGcp(setup *SetupRequest) error { - f, err := homedir.Expand("~/gcp.json") - if err != nil { - return fmt.Errorf("error getting the gcp.json path: %w", err) - } - - if err := os.WriteFile(f, []byte(setup.Credentials.Gcp.ApplicationCredentials), 0644); err != nil { - return fmt.Errorf("error writing gcp credentials: %w", err) - } - - if out, err := execCmdWithOutput("gcloud", "auth", "activate-service-account", "--key-file", f, "--project", setup.Workspace.Project); err != nil { - return fmt.Errorf("error authenticating to gcloud: %s", out) - } - - return nil -} - -func setupAzure(setup *SetupRequest) error { - az := setup.Credentials.Azure - setup.Context = map[string]interface{}{ - "TenantId": az.TenantId, - "SubscriptionId": az.SubscriptionId, - "StorageAccount": az.StorageAccount, - } - - tpl, err := template.New("azure").Parse(azureEnvFile) - if err != nil { - return err - } - - var out bytes.Buffer - out.Grow(5 * 1024) - if err := tpl.Execute(&out, az); err != nil { - return err - } - - f, err := homedir.Expand("~/.env") - if err != nil { - return err - } - - if err := os.WriteFile(f, out.Bytes(), 0644); err != nil { - return fmt.Errorf("error writing azure env file: %w", err) - } - - if out, err := execCmdWithOutput("az", "login", "--service-principal", "-u", az.ClientId, "-p", az.ClientSecret, "--tenant", az.TenantId); err != nil { - return fmt.Errorf("error logging into az cli: %s", out) - } - - return nil -} - -func setupAws(setup *SetupRequest) error { - aws := setup.Credentials.Aws - - if err := awsConfig("default.region", setup.Workspace.Region); err != nil { - return fmt.Errorf("error configuring default aws region: %w", err) - } - - if err := awsConfig("aws_access_key_id", aws.AccessKeyId); err != nil { - return fmt.Errorf("error configuring aws access key: %w", err) - } - - if err := awsConfig("aws_secret_access_key", aws.SecretAccessKey); err != nil { - return fmt.Errorf("error configuring aws secret key: %w", err) - } - - accountId, err := prov.GetAwsAccount(context.Background()) - if err != nil { - return fmt.Errorf("error getting aws account: %w", err) - } - - setup.Workspace.Project = accountId - return nil -} - -func awsConfig(args ...string) error { - allArgs := []string{"configure", "set"} - allArgs = append(allArgs, args...) - return execCmd("aws", allArgs...) -} diff --git a/pkg/server/server.go b/pkg/server/server.go deleted file mode 100644 index ec77c52f0..000000000 --- a/pkg/server/server.go +++ /dev/null @@ -1,70 +0,0 @@ -package server - -import ( - "context" - "errors" - "net/http" - "os" - "os/signal" - "syscall" - "time" - - "github.com/gin-gonic/gin" -) - -func SetUpRouter() *gin.Engine { - r := gin.Default() - r.Use(ErrorHandler()) - v1 := r.Group("/v1") - { - v1.POST("/setup", serverFunc(setupCli)) - v1.GET("/health", healthcheck) - v1.GET("/configuration", serverFunc(configuration)) - v1.GET("/applications", serverFunc(listApplications)) - v1.GET("/shutdown", serverFunc(shutdown)) - v1.POST("/context/configuration", serverFunc(contextConfiguration)) - v1.POST("/shutdown", serverFunc(shutdown)) - } - return r -} - -func Run() error { - gin.SetMode(gin.ReleaseMode) - r := SetUpRouter() - - term := make(chan os.Signal, 1) // OS termination signal - fail := make(chan error) // Teardown failure signal - - go func() { - signal.Notify(term, syscall.SIGINT, syscall.SIGTERM) - <-term // waits for termination signal - // context with 30s timeout - _, cancel := context.WithTimeout(context.Background(), 30*time.Second) - defer cancel() - // all teardown process must complete within 30 seconds - fail <- teardown() - }() - - if err := r.Run(":8080"); err != nil && !errors.Is(err, http.ErrServerClosed) { - return err - } - - return <-fail -} - -func healthcheck(c *gin.Context) { - c.String(http.StatusOK, "OK") -} - -func shutdown(c *gin.Context) error { - if err := syncGit(); err != nil { - return err - } - - c.String(http.StatusOK, "OK") - return nil -} - -func teardown() error { - return syncGit() -} diff --git a/pkg/server/server_test.go b/pkg/server/server_test.go deleted file mode 100644 index a9fa58032..000000000 --- a/pkg/server/server_test.go +++ /dev/null @@ -1,57 +0,0 @@ -package server_test - -import ( - "io" - "net/http" - "net/http/httptest" - "strings" - "testing" - - "github.com/pluralsh/plural-cli/pkg/server" -) - -func TestHealthcheck(t *testing.T) { - tests := []struct { - name string - expectedHTTPStatus int - expectedResponse string - }{ - { - name: `test health check`, - expectedHTTPStatus: http.StatusOK, - expectedResponse: "OK", - }, - } - for _, test := range tests { - t.Run(test.name, func(t *testing.T) { - req := httptest.NewRequest(http.MethodGet, "/v1/health", strings.NewReader("")) - res := httptest.NewRecorder() - r := server.SetUpRouter() - r.ServeHTTP(res, req) - - if res.Code != test.expectedHTTPStatus { - t.Fatalf("Expected HTTP status code %d, got %d: %s", test.expectedHTTPStatus, res.Code, res.Body.String()) - } - - if res.Code == http.StatusOK { - CompareWithResult(t, res, test.expectedResponse) - } - }) - } -} - -// CompareWithResult a convenience function for comparing http.Body content with response. -func CompareWithResult(t *testing.T, res *httptest.ResponseRecorder, response string) { - t.Helper() - bBytes, err := io.ReadAll(res.Body) - if err != nil { - t.Fatal("Unable to read response body") - } - - r := strings.TrimSpace(response) - b := strings.TrimSpace(string(bBytes)) - - if r != b { - t.Fatalf("Expected response body to be \n%s \ngot \n%s", r, b) - } -} diff --git a/pkg/server/setup.go b/pkg/server/setup.go deleted file mode 100644 index fc9b9e3d5..000000000 --- a/pkg/server/setup.go +++ /dev/null @@ -1,189 +0,0 @@ -package server - -import ( - "fmt" - "net/http" - "os" - - "github.com/gin-gonic/gin" - "github.com/mitchellh/go-homedir" - - "github.com/pluralsh/plural-cli/pkg/api" - "github.com/pluralsh/plural-cli/pkg/config" - "github.com/pluralsh/plural-cli/pkg/crypto" - "github.com/pluralsh/plural-cli/pkg/manifest" - "github.com/pluralsh/plural-cli/pkg/provider" - "github.com/pluralsh/plural-cli/pkg/utils" - "github.com/pluralsh/plural-cli/pkg/wkspace" - - "github.com/pluralsh/polly/algorithms" -) - -func toConfig(setup *SetupRequest) *config.Config { - return &config.Config{ - Email: setup.User.Email, - Token: setup.User.AccessToken, - ReportErrors: true, - } -} - -func toManifest(setup *SetupRequest) *manifest.ProjectManifest { - wk := setup.Workspace - return &manifest.ProjectManifest{ - Cluster: wk.Cluster, - Bucket: wk.Bucket, - Project: wk.Project, - Provider: toProvider(setup.Provider), - Region: wk.Region, - BucketPrefix: wk.BucketPrefix, - Owner: &manifest.Owner{Email: setup.User.Email}, - Network: &manifest.NetworkConfig{ - PluralDns: true, - Subdomain: wk.Subdomain, - }, - Context: setup.Context, - } -} - -func toContext(setup *SetupRequest) *manifest.Context { - ctx := manifest.NewContext() - consoleConf := map[string]interface{}{ - "private_key": setup.SshPrivateKey, - "public_key": setup.SshPublicKey, - "passphrase": "", - "repo_url": setup.GitUrl, - "console_dns": fmt.Sprintf("console.%s", setup.Workspace.Subdomain), - "kas_dns": fmt.Sprintf("kas.%s", setup.Workspace.Subdomain), - "is_demo": setup.IsDemo, - } - - if setup.GitInfo != nil { - consoleConf["git_email"] = setup.GitInfo.Email - consoleConf["git_user"] = setup.GitInfo.Username - } - - if setup.User.Name != "" { - consoleConf["admin_name"] = setup.User.Name - } - - if setup.User.Email != "" { - consoleConf["admin_email"] = setup.User.Email - } - - ctx.Configuration = map[string]map[string]interface{}{ - "console": consoleConf, - } - return ctx -} - -func setupCli(c *gin.Context) error { - fmt.Println("Beginning to setup workspace") - var setup SetupRequest - if err := c.ShouldBindJSON(&setup); err != nil { - return err - } - - p, err := homedir.Expand("~/.plural") - if err != nil { - return err - } - - if err := os.MkdirAll(p, 0755); err != nil { - return err - } - - if err := crypto.Setup(setup.AesKey); err != nil { - return err - } - - conf := toConfig(&setup) - if err := conf.Flush(); err != nil { - return err - } - - if err := setupProvider(&setup); err != nil { - return fmt.Errorf("error setting up provider: %w", err) - } - marker("cloud") - - exists, err := gitExists() - if err != nil { - return err - } - - if exists { - c.JSON(http.StatusOK, gin.H{"success": true}) - return nil - } - - if err := setupGit(&setup); err != nil { - return fmt.Errorf("error setting up git: %w", err) - } - - if err := crypto.CreateKeyFingerprintFile(); err != nil { - return err - } - _ = wkspace.DownloadReadme() - - man := toManifest(&setup) - path := manifest.ProjectManifestPath() - if !utils.Exists(path) { - if err := man.Write(path); err != nil { - return fmt.Errorf("error writing manifest: %w", err) - } - } else if setup.Provider == "azure" { - current, err := manifest.FetchProject() - if err != nil { - return err - } - - current.Project = man.Project - if err := current.Write(path); err != nil { - return fmt.Errorf("error writing manifest: %w", err) - } - } - - ctx := toContext(&setup) - path = manifest.ContextPath() - if !utils.Exists(path) { - if err := ctx.Write(path); err != nil { - return fmt.Errorf("error writing context: %w", err) - } - } - - prov, err := provider.GetProvider() - if err != nil { - return err - } - - if err := runPreflights(prov); err != nil { - return err - } - - missing, err := prov.Permissions() - if err != nil { - return err - } - - // try to initialize kubeconfig if we can, but don't stress if it fails - _ = execCmd("plural", "wkspace", "kube-init") - c.JSON(http.StatusOK, gin.H{"success": true, "missing": missing}) - return nil -} - -func runPreflights(prov provider.Provider) error { - // run only relevant preflights - preflights := []*provider.Preflight{} - if prov.Name() == api.ProviderGCP { - preflights = algorithms.Filter(prov.Preflights(), func(pre *provider.Preflight) bool { - return pre.Name == string(provider.PreflightCheckEnabledServices) - }) - } - - for _, pre := range preflights { - if err := pre.Validate(); err != nil { - return err - } - } - return nil -} diff --git a/pkg/server/types.go b/pkg/server/types.go deleted file mode 100644 index 4487e6d77..000000000 --- a/pkg/server/types.go +++ /dev/null @@ -1,59 +0,0 @@ -package server - -type Workspace struct { - Cluster string `json:"cluster"` - Project string `json:"project"` - Region string `json:"region"` - Bucket string `json:"bucket"` - BucketPrefix string `json:"bucket_prefix"` - Subdomain string `json:"subdomain"` -} - -type Aws struct { - AccessKeyId string `json:"access_key_id"` - SecretAccessKey string `json:"secret_access_key"` -} - -type Gcp struct { - ApplicationCredentials string `json:"application_credentials"` -} - -type Azure struct { - TenantId string `json:"tenant_id"` - ClientId string `json:"client_id"` - ClientSecret string `json:"client_secret"` - StorageAccount string `json:"storage_account"` - SubscriptionId string `json:"subscription_id"` -} - -type Credentials struct { - Aws *Aws `json:"aws"` - Gcp *Gcp `json:"gcp"` - Azure *Azure `json:"azure"` -} - -type User struct { - GitUser string `json:"gitUser"` - Email string `json:"email"` - Name string `json:"name"` - AccessToken string `json:"access_token"` -} - -type GitInfo struct { - Username string `json:"username"` - Email string `json:"email"` -} - -type SetupRequest struct { - Workspace *Workspace `json:"workspace"` - Credentials *Credentials `json:"credentials"` - User *User `json:"user"` - Provider string `json:"provider"` - AesKey string `json:"aes_key"` - GitUrl string `json:"git_url"` - GitInfo *GitInfo `json:"git_info"` - SshPublicKey string `json:"ssh_public_key"` - SshPrivateKey string `json:"ssh_private_key"` - IsDemo bool `json:"is_demo"` - Context map[string]interface{} -} diff --git a/pkg/server/utils.go b/pkg/server/utils.go deleted file mode 100644 index 8946a8958..000000000 --- a/pkg/server/utils.go +++ /dev/null @@ -1,59 +0,0 @@ -package server - -import ( - "bytes" - "fmt" - "os" - "os/exec" - "path/filepath" - "strings" - - "github.com/gin-gonic/gin" - "github.com/mitchellh/go-homedir" - "github.com/pluralsh/plural-cli/pkg/utils" -) - -func serverFunc(f func(c *gin.Context) error) func(c *gin.Context) { - return func(c *gin.Context) { - if err := f(c); err != nil { - _ = c.Error(err) - } - } -} - -func toProvider(prov string) string { - prov = strings.ToLower(prov) - if prov == "gcp" { - return "google" - } - return prov -} - -func marker(name string) { - if file, err := os.Create(markfile(name)); err == nil { - file.Close() - } -} - -func marked(name string) bool { - return utils.Exists(markfile(name)) -} - -func markfile(name string) string { - p, _ := homedir.Expand("~/.plural") - return filepath.Join(p, fmt.Sprintf("%s.mark", name)) -} - -func execCmd(command string, args ...string) error { - _, err := execCmdWithOutput(command, args...) - return err -} - -func execCmdWithOutput(command string, args ...string) (string, error) { - var buff bytes.Buffer - cmd := exec.Command(command, args...) - cmd.Stdout = &buff - cmd.Stderr = &buff - err := cmd.Run() - return buff.String(), err -} diff --git a/pkg/utils/git/remote.go b/pkg/utils/git/remote.go index db8af2238..f33b670a0 100644 --- a/pkg/utils/git/remote.go +++ b/pkg/utils/git/remote.go @@ -4,7 +4,6 @@ import ( e "errors" "fmt" "os" - "strings" gogit "github.com/go-git/go-git/v5" "github.com/go-git/go-git/v5/plumbing/transport" @@ -19,20 +18,6 @@ func Clone(auth transport.AuthMethod, url, path string) (*gogit.Repository, erro }) } -func Repair(root string) error { - _, err := git(root, "diff-index", "--quiet", "HEAD", "--") - if err == nil { - return nil - } - - diff, _ := git(root, "--no-pager", "diff") - if strings.TrimSpace(diff) == "" && err != nil { - return Sync(root, "committing new encrypted files", false) - } - - return e.New("There were non-repairable changes in your local git repository, you'll need to investigate them manually") -} - func Sync(root, msg string, force bool) error { if res, err := git(root, "add", "."); err != nil { return errors.ErrorWrap(e.New(res), "`git add .` failed") diff --git a/pkg/wkspace/minimal.go b/pkg/wkspace/minimal.go deleted file mode 100644 index 97ad034db..000000000 --- a/pkg/wkspace/minimal.go +++ /dev/null @@ -1,17 +0,0 @@ -package wkspace - -import ( - "io" - "text/template" - - "github.com/pluralsh/plural-cli/pkg/output" -) - -func FormatValues(w io.Writer, vals string, output *output.Output) (err error) { - tmpl, err := template.New("gotpl").Parse(vals) - if err != nil { - return - } - err = tmpl.Execute(w, map[string]interface{}{"Import": *output}) - return -} From 61c4f07100c3583428b7b92946a5c4829aef52e4 Mon Sep 17 00:00:00 2001 From: Marcin Maciaszczyk Date: Tue, 10 Dec 2024 10:07:45 +0100 Subject: [PATCH 31/37] move stacks directly under cd category --- cmd/command/ai/{help.go => ai.go} | 0 cmd/command/auth/auth.go | 2 +- cmd/command/cd/cd.go | 1 - cmd/command/plural/plural.go | 2 + .../{cd/cd_stacks.go => stacks/stacks.go} | 50 +++++++++++++++---- cmd/command/version/version.go | 2 +- 6 files changed, 44 insertions(+), 13 deletions(-) rename cmd/command/ai/{help.go => ai.go} (100%) rename cmd/command/{cd/cd_stacks.go => stacks/stacks.go} (73%) diff --git a/cmd/command/ai/help.go b/cmd/command/ai/ai.go similarity index 100% rename from cmd/command/ai/help.go rename to cmd/command/ai/ai.go diff --git a/cmd/command/auth/auth.go b/cmd/command/auth/auth.go index 2310253d7..2edb7d939 100644 --- a/cmd/command/auth/auth.go +++ b/cmd/command/auth/auth.go @@ -22,7 +22,7 @@ func Command(clients client.Plural) cli.Command { } return cli.Command{ Name: "auth", - Usage: "Handles authentication to the plural api", + Usage: "handles authentication to the plural api", Subcommands: p.authCommands(), } } diff --git a/cmd/command/cd/cd.go b/cmd/command/cd/cd.go index 2e36a6b74..b3edbbbb4 100644 --- a/cmd/command/cd/cd.go +++ b/cmd/command/cd/cd.go @@ -74,7 +74,6 @@ func Commands(clients client.Plural, helmConfiguration *action.Configuration) [] p.cdPipelines(), p.cdNotifications(), p.cdSettings(), - p.cdStacks(), { Name: "install", Action: p.handleInstallDeploymentsOperator, diff --git a/cmd/command/plural/plural.go b/cmd/command/plural/plural.go index 9cb51170a..69962cb3d 100644 --- a/cmd/command/plural/plural.go +++ b/cmd/command/plural/plural.go @@ -12,6 +12,7 @@ import ( "github.com/pluralsh/plural-cli/cmd/command/mgmt" "github.com/pluralsh/plural-cli/cmd/command/pr" "github.com/pluralsh/plural-cli/cmd/command/profile" + "github.com/pluralsh/plural-cli/cmd/command/stacks" "github.com/pluralsh/plural-cli/cmd/command/up" "github.com/pluralsh/plural-cli/cmd/command/version" "github.com/pluralsh/plural-cli/pkg/client" @@ -109,6 +110,7 @@ func CreateNewApp(plural *Plural) *cli.App { down.Command(), mgmt.Command(plural.Plural), profile.Command(), + stacks.Command(plural.Plural), pr.Command(plural.Plural), cmdinit.Command(plural.Plural), up.Command(plural.Plural), diff --git a/cmd/command/cd/cd_stacks.go b/cmd/command/stacks/stacks.go similarity index 73% rename from cmd/command/cd/cd_stacks.go rename to cmd/command/stacks/stacks.go index 228755a33..04ad54dc2 100644 --- a/cmd/command/cd/cd_stacks.go +++ b/cmd/command/stacks/stacks.go @@ -1,28 +1,58 @@ -package cd +package stacks import ( "fmt" - "github.com/pluralsh/plural-cli/pkg/common" - "github.com/AlecAivazis/survey/v2" - "github.com/samber/lo" - "github.com/urfave/cli" - + "github.com/pluralsh/plural-cli/pkg/client" + "github.com/pluralsh/plural-cli/pkg/common" "github.com/pluralsh/plural-cli/pkg/config" "github.com/pluralsh/plural-cli/pkg/stacks" "github.com/pluralsh/plural-cli/pkg/utils/git" + "github.com/samber/lo" + "github.com/urfave/cli" ) -func (p *Plural) cdStacks() cli.Command { +func init() { + consoleToken = "" + consoleURL = "" +} + +var consoleToken string +var consoleURL string + +type Plural struct { + client.Plural +} + +func Command(clients client.Plural) cli.Command { + p := Plural{ + Plural: clients, + } return cli.Command{ Name: "stacks", - Subcommands: p.cdStacksCommands(), - Usage: "manage CD stacks", + Aliases: []string{"s"}, + Usage: "manage infrastructure stacks", + Subcommands: p.stacksCommands(), + Category: "CD", + Flags: []cli.Flag{ + cli.StringFlag{ + Name: "token", + Usage: "console token", + EnvVar: "PLURAL_CONSOLE_TOKEN", + Destination: &consoleToken, + }, + cli.StringFlag{ + Name: "url", + Usage: "console url address", + EnvVar: "PLURAL_CONSOLE_URL", + Destination: &consoleURL, + }, + }, } } -func (p *Plural) cdStacksCommands() []cli.Command { +func (p *Plural) stacksCommands() []cli.Command { return []cli.Command{ { Name: "gen-backend", diff --git a/cmd/command/version/version.go b/cmd/command/version/version.go index 852803c20..cfb00d9f2 100644 --- a/cmd/command/version/version.go +++ b/cmd/command/version/version.go @@ -9,7 +9,7 @@ func Command() cli.Command { return cli.Command{ Name: "version", Aliases: []string{"v", "vsn"}, - Usage: "Gets cli version info", + Usage: "gets plural cli version info", Action: common.VersionInfo, } } From 1cdcaf01af018c3f939e6c996ea6c67d80e8d50b Mon Sep 17 00:00:00 2001 From: Marcin Maciaszczyk Date: Tue, 10 Dec 2024 10:13:07 +0100 Subject: [PATCH 32/37] update descriptions --- cmd/command/mgmt/managment.go | 2 +- cmd/command/pr/pr.go | 2 +- cmd/command/profile/profile.go | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/cmd/command/mgmt/managment.go b/cmd/command/mgmt/managment.go index 4b799decd..94a1af7c9 100644 --- a/cmd/command/mgmt/managment.go +++ b/cmd/command/mgmt/managment.go @@ -17,7 +17,7 @@ func Command(clients client.Plural) cli.Command { return cli.Command{ Name: "management", Aliases: []string{"mgmt"}, - Usage: "Commands for managing installations in your workspace", + Usage: "manages installations in your workspace", Subcommands: p.managementCommands(), Category: "Workspace", } diff --git a/cmd/command/pr/pr.go b/cmd/command/pr/pr.go index 47a7ad573..76c95d560 100644 --- a/cmd/command/pr/pr.go +++ b/cmd/command/pr/pr.go @@ -33,7 +33,7 @@ func Command(clients client.Plural) cli.Command { return cli.Command{ Name: "pull-requests", Aliases: []string{"pr"}, - Usage: "Generate and manage pull requests", + Usage: "generates and manages pull requests", Subcommands: p.prCommands(), Category: "CD", Flags: []cli.Flag{ diff --git a/cmd/command/profile/profile.go b/cmd/command/profile/profile.go index e5aa4bd75..dc65e168d 100644 --- a/cmd/command/profile/profile.go +++ b/cmd/command/profile/profile.go @@ -12,7 +12,7 @@ import ( func Command() cli.Command { return cli.Command{ Name: "profile", - Usage: "Commands for managing config profiles for plural", + Usage: "manages config profiles for plural", Subcommands: profileCommands(), Category: "User Profile", } From bf2c9ca3e5ab57b057ae60db69187adee972d5cf Mon Sep 17 00:00:00 2001 From: Marcin Maciaszczyk Date: Tue, 10 Dec 2024 10:32:39 +0100 Subject: [PATCH 33/37] remove ui --- Makefile | 27 - hack/include/tools.mk | 14 +- pkg/api/models.go | 50 - pkg/application/apps.go | 74 - pkg/application/clientset.go | 41 - pkg/application/register.go | 35 - pkg/application/waiter.go | 24 - pkg/common/constants.go | 4 +- pkg/common/validation.go | 6 - pkg/diff/tee.go | 15 - pkg/executor/step.go | 139 - pkg/helm/downloader.go | 42 - pkg/helm/push.go | 67 - pkg/kubernetes/kube.go | 21 +- pkg/manifest/context.go | 4 - pkg/ui/bindings.go | 16 - pkg/ui/client.go | 152 - pkg/ui/ui.go | 41 - pkg/ui/web/.eslintrc | 3 - pkg/ui/web/.gitignore | 9 - pkg/ui/web/.graphqlconfig | 15 - pkg/ui/web/.yarn/releases/yarn-3.4.1.cjs | 873 -- pkg/ui/web/.yarnrc.yml | 2 - pkg/ui/web/codegen.yml | 20 - pkg/ui/web/index.html | 17 - pkg/ui/web/package-lock.json | 1483 -- pkg/ui/web/package.json | 61 - pkg/ui/web/package.json.md5 | 1 - pkg/ui/web/public/favicon.ico | Bin 15406 -> 0 bytes .../fonts/ABCMonumentGroteskMono-Heavy.woff | Bin 52128 -> 0 bytes .../fonts/ABCMonumentGroteskMono-Medium.woff | Bin 50460 -> 0 bytes .../fonts/ABCMonumentGroteskMono-Regular.woff | Bin 48756 -> 0 bytes .../ABCMonumentGroteskSemi-Mono-Heavy.woff | Bin 75136 -> 0 bytes .../ABCMonumentGroteskSemi-Mono-Medium.woff | Bin 65432 -> 0 bytes .../ABCMonumentGroteskSemi-Mono-Regular.woff | Bin 58548 -> 0 bytes .../public/fonts/monument-bold-italic.woff | Bin 68804 -> 0 bytes pkg/ui/web/public/fonts/monument-bold.woff | Bin 66320 -> 0 bytes pkg/ui/web/public/fonts/monument-bold.woff2 | Bin 50112 -> 0 bytes .../public/fonts/monument-medium-italic.woff | Bin 71344 -> 0 bytes pkg/ui/web/public/fonts/monument-medium.woff | Bin 69176 -> 0 bytes .../public/fonts/monument-regular-italic.woff | Bin 67540 -> 0 bytes pkg/ui/web/public/fonts/monument-regular.otf | Bin 95076 -> 0 bytes pkg/ui/web/public/fonts/monument-regular.woff | Bin 48756 -> 0 bytes .../public/logos/plural-full-logo-black.svg | 1 - .../public/logos/plural-full-logo-white.svg | 1 - .../logos/plural-logomark-only-black.svg | 1 - .../logos/plural-logomark-only-white.svg | 1 - .../logos/plural-logotype-only-black.svg | 1 - .../logos/plural-logotype-only-white.svg | 1 - pkg/ui/web/schema/schema.graphql | 3144 ----- pkg/ui/web/src/Plural.tsx | 54 - pkg/ui/web/src/components/loader/Loader.tsx | 20 - pkg/ui/web/src/context/wails.ts | 17 - pkg/ui/web/src/graphql/account.graphql | 64 - pkg/ui/web/src/graphql/artifacts.graphql | 32 - pkg/ui/web/src/graphql/charts.graphql | 91 - pkg/ui/web/src/graphql/dns.graphql | 28 - pkg/ui/web/src/graphql/docker.graphql | 44 - pkg/ui/web/src/graphql/domains.graphql | 5 - pkg/ui/web/src/graphql/generated/graphql.ts | 9949 -------------- pkg/ui/web/src/graphql/groups.graphql | 55 - pkg/ui/web/src/graphql/incidents.graphql | 82 - pkg/ui/web/src/graphql/installations.graphql | 38 - pkg/ui/web/src/graphql/integrations.graphql | 27 - pkg/ui/web/src/graphql/invite.graphql | 28 - pkg/ui/web/src/graphql/metrics.graphql | 5 - pkg/ui/web/src/graphql/misc.graphql | 4 - pkg/ui/web/src/graphql/oauth.graphql | 24 - pkg/ui/web/src/graphql/payments.graphql | 142 - pkg/ui/web/src/graphql/recipes.graphql | 134 - pkg/ui/web/src/graphql/repos.graphql | 160 - pkg/ui/web/src/graphql/scaffolds.graphql | 10 - pkg/ui/web/src/graphql/shells.graphql | 31 - pkg/ui/web/src/graphql/terraforms.graphql | 47 - pkg/ui/web/src/graphql/tests.graphql | 40 - pkg/ui/web/src/graphql/upgrades.graphql | 33 - pkg/ui/web/src/graphql/users.graphql | 278 - pkg/ui/web/src/graphql/versions.graphql | 23 - pkg/ui/web/src/grommet/fileInputTheme.tsx | 57 - pkg/ui/web/src/grommet/theme.ts | 234 - pkg/ui/web/src/hooks/useWails.ts | 89 - pkg/ui/web/src/layout/Header.tsx | 45 - pkg/ui/web/src/main.tsx | 9 - .../web/src/routes/installer/Application.tsx | 138 - .../src/routes/installer/Configuration.tsx | 111 - .../installer/ConfigurationFileInput.tsx | 52 - .../routes/installer/ConfigurationItem.tsx | 254 - pkg/ui/web/src/routes/installer/Installer.tsx | 137 - pkg/ui/web/src/routes/installer/context.tsx | 11 - pkg/ui/web/src/routes/installer/helpers.tsx | 128 - pkg/ui/web/src/routes/installer/route.tsx | 12 - pkg/ui/web/src/routes/nextsteps/NextSteps.tsx | 87 - pkg/ui/web/src/routes/nextsteps/route.tsx | 14 - pkg/ui/web/src/routes/root.tsx | 54 - pkg/ui/web/src/routes/router.tsx | 15 - pkg/ui/web/src/routes/routes.ts | 6 - pkg/ui/web/src/services/apollo.tsx | 67 - pkg/ui/web/src/services/wails.ts | 63 - pkg/ui/web/src/styled/fonts.ts | 87 - pkg/ui/web/src/styled/global.ts | 22 - pkg/ui/web/src/styled/scrollbar.ts | 5 - pkg/ui/web/src/styled/theme.ts | 11 - pkg/ui/web/src/types/client.d.ts | 31 - pkg/ui/web/src/types/styled.d.ts | 12 - pkg/ui/web/src/vite-env.d.ts | 1 - pkg/ui/web/style.css | 3 - pkg/ui/web/tsconfig.json | 32 - pkg/ui/web/tsconfig.node.json | 11 - pkg/ui/web/vite.config.ts | 7 - pkg/ui/web/wailsjs/go/models.ts | 77 - pkg/ui/web/wailsjs/go/ui/Client.d.ts | 13 - pkg/ui/web/wailsjs/go/ui/Client.js | 23 - pkg/ui/web/wailsjs/go/ui/Window.d.ts | 6 - pkg/ui/web/wailsjs/go/ui/Window.js | 11 - pkg/ui/web/wailsjs/runtime/package.json | 24 - pkg/ui/web/wailsjs/runtime/runtime.d.ts | 235 - pkg/ui/web/wailsjs/runtime/runtime.js | 202 - pkg/ui/web/yarn.lock | 11353 ---------------- pkg/ui/window.go | 48 - plural/stacks/data.yaml | 29 - plural/stacks/devops.yaml | 35 - plural/stacks/security.yaml | 29 - wails.json | 15 - 123 files changed, 9 insertions(+), 31767 deletions(-) delete mode 100644 pkg/application/apps.go delete mode 100644 pkg/application/clientset.go delete mode 100644 pkg/application/register.go delete mode 100644 pkg/application/waiter.go delete mode 100644 pkg/diff/tee.go delete mode 100644 pkg/helm/downloader.go delete mode 100644 pkg/helm/push.go delete mode 100644 pkg/ui/bindings.go delete mode 100644 pkg/ui/client.go delete mode 100644 pkg/ui/ui.go delete mode 100644 pkg/ui/web/.eslintrc delete mode 100644 pkg/ui/web/.gitignore delete mode 100644 pkg/ui/web/.graphqlconfig delete mode 100755 pkg/ui/web/.yarn/releases/yarn-3.4.1.cjs delete mode 100644 pkg/ui/web/.yarnrc.yml delete mode 100644 pkg/ui/web/codegen.yml delete mode 100644 pkg/ui/web/index.html delete mode 100644 pkg/ui/web/package-lock.json delete mode 100644 pkg/ui/web/package.json delete mode 100755 pkg/ui/web/package.json.md5 delete mode 100644 pkg/ui/web/public/favicon.ico delete mode 100644 pkg/ui/web/public/fonts/ABCMonumentGroteskMono-Heavy.woff delete mode 100644 pkg/ui/web/public/fonts/ABCMonumentGroteskMono-Medium.woff delete mode 100644 pkg/ui/web/public/fonts/ABCMonumentGroteskMono-Regular.woff delete mode 100644 pkg/ui/web/public/fonts/ABCMonumentGroteskSemi-Mono-Heavy.woff delete mode 100644 pkg/ui/web/public/fonts/ABCMonumentGroteskSemi-Mono-Medium.woff delete mode 100644 pkg/ui/web/public/fonts/ABCMonumentGroteskSemi-Mono-Regular.woff delete mode 100644 pkg/ui/web/public/fonts/monument-bold-italic.woff delete mode 100644 pkg/ui/web/public/fonts/monument-bold.woff delete mode 100644 pkg/ui/web/public/fonts/monument-bold.woff2 delete mode 100644 pkg/ui/web/public/fonts/monument-medium-italic.woff delete mode 100644 pkg/ui/web/public/fonts/monument-medium.woff delete mode 100644 pkg/ui/web/public/fonts/monument-regular-italic.woff delete mode 100644 pkg/ui/web/public/fonts/monument-regular.otf delete mode 100644 pkg/ui/web/public/fonts/monument-regular.woff delete mode 100644 pkg/ui/web/public/logos/plural-full-logo-black.svg delete mode 100644 pkg/ui/web/public/logos/plural-full-logo-white.svg delete mode 100644 pkg/ui/web/public/logos/plural-logomark-only-black.svg delete mode 100644 pkg/ui/web/public/logos/plural-logomark-only-white.svg delete mode 100644 pkg/ui/web/public/logos/plural-logotype-only-black.svg delete mode 100644 pkg/ui/web/public/logos/plural-logotype-only-white.svg delete mode 100644 pkg/ui/web/schema/schema.graphql delete mode 100644 pkg/ui/web/src/Plural.tsx delete mode 100644 pkg/ui/web/src/components/loader/Loader.tsx delete mode 100644 pkg/ui/web/src/context/wails.ts delete mode 100644 pkg/ui/web/src/graphql/account.graphql delete mode 100644 pkg/ui/web/src/graphql/artifacts.graphql delete mode 100644 pkg/ui/web/src/graphql/charts.graphql delete mode 100644 pkg/ui/web/src/graphql/dns.graphql delete mode 100644 pkg/ui/web/src/graphql/docker.graphql delete mode 100644 pkg/ui/web/src/graphql/domains.graphql delete mode 100644 pkg/ui/web/src/graphql/generated/graphql.ts delete mode 100644 pkg/ui/web/src/graphql/groups.graphql delete mode 100644 pkg/ui/web/src/graphql/incidents.graphql delete mode 100644 pkg/ui/web/src/graphql/installations.graphql delete mode 100644 pkg/ui/web/src/graphql/integrations.graphql delete mode 100644 pkg/ui/web/src/graphql/invite.graphql delete mode 100644 pkg/ui/web/src/graphql/metrics.graphql delete mode 100644 pkg/ui/web/src/graphql/misc.graphql delete mode 100644 pkg/ui/web/src/graphql/oauth.graphql delete mode 100644 pkg/ui/web/src/graphql/payments.graphql delete mode 100644 pkg/ui/web/src/graphql/recipes.graphql delete mode 100644 pkg/ui/web/src/graphql/repos.graphql delete mode 100644 pkg/ui/web/src/graphql/scaffolds.graphql delete mode 100644 pkg/ui/web/src/graphql/shells.graphql delete mode 100644 pkg/ui/web/src/graphql/terraforms.graphql delete mode 100644 pkg/ui/web/src/graphql/tests.graphql delete mode 100644 pkg/ui/web/src/graphql/upgrades.graphql delete mode 100644 pkg/ui/web/src/graphql/users.graphql delete mode 100644 pkg/ui/web/src/graphql/versions.graphql delete mode 100644 pkg/ui/web/src/grommet/fileInputTheme.tsx delete mode 100644 pkg/ui/web/src/grommet/theme.ts delete mode 100644 pkg/ui/web/src/hooks/useWails.ts delete mode 100644 pkg/ui/web/src/layout/Header.tsx delete mode 100644 pkg/ui/web/src/main.tsx delete mode 100644 pkg/ui/web/src/routes/installer/Application.tsx delete mode 100644 pkg/ui/web/src/routes/installer/Configuration.tsx delete mode 100644 pkg/ui/web/src/routes/installer/ConfigurationFileInput.tsx delete mode 100644 pkg/ui/web/src/routes/installer/ConfigurationItem.tsx delete mode 100644 pkg/ui/web/src/routes/installer/Installer.tsx delete mode 100644 pkg/ui/web/src/routes/installer/context.tsx delete mode 100644 pkg/ui/web/src/routes/installer/helpers.tsx delete mode 100644 pkg/ui/web/src/routes/installer/route.tsx delete mode 100644 pkg/ui/web/src/routes/nextsteps/NextSteps.tsx delete mode 100644 pkg/ui/web/src/routes/nextsteps/route.tsx delete mode 100644 pkg/ui/web/src/routes/root.tsx delete mode 100644 pkg/ui/web/src/routes/router.tsx delete mode 100644 pkg/ui/web/src/routes/routes.ts delete mode 100644 pkg/ui/web/src/services/apollo.tsx delete mode 100644 pkg/ui/web/src/services/wails.ts delete mode 100644 pkg/ui/web/src/styled/fonts.ts delete mode 100644 pkg/ui/web/src/styled/global.ts delete mode 100644 pkg/ui/web/src/styled/scrollbar.ts delete mode 100644 pkg/ui/web/src/styled/theme.ts delete mode 100644 pkg/ui/web/src/types/client.d.ts delete mode 100644 pkg/ui/web/src/types/styled.d.ts delete mode 100644 pkg/ui/web/src/vite-env.d.ts delete mode 100644 pkg/ui/web/style.css delete mode 100644 pkg/ui/web/tsconfig.json delete mode 100644 pkg/ui/web/tsconfig.node.json delete mode 100644 pkg/ui/web/vite.config.ts delete mode 100755 pkg/ui/web/wailsjs/go/models.ts delete mode 100755 pkg/ui/web/wailsjs/go/ui/Client.d.ts delete mode 100755 pkg/ui/web/wailsjs/go/ui/Client.js delete mode 100755 pkg/ui/web/wailsjs/go/ui/Window.d.ts delete mode 100755 pkg/ui/web/wailsjs/go/ui/Window.js delete mode 100755 pkg/ui/web/wailsjs/runtime/package.json delete mode 100755 pkg/ui/web/wailsjs/runtime/runtime.d.ts delete mode 100755 pkg/ui/web/wailsjs/runtime/runtime.js delete mode 100644 pkg/ui/web/yarn.lock delete mode 100644 pkg/ui/window.go delete mode 100644 plural/stacks/data.yaml delete mode 100644 plural/stacks/devops.yaml delete mode 100644 plural/stacks/security.yaml delete mode 100644 wails.json diff --git a/Makefile b/Makefile index ac94b9eea..21389767e 100644 --- a/Makefile +++ b/Makefile @@ -21,10 +21,6 @@ LDFLAGS ?= $(BASE_LDFLAGS) $\ -X "$(PACKAGE)/pkg/common.Date=$(APP_DATE)" $\ -X "$(PACKAGE)/pkg/scm.GitlabClientSecret=${GITLAB_CLIENT_SECRET}" $\ -X "$(PACKAGE)/pkg/scm.BitbucketClientSecret=${BITBUCKET_CLIENT_SECRET}" -WAILS_TAGS ?= desktop,production,ui,debug -WAILS_BINDINGS_TAGS ?= bindings,generate -WAILS_BINDINGS_BINARY_NAME ?= wailsbindings -TAGS ?= $(WAILS_TAGS) OUTFILE ?= plural.o GOBIN ?= go env GOBIN @@ -45,29 +41,6 @@ install: build-cli: ## Build a CLI binary for the host architecture without embedded UI go build -ldflags='$(LDFLAGS)' -o $(OUTFILE) ./cmd/plural -.PHONY: build-cli-ui -build-cli-ui: $(PRE) generate-bindings ## Build a CLI binary for the host architecture with embedded UI - CGO_LDFLAGS=$(CGO_LDFLAGS) go build -tags $(WAILS_TAGS) -ldflags='$(LDFLAGS)' -o $(OUTFILE) ./cmd/plural - -.PHONY: build-web -build-web: ## Build just the embedded UI - cd pkg/ui/web && yarn --immutable && yarn build - -.PHONY: run-web -run-web: $(PRE) ## Run the UI for development - @CGO_LDFLAGS=$(CGO_LDFLAGS) wails dev -tags ui -browser -skipbindings - -# This is somewhat an equivalent of wails `GenerateBindings` method. -# Ref: https://github.com/wailsapp/wails/blob/master/v2/pkg/commands/bindings/bindings.go#L28 -.PHONY: generate-bindings -generate-bindings: build-web ## Generate backend bindings for the embedded UI - @echo Building bindings binary - @CGO_LDFLAGS=$(CGO_LDFLAGS) go build -tags $(WAILS_BINDINGS_TAGS) -ldflags='$(LDFLAGS)' -o $(WAILS_BINDINGS_BINARY_NAME) . - @echo Generating bindings - @./$(WAILS_BINDINGS_BINARY_NAME) > /dev/null 2>&1 - @echo Cleaning up - @rm $(WAILS_BINDINGS_BINARY_NAME) - .PHONY: release release: GOOS=$(GOOS) GOARCH=$(GOARCH) go build -ldflags='$(LDFLAGS)' -o $(OUTFILE) ./cmd/plural diff --git a/hack/include/tools.mk b/hack/include/tools.mk index df9a8a6a1..a875f070d 100644 --- a/hack/include/tools.mk +++ b/hack/include/tools.mk @@ -1,6 +1,3 @@ -WAILS_BINARY := $(shell which wails) -WAILS_VERSION := v2.4.1 - GO_BINARY := $(shell which go) GO_MAJOR_VERSION = $(shell go version | cut -c 14- | cut -d' ' -f1 | cut -d'.' -f1) GO_MINOR_VERSION = $(shell go version | cut -c 14- | cut -d' ' -f1 | cut -d'.' -f2) @@ -8,7 +5,7 @@ MIN_GO_MAJOR_VERSION = 1 MIN_GO_MINOR_VERSION = 19 .PHONY: install-tools -install-tools: --ensure-go --ensure-wails ## Install required dependencies to run make targets +install-tools: --ensure-go ## Install required dependencies to run make targets .PHONY: --ensure-go --ensure-go: @@ -22,12 +19,3 @@ endif elif [ $(GO_MINOR_VERSION) -lt $(MIN_GO_MINOR_VERSION) ] ; then \ exit 1; \ fi - -.PHONY: --ensure-wails ---ensure-wails: -ifndef WAILS_BINARY - @echo "[tools] downloading wails..." - @go install github.com/wailsapp/wails/v2/cmd/wails@$(WAILS_VERSION) -else - @echo "[tools] wails already exists" -endif \ No newline at end of file diff --git a/pkg/api/models.go b/pkg/api/models.go index 6e2ba454e..5bb6e590d 100644 --- a/pkg/api/models.go +++ b/pkg/api/models.go @@ -90,13 +90,6 @@ type Wirings struct { Helm map[string]string } -type TerraformInstallation struct { - Id string - Installation *Installation - Terraform *Terraform - Version *Version -} - type OAuthConfiguration struct { Issuer string AuthorizationEndpoint string @@ -125,40 +118,6 @@ type Installation struct { AcmeSecret string } -type CloudShell struct { - Id string - AesKey string `json:"aesKey"` - GitUrl string `json:"gitUrl"` -} - -type RepositoryEdge struct { - Node *Repository -} - -type InstallationEdge struct { - Node *Installation -} - -type ChartEdge struct { - Node *Chart -} - -type TerraformEdge struct { - Node *Terraform -} - -type VersionEdge struct { - Node *Version -} - -type ChartInstallationEdge struct { - Node *ChartInstallation -} - -type TerraformInstallationEdge struct { - Node *TerraformInstallation -} - type Token struct { Token string } @@ -183,15 +142,6 @@ type Recipe struct { RecipeDependencies []*Recipe `yaml:"recipeDependencies" json:"recipeDependencies"` } -type Stack struct { - Id string - Name string - Provider string - Featured bool - Description string - Bundles []*Recipe -} - type RecipeTest struct { Name string Type string diff --git a/pkg/application/apps.go b/pkg/application/apps.go deleted file mode 100644 index 5f5291b92..000000000 --- a/pkg/application/apps.go +++ /dev/null @@ -1,74 +0,0 @@ -package application - -import ( - "context" - - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/watch" - "k8s.io/client-go/kubernetes/scheme" - "k8s.io/client-go/rest" - "sigs.k8s.io/application/api/v1beta1" -) - -type ApplicationInterface interface { - List(ctx context.Context, opts metav1.ListOptions) (*v1beta1.ApplicationList, error) - Get(ctx context.Context, name string, options metav1.GetOptions) (*v1beta1.Application, error) - Create(ctx context.Context, app *v1beta1.Application) (*v1beta1.Application, error) - Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) - // ... -} - -type applicationClient struct { - restClient rest.Interface - ns string -} - -func (c *applicationClient) List(ctx context.Context, opts metav1.ListOptions) (*v1beta1.ApplicationList, error) { - result := v1beta1.ApplicationList{} - err := c.restClient. - Get(). - Namespace(c.ns). - Resource("applications"). - VersionedParams(&opts, scheme.ParameterCodec). - Do(ctx). - Into(&result) - - return &result, err -} - -func (c *applicationClient) Get(ctx context.Context, name string, opts metav1.GetOptions) (*v1beta1.Application, error) { - result := v1beta1.Application{} - err := c.restClient. - Get(). - Namespace(c.ns). - Resource("applications"). - Name(name). - VersionedParams(&opts, scheme.ParameterCodec). - Do(ctx). - Into(&result) - - return &result, err -} - -func (c *applicationClient) Create(ctx context.Context, app *v1beta1.Application) (*v1beta1.Application, error) { - result := v1beta1.Application{} - err := c.restClient. - Post(). - Namespace(c.ns). - Resource("applications"). - Body(app). - Do(ctx). - Into(&result) - - return &result, err -} - -func (c *applicationClient) Watch(ctx context.Context, opts metav1.ListOptions) (watch.Interface, error) { - opts.Watch = true - return c.restClient. - Get(). - Namespace(c.ns). - Resource("applications"). - VersionedParams(&opts, scheme.ParameterCodec). - Watch(ctx) -} diff --git a/pkg/application/clientset.go b/pkg/application/clientset.go deleted file mode 100644 index 027fcd294..000000000 --- a/pkg/application/clientset.go +++ /dev/null @@ -1,41 +0,0 @@ -package application - -import ( - "k8s.io/client-go/kubernetes/scheme" - "k8s.io/client-go/rest" - "sigs.k8s.io/application/api/v1beta1" -) - -type ApplicationV1Beta1Interface interface { - Applications(namespace string) ApplicationInterface -} - -type ApplicationV1Beta1Client struct { - restClient rest.Interface -} - -func NewForConfig(c *rest.Config) (*ApplicationV1Beta1Client, error) { - if err := AddToScheme(scheme.Scheme); err != nil { - return nil, err - } - - config := *c - config.ContentConfig.GroupVersion = &v1beta1.GroupVersion - config.APIPath = "/apis" - config.NegotiatedSerializer = scheme.Codecs.WithoutConversion() - config.UserAgent = rest.DefaultKubernetesUserAgent() - - client, err := rest.RESTClientFor(&config) - if err != nil { - return nil, err - } - - return &ApplicationV1Beta1Client{restClient: client}, nil -} - -func (c *ApplicationV1Beta1Client) Applications(namespace string) ApplicationInterface { - return &applicationClient{ - restClient: c.restClient, - ns: namespace, - } -} diff --git a/pkg/application/register.go b/pkg/application/register.go deleted file mode 100644 index b3c57b22c..000000000 --- a/pkg/application/register.go +++ /dev/null @@ -1,35 +0,0 @@ -package application - -import ( - v1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/apimachinery/pkg/runtime" - "k8s.io/apimachinery/pkg/runtime/schema" - utilruntime "k8s.io/apimachinery/pkg/util/runtime" - "sigs.k8s.io/application/api/v1beta1" -) - -var Scheme = runtime.NewScheme() -var localSchemeBuilder = runtime.SchemeBuilder{ - v1beta1.AddToScheme, -} - -// AddToScheme adds all types of this clientset into the given scheme. This allows composition -// of clientsets, like in: -// -// import ( -// "k8s.io/client-go/kubernetes" -// clientsetscheme "k8s.io/client-go/kubernetes/scheme" -// aggregatorclientsetscheme "k8s.io/kube-aggregator/pkg/client/clientset_generated/clientset/scheme" -// ) -// -// kclientset, _ := kubernetes.NewForConfig(c) -// _ = aggregatorclientsetscheme.AddToScheme(clientsetscheme.Scheme) -// -// After this, RawExtensions in Kubernetes types will serialize kube-aggregator types -// correctly. -var AddToScheme = localSchemeBuilder.AddToScheme - -func init() { - v1.AddToGroupVersion(Scheme, schema.GroupVersion{Version: "v1"}) - utilruntime.Must(AddToScheme(Scheme)) -} diff --git a/pkg/application/waiter.go b/pkg/application/waiter.go deleted file mode 100644 index 33c0ac50a..000000000 --- a/pkg/application/waiter.go +++ /dev/null @@ -1,24 +0,0 @@ -package application - -import ( - "context" - - metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" - "k8s.io/client-go/rest" - "sigs.k8s.io/application/api/v1beta1" -) - -func ListAll(kubeConf *rest.Config) ([]v1beta1.Application, error) { - apps, err := NewForConfig(kubeConf) - if err != nil { - return nil, err - } - - client := apps.Applications("") - l, err := client.List(context.Background(), metav1.ListOptions{}) - if err != nil { - return nil, err - } - - return l.Items, nil -} diff --git a/pkg/common/constants.go b/pkg/common/constants.go index 072cce165..dd964ee8e 100644 --- a/pkg/common/constants.go +++ b/pkg/common/constants.go @@ -10,7 +10,5 @@ const ( ) var ( - ErrNoGit = fmt.Errorf("Could not compare current workspace to origin. Do you have an `origin` remote configured, or does your repo not have an initial commit?") - ErrRemoteDiff = fmt.Errorf("Your local workspace is not in sync with remote. Either `git pull` recent changes or `git push` any missed changes. Also confirm you can authenticate to the origin remote, which you can see with `git remote -v`") - ErrUnlock = fmt.Errorf("could not decrypt your repo, this is likely due to using the wrong key at ~/.plural/key. The original key might be in a backup or on your previous machine.") + ErrUnlock = fmt.Errorf("could not decrypt your repo, this is likely due to using the wrong key at ~/.plural/key. The original key might be in a backup or on your previous machine.") ) diff --git a/pkg/common/validation.go b/pkg/common/validation.go index 400bef282..6a4c362df 100644 --- a/pkg/common/validation.go +++ b/pkg/common/validation.go @@ -40,12 +40,6 @@ func Affirmed(fn func(*cli.Context) error, msg string, envKey string) func(*cli. } } -func Highlighted(fn func(*cli.Context) error) func(*cli.Context) error { - return func(c *cli.Context) error { - return utils.HighlightError(fn(c)) - } -} - func Tracked(fn func(*cli.Context) error, event string) func(*cli.Context) error { return func(c *cli.Context) error { event := api.UserEventAttributes{Data: "", Event: event, Status: "OK"} diff --git a/pkg/diff/tee.go b/pkg/diff/tee.go deleted file mode 100644 index bca48628a..000000000 --- a/pkg/diff/tee.go +++ /dev/null @@ -1,15 +0,0 @@ -package diff - -import ( - "io" - "os" -) - -type TeeWriter struct { - File io.Writer -} - -func (tee *TeeWriter) Write(p []byte) (int, error) { - os.Stdout.Write(p) - return tee.File.Write(p) -} diff --git a/pkg/executor/step.go b/pkg/executor/step.go index 74a67a129..86a42fe0b 100644 --- a/pkg/executor/step.go +++ b/pkg/executor/step.go @@ -1,18 +1,5 @@ package executor -import ( - "fmt" - "io" - "os" - "os/exec" - "path/filepath" - "strings" - - "github.com/pluralsh/plural-cli/pkg/utils" - "github.com/pluralsh/plural-cli/pkg/utils/pathing" - "golang.org/x/mod/sumdb/dirhash" -) - type WrappedError struct { inner error Output string @@ -21,129 +8,3 @@ type WrappedError struct { func (we *WrappedError) Error() string { return we.inner.Error() } - -type Step struct { - Name string `hcl:",key"` - Wkdir string `hcl:"wkdir"` - Target string `hcl:"target"` - Command string `hcl:"command"` - Args []string `hcl:"args"` - Sha string `hcl:"sha"` - Retries int `hcl:"retries"` - Verbose bool `hcl:"verbose"` -} - -func SuppressedCommand(command string, args ...string) (cmd *exec.Cmd, output *OutputWriter) { - cmd = exec.Command(command, args...) - output = &OutputWriter{delegate: os.Stdout} - cmd.Stdout = output - cmd.Stderr = output - if utils.EnableDebug { - cmd.Env = os.Environ() - cmd.Env = append(cmd.Env, fmt.Sprintf("PLURAL_DEBUG_ENABLE=%t", true)) - } - return -} - -func RunCommand(cmd *exec.Cmd, output *OutputWriter) (err error) { - err = cmd.Run() - if err != nil { - out := output.Format() - fmt.Printf("\nOutput:\n\n%s\n", out) - err = &WrappedError{inner: err, Output: out} - return - } - - utils.Success("\u2713\n") - return -} - -func (step Step) Run(root string) error { - dir := pathing.SanitizeFilepath(filepath.Join(root, step.Wkdir)) - if step.Verbose && os.Getenv("ENABLE_COLOR") == "" { - cmd := exec.Command(step.Command, step.Args...) - cmd.Stdout = os.Stdout - cmd.Stderr = os.Stdout - cmd.Dir = dir - fmt.Println() - return cmd.Run() - } - - cmd, output := SuppressedCommand(step.Command, step.Args...) - cmd.Dir = dir - return RunCommand(cmd, output) -} - -func (step Step) Execute(root string, ignore []string) (string, error) { - current, err := MkHash(pathing.SanitizeFilepath(filepath.Join(root, step.Target)), ignore) - if err != nil { - return step.Sha, err - } - - utils.Highlight("%s %s ~> ", step.Command, strings.Join(step.Args, " ")) - if current == step.Sha { - utils.Success("no changes to be made for %s\n", step.Name) - return current, nil - } - - err = step.Run(root) - if err != nil { - if step.Retries > 0 { - step.Retries -= 1 - fmt.Printf("retrying command, number of retries remaining: %d\n", step.Retries) - return step.Execute(root, ignore) - } - - return step.Sha, err - } - - return current, err -} - -func MkHash(root string, ignore []string) (string, error) { - fi, err := os.Stat(root) - if err != nil { - return "", err - } - - switch mode := fi.Mode(); { - case mode.IsDir(): - return filteredHash(root, ignore) - default: - return utils.Sha256(root) - } -} - -func filteredHash(root string, ignore []string) (string, error) { - prefix := filepath.Base(root) - files, err := dirhash.DirFiles(root, prefix) - if err != nil { - return "", err - } - - keep := []string{} - for _, file := range files { - trimmed := strings.TrimPrefix(file, root) - if ignorePath(trimmed, ignore) { - continue - } - - keep = append(keep, file) - } - - osOpen := func(name string) (io.ReadCloser, error) { - return os.Open(pathing.SanitizeFilepath(filepath.Join(root, strings.TrimPrefix(name, prefix)))) - } - - return dirhash.Hash1(keep, osOpen) -} - -func ignorePath(file string, ignore []string) bool { - for _, pref := range ignore { - if strings.Contains(file, pref) { - return true - } - } - - return false -} diff --git a/pkg/helm/downloader.go b/pkg/helm/downloader.go deleted file mode 100644 index 241e2945b..000000000 --- a/pkg/helm/downloader.go +++ /dev/null @@ -1,42 +0,0 @@ -package helm - -import ( - "os" - - "helm.sh/helm/v3/pkg/action" - "helm.sh/helm/v3/pkg/cli" - "helm.sh/helm/v3/pkg/downloader" - "helm.sh/helm/v3/pkg/getter" - "helm.sh/helm/v3/pkg/registry" -) - -var providers = []getter.Provider{ChartMuseumProvider} - -func UpdateDependencies(path string) error { - out := os.Stdout - client := action.NewDependency() - settings := cli.New() - - registryClient, err := registry.NewClient( - registry.ClientOptDebug(settings.Debug), - registry.ClientOptWriter(out), - registry.ClientOptCredentialsFile(settings.RegistryConfig), - ) - if err != nil { - return err - } - - gtrs := getter.All(settings) - man := &downloader.Manager{ - Out: out, - ChartPath: path, - Keyring: client.Keyring, - SkipUpdate: false, - Getters: append(providers, gtrs...), - RegistryClient: registryClient, - RepositoryConfig: settings.RepositoryConfig, - RepositoryCache: settings.RepositoryCache, - Debug: settings.Debug, - } - return man.Update() -} diff --git a/pkg/helm/push.go b/pkg/helm/push.go deleted file mode 100644 index 2c2bbc5f7..000000000 --- a/pkg/helm/push.go +++ /dev/null @@ -1,67 +0,0 @@ -package helm - -import ( - "fmt" - "io" - "os" - "strings" - - cm "github.com/chartmuseum/helm-push/pkg/chartmuseum" - "github.com/chartmuseum/helm-push/pkg/helm" - "github.com/pluralsh/plural-cli/pkg/config" -) - -func Push(chartName, repoUrl string) error { - repo, err := helm.TempRepoFromURL(repoUrl) - if err != nil { - return err - } - - chart, err := helm.GetChartByName(chartName) - if err != nil { - return err - } - - conf := config.Read() - - url := strings.Replace(repo.Config.URL, "cm://", "https://", 1) - client, err := cm.NewClient( - cm.URL(url), - cm.AccessToken(conf.Token), - cm.ContextPath("/cm"), - ) - if err != nil { - return err - } - - tmp, err := os.MkdirTemp("", "helm-push-") - if err != nil { - return err - } - defer func(path string) { - _ = os.RemoveAll(path) - }(tmp) - - chartPackagePath, err := helm.CreateChartPackage(chart, tmp) - if err != nil { - return err - } - - resp, err := client.UploadChartPackage(chartPackagePath, false) - if err != nil { - return err - } - defer func(Body io.ReadCloser) { - _ = Body.Close() - }(resp.Body) - - if resp.StatusCode != 201 && resp.StatusCode != 202 { - b, err := io.ReadAll(resp.Body) - if err != nil { - return err - } - return fmt.Errorf("Failed to upload to plural, code %d error %s\n", resp.StatusCode, string(b)) - } - fmt.Println("Done.") - return nil -} diff --git a/pkg/kubernetes/kube.go b/pkg/kubernetes/kube.go index 916772f93..d7d1dd5e1 100644 --- a/pkg/kubernetes/kube.go +++ b/pkg/kubernetes/kube.go @@ -10,7 +10,6 @@ import ( "path/filepath" "strings" - "github.com/pluralsh/plural-cli/pkg/application" "github.com/pluralsh/plural-cli/pkg/utils" "github.com/pluralsh/plural-cli/pkg/utils/pathing" platformv1alpha1 "github.com/pluralsh/plural-operator/apis/platform/v1alpha1" @@ -67,13 +66,12 @@ type Kube interface { var decUnstructured = yaml.NewDecodingSerializer(unstructured.UnstructuredJSONScheme) type kube struct { - Kube *kubernetes.Clientset - Plural *pluralv1alpha1.Clientset - Application *application.ApplicationV1Beta1Client - Dynamic dynamic.Interface - Discovery discovery.DiscoveryInterface - Mapper *restmapper.DeferredDiscoveryRESTMapper - RestClient *restclient.RESTClient + Kube *kubernetes.Clientset + Plural *pluralv1alpha1.Clientset + Dynamic dynamic.Interface + Discovery discovery.DiscoveryInterface + Mapper *restmapper.DeferredDiscoveryRESTMapper + RestClient *restclient.RESTClient } func (k *kube) GetRestClient() *restclient.RESTClient { @@ -134,11 +132,6 @@ func buildKubeFromConfig(config *rest.Config) (Kube, error) { return nil, err } - app, err := application.NewForConfig(config) - if err != nil { - return nil, err - } - dyn, err := dynamic.NewForConfig(config) if err != nil { return nil, err @@ -158,7 +151,7 @@ func buildKubeFromConfig(config *rest.Config) (Kube, error) { return nil, err } - return &kube{Kube: clientset, Plural: plural, Application: app, Dynamic: dyn, Discovery: dc, Mapper: mapper, RestClient: restClient}, nil + return &kube{Kube: clientset, Plural: plural, Dynamic: dyn, Discovery: dc, Mapper: mapper, RestClient: restClient}, nil } func (k *kube) Secret(namespace string, name string) (*v1.Secret, error) { diff --git a/pkg/manifest/context.go b/pkg/manifest/context.go index 9902c6580..777886026 100644 --- a/pkg/manifest/context.go +++ b/pkg/manifest/context.go @@ -28,7 +28,6 @@ type Globals struct { } type Context struct { - Bundles []*Bundle Buckets []string Domains []string Protect []string `yaml:"protect,omitempty" json:"protect,omitempty"` @@ -41,7 +40,6 @@ func (this *Context) MarshalJSON() ([]byte, error) { json := jsoniter.ConfigCompatibleWithStandardLibrary return json.Marshal(&struct { - Bundles []*Bundle `json:"bundles"` Buckets []string `json:"buckets"` Domains []string `json:"domains"` Protect []string `yaml:"protect,omitempty" json:"protect,omitempty"` @@ -49,7 +47,6 @@ func (this *Context) MarshalJSON() ([]byte, error) { Globals *Globals `yaml:"globals,omitempty" json:"globals,omitempty"` Configuration map[string]map[string]interface{} `json:"configuration"` }{ - Bundles: this.Bundles, Buckets: this.Buckets, Domains: this.Domains, Protect: this.Protect, @@ -88,7 +85,6 @@ func ReadContext(path string) (c *Context, err error) { func NewContext() *Context { return &Context{ - Bundles: make([]*Bundle, 0), // Globals: &Globals{CertIssuer: "plural"}, Configuration: make(map[string]map[string]interface{}), } diff --git a/pkg/ui/bindings.go b/pkg/ui/bindings.go deleted file mode 100644 index 223780f01..000000000 --- a/pkg/ui/bindings.go +++ /dev/null @@ -1,16 +0,0 @@ -//go:build generate - -package ui - -import ( - "log" -) - -// Used to generate frontend bindings used to call backend. -// Only needed when 'generate' tag is provided during the build. -func init() { - err := Run(nil, nil) - if err != nil { - log.Fatal(err) - } -} diff --git a/pkg/ui/client.go b/pkg/ui/client.go deleted file mode 100644 index 552b48c4f..000000000 --- a/pkg/ui/client.go +++ /dev/null @@ -1,152 +0,0 @@ -//go:build ui || generate - -package ui - -import ( - "encoding/json" - "fmt" - - "github.com/pluralsh/plural-cli/pkg/api" - "github.com/pluralsh/plural-cli/pkg/config" - "github.com/pluralsh/plural-cli/pkg/manifest" - "github.com/pluralsh/polly/algorithms" - "github.com/urfave/cli" -) - -type Application struct { - Key string `json:"key"` - Label string `json:"label"` - IsDependency bool `json:"isDependency"` - // DependencyOf is a set of application names that this app is a dependency of. - DependencyOf map[string]interface{} `json:"dependencyOf"` - Data map[string]interface{} `json:"data"` -} - -func (this *Application) UnmarshalJSON(data []byte) error { - type Alias struct { - Key string `json:"key"` - Label string `json:"label"` - IsDependency bool `json:"isDependency"` - // Since Set does not exist in Go, we are passing array - // from the frontend and converting it to a map. - DependencyOf []string `json:"dependencyOf"` - Data map[string]interface{} `json:"data"` - } - alias := &Alias{} - if err := json.Unmarshal(data, alias); err != nil { - return fmt.Errorf("error during Application.UnmarshalJSON: %v\n", err) - } - - dependencyOf := map[string]interface{}{} - for _, appName := range alias.DependencyOf { - dependencyOf[appName] = struct{}{} - } - - *this = Application{ - Key: alias.Key, - Label: alias.Label, - IsDependency: alias.IsDependency, - DependencyOf: dependencyOf, - Data: alias.Data, - } - - return nil -} - -// Client struct used by the frontend to access and update backend data. -type Client struct { - ctx *cli.Context - client api.Client -} - -func (this *Client) Token() string { - conf := config.Read() - - return conf.Token -} - -func (this *Client) Project() *manifest.ProjectManifest { - project, err := manifest.FetchProject() - if err != nil { - return nil - } - - return project -} - -func (this *Client) Context() *manifest.Context { - context, err := manifest.FetchContext() - if err != nil { - return nil - } - - return context -} - -func (this *Client) Provider() string { - project, err := manifest.FetchProject() - if err != nil { - return "" - } - - return project.Provider -} - -func (this *Client) Install(applications []Application, domains, buckets []string) error { - path := manifest.ContextPath() - context, err := manifest.ReadContext(path) - if err != nil { - context = manifest.NewContext() - } - - this.addDomains(context, domains) - this.addBuckets(context, buckets) - - installableApplications := algorithms.Filter(applications, func(app Application) bool { - return !app.IsDependency - }) - - dependencies := algorithms.Filter(applications, func(app Application) bool { - return app.IsDependency - }) - - for _, app := range installableApplications { - if err = this.doInstall(app, context); err != nil { - return err - } - } - - for _, dep := range dependencies { - if err = this.doInstall(dep, context); err != nil { - return err - } - } - - // Write to context.yaml only if there were no errors - err = context.Write(path) - return err -} - -func (this *Client) addDomains(context *manifest.Context, domains []string) { - for _, domain := range domains { - if !context.HasDomain(domain) { - context.AddDomain(domain) - } - } -} - -func (this *Client) addBuckets(context *manifest.Context, buckets []string) { - for _, bucket := range buckets { - if !context.HasBucket(bucket) { - context.AddBucket(bucket) - } - } -} - -// NewClient creates a new proxy client struct -func NewClient(client api.Client, ctx *cli.Context) *Client { - return &Client{ - ctx: ctx, - client: client, - } -} diff --git a/pkg/ui/ui.go b/pkg/ui/ui.go deleted file mode 100644 index feffee5fa..000000000 --- a/pkg/ui/ui.go +++ /dev/null @@ -1,41 +0,0 @@ -//go:build ui || generate - -package ui - -import ( - "embed" - - "github.com/urfave/cli" - "github.com/wailsapp/wails/v2" - "github.com/wailsapp/wails/v2/pkg/options" - "github.com/wailsapp/wails/v2/pkg/options/assetserver" - - "github.com/pluralsh/plural-cli/pkg/api" -) - -//go:embed all:web/dist -var assets embed.FS - -func Run(c api.Client, ctx *cli.Context) error { - // Create an instance of the main window structure - window := NewWindow() - client := NewClient(c, ctx) - - // Create application with options - err := wails.Run(&options.App{ - Title: "Plural", - Frameless: true, - Width: window.width(), - Height: window.height(), - AssetServer: &assetserver.Options{ - Assets: assets, - }, - OnStartup: window.startup, - Bind: []interface{}{ - window, - client, - }, - }) - - return err -} diff --git a/pkg/ui/web/.eslintrc b/pkg/ui/web/.eslintrc deleted file mode 100644 index 65710b159..000000000 --- a/pkg/ui/web/.eslintrc +++ /dev/null @@ -1,3 +0,0 @@ -extends: ["@pluralsh/eslint-config-typescript"] -globals: - JSX: true diff --git a/pkg/ui/web/.gitignore b/pkg/ui/web/.gitignore deleted file mode 100644 index 704b8167e..000000000 --- a/pkg/ui/web/.gitignore +++ /dev/null @@ -1,9 +0,0 @@ -# dependencies -/node_modules -.pnp.* -.yarn/* -!.yarn/patches -!.yarn/plugins -!.yarn/releases -!.yarn/sdks -!.yarn/versions diff --git a/pkg/ui/web/.graphqlconfig b/pkg/ui/web/.graphqlconfig deleted file mode 100644 index 4543260f6..000000000 --- a/pkg/ui/web/.graphqlconfig +++ /dev/null @@ -1,15 +0,0 @@ -{ - "name": "Plural API", - "schemaPath": "schema/schema.graphql", - "extensions": { - "endpoints": { - "Default GraphQL Endpoint": { - "url": "https://app.plural.sh/graphiql", - "headers": { - "user-agent": "JS GraphQL" - }, - "introspect": true - } - } - } -} \ No newline at end of file diff --git a/pkg/ui/web/.yarn/releases/yarn-3.4.1.cjs b/pkg/ui/web/.yarn/releases/yarn-3.4.1.cjs deleted file mode 100755 index 2bdb752d8..000000000 --- a/pkg/ui/web/.yarn/releases/yarn-3.4.1.cjs +++ /dev/null @@ -1,873 +0,0 @@ -#!/usr/bin/env node -/* eslint-disable */ -//prettier-ignore -(()=>{var Mue=Object.create;var Wb=Object.defineProperty;var Kue=Object.getOwnPropertyDescriptor;var Uue=Object.getOwnPropertyNames;var Hue=Object.getPrototypeOf,Gue=Object.prototype.hasOwnProperty;var J=(r=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(r,{get:(e,t)=>(typeof require<"u"?require:e)[t]}):r)(function(r){if(typeof require<"u")return require.apply(this,arguments);throw new Error('Dynamic require of "'+r+'" is not supported')});var Yue=(r,e)=>()=>(r&&(e=r(r=0)),e);var w=(r,e)=>()=>(e||r((e={exports:{}}).exports,e),e.exports),ut=(r,e)=>{for(var t in e)Wb(r,t,{get:e[t],enumerable:!0})},jue=(r,e,t,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let n of Uue(e))!Gue.call(r,n)&&n!==t&&Wb(r,n,{get:()=>e[n],enumerable:!(i=Kue(e,n))||i.enumerable});return r};var Pe=(r,e,t)=>(t=r!=null?Mue(Hue(r)):{},jue(e||!r||!r.__esModule?Wb(t,"default",{value:r,enumerable:!0}):t,r));var _1=w((O7e,X1)=>{X1.exports=V1;V1.sync=uge;var W1=J("fs");function cge(r,e){var t=e.pathExt!==void 0?e.pathExt:process.env.PATHEXT;if(!t||(t=t.split(";"),t.indexOf("")!==-1))return!0;for(var i=0;i{tK.exports=$1;$1.sync=gge;var Z1=J("fs");function $1(r,e,t){Z1.stat(r,function(i,n){t(i,i?!1:eK(n,e))})}function gge(r,e){return eK(Z1.statSync(r),e)}function eK(r,e){return r.isFile()&&fge(r,e)}function fge(r,e){var t=r.mode,i=r.uid,n=r.gid,s=e.uid!==void 0?e.uid:process.getuid&&process.getuid(),o=e.gid!==void 0?e.gid:process.getgid&&process.getgid(),a=parseInt("100",8),l=parseInt("010",8),c=parseInt("001",8),u=a|l,g=t&c||t&l&&n===o||t&a&&i===s||t&u&&s===0;return g}});var nK=w((U7e,iK)=>{var K7e=J("fs"),_E;process.platform==="win32"||global.TESTING_WINDOWS?_E=_1():_E=rK();iK.exports=uS;uS.sync=hge;function uS(r,e,t){if(typeof e=="function"&&(t=e,e={}),!t){if(typeof Promise!="function")throw new TypeError("callback not provided");return new Promise(function(i,n){uS(r,e||{},function(s,o){s?n(s):i(o)})})}_E(r,e||{},function(i,n){i&&(i.code==="EACCES"||e&&e.ignoreErrors)&&(i=null,n=!1),t(i,n)})}function hge(r,e){try{return _E.sync(r,e||{})}catch(t){if(e&&e.ignoreErrors||t.code==="EACCES")return!1;throw t}}});var uK=w((H7e,cK)=>{var Ig=process.platform==="win32"||process.env.OSTYPE==="cygwin"||process.env.OSTYPE==="msys",sK=J("path"),pge=Ig?";":":",oK=nK(),aK=r=>Object.assign(new Error(`not found: ${r}`),{code:"ENOENT"}),AK=(r,e)=>{let t=e.colon||pge,i=r.match(/\//)||Ig&&r.match(/\\/)?[""]:[...Ig?[process.cwd()]:[],...(e.path||process.env.PATH||"").split(t)],n=Ig?e.pathExt||process.env.PATHEXT||".EXE;.CMD;.BAT;.COM":"",s=Ig?n.split(t):[""];return Ig&&r.indexOf(".")!==-1&&s[0]!==""&&s.unshift(""),{pathEnv:i,pathExt:s,pathExtExe:n}},lK=(r,e,t)=>{typeof e=="function"&&(t=e,e={}),e||(e={});let{pathEnv:i,pathExt:n,pathExtExe:s}=AK(r,e),o=[],a=c=>new Promise((u,g)=>{if(c===i.length)return e.all&&o.length?u(o):g(aK(r));let f=i[c],h=/^".*"$/.test(f)?f.slice(1,-1):f,p=sK.join(h,r),C=!h&&/^\.[\\\/]/.test(r)?r.slice(0,2)+p:p;u(l(C,c,0))}),l=(c,u,g)=>new Promise((f,h)=>{if(g===n.length)return f(a(u+1));let p=n[g];oK(c+p,{pathExt:s},(C,y)=>{if(!C&&y)if(e.all)o.push(c+p);else return f(c+p);return f(l(c,u,g+1))})});return t?a(0).then(c=>t(null,c),t):a(0)},dge=(r,e)=>{e=e||{};let{pathEnv:t,pathExt:i,pathExtExe:n}=AK(r,e),s=[];for(let o=0;o{"use strict";var gK=(r={})=>{let e=r.env||process.env;return(r.platform||process.platform)!=="win32"?"PATH":Object.keys(e).reverse().find(i=>i.toUpperCase()==="PATH")||"Path"};gS.exports=gK;gS.exports.default=gK});var CK=w((Y7e,dK)=>{"use strict";var hK=J("path"),Cge=uK(),mge=fK();function pK(r,e){let t=r.options.env||process.env,i=process.cwd(),n=r.options.cwd!=null,s=n&&process.chdir!==void 0&&!process.chdir.disabled;if(s)try{process.chdir(r.options.cwd)}catch{}let o;try{o=Cge.sync(r.command,{path:t[mge({env:t})],pathExt:e?hK.delimiter:void 0})}catch{}finally{s&&process.chdir(i)}return o&&(o=hK.resolve(n?r.options.cwd:"",o)),o}function Ege(r){return pK(r)||pK(r,!0)}dK.exports=Ege});var mK=w((j7e,hS)=>{"use strict";var fS=/([()\][%!^"`<>&|;, *?])/g;function Ige(r){return r=r.replace(fS,"^$1"),r}function yge(r,e){return r=`${r}`,r=r.replace(/(\\*)"/g,'$1$1\\"'),r=r.replace(/(\\*)$/,"$1$1"),r=`"${r}"`,r=r.replace(fS,"^$1"),e&&(r=r.replace(fS,"^$1")),r}hS.exports.command=Ige;hS.exports.argument=yge});var IK=w((q7e,EK)=>{"use strict";EK.exports=/^#!(.*)/});var wK=w((J7e,yK)=>{"use strict";var wge=IK();yK.exports=(r="")=>{let e=r.match(wge);if(!e)return null;let[t,i]=e[0].replace(/#! ?/,"").split(" "),n=t.split("/").pop();return n==="env"?i:i?`${n} ${i}`:n}});var QK=w((W7e,BK)=>{"use strict";var pS=J("fs"),Bge=wK();function Qge(r){let t=Buffer.alloc(150),i;try{i=pS.openSync(r,"r"),pS.readSync(i,t,0,150,0),pS.closeSync(i)}catch{}return Bge(t.toString())}BK.exports=Qge});var xK=w((z7e,vK)=>{"use strict";var bge=J("path"),bK=CK(),SK=mK(),Sge=QK(),vge=process.platform==="win32",xge=/\.(?:com|exe)$/i,Pge=/node_modules[\\/].bin[\\/][^\\/]+\.cmd$/i;function Dge(r){r.file=bK(r);let e=r.file&&Sge(r.file);return e?(r.args.unshift(r.file),r.command=e,bK(r)):r.file}function kge(r){if(!vge)return r;let e=Dge(r),t=!xge.test(e);if(r.options.forceShell||t){let i=Pge.test(e);r.command=bge.normalize(r.command),r.command=SK.command(r.command),r.args=r.args.map(s=>SK.argument(s,i));let n=[r.command].concat(r.args).join(" ");r.args=["/d","/s","/c",`"${n}"`],r.command=process.env.comspec||"cmd.exe",r.options.windowsVerbatimArguments=!0}return r}function Rge(r,e,t){e&&!Array.isArray(e)&&(t=e,e=null),e=e?e.slice(0):[],t=Object.assign({},t);let i={command:r,args:e,options:t,file:void 0,original:{command:r,args:e}};return t.shell?i:kge(i)}vK.exports=Rge});var kK=w((V7e,DK)=>{"use strict";var dS=process.platform==="win32";function CS(r,e){return Object.assign(new Error(`${e} ${r.command} ENOENT`),{code:"ENOENT",errno:"ENOENT",syscall:`${e} ${r.command}`,path:r.command,spawnargs:r.args})}function Fge(r,e){if(!dS)return;let t=r.emit;r.emit=function(i,n){if(i==="exit"){let s=PK(n,e,"spawn");if(s)return t.call(r,"error",s)}return t.apply(r,arguments)}}function PK(r,e){return dS&&r===1&&!e.file?CS(e.original,"spawn"):null}function Nge(r,e){return dS&&r===1&&!e.file?CS(e.original,"spawnSync"):null}DK.exports={hookChildProcess:Fge,verifyENOENT:PK,verifyENOENTSync:Nge,notFoundError:CS}});var IS=w((X7e,yg)=>{"use strict";var RK=J("child_process"),mS=xK(),ES=kK();function FK(r,e,t){let i=mS(r,e,t),n=RK.spawn(i.command,i.args,i.options);return ES.hookChildProcess(n,i),n}function Lge(r,e,t){let i=mS(r,e,t),n=RK.spawnSync(i.command,i.args,i.options);return n.error=n.error||ES.verifyENOENTSync(n.status,i),n}yg.exports=FK;yg.exports.spawn=FK;yg.exports.sync=Lge;yg.exports._parse=mS;yg.exports._enoent=ES});var LK=w((_7e,NK)=>{"use strict";function Tge(r,e){function t(){this.constructor=r}t.prototype=e.prototype,r.prototype=new t}function Ml(r,e,t,i){this.message=r,this.expected=e,this.found=t,this.location=i,this.name="SyntaxError",typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(this,Ml)}Tge(Ml,Error);Ml.buildMessage=function(r,e){var t={literal:function(c){return'"'+n(c.text)+'"'},class:function(c){var u="",g;for(g=0;g0){for(g=1,f=1;g>",ie=me(">>",!1),de=">&",tt=me(">&",!1),Pt=">",It=me(">",!1),Or="<<<",ii=me("<<<",!1),gi="<&",hr=me("<&",!1),fi="<",ni=me("<",!1),Ls=function(m){return{type:"argument",segments:[].concat(...m)}},pr=function(m){return m},Ei="$'",_n=me("$'",!1),oa="'",aA=me("'",!1),eg=function(m){return[{type:"text",text:m}]},Zn='""',AA=me('""',!1),aa=function(){return{type:"text",text:""}},up='"',lA=me('"',!1),cA=function(m){return m},wr=function(m){return{type:"arithmetic",arithmetic:m,quoted:!0}},wl=function(m){return{type:"shell",shell:m,quoted:!0}},tg=function(m){return{type:"variable",...m,quoted:!0}},po=function(m){return{type:"text",text:m}},rg=function(m){return{type:"arithmetic",arithmetic:m,quoted:!1}},gp=function(m){return{type:"shell",shell:m,quoted:!1}},fp=function(m){return{type:"variable",...m,quoted:!1}},vr=function(m){return{type:"glob",pattern:m}},se=/^[^']/,Co=Je(["'"],!0,!1),Dn=function(m){return m.join("")},ig=/^[^$"]/,Qt=Je(["$",'"'],!0,!1),Bl=`\\ -`,kn=me(`\\ -`,!1),$n=function(){return""},es="\\",gt=me("\\",!1),mo=/^[\\$"`]/,At=Je(["\\","$",'"',"`"],!1,!1),an=function(m){return m},S="\\a",Tt=me("\\a",!1),ng=function(){return"a"},Ql="\\b",hp=me("\\b",!1),pp=function(){return"\b"},dp=/^[Ee]/,Cp=Je(["E","e"],!1,!1),mp=function(){return"\x1B"},G="\\f",yt=me("\\f",!1),uA=function(){return"\f"},ji="\\n",bl=me("\\n",!1),Xe=function(){return` -`},Aa="\\r",sg=me("\\r",!1),bE=function(){return"\r"},Ep="\\t",SE=me("\\t",!1),ar=function(){return" "},Rn="\\v",Sl=me("\\v",!1),Ip=function(){return"\v"},Ts=/^[\\'"?]/,la=Je(["\\","'",'"',"?"],!1,!1),An=function(m){return String.fromCharCode(parseInt(m,16))},Te="\\x",og=me("\\x",!1),vl="\\u",Os=me("\\u",!1),xl="\\U",gA=me("\\U",!1),ag=function(m){return String.fromCodePoint(parseInt(m,16))},Ag=/^[0-7]/,ca=Je([["0","7"]],!1,!1),ua=/^[0-9a-fA-f]/,rt=Je([["0","9"],["a","f"],["A","f"]],!1,!1),Eo=nt(),fA="-",Pl=me("-",!1),Ms="+",Dl=me("+",!1),vE=".",yp=me(".",!1),lg=function(m,b,N){return{type:"number",value:(m==="-"?-1:1)*parseFloat(b.join("")+"."+N.join(""))}},wp=function(m,b){return{type:"number",value:(m==="-"?-1:1)*parseInt(b.join(""))}},xE=function(m){return{type:"variable",...m}},kl=function(m){return{type:"variable",name:m}},PE=function(m){return m},cg="*",hA=me("*",!1),Rr="/",DE=me("/",!1),Ks=function(m,b,N){return{type:b==="*"?"multiplication":"division",right:N}},Us=function(m,b){return b.reduce((N,U)=>({left:N,...U}),m)},ug=function(m,b,N){return{type:b==="+"?"addition":"subtraction",right:N}},pA="$((",R=me("$((",!1),q="))",Ce=me("))",!1),Ke=function(m){return m},Re="$(",ze=me("$(",!1),dt=function(m){return m},Ft="${",Fn=me("${",!1),Db=":-",$M=me(":-",!1),e1=function(m,b){return{name:m,defaultValue:b}},kb=":-}",t1=me(":-}",!1),r1=function(m){return{name:m,defaultValue:[]}},Rb=":+",i1=me(":+",!1),n1=function(m,b){return{name:m,alternativeValue:b}},Fb=":+}",s1=me(":+}",!1),o1=function(m){return{name:m,alternativeValue:[]}},Nb=function(m){return{name:m}},a1="$",A1=me("$",!1),l1=function(m){return e.isGlobPattern(m)},c1=function(m){return m},Lb=/^[a-zA-Z0-9_]/,Tb=Je([["a","z"],["A","Z"],["0","9"],"_"],!1,!1),Ob=function(){return T()},Mb=/^[$@*?#a-zA-Z0-9_\-]/,Kb=Je(["$","@","*","?","#",["a","z"],["A","Z"],["0","9"],"_","-"],!1,!1),u1=/^[(){}<>$|&; \t"']/,gg=Je(["(",")","{","}","<",">","$","|","&",";"," "," ",'"',"'"],!1,!1),Ub=/^[<>&; \t"']/,Hb=Je(["<",">","&",";"," "," ",'"',"'"],!1,!1),kE=/^[ \t]/,RE=Je([" "," "],!1,!1),Q=0,Me=0,dA=[{line:1,column:1}],d=0,E=[],I=0,k;if("startRule"in e){if(!(e.startRule in i))throw new Error(`Can't start parsing from rule "`+e.startRule+'".');n=i[e.startRule]}function T(){return r.substring(Me,Q)}function _(){return Et(Me,Q)}function te(m,b){throw b=b!==void 0?b:Et(Me,Q),ki([lt(m)],r.substring(Me,Q),b)}function Be(m,b){throw b=b!==void 0?b:Et(Me,Q),Nn(m,b)}function me(m,b){return{type:"literal",text:m,ignoreCase:b}}function Je(m,b,N){return{type:"class",parts:m,inverted:b,ignoreCase:N}}function nt(){return{type:"any"}}function wt(){return{type:"end"}}function lt(m){return{type:"other",description:m}}function it(m){var b=dA[m],N;if(b)return b;for(N=m-1;!dA[N];)N--;for(b=dA[N],b={line:b.line,column:b.column};Nd&&(d=Q,E=[]),E.push(m))}function Nn(m,b){return new Ml(m,null,null,b)}function ki(m,b,N){return new Ml(Ml.buildMessage(m,b),m,b,N)}function CA(){var m,b;return m=Q,b=Mr(),b===t&&(b=null),b!==t&&(Me=m,b=s(b)),m=b,m}function Mr(){var m,b,N,U,ce;if(m=Q,b=Kr(),b!==t){for(N=[],U=He();U!==t;)N.push(U),U=He();N!==t?(U=ga(),U!==t?(ce=ts(),ce===t&&(ce=null),ce!==t?(Me=m,b=o(b,U,ce),m=b):(Q=m,m=t)):(Q=m,m=t)):(Q=m,m=t)}else Q=m,m=t;if(m===t)if(m=Q,b=Kr(),b!==t){for(N=[],U=He();U!==t;)N.push(U),U=He();N!==t?(U=ga(),U===t&&(U=null),U!==t?(Me=m,b=a(b,U),m=b):(Q=m,m=t)):(Q=m,m=t)}else Q=m,m=t;return m}function ts(){var m,b,N,U,ce;for(m=Q,b=[],N=He();N!==t;)b.push(N),N=He();if(b!==t)if(N=Mr(),N!==t){for(U=[],ce=He();ce!==t;)U.push(ce),ce=He();U!==t?(Me=m,b=l(N),m=b):(Q=m,m=t)}else Q=m,m=t;else Q=m,m=t;return m}function ga(){var m;return r.charCodeAt(Q)===59?(m=c,Q++):(m=t,I===0&&Qe(u)),m===t&&(r.charCodeAt(Q)===38?(m=g,Q++):(m=t,I===0&&Qe(f))),m}function Kr(){var m,b,N;return m=Q,b=g1(),b!==t?(N=yue(),N===t&&(N=null),N!==t?(Me=m,b=h(b,N),m=b):(Q=m,m=t)):(Q=m,m=t),m}function yue(){var m,b,N,U,ce,Se,ht;for(m=Q,b=[],N=He();N!==t;)b.push(N),N=He();if(b!==t)if(N=wue(),N!==t){for(U=[],ce=He();ce!==t;)U.push(ce),ce=He();if(U!==t)if(ce=Kr(),ce!==t){for(Se=[],ht=He();ht!==t;)Se.push(ht),ht=He();Se!==t?(Me=m,b=p(N,ce),m=b):(Q=m,m=t)}else Q=m,m=t;else Q=m,m=t}else Q=m,m=t;else Q=m,m=t;return m}function wue(){var m;return r.substr(Q,2)===C?(m=C,Q+=2):(m=t,I===0&&Qe(y)),m===t&&(r.substr(Q,2)===B?(m=B,Q+=2):(m=t,I===0&&Qe(v))),m}function g1(){var m,b,N;return m=Q,b=bue(),b!==t?(N=Bue(),N===t&&(N=null),N!==t?(Me=m,b=D(b,N),m=b):(Q=m,m=t)):(Q=m,m=t),m}function Bue(){var m,b,N,U,ce,Se,ht;for(m=Q,b=[],N=He();N!==t;)b.push(N),N=He();if(b!==t)if(N=Que(),N!==t){for(U=[],ce=He();ce!==t;)U.push(ce),ce=He();if(U!==t)if(ce=g1(),ce!==t){for(Se=[],ht=He();ht!==t;)Se.push(ht),ht=He();Se!==t?(Me=m,b=L(N,ce),m=b):(Q=m,m=t)}else Q=m,m=t;else Q=m,m=t}else Q=m,m=t;else Q=m,m=t;return m}function Que(){var m;return r.substr(Q,2)===H?(m=H,Q+=2):(m=t,I===0&&Qe(j)),m===t&&(r.charCodeAt(Q)===124?(m=$,Q++):(m=t,I===0&&Qe(V))),m}function FE(){var m,b,N,U,ce,Se;if(m=Q,b=Q1(),b!==t)if(r.charCodeAt(Q)===61?(N=W,Q++):(N=t,I===0&&Qe(Z)),N!==t)if(U=p1(),U!==t){for(ce=[],Se=He();Se!==t;)ce.push(Se),Se=He();ce!==t?(Me=m,b=A(b,U),m=b):(Q=m,m=t)}else Q=m,m=t;else Q=m,m=t;else Q=m,m=t;if(m===t)if(m=Q,b=Q1(),b!==t)if(r.charCodeAt(Q)===61?(N=W,Q++):(N=t,I===0&&Qe(Z)),N!==t){for(U=[],ce=He();ce!==t;)U.push(ce),ce=He();U!==t?(Me=m,b=ae(b),m=b):(Q=m,m=t)}else Q=m,m=t;else Q=m,m=t;return m}function bue(){var m,b,N,U,ce,Se,ht,Bt,Jr,hi,rs;for(m=Q,b=[],N=He();N!==t;)b.push(N),N=He();if(b!==t)if(r.charCodeAt(Q)===40?(N=ge,Q++):(N=t,I===0&&Qe(re)),N!==t){for(U=[],ce=He();ce!==t;)U.push(ce),ce=He();if(U!==t)if(ce=Mr(),ce!==t){for(Se=[],ht=He();ht!==t;)Se.push(ht),ht=He();if(Se!==t)if(r.charCodeAt(Q)===41?(ht=O,Q++):(ht=t,I===0&&Qe(F)),ht!==t){for(Bt=[],Jr=He();Jr!==t;)Bt.push(Jr),Jr=He();if(Bt!==t){for(Jr=[],hi=Bp();hi!==t;)Jr.push(hi),hi=Bp();if(Jr!==t){for(hi=[],rs=He();rs!==t;)hi.push(rs),rs=He();hi!==t?(Me=m,b=ue(ce,Jr),m=b):(Q=m,m=t)}else Q=m,m=t}else Q=m,m=t}else Q=m,m=t;else Q=m,m=t}else Q=m,m=t;else Q=m,m=t}else Q=m,m=t;else Q=m,m=t;if(m===t){for(m=Q,b=[],N=He();N!==t;)b.push(N),N=He();if(b!==t)if(r.charCodeAt(Q)===123?(N=he,Q++):(N=t,I===0&&Qe(ke)),N!==t){for(U=[],ce=He();ce!==t;)U.push(ce),ce=He();if(U!==t)if(ce=Mr(),ce!==t){for(Se=[],ht=He();ht!==t;)Se.push(ht),ht=He();if(Se!==t)if(r.charCodeAt(Q)===125?(ht=Fe,Q++):(ht=t,I===0&&Qe(Ne)),ht!==t){for(Bt=[],Jr=He();Jr!==t;)Bt.push(Jr),Jr=He();if(Bt!==t){for(Jr=[],hi=Bp();hi!==t;)Jr.push(hi),hi=Bp();if(Jr!==t){for(hi=[],rs=He();rs!==t;)hi.push(rs),rs=He();hi!==t?(Me=m,b=oe(ce,Jr),m=b):(Q=m,m=t)}else Q=m,m=t}else Q=m,m=t}else Q=m,m=t;else Q=m,m=t}else Q=m,m=t;else Q=m,m=t}else Q=m,m=t;else Q=m,m=t;if(m===t){for(m=Q,b=[],N=He();N!==t;)b.push(N),N=He();if(b!==t){for(N=[],U=FE();U!==t;)N.push(U),U=FE();if(N!==t){for(U=[],ce=He();ce!==t;)U.push(ce),ce=He();if(U!==t){if(ce=[],Se=h1(),Se!==t)for(;Se!==t;)ce.push(Se),Se=h1();else ce=t;if(ce!==t){for(Se=[],ht=He();ht!==t;)Se.push(ht),ht=He();Se!==t?(Me=m,b=le(N,ce),m=b):(Q=m,m=t)}else Q=m,m=t}else Q=m,m=t}else Q=m,m=t}else Q=m,m=t;if(m===t){for(m=Q,b=[],N=He();N!==t;)b.push(N),N=He();if(b!==t){if(N=[],U=FE(),U!==t)for(;U!==t;)N.push(U),U=FE();else N=t;if(N!==t){for(U=[],ce=He();ce!==t;)U.push(ce),ce=He();U!==t?(Me=m,b=we(N),m=b):(Q=m,m=t)}else Q=m,m=t}else Q=m,m=t}}}return m}function f1(){var m,b,N,U,ce;for(m=Q,b=[],N=He();N!==t;)b.push(N),N=He();if(b!==t){if(N=[],U=NE(),U!==t)for(;U!==t;)N.push(U),U=NE();else N=t;if(N!==t){for(U=[],ce=He();ce!==t;)U.push(ce),ce=He();U!==t?(Me=m,b=fe(N),m=b):(Q=m,m=t)}else Q=m,m=t}else Q=m,m=t;return m}function h1(){var m,b,N;for(m=Q,b=[],N=He();N!==t;)b.push(N),N=He();if(b!==t?(N=Bp(),N!==t?(Me=m,b=Ae(N),m=b):(Q=m,m=t)):(Q=m,m=t),m===t){for(m=Q,b=[],N=He();N!==t;)b.push(N),N=He();b!==t?(N=NE(),N!==t?(Me=m,b=Ae(N),m=b):(Q=m,m=t)):(Q=m,m=t)}return m}function Bp(){var m,b,N,U,ce;for(m=Q,b=[],N=He();N!==t;)b.push(N),N=He();return b!==t?(qe.test(r.charAt(Q))?(N=r.charAt(Q),Q++):(N=t,I===0&&Qe(ne)),N===t&&(N=null),N!==t?(U=Sue(),U!==t?(ce=NE(),ce!==t?(Me=m,b=Y(N,U,ce),m=b):(Q=m,m=t)):(Q=m,m=t)):(Q=m,m=t)):(Q=m,m=t),m}function Sue(){var m;return r.substr(Q,2)===pe?(m=pe,Q+=2):(m=t,I===0&&Qe(ie)),m===t&&(r.substr(Q,2)===de?(m=de,Q+=2):(m=t,I===0&&Qe(tt)),m===t&&(r.charCodeAt(Q)===62?(m=Pt,Q++):(m=t,I===0&&Qe(It)),m===t&&(r.substr(Q,3)===Or?(m=Or,Q+=3):(m=t,I===0&&Qe(ii)),m===t&&(r.substr(Q,2)===gi?(m=gi,Q+=2):(m=t,I===0&&Qe(hr)),m===t&&(r.charCodeAt(Q)===60?(m=fi,Q++):(m=t,I===0&&Qe(ni))))))),m}function NE(){var m,b,N;for(m=Q,b=[],N=He();N!==t;)b.push(N),N=He();return b!==t?(N=p1(),N!==t?(Me=m,b=Ae(N),m=b):(Q=m,m=t)):(Q=m,m=t),m}function p1(){var m,b,N;if(m=Q,b=[],N=d1(),N!==t)for(;N!==t;)b.push(N),N=d1();else b=t;return b!==t&&(Me=m,b=Ls(b)),m=b,m}function d1(){var m,b;return m=Q,b=vue(),b!==t&&(Me=m,b=pr(b)),m=b,m===t&&(m=Q,b=xue(),b!==t&&(Me=m,b=pr(b)),m=b,m===t&&(m=Q,b=Pue(),b!==t&&(Me=m,b=pr(b)),m=b,m===t&&(m=Q,b=Due(),b!==t&&(Me=m,b=pr(b)),m=b))),m}function vue(){var m,b,N,U;return m=Q,r.substr(Q,2)===Ei?(b=Ei,Q+=2):(b=t,I===0&&Qe(_n)),b!==t?(N=Fue(),N!==t?(r.charCodeAt(Q)===39?(U=oa,Q++):(U=t,I===0&&Qe(aA)),U!==t?(Me=m,b=eg(N),m=b):(Q=m,m=t)):(Q=m,m=t)):(Q=m,m=t),m}function xue(){var m,b,N,U;return m=Q,r.charCodeAt(Q)===39?(b=oa,Q++):(b=t,I===0&&Qe(aA)),b!==t?(N=kue(),N!==t?(r.charCodeAt(Q)===39?(U=oa,Q++):(U=t,I===0&&Qe(aA)),U!==t?(Me=m,b=eg(N),m=b):(Q=m,m=t)):(Q=m,m=t)):(Q=m,m=t),m}function Pue(){var m,b,N,U;if(m=Q,r.substr(Q,2)===Zn?(b=Zn,Q+=2):(b=t,I===0&&Qe(AA)),b!==t&&(Me=m,b=aa()),m=b,m===t)if(m=Q,r.charCodeAt(Q)===34?(b=up,Q++):(b=t,I===0&&Qe(lA)),b!==t){for(N=[],U=C1();U!==t;)N.push(U),U=C1();N!==t?(r.charCodeAt(Q)===34?(U=up,Q++):(U=t,I===0&&Qe(lA)),U!==t?(Me=m,b=cA(N),m=b):(Q=m,m=t)):(Q=m,m=t)}else Q=m,m=t;return m}function Due(){var m,b,N;if(m=Q,b=[],N=m1(),N!==t)for(;N!==t;)b.push(N),N=m1();else b=t;return b!==t&&(Me=m,b=cA(b)),m=b,m}function C1(){var m,b;return m=Q,b=w1(),b!==t&&(Me=m,b=wr(b)),m=b,m===t&&(m=Q,b=B1(),b!==t&&(Me=m,b=wl(b)),m=b,m===t&&(m=Q,b=qb(),b!==t&&(Me=m,b=tg(b)),m=b,m===t&&(m=Q,b=Rue(),b!==t&&(Me=m,b=po(b)),m=b))),m}function m1(){var m,b;return m=Q,b=w1(),b!==t&&(Me=m,b=rg(b)),m=b,m===t&&(m=Q,b=B1(),b!==t&&(Me=m,b=gp(b)),m=b,m===t&&(m=Q,b=qb(),b!==t&&(Me=m,b=fp(b)),m=b,m===t&&(m=Q,b=Tue(),b!==t&&(Me=m,b=vr(b)),m=b,m===t&&(m=Q,b=Lue(),b!==t&&(Me=m,b=po(b)),m=b)))),m}function kue(){var m,b,N;for(m=Q,b=[],se.test(r.charAt(Q))?(N=r.charAt(Q),Q++):(N=t,I===0&&Qe(Co));N!==t;)b.push(N),se.test(r.charAt(Q))?(N=r.charAt(Q),Q++):(N=t,I===0&&Qe(Co));return b!==t&&(Me=m,b=Dn(b)),m=b,m}function Rue(){var m,b,N;if(m=Q,b=[],N=E1(),N===t&&(ig.test(r.charAt(Q))?(N=r.charAt(Q),Q++):(N=t,I===0&&Qe(Qt))),N!==t)for(;N!==t;)b.push(N),N=E1(),N===t&&(ig.test(r.charAt(Q))?(N=r.charAt(Q),Q++):(N=t,I===0&&Qe(Qt)));else b=t;return b!==t&&(Me=m,b=Dn(b)),m=b,m}function E1(){var m,b,N;return m=Q,r.substr(Q,2)===Bl?(b=Bl,Q+=2):(b=t,I===0&&Qe(kn)),b!==t&&(Me=m,b=$n()),m=b,m===t&&(m=Q,r.charCodeAt(Q)===92?(b=es,Q++):(b=t,I===0&&Qe(gt)),b!==t?(mo.test(r.charAt(Q))?(N=r.charAt(Q),Q++):(N=t,I===0&&Qe(At)),N!==t?(Me=m,b=an(N),m=b):(Q=m,m=t)):(Q=m,m=t)),m}function Fue(){var m,b,N;for(m=Q,b=[],N=I1(),N===t&&(se.test(r.charAt(Q))?(N=r.charAt(Q),Q++):(N=t,I===0&&Qe(Co)));N!==t;)b.push(N),N=I1(),N===t&&(se.test(r.charAt(Q))?(N=r.charAt(Q),Q++):(N=t,I===0&&Qe(Co)));return b!==t&&(Me=m,b=Dn(b)),m=b,m}function I1(){var m,b,N;return m=Q,r.substr(Q,2)===S?(b=S,Q+=2):(b=t,I===0&&Qe(Tt)),b!==t&&(Me=m,b=ng()),m=b,m===t&&(m=Q,r.substr(Q,2)===Ql?(b=Ql,Q+=2):(b=t,I===0&&Qe(hp)),b!==t&&(Me=m,b=pp()),m=b,m===t&&(m=Q,r.charCodeAt(Q)===92?(b=es,Q++):(b=t,I===0&&Qe(gt)),b!==t?(dp.test(r.charAt(Q))?(N=r.charAt(Q),Q++):(N=t,I===0&&Qe(Cp)),N!==t?(Me=m,b=mp(),m=b):(Q=m,m=t)):(Q=m,m=t),m===t&&(m=Q,r.substr(Q,2)===G?(b=G,Q+=2):(b=t,I===0&&Qe(yt)),b!==t&&(Me=m,b=uA()),m=b,m===t&&(m=Q,r.substr(Q,2)===ji?(b=ji,Q+=2):(b=t,I===0&&Qe(bl)),b!==t&&(Me=m,b=Xe()),m=b,m===t&&(m=Q,r.substr(Q,2)===Aa?(b=Aa,Q+=2):(b=t,I===0&&Qe(sg)),b!==t&&(Me=m,b=bE()),m=b,m===t&&(m=Q,r.substr(Q,2)===Ep?(b=Ep,Q+=2):(b=t,I===0&&Qe(SE)),b!==t&&(Me=m,b=ar()),m=b,m===t&&(m=Q,r.substr(Q,2)===Rn?(b=Rn,Q+=2):(b=t,I===0&&Qe(Sl)),b!==t&&(Me=m,b=Ip()),m=b,m===t&&(m=Q,r.charCodeAt(Q)===92?(b=es,Q++):(b=t,I===0&&Qe(gt)),b!==t?(Ts.test(r.charAt(Q))?(N=r.charAt(Q),Q++):(N=t,I===0&&Qe(la)),N!==t?(Me=m,b=an(N),m=b):(Q=m,m=t)):(Q=m,m=t),m===t&&(m=Nue()))))))))),m}function Nue(){var m,b,N,U,ce,Se,ht,Bt,Jr,hi,rs,Jb;return m=Q,r.charCodeAt(Q)===92?(b=es,Q++):(b=t,I===0&&Qe(gt)),b!==t?(N=Gb(),N!==t?(Me=m,b=An(N),m=b):(Q=m,m=t)):(Q=m,m=t),m===t&&(m=Q,r.substr(Q,2)===Te?(b=Te,Q+=2):(b=t,I===0&&Qe(og)),b!==t?(N=Q,U=Q,ce=Gb(),ce!==t?(Se=Ln(),Se!==t?(ce=[ce,Se],U=ce):(Q=U,U=t)):(Q=U,U=t),U===t&&(U=Gb()),U!==t?N=r.substring(N,Q):N=U,N!==t?(Me=m,b=An(N),m=b):(Q=m,m=t)):(Q=m,m=t),m===t&&(m=Q,r.substr(Q,2)===vl?(b=vl,Q+=2):(b=t,I===0&&Qe(Os)),b!==t?(N=Q,U=Q,ce=Ln(),ce!==t?(Se=Ln(),Se!==t?(ht=Ln(),ht!==t?(Bt=Ln(),Bt!==t?(ce=[ce,Se,ht,Bt],U=ce):(Q=U,U=t)):(Q=U,U=t)):(Q=U,U=t)):(Q=U,U=t),U!==t?N=r.substring(N,Q):N=U,N!==t?(Me=m,b=An(N),m=b):(Q=m,m=t)):(Q=m,m=t),m===t&&(m=Q,r.substr(Q,2)===xl?(b=xl,Q+=2):(b=t,I===0&&Qe(gA)),b!==t?(N=Q,U=Q,ce=Ln(),ce!==t?(Se=Ln(),Se!==t?(ht=Ln(),ht!==t?(Bt=Ln(),Bt!==t?(Jr=Ln(),Jr!==t?(hi=Ln(),hi!==t?(rs=Ln(),rs!==t?(Jb=Ln(),Jb!==t?(ce=[ce,Se,ht,Bt,Jr,hi,rs,Jb],U=ce):(Q=U,U=t)):(Q=U,U=t)):(Q=U,U=t)):(Q=U,U=t)):(Q=U,U=t)):(Q=U,U=t)):(Q=U,U=t)):(Q=U,U=t),U!==t?N=r.substring(N,Q):N=U,N!==t?(Me=m,b=ag(N),m=b):(Q=m,m=t)):(Q=m,m=t)))),m}function Gb(){var m;return Ag.test(r.charAt(Q))?(m=r.charAt(Q),Q++):(m=t,I===0&&Qe(ca)),m}function Ln(){var m;return ua.test(r.charAt(Q))?(m=r.charAt(Q),Q++):(m=t,I===0&&Qe(rt)),m}function Lue(){var m,b,N,U,ce;if(m=Q,b=[],N=Q,r.charCodeAt(Q)===92?(U=es,Q++):(U=t,I===0&&Qe(gt)),U!==t?(r.length>Q?(ce=r.charAt(Q),Q++):(ce=t,I===0&&Qe(Eo)),ce!==t?(Me=N,U=an(ce),N=U):(Q=N,N=t)):(Q=N,N=t),N===t&&(N=Q,U=Q,I++,ce=b1(),I--,ce===t?U=void 0:(Q=U,U=t),U!==t?(r.length>Q?(ce=r.charAt(Q),Q++):(ce=t,I===0&&Qe(Eo)),ce!==t?(Me=N,U=an(ce),N=U):(Q=N,N=t)):(Q=N,N=t)),N!==t)for(;N!==t;)b.push(N),N=Q,r.charCodeAt(Q)===92?(U=es,Q++):(U=t,I===0&&Qe(gt)),U!==t?(r.length>Q?(ce=r.charAt(Q),Q++):(ce=t,I===0&&Qe(Eo)),ce!==t?(Me=N,U=an(ce),N=U):(Q=N,N=t)):(Q=N,N=t),N===t&&(N=Q,U=Q,I++,ce=b1(),I--,ce===t?U=void 0:(Q=U,U=t),U!==t?(r.length>Q?(ce=r.charAt(Q),Q++):(ce=t,I===0&&Qe(Eo)),ce!==t?(Me=N,U=an(ce),N=U):(Q=N,N=t)):(Q=N,N=t));else b=t;return b!==t&&(Me=m,b=Dn(b)),m=b,m}function Yb(){var m,b,N,U,ce,Se;if(m=Q,r.charCodeAt(Q)===45?(b=fA,Q++):(b=t,I===0&&Qe(Pl)),b===t&&(r.charCodeAt(Q)===43?(b=Ms,Q++):(b=t,I===0&&Qe(Dl))),b===t&&(b=null),b!==t){if(N=[],qe.test(r.charAt(Q))?(U=r.charAt(Q),Q++):(U=t,I===0&&Qe(ne)),U!==t)for(;U!==t;)N.push(U),qe.test(r.charAt(Q))?(U=r.charAt(Q),Q++):(U=t,I===0&&Qe(ne));else N=t;if(N!==t)if(r.charCodeAt(Q)===46?(U=vE,Q++):(U=t,I===0&&Qe(yp)),U!==t){if(ce=[],qe.test(r.charAt(Q))?(Se=r.charAt(Q),Q++):(Se=t,I===0&&Qe(ne)),Se!==t)for(;Se!==t;)ce.push(Se),qe.test(r.charAt(Q))?(Se=r.charAt(Q),Q++):(Se=t,I===0&&Qe(ne));else ce=t;ce!==t?(Me=m,b=lg(b,N,ce),m=b):(Q=m,m=t)}else Q=m,m=t;else Q=m,m=t}else Q=m,m=t;if(m===t){if(m=Q,r.charCodeAt(Q)===45?(b=fA,Q++):(b=t,I===0&&Qe(Pl)),b===t&&(r.charCodeAt(Q)===43?(b=Ms,Q++):(b=t,I===0&&Qe(Dl))),b===t&&(b=null),b!==t){if(N=[],qe.test(r.charAt(Q))?(U=r.charAt(Q),Q++):(U=t,I===0&&Qe(ne)),U!==t)for(;U!==t;)N.push(U),qe.test(r.charAt(Q))?(U=r.charAt(Q),Q++):(U=t,I===0&&Qe(ne));else N=t;N!==t?(Me=m,b=wp(b,N),m=b):(Q=m,m=t)}else Q=m,m=t;if(m===t&&(m=Q,b=qb(),b!==t&&(Me=m,b=xE(b)),m=b,m===t&&(m=Q,b=Rl(),b!==t&&(Me=m,b=kl(b)),m=b,m===t)))if(m=Q,r.charCodeAt(Q)===40?(b=ge,Q++):(b=t,I===0&&Qe(re)),b!==t){for(N=[],U=He();U!==t;)N.push(U),U=He();if(N!==t)if(U=y1(),U!==t){for(ce=[],Se=He();Se!==t;)ce.push(Se),Se=He();ce!==t?(r.charCodeAt(Q)===41?(Se=O,Q++):(Se=t,I===0&&Qe(F)),Se!==t?(Me=m,b=PE(U),m=b):(Q=m,m=t)):(Q=m,m=t)}else Q=m,m=t;else Q=m,m=t}else Q=m,m=t}return m}function jb(){var m,b,N,U,ce,Se,ht,Bt;if(m=Q,b=Yb(),b!==t){for(N=[],U=Q,ce=[],Se=He();Se!==t;)ce.push(Se),Se=He();if(ce!==t)if(r.charCodeAt(Q)===42?(Se=cg,Q++):(Se=t,I===0&&Qe(hA)),Se===t&&(r.charCodeAt(Q)===47?(Se=Rr,Q++):(Se=t,I===0&&Qe(DE))),Se!==t){for(ht=[],Bt=He();Bt!==t;)ht.push(Bt),Bt=He();ht!==t?(Bt=Yb(),Bt!==t?(Me=U,ce=Ks(b,Se,Bt),U=ce):(Q=U,U=t)):(Q=U,U=t)}else Q=U,U=t;else Q=U,U=t;for(;U!==t;){for(N.push(U),U=Q,ce=[],Se=He();Se!==t;)ce.push(Se),Se=He();if(ce!==t)if(r.charCodeAt(Q)===42?(Se=cg,Q++):(Se=t,I===0&&Qe(hA)),Se===t&&(r.charCodeAt(Q)===47?(Se=Rr,Q++):(Se=t,I===0&&Qe(DE))),Se!==t){for(ht=[],Bt=He();Bt!==t;)ht.push(Bt),Bt=He();ht!==t?(Bt=Yb(),Bt!==t?(Me=U,ce=Ks(b,Se,Bt),U=ce):(Q=U,U=t)):(Q=U,U=t)}else Q=U,U=t;else Q=U,U=t}N!==t?(Me=m,b=Us(b,N),m=b):(Q=m,m=t)}else Q=m,m=t;return m}function y1(){var m,b,N,U,ce,Se,ht,Bt;if(m=Q,b=jb(),b!==t){for(N=[],U=Q,ce=[],Se=He();Se!==t;)ce.push(Se),Se=He();if(ce!==t)if(r.charCodeAt(Q)===43?(Se=Ms,Q++):(Se=t,I===0&&Qe(Dl)),Se===t&&(r.charCodeAt(Q)===45?(Se=fA,Q++):(Se=t,I===0&&Qe(Pl))),Se!==t){for(ht=[],Bt=He();Bt!==t;)ht.push(Bt),Bt=He();ht!==t?(Bt=jb(),Bt!==t?(Me=U,ce=ug(b,Se,Bt),U=ce):(Q=U,U=t)):(Q=U,U=t)}else Q=U,U=t;else Q=U,U=t;for(;U!==t;){for(N.push(U),U=Q,ce=[],Se=He();Se!==t;)ce.push(Se),Se=He();if(ce!==t)if(r.charCodeAt(Q)===43?(Se=Ms,Q++):(Se=t,I===0&&Qe(Dl)),Se===t&&(r.charCodeAt(Q)===45?(Se=fA,Q++):(Se=t,I===0&&Qe(Pl))),Se!==t){for(ht=[],Bt=He();Bt!==t;)ht.push(Bt),Bt=He();ht!==t?(Bt=jb(),Bt!==t?(Me=U,ce=ug(b,Se,Bt),U=ce):(Q=U,U=t)):(Q=U,U=t)}else Q=U,U=t;else Q=U,U=t}N!==t?(Me=m,b=Us(b,N),m=b):(Q=m,m=t)}else Q=m,m=t;return m}function w1(){var m,b,N,U,ce,Se;if(m=Q,r.substr(Q,3)===pA?(b=pA,Q+=3):(b=t,I===0&&Qe(R)),b!==t){for(N=[],U=He();U!==t;)N.push(U),U=He();if(N!==t)if(U=y1(),U!==t){for(ce=[],Se=He();Se!==t;)ce.push(Se),Se=He();ce!==t?(r.substr(Q,2)===q?(Se=q,Q+=2):(Se=t,I===0&&Qe(Ce)),Se!==t?(Me=m,b=Ke(U),m=b):(Q=m,m=t)):(Q=m,m=t)}else Q=m,m=t;else Q=m,m=t}else Q=m,m=t;return m}function B1(){var m,b,N,U;return m=Q,r.substr(Q,2)===Re?(b=Re,Q+=2):(b=t,I===0&&Qe(ze)),b!==t?(N=Mr(),N!==t?(r.charCodeAt(Q)===41?(U=O,Q++):(U=t,I===0&&Qe(F)),U!==t?(Me=m,b=dt(N),m=b):(Q=m,m=t)):(Q=m,m=t)):(Q=m,m=t),m}function qb(){var m,b,N,U,ce,Se;return m=Q,r.substr(Q,2)===Ft?(b=Ft,Q+=2):(b=t,I===0&&Qe(Fn)),b!==t?(N=Rl(),N!==t?(r.substr(Q,2)===Db?(U=Db,Q+=2):(U=t,I===0&&Qe($M)),U!==t?(ce=f1(),ce!==t?(r.charCodeAt(Q)===125?(Se=Fe,Q++):(Se=t,I===0&&Qe(Ne)),Se!==t?(Me=m,b=e1(N,ce),m=b):(Q=m,m=t)):(Q=m,m=t)):(Q=m,m=t)):(Q=m,m=t)):(Q=m,m=t),m===t&&(m=Q,r.substr(Q,2)===Ft?(b=Ft,Q+=2):(b=t,I===0&&Qe(Fn)),b!==t?(N=Rl(),N!==t?(r.substr(Q,3)===kb?(U=kb,Q+=3):(U=t,I===0&&Qe(t1)),U!==t?(Me=m,b=r1(N),m=b):(Q=m,m=t)):(Q=m,m=t)):(Q=m,m=t),m===t&&(m=Q,r.substr(Q,2)===Ft?(b=Ft,Q+=2):(b=t,I===0&&Qe(Fn)),b!==t?(N=Rl(),N!==t?(r.substr(Q,2)===Rb?(U=Rb,Q+=2):(U=t,I===0&&Qe(i1)),U!==t?(ce=f1(),ce!==t?(r.charCodeAt(Q)===125?(Se=Fe,Q++):(Se=t,I===0&&Qe(Ne)),Se!==t?(Me=m,b=n1(N,ce),m=b):(Q=m,m=t)):(Q=m,m=t)):(Q=m,m=t)):(Q=m,m=t)):(Q=m,m=t),m===t&&(m=Q,r.substr(Q,2)===Ft?(b=Ft,Q+=2):(b=t,I===0&&Qe(Fn)),b!==t?(N=Rl(),N!==t?(r.substr(Q,3)===Fb?(U=Fb,Q+=3):(U=t,I===0&&Qe(s1)),U!==t?(Me=m,b=o1(N),m=b):(Q=m,m=t)):(Q=m,m=t)):(Q=m,m=t),m===t&&(m=Q,r.substr(Q,2)===Ft?(b=Ft,Q+=2):(b=t,I===0&&Qe(Fn)),b!==t?(N=Rl(),N!==t?(r.charCodeAt(Q)===125?(U=Fe,Q++):(U=t,I===0&&Qe(Ne)),U!==t?(Me=m,b=Nb(N),m=b):(Q=m,m=t)):(Q=m,m=t)):(Q=m,m=t),m===t&&(m=Q,r.charCodeAt(Q)===36?(b=a1,Q++):(b=t,I===0&&Qe(A1)),b!==t?(N=Rl(),N!==t?(Me=m,b=Nb(N),m=b):(Q=m,m=t)):(Q=m,m=t)))))),m}function Tue(){var m,b,N;return m=Q,b=Oue(),b!==t?(Me=Q,N=l1(b),N?N=void 0:N=t,N!==t?(Me=m,b=c1(b),m=b):(Q=m,m=t)):(Q=m,m=t),m}function Oue(){var m,b,N,U,ce;if(m=Q,b=[],N=Q,U=Q,I++,ce=S1(),I--,ce===t?U=void 0:(Q=U,U=t),U!==t?(r.length>Q?(ce=r.charAt(Q),Q++):(ce=t,I===0&&Qe(Eo)),ce!==t?(Me=N,U=an(ce),N=U):(Q=N,N=t)):(Q=N,N=t),N!==t)for(;N!==t;)b.push(N),N=Q,U=Q,I++,ce=S1(),I--,ce===t?U=void 0:(Q=U,U=t),U!==t?(r.length>Q?(ce=r.charAt(Q),Q++):(ce=t,I===0&&Qe(Eo)),ce!==t?(Me=N,U=an(ce),N=U):(Q=N,N=t)):(Q=N,N=t);else b=t;return b!==t&&(Me=m,b=Dn(b)),m=b,m}function Q1(){var m,b,N;if(m=Q,b=[],Lb.test(r.charAt(Q))?(N=r.charAt(Q),Q++):(N=t,I===0&&Qe(Tb)),N!==t)for(;N!==t;)b.push(N),Lb.test(r.charAt(Q))?(N=r.charAt(Q),Q++):(N=t,I===0&&Qe(Tb));else b=t;return b!==t&&(Me=m,b=Ob()),m=b,m}function Rl(){var m,b,N;if(m=Q,b=[],Mb.test(r.charAt(Q))?(N=r.charAt(Q),Q++):(N=t,I===0&&Qe(Kb)),N!==t)for(;N!==t;)b.push(N),Mb.test(r.charAt(Q))?(N=r.charAt(Q),Q++):(N=t,I===0&&Qe(Kb));else b=t;return b!==t&&(Me=m,b=Ob()),m=b,m}function b1(){var m;return u1.test(r.charAt(Q))?(m=r.charAt(Q),Q++):(m=t,I===0&&Qe(gg)),m}function S1(){var m;return Ub.test(r.charAt(Q))?(m=r.charAt(Q),Q++):(m=t,I===0&&Qe(Hb)),m}function He(){var m,b;if(m=[],kE.test(r.charAt(Q))?(b=r.charAt(Q),Q++):(b=t,I===0&&Qe(RE)),b!==t)for(;b!==t;)m.push(b),kE.test(r.charAt(Q))?(b=r.charAt(Q),Q++):(b=t,I===0&&Qe(RE));else m=t;return m}if(k=n(),k!==t&&Q===r.length)return k;throw k!==t&&Q{"use strict";function Mge(r,e){function t(){this.constructor=r}t.prototype=e.prototype,r.prototype=new t}function Ul(r,e,t,i){this.message=r,this.expected=e,this.found=t,this.location=i,this.name="SyntaxError",typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(this,Ul)}Mge(Ul,Error);Ul.buildMessage=function(r,e){var t={literal:function(c){return'"'+n(c.text)+'"'},class:function(c){var u="",g;for(g=0;g0){for(g=1,f=1;gH&&(H=v,j=[]),j.push(ne))}function Ne(ne,Y){return new Ul(ne,null,null,Y)}function oe(ne,Y,pe){return new Ul(Ul.buildMessage(ne,Y),ne,Y,pe)}function le(){var ne,Y,pe,ie;return ne=v,Y=we(),Y!==t?(r.charCodeAt(v)===47?(pe=s,v++):(pe=t,$===0&&Fe(o)),pe!==t?(ie=we(),ie!==t?(D=ne,Y=a(Y,ie),ne=Y):(v=ne,ne=t)):(v=ne,ne=t)):(v=ne,ne=t),ne===t&&(ne=v,Y=we(),Y!==t&&(D=ne,Y=l(Y)),ne=Y),ne}function we(){var ne,Y,pe,ie;return ne=v,Y=fe(),Y!==t?(r.charCodeAt(v)===64?(pe=c,v++):(pe=t,$===0&&Fe(u)),pe!==t?(ie=qe(),ie!==t?(D=ne,Y=g(Y,ie),ne=Y):(v=ne,ne=t)):(v=ne,ne=t)):(v=ne,ne=t),ne===t&&(ne=v,Y=fe(),Y!==t&&(D=ne,Y=f(Y)),ne=Y),ne}function fe(){var ne,Y,pe,ie,de;return ne=v,r.charCodeAt(v)===64?(Y=c,v++):(Y=t,$===0&&Fe(u)),Y!==t?(pe=Ae(),pe!==t?(r.charCodeAt(v)===47?(ie=s,v++):(ie=t,$===0&&Fe(o)),ie!==t?(de=Ae(),de!==t?(D=ne,Y=h(),ne=Y):(v=ne,ne=t)):(v=ne,ne=t)):(v=ne,ne=t)):(v=ne,ne=t),ne===t&&(ne=v,Y=Ae(),Y!==t&&(D=ne,Y=h()),ne=Y),ne}function Ae(){var ne,Y,pe;if(ne=v,Y=[],p.test(r.charAt(v))?(pe=r.charAt(v),v++):(pe=t,$===0&&Fe(C)),pe!==t)for(;pe!==t;)Y.push(pe),p.test(r.charAt(v))?(pe=r.charAt(v),v++):(pe=t,$===0&&Fe(C));else Y=t;return Y!==t&&(D=ne,Y=h()),ne=Y,ne}function qe(){var ne,Y,pe;if(ne=v,Y=[],y.test(r.charAt(v))?(pe=r.charAt(v),v++):(pe=t,$===0&&Fe(B)),pe!==t)for(;pe!==t;)Y.push(pe),y.test(r.charAt(v))?(pe=r.charAt(v),v++):(pe=t,$===0&&Fe(B));else Y=t;return Y!==t&&(D=ne,Y=h()),ne=Y,ne}if(V=n(),V!==t&&v===r.length)return V;throw V!==t&&v{"use strict";function UK(r){return typeof r>"u"||r===null}function Uge(r){return typeof r=="object"&&r!==null}function Hge(r){return Array.isArray(r)?r:UK(r)?[]:[r]}function Gge(r,e){var t,i,n,s;if(e)for(s=Object.keys(e),t=0,i=s.length;t{"use strict";function Op(r,e){Error.call(this),this.name="YAMLException",this.reason=r,this.mark=e,this.message=(this.reason||"(unknown reason)")+(this.mark?" "+this.mark.toString():""),Error.captureStackTrace?Error.captureStackTrace(this,this.constructor):this.stack=new Error().stack||""}Op.prototype=Object.create(Error.prototype);Op.prototype.constructor=Op;Op.prototype.toString=function(e){var t=this.name+": ";return t+=this.reason||"(unknown reason)",!e&&this.mark&&(t+=" "+this.mark.toString()),t};HK.exports=Op});var jK=w((pXe,YK)=>{"use strict";var GK=Gl();function SS(r,e,t,i,n){this.name=r,this.buffer=e,this.position=t,this.line=i,this.column=n}SS.prototype.getSnippet=function(e,t){var i,n,s,o,a;if(!this.buffer)return null;for(e=e||4,t=t||75,i="",n=this.position;n>0&&`\0\r -\x85\u2028\u2029`.indexOf(this.buffer.charAt(n-1))===-1;)if(n-=1,this.position-n>t/2-1){i=" ... ",n+=5;break}for(s="",o=this.position;ot/2-1){s=" ... ",o-=5;break}return a=this.buffer.slice(n,o),GK.repeat(" ",e)+i+a+s+` -`+GK.repeat(" ",e+this.position-n+i.length)+"^"};SS.prototype.toString=function(e){var t,i="";return this.name&&(i+='in "'+this.name+'" '),i+="at line "+(this.line+1)+", column "+(this.column+1),e||(t=this.getSnippet(),t&&(i+=`: -`+t)),i};YK.exports=SS});var si=w((dXe,JK)=>{"use strict";var qK=Qg(),qge=["kind","resolve","construct","instanceOf","predicate","represent","defaultStyle","styleAliases"],Jge=["scalar","sequence","mapping"];function Wge(r){var e={};return r!==null&&Object.keys(r).forEach(function(t){r[t].forEach(function(i){e[String(i)]=t})}),e}function zge(r,e){if(e=e||{},Object.keys(e).forEach(function(t){if(qge.indexOf(t)===-1)throw new qK('Unknown option "'+t+'" is met in definition of "'+r+'" YAML type.')}),this.tag=r,this.kind=e.kind||null,this.resolve=e.resolve||function(){return!0},this.construct=e.construct||function(t){return t},this.instanceOf=e.instanceOf||null,this.predicate=e.predicate||null,this.represent=e.represent||null,this.defaultStyle=e.defaultStyle||null,this.styleAliases=Wge(e.styleAliases||null),Jge.indexOf(this.kind)===-1)throw new qK('Unknown kind "'+this.kind+'" is specified for "'+r+'" YAML type.')}JK.exports=zge});var Yl=w((CXe,zK)=>{"use strict";var WK=Gl(),nI=Qg(),Vge=si();function vS(r,e,t){var i=[];return r.include.forEach(function(n){t=vS(n,e,t)}),r[e].forEach(function(n){t.forEach(function(s,o){s.tag===n.tag&&s.kind===n.kind&&i.push(o)}),t.push(n)}),t.filter(function(n,s){return i.indexOf(s)===-1})}function Xge(){var r={scalar:{},sequence:{},mapping:{},fallback:{}},e,t;function i(n){r[n.kind][n.tag]=r.fallback[n.tag]=n}for(e=0,t=arguments.length;e{"use strict";var _ge=si();VK.exports=new _ge("tag:yaml.org,2002:str",{kind:"scalar",construct:function(r){return r!==null?r:""}})});var ZK=w((EXe,_K)=>{"use strict";var Zge=si();_K.exports=new Zge("tag:yaml.org,2002:seq",{kind:"sequence",construct:function(r){return r!==null?r:[]}})});var eU=w((IXe,$K)=>{"use strict";var $ge=si();$K.exports=new $ge("tag:yaml.org,2002:map",{kind:"mapping",construct:function(r){return r!==null?r:{}}})});var sI=w((yXe,tU)=>{"use strict";var efe=Yl();tU.exports=new efe({explicit:[XK(),ZK(),eU()]})});var iU=w((wXe,rU)=>{"use strict";var tfe=si();function rfe(r){if(r===null)return!0;var e=r.length;return e===1&&r==="~"||e===4&&(r==="null"||r==="Null"||r==="NULL")}function ife(){return null}function nfe(r){return r===null}rU.exports=new tfe("tag:yaml.org,2002:null",{kind:"scalar",resolve:rfe,construct:ife,predicate:nfe,represent:{canonical:function(){return"~"},lowercase:function(){return"null"},uppercase:function(){return"NULL"},camelcase:function(){return"Null"}},defaultStyle:"lowercase"})});var sU=w((BXe,nU)=>{"use strict";var sfe=si();function ofe(r){if(r===null)return!1;var e=r.length;return e===4&&(r==="true"||r==="True"||r==="TRUE")||e===5&&(r==="false"||r==="False"||r==="FALSE")}function afe(r){return r==="true"||r==="True"||r==="TRUE"}function Afe(r){return Object.prototype.toString.call(r)==="[object Boolean]"}nU.exports=new sfe("tag:yaml.org,2002:bool",{kind:"scalar",resolve:ofe,construct:afe,predicate:Afe,represent:{lowercase:function(r){return r?"true":"false"},uppercase:function(r){return r?"TRUE":"FALSE"},camelcase:function(r){return r?"True":"False"}},defaultStyle:"lowercase"})});var aU=w((QXe,oU)=>{"use strict";var lfe=Gl(),cfe=si();function ufe(r){return 48<=r&&r<=57||65<=r&&r<=70||97<=r&&r<=102}function gfe(r){return 48<=r&&r<=55}function ffe(r){return 48<=r&&r<=57}function hfe(r){if(r===null)return!1;var e=r.length,t=0,i=!1,n;if(!e)return!1;if(n=r[t],(n==="-"||n==="+")&&(n=r[++t]),n==="0"){if(t+1===e)return!0;if(n=r[++t],n==="b"){for(t++;t=0?"0b"+r.toString(2):"-0b"+r.toString(2).slice(1)},octal:function(r){return r>=0?"0"+r.toString(8):"-0"+r.toString(8).slice(1)},decimal:function(r){return r.toString(10)},hexadecimal:function(r){return r>=0?"0x"+r.toString(16).toUpperCase():"-0x"+r.toString(16).toUpperCase().slice(1)}},defaultStyle:"decimal",styleAliases:{binary:[2,"bin"],octal:[8,"oct"],decimal:[10,"dec"],hexadecimal:[16,"hex"]}})});var cU=w((bXe,lU)=>{"use strict";var AU=Gl(),Cfe=si(),mfe=new RegExp("^(?:[-+]?(?:0|[1-9][0-9_]*)(?:\\.[0-9_]*)?(?:[eE][-+]?[0-9]+)?|\\.[0-9_]+(?:[eE][-+]?[0-9]+)?|[-+]?[0-9][0-9_]*(?::[0-5]?[0-9])+\\.[0-9_]*|[-+]?\\.(?:inf|Inf|INF)|\\.(?:nan|NaN|NAN))$");function Efe(r){return!(r===null||!mfe.test(r)||r[r.length-1]==="_")}function Ife(r){var e,t,i,n;return e=r.replace(/_/g,"").toLowerCase(),t=e[0]==="-"?-1:1,n=[],"+-".indexOf(e[0])>=0&&(e=e.slice(1)),e===".inf"?t===1?Number.POSITIVE_INFINITY:Number.NEGATIVE_INFINITY:e===".nan"?NaN:e.indexOf(":")>=0?(e.split(":").forEach(function(s){n.unshift(parseFloat(s,10))}),e=0,i=1,n.forEach(function(s){e+=s*i,i*=60}),t*e):t*parseFloat(e,10)}var yfe=/^[-+]?[0-9]+e/;function wfe(r,e){var t;if(isNaN(r))switch(e){case"lowercase":return".nan";case"uppercase":return".NAN";case"camelcase":return".NaN"}else if(Number.POSITIVE_INFINITY===r)switch(e){case"lowercase":return".inf";case"uppercase":return".INF";case"camelcase":return".Inf"}else if(Number.NEGATIVE_INFINITY===r)switch(e){case"lowercase":return"-.inf";case"uppercase":return"-.INF";case"camelcase":return"-.Inf"}else if(AU.isNegativeZero(r))return"-0.0";return t=r.toString(10),yfe.test(t)?t.replace("e",".e"):t}function Bfe(r){return Object.prototype.toString.call(r)==="[object Number]"&&(r%1!==0||AU.isNegativeZero(r))}lU.exports=new Cfe("tag:yaml.org,2002:float",{kind:"scalar",resolve:Efe,construct:Ife,predicate:Bfe,represent:wfe,defaultStyle:"lowercase"})});var xS=w((SXe,uU)=>{"use strict";var Qfe=Yl();uU.exports=new Qfe({include:[sI()],implicit:[iU(),sU(),aU(),cU()]})});var PS=w((vXe,gU)=>{"use strict";var bfe=Yl();gU.exports=new bfe({include:[xS()]})});var dU=w((xXe,pU)=>{"use strict";var Sfe=si(),fU=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9])-([0-9][0-9])$"),hU=new RegExp("^([0-9][0-9][0-9][0-9])-([0-9][0-9]?)-([0-9][0-9]?)(?:[Tt]|[ \\t]+)([0-9][0-9]?):([0-9][0-9]):([0-9][0-9])(?:\\.([0-9]*))?(?:[ \\t]*(Z|([-+])([0-9][0-9]?)(?::([0-9][0-9]))?))?$");function vfe(r){return r===null?!1:fU.exec(r)!==null||hU.exec(r)!==null}function xfe(r){var e,t,i,n,s,o,a,l=0,c=null,u,g,f;if(e=fU.exec(r),e===null&&(e=hU.exec(r)),e===null)throw new Error("Date resolve error");if(t=+e[1],i=+e[2]-1,n=+e[3],!e[4])return new Date(Date.UTC(t,i,n));if(s=+e[4],o=+e[5],a=+e[6],e[7]){for(l=e[7].slice(0,3);l.length<3;)l+="0";l=+l}return e[9]&&(u=+e[10],g=+(e[11]||0),c=(u*60+g)*6e4,e[9]==="-"&&(c=-c)),f=new Date(Date.UTC(t,i,n,s,o,a,l)),c&&f.setTime(f.getTime()-c),f}function Pfe(r){return r.toISOString()}pU.exports=new Sfe("tag:yaml.org,2002:timestamp",{kind:"scalar",resolve:vfe,construct:xfe,instanceOf:Date,represent:Pfe})});var mU=w((PXe,CU)=>{"use strict";var Dfe=si();function kfe(r){return r==="<<"||r===null}CU.exports=new Dfe("tag:yaml.org,2002:merge",{kind:"scalar",resolve:kfe})});var yU=w((DXe,IU)=>{"use strict";var jl;try{EU=J,jl=EU("buffer").Buffer}catch{}var EU,Rfe=si(),DS=`ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/= -\r`;function Ffe(r){if(r===null)return!1;var e,t,i=0,n=r.length,s=DS;for(t=0;t64)){if(e<0)return!1;i+=6}return i%8===0}function Nfe(r){var e,t,i=r.replace(/[\r\n=]/g,""),n=i.length,s=DS,o=0,a=[];for(e=0;e>16&255),a.push(o>>8&255),a.push(o&255)),o=o<<6|s.indexOf(i.charAt(e));return t=n%4*6,t===0?(a.push(o>>16&255),a.push(o>>8&255),a.push(o&255)):t===18?(a.push(o>>10&255),a.push(o>>2&255)):t===12&&a.push(o>>4&255),jl?jl.from?jl.from(a):new jl(a):a}function Lfe(r){var e="",t=0,i,n,s=r.length,o=DS;for(i=0;i>18&63],e+=o[t>>12&63],e+=o[t>>6&63],e+=o[t&63]),t=(t<<8)+r[i];return n=s%3,n===0?(e+=o[t>>18&63],e+=o[t>>12&63],e+=o[t>>6&63],e+=o[t&63]):n===2?(e+=o[t>>10&63],e+=o[t>>4&63],e+=o[t<<2&63],e+=o[64]):n===1&&(e+=o[t>>2&63],e+=o[t<<4&63],e+=o[64],e+=o[64]),e}function Tfe(r){return jl&&jl.isBuffer(r)}IU.exports=new Rfe("tag:yaml.org,2002:binary",{kind:"scalar",resolve:Ffe,construct:Nfe,predicate:Tfe,represent:Lfe})});var BU=w((kXe,wU)=>{"use strict";var Ofe=si(),Mfe=Object.prototype.hasOwnProperty,Kfe=Object.prototype.toString;function Ufe(r){if(r===null)return!0;var e=[],t,i,n,s,o,a=r;for(t=0,i=a.length;t{"use strict";var Gfe=si(),Yfe=Object.prototype.toString;function jfe(r){if(r===null)return!0;var e,t,i,n,s,o=r;for(s=new Array(o.length),e=0,t=o.length;e{"use strict";var Jfe=si(),Wfe=Object.prototype.hasOwnProperty;function zfe(r){if(r===null)return!0;var e,t=r;for(e in t)if(Wfe.call(t,e)&&t[e]!==null)return!1;return!0}function Vfe(r){return r!==null?r:{}}SU.exports=new Jfe("tag:yaml.org,2002:set",{kind:"mapping",resolve:zfe,construct:Vfe})});var Sg=w((NXe,xU)=>{"use strict";var Xfe=Yl();xU.exports=new Xfe({include:[PS()],implicit:[dU(),mU()],explicit:[yU(),BU(),bU(),vU()]})});var DU=w((LXe,PU)=>{"use strict";var _fe=si();function Zfe(){return!0}function $fe(){}function ehe(){return""}function the(r){return typeof r>"u"}PU.exports=new _fe("tag:yaml.org,2002:js/undefined",{kind:"scalar",resolve:Zfe,construct:$fe,predicate:the,represent:ehe})});var RU=w((TXe,kU)=>{"use strict";var rhe=si();function ihe(r){if(r===null||r.length===0)return!1;var e=r,t=/\/([gim]*)$/.exec(r),i="";return!(e[0]==="/"&&(t&&(i=t[1]),i.length>3||e[e.length-i.length-1]!=="/"))}function nhe(r){var e=r,t=/\/([gim]*)$/.exec(r),i="";return e[0]==="/"&&(t&&(i=t[1]),e=e.slice(1,e.length-i.length-1)),new RegExp(e,i)}function she(r){var e="/"+r.source+"/";return r.global&&(e+="g"),r.multiline&&(e+="m"),r.ignoreCase&&(e+="i"),e}function ohe(r){return Object.prototype.toString.call(r)==="[object RegExp]"}kU.exports=new rhe("tag:yaml.org,2002:js/regexp",{kind:"scalar",resolve:ihe,construct:nhe,predicate:ohe,represent:she})});var LU=w((OXe,NU)=>{"use strict";var oI;try{FU=J,oI=FU("esprima")}catch{typeof window<"u"&&(oI=window.esprima)}var FU,ahe=si();function Ahe(r){if(r===null)return!1;try{var e="("+r+")",t=oI.parse(e,{range:!0});return!(t.type!=="Program"||t.body.length!==1||t.body[0].type!=="ExpressionStatement"||t.body[0].expression.type!=="ArrowFunctionExpression"&&t.body[0].expression.type!=="FunctionExpression")}catch{return!1}}function lhe(r){var e="("+r+")",t=oI.parse(e,{range:!0}),i=[],n;if(t.type!=="Program"||t.body.length!==1||t.body[0].type!=="ExpressionStatement"||t.body[0].expression.type!=="ArrowFunctionExpression"&&t.body[0].expression.type!=="FunctionExpression")throw new Error("Failed to resolve function");return t.body[0].expression.params.forEach(function(s){i.push(s.name)}),n=t.body[0].expression.body.range,t.body[0].expression.body.type==="BlockStatement"?new Function(i,e.slice(n[0]+1,n[1]-1)):new Function(i,"return "+e.slice(n[0],n[1]))}function che(r){return r.toString()}function uhe(r){return Object.prototype.toString.call(r)==="[object Function]"}NU.exports=new ahe("tag:yaml.org,2002:js/function",{kind:"scalar",resolve:Ahe,construct:lhe,predicate:uhe,represent:che})});var Mp=w((MXe,OU)=>{"use strict";var TU=Yl();OU.exports=TU.DEFAULT=new TU({include:[Sg()],explicit:[DU(),RU(),LU()]})});var r2=w((KXe,Kp)=>{"use strict";var da=Gl(),jU=Qg(),ghe=jK(),qU=Sg(),fhe=Mp(),wA=Object.prototype.hasOwnProperty,aI=1,JU=2,WU=3,AI=4,kS=1,hhe=2,MU=3,phe=/[\x00-\x08\x0B\x0C\x0E-\x1F\x7F-\x84\x86-\x9F\uFFFE\uFFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-\uDBFF]|^)[\uDC00-\uDFFF]/,dhe=/[\x85\u2028\u2029]/,Che=/[,\[\]\{\}]/,zU=/^(?:!|!!|![a-z\-]+!)$/i,VU=/^(?:!|[^,\[\]\{\}])(?:%[0-9a-f]{2}|[0-9a-z\-#;\/\?:@&=\+\$,_\.!~\*'\(\)\[\]])*$/i;function KU(r){return Object.prototype.toString.call(r)}function Bo(r){return r===10||r===13}function Jl(r){return r===9||r===32}function un(r){return r===9||r===32||r===10||r===13}function vg(r){return r===44||r===91||r===93||r===123||r===125}function mhe(r){var e;return 48<=r&&r<=57?r-48:(e=r|32,97<=e&&e<=102?e-97+10:-1)}function Ehe(r){return r===120?2:r===117?4:r===85?8:0}function Ihe(r){return 48<=r&&r<=57?r-48:-1}function UU(r){return r===48?"\0":r===97?"\x07":r===98?"\b":r===116||r===9?" ":r===110?` -`:r===118?"\v":r===102?"\f":r===114?"\r":r===101?"\x1B":r===32?" ":r===34?'"':r===47?"/":r===92?"\\":r===78?"\x85":r===95?"\xA0":r===76?"\u2028":r===80?"\u2029":""}function yhe(r){return r<=65535?String.fromCharCode(r):String.fromCharCode((r-65536>>10)+55296,(r-65536&1023)+56320)}var XU=new Array(256),_U=new Array(256);for(ql=0;ql<256;ql++)XU[ql]=UU(ql)?1:0,_U[ql]=UU(ql);var ql;function whe(r,e){this.input=r,this.filename=e.filename||null,this.schema=e.schema||fhe,this.onWarning=e.onWarning||null,this.legacy=e.legacy||!1,this.json=e.json||!1,this.listener=e.listener||null,this.implicitTypes=this.schema.compiledImplicit,this.typeMap=this.schema.compiledTypeMap,this.length=r.length,this.position=0,this.line=0,this.lineStart=0,this.lineIndent=0,this.documents=[]}function ZU(r,e){return new jU(e,new ghe(r.filename,r.input,r.position,r.line,r.position-r.lineStart))}function ft(r,e){throw ZU(r,e)}function lI(r,e){r.onWarning&&r.onWarning.call(null,ZU(r,e))}var HU={YAML:function(e,t,i){var n,s,o;e.version!==null&&ft(e,"duplication of %YAML directive"),i.length!==1&&ft(e,"YAML directive accepts exactly one argument"),n=/^([0-9]+)\.([0-9]+)$/.exec(i[0]),n===null&&ft(e,"ill-formed argument of the YAML directive"),s=parseInt(n[1],10),o=parseInt(n[2],10),s!==1&&ft(e,"unacceptable YAML version of the document"),e.version=i[0],e.checkLineBreaks=o<2,o!==1&&o!==2&&lI(e,"unsupported YAML version of the document")},TAG:function(e,t,i){var n,s;i.length!==2&&ft(e,"TAG directive accepts exactly two arguments"),n=i[0],s=i[1],zU.test(n)||ft(e,"ill-formed tag handle (first argument) of the TAG directive"),wA.call(e.tagMap,n)&&ft(e,'there is a previously declared suffix for "'+n+'" tag handle'),VU.test(s)||ft(e,"ill-formed tag prefix (second argument) of the TAG directive"),e.tagMap[n]=s}};function yA(r,e,t,i){var n,s,o,a;if(e1&&(r.result+=da.repeat(` -`,e-1))}function Bhe(r,e,t){var i,n,s,o,a,l,c,u,g=r.kind,f=r.result,h;if(h=r.input.charCodeAt(r.position),un(h)||vg(h)||h===35||h===38||h===42||h===33||h===124||h===62||h===39||h===34||h===37||h===64||h===96||(h===63||h===45)&&(n=r.input.charCodeAt(r.position+1),un(n)||t&&vg(n)))return!1;for(r.kind="scalar",r.result="",s=o=r.position,a=!1;h!==0;){if(h===58){if(n=r.input.charCodeAt(r.position+1),un(n)||t&&vg(n))break}else if(h===35){if(i=r.input.charCodeAt(r.position-1),un(i))break}else{if(r.position===r.lineStart&&cI(r)||t&&vg(h))break;if(Bo(h))if(l=r.line,c=r.lineStart,u=r.lineIndent,zr(r,!1,-1),r.lineIndent>=e){a=!0,h=r.input.charCodeAt(r.position);continue}else{r.position=o,r.line=l,r.lineStart=c,r.lineIndent=u;break}}a&&(yA(r,s,o,!1),FS(r,r.line-l),s=o=r.position,a=!1),Jl(h)||(o=r.position+1),h=r.input.charCodeAt(++r.position)}return yA(r,s,o,!1),r.result?!0:(r.kind=g,r.result=f,!1)}function Qhe(r,e){var t,i,n;if(t=r.input.charCodeAt(r.position),t!==39)return!1;for(r.kind="scalar",r.result="",r.position++,i=n=r.position;(t=r.input.charCodeAt(r.position))!==0;)if(t===39)if(yA(r,i,r.position,!0),t=r.input.charCodeAt(++r.position),t===39)i=r.position,r.position++,n=r.position;else return!0;else Bo(t)?(yA(r,i,n,!0),FS(r,zr(r,!1,e)),i=n=r.position):r.position===r.lineStart&&cI(r)?ft(r,"unexpected end of the document within a single quoted scalar"):(r.position++,n=r.position);ft(r,"unexpected end of the stream within a single quoted scalar")}function bhe(r,e){var t,i,n,s,o,a;if(a=r.input.charCodeAt(r.position),a!==34)return!1;for(r.kind="scalar",r.result="",r.position++,t=i=r.position;(a=r.input.charCodeAt(r.position))!==0;){if(a===34)return yA(r,t,r.position,!0),r.position++,!0;if(a===92){if(yA(r,t,r.position,!0),a=r.input.charCodeAt(++r.position),Bo(a))zr(r,!1,e);else if(a<256&&XU[a])r.result+=_U[a],r.position++;else if((o=Ehe(a))>0){for(n=o,s=0;n>0;n--)a=r.input.charCodeAt(++r.position),(o=mhe(a))>=0?s=(s<<4)+o:ft(r,"expected hexadecimal character");r.result+=yhe(s),r.position++}else ft(r,"unknown escape sequence");t=i=r.position}else Bo(a)?(yA(r,t,i,!0),FS(r,zr(r,!1,e)),t=i=r.position):r.position===r.lineStart&&cI(r)?ft(r,"unexpected end of the document within a double quoted scalar"):(r.position++,i=r.position)}ft(r,"unexpected end of the stream within a double quoted scalar")}function She(r,e){var t=!0,i,n=r.tag,s,o=r.anchor,a,l,c,u,g,f={},h,p,C,y;if(y=r.input.charCodeAt(r.position),y===91)l=93,g=!1,s=[];else if(y===123)l=125,g=!0,s={};else return!1;for(r.anchor!==null&&(r.anchorMap[r.anchor]=s),y=r.input.charCodeAt(++r.position);y!==0;){if(zr(r,!0,e),y=r.input.charCodeAt(r.position),y===l)return r.position++,r.tag=n,r.anchor=o,r.kind=g?"mapping":"sequence",r.result=s,!0;t||ft(r,"missed comma between flow collection entries"),p=h=C=null,c=u=!1,y===63&&(a=r.input.charCodeAt(r.position+1),un(a)&&(c=u=!0,r.position++,zr(r,!0,e))),i=r.line,Pg(r,e,aI,!1,!0),p=r.tag,h=r.result,zr(r,!0,e),y=r.input.charCodeAt(r.position),(u||r.line===i)&&y===58&&(c=!0,y=r.input.charCodeAt(++r.position),zr(r,!0,e),Pg(r,e,aI,!1,!0),C=r.result),g?xg(r,s,f,p,h,C):c?s.push(xg(r,null,f,p,h,C)):s.push(h),zr(r,!0,e),y=r.input.charCodeAt(r.position),y===44?(t=!0,y=r.input.charCodeAt(++r.position)):t=!1}ft(r,"unexpected end of the stream within a flow collection")}function vhe(r,e){var t,i,n=kS,s=!1,o=!1,a=e,l=0,c=!1,u,g;if(g=r.input.charCodeAt(r.position),g===124)i=!1;else if(g===62)i=!0;else return!1;for(r.kind="scalar",r.result="";g!==0;)if(g=r.input.charCodeAt(++r.position),g===43||g===45)kS===n?n=g===43?MU:hhe:ft(r,"repeat of a chomping mode identifier");else if((u=Ihe(g))>=0)u===0?ft(r,"bad explicit indentation width of a block scalar; it cannot be less than one"):o?ft(r,"repeat of an indentation width identifier"):(a=e+u-1,o=!0);else break;if(Jl(g)){do g=r.input.charCodeAt(++r.position);while(Jl(g));if(g===35)do g=r.input.charCodeAt(++r.position);while(!Bo(g)&&g!==0)}for(;g!==0;){for(RS(r),r.lineIndent=0,g=r.input.charCodeAt(r.position);(!o||r.lineIndenta&&(a=r.lineIndent),Bo(g)){l++;continue}if(r.lineIndente)&&l!==0)ft(r,"bad indentation of a sequence entry");else if(r.lineIndente)&&(Pg(r,e,AI,!0,n)&&(p?f=r.result:h=r.result),p||(xg(r,c,u,g,f,h,s,o),g=f=h=null),zr(r,!0,-1),y=r.input.charCodeAt(r.position)),r.lineIndent>e&&y!==0)ft(r,"bad indentation of a mapping entry");else if(r.lineIndente?l=1:r.lineIndent===e?l=0:r.lineIndente?l=1:r.lineIndent===e?l=0:r.lineIndent tag; it should be "scalar", not "'+r.kind+'"'),g=0,f=r.implicitTypes.length;g tag; it should be "'+h.kind+'", not "'+r.kind+'"'),h.resolve(r.result)?(r.result=h.construct(r.result),r.anchor!==null&&(r.anchorMap[r.anchor]=r.result)):ft(r,"cannot resolve a node with !<"+r.tag+"> explicit tag")):ft(r,"unknown tag !<"+r.tag+">");return r.listener!==null&&r.listener("close",r),r.tag!==null||r.anchor!==null||u}function Rhe(r){var e=r.position,t,i,n,s=!1,o;for(r.version=null,r.checkLineBreaks=r.legacy,r.tagMap={},r.anchorMap={};(o=r.input.charCodeAt(r.position))!==0&&(zr(r,!0,-1),o=r.input.charCodeAt(r.position),!(r.lineIndent>0||o!==37));){for(s=!0,o=r.input.charCodeAt(++r.position),t=r.position;o!==0&&!un(o);)o=r.input.charCodeAt(++r.position);for(i=r.input.slice(t,r.position),n=[],i.length<1&&ft(r,"directive name must not be less than one character in length");o!==0;){for(;Jl(o);)o=r.input.charCodeAt(++r.position);if(o===35){do o=r.input.charCodeAt(++r.position);while(o!==0&&!Bo(o));break}if(Bo(o))break;for(t=r.position;o!==0&&!un(o);)o=r.input.charCodeAt(++r.position);n.push(r.input.slice(t,r.position))}o!==0&&RS(r),wA.call(HU,i)?HU[i](r,i,n):lI(r,'unknown document directive "'+i+'"')}if(zr(r,!0,-1),r.lineIndent===0&&r.input.charCodeAt(r.position)===45&&r.input.charCodeAt(r.position+1)===45&&r.input.charCodeAt(r.position+2)===45?(r.position+=3,zr(r,!0,-1)):s&&ft(r,"directives end mark is expected"),Pg(r,r.lineIndent-1,AI,!1,!0),zr(r,!0,-1),r.checkLineBreaks&&dhe.test(r.input.slice(e,r.position))&&lI(r,"non-ASCII line breaks are interpreted as content"),r.documents.push(r.result),r.position===r.lineStart&&cI(r)){r.input.charCodeAt(r.position)===46&&(r.position+=3,zr(r,!0,-1));return}if(r.position"u"&&(t=e,e=null);var i=$U(r,t);if(typeof e!="function")return i;for(var n=0,s=i.length;n"u"&&(t=e,e=null),e2(r,e,da.extend({schema:qU},t))}function Nhe(r,e){return t2(r,da.extend({schema:qU},e))}Kp.exports.loadAll=e2;Kp.exports.load=t2;Kp.exports.safeLoadAll=Fhe;Kp.exports.safeLoad=Nhe});var b2=w((UXe,OS)=>{"use strict";var Hp=Gl(),Gp=Qg(),Lhe=Mp(),The=Sg(),c2=Object.prototype.toString,u2=Object.prototype.hasOwnProperty,Ohe=9,Up=10,Mhe=13,Khe=32,Uhe=33,Hhe=34,g2=35,Ghe=37,Yhe=38,jhe=39,qhe=42,f2=44,Jhe=45,h2=58,Whe=61,zhe=62,Vhe=63,Xhe=64,p2=91,d2=93,_he=96,C2=123,Zhe=124,m2=125,Fi={};Fi[0]="\\0";Fi[7]="\\a";Fi[8]="\\b";Fi[9]="\\t";Fi[10]="\\n";Fi[11]="\\v";Fi[12]="\\f";Fi[13]="\\r";Fi[27]="\\e";Fi[34]='\\"';Fi[92]="\\\\";Fi[133]="\\N";Fi[160]="\\_";Fi[8232]="\\L";Fi[8233]="\\P";var $he=["y","Y","yes","Yes","YES","on","On","ON","n","N","no","No","NO","off","Off","OFF"];function epe(r,e){var t,i,n,s,o,a,l;if(e===null)return{};for(t={},i=Object.keys(e),n=0,s=i.length;n0?r.charCodeAt(s-1):null,f=f&&s2(o,a)}else{for(s=0;si&&r[g+1]!==" ",g=s);else if(!Dg(o))return uI;a=s>0?r.charCodeAt(s-1):null,f=f&&s2(o,a)}c=c||u&&s-g-1>i&&r[g+1]!==" "}return!l&&!c?f&&!n(r)?I2:y2:t>9&&E2(r)?uI:c?B2:w2}function ope(r,e,t,i){r.dump=function(){if(e.length===0)return"''";if(!r.noCompatMode&&$he.indexOf(e)!==-1)return"'"+e+"'";var n=r.indent*Math.max(1,t),s=r.lineWidth===-1?-1:Math.max(Math.min(r.lineWidth,40),r.lineWidth-n),o=i||r.flowLevel>-1&&t>=r.flowLevel;function a(l){return rpe(r,l)}switch(spe(e,o,r.indent,s,a)){case I2:return e;case y2:return"'"+e.replace(/'/g,"''")+"'";case w2:return"|"+o2(e,r.indent)+a2(n2(e,n));case B2:return">"+o2(e,r.indent)+a2(n2(ape(e,s),n));case uI:return'"'+Ape(e,s)+'"';default:throw new Gp("impossible error: invalid scalar style")}}()}function o2(r,e){var t=E2(r)?String(e):"",i=r[r.length-1]===` -`,n=i&&(r[r.length-2]===` -`||r===` -`),s=n?"+":i?"":"-";return t+s+` -`}function a2(r){return r[r.length-1]===` -`?r.slice(0,-1):r}function ape(r,e){for(var t=/(\n+)([^\n]*)/g,i=function(){var c=r.indexOf(` -`);return c=c!==-1?c:r.length,t.lastIndex=c,A2(r.slice(0,c),e)}(),n=r[0]===` -`||r[0]===" ",s,o;o=t.exec(r);){var a=o[1],l=o[2];s=l[0]===" ",i+=a+(!n&&!s&&l!==""?` -`:"")+A2(l,e),n=s}return i}function A2(r,e){if(r===""||r[0]===" ")return r;for(var t=/ [^ ]/g,i,n=0,s,o=0,a=0,l="";i=t.exec(r);)a=i.index,a-n>e&&(s=o>n?o:a,l+=` -`+r.slice(n,s),n=s+1),o=a;return l+=` -`,r.length-n>e&&o>n?l+=r.slice(n,o)+` -`+r.slice(o+1):l+=r.slice(n),l.slice(1)}function Ape(r){for(var e="",t,i,n,s=0;s=55296&&t<=56319&&(i=r.charCodeAt(s+1),i>=56320&&i<=57343)){e+=i2((t-55296)*1024+i-56320+65536),s++;continue}n=Fi[t],e+=!n&&Dg(t)?r[s]:n||i2(t)}return e}function lpe(r,e,t){var i="",n=r.tag,s,o;for(s=0,o=t.length;s1024&&(u+="? "),u+=r.dump+(r.condenseFlow?'"':"")+":"+(r.condenseFlow?"":" "),Wl(r,e,c,!1,!1)&&(u+=r.dump,i+=u));r.tag=n,r.dump="{"+i+"}"}function gpe(r,e,t,i){var n="",s=r.tag,o=Object.keys(t),a,l,c,u,g,f;if(r.sortKeys===!0)o.sort();else if(typeof r.sortKeys=="function")o.sort(r.sortKeys);else if(r.sortKeys)throw new Gp("sortKeys must be a boolean or a function");for(a=0,l=o.length;a1024,g&&(r.dump&&Up===r.dump.charCodeAt(0)?f+="?":f+="? "),f+=r.dump,g&&(f+=NS(r,e)),Wl(r,e+1,u,!0,g)&&(r.dump&&Up===r.dump.charCodeAt(0)?f+=":":f+=": ",f+=r.dump,n+=f));r.tag=s,r.dump=n||"{}"}function l2(r,e,t){var i,n,s,o,a,l;for(n=t?r.explicitTypes:r.implicitTypes,s=0,o=n.length;s tag resolver accepts not "'+l+'" style');r.dump=i}return!0}return!1}function Wl(r,e,t,i,n,s){r.tag=null,r.dump=t,l2(r,t,!1)||l2(r,t,!0);var o=c2.call(r.dump);i&&(i=r.flowLevel<0||r.flowLevel>e);var a=o==="[object Object]"||o==="[object Array]",l,c;if(a&&(l=r.duplicates.indexOf(t),c=l!==-1),(r.tag!==null&&r.tag!=="?"||c||r.indent!==2&&e>0)&&(n=!1),c&&r.usedDuplicates[l])r.dump="*ref_"+l;else{if(a&&c&&!r.usedDuplicates[l]&&(r.usedDuplicates[l]=!0),o==="[object Object]")i&&Object.keys(r.dump).length!==0?(gpe(r,e,r.dump,n),c&&(r.dump="&ref_"+l+r.dump)):(upe(r,e,r.dump),c&&(r.dump="&ref_"+l+" "+r.dump));else if(o==="[object Array]"){var u=r.noArrayIndent&&e>0?e-1:e;i&&r.dump.length!==0?(cpe(r,u,r.dump,n),c&&(r.dump="&ref_"+l+r.dump)):(lpe(r,u,r.dump),c&&(r.dump="&ref_"+l+" "+r.dump))}else if(o==="[object String]")r.tag!=="?"&&ope(r,r.dump,e,s);else{if(r.skipInvalid)return!1;throw new Gp("unacceptable kind of an object to dump "+o)}r.tag!==null&&r.tag!=="?"&&(r.dump="!<"+r.tag+"> "+r.dump)}return!0}function fpe(r,e){var t=[],i=[],n,s;for(LS(r,t,i),n=0,s=i.length;n{"use strict";var gI=r2(),S2=b2();function fI(r){return function(){throw new Error("Function "+r+" is deprecated and cannot be used.")}}Fr.exports.Type=si();Fr.exports.Schema=Yl();Fr.exports.FAILSAFE_SCHEMA=sI();Fr.exports.JSON_SCHEMA=xS();Fr.exports.CORE_SCHEMA=PS();Fr.exports.DEFAULT_SAFE_SCHEMA=Sg();Fr.exports.DEFAULT_FULL_SCHEMA=Mp();Fr.exports.load=gI.load;Fr.exports.loadAll=gI.loadAll;Fr.exports.safeLoad=gI.safeLoad;Fr.exports.safeLoadAll=gI.safeLoadAll;Fr.exports.dump=S2.dump;Fr.exports.safeDump=S2.safeDump;Fr.exports.YAMLException=Qg();Fr.exports.MINIMAL_SCHEMA=sI();Fr.exports.SAFE_SCHEMA=Sg();Fr.exports.DEFAULT_SCHEMA=Mp();Fr.exports.scan=fI("scan");Fr.exports.parse=fI("parse");Fr.exports.compose=fI("compose");Fr.exports.addConstructor=fI("addConstructor")});var P2=w((GXe,x2)=>{"use strict";var ppe=v2();x2.exports=ppe});var k2=w((YXe,D2)=>{"use strict";function dpe(r,e){function t(){this.constructor=r}t.prototype=e.prototype,r.prototype=new t}function zl(r,e,t,i){this.message=r,this.expected=e,this.found=t,this.location=i,this.name="SyntaxError",typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(this,zl)}dpe(zl,Error);zl.buildMessage=function(r,e){var t={literal:function(c){return'"'+n(c.text)+'"'},class:function(c){var u="",g;for(g=0;g0){for(g=1,f=1;g({[Ke]:Ce})))},H=function(R){return R},j=function(R){return R},$=Ts("correct indentation"),V=" ",W=ar(" ",!1),Z=function(R){return R.length===pA*ug},A=function(R){return R.length===(pA+1)*ug},ae=function(){return pA++,!0},ge=function(){return pA--,!0},re=function(){return sg()},O=Ts("pseudostring"),F=/^[^\r\n\t ?:,\][{}#&*!|>'"%@`\-]/,ue=Rn(["\r",` -`," "," ","?",":",",","]","[","{","}","#","&","*","!","|",">","'",'"',"%","@","`","-"],!0,!1),he=/^[^\r\n\t ,\][{}:#"']/,ke=Rn(["\r",` -`," "," ",",","]","[","{","}",":","#",'"',"'"],!0,!1),Fe=function(){return sg().replace(/^ *| *$/g,"")},Ne="--",oe=ar("--",!1),le=/^[a-zA-Z\/0-9]/,we=Rn([["a","z"],["A","Z"],"/",["0","9"]],!1,!1),fe=/^[^\r\n\t :,]/,Ae=Rn(["\r",` -`," "," ",":",","],!0,!1),qe="null",ne=ar("null",!1),Y=function(){return null},pe="true",ie=ar("true",!1),de=function(){return!0},tt="false",Pt=ar("false",!1),It=function(){return!1},Or=Ts("string"),ii='"',gi=ar('"',!1),hr=function(){return""},fi=function(R){return R},ni=function(R){return R.join("")},Ls=/^[^"\\\0-\x1F\x7F]/,pr=Rn(['"',"\\",["\0",""],"\x7F"],!0,!1),Ei='\\"',_n=ar('\\"',!1),oa=function(){return'"'},aA="\\\\",eg=ar("\\\\",!1),Zn=function(){return"\\"},AA="\\/",aa=ar("\\/",!1),up=function(){return"/"},lA="\\b",cA=ar("\\b",!1),wr=function(){return"\b"},wl="\\f",tg=ar("\\f",!1),po=function(){return"\f"},rg="\\n",gp=ar("\\n",!1),fp=function(){return` -`},vr="\\r",se=ar("\\r",!1),Co=function(){return"\r"},Dn="\\t",ig=ar("\\t",!1),Qt=function(){return" "},Bl="\\u",kn=ar("\\u",!1),$n=function(R,q,Ce,Ke){return String.fromCharCode(parseInt(`0x${R}${q}${Ce}${Ke}`))},es=/^[0-9a-fA-F]/,gt=Rn([["0","9"],["a","f"],["A","F"]],!1,!1),mo=Ts("blank space"),At=/^[ \t]/,an=Rn([" "," "],!1,!1),S=Ts("white space"),Tt=/^[ \t\n\r]/,ng=Rn([" "," ",` -`,"\r"],!1,!1),Ql=`\r -`,hp=ar(`\r -`,!1),pp=` -`,dp=ar(` -`,!1),Cp="\r",mp=ar("\r",!1),G=0,yt=0,uA=[{line:1,column:1}],ji=0,bl=[],Xe=0,Aa;if("startRule"in e){if(!(e.startRule in i))throw new Error(`Can't start parsing from rule "`+e.startRule+'".');n=i[e.startRule]}function sg(){return r.substring(yt,G)}function bE(){return An(yt,G)}function Ep(R,q){throw q=q!==void 0?q:An(yt,G),vl([Ts(R)],r.substring(yt,G),q)}function SE(R,q){throw q=q!==void 0?q:An(yt,G),og(R,q)}function ar(R,q){return{type:"literal",text:R,ignoreCase:q}}function Rn(R,q,Ce){return{type:"class",parts:R,inverted:q,ignoreCase:Ce}}function Sl(){return{type:"any"}}function Ip(){return{type:"end"}}function Ts(R){return{type:"other",description:R}}function la(R){var q=uA[R],Ce;if(q)return q;for(Ce=R-1;!uA[Ce];)Ce--;for(q=uA[Ce],q={line:q.line,column:q.column};Ceji&&(ji=G,bl=[]),bl.push(R))}function og(R,q){return new zl(R,null,null,q)}function vl(R,q,Ce){return new zl(zl.buildMessage(R,q),R,q,Ce)}function Os(){var R;return R=ag(),R}function xl(){var R,q,Ce;for(R=G,q=[],Ce=gA();Ce!==t;)q.push(Ce),Ce=gA();return q!==t&&(yt=R,q=s(q)),R=q,R}function gA(){var R,q,Ce,Ke,Re;return R=G,q=ua(),q!==t?(r.charCodeAt(G)===45?(Ce=o,G++):(Ce=t,Xe===0&&Te(a)),Ce!==t?(Ke=Rr(),Ke!==t?(Re=ca(),Re!==t?(yt=R,q=l(Re),R=q):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t),R}function ag(){var R,q,Ce;for(R=G,q=[],Ce=Ag();Ce!==t;)q.push(Ce),Ce=Ag();return q!==t&&(yt=R,q=c(q)),R=q,R}function Ag(){var R,q,Ce,Ke,Re,ze,dt,Ft,Fn;if(R=G,q=Rr(),q===t&&(q=null),q!==t){if(Ce=G,r.charCodeAt(G)===35?(Ke=u,G++):(Ke=t,Xe===0&&Te(g)),Ke!==t){if(Re=[],ze=G,dt=G,Xe++,Ft=Us(),Xe--,Ft===t?dt=void 0:(G=dt,dt=t),dt!==t?(r.length>G?(Ft=r.charAt(G),G++):(Ft=t,Xe===0&&Te(f)),Ft!==t?(dt=[dt,Ft],ze=dt):(G=ze,ze=t)):(G=ze,ze=t),ze!==t)for(;ze!==t;)Re.push(ze),ze=G,dt=G,Xe++,Ft=Us(),Xe--,Ft===t?dt=void 0:(G=dt,dt=t),dt!==t?(r.length>G?(Ft=r.charAt(G),G++):(Ft=t,Xe===0&&Te(f)),Ft!==t?(dt=[dt,Ft],ze=dt):(G=ze,ze=t)):(G=ze,ze=t);else Re=t;Re!==t?(Ke=[Ke,Re],Ce=Ke):(G=Ce,Ce=t)}else G=Ce,Ce=t;if(Ce===t&&(Ce=null),Ce!==t){if(Ke=[],Re=Ks(),Re!==t)for(;Re!==t;)Ke.push(Re),Re=Ks();else Ke=t;Ke!==t?(yt=R,q=h(),R=q):(G=R,R=t)}else G=R,R=t}else G=R,R=t;if(R===t&&(R=G,q=ua(),q!==t?(Ce=Pl(),Ce!==t?(Ke=Rr(),Ke===t&&(Ke=null),Ke!==t?(r.charCodeAt(G)===58?(Re=p,G++):(Re=t,Xe===0&&Te(C)),Re!==t?(ze=Rr(),ze===t&&(ze=null),ze!==t?(dt=ca(),dt!==t?(yt=R,q=y(Ce,dt),R=q):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t),R===t&&(R=G,q=ua(),q!==t?(Ce=Ms(),Ce!==t?(Ke=Rr(),Ke===t&&(Ke=null),Ke!==t?(r.charCodeAt(G)===58?(Re=p,G++):(Re=t,Xe===0&&Te(C)),Re!==t?(ze=Rr(),ze===t&&(ze=null),ze!==t?(dt=ca(),dt!==t?(yt=R,q=y(Ce,dt),R=q):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t),R===t))){if(R=G,q=ua(),q!==t)if(Ce=Ms(),Ce!==t)if(Ke=Rr(),Ke!==t)if(Re=vE(),Re!==t){if(ze=[],dt=Ks(),dt!==t)for(;dt!==t;)ze.push(dt),dt=Ks();else ze=t;ze!==t?(yt=R,q=y(Ce,Re),R=q):(G=R,R=t)}else G=R,R=t;else G=R,R=t;else G=R,R=t;else G=R,R=t;if(R===t)if(R=G,q=ua(),q!==t)if(Ce=Ms(),Ce!==t){if(Ke=[],Re=G,ze=Rr(),ze===t&&(ze=null),ze!==t?(r.charCodeAt(G)===44?(dt=B,G++):(dt=t,Xe===0&&Te(v)),dt!==t?(Ft=Rr(),Ft===t&&(Ft=null),Ft!==t?(Fn=Ms(),Fn!==t?(yt=Re,ze=D(Ce,Fn),Re=ze):(G=Re,Re=t)):(G=Re,Re=t)):(G=Re,Re=t)):(G=Re,Re=t),Re!==t)for(;Re!==t;)Ke.push(Re),Re=G,ze=Rr(),ze===t&&(ze=null),ze!==t?(r.charCodeAt(G)===44?(dt=B,G++):(dt=t,Xe===0&&Te(v)),dt!==t?(Ft=Rr(),Ft===t&&(Ft=null),Ft!==t?(Fn=Ms(),Fn!==t?(yt=Re,ze=D(Ce,Fn),Re=ze):(G=Re,Re=t)):(G=Re,Re=t)):(G=Re,Re=t)):(G=Re,Re=t);else Ke=t;Ke!==t?(Re=Rr(),Re===t&&(Re=null),Re!==t?(r.charCodeAt(G)===58?(ze=p,G++):(ze=t,Xe===0&&Te(C)),ze!==t?(dt=Rr(),dt===t&&(dt=null),dt!==t?(Ft=ca(),Ft!==t?(yt=R,q=L(Ce,Ke,Ft),R=q):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)}else G=R,R=t;else G=R,R=t}return R}function ca(){var R,q,Ce,Ke,Re,ze,dt;if(R=G,q=G,Xe++,Ce=G,Ke=Us(),Ke!==t?(Re=rt(),Re!==t?(r.charCodeAt(G)===45?(ze=o,G++):(ze=t,Xe===0&&Te(a)),ze!==t?(dt=Rr(),dt!==t?(Ke=[Ke,Re,ze,dt],Ce=Ke):(G=Ce,Ce=t)):(G=Ce,Ce=t)):(G=Ce,Ce=t)):(G=Ce,Ce=t),Xe--,Ce!==t?(G=q,q=void 0):q=t,q!==t?(Ce=Ks(),Ce!==t?(Ke=Eo(),Ke!==t?(Re=xl(),Re!==t?(ze=fA(),ze!==t?(yt=R,q=H(Re),R=q):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t),R===t&&(R=G,q=Us(),q!==t?(Ce=Eo(),Ce!==t?(Ke=ag(),Ke!==t?(Re=fA(),Re!==t?(yt=R,q=H(Ke),R=q):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t),R===t))if(R=G,q=Dl(),q!==t){if(Ce=[],Ke=Ks(),Ke!==t)for(;Ke!==t;)Ce.push(Ke),Ke=Ks();else Ce=t;Ce!==t?(yt=R,q=j(q),R=q):(G=R,R=t)}else G=R,R=t;return R}function ua(){var R,q,Ce;for(Xe++,R=G,q=[],r.charCodeAt(G)===32?(Ce=V,G++):(Ce=t,Xe===0&&Te(W));Ce!==t;)q.push(Ce),r.charCodeAt(G)===32?(Ce=V,G++):(Ce=t,Xe===0&&Te(W));return q!==t?(yt=G,Ce=Z(q),Ce?Ce=void 0:Ce=t,Ce!==t?(q=[q,Ce],R=q):(G=R,R=t)):(G=R,R=t),Xe--,R===t&&(q=t,Xe===0&&Te($)),R}function rt(){var R,q,Ce;for(R=G,q=[],r.charCodeAt(G)===32?(Ce=V,G++):(Ce=t,Xe===0&&Te(W));Ce!==t;)q.push(Ce),r.charCodeAt(G)===32?(Ce=V,G++):(Ce=t,Xe===0&&Te(W));return q!==t?(yt=G,Ce=A(q),Ce?Ce=void 0:Ce=t,Ce!==t?(q=[q,Ce],R=q):(G=R,R=t)):(G=R,R=t),R}function Eo(){var R;return yt=G,R=ae(),R?R=void 0:R=t,R}function fA(){var R;return yt=G,R=ge(),R?R=void 0:R=t,R}function Pl(){var R;return R=kl(),R===t&&(R=yp()),R}function Ms(){var R,q,Ce;if(R=kl(),R===t){if(R=G,q=[],Ce=lg(),Ce!==t)for(;Ce!==t;)q.push(Ce),Ce=lg();else q=t;q!==t&&(yt=R,q=re()),R=q}return R}function Dl(){var R;return R=wp(),R===t&&(R=xE(),R===t&&(R=kl(),R===t&&(R=yp()))),R}function vE(){var R;return R=wp(),R===t&&(R=kl(),R===t&&(R=lg())),R}function yp(){var R,q,Ce,Ke,Re,ze;if(Xe++,R=G,F.test(r.charAt(G))?(q=r.charAt(G),G++):(q=t,Xe===0&&Te(ue)),q!==t){for(Ce=[],Ke=G,Re=Rr(),Re===t&&(Re=null),Re!==t?(he.test(r.charAt(G))?(ze=r.charAt(G),G++):(ze=t,Xe===0&&Te(ke)),ze!==t?(Re=[Re,ze],Ke=Re):(G=Ke,Ke=t)):(G=Ke,Ke=t);Ke!==t;)Ce.push(Ke),Ke=G,Re=Rr(),Re===t&&(Re=null),Re!==t?(he.test(r.charAt(G))?(ze=r.charAt(G),G++):(ze=t,Xe===0&&Te(ke)),ze!==t?(Re=[Re,ze],Ke=Re):(G=Ke,Ke=t)):(G=Ke,Ke=t);Ce!==t?(yt=R,q=Fe(),R=q):(G=R,R=t)}else G=R,R=t;return Xe--,R===t&&(q=t,Xe===0&&Te(O)),R}function lg(){var R,q,Ce,Ke,Re;if(R=G,r.substr(G,2)===Ne?(q=Ne,G+=2):(q=t,Xe===0&&Te(oe)),q===t&&(q=null),q!==t)if(le.test(r.charAt(G))?(Ce=r.charAt(G),G++):(Ce=t,Xe===0&&Te(we)),Ce!==t){for(Ke=[],fe.test(r.charAt(G))?(Re=r.charAt(G),G++):(Re=t,Xe===0&&Te(Ae));Re!==t;)Ke.push(Re),fe.test(r.charAt(G))?(Re=r.charAt(G),G++):(Re=t,Xe===0&&Te(Ae));Ke!==t?(yt=R,q=Fe(),R=q):(G=R,R=t)}else G=R,R=t;else G=R,R=t;return R}function wp(){var R,q;return R=G,r.substr(G,4)===qe?(q=qe,G+=4):(q=t,Xe===0&&Te(ne)),q!==t&&(yt=R,q=Y()),R=q,R}function xE(){var R,q;return R=G,r.substr(G,4)===pe?(q=pe,G+=4):(q=t,Xe===0&&Te(ie)),q!==t&&(yt=R,q=de()),R=q,R===t&&(R=G,r.substr(G,5)===tt?(q=tt,G+=5):(q=t,Xe===0&&Te(Pt)),q!==t&&(yt=R,q=It()),R=q),R}function kl(){var R,q,Ce,Ke;return Xe++,R=G,r.charCodeAt(G)===34?(q=ii,G++):(q=t,Xe===0&&Te(gi)),q!==t?(r.charCodeAt(G)===34?(Ce=ii,G++):(Ce=t,Xe===0&&Te(gi)),Ce!==t?(yt=R,q=hr(),R=q):(G=R,R=t)):(G=R,R=t),R===t&&(R=G,r.charCodeAt(G)===34?(q=ii,G++):(q=t,Xe===0&&Te(gi)),q!==t?(Ce=PE(),Ce!==t?(r.charCodeAt(G)===34?(Ke=ii,G++):(Ke=t,Xe===0&&Te(gi)),Ke!==t?(yt=R,q=fi(Ce),R=q):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)),Xe--,R===t&&(q=t,Xe===0&&Te(Or)),R}function PE(){var R,q,Ce;if(R=G,q=[],Ce=cg(),Ce!==t)for(;Ce!==t;)q.push(Ce),Ce=cg();else q=t;return q!==t&&(yt=R,q=ni(q)),R=q,R}function cg(){var R,q,Ce,Ke,Re,ze;return Ls.test(r.charAt(G))?(R=r.charAt(G),G++):(R=t,Xe===0&&Te(pr)),R===t&&(R=G,r.substr(G,2)===Ei?(q=Ei,G+=2):(q=t,Xe===0&&Te(_n)),q!==t&&(yt=R,q=oa()),R=q,R===t&&(R=G,r.substr(G,2)===aA?(q=aA,G+=2):(q=t,Xe===0&&Te(eg)),q!==t&&(yt=R,q=Zn()),R=q,R===t&&(R=G,r.substr(G,2)===AA?(q=AA,G+=2):(q=t,Xe===0&&Te(aa)),q!==t&&(yt=R,q=up()),R=q,R===t&&(R=G,r.substr(G,2)===lA?(q=lA,G+=2):(q=t,Xe===0&&Te(cA)),q!==t&&(yt=R,q=wr()),R=q,R===t&&(R=G,r.substr(G,2)===wl?(q=wl,G+=2):(q=t,Xe===0&&Te(tg)),q!==t&&(yt=R,q=po()),R=q,R===t&&(R=G,r.substr(G,2)===rg?(q=rg,G+=2):(q=t,Xe===0&&Te(gp)),q!==t&&(yt=R,q=fp()),R=q,R===t&&(R=G,r.substr(G,2)===vr?(q=vr,G+=2):(q=t,Xe===0&&Te(se)),q!==t&&(yt=R,q=Co()),R=q,R===t&&(R=G,r.substr(G,2)===Dn?(q=Dn,G+=2):(q=t,Xe===0&&Te(ig)),q!==t&&(yt=R,q=Qt()),R=q,R===t&&(R=G,r.substr(G,2)===Bl?(q=Bl,G+=2):(q=t,Xe===0&&Te(kn)),q!==t?(Ce=hA(),Ce!==t?(Ke=hA(),Ke!==t?(Re=hA(),Re!==t?(ze=hA(),ze!==t?(yt=R,q=$n(Ce,Ke,Re,ze),R=q):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)):(G=R,R=t)))))))))),R}function hA(){var R;return es.test(r.charAt(G))?(R=r.charAt(G),G++):(R=t,Xe===0&&Te(gt)),R}function Rr(){var R,q;if(Xe++,R=[],At.test(r.charAt(G))?(q=r.charAt(G),G++):(q=t,Xe===0&&Te(an)),q!==t)for(;q!==t;)R.push(q),At.test(r.charAt(G))?(q=r.charAt(G),G++):(q=t,Xe===0&&Te(an));else R=t;return Xe--,R===t&&(q=t,Xe===0&&Te(mo)),R}function DE(){var R,q;if(Xe++,R=[],Tt.test(r.charAt(G))?(q=r.charAt(G),G++):(q=t,Xe===0&&Te(ng)),q!==t)for(;q!==t;)R.push(q),Tt.test(r.charAt(G))?(q=r.charAt(G),G++):(q=t,Xe===0&&Te(ng));else R=t;return Xe--,R===t&&(q=t,Xe===0&&Te(S)),R}function Ks(){var R,q,Ce,Ke,Re,ze;if(R=G,q=Us(),q!==t){for(Ce=[],Ke=G,Re=Rr(),Re===t&&(Re=null),Re!==t?(ze=Us(),ze!==t?(Re=[Re,ze],Ke=Re):(G=Ke,Ke=t)):(G=Ke,Ke=t);Ke!==t;)Ce.push(Ke),Ke=G,Re=Rr(),Re===t&&(Re=null),Re!==t?(ze=Us(),ze!==t?(Re=[Re,ze],Ke=Re):(G=Ke,Ke=t)):(G=Ke,Ke=t);Ce!==t?(q=[q,Ce],R=q):(G=R,R=t)}else G=R,R=t;return R}function Us(){var R;return r.substr(G,2)===Ql?(R=Ql,G+=2):(R=t,Xe===0&&Te(hp)),R===t&&(r.charCodeAt(G)===10?(R=pp,G++):(R=t,Xe===0&&Te(dp)),R===t&&(r.charCodeAt(G)===13?(R=Cp,G++):(R=t,Xe===0&&Te(mp)))),R}let ug=2,pA=0;if(Aa=n(),Aa!==t&&G===r.length)return Aa;throw Aa!==t&&G{"use strict";var wpe=r=>{let e=!1,t=!1,i=!1;for(let n=0;n{if(!(typeof r=="string"||Array.isArray(r)))throw new TypeError("Expected the input to be `string | string[]`");e=Object.assign({pascalCase:!1},e);let t=n=>e.pascalCase?n.charAt(0).toUpperCase()+n.slice(1):n;return Array.isArray(r)?r=r.map(n=>n.trim()).filter(n=>n.length).join("-"):r=r.trim(),r.length===0?"":r.length===1?e.pascalCase?r.toUpperCase():r.toLowerCase():(r!==r.toLowerCase()&&(r=wpe(r)),r=r.replace(/^[_.\- ]+/,"").toLowerCase().replace(/[_.\- ]+(\w|$)/g,(n,s)=>s.toUpperCase()).replace(/\d+(\w|$)/g,n=>n.toUpperCase()),t(r))};KS.exports=T2;KS.exports.default=T2});var M2=w((VXe,Bpe)=>{Bpe.exports=[{name:"AppVeyor",constant:"APPVEYOR",env:"APPVEYOR",pr:"APPVEYOR_PULL_REQUEST_NUMBER"},{name:"Azure Pipelines",constant:"AZURE_PIPELINES",env:"SYSTEM_TEAMFOUNDATIONCOLLECTIONURI",pr:"SYSTEM_PULLREQUEST_PULLREQUESTID"},{name:"Appcircle",constant:"APPCIRCLE",env:"AC_APPCIRCLE"},{name:"Bamboo",constant:"BAMBOO",env:"bamboo_planKey"},{name:"Bitbucket Pipelines",constant:"BITBUCKET",env:"BITBUCKET_COMMIT",pr:"BITBUCKET_PR_ID"},{name:"Bitrise",constant:"BITRISE",env:"BITRISE_IO",pr:"BITRISE_PULL_REQUEST"},{name:"Buddy",constant:"BUDDY",env:"BUDDY_WORKSPACE_ID",pr:"BUDDY_EXECUTION_PULL_REQUEST_ID"},{name:"Buildkite",constant:"BUILDKITE",env:"BUILDKITE",pr:{env:"BUILDKITE_PULL_REQUEST",ne:"false"}},{name:"CircleCI",constant:"CIRCLE",env:"CIRCLECI",pr:"CIRCLE_PULL_REQUEST"},{name:"Cirrus CI",constant:"CIRRUS",env:"CIRRUS_CI",pr:"CIRRUS_PR"},{name:"AWS CodeBuild",constant:"CODEBUILD",env:"CODEBUILD_BUILD_ARN"},{name:"Codefresh",constant:"CODEFRESH",env:"CF_BUILD_ID",pr:{any:["CF_PULL_REQUEST_NUMBER","CF_PULL_REQUEST_ID"]}},{name:"Codeship",constant:"CODESHIP",env:{CI_NAME:"codeship"}},{name:"Drone",constant:"DRONE",env:"DRONE",pr:{DRONE_BUILD_EVENT:"pull_request"}},{name:"dsari",constant:"DSARI",env:"DSARI"},{name:"GitHub Actions",constant:"GITHUB_ACTIONS",env:"GITHUB_ACTIONS",pr:{GITHUB_EVENT_NAME:"pull_request"}},{name:"GitLab CI",constant:"GITLAB",env:"GITLAB_CI",pr:"CI_MERGE_REQUEST_ID"},{name:"GoCD",constant:"GOCD",env:"GO_PIPELINE_LABEL"},{name:"LayerCI",constant:"LAYERCI",env:"LAYERCI",pr:"LAYERCI_PULL_REQUEST"},{name:"Hudson",constant:"HUDSON",env:"HUDSON_URL"},{name:"Jenkins",constant:"JENKINS",env:["JENKINS_URL","BUILD_ID"],pr:{any:["ghprbPullId","CHANGE_ID"]}},{name:"Magnum CI",constant:"MAGNUM",env:"MAGNUM"},{name:"Netlify CI",constant:"NETLIFY",env:"NETLIFY",pr:{env:"PULL_REQUEST",ne:"false"}},{name:"Nevercode",constant:"NEVERCODE",env:"NEVERCODE",pr:{env:"NEVERCODE_PULL_REQUEST",ne:"false"}},{name:"Render",constant:"RENDER",env:"RENDER",pr:{IS_PULL_REQUEST:"true"}},{name:"Sail CI",constant:"SAIL",env:"SAILCI",pr:"SAIL_PULL_REQUEST_NUMBER"},{name:"Semaphore",constant:"SEMAPHORE",env:"SEMAPHORE",pr:"PULL_REQUEST_NUMBER"},{name:"Screwdriver",constant:"SCREWDRIVER",env:"SCREWDRIVER",pr:{env:"SD_PULL_REQUEST",ne:"false"}},{name:"Shippable",constant:"SHIPPABLE",env:"SHIPPABLE",pr:{IS_PULL_REQUEST:"true"}},{name:"Solano CI",constant:"SOLANO",env:"TDDIUM",pr:"TDDIUM_PR_ID"},{name:"Strider CD",constant:"STRIDER",env:"STRIDER"},{name:"TaskCluster",constant:"TASKCLUSTER",env:["TASK_ID","RUN_ID"]},{name:"TeamCity",constant:"TEAMCITY",env:"TEAMCITY_VERSION"},{name:"Travis CI",constant:"TRAVIS",env:"TRAVIS",pr:{env:"TRAVIS_PULL_REQUEST",ne:"false"}},{name:"Vercel",constant:"VERCEL",env:"NOW_BUILDER"},{name:"Visual Studio App Center",constant:"APPCENTER",env:"APPCENTER_BUILD_ID"}]});var Vl=w(On=>{"use strict";var U2=M2(),Qo=process.env;Object.defineProperty(On,"_vendors",{value:U2.map(function(r){return r.constant})});On.name=null;On.isPR=null;U2.forEach(function(r){let t=(Array.isArray(r.env)?r.env:[r.env]).every(function(i){return K2(i)});if(On[r.constant]=t,t)switch(On.name=r.name,typeof r.pr){case"string":On.isPR=!!Qo[r.pr];break;case"object":"env"in r.pr?On.isPR=r.pr.env in Qo&&Qo[r.pr.env]!==r.pr.ne:"any"in r.pr?On.isPR=r.pr.any.some(function(i){return!!Qo[i]}):On.isPR=K2(r.pr);break;default:On.isPR=null}});On.isCI=!!(Qo.CI||Qo.CONTINUOUS_INTEGRATION||Qo.BUILD_NUMBER||Qo.RUN_ID||On.name);function K2(r){return typeof r=="string"?!!Qo[r]:Object.keys(r).every(function(e){return Qo[e]===r[e]})}});var gn={};ut(gn,{KeyRelationship:()=>Xl,applyCascade:()=>zp,base64RegExp:()=>q2,colorStringAlphaRegExp:()=>j2,colorStringRegExp:()=>Y2,computeKey:()=>BA,getPrintable:()=>Vr,hasExactLength:()=>X2,hasForbiddenKeys:()=>tde,hasKeyRelationship:()=>JS,hasMaxLength:()=>Mpe,hasMinLength:()=>Ope,hasMutuallyExclusiveKeys:()=>rde,hasRequiredKeys:()=>ede,hasUniqueItems:()=>Kpe,isArray:()=>Ppe,isAtLeast:()=>Gpe,isAtMost:()=>Ype,isBase64:()=>Zpe,isBoolean:()=>Spe,isDate:()=>xpe,isDict:()=>kpe,isEnum:()=>Wi,isHexColor:()=>_pe,isISO8601:()=>Xpe,isInExclusiveRange:()=>qpe,isInInclusiveRange:()=>jpe,isInstanceOf:()=>Fpe,isInteger:()=>Jpe,isJSON:()=>$pe,isLiteral:()=>Qpe,isLowerCase:()=>Wpe,isNegative:()=>Upe,isNullable:()=>Tpe,isNumber:()=>vpe,isObject:()=>Rpe,isOneOf:()=>Npe,isOptional:()=>Lpe,isPositive:()=>Hpe,isString:()=>Wp,isTuple:()=>Dpe,isUUID4:()=>Vpe,isUnknown:()=>V2,isUpperCase:()=>zpe,iso8601RegExp:()=>qS,makeCoercionFn:()=>_l,makeSetter:()=>z2,makeTrait:()=>W2,makeValidator:()=>bt,matchesRegExp:()=>Vp,plural:()=>EI,pushError:()=>pt,simpleKeyRegExp:()=>G2,uuid4RegExp:()=>J2});function bt({test:r}){return W2(r)()}function Vr(r){return r===null?"null":r===void 0?"undefined":r===""?"an empty string":JSON.stringify(r)}function BA(r,e){var t,i,n;return typeof e=="number"?`${(t=r==null?void 0:r.p)!==null&&t!==void 0?t:"."}[${e}]`:G2.test(e)?`${(i=r==null?void 0:r.p)!==null&&i!==void 0?i:""}.${e}`:`${(n=r==null?void 0:r.p)!==null&&n!==void 0?n:"."}[${JSON.stringify(e)}]`}function _l(r,e){return t=>{let i=r[e];return r[e]=t,_l(r,e).bind(null,i)}}function z2(r,e){return t=>{r[e]=t}}function EI(r,e,t){return r===1?e:t}function pt({errors:r,p:e}={},t){return r==null||r.push(`${e!=null?e:"."}: ${t}`),!1}function Qpe(r){return bt({test:(e,t)=>e!==r?pt(t,`Expected a literal (got ${Vr(r)})`):!0})}function Wi(r){let e=Array.isArray(r)?r:Object.values(r),t=new Set(e);return bt({test:(i,n)=>t.has(i)?!0:pt(n,`Expected a valid enumeration value (got ${Vr(i)})`)})}var G2,Y2,j2,q2,J2,qS,W2,V2,Wp,bpe,Spe,vpe,xpe,Ppe,Dpe,kpe,Rpe,Fpe,Npe,zp,Lpe,Tpe,Ope,Mpe,X2,Kpe,Upe,Hpe,Gpe,Ype,jpe,qpe,Jpe,Vp,Wpe,zpe,Vpe,Xpe,_pe,Zpe,$pe,ede,tde,rde,Xl,ide,JS,ns=Yue(()=>{G2=/^[a-zA-Z_][a-zA-Z0-9_]*$/,Y2=/^#[0-9a-f]{6}$/i,j2=/^#[0-9a-f]{6}([0-9a-f]{2})?$/i,q2=/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/,J2=/^[a-f0-9]{8}-[a-f0-9]{4}-4[a-f0-9]{3}-[89aAbB][a-f0-9]{3}-[a-f0-9]{12}$/i,qS=/^(?:[1-9]\d{3}(-?)(?:(?:0[1-9]|1[0-2])\1(?:0[1-9]|1\d|2[0-8])|(?:0[13-9]|1[0-2])\1(?:29|30)|(?:0[13578]|1[02])(?:\1)31|00[1-9]|0[1-9]\d|[12]\d{2}|3(?:[0-5]\d|6[0-5]))|(?:[1-9]\d(?:0[48]|[2468][048]|[13579][26])|(?:[2468][048]|[13579][26])00)(?:(-?)02(?:\2)29|-?366))T(?:[01]\d|2[0-3])(:?)[0-5]\d(?:\3[0-5]\d)?(?:Z|[+-][01]\d(?:\3[0-5]\d)?)$/,W2=r=>()=>r;V2=()=>bt({test:(r,e)=>!0});Wp=()=>bt({test:(r,e)=>typeof r!="string"?pt(e,`Expected a string (got ${Vr(r)})`):!0});bpe=new Map([["true",!0],["True",!0],["1",!0],[1,!0],["false",!1],["False",!1],["0",!1],[0,!1]]),Spe=()=>bt({test:(r,e)=>{var t;if(typeof r!="boolean"){if(typeof(e==null?void 0:e.coercions)<"u"){if(typeof(e==null?void 0:e.coercion)>"u")return pt(e,"Unbound coercion result");let i=bpe.get(r);if(typeof i<"u")return e.coercions.push([(t=e.p)!==null&&t!==void 0?t:".",e.coercion.bind(null,i)]),!0}return pt(e,`Expected a boolean (got ${Vr(r)})`)}return!0}}),vpe=()=>bt({test:(r,e)=>{var t;if(typeof r!="number"){if(typeof(e==null?void 0:e.coercions)<"u"){if(typeof(e==null?void 0:e.coercion)>"u")return pt(e,"Unbound coercion result");let i;if(typeof r=="string"){let n;try{n=JSON.parse(r)}catch{}if(typeof n=="number")if(JSON.stringify(n)===r)i=n;else return pt(e,`Received a number that can't be safely represented by the runtime (${r})`)}if(typeof i<"u")return e.coercions.push([(t=e.p)!==null&&t!==void 0?t:".",e.coercion.bind(null,i)]),!0}return pt(e,`Expected a number (got ${Vr(r)})`)}return!0}}),xpe=()=>bt({test:(r,e)=>{var t;if(!(r instanceof Date)){if(typeof(e==null?void 0:e.coercions)<"u"){if(typeof(e==null?void 0:e.coercion)>"u")return pt(e,"Unbound coercion result");let i;if(typeof r=="string"&&qS.test(r))i=new Date(r);else{let n;if(typeof r=="string"){let s;try{s=JSON.parse(r)}catch{}typeof s=="number"&&(n=s)}else typeof r=="number"&&(n=r);if(typeof n<"u")if(Number.isSafeInteger(n)||!Number.isSafeInteger(n*1e3))i=new Date(n*1e3);else return pt(e,`Received a timestamp that can't be safely represented by the runtime (${r})`)}if(typeof i<"u")return e.coercions.push([(t=e.p)!==null&&t!==void 0?t:".",e.coercion.bind(null,i)]),!0}return pt(e,`Expected a date (got ${Vr(r)})`)}return!0}}),Ppe=(r,{delimiter:e}={})=>bt({test:(t,i)=>{var n;if(typeof t=="string"&&typeof e<"u"&&typeof(i==null?void 0:i.coercions)<"u"){if(typeof(i==null?void 0:i.coercion)>"u")return pt(i,"Unbound coercion result");t=t.split(e),i.coercions.push([(n=i.p)!==null&&n!==void 0?n:".",i.coercion.bind(null,t)])}if(!Array.isArray(t))return pt(i,`Expected an array (got ${Vr(t)})`);let s=!0;for(let o=0,a=t.length;o{let t=X2(r.length);return bt({test:(i,n)=>{var s;if(typeof i=="string"&&typeof e<"u"&&typeof(n==null?void 0:n.coercions)<"u"){if(typeof(n==null?void 0:n.coercion)>"u")return pt(n,"Unbound coercion result");i=i.split(e),n.coercions.push([(s=n.p)!==null&&s!==void 0?s:".",n.coercion.bind(null,i)])}if(!Array.isArray(i))return pt(n,`Expected a tuple (got ${Vr(i)})`);let o=t(i,Object.assign({},n));for(let a=0,l=i.length;abt({test:(t,i)=>{if(typeof t!="object"||t===null)return pt(i,`Expected an object (got ${Vr(t)})`);let n=Object.keys(t),s=!0;for(let o=0,a=n.length;o{let t=Object.keys(r);return bt({test:(i,n)=>{if(typeof i!="object"||i===null)return pt(n,`Expected an object (got ${Vr(i)})`);let s=new Set([...t,...Object.keys(i)]),o={},a=!0;for(let l of s){if(l==="constructor"||l==="__proto__")a=pt(Object.assign(Object.assign({},n),{p:BA(n,l)}),"Unsafe property name");else{let c=Object.prototype.hasOwnProperty.call(r,l)?r[l]:void 0,u=Object.prototype.hasOwnProperty.call(i,l)?i[l]:void 0;typeof c<"u"?a=c(u,Object.assign(Object.assign({},n),{p:BA(n,l),coercion:_l(i,l)}))&&a:e===null?a=pt(Object.assign(Object.assign({},n),{p:BA(n,l)}),`Extraneous property (got ${Vr(u)})`):Object.defineProperty(o,l,{enumerable:!0,get:()=>u,set:z2(i,l)})}if(!a&&(n==null?void 0:n.errors)==null)break}return e!==null&&(a||(n==null?void 0:n.errors)!=null)&&(a=e(o,n)&&a),a}})},Fpe=r=>bt({test:(e,t)=>e instanceof r?!0:pt(t,`Expected an instance of ${r.name} (got ${Vr(e)})`)}),Npe=(r,{exclusive:e=!1}={})=>bt({test:(t,i)=>{var n,s,o;let a=[],l=typeof(i==null?void 0:i.errors)<"u"?[]:void 0;for(let c=0,u=r.length;c1?pt(i,`Expected to match exactly a single predicate (matched ${a.join(", ")})`):(o=i==null?void 0:i.errors)===null||o===void 0||o.push(...l),!1}}),zp=(r,e)=>bt({test:(t,i)=>{var n,s;let o={value:t},a=typeof(i==null?void 0:i.coercions)<"u"?_l(o,"value"):void 0,l=typeof(i==null?void 0:i.coercions)<"u"?[]:void 0;if(!r(t,Object.assign(Object.assign({},i),{coercion:a,coercions:l})))return!1;let c=[];if(typeof l<"u")for(let[,u]of l)c.push(u());try{if(typeof(i==null?void 0:i.coercions)<"u"){if(o.value!==t){if(typeof(i==null?void 0:i.coercion)>"u")return pt(i,"Unbound coercion result");i.coercions.push([(n=i.p)!==null&&n!==void 0?n:".",i.coercion.bind(null,o.value)])}(s=i==null?void 0:i.coercions)===null||s===void 0||s.push(...l)}return e.every(u=>u(o.value,i))}finally{for(let u of c)u()}}}),Lpe=r=>bt({test:(e,t)=>typeof e>"u"?!0:r(e,t)}),Tpe=r=>bt({test:(e,t)=>e===null?!0:r(e,t)}),Ope=r=>bt({test:(e,t)=>e.length>=r?!0:pt(t,`Expected to have a length of at least ${r} elements (got ${e.length})`)}),Mpe=r=>bt({test:(e,t)=>e.length<=r?!0:pt(t,`Expected to have a length of at most ${r} elements (got ${e.length})`)}),X2=r=>bt({test:(e,t)=>e.length!==r?pt(t,`Expected to have a length of exactly ${r} elements (got ${e.length})`):!0}),Kpe=({map:r}={})=>bt({test:(e,t)=>{let i=new Set,n=new Set;for(let s=0,o=e.length;sbt({test:(r,e)=>r<=0?!0:pt(e,`Expected to be negative (got ${r})`)}),Hpe=()=>bt({test:(r,e)=>r>=0?!0:pt(e,`Expected to be positive (got ${r})`)}),Gpe=r=>bt({test:(e,t)=>e>=r?!0:pt(t,`Expected to be at least ${r} (got ${e})`)}),Ype=r=>bt({test:(e,t)=>e<=r?!0:pt(t,`Expected to be at most ${r} (got ${e})`)}),jpe=(r,e)=>bt({test:(t,i)=>t>=r&&t<=e?!0:pt(i,`Expected to be in the [${r}; ${e}] range (got ${t})`)}),qpe=(r,e)=>bt({test:(t,i)=>t>=r&&tbt({test:(e,t)=>e!==Math.round(e)?pt(t,`Expected to be an integer (got ${e})`):Number.isSafeInteger(e)?!0:pt(t,`Expected to be a safe integer (got ${e})`)}),Vp=r=>bt({test:(e,t)=>r.test(e)?!0:pt(t,`Expected to match the pattern ${r.toString()} (got ${Vr(e)})`)}),Wpe=()=>bt({test:(r,e)=>r!==r.toLowerCase()?pt(e,`Expected to be all-lowercase (got ${r})`):!0}),zpe=()=>bt({test:(r,e)=>r!==r.toUpperCase()?pt(e,`Expected to be all-uppercase (got ${r})`):!0}),Vpe=()=>bt({test:(r,e)=>J2.test(r)?!0:pt(e,`Expected to be a valid UUID v4 (got ${Vr(r)})`)}),Xpe=()=>bt({test:(r,e)=>qS.test(r)?!1:pt(e,`Expected to be a valid ISO 8601 date string (got ${Vr(r)})`)}),_pe=({alpha:r=!1})=>bt({test:(e,t)=>(r?Y2.test(e):j2.test(e))?!0:pt(t,`Expected to be a valid hexadecimal color string (got ${Vr(e)})`)}),Zpe=()=>bt({test:(r,e)=>q2.test(r)?!0:pt(e,`Expected to be a valid base 64 string (got ${Vr(r)})`)}),$pe=(r=V2())=>bt({test:(e,t)=>{let i;try{i=JSON.parse(e)}catch{return pt(t,`Expected to be a valid JSON string (got ${Vr(e)})`)}return r(i,t)}}),ede=r=>{let e=new Set(r);return bt({test:(t,i)=>{let n=new Set(Object.keys(t)),s=[];for(let o of e)n.has(o)||s.push(o);return s.length>0?pt(i,`Missing required ${EI(s.length,"property","properties")} ${s.map(o=>`"${o}"`).join(", ")}`):!0}})},tde=r=>{let e=new Set(r);return bt({test:(t,i)=>{let n=new Set(Object.keys(t)),s=[];for(let o of e)n.has(o)&&s.push(o);return s.length>0?pt(i,`Forbidden ${EI(s.length,"property","properties")} ${s.map(o=>`"${o}"`).join(", ")}`):!0}})},rde=r=>{let e=new Set(r);return bt({test:(t,i)=>{let n=new Set(Object.keys(t)),s=[];for(let o of e)n.has(o)&&s.push(o);return s.length>1?pt(i,`Mutually exclusive properties ${s.map(o=>`"${o}"`).join(", ")}`):!0}})};(function(r){r.Forbids="Forbids",r.Requires="Requires"})(Xl||(Xl={}));ide={[Xl.Forbids]:{expect:!1,message:"forbids using"},[Xl.Requires]:{expect:!0,message:"requires using"}},JS=(r,e,t,{ignore:i=[]}={})=>{let n=new Set(i),s=new Set(t),o=ide[e];return bt({test:(a,l)=>{let c=new Set(Object.keys(a));if(!c.has(r)||n.has(a[r]))return!0;let u=[];for(let g of s)(c.has(g)&&!n.has(a[g]))!==o.expect&&u.push(g);return u.length>=1?pt(l,`Property "${r}" ${o.message} ${EI(u.length,"property","properties")} ${u.map(g=>`"${g}"`).join(", ")}`):!0}})}});var fH=w((V_e,gH)=>{"use strict";gH.exports=(r,...e)=>new Promise(t=>{t(r(...e))})});var Tg=w((X_e,ev)=>{"use strict";var Ide=fH(),hH=r=>{if(r<1)throw new TypeError("Expected `concurrency` to be a number from 1 and up");let e=[],t=0,i=()=>{t--,e.length>0&&e.shift()()},n=(a,l,...c)=>{t++;let u=Ide(a,...c);l(u),u.then(i,i)},s=(a,l,...c)=>{tnew Promise(c=>s(a,c,...l));return Object.defineProperties(o,{activeCount:{get:()=>t},pendingCount:{get:()=>e.length}}),o};ev.exports=hH;ev.exports.default=hH});var ed=w((Z_e,pH)=>{var yde="2.0.0",wde=Number.MAX_SAFE_INTEGER||9007199254740991,Bde=16;pH.exports={SEMVER_SPEC_VERSION:yde,MAX_LENGTH:256,MAX_SAFE_INTEGER:wde,MAX_SAFE_COMPONENT_LENGTH:Bde}});var td=w(($_e,dH)=>{var Qde=typeof process=="object"&&process.env&&process.env.NODE_DEBUG&&/\bsemver\b/i.test(process.env.NODE_DEBUG)?(...r)=>console.error("SEMVER",...r):()=>{};dH.exports=Qde});var Zl=w((bA,CH)=>{var{MAX_SAFE_COMPONENT_LENGTH:tv}=ed(),bde=td();bA=CH.exports={};var Sde=bA.re=[],$e=bA.src=[],et=bA.t={},vde=0,St=(r,e,t)=>{let i=vde++;bde(i,e),et[r]=i,$e[i]=e,Sde[i]=new RegExp(e,t?"g":void 0)};St("NUMERICIDENTIFIER","0|[1-9]\\d*");St("NUMERICIDENTIFIERLOOSE","[0-9]+");St("NONNUMERICIDENTIFIER","\\d*[a-zA-Z-][a-zA-Z0-9-]*");St("MAINVERSION",`(${$e[et.NUMERICIDENTIFIER]})\\.(${$e[et.NUMERICIDENTIFIER]})\\.(${$e[et.NUMERICIDENTIFIER]})`);St("MAINVERSIONLOOSE",`(${$e[et.NUMERICIDENTIFIERLOOSE]})\\.(${$e[et.NUMERICIDENTIFIERLOOSE]})\\.(${$e[et.NUMERICIDENTIFIERLOOSE]})`);St("PRERELEASEIDENTIFIER",`(?:${$e[et.NUMERICIDENTIFIER]}|${$e[et.NONNUMERICIDENTIFIER]})`);St("PRERELEASEIDENTIFIERLOOSE",`(?:${$e[et.NUMERICIDENTIFIERLOOSE]}|${$e[et.NONNUMERICIDENTIFIER]})`);St("PRERELEASE",`(?:-(${$e[et.PRERELEASEIDENTIFIER]}(?:\\.${$e[et.PRERELEASEIDENTIFIER]})*))`);St("PRERELEASELOOSE",`(?:-?(${$e[et.PRERELEASEIDENTIFIERLOOSE]}(?:\\.${$e[et.PRERELEASEIDENTIFIERLOOSE]})*))`);St("BUILDIDENTIFIER","[0-9A-Za-z-]+");St("BUILD",`(?:\\+(${$e[et.BUILDIDENTIFIER]}(?:\\.${$e[et.BUILDIDENTIFIER]})*))`);St("FULLPLAIN",`v?${$e[et.MAINVERSION]}${$e[et.PRERELEASE]}?${$e[et.BUILD]}?`);St("FULL",`^${$e[et.FULLPLAIN]}$`);St("LOOSEPLAIN",`[v=\\s]*${$e[et.MAINVERSIONLOOSE]}${$e[et.PRERELEASELOOSE]}?${$e[et.BUILD]}?`);St("LOOSE",`^${$e[et.LOOSEPLAIN]}$`);St("GTLT","((?:<|>)?=?)");St("XRANGEIDENTIFIERLOOSE",`${$e[et.NUMERICIDENTIFIERLOOSE]}|x|X|\\*`);St("XRANGEIDENTIFIER",`${$e[et.NUMERICIDENTIFIER]}|x|X|\\*`);St("XRANGEPLAIN",`[v=\\s]*(${$e[et.XRANGEIDENTIFIER]})(?:\\.(${$e[et.XRANGEIDENTIFIER]})(?:\\.(${$e[et.XRANGEIDENTIFIER]})(?:${$e[et.PRERELEASE]})?${$e[et.BUILD]}?)?)?`);St("XRANGEPLAINLOOSE",`[v=\\s]*(${$e[et.XRANGEIDENTIFIERLOOSE]})(?:\\.(${$e[et.XRANGEIDENTIFIERLOOSE]})(?:\\.(${$e[et.XRANGEIDENTIFIERLOOSE]})(?:${$e[et.PRERELEASELOOSE]})?${$e[et.BUILD]}?)?)?`);St("XRANGE",`^${$e[et.GTLT]}\\s*${$e[et.XRANGEPLAIN]}$`);St("XRANGELOOSE",`^${$e[et.GTLT]}\\s*${$e[et.XRANGEPLAINLOOSE]}$`);St("COERCE",`(^|[^\\d])(\\d{1,${tv}})(?:\\.(\\d{1,${tv}}))?(?:\\.(\\d{1,${tv}}))?(?:$|[^\\d])`);St("COERCERTL",$e[et.COERCE],!0);St("LONETILDE","(?:~>?)");St("TILDETRIM",`(\\s*)${$e[et.LONETILDE]}\\s+`,!0);bA.tildeTrimReplace="$1~";St("TILDE",`^${$e[et.LONETILDE]}${$e[et.XRANGEPLAIN]}$`);St("TILDELOOSE",`^${$e[et.LONETILDE]}${$e[et.XRANGEPLAINLOOSE]}$`);St("LONECARET","(?:\\^)");St("CARETTRIM",`(\\s*)${$e[et.LONECARET]}\\s+`,!0);bA.caretTrimReplace="$1^";St("CARET",`^${$e[et.LONECARET]}${$e[et.XRANGEPLAIN]}$`);St("CARETLOOSE",`^${$e[et.LONECARET]}${$e[et.XRANGEPLAINLOOSE]}$`);St("COMPARATORLOOSE",`^${$e[et.GTLT]}\\s*(${$e[et.LOOSEPLAIN]})$|^$`);St("COMPARATOR",`^${$e[et.GTLT]}\\s*(${$e[et.FULLPLAIN]})$|^$`);St("COMPARATORTRIM",`(\\s*)${$e[et.GTLT]}\\s*(${$e[et.LOOSEPLAIN]}|${$e[et.XRANGEPLAIN]})`,!0);bA.comparatorTrimReplace="$1$2$3";St("HYPHENRANGE",`^\\s*(${$e[et.XRANGEPLAIN]})\\s+-\\s+(${$e[et.XRANGEPLAIN]})\\s*$`);St("HYPHENRANGELOOSE",`^\\s*(${$e[et.XRANGEPLAINLOOSE]})\\s+-\\s+(${$e[et.XRANGEPLAINLOOSE]})\\s*$`);St("STAR","(<|>)?=?\\s*\\*");St("GTE0","^\\s*>=\\s*0.0.0\\s*$");St("GTE0PRE","^\\s*>=\\s*0.0.0-0\\s*$")});var rd=w((eZe,mH)=>{var xde=["includePrerelease","loose","rtl"],Pde=r=>r?typeof r!="object"?{loose:!0}:xde.filter(e=>r[e]).reduce((e,t)=>(e[t]=!0,e),{}):{};mH.exports=Pde});var bI=w((tZe,yH)=>{var EH=/^[0-9]+$/,IH=(r,e)=>{let t=EH.test(r),i=EH.test(e);return t&&i&&(r=+r,e=+e),r===e?0:t&&!i?-1:i&&!t?1:rIH(e,r);yH.exports={compareIdentifiers:IH,rcompareIdentifiers:Dde}});var Li=w((rZe,bH)=>{var SI=td(),{MAX_LENGTH:wH,MAX_SAFE_INTEGER:vI}=ed(),{re:BH,t:QH}=Zl(),kde=rd(),{compareIdentifiers:id}=bI(),Un=class{constructor(e,t){if(t=kde(t),e instanceof Un){if(e.loose===!!t.loose&&e.includePrerelease===!!t.includePrerelease)return e;e=e.version}else if(typeof e!="string")throw new TypeError(`Invalid Version: ${e}`);if(e.length>wH)throw new TypeError(`version is longer than ${wH} characters`);SI("SemVer",e,t),this.options=t,this.loose=!!t.loose,this.includePrerelease=!!t.includePrerelease;let i=e.trim().match(t.loose?BH[QH.LOOSE]:BH[QH.FULL]);if(!i)throw new TypeError(`Invalid Version: ${e}`);if(this.raw=e,this.major=+i[1],this.minor=+i[2],this.patch=+i[3],this.major>vI||this.major<0)throw new TypeError("Invalid major version");if(this.minor>vI||this.minor<0)throw new TypeError("Invalid minor version");if(this.patch>vI||this.patch<0)throw new TypeError("Invalid patch version");i[4]?this.prerelease=i[4].split(".").map(n=>{if(/^[0-9]+$/.test(n)){let s=+n;if(s>=0&&s=0;)typeof this.prerelease[i]=="number"&&(this.prerelease[i]++,i=-2);i===-1&&this.prerelease.push(0)}t&&(this.prerelease[0]===t?isNaN(this.prerelease[1])&&(this.prerelease=[t,0]):this.prerelease=[t,0]);break;default:throw new Error(`invalid increment argument: ${e}`)}return this.format(),this.raw=this.version,this}};bH.exports=Un});var $l=w((iZe,PH)=>{var{MAX_LENGTH:Rde}=ed(),{re:SH,t:vH}=Zl(),xH=Li(),Fde=rd(),Nde=(r,e)=>{if(e=Fde(e),r instanceof xH)return r;if(typeof r!="string"||r.length>Rde||!(e.loose?SH[vH.LOOSE]:SH[vH.FULL]).test(r))return null;try{return new xH(r,e)}catch{return null}};PH.exports=Nde});var kH=w((nZe,DH)=>{var Lde=$l(),Tde=(r,e)=>{let t=Lde(r,e);return t?t.version:null};DH.exports=Tde});var FH=w((sZe,RH)=>{var Ode=$l(),Mde=(r,e)=>{let t=Ode(r.trim().replace(/^[=v]+/,""),e);return t?t.version:null};RH.exports=Mde});var LH=w((oZe,NH)=>{var Kde=Li(),Ude=(r,e,t,i)=>{typeof t=="string"&&(i=t,t=void 0);try{return new Kde(r,t).inc(e,i).version}catch{return null}};NH.exports=Ude});var ss=w((aZe,OH)=>{var TH=Li(),Hde=(r,e,t)=>new TH(r,t).compare(new TH(e,t));OH.exports=Hde});var xI=w((AZe,MH)=>{var Gde=ss(),Yde=(r,e,t)=>Gde(r,e,t)===0;MH.exports=Yde});var HH=w((lZe,UH)=>{var KH=$l(),jde=xI(),qde=(r,e)=>{if(jde(r,e))return null;{let t=KH(r),i=KH(e),n=t.prerelease.length||i.prerelease.length,s=n?"pre":"",o=n?"prerelease":"";for(let a in t)if((a==="major"||a==="minor"||a==="patch")&&t[a]!==i[a])return s+a;return o}};UH.exports=qde});var YH=w((cZe,GH)=>{var Jde=Li(),Wde=(r,e)=>new Jde(r,e).major;GH.exports=Wde});var qH=w((uZe,jH)=>{var zde=Li(),Vde=(r,e)=>new zde(r,e).minor;jH.exports=Vde});var WH=w((gZe,JH)=>{var Xde=Li(),_de=(r,e)=>new Xde(r,e).patch;JH.exports=_de});var VH=w((fZe,zH)=>{var Zde=$l(),$de=(r,e)=>{let t=Zde(r,e);return t&&t.prerelease.length?t.prerelease:null};zH.exports=$de});var _H=w((hZe,XH)=>{var eCe=ss(),tCe=(r,e,t)=>eCe(e,r,t);XH.exports=tCe});var $H=w((pZe,ZH)=>{var rCe=ss(),iCe=(r,e)=>rCe(r,e,!0);ZH.exports=iCe});var PI=w((dZe,tG)=>{var eG=Li(),nCe=(r,e,t)=>{let i=new eG(r,t),n=new eG(e,t);return i.compare(n)||i.compareBuild(n)};tG.exports=nCe});var iG=w((CZe,rG)=>{var sCe=PI(),oCe=(r,e)=>r.sort((t,i)=>sCe(t,i,e));rG.exports=oCe});var sG=w((mZe,nG)=>{var aCe=PI(),ACe=(r,e)=>r.sort((t,i)=>aCe(i,t,e));nG.exports=ACe});var nd=w((EZe,oG)=>{var lCe=ss(),cCe=(r,e,t)=>lCe(r,e,t)>0;oG.exports=cCe});var DI=w((IZe,aG)=>{var uCe=ss(),gCe=(r,e,t)=>uCe(r,e,t)<0;aG.exports=gCe});var rv=w((yZe,AG)=>{var fCe=ss(),hCe=(r,e,t)=>fCe(r,e,t)!==0;AG.exports=hCe});var kI=w((wZe,lG)=>{var pCe=ss(),dCe=(r,e,t)=>pCe(r,e,t)>=0;lG.exports=dCe});var RI=w((BZe,cG)=>{var CCe=ss(),mCe=(r,e,t)=>CCe(r,e,t)<=0;cG.exports=mCe});var iv=w((QZe,uG)=>{var ECe=xI(),ICe=rv(),yCe=nd(),wCe=kI(),BCe=DI(),QCe=RI(),bCe=(r,e,t,i)=>{switch(e){case"===":return typeof r=="object"&&(r=r.version),typeof t=="object"&&(t=t.version),r===t;case"!==":return typeof r=="object"&&(r=r.version),typeof t=="object"&&(t=t.version),r!==t;case"":case"=":case"==":return ECe(r,t,i);case"!=":return ICe(r,t,i);case">":return yCe(r,t,i);case">=":return wCe(r,t,i);case"<":return BCe(r,t,i);case"<=":return QCe(r,t,i);default:throw new TypeError(`Invalid operator: ${e}`)}};uG.exports=bCe});var fG=w((bZe,gG)=>{var SCe=Li(),vCe=$l(),{re:FI,t:NI}=Zl(),xCe=(r,e)=>{if(r instanceof SCe)return r;if(typeof r=="number"&&(r=String(r)),typeof r!="string")return null;e=e||{};let t=null;if(!e.rtl)t=r.match(FI[NI.COERCE]);else{let i;for(;(i=FI[NI.COERCERTL].exec(r))&&(!t||t.index+t[0].length!==r.length);)(!t||i.index+i[0].length!==t.index+t[0].length)&&(t=i),FI[NI.COERCERTL].lastIndex=i.index+i[1].length+i[2].length;FI[NI.COERCERTL].lastIndex=-1}return t===null?null:vCe(`${t[2]}.${t[3]||"0"}.${t[4]||"0"}`,e)};gG.exports=xCe});var pG=w((SZe,hG)=>{"use strict";hG.exports=function(r){r.prototype[Symbol.iterator]=function*(){for(let e=this.head;e;e=e.next)yield e.value}}});var sd=w((vZe,dG)=>{"use strict";dG.exports=Ht;Ht.Node=ec;Ht.create=Ht;function Ht(r){var e=this;if(e instanceof Ht||(e=new Ht),e.tail=null,e.head=null,e.length=0,r&&typeof r.forEach=="function")r.forEach(function(n){e.push(n)});else if(arguments.length>0)for(var t=0,i=arguments.length;t1)t=e;else if(this.head)i=this.head.next,t=this.head.value;else throw new TypeError("Reduce of empty list with no initial value");for(var n=0;i!==null;n++)t=r(t,i.value,n),i=i.next;return t};Ht.prototype.reduceReverse=function(r,e){var t,i=this.tail;if(arguments.length>1)t=e;else if(this.tail)i=this.tail.prev,t=this.tail.value;else throw new TypeError("Reduce of empty list with no initial value");for(var n=this.length-1;i!==null;n--)t=r(t,i.value,n),i=i.prev;return t};Ht.prototype.toArray=function(){for(var r=new Array(this.length),e=0,t=this.head;t!==null;e++)r[e]=t.value,t=t.next;return r};Ht.prototype.toArrayReverse=function(){for(var r=new Array(this.length),e=0,t=this.tail;t!==null;e++)r[e]=t.value,t=t.prev;return r};Ht.prototype.slice=function(r,e){e=e||this.length,e<0&&(e+=this.length),r=r||0,r<0&&(r+=this.length);var t=new Ht;if(ethis.length&&(e=this.length);for(var i=0,n=this.head;n!==null&&ithis.length&&(e=this.length);for(var i=this.length,n=this.tail;n!==null&&i>e;i--)n=n.prev;for(;n!==null&&i>r;i--,n=n.prev)t.push(n.value);return t};Ht.prototype.splice=function(r,e,...t){r>this.length&&(r=this.length-1),r<0&&(r=this.length+r);for(var i=0,n=this.head;n!==null&&i{"use strict";var RCe=sd(),tc=Symbol("max"),Ia=Symbol("length"),Og=Symbol("lengthCalculator"),ad=Symbol("allowStale"),rc=Symbol("maxAge"),Ea=Symbol("dispose"),CG=Symbol("noDisposeOnSet"),di=Symbol("lruList"),Ws=Symbol("cache"),EG=Symbol("updateAgeOnGet"),nv=()=>1,ov=class{constructor(e){if(typeof e=="number"&&(e={max:e}),e||(e={}),e.max&&(typeof e.max!="number"||e.max<0))throw new TypeError("max must be a non-negative number");let t=this[tc]=e.max||1/0,i=e.length||nv;if(this[Og]=typeof i!="function"?nv:i,this[ad]=e.stale||!1,e.maxAge&&typeof e.maxAge!="number")throw new TypeError("maxAge must be a number");this[rc]=e.maxAge||0,this[Ea]=e.dispose,this[CG]=e.noDisposeOnSet||!1,this[EG]=e.updateAgeOnGet||!1,this.reset()}set max(e){if(typeof e!="number"||e<0)throw new TypeError("max must be a non-negative number");this[tc]=e||1/0,od(this)}get max(){return this[tc]}set allowStale(e){this[ad]=!!e}get allowStale(){return this[ad]}set maxAge(e){if(typeof e!="number")throw new TypeError("maxAge must be a non-negative number");this[rc]=e,od(this)}get maxAge(){return this[rc]}set lengthCalculator(e){typeof e!="function"&&(e=nv),e!==this[Og]&&(this[Og]=e,this[Ia]=0,this[di].forEach(t=>{t.length=this[Og](t.value,t.key),this[Ia]+=t.length})),od(this)}get lengthCalculator(){return this[Og]}get length(){return this[Ia]}get itemCount(){return this[di].length}rforEach(e,t){t=t||this;for(let i=this[di].tail;i!==null;){let n=i.prev;mG(this,e,i,t),i=n}}forEach(e,t){t=t||this;for(let i=this[di].head;i!==null;){let n=i.next;mG(this,e,i,t),i=n}}keys(){return this[di].toArray().map(e=>e.key)}values(){return this[di].toArray().map(e=>e.value)}reset(){this[Ea]&&this[di]&&this[di].length&&this[di].forEach(e=>this[Ea](e.key,e.value)),this[Ws]=new Map,this[di]=new RCe,this[Ia]=0}dump(){return this[di].map(e=>LI(this,e)?!1:{k:e.key,v:e.value,e:e.now+(e.maxAge||0)}).toArray().filter(e=>e)}dumpLru(){return this[di]}set(e,t,i){if(i=i||this[rc],i&&typeof i!="number")throw new TypeError("maxAge must be a number");let n=i?Date.now():0,s=this[Og](t,e);if(this[Ws].has(e)){if(s>this[tc])return Mg(this,this[Ws].get(e)),!1;let l=this[Ws].get(e).value;return this[Ea]&&(this[CG]||this[Ea](e,l.value)),l.now=n,l.maxAge=i,l.value=t,this[Ia]+=s-l.length,l.length=s,this.get(e),od(this),!0}let o=new av(e,t,s,n,i);return o.length>this[tc]?(this[Ea]&&this[Ea](e,t),!1):(this[Ia]+=o.length,this[di].unshift(o),this[Ws].set(e,this[di].head),od(this),!0)}has(e){if(!this[Ws].has(e))return!1;let t=this[Ws].get(e).value;return!LI(this,t)}get(e){return sv(this,e,!0)}peek(e){return sv(this,e,!1)}pop(){let e=this[di].tail;return e?(Mg(this,e),e.value):null}del(e){Mg(this,this[Ws].get(e))}load(e){this.reset();let t=Date.now();for(let i=e.length-1;i>=0;i--){let n=e[i],s=n.e||0;if(s===0)this.set(n.k,n.v);else{let o=s-t;o>0&&this.set(n.k,n.v,o)}}}prune(){this[Ws].forEach((e,t)=>sv(this,t,!1))}},sv=(r,e,t)=>{let i=r[Ws].get(e);if(i){let n=i.value;if(LI(r,n)){if(Mg(r,i),!r[ad])return}else t&&(r[EG]&&(i.value.now=Date.now()),r[di].unshiftNode(i));return n.value}},LI=(r,e)=>{if(!e||!e.maxAge&&!r[rc])return!1;let t=Date.now()-e.now;return e.maxAge?t>e.maxAge:r[rc]&&t>r[rc]},od=r=>{if(r[Ia]>r[tc])for(let e=r[di].tail;r[Ia]>r[tc]&&e!==null;){let t=e.prev;Mg(r,e),e=t}},Mg=(r,e)=>{if(e){let t=e.value;r[Ea]&&r[Ea](t.key,t.value),r[Ia]-=t.length,r[Ws].delete(t.key),r[di].removeNode(e)}},av=class{constructor(e,t,i,n,s){this.key=e,this.value=t,this.length=i,this.now=n,this.maxAge=s||0}},mG=(r,e,t,i)=>{let n=t.value;LI(r,n)&&(Mg(r,t),r[ad]||(n=void 0)),n&&e.call(i,n.value,n.key,r)};IG.exports=ov});var os=w((PZe,bG)=>{var ic=class{constructor(e,t){if(t=NCe(t),e instanceof ic)return e.loose===!!t.loose&&e.includePrerelease===!!t.includePrerelease?e:new ic(e.raw,t);if(e instanceof Av)return this.raw=e.value,this.set=[[e]],this.format(),this;if(this.options=t,this.loose=!!t.loose,this.includePrerelease=!!t.includePrerelease,this.raw=e,this.set=e.split(/\s*\|\|\s*/).map(i=>this.parseRange(i.trim())).filter(i=>i.length),!this.set.length)throw new TypeError(`Invalid SemVer Range: ${e}`);if(this.set.length>1){let i=this.set[0];if(this.set=this.set.filter(n=>!BG(n[0])),this.set.length===0)this.set=[i];else if(this.set.length>1){for(let n of this.set)if(n.length===1&&KCe(n[0])){this.set=[n];break}}}this.format()}format(){return this.range=this.set.map(e=>e.join(" ").trim()).join("||").trim(),this.range}toString(){return this.range}parseRange(e){e=e.trim();let i=`parseRange:${Object.keys(this.options).join(",")}:${e}`,n=wG.get(i);if(n)return n;let s=this.options.loose,o=s?Ti[Bi.HYPHENRANGELOOSE]:Ti[Bi.HYPHENRANGE];e=e.replace(o,VCe(this.options.includePrerelease)),Gr("hyphen replace",e),e=e.replace(Ti[Bi.COMPARATORTRIM],TCe),Gr("comparator trim",e,Ti[Bi.COMPARATORTRIM]),e=e.replace(Ti[Bi.TILDETRIM],OCe),e=e.replace(Ti[Bi.CARETTRIM],MCe),e=e.split(/\s+/).join(" ");let a=s?Ti[Bi.COMPARATORLOOSE]:Ti[Bi.COMPARATOR],l=e.split(" ").map(f=>UCe(f,this.options)).join(" ").split(/\s+/).map(f=>zCe(f,this.options)).filter(this.options.loose?f=>!!f.match(a):()=>!0).map(f=>new Av(f,this.options)),c=l.length,u=new Map;for(let f of l){if(BG(f))return[f];u.set(f.value,f)}u.size>1&&u.has("")&&u.delete("");let g=[...u.values()];return wG.set(i,g),g}intersects(e,t){if(!(e instanceof ic))throw new TypeError("a Range is required");return this.set.some(i=>QG(i,t)&&e.set.some(n=>QG(n,t)&&i.every(s=>n.every(o=>s.intersects(o,t)))))}test(e){if(!e)return!1;if(typeof e=="string")try{e=new LCe(e,this.options)}catch{return!1}for(let t=0;tr.value==="<0.0.0-0",KCe=r=>r.value==="",QG=(r,e)=>{let t=!0,i=r.slice(),n=i.pop();for(;t&&i.length;)t=i.every(s=>n.intersects(s,e)),n=i.pop();return t},UCe=(r,e)=>(Gr("comp",r,e),r=YCe(r,e),Gr("caret",r),r=HCe(r,e),Gr("tildes",r),r=qCe(r,e),Gr("xrange",r),r=WCe(r,e),Gr("stars",r),r),Vi=r=>!r||r.toLowerCase()==="x"||r==="*",HCe=(r,e)=>r.trim().split(/\s+/).map(t=>GCe(t,e)).join(" "),GCe=(r,e)=>{let t=e.loose?Ti[Bi.TILDELOOSE]:Ti[Bi.TILDE];return r.replace(t,(i,n,s,o,a)=>{Gr("tilde",r,i,n,s,o,a);let l;return Vi(n)?l="":Vi(s)?l=`>=${n}.0.0 <${+n+1}.0.0-0`:Vi(o)?l=`>=${n}.${s}.0 <${n}.${+s+1}.0-0`:a?(Gr("replaceTilde pr",a),l=`>=${n}.${s}.${o}-${a} <${n}.${+s+1}.0-0`):l=`>=${n}.${s}.${o} <${n}.${+s+1}.0-0`,Gr("tilde return",l),l})},YCe=(r,e)=>r.trim().split(/\s+/).map(t=>jCe(t,e)).join(" "),jCe=(r,e)=>{Gr("caret",r,e);let t=e.loose?Ti[Bi.CARETLOOSE]:Ti[Bi.CARET],i=e.includePrerelease?"-0":"";return r.replace(t,(n,s,o,a,l)=>{Gr("caret",r,n,s,o,a,l);let c;return Vi(s)?c="":Vi(o)?c=`>=${s}.0.0${i} <${+s+1}.0.0-0`:Vi(a)?s==="0"?c=`>=${s}.${o}.0${i} <${s}.${+o+1}.0-0`:c=`>=${s}.${o}.0${i} <${+s+1}.0.0-0`:l?(Gr("replaceCaret pr",l),s==="0"?o==="0"?c=`>=${s}.${o}.${a}-${l} <${s}.${o}.${+a+1}-0`:c=`>=${s}.${o}.${a}-${l} <${s}.${+o+1}.0-0`:c=`>=${s}.${o}.${a}-${l} <${+s+1}.0.0-0`):(Gr("no pr"),s==="0"?o==="0"?c=`>=${s}.${o}.${a}${i} <${s}.${o}.${+a+1}-0`:c=`>=${s}.${o}.${a}${i} <${s}.${+o+1}.0-0`:c=`>=${s}.${o}.${a} <${+s+1}.0.0-0`),Gr("caret return",c),c})},qCe=(r,e)=>(Gr("replaceXRanges",r,e),r.split(/\s+/).map(t=>JCe(t,e)).join(" ")),JCe=(r,e)=>{r=r.trim();let t=e.loose?Ti[Bi.XRANGELOOSE]:Ti[Bi.XRANGE];return r.replace(t,(i,n,s,o,a,l)=>{Gr("xRange",r,i,n,s,o,a,l);let c=Vi(s),u=c||Vi(o),g=u||Vi(a),f=g;return n==="="&&f&&(n=""),l=e.includePrerelease?"-0":"",c?n===">"||n==="<"?i="<0.0.0-0":i="*":n&&f?(u&&(o=0),a=0,n===">"?(n=">=",u?(s=+s+1,o=0,a=0):(o=+o+1,a=0)):n==="<="&&(n="<",u?s=+s+1:o=+o+1),n==="<"&&(l="-0"),i=`${n+s}.${o}.${a}${l}`):u?i=`>=${s}.0.0${l} <${+s+1}.0.0-0`:g&&(i=`>=${s}.${o}.0${l} <${s}.${+o+1}.0-0`),Gr("xRange return",i),i})},WCe=(r,e)=>(Gr("replaceStars",r,e),r.trim().replace(Ti[Bi.STAR],"")),zCe=(r,e)=>(Gr("replaceGTE0",r,e),r.trim().replace(Ti[e.includePrerelease?Bi.GTE0PRE:Bi.GTE0],"")),VCe=r=>(e,t,i,n,s,o,a,l,c,u,g,f,h)=>(Vi(i)?t="":Vi(n)?t=`>=${i}.0.0${r?"-0":""}`:Vi(s)?t=`>=${i}.${n}.0${r?"-0":""}`:o?t=`>=${t}`:t=`>=${t}${r?"-0":""}`,Vi(c)?l="":Vi(u)?l=`<${+c+1}.0.0-0`:Vi(g)?l=`<${c}.${+u+1}.0-0`:f?l=`<=${c}.${u}.${g}-${f}`:r?l=`<${c}.${u}.${+g+1}-0`:l=`<=${l}`,`${t} ${l}`.trim()),XCe=(r,e,t)=>{for(let i=0;i0){let n=r[i].semver;if(n.major===e.major&&n.minor===e.minor&&n.patch===e.patch)return!0}return!1}return!0}});var Ad=w((DZe,DG)=>{var ld=Symbol("SemVer ANY"),Kg=class{static get ANY(){return ld}constructor(e,t){if(t=_Ce(t),e instanceof Kg){if(e.loose===!!t.loose)return e;e=e.value}cv("comparator",e,t),this.options=t,this.loose=!!t.loose,this.parse(e),this.semver===ld?this.value="":this.value=this.operator+this.semver.version,cv("comp",this)}parse(e){let t=this.options.loose?SG[vG.COMPARATORLOOSE]:SG[vG.COMPARATOR],i=e.match(t);if(!i)throw new TypeError(`Invalid comparator: ${e}`);this.operator=i[1]!==void 0?i[1]:"",this.operator==="="&&(this.operator=""),i[2]?this.semver=new xG(i[2],this.options.loose):this.semver=ld}toString(){return this.value}test(e){if(cv("Comparator.test",e,this.options.loose),this.semver===ld||e===ld)return!0;if(typeof e=="string")try{e=new xG(e,this.options)}catch{return!1}return lv(e,this.operator,this.semver,this.options)}intersects(e,t){if(!(e instanceof Kg))throw new TypeError("a Comparator is required");if((!t||typeof t!="object")&&(t={loose:!!t,includePrerelease:!1}),this.operator==="")return this.value===""?!0:new PG(e.value,t).test(this.value);if(e.operator==="")return e.value===""?!0:new PG(this.value,t).test(e.semver);let i=(this.operator===">="||this.operator===">")&&(e.operator===">="||e.operator===">"),n=(this.operator==="<="||this.operator==="<")&&(e.operator==="<="||e.operator==="<"),s=this.semver.version===e.semver.version,o=(this.operator===">="||this.operator==="<=")&&(e.operator===">="||e.operator==="<="),a=lv(this.semver,"<",e.semver,t)&&(this.operator===">="||this.operator===">")&&(e.operator==="<="||e.operator==="<"),l=lv(this.semver,">",e.semver,t)&&(this.operator==="<="||this.operator==="<")&&(e.operator===">="||e.operator===">");return i||n||s&&o||a||l}};DG.exports=Kg;var _Ce=rd(),{re:SG,t:vG}=Zl(),lv=iv(),cv=td(),xG=Li(),PG=os()});var cd=w((kZe,kG)=>{var ZCe=os(),$Ce=(r,e,t)=>{try{e=new ZCe(e,t)}catch{return!1}return e.test(r)};kG.exports=$Ce});var FG=w((RZe,RG)=>{var eme=os(),tme=(r,e)=>new eme(r,e).set.map(t=>t.map(i=>i.value).join(" ").trim().split(" "));RG.exports=tme});var LG=w((FZe,NG)=>{var rme=Li(),ime=os(),nme=(r,e,t)=>{let i=null,n=null,s=null;try{s=new ime(e,t)}catch{return null}return r.forEach(o=>{s.test(o)&&(!i||n.compare(o)===-1)&&(i=o,n=new rme(i,t))}),i};NG.exports=nme});var OG=w((NZe,TG)=>{var sme=Li(),ome=os(),ame=(r,e,t)=>{let i=null,n=null,s=null;try{s=new ome(e,t)}catch{return null}return r.forEach(o=>{s.test(o)&&(!i||n.compare(o)===1)&&(i=o,n=new sme(i,t))}),i};TG.exports=ame});var UG=w((LZe,KG)=>{var uv=Li(),Ame=os(),MG=nd(),lme=(r,e)=>{r=new Ame(r,e);let t=new uv("0.0.0");if(r.test(t)||(t=new uv("0.0.0-0"),r.test(t)))return t;t=null;for(let i=0;i{let a=new uv(o.semver.version);switch(o.operator){case">":a.prerelease.length===0?a.patch++:a.prerelease.push(0),a.raw=a.format();case"":case">=":(!s||MG(a,s))&&(s=a);break;case"<":case"<=":break;default:throw new Error(`Unexpected operation: ${o.operator}`)}}),s&&(!t||MG(t,s))&&(t=s)}return t&&r.test(t)?t:null};KG.exports=lme});var GG=w((TZe,HG)=>{var cme=os(),ume=(r,e)=>{try{return new cme(r,e).range||"*"}catch{return null}};HG.exports=ume});var TI=w((OZe,JG)=>{var gme=Li(),qG=Ad(),{ANY:fme}=qG,hme=os(),pme=cd(),YG=nd(),jG=DI(),dme=RI(),Cme=kI(),mme=(r,e,t,i)=>{r=new gme(r,i),e=new hme(e,i);let n,s,o,a,l;switch(t){case">":n=YG,s=dme,o=jG,a=">",l=">=";break;case"<":n=jG,s=Cme,o=YG,a="<",l="<=";break;default:throw new TypeError('Must provide a hilo val of "<" or ">"')}if(pme(r,e,i))return!1;for(let c=0;c{h.semver===fme&&(h=new qG(">=0.0.0")),g=g||h,f=f||h,n(h.semver,g.semver,i)?g=h:o(h.semver,f.semver,i)&&(f=h)}),g.operator===a||g.operator===l||(!f.operator||f.operator===a)&&s(r,f.semver))return!1;if(f.operator===l&&o(r,f.semver))return!1}return!0};JG.exports=mme});var zG=w((MZe,WG)=>{var Eme=TI(),Ime=(r,e,t)=>Eme(r,e,">",t);WG.exports=Ime});var XG=w((KZe,VG)=>{var yme=TI(),wme=(r,e,t)=>yme(r,e,"<",t);VG.exports=wme});var $G=w((UZe,ZG)=>{var _G=os(),Bme=(r,e,t)=>(r=new _G(r,t),e=new _G(e,t),r.intersects(e));ZG.exports=Bme});var tY=w((HZe,eY)=>{var Qme=cd(),bme=ss();eY.exports=(r,e,t)=>{let i=[],n=null,s=null,o=r.sort((u,g)=>bme(u,g,t));for(let u of o)Qme(u,e,t)?(s=u,n||(n=u)):(s&&i.push([n,s]),s=null,n=null);n&&i.push([n,null]);let a=[];for(let[u,g]of i)u===g?a.push(u):!g&&u===o[0]?a.push("*"):g?u===o[0]?a.push(`<=${g}`):a.push(`${u} - ${g}`):a.push(`>=${u}`);let l=a.join(" || "),c=typeof e.raw=="string"?e.raw:String(e);return l.length{var rY=os(),OI=Ad(),{ANY:gv}=OI,ud=cd(),fv=ss(),Sme=(r,e,t={})=>{if(r===e)return!0;r=new rY(r,t),e=new rY(e,t);let i=!1;e:for(let n of r.set){for(let s of e.set){let o=vme(n,s,t);if(i=i||o!==null,o)continue e}if(i)return!1}return!0},vme=(r,e,t)=>{if(r===e)return!0;if(r.length===1&&r[0].semver===gv){if(e.length===1&&e[0].semver===gv)return!0;t.includePrerelease?r=[new OI(">=0.0.0-0")]:r=[new OI(">=0.0.0")]}if(e.length===1&&e[0].semver===gv){if(t.includePrerelease)return!0;e=[new OI(">=0.0.0")]}let i=new Set,n,s;for(let h of r)h.operator===">"||h.operator===">="?n=iY(n,h,t):h.operator==="<"||h.operator==="<="?s=nY(s,h,t):i.add(h.semver);if(i.size>1)return null;let o;if(n&&s){if(o=fv(n.semver,s.semver,t),o>0)return null;if(o===0&&(n.operator!==">="||s.operator!=="<="))return null}for(let h of i){if(n&&!ud(h,String(n),t)||s&&!ud(h,String(s),t))return null;for(let p of e)if(!ud(h,String(p),t))return!1;return!0}let a,l,c,u,g=s&&!t.includePrerelease&&s.semver.prerelease.length?s.semver:!1,f=n&&!t.includePrerelease&&n.semver.prerelease.length?n.semver:!1;g&&g.prerelease.length===1&&s.operator==="<"&&g.prerelease[0]===0&&(g=!1);for(let h of e){if(u=u||h.operator===">"||h.operator===">=",c=c||h.operator==="<"||h.operator==="<=",n){if(f&&h.semver.prerelease&&h.semver.prerelease.length&&h.semver.major===f.major&&h.semver.minor===f.minor&&h.semver.patch===f.patch&&(f=!1),h.operator===">"||h.operator===">="){if(a=iY(n,h,t),a===h&&a!==n)return!1}else if(n.operator===">="&&!ud(n.semver,String(h),t))return!1}if(s){if(g&&h.semver.prerelease&&h.semver.prerelease.length&&h.semver.major===g.major&&h.semver.minor===g.minor&&h.semver.patch===g.patch&&(g=!1),h.operator==="<"||h.operator==="<="){if(l=nY(s,h,t),l===h&&l!==s)return!1}else if(s.operator==="<="&&!ud(s.semver,String(h),t))return!1}if(!h.operator&&(s||n)&&o!==0)return!1}return!(n&&c&&!s&&o!==0||s&&u&&!n&&o!==0||f||g)},iY=(r,e,t)=>{if(!r)return e;let i=fv(r.semver,e.semver,t);return i>0?r:i<0||e.operator===">"&&r.operator===">="?e:r},nY=(r,e,t)=>{if(!r)return e;let i=fv(r.semver,e.semver,t);return i<0?r:i>0||e.operator==="<"&&r.operator==="<="?e:r};sY.exports=Sme});var Xr=w((YZe,aY)=>{var hv=Zl();aY.exports={re:hv.re,src:hv.src,tokens:hv.t,SEMVER_SPEC_VERSION:ed().SEMVER_SPEC_VERSION,SemVer:Li(),compareIdentifiers:bI().compareIdentifiers,rcompareIdentifiers:bI().rcompareIdentifiers,parse:$l(),valid:kH(),clean:FH(),inc:LH(),diff:HH(),major:YH(),minor:qH(),patch:WH(),prerelease:VH(),compare:ss(),rcompare:_H(),compareLoose:$H(),compareBuild:PI(),sort:iG(),rsort:sG(),gt:nd(),lt:DI(),eq:xI(),neq:rv(),gte:kI(),lte:RI(),cmp:iv(),coerce:fG(),Comparator:Ad(),Range:os(),satisfies:cd(),toComparators:FG(),maxSatisfying:LG(),minSatisfying:OG(),minVersion:UG(),validRange:GG(),outside:TI(),gtr:zG(),ltr:XG(),intersects:$G(),simplifyRange:tY(),subset:oY()}});var pv=w(MI=>{"use strict";Object.defineProperty(MI,"__esModule",{value:!0});MI.VERSION=void 0;MI.VERSION="9.1.0"});var Gt=w((exports,module)=>{"use strict";var __spreadArray=exports&&exports.__spreadArray||function(r,e,t){if(t||arguments.length===2)for(var i=0,n=e.length,s;i{(function(r,e){typeof define=="function"&&define.amd?define([],e):typeof KI=="object"&&KI.exports?KI.exports=e():r.regexpToAst=e()})(typeof self<"u"?self:AY,function(){function r(){}r.prototype.saveState=function(){return{idx:this.idx,input:this.input,groupIdx:this.groupIdx}},r.prototype.restoreState=function(p){this.idx=p.idx,this.input=p.input,this.groupIdx=p.groupIdx},r.prototype.pattern=function(p){this.idx=0,this.input=p,this.groupIdx=0,this.consumeChar("/");var C=this.disjunction();this.consumeChar("/");for(var y={type:"Flags",loc:{begin:this.idx,end:p.length},global:!1,ignoreCase:!1,multiLine:!1,unicode:!1,sticky:!1};this.isRegExpFlag();)switch(this.popChar()){case"g":o(y,"global");break;case"i":o(y,"ignoreCase");break;case"m":o(y,"multiLine");break;case"u":o(y,"unicode");break;case"y":o(y,"sticky");break}if(this.idx!==this.input.length)throw Error("Redundant input: "+this.input.substring(this.idx));return{type:"Pattern",flags:y,value:C,loc:this.loc(0)}},r.prototype.disjunction=function(){var p=[],C=this.idx;for(p.push(this.alternative());this.peekChar()==="|";)this.consumeChar("|"),p.push(this.alternative());return{type:"Disjunction",value:p,loc:this.loc(C)}},r.prototype.alternative=function(){for(var p=[],C=this.idx;this.isTerm();)p.push(this.term());return{type:"Alternative",value:p,loc:this.loc(C)}},r.prototype.term=function(){return this.isAssertion()?this.assertion():this.atom()},r.prototype.assertion=function(){var p=this.idx;switch(this.popChar()){case"^":return{type:"StartAnchor",loc:this.loc(p)};case"$":return{type:"EndAnchor",loc:this.loc(p)};case"\\":switch(this.popChar()){case"b":return{type:"WordBoundary",loc:this.loc(p)};case"B":return{type:"NonWordBoundary",loc:this.loc(p)}}throw Error("Invalid Assertion Escape");case"(":this.consumeChar("?");var C;switch(this.popChar()){case"=":C="Lookahead";break;case"!":C="NegativeLookahead";break}a(C);var y=this.disjunction();return this.consumeChar(")"),{type:C,value:y,loc:this.loc(p)}}l()},r.prototype.quantifier=function(p){var C,y=this.idx;switch(this.popChar()){case"*":C={atLeast:0,atMost:1/0};break;case"+":C={atLeast:1,atMost:1/0};break;case"?":C={atLeast:0,atMost:1};break;case"{":var B=this.integerIncludingZero();switch(this.popChar()){case"}":C={atLeast:B,atMost:B};break;case",":var v;this.isDigit()?(v=this.integerIncludingZero(),C={atLeast:B,atMost:v}):C={atLeast:B,atMost:1/0},this.consumeChar("}");break}if(p===!0&&C===void 0)return;a(C);break}if(!(p===!0&&C===void 0))return a(C),this.peekChar(0)==="?"?(this.consumeChar("?"),C.greedy=!1):C.greedy=!0,C.type="Quantifier",C.loc=this.loc(y),C},r.prototype.atom=function(){var p,C=this.idx;switch(this.peekChar()){case".":p=this.dotAll();break;case"\\":p=this.atomEscape();break;case"[":p=this.characterClass();break;case"(":p=this.group();break}return p===void 0&&this.isPatternCharacter()&&(p=this.patternCharacter()),a(p),p.loc=this.loc(C),this.isQuantifier()&&(p.quantifier=this.quantifier()),p},r.prototype.dotAll=function(){return this.consumeChar("."),{type:"Set",complement:!0,value:[n(` -`),n("\r"),n("\u2028"),n("\u2029")]}},r.prototype.atomEscape=function(){switch(this.consumeChar("\\"),this.peekChar()){case"1":case"2":case"3":case"4":case"5":case"6":case"7":case"8":case"9":return this.decimalEscapeAtom();case"d":case"D":case"s":case"S":case"w":case"W":return this.characterClassEscape();case"f":case"n":case"r":case"t":case"v":return this.controlEscapeAtom();case"c":return this.controlLetterEscapeAtom();case"0":return this.nulCharacterAtom();case"x":return this.hexEscapeSequenceAtom();case"u":return this.regExpUnicodeEscapeSequenceAtom();default:return this.identityEscapeAtom()}},r.prototype.decimalEscapeAtom=function(){var p=this.positiveInteger();return{type:"GroupBackReference",value:p}},r.prototype.characterClassEscape=function(){var p,C=!1;switch(this.popChar()){case"d":p=u;break;case"D":p=u,C=!0;break;case"s":p=f;break;case"S":p=f,C=!0;break;case"w":p=g;break;case"W":p=g,C=!0;break}return a(p),{type:"Set",value:p,complement:C}},r.prototype.controlEscapeAtom=function(){var p;switch(this.popChar()){case"f":p=n("\f");break;case"n":p=n(` -`);break;case"r":p=n("\r");break;case"t":p=n(" ");break;case"v":p=n("\v");break}return a(p),{type:"Character",value:p}},r.prototype.controlLetterEscapeAtom=function(){this.consumeChar("c");var p=this.popChar();if(/[a-zA-Z]/.test(p)===!1)throw Error("Invalid ");var C=p.toUpperCase().charCodeAt(0)-64;return{type:"Character",value:C}},r.prototype.nulCharacterAtom=function(){return this.consumeChar("0"),{type:"Character",value:n("\0")}},r.prototype.hexEscapeSequenceAtom=function(){return this.consumeChar("x"),this.parseHexDigits(2)},r.prototype.regExpUnicodeEscapeSequenceAtom=function(){return this.consumeChar("u"),this.parseHexDigits(4)},r.prototype.identityEscapeAtom=function(){var p=this.popChar();return{type:"Character",value:n(p)}},r.prototype.classPatternCharacterAtom=function(){switch(this.peekChar()){case` -`:case"\r":case"\u2028":case"\u2029":case"\\":case"]":throw Error("TBD");default:var p=this.popChar();return{type:"Character",value:n(p)}}},r.prototype.characterClass=function(){var p=[],C=!1;for(this.consumeChar("["),this.peekChar(0)==="^"&&(this.consumeChar("^"),C=!0);this.isClassAtom();){var y=this.classAtom(),B=y.type==="Character";if(B&&this.isRangeDash()){this.consumeChar("-");var v=this.classAtom(),D=v.type==="Character";if(D){if(v.value=this.input.length)throw Error("Unexpected end of input");this.idx++},r.prototype.loc=function(p){return{begin:p,end:this.idx}};var e=/[0-9a-fA-F]/,t=/[0-9]/,i=/[1-9]/;function n(p){return p.charCodeAt(0)}function s(p,C){p.length!==void 0?p.forEach(function(y){C.push(y)}):C.push(p)}function o(p,C){if(p[C]===!0)throw"duplicate flag "+C;p[C]=!0}function a(p){if(p===void 0)throw Error("Internal Error - Should never get here!")}function l(){throw Error("Internal Error - Should never get here!")}var c,u=[];for(c=n("0");c<=n("9");c++)u.push(c);var g=[n("_")].concat(u);for(c=n("a");c<=n("z");c++)g.push(c);for(c=n("A");c<=n("Z");c++)g.push(c);var f=[n(" "),n("\f"),n(` -`),n("\r"),n(" "),n("\v"),n(" "),n("\xA0"),n("\u1680"),n("\u2000"),n("\u2001"),n("\u2002"),n("\u2003"),n("\u2004"),n("\u2005"),n("\u2006"),n("\u2007"),n("\u2008"),n("\u2009"),n("\u200A"),n("\u2028"),n("\u2029"),n("\u202F"),n("\u205F"),n("\u3000"),n("\uFEFF")];function h(){}return h.prototype.visitChildren=function(p){for(var C in p){var y=p[C];p.hasOwnProperty(C)&&(y.type!==void 0?this.visit(y):Array.isArray(y)&&y.forEach(function(B){this.visit(B)},this))}},h.prototype.visit=function(p){switch(p.type){case"Pattern":this.visitPattern(p);break;case"Flags":this.visitFlags(p);break;case"Disjunction":this.visitDisjunction(p);break;case"Alternative":this.visitAlternative(p);break;case"StartAnchor":this.visitStartAnchor(p);break;case"EndAnchor":this.visitEndAnchor(p);break;case"WordBoundary":this.visitWordBoundary(p);break;case"NonWordBoundary":this.visitNonWordBoundary(p);break;case"Lookahead":this.visitLookahead(p);break;case"NegativeLookahead":this.visitNegativeLookahead(p);break;case"Character":this.visitCharacter(p);break;case"Set":this.visitSet(p);break;case"Group":this.visitGroup(p);break;case"GroupBackReference":this.visitGroupBackReference(p);break;case"Quantifier":this.visitQuantifier(p);break}this.visitChildren(p)},h.prototype.visitPattern=function(p){},h.prototype.visitFlags=function(p){},h.prototype.visitDisjunction=function(p){},h.prototype.visitAlternative=function(p){},h.prototype.visitStartAnchor=function(p){},h.prototype.visitEndAnchor=function(p){},h.prototype.visitWordBoundary=function(p){},h.prototype.visitNonWordBoundary=function(p){},h.prototype.visitLookahead=function(p){},h.prototype.visitNegativeLookahead=function(p){},h.prototype.visitCharacter=function(p){},h.prototype.visitSet=function(p){},h.prototype.visitGroup=function(p){},h.prototype.visitGroupBackReference=function(p){},h.prototype.visitQuantifier=function(p){},{RegExpParser:r,BaseRegExpVisitor:h,VERSION:"0.5.0"}})});var GI=w(Ug=>{"use strict";Object.defineProperty(Ug,"__esModule",{value:!0});Ug.clearRegExpParserCache=Ug.getRegExpAst=void 0;var xme=UI(),HI={},Pme=new xme.RegExpParser;function Dme(r){var e=r.toString();if(HI.hasOwnProperty(e))return HI[e];var t=Pme.pattern(e);return HI[e]=t,t}Ug.getRegExpAst=Dme;function kme(){HI={}}Ug.clearRegExpParserCache=kme});var fY=w(pn=>{"use strict";var Rme=pn&&pn.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(pn,"__esModule",{value:!0});pn.canMatchCharCode=pn.firstCharOptimizedIndices=pn.getOptimizedStartCodesIndices=pn.failedOptimizationPrefixMsg=void 0;var cY=UI(),as=Gt(),uY=GI(),ya=Cv(),gY="Complement Sets are not supported for first char optimization";pn.failedOptimizationPrefixMsg=`Unable to use "first char" lexer optimizations: -`;function Fme(r,e){e===void 0&&(e=!1);try{var t=(0,uY.getRegExpAst)(r),i=jI(t.value,{},t.flags.ignoreCase);return i}catch(s){if(s.message===gY)e&&(0,as.PRINT_WARNING)(""+pn.failedOptimizationPrefixMsg+(" Unable to optimize: < "+r.toString()+` > -`)+` Complement Sets cannot be automatically optimized. - This will disable the lexer's first char optimizations. - See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#COMPLEMENT for details.`);else{var n="";e&&(n=` - This will disable the lexer's first char optimizations. - See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#REGEXP_PARSING for details.`),(0,as.PRINT_ERROR)(pn.failedOptimizationPrefixMsg+` -`+(" Failed parsing: < "+r.toString()+` > -`)+(" Using the regexp-to-ast library version: "+cY.VERSION+` -`)+" Please open an issue at: https://github.com/bd82/regexp-to-ast/issues"+n)}}return[]}pn.getOptimizedStartCodesIndices=Fme;function jI(r,e,t){switch(r.type){case"Disjunction":for(var i=0;i=ya.minOptimizationVal)for(var f=u.from>=ya.minOptimizationVal?u.from:ya.minOptimizationVal,h=u.to,p=(0,ya.charCodeToOptimizedIndex)(f),C=(0,ya.charCodeToOptimizedIndex)(h),y=p;y<=C;y++)e[y]=y}}});break;case"Group":jI(o.value,e,t);break;default:throw Error("Non Exhaustive Match")}var a=o.quantifier!==void 0&&o.quantifier.atLeast===0;if(o.type==="Group"&&dv(o)===!1||o.type!=="Group"&&a===!1)break}break;default:throw Error("non exhaustive match!")}return(0,as.values)(e)}pn.firstCharOptimizedIndices=jI;function YI(r,e,t){var i=(0,ya.charCodeToOptimizedIndex)(r);e[i]=i,t===!0&&Nme(r,e)}function Nme(r,e){var t=String.fromCharCode(r),i=t.toUpperCase();if(i!==t){var n=(0,ya.charCodeToOptimizedIndex)(i.charCodeAt(0));e[n]=n}else{var s=t.toLowerCase();if(s!==t){var n=(0,ya.charCodeToOptimizedIndex)(s.charCodeAt(0));e[n]=n}}}function lY(r,e){return(0,as.find)(r.value,function(t){if(typeof t=="number")return(0,as.contains)(e,t);var i=t;return(0,as.find)(e,function(n){return i.from<=n&&n<=i.to})!==void 0})}function dv(r){return r.quantifier&&r.quantifier.atLeast===0?!0:r.value?(0,as.isArray)(r.value)?(0,as.every)(r.value,dv):dv(r.value):!1}var Lme=function(r){Rme(e,r);function e(t){var i=r.call(this)||this;return i.targetCharCodes=t,i.found=!1,i}return e.prototype.visitChildren=function(t){if(this.found!==!0){switch(t.type){case"Lookahead":this.visitLookahead(t);return;case"NegativeLookahead":this.visitNegativeLookahead(t);return}r.prototype.visitChildren.call(this,t)}},e.prototype.visitCharacter=function(t){(0,as.contains)(this.targetCharCodes,t.value)&&(this.found=!0)},e.prototype.visitSet=function(t){t.complement?lY(t,this.targetCharCodes)===void 0&&(this.found=!0):lY(t,this.targetCharCodes)!==void 0&&(this.found=!0)},e}(cY.BaseRegExpVisitor);function Tme(r,e){if(e instanceof RegExp){var t=(0,uY.getRegExpAst)(e),i=new Lme(r);return i.visit(t),i.found}else return(0,as.find)(e,function(n){return(0,as.contains)(r,n.charCodeAt(0))})!==void 0}pn.canMatchCharCode=Tme});var Cv=w(Ve=>{"use strict";var hY=Ve&&Ve.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(Ve,"__esModule",{value:!0});Ve.charCodeToOptimizedIndex=Ve.minOptimizationVal=Ve.buildLineBreakIssueMessage=Ve.LineTerminatorOptimizedTester=Ve.isShortPattern=Ve.isCustomPattern=Ve.cloneEmptyGroups=Ve.performWarningRuntimeChecks=Ve.performRuntimeChecks=Ve.addStickyFlag=Ve.addStartOfInput=Ve.findUnreachablePatterns=Ve.findModesThatDoNotExist=Ve.findInvalidGroupType=Ve.findDuplicatePatterns=Ve.findUnsupportedFlags=Ve.findStartOfInputAnchor=Ve.findEmptyMatchRegExps=Ve.findEndOfInputAnchor=Ve.findInvalidPatterns=Ve.findMissingPatterns=Ve.validatePatterns=Ve.analyzeTokenTypes=Ve.enableSticky=Ve.disableSticky=Ve.SUPPORT_STICKY=Ve.MODES=Ve.DEFAULT_MODE=void 0;var pY=UI(),ir=gd(),xe=Gt(),Hg=fY(),dY=GI(),So="PATTERN";Ve.DEFAULT_MODE="defaultMode";Ve.MODES="modes";Ve.SUPPORT_STICKY=typeof new RegExp("(?:)").sticky=="boolean";function Ome(){Ve.SUPPORT_STICKY=!1}Ve.disableSticky=Ome;function Mme(){Ve.SUPPORT_STICKY=!0}Ve.enableSticky=Mme;function Kme(r,e){e=(0,xe.defaults)(e,{useSticky:Ve.SUPPORT_STICKY,debug:!1,safeMode:!1,positionTracking:"full",lineTerminatorCharacters:["\r",` -`],tracer:function(v,D){return D()}});var t=e.tracer;t("initCharCodeToOptimizedIndexMap",function(){Vme()});var i;t("Reject Lexer.NA",function(){i=(0,xe.reject)(r,function(v){return v[So]===ir.Lexer.NA})});var n=!1,s;t("Transform Patterns",function(){n=!1,s=(0,xe.map)(i,function(v){var D=v[So];if((0,xe.isRegExp)(D)){var L=D.source;return L.length===1&&L!=="^"&&L!=="$"&&L!=="."&&!D.ignoreCase?L:L.length===2&&L[0]==="\\"&&!(0,xe.contains)(["d","D","s","S","t","r","n","t","0","c","b","B","f","v","w","W"],L[1])?L[1]:e.useSticky?Iv(D):Ev(D)}else{if((0,xe.isFunction)(D))return n=!0,{exec:D};if((0,xe.has)(D,"exec"))return n=!0,D;if(typeof D=="string"){if(D.length===1)return D;var H=D.replace(/[\\^$.*+?()[\]{}|]/g,"\\$&"),j=new RegExp(H);return e.useSticky?Iv(j):Ev(j)}else throw Error("non exhaustive match")}})});var o,a,l,c,u;t("misc mapping",function(){o=(0,xe.map)(i,function(v){return v.tokenTypeIdx}),a=(0,xe.map)(i,function(v){var D=v.GROUP;if(D!==ir.Lexer.SKIPPED){if((0,xe.isString)(D))return D;if((0,xe.isUndefined)(D))return!1;throw Error("non exhaustive match")}}),l=(0,xe.map)(i,function(v){var D=v.LONGER_ALT;if(D){var L=(0,xe.isArray)(D)?(0,xe.map)(D,function(H){return(0,xe.indexOf)(i,H)}):[(0,xe.indexOf)(i,D)];return L}}),c=(0,xe.map)(i,function(v){return v.PUSH_MODE}),u=(0,xe.map)(i,function(v){return(0,xe.has)(v,"POP_MODE")})});var g;t("Line Terminator Handling",function(){var v=DY(e.lineTerminatorCharacters);g=(0,xe.map)(i,function(D){return!1}),e.positionTracking!=="onlyOffset"&&(g=(0,xe.map)(i,function(D){if((0,xe.has)(D,"LINE_BREAKS"))return D.LINE_BREAKS;if(xY(D,v)===!1)return(0,Hg.canMatchCharCode)(v,D.PATTERN)}))});var f,h,p,C;t("Misc Mapping #2",function(){f=(0,xe.map)(i,wv),h=(0,xe.map)(s,vY),p=(0,xe.reduce)(i,function(v,D){var L=D.GROUP;return(0,xe.isString)(L)&&L!==ir.Lexer.SKIPPED&&(v[L]=[]),v},{}),C=(0,xe.map)(s,function(v,D){return{pattern:s[D],longerAlt:l[D],canLineTerminator:g[D],isCustom:f[D],short:h[D],group:a[D],push:c[D],pop:u[D],tokenTypeIdx:o[D],tokenType:i[D]}})});var y=!0,B=[];return e.safeMode||t("First Char Optimization",function(){B=(0,xe.reduce)(i,function(v,D,L){if(typeof D.PATTERN=="string"){var H=D.PATTERN.charCodeAt(0),j=yv(H);mv(v,j,C[L])}else if((0,xe.isArray)(D.START_CHARS_HINT)){var $;(0,xe.forEach)(D.START_CHARS_HINT,function(W){var Z=typeof W=="string"?W.charCodeAt(0):W,A=yv(Z);$!==A&&($=A,mv(v,A,C[L]))})}else if((0,xe.isRegExp)(D.PATTERN))if(D.PATTERN.unicode)y=!1,e.ensureOptimizations&&(0,xe.PRINT_ERROR)(""+Hg.failedOptimizationPrefixMsg+(" Unable to analyze < "+D.PATTERN.toString()+` > pattern. -`)+` The regexp unicode flag is not currently supported by the regexp-to-ast library. - This will disable the lexer's first char optimizations. - For details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#UNICODE_OPTIMIZE`);else{var V=(0,Hg.getOptimizedStartCodesIndices)(D.PATTERN,e.ensureOptimizations);(0,xe.isEmpty)(V)&&(y=!1),(0,xe.forEach)(V,function(W){mv(v,W,C[L])})}else e.ensureOptimizations&&(0,xe.PRINT_ERROR)(""+Hg.failedOptimizationPrefixMsg+(" TokenType: <"+D.name+`> is using a custom token pattern without providing parameter. -`)+` This will disable the lexer's first char optimizations. - For details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#CUSTOM_OPTIMIZE`),y=!1;return v},[])}),t("ArrayPacking",function(){B=(0,xe.packArray)(B)}),{emptyGroups:p,patternIdxToConfig:C,charCodeToPatternIdxToConfig:B,hasCustom:n,canBeOptimized:y}}Ve.analyzeTokenTypes=Kme;function Ume(r,e){var t=[],i=CY(r);t=t.concat(i.errors);var n=mY(i.valid),s=n.valid;return t=t.concat(n.errors),t=t.concat(Hme(s)),t=t.concat(QY(s)),t=t.concat(bY(s,e)),t=t.concat(SY(s)),t}Ve.validatePatterns=Ume;function Hme(r){var e=[],t=(0,xe.filter)(r,function(i){return(0,xe.isRegExp)(i[So])});return e=e.concat(EY(t)),e=e.concat(yY(t)),e=e.concat(wY(t)),e=e.concat(BY(t)),e=e.concat(IY(t)),e}function CY(r){var e=(0,xe.filter)(r,function(n){return!(0,xe.has)(n,So)}),t=(0,xe.map)(e,function(n){return{message:"Token Type: ->"+n.name+"<- missing static 'PATTERN' property",type:ir.LexerDefinitionErrorType.MISSING_PATTERN,tokenTypes:[n]}}),i=(0,xe.difference)(r,e);return{errors:t,valid:i}}Ve.findMissingPatterns=CY;function mY(r){var e=(0,xe.filter)(r,function(n){var s=n[So];return!(0,xe.isRegExp)(s)&&!(0,xe.isFunction)(s)&&!(0,xe.has)(s,"exec")&&!(0,xe.isString)(s)}),t=(0,xe.map)(e,function(n){return{message:"Token Type: ->"+n.name+"<- static 'PATTERN' can only be a RegExp, a Function matching the {CustomPatternMatcherFunc} type or an Object matching the {ICustomPattern} interface.",type:ir.LexerDefinitionErrorType.INVALID_PATTERN,tokenTypes:[n]}}),i=(0,xe.difference)(r,e);return{errors:t,valid:i}}Ve.findInvalidPatterns=mY;var Gme=/[^\\][\$]/;function EY(r){var e=function(n){hY(s,n);function s(){var o=n!==null&&n.apply(this,arguments)||this;return o.found=!1,o}return s.prototype.visitEndAnchor=function(o){this.found=!0},s}(pY.BaseRegExpVisitor),t=(0,xe.filter)(r,function(n){var s=n[So];try{var o=(0,dY.getRegExpAst)(s),a=new e;return a.visit(o),a.found}catch{return Gme.test(s.source)}}),i=(0,xe.map)(t,function(n){return{message:`Unexpected RegExp Anchor Error: - Token Type: ->`+n.name+`<- static 'PATTERN' cannot contain end of input anchor '$' - See chevrotain.io/docs/guide/resolving_lexer_errors.html#ANCHORS for details.`,type:ir.LexerDefinitionErrorType.EOI_ANCHOR_FOUND,tokenTypes:[n]}});return i}Ve.findEndOfInputAnchor=EY;function IY(r){var e=(0,xe.filter)(r,function(i){var n=i[So];return n.test("")}),t=(0,xe.map)(e,function(i){return{message:"Token Type: ->"+i.name+"<- static 'PATTERN' must not match an empty string",type:ir.LexerDefinitionErrorType.EMPTY_MATCH_PATTERN,tokenTypes:[i]}});return t}Ve.findEmptyMatchRegExps=IY;var Yme=/[^\\[][\^]|^\^/;function yY(r){var e=function(n){hY(s,n);function s(){var o=n!==null&&n.apply(this,arguments)||this;return o.found=!1,o}return s.prototype.visitStartAnchor=function(o){this.found=!0},s}(pY.BaseRegExpVisitor),t=(0,xe.filter)(r,function(n){var s=n[So];try{var o=(0,dY.getRegExpAst)(s),a=new e;return a.visit(o),a.found}catch{return Yme.test(s.source)}}),i=(0,xe.map)(t,function(n){return{message:`Unexpected RegExp Anchor Error: - Token Type: ->`+n.name+`<- static 'PATTERN' cannot contain start of input anchor '^' - See https://chevrotain.io/docs/guide/resolving_lexer_errors.html#ANCHORS for details.`,type:ir.LexerDefinitionErrorType.SOI_ANCHOR_FOUND,tokenTypes:[n]}});return i}Ve.findStartOfInputAnchor=yY;function wY(r){var e=(0,xe.filter)(r,function(i){var n=i[So];return n instanceof RegExp&&(n.multiline||n.global)}),t=(0,xe.map)(e,function(i){return{message:"Token Type: ->"+i.name+"<- static 'PATTERN' may NOT contain global('g') or multiline('m')",type:ir.LexerDefinitionErrorType.UNSUPPORTED_FLAGS_FOUND,tokenTypes:[i]}});return t}Ve.findUnsupportedFlags=wY;function BY(r){var e=[],t=(0,xe.map)(r,function(s){return(0,xe.reduce)(r,function(o,a){return s.PATTERN.source===a.PATTERN.source&&!(0,xe.contains)(e,a)&&a.PATTERN!==ir.Lexer.NA&&(e.push(a),o.push(a)),o},[])});t=(0,xe.compact)(t);var i=(0,xe.filter)(t,function(s){return s.length>1}),n=(0,xe.map)(i,function(s){var o=(0,xe.map)(s,function(l){return l.name}),a=(0,xe.first)(s).PATTERN;return{message:"The same RegExp pattern ->"+a+"<-"+("has been used in all of the following Token Types: "+o.join(", ")+" <-"),type:ir.LexerDefinitionErrorType.DUPLICATE_PATTERNS_FOUND,tokenTypes:s}});return n}Ve.findDuplicatePatterns=BY;function QY(r){var e=(0,xe.filter)(r,function(i){if(!(0,xe.has)(i,"GROUP"))return!1;var n=i.GROUP;return n!==ir.Lexer.SKIPPED&&n!==ir.Lexer.NA&&!(0,xe.isString)(n)}),t=(0,xe.map)(e,function(i){return{message:"Token Type: ->"+i.name+"<- static 'GROUP' can only be Lexer.SKIPPED/Lexer.NA/A String",type:ir.LexerDefinitionErrorType.INVALID_GROUP_TYPE_FOUND,tokenTypes:[i]}});return t}Ve.findInvalidGroupType=QY;function bY(r,e){var t=(0,xe.filter)(r,function(n){return n.PUSH_MODE!==void 0&&!(0,xe.contains)(e,n.PUSH_MODE)}),i=(0,xe.map)(t,function(n){var s="Token Type: ->"+n.name+"<- static 'PUSH_MODE' value cannot refer to a Lexer Mode ->"+n.PUSH_MODE+"<-which does not exist";return{message:s,type:ir.LexerDefinitionErrorType.PUSH_MODE_DOES_NOT_EXIST,tokenTypes:[n]}});return i}Ve.findModesThatDoNotExist=bY;function SY(r){var e=[],t=(0,xe.reduce)(r,function(i,n,s){var o=n.PATTERN;return o===ir.Lexer.NA||((0,xe.isString)(o)?i.push({str:o,idx:s,tokenType:n}):(0,xe.isRegExp)(o)&&qme(o)&&i.push({str:o.source,idx:s,tokenType:n})),i},[]);return(0,xe.forEach)(r,function(i,n){(0,xe.forEach)(t,function(s){var o=s.str,a=s.idx,l=s.tokenType;if(n"+i.name+"<-")+`in the lexer's definition. -See https://chevrotain.io/docs/guide/resolving_lexer_errors.html#UNREACHABLE`;e.push({message:c,type:ir.LexerDefinitionErrorType.UNREACHABLE_PATTERN,tokenTypes:[i,l]})}})}),e}Ve.findUnreachablePatterns=SY;function jme(r,e){if((0,xe.isRegExp)(e)){var t=e.exec(r);return t!==null&&t.index===0}else{if((0,xe.isFunction)(e))return e(r,0,[],{});if((0,xe.has)(e,"exec"))return e.exec(r,0,[],{});if(typeof e=="string")return e===r;throw Error("non exhaustive match")}}function qme(r){var e=[".","\\","[","]","|","^","$","(",")","?","*","+","{"];return(0,xe.find)(e,function(t){return r.source.indexOf(t)!==-1})===void 0}function Ev(r){var e=r.ignoreCase?"i":"";return new RegExp("^(?:"+r.source+")",e)}Ve.addStartOfInput=Ev;function Iv(r){var e=r.ignoreCase?"iy":"y";return new RegExp(""+r.source,e)}Ve.addStickyFlag=Iv;function Jme(r,e,t){var i=[];return(0,xe.has)(r,Ve.DEFAULT_MODE)||i.push({message:"A MultiMode Lexer cannot be initialized without a <"+Ve.DEFAULT_MODE+`> property in its definition -`,type:ir.LexerDefinitionErrorType.MULTI_MODE_LEXER_WITHOUT_DEFAULT_MODE}),(0,xe.has)(r,Ve.MODES)||i.push({message:"A MultiMode Lexer cannot be initialized without a <"+Ve.MODES+`> property in its definition -`,type:ir.LexerDefinitionErrorType.MULTI_MODE_LEXER_WITHOUT_MODES_PROPERTY}),(0,xe.has)(r,Ve.MODES)&&(0,xe.has)(r,Ve.DEFAULT_MODE)&&!(0,xe.has)(r.modes,r.defaultMode)&&i.push({message:"A MultiMode Lexer cannot be initialized with a "+Ve.DEFAULT_MODE+": <"+r.defaultMode+`>which does not exist -`,type:ir.LexerDefinitionErrorType.MULTI_MODE_LEXER_DEFAULT_MODE_VALUE_DOES_NOT_EXIST}),(0,xe.has)(r,Ve.MODES)&&(0,xe.forEach)(r.modes,function(n,s){(0,xe.forEach)(n,function(o,a){(0,xe.isUndefined)(o)&&i.push({message:"A Lexer cannot be initialized using an undefined Token Type. Mode:"+("<"+s+"> at index: <"+a+`> -`),type:ir.LexerDefinitionErrorType.LEXER_DEFINITION_CANNOT_CONTAIN_UNDEFINED})})}),i}Ve.performRuntimeChecks=Jme;function Wme(r,e,t){var i=[],n=!1,s=(0,xe.compact)((0,xe.flatten)((0,xe.mapValues)(r.modes,function(l){return l}))),o=(0,xe.reject)(s,function(l){return l[So]===ir.Lexer.NA}),a=DY(t);return e&&(0,xe.forEach)(o,function(l){var c=xY(l,a);if(c!==!1){var u=PY(l,c),g={message:u,type:c.issue,tokenType:l};i.push(g)}else(0,xe.has)(l,"LINE_BREAKS")?l.LINE_BREAKS===!0&&(n=!0):(0,Hg.canMatchCharCode)(a,l.PATTERN)&&(n=!0)}),e&&!n&&i.push({message:`Warning: No LINE_BREAKS Found. - This Lexer has been defined to track line and column information, - But none of the Token Types can be identified as matching a line terminator. - See https://chevrotain.io/docs/guide/resolving_lexer_errors.html#LINE_BREAKS - for details.`,type:ir.LexerDefinitionErrorType.NO_LINE_BREAKS_FLAGS}),i}Ve.performWarningRuntimeChecks=Wme;function zme(r){var e={},t=(0,xe.keys)(r);return(0,xe.forEach)(t,function(i){var n=r[i];if((0,xe.isArray)(n))e[i]=[];else throw Error("non exhaustive match")}),e}Ve.cloneEmptyGroups=zme;function wv(r){var e=r.PATTERN;if((0,xe.isRegExp)(e))return!1;if((0,xe.isFunction)(e))return!0;if((0,xe.has)(e,"exec"))return!0;if((0,xe.isString)(e))return!1;throw Error("non exhaustive match")}Ve.isCustomPattern=wv;function vY(r){return(0,xe.isString)(r)&&r.length===1?r.charCodeAt(0):!1}Ve.isShortPattern=vY;Ve.LineTerminatorOptimizedTester={test:function(r){for(var e=r.length,t=this.lastIndex;t Token Type -`)+(" Root cause: "+e.errMsg+`. -`)+" For details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#IDENTIFY_TERMINATOR";if(e.issue===ir.LexerDefinitionErrorType.CUSTOM_LINE_BREAK)return`Warning: A Custom Token Pattern should specify the option. -`+(" The problem is in the <"+r.name+`> Token Type -`)+" For details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#CUSTOM_LINE_BREAK";throw Error("non exhaustive match")}Ve.buildLineBreakIssueMessage=PY;function DY(r){var e=(0,xe.map)(r,function(t){return(0,xe.isString)(t)&&t.length>0?t.charCodeAt(0):t});return e}function mv(r,e,t){r[e]===void 0?r[e]=[t]:r[e].push(t)}Ve.minOptimizationVal=256;var qI=[];function yv(r){return r255?255+~~(r/255):r}}});var Gg=w(Nt=>{"use strict";Object.defineProperty(Nt,"__esModule",{value:!0});Nt.isTokenType=Nt.hasExtendingTokensTypesMapProperty=Nt.hasExtendingTokensTypesProperty=Nt.hasCategoriesProperty=Nt.hasShortKeyProperty=Nt.singleAssignCategoriesToksMap=Nt.assignCategoriesMapProp=Nt.assignCategoriesTokensProp=Nt.assignTokenDefaultProps=Nt.expandCategories=Nt.augmentTokenTypes=Nt.tokenIdxToClass=Nt.tokenShortNameIdx=Nt.tokenStructuredMatcherNoCategories=Nt.tokenStructuredMatcher=void 0;var _r=Gt();function Xme(r,e){var t=r.tokenTypeIdx;return t===e.tokenTypeIdx?!0:e.isParent===!0&&e.categoryMatchesMap[t]===!0}Nt.tokenStructuredMatcher=Xme;function _me(r,e){return r.tokenTypeIdx===e.tokenTypeIdx}Nt.tokenStructuredMatcherNoCategories=_me;Nt.tokenShortNameIdx=1;Nt.tokenIdxToClass={};function Zme(r){var e=kY(r);RY(e),NY(e),FY(e),(0,_r.forEach)(e,function(t){t.isParent=t.categoryMatches.length>0})}Nt.augmentTokenTypes=Zme;function kY(r){for(var e=(0,_r.cloneArr)(r),t=r,i=!0;i;){t=(0,_r.compact)((0,_r.flatten)((0,_r.map)(t,function(s){return s.CATEGORIES})));var n=(0,_r.difference)(t,e);e=e.concat(n),(0,_r.isEmpty)(n)?i=!1:t=n}return e}Nt.expandCategories=kY;function RY(r){(0,_r.forEach)(r,function(e){LY(e)||(Nt.tokenIdxToClass[Nt.tokenShortNameIdx]=e,e.tokenTypeIdx=Nt.tokenShortNameIdx++),Bv(e)&&!(0,_r.isArray)(e.CATEGORIES)&&(e.CATEGORIES=[e.CATEGORIES]),Bv(e)||(e.CATEGORIES=[]),TY(e)||(e.categoryMatches=[]),OY(e)||(e.categoryMatchesMap={})})}Nt.assignTokenDefaultProps=RY;function FY(r){(0,_r.forEach)(r,function(e){e.categoryMatches=[],(0,_r.forEach)(e.categoryMatchesMap,function(t,i){e.categoryMatches.push(Nt.tokenIdxToClass[i].tokenTypeIdx)})})}Nt.assignCategoriesTokensProp=FY;function NY(r){(0,_r.forEach)(r,function(e){Qv([],e)})}Nt.assignCategoriesMapProp=NY;function Qv(r,e){(0,_r.forEach)(r,function(t){e.categoryMatchesMap[t.tokenTypeIdx]=!0}),(0,_r.forEach)(e.CATEGORIES,function(t){var i=r.concat(e);(0,_r.contains)(i,t)||Qv(i,t)})}Nt.singleAssignCategoriesToksMap=Qv;function LY(r){return(0,_r.has)(r,"tokenTypeIdx")}Nt.hasShortKeyProperty=LY;function Bv(r){return(0,_r.has)(r,"CATEGORIES")}Nt.hasCategoriesProperty=Bv;function TY(r){return(0,_r.has)(r,"categoryMatches")}Nt.hasExtendingTokensTypesProperty=TY;function OY(r){return(0,_r.has)(r,"categoryMatchesMap")}Nt.hasExtendingTokensTypesMapProperty=OY;function $me(r){return(0,_r.has)(r,"tokenTypeIdx")}Nt.isTokenType=$me});var bv=w(JI=>{"use strict";Object.defineProperty(JI,"__esModule",{value:!0});JI.defaultLexerErrorProvider=void 0;JI.defaultLexerErrorProvider={buildUnableToPopLexerModeMessage:function(r){return"Unable to pop Lexer Mode after encountering Token ->"+r.image+"<- The Mode Stack is empty"},buildUnexpectedCharactersMessage:function(r,e,t,i,n){return"unexpected character: ->"+r.charAt(e)+"<- at offset: "+e+","+(" skipped "+t+" characters.")}}});var gd=w(nc=>{"use strict";Object.defineProperty(nc,"__esModule",{value:!0});nc.Lexer=nc.LexerDefinitionErrorType=void 0;var zs=Cv(),nr=Gt(),eEe=Gg(),tEe=bv(),rEe=GI(),iEe;(function(r){r[r.MISSING_PATTERN=0]="MISSING_PATTERN",r[r.INVALID_PATTERN=1]="INVALID_PATTERN",r[r.EOI_ANCHOR_FOUND=2]="EOI_ANCHOR_FOUND",r[r.UNSUPPORTED_FLAGS_FOUND=3]="UNSUPPORTED_FLAGS_FOUND",r[r.DUPLICATE_PATTERNS_FOUND=4]="DUPLICATE_PATTERNS_FOUND",r[r.INVALID_GROUP_TYPE_FOUND=5]="INVALID_GROUP_TYPE_FOUND",r[r.PUSH_MODE_DOES_NOT_EXIST=6]="PUSH_MODE_DOES_NOT_EXIST",r[r.MULTI_MODE_LEXER_WITHOUT_DEFAULT_MODE=7]="MULTI_MODE_LEXER_WITHOUT_DEFAULT_MODE",r[r.MULTI_MODE_LEXER_WITHOUT_MODES_PROPERTY=8]="MULTI_MODE_LEXER_WITHOUT_MODES_PROPERTY",r[r.MULTI_MODE_LEXER_DEFAULT_MODE_VALUE_DOES_NOT_EXIST=9]="MULTI_MODE_LEXER_DEFAULT_MODE_VALUE_DOES_NOT_EXIST",r[r.LEXER_DEFINITION_CANNOT_CONTAIN_UNDEFINED=10]="LEXER_DEFINITION_CANNOT_CONTAIN_UNDEFINED",r[r.SOI_ANCHOR_FOUND=11]="SOI_ANCHOR_FOUND",r[r.EMPTY_MATCH_PATTERN=12]="EMPTY_MATCH_PATTERN",r[r.NO_LINE_BREAKS_FLAGS=13]="NO_LINE_BREAKS_FLAGS",r[r.UNREACHABLE_PATTERN=14]="UNREACHABLE_PATTERN",r[r.IDENTIFY_TERMINATOR=15]="IDENTIFY_TERMINATOR",r[r.CUSTOM_LINE_BREAK=16]="CUSTOM_LINE_BREAK"})(iEe=nc.LexerDefinitionErrorType||(nc.LexerDefinitionErrorType={}));var fd={deferDefinitionErrorsHandling:!1,positionTracking:"full",lineTerminatorsPattern:/\n|\r\n?/g,lineTerminatorCharacters:[` -`,"\r"],ensureOptimizations:!1,safeMode:!1,errorMessageProvider:tEe.defaultLexerErrorProvider,traceInitPerf:!1,skipValidations:!1};Object.freeze(fd);var nEe=function(){function r(e,t){var i=this;if(t===void 0&&(t=fd),this.lexerDefinition=e,this.lexerDefinitionErrors=[],this.lexerDefinitionWarning=[],this.patternIdxToConfig={},this.charCodeToPatternIdxToConfig={},this.modes=[],this.emptyGroups={},this.config=void 0,this.trackStartLines=!0,this.trackEndLines=!0,this.hasCustom=!1,this.canModeBeOptimized={},typeof t=="boolean")throw Error(`The second argument to the Lexer constructor is now an ILexerConfig Object. -a boolean 2nd argument is no longer supported`);this.config=(0,nr.merge)(fd,t);var n=this.config.traceInitPerf;n===!0?(this.traceInitMaxIdent=1/0,this.traceInitPerf=!0):typeof n=="number"&&(this.traceInitMaxIdent=n,this.traceInitPerf=!0),this.traceInitIndent=-1,this.TRACE_INIT("Lexer Constructor",function(){var s,o=!0;i.TRACE_INIT("Lexer Config handling",function(){if(i.config.lineTerminatorsPattern===fd.lineTerminatorsPattern)i.config.lineTerminatorsPattern=zs.LineTerminatorOptimizedTester;else if(i.config.lineTerminatorCharacters===fd.lineTerminatorCharacters)throw Error(`Error: Missing property on the Lexer config. - For details See: https://chevrotain.io/docs/guide/resolving_lexer_errors.html#MISSING_LINE_TERM_CHARS`);if(t.safeMode&&t.ensureOptimizations)throw Error('"safeMode" and "ensureOptimizations" flags are mutually exclusive.');i.trackStartLines=/full|onlyStart/i.test(i.config.positionTracking),i.trackEndLines=/full/i.test(i.config.positionTracking),(0,nr.isArray)(e)?(s={modes:{}},s.modes[zs.DEFAULT_MODE]=(0,nr.cloneArr)(e),s[zs.DEFAULT_MODE]=zs.DEFAULT_MODE):(o=!1,s=(0,nr.cloneObj)(e))}),i.config.skipValidations===!1&&(i.TRACE_INIT("performRuntimeChecks",function(){i.lexerDefinitionErrors=i.lexerDefinitionErrors.concat((0,zs.performRuntimeChecks)(s,i.trackStartLines,i.config.lineTerminatorCharacters))}),i.TRACE_INIT("performWarningRuntimeChecks",function(){i.lexerDefinitionWarning=i.lexerDefinitionWarning.concat((0,zs.performWarningRuntimeChecks)(s,i.trackStartLines,i.config.lineTerminatorCharacters))})),s.modes=s.modes?s.modes:{},(0,nr.forEach)(s.modes,function(u,g){s.modes[g]=(0,nr.reject)(u,function(f){return(0,nr.isUndefined)(f)})});var a=(0,nr.keys)(s.modes);if((0,nr.forEach)(s.modes,function(u,g){i.TRACE_INIT("Mode: <"+g+"> processing",function(){if(i.modes.push(g),i.config.skipValidations===!1&&i.TRACE_INIT("validatePatterns",function(){i.lexerDefinitionErrors=i.lexerDefinitionErrors.concat((0,zs.validatePatterns)(u,a))}),(0,nr.isEmpty)(i.lexerDefinitionErrors)){(0,eEe.augmentTokenTypes)(u);var f;i.TRACE_INIT("analyzeTokenTypes",function(){f=(0,zs.analyzeTokenTypes)(u,{lineTerminatorCharacters:i.config.lineTerminatorCharacters,positionTracking:t.positionTracking,ensureOptimizations:t.ensureOptimizations,safeMode:t.safeMode,tracer:i.TRACE_INIT.bind(i)})}),i.patternIdxToConfig[g]=f.patternIdxToConfig,i.charCodeToPatternIdxToConfig[g]=f.charCodeToPatternIdxToConfig,i.emptyGroups=(0,nr.merge)(i.emptyGroups,f.emptyGroups),i.hasCustom=f.hasCustom||i.hasCustom,i.canModeBeOptimized[g]=f.canBeOptimized}})}),i.defaultMode=s.defaultMode,!(0,nr.isEmpty)(i.lexerDefinitionErrors)&&!i.config.deferDefinitionErrorsHandling){var l=(0,nr.map)(i.lexerDefinitionErrors,function(u){return u.message}),c=l.join(`----------------------- -`);throw new Error(`Errors detected in definition of Lexer: -`+c)}(0,nr.forEach)(i.lexerDefinitionWarning,function(u){(0,nr.PRINT_WARNING)(u.message)}),i.TRACE_INIT("Choosing sub-methods implementations",function(){if(zs.SUPPORT_STICKY?(i.chopInput=nr.IDENTITY,i.match=i.matchWithTest):(i.updateLastIndex=nr.NOOP,i.match=i.matchWithExec),o&&(i.handleModes=nr.NOOP),i.trackStartLines===!1&&(i.computeNewColumn=nr.IDENTITY),i.trackEndLines===!1&&(i.updateTokenEndLineColumnLocation=nr.NOOP),/full/i.test(i.config.positionTracking))i.createTokenInstance=i.createFullToken;else if(/onlyStart/i.test(i.config.positionTracking))i.createTokenInstance=i.createStartOnlyToken;else if(/onlyOffset/i.test(i.config.positionTracking))i.createTokenInstance=i.createOffsetOnlyToken;else throw Error('Invalid config option: "'+i.config.positionTracking+'"');i.hasCustom?(i.addToken=i.addTokenUsingPush,i.handlePayload=i.handlePayloadWithCustom):(i.addToken=i.addTokenUsingMemberAccess,i.handlePayload=i.handlePayloadNoCustom)}),i.TRACE_INIT("Failed Optimization Warnings",function(){var u=(0,nr.reduce)(i.canModeBeOptimized,function(g,f,h){return f===!1&&g.push(h),g},[]);if(t.ensureOptimizations&&!(0,nr.isEmpty)(u))throw Error("Lexer Modes: < "+u.join(", ")+` > cannot be optimized. - Disable the "ensureOptimizations" lexer config flag to silently ignore this and run the lexer in an un-optimized mode. - Or inspect the console log for details on how to resolve these issues.`)}),i.TRACE_INIT("clearRegExpParserCache",function(){(0,rEe.clearRegExpParserCache)()}),i.TRACE_INIT("toFastProperties",function(){(0,nr.toFastProperties)(i)})})}return r.prototype.tokenize=function(e,t){if(t===void 0&&(t=this.defaultMode),!(0,nr.isEmpty)(this.lexerDefinitionErrors)){var i=(0,nr.map)(this.lexerDefinitionErrors,function(o){return o.message}),n=i.join(`----------------------- -`);throw new Error(`Unable to Tokenize because Errors detected in definition of Lexer: -`+n)}var s=this.tokenizeInternal(e,t);return s},r.prototype.tokenizeInternal=function(e,t){var i=this,n,s,o,a,l,c,u,g,f,h,p,C,y,B,v,D,L=e,H=L.length,j=0,$=0,V=this.hasCustom?0:Math.floor(e.length/10),W=new Array(V),Z=[],A=this.trackStartLines?1:void 0,ae=this.trackStartLines?1:void 0,ge=(0,zs.cloneEmptyGroups)(this.emptyGroups),re=this.trackStartLines,O=this.config.lineTerminatorsPattern,F=0,ue=[],he=[],ke=[],Fe=[];Object.freeze(Fe);var Ne=void 0;function oe(){return ue}function le(pr){var Ei=(0,zs.charCodeToOptimizedIndex)(pr),_n=he[Ei];return _n===void 0?Fe:_n}var we=function(pr){if(ke.length===1&&pr.tokenType.PUSH_MODE===void 0){var Ei=i.config.errorMessageProvider.buildUnableToPopLexerModeMessage(pr);Z.push({offset:pr.startOffset,line:pr.startLine!==void 0?pr.startLine:void 0,column:pr.startColumn!==void 0?pr.startColumn:void 0,length:pr.image.length,message:Ei})}else{ke.pop();var _n=(0,nr.last)(ke);ue=i.patternIdxToConfig[_n],he=i.charCodeToPatternIdxToConfig[_n],F=ue.length;var oa=i.canModeBeOptimized[_n]&&i.config.safeMode===!1;he&&oa?Ne=le:Ne=oe}};function fe(pr){ke.push(pr),he=this.charCodeToPatternIdxToConfig[pr],ue=this.patternIdxToConfig[pr],F=ue.length,F=ue.length;var Ei=this.canModeBeOptimized[pr]&&this.config.safeMode===!1;he&&Ei?Ne=le:Ne=oe}fe.call(this,t);for(var Ae;jc.length){c=a,u=g,Ae=tt;break}}}break}}if(c!==null){if(f=c.length,h=Ae.group,h!==void 0&&(p=Ae.tokenTypeIdx,C=this.createTokenInstance(c,j,p,Ae.tokenType,A,ae,f),this.handlePayload(C,u),h===!1?$=this.addToken(W,$,C):ge[h].push(C)),e=this.chopInput(e,f),j=j+f,ae=this.computeNewColumn(ae,f),re===!0&&Ae.canLineTerminator===!0){var It=0,Or=void 0,ii=void 0;O.lastIndex=0;do Or=O.test(c),Or===!0&&(ii=O.lastIndex-1,It++);while(Or===!0);It!==0&&(A=A+It,ae=f-ii,this.updateTokenEndLineColumnLocation(C,h,ii,It,A,ae,f))}this.handleModes(Ae,we,fe,C)}else{for(var gi=j,hr=A,fi=ae,ni=!1;!ni&&j <"+e+">");var n=(0,nr.timer)(t),s=n.time,o=n.value,a=s>10?console.warn:console.log;return this.traceInitIndent time: "+s+"ms"),this.traceInitIndent--,o}else return t()},r.SKIPPED="This marks a skipped Token pattern, this means each token identified by it willbe consumed and then thrown into oblivion, this can be used to for example to completely ignore whitespace.",r.NA=/NOT_APPLICABLE/,r}();nc.Lexer=nEe});var SA=w(Qi=>{"use strict";Object.defineProperty(Qi,"__esModule",{value:!0});Qi.tokenMatcher=Qi.createTokenInstance=Qi.EOF=Qi.createToken=Qi.hasTokenLabel=Qi.tokenName=Qi.tokenLabel=void 0;var Vs=Gt(),sEe=gd(),Sv=Gg();function oEe(r){return JY(r)?r.LABEL:r.name}Qi.tokenLabel=oEe;function aEe(r){return r.name}Qi.tokenName=aEe;function JY(r){return(0,Vs.isString)(r.LABEL)&&r.LABEL!==""}Qi.hasTokenLabel=JY;var AEe="parent",MY="categories",KY="label",UY="group",HY="push_mode",GY="pop_mode",YY="longer_alt",jY="line_breaks",qY="start_chars_hint";function WY(r){return lEe(r)}Qi.createToken=WY;function lEe(r){var e=r.pattern,t={};if(t.name=r.name,(0,Vs.isUndefined)(e)||(t.PATTERN=e),(0,Vs.has)(r,AEe))throw`The parent property is no longer supported. -See: https://github.com/chevrotain/chevrotain/issues/564#issuecomment-349062346 for details.`;return(0,Vs.has)(r,MY)&&(t.CATEGORIES=r[MY]),(0,Sv.augmentTokenTypes)([t]),(0,Vs.has)(r,KY)&&(t.LABEL=r[KY]),(0,Vs.has)(r,UY)&&(t.GROUP=r[UY]),(0,Vs.has)(r,GY)&&(t.POP_MODE=r[GY]),(0,Vs.has)(r,HY)&&(t.PUSH_MODE=r[HY]),(0,Vs.has)(r,YY)&&(t.LONGER_ALT=r[YY]),(0,Vs.has)(r,jY)&&(t.LINE_BREAKS=r[jY]),(0,Vs.has)(r,qY)&&(t.START_CHARS_HINT=r[qY]),t}Qi.EOF=WY({name:"EOF",pattern:sEe.Lexer.NA});(0,Sv.augmentTokenTypes)([Qi.EOF]);function cEe(r,e,t,i,n,s,o,a){return{image:e,startOffset:t,endOffset:i,startLine:n,endLine:s,startColumn:o,endColumn:a,tokenTypeIdx:r.tokenTypeIdx,tokenType:r}}Qi.createTokenInstance=cEe;function uEe(r,e){return(0,Sv.tokenStructuredMatcher)(r,e)}Qi.tokenMatcher=uEe});var dn=w(Wt=>{"use strict";var wa=Wt&&Wt.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(Wt,"__esModule",{value:!0});Wt.serializeProduction=Wt.serializeGrammar=Wt.Terminal=Wt.Alternation=Wt.RepetitionWithSeparator=Wt.Repetition=Wt.RepetitionMandatoryWithSeparator=Wt.RepetitionMandatory=Wt.Option=Wt.Alternative=Wt.Rule=Wt.NonTerminal=Wt.AbstractProduction=void 0;var Ar=Gt(),gEe=SA(),vo=function(){function r(e){this._definition=e}return Object.defineProperty(r.prototype,"definition",{get:function(){return this._definition},set:function(e){this._definition=e},enumerable:!1,configurable:!0}),r.prototype.accept=function(e){e.visit(this),(0,Ar.forEach)(this.definition,function(t){t.accept(e)})},r}();Wt.AbstractProduction=vo;var zY=function(r){wa(e,r);function e(t){var i=r.call(this,[])||this;return i.idx=1,(0,Ar.assign)(i,(0,Ar.pick)(t,function(n){return n!==void 0})),i}return Object.defineProperty(e.prototype,"definition",{get:function(){return this.referencedRule!==void 0?this.referencedRule.definition:[]},set:function(t){},enumerable:!1,configurable:!0}),e.prototype.accept=function(t){t.visit(this)},e}(vo);Wt.NonTerminal=zY;var VY=function(r){wa(e,r);function e(t){var i=r.call(this,t.definition)||this;return i.orgText="",(0,Ar.assign)(i,(0,Ar.pick)(t,function(n){return n!==void 0})),i}return e}(vo);Wt.Rule=VY;var XY=function(r){wa(e,r);function e(t){var i=r.call(this,t.definition)||this;return i.ignoreAmbiguities=!1,(0,Ar.assign)(i,(0,Ar.pick)(t,function(n){return n!==void 0})),i}return e}(vo);Wt.Alternative=XY;var _Y=function(r){wa(e,r);function e(t){var i=r.call(this,t.definition)||this;return i.idx=1,(0,Ar.assign)(i,(0,Ar.pick)(t,function(n){return n!==void 0})),i}return e}(vo);Wt.Option=_Y;var ZY=function(r){wa(e,r);function e(t){var i=r.call(this,t.definition)||this;return i.idx=1,(0,Ar.assign)(i,(0,Ar.pick)(t,function(n){return n!==void 0})),i}return e}(vo);Wt.RepetitionMandatory=ZY;var $Y=function(r){wa(e,r);function e(t){var i=r.call(this,t.definition)||this;return i.idx=1,(0,Ar.assign)(i,(0,Ar.pick)(t,function(n){return n!==void 0})),i}return e}(vo);Wt.RepetitionMandatoryWithSeparator=$Y;var ej=function(r){wa(e,r);function e(t){var i=r.call(this,t.definition)||this;return i.idx=1,(0,Ar.assign)(i,(0,Ar.pick)(t,function(n){return n!==void 0})),i}return e}(vo);Wt.Repetition=ej;var tj=function(r){wa(e,r);function e(t){var i=r.call(this,t.definition)||this;return i.idx=1,(0,Ar.assign)(i,(0,Ar.pick)(t,function(n){return n!==void 0})),i}return e}(vo);Wt.RepetitionWithSeparator=tj;var rj=function(r){wa(e,r);function e(t){var i=r.call(this,t.definition)||this;return i.idx=1,i.ignoreAmbiguities=!1,i.hasPredicates=!1,(0,Ar.assign)(i,(0,Ar.pick)(t,function(n){return n!==void 0})),i}return Object.defineProperty(e.prototype,"definition",{get:function(){return this._definition},set:function(t){this._definition=t},enumerable:!1,configurable:!0}),e}(vo);Wt.Alternation=rj;var WI=function(){function r(e){this.idx=1,(0,Ar.assign)(this,(0,Ar.pick)(e,function(t){return t!==void 0}))}return r.prototype.accept=function(e){e.visit(this)},r}();Wt.Terminal=WI;function fEe(r){return(0,Ar.map)(r,hd)}Wt.serializeGrammar=fEe;function hd(r){function e(s){return(0,Ar.map)(s,hd)}if(r instanceof zY){var t={type:"NonTerminal",name:r.nonTerminalName,idx:r.idx};return(0,Ar.isString)(r.label)&&(t.label=r.label),t}else{if(r instanceof XY)return{type:"Alternative",definition:e(r.definition)};if(r instanceof _Y)return{type:"Option",idx:r.idx,definition:e(r.definition)};if(r instanceof ZY)return{type:"RepetitionMandatory",idx:r.idx,definition:e(r.definition)};if(r instanceof $Y)return{type:"RepetitionMandatoryWithSeparator",idx:r.idx,separator:hd(new WI({terminalType:r.separator})),definition:e(r.definition)};if(r instanceof tj)return{type:"RepetitionWithSeparator",idx:r.idx,separator:hd(new WI({terminalType:r.separator})),definition:e(r.definition)};if(r instanceof ej)return{type:"Repetition",idx:r.idx,definition:e(r.definition)};if(r instanceof rj)return{type:"Alternation",idx:r.idx,definition:e(r.definition)};if(r instanceof WI){var i={type:"Terminal",name:r.terminalType.name,label:(0,gEe.tokenLabel)(r.terminalType),idx:r.idx};(0,Ar.isString)(r.label)&&(i.terminalLabel=r.label);var n=r.terminalType.PATTERN;return r.terminalType.PATTERN&&(i.pattern=(0,Ar.isRegExp)(n)?n.source:n),i}else{if(r instanceof VY)return{type:"Rule",name:r.name,orgText:r.orgText,definition:e(r.definition)};throw Error("non exhaustive match")}}}Wt.serializeProduction=hd});var VI=w(zI=>{"use strict";Object.defineProperty(zI,"__esModule",{value:!0});zI.RestWalker=void 0;var vv=Gt(),Cn=dn(),hEe=function(){function r(){}return r.prototype.walk=function(e,t){var i=this;t===void 0&&(t=[]),(0,vv.forEach)(e.definition,function(n,s){var o=(0,vv.drop)(e.definition,s+1);if(n instanceof Cn.NonTerminal)i.walkProdRef(n,o,t);else if(n instanceof Cn.Terminal)i.walkTerminal(n,o,t);else if(n instanceof Cn.Alternative)i.walkFlat(n,o,t);else if(n instanceof Cn.Option)i.walkOption(n,o,t);else if(n instanceof Cn.RepetitionMandatory)i.walkAtLeastOne(n,o,t);else if(n instanceof Cn.RepetitionMandatoryWithSeparator)i.walkAtLeastOneSep(n,o,t);else if(n instanceof Cn.RepetitionWithSeparator)i.walkManySep(n,o,t);else if(n instanceof Cn.Repetition)i.walkMany(n,o,t);else if(n instanceof Cn.Alternation)i.walkOr(n,o,t);else throw Error("non exhaustive match")})},r.prototype.walkTerminal=function(e,t,i){},r.prototype.walkProdRef=function(e,t,i){},r.prototype.walkFlat=function(e,t,i){var n=t.concat(i);this.walk(e,n)},r.prototype.walkOption=function(e,t,i){var n=t.concat(i);this.walk(e,n)},r.prototype.walkAtLeastOne=function(e,t,i){var n=[new Cn.Option({definition:e.definition})].concat(t,i);this.walk(e,n)},r.prototype.walkAtLeastOneSep=function(e,t,i){var n=ij(e,t,i);this.walk(e,n)},r.prototype.walkMany=function(e,t,i){var n=[new Cn.Option({definition:e.definition})].concat(t,i);this.walk(e,n)},r.prototype.walkManySep=function(e,t,i){var n=ij(e,t,i);this.walk(e,n)},r.prototype.walkOr=function(e,t,i){var n=this,s=t.concat(i);(0,vv.forEach)(e.definition,function(o){var a=new Cn.Alternative({definition:[o]});n.walk(a,s)})},r}();zI.RestWalker=hEe;function ij(r,e,t){var i=[new Cn.Option({definition:[new Cn.Terminal({terminalType:r.separator})].concat(r.definition)})],n=i.concat(e,t);return n}});var Yg=w(XI=>{"use strict";Object.defineProperty(XI,"__esModule",{value:!0});XI.GAstVisitor=void 0;var xo=dn(),pEe=function(){function r(){}return r.prototype.visit=function(e){var t=e;switch(t.constructor){case xo.NonTerminal:return this.visitNonTerminal(t);case xo.Alternative:return this.visitAlternative(t);case xo.Option:return this.visitOption(t);case xo.RepetitionMandatory:return this.visitRepetitionMandatory(t);case xo.RepetitionMandatoryWithSeparator:return this.visitRepetitionMandatoryWithSeparator(t);case xo.RepetitionWithSeparator:return this.visitRepetitionWithSeparator(t);case xo.Repetition:return this.visitRepetition(t);case xo.Alternation:return this.visitAlternation(t);case xo.Terminal:return this.visitTerminal(t);case xo.Rule:return this.visitRule(t);default:throw Error("non exhaustive match")}},r.prototype.visitNonTerminal=function(e){},r.prototype.visitAlternative=function(e){},r.prototype.visitOption=function(e){},r.prototype.visitRepetition=function(e){},r.prototype.visitRepetitionMandatory=function(e){},r.prototype.visitRepetitionMandatoryWithSeparator=function(e){},r.prototype.visitRepetitionWithSeparator=function(e){},r.prototype.visitAlternation=function(e){},r.prototype.visitTerminal=function(e){},r.prototype.visitRule=function(e){},r}();XI.GAstVisitor=pEe});var dd=w(Oi=>{"use strict";var dEe=Oi&&Oi.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(Oi,"__esModule",{value:!0});Oi.collectMethods=Oi.DslMethodsCollectorVisitor=Oi.getProductionDslName=Oi.isBranchingProd=Oi.isOptionalProd=Oi.isSequenceProd=void 0;var pd=Gt(),Qr=dn(),CEe=Yg();function mEe(r){return r instanceof Qr.Alternative||r instanceof Qr.Option||r instanceof Qr.Repetition||r instanceof Qr.RepetitionMandatory||r instanceof Qr.RepetitionMandatoryWithSeparator||r instanceof Qr.RepetitionWithSeparator||r instanceof Qr.Terminal||r instanceof Qr.Rule}Oi.isSequenceProd=mEe;function xv(r,e){e===void 0&&(e=[]);var t=r instanceof Qr.Option||r instanceof Qr.Repetition||r instanceof Qr.RepetitionWithSeparator;return t?!0:r instanceof Qr.Alternation?(0,pd.some)(r.definition,function(i){return xv(i,e)}):r instanceof Qr.NonTerminal&&(0,pd.contains)(e,r)?!1:r instanceof Qr.AbstractProduction?(r instanceof Qr.NonTerminal&&e.push(r),(0,pd.every)(r.definition,function(i){return xv(i,e)})):!1}Oi.isOptionalProd=xv;function EEe(r){return r instanceof Qr.Alternation}Oi.isBranchingProd=EEe;function IEe(r){if(r instanceof Qr.NonTerminal)return"SUBRULE";if(r instanceof Qr.Option)return"OPTION";if(r instanceof Qr.Alternation)return"OR";if(r instanceof Qr.RepetitionMandatory)return"AT_LEAST_ONE";if(r instanceof Qr.RepetitionMandatoryWithSeparator)return"AT_LEAST_ONE_SEP";if(r instanceof Qr.RepetitionWithSeparator)return"MANY_SEP";if(r instanceof Qr.Repetition)return"MANY";if(r instanceof Qr.Terminal)return"CONSUME";throw Error("non exhaustive match")}Oi.getProductionDslName=IEe;var nj=function(r){dEe(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.separator="-",t.dslMethods={option:[],alternation:[],repetition:[],repetitionWithSeparator:[],repetitionMandatory:[],repetitionMandatoryWithSeparator:[]},t}return e.prototype.reset=function(){this.dslMethods={option:[],alternation:[],repetition:[],repetitionWithSeparator:[],repetitionMandatory:[],repetitionMandatoryWithSeparator:[]}},e.prototype.visitTerminal=function(t){var i=t.terminalType.name+this.separator+"Terminal";(0,pd.has)(this.dslMethods,i)||(this.dslMethods[i]=[]),this.dslMethods[i].push(t)},e.prototype.visitNonTerminal=function(t){var i=t.nonTerminalName+this.separator+"Terminal";(0,pd.has)(this.dslMethods,i)||(this.dslMethods[i]=[]),this.dslMethods[i].push(t)},e.prototype.visitOption=function(t){this.dslMethods.option.push(t)},e.prototype.visitRepetitionWithSeparator=function(t){this.dslMethods.repetitionWithSeparator.push(t)},e.prototype.visitRepetitionMandatory=function(t){this.dslMethods.repetitionMandatory.push(t)},e.prototype.visitRepetitionMandatoryWithSeparator=function(t){this.dslMethods.repetitionMandatoryWithSeparator.push(t)},e.prototype.visitRepetition=function(t){this.dslMethods.repetition.push(t)},e.prototype.visitAlternation=function(t){this.dslMethods.alternation.push(t)},e}(CEe.GAstVisitor);Oi.DslMethodsCollectorVisitor=nj;var _I=new nj;function yEe(r){_I.reset(),r.accept(_I);var e=_I.dslMethods;return _I.reset(),e}Oi.collectMethods=yEe});var Dv=w(Po=>{"use strict";Object.defineProperty(Po,"__esModule",{value:!0});Po.firstForTerminal=Po.firstForBranching=Po.firstForSequence=Po.first=void 0;var ZI=Gt(),sj=dn(),Pv=dd();function $I(r){if(r instanceof sj.NonTerminal)return $I(r.referencedRule);if(r instanceof sj.Terminal)return Aj(r);if((0,Pv.isSequenceProd)(r))return oj(r);if((0,Pv.isBranchingProd)(r))return aj(r);throw Error("non exhaustive match")}Po.first=$I;function oj(r){for(var e=[],t=r.definition,i=0,n=t.length>i,s,o=!0;n&&o;)s=t[i],o=(0,Pv.isOptionalProd)(s),e=e.concat($I(s)),i=i+1,n=t.length>i;return(0,ZI.uniq)(e)}Po.firstForSequence=oj;function aj(r){var e=(0,ZI.map)(r.definition,function(t){return $I(t)});return(0,ZI.uniq)((0,ZI.flatten)(e))}Po.firstForBranching=aj;function Aj(r){return[r.terminalType]}Po.firstForTerminal=Aj});var kv=w(ey=>{"use strict";Object.defineProperty(ey,"__esModule",{value:!0});ey.IN=void 0;ey.IN="_~IN~_"});var fj=w(As=>{"use strict";var wEe=As&&As.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(As,"__esModule",{value:!0});As.buildInProdFollowPrefix=As.buildBetweenProdsFollowPrefix=As.computeAllProdsFollows=As.ResyncFollowsWalker=void 0;var BEe=VI(),QEe=Dv(),lj=Gt(),cj=kv(),bEe=dn(),uj=function(r){wEe(e,r);function e(t){var i=r.call(this)||this;return i.topProd=t,i.follows={},i}return e.prototype.startWalking=function(){return this.walk(this.topProd),this.follows},e.prototype.walkTerminal=function(t,i,n){},e.prototype.walkProdRef=function(t,i,n){var s=gj(t.referencedRule,t.idx)+this.topProd.name,o=i.concat(n),a=new bEe.Alternative({definition:o}),l=(0,QEe.first)(a);this.follows[s]=l},e}(BEe.RestWalker);As.ResyncFollowsWalker=uj;function SEe(r){var e={};return(0,lj.forEach)(r,function(t){var i=new uj(t).startWalking();(0,lj.assign)(e,i)}),e}As.computeAllProdsFollows=SEe;function gj(r,e){return r.name+e+cj.IN}As.buildBetweenProdsFollowPrefix=gj;function vEe(r){var e=r.terminalType.name;return e+r.idx+cj.IN}As.buildInProdFollowPrefix=vEe});var Cd=w(Ba=>{"use strict";Object.defineProperty(Ba,"__esModule",{value:!0});Ba.defaultGrammarValidatorErrorProvider=Ba.defaultGrammarResolverErrorProvider=Ba.defaultParserErrorProvider=void 0;var jg=SA(),xEe=Gt(),Xs=Gt(),Rv=dn(),hj=dd();Ba.defaultParserErrorProvider={buildMismatchTokenMessage:function(r){var e=r.expected,t=r.actual,i=r.previous,n=r.ruleName,s=(0,jg.hasTokenLabel)(e),o=s?"--> "+(0,jg.tokenLabel)(e)+" <--":"token of type --> "+e.name+" <--",a="Expecting "+o+" but found --> '"+t.image+"' <--";return a},buildNotAllInputParsedMessage:function(r){var e=r.firstRedundant,t=r.ruleName;return"Redundant input, expecting EOF but found: "+e.image},buildNoViableAltMessage:function(r){var e=r.expectedPathsPerAlt,t=r.actual,i=r.previous,n=r.customUserDescription,s=r.ruleName,o="Expecting: ",a=(0,Xs.first)(t).image,l=` -but found: '`+a+"'";if(n)return o+n+l;var c=(0,Xs.reduce)(e,function(h,p){return h.concat(p)},[]),u=(0,Xs.map)(c,function(h){return"["+(0,Xs.map)(h,function(p){return(0,jg.tokenLabel)(p)}).join(", ")+"]"}),g=(0,Xs.map)(u,function(h,p){return" "+(p+1)+". "+h}),f=`one of these possible Token sequences: -`+g.join(` -`);return o+f+l},buildEarlyExitMessage:function(r){var e=r.expectedIterationPaths,t=r.actual,i=r.customUserDescription,n=r.ruleName,s="Expecting: ",o=(0,Xs.first)(t).image,a=` -but found: '`+o+"'";if(i)return s+i+a;var l=(0,Xs.map)(e,function(u){return"["+(0,Xs.map)(u,function(g){return(0,jg.tokenLabel)(g)}).join(",")+"]"}),c=`expecting at least one iteration which starts with one of these possible Token sequences:: - `+("<"+l.join(" ,")+">");return s+c+a}};Object.freeze(Ba.defaultParserErrorProvider);Ba.defaultGrammarResolverErrorProvider={buildRuleNotFoundError:function(r,e){var t="Invalid grammar, reference to a rule which is not defined: ->"+e.nonTerminalName+`<- -inside top level rule: ->`+r.name+"<-";return t}};Ba.defaultGrammarValidatorErrorProvider={buildDuplicateFoundError:function(r,e){function t(u){return u instanceof Rv.Terminal?u.terminalType.name:u instanceof Rv.NonTerminal?u.nonTerminalName:""}var i=r.name,n=(0,Xs.first)(e),s=n.idx,o=(0,hj.getProductionDslName)(n),a=t(n),l=s>0,c="->"+o+(l?s:"")+"<- "+(a?"with argument: ->"+a+"<-":"")+` - appears more than once (`+e.length+" times) in the top level rule: ->"+i+`<-. - For further details see: https://chevrotain.io/docs/FAQ.html#NUMERICAL_SUFFIXES - `;return c=c.replace(/[ \t]+/g," "),c=c.replace(/\s\s+/g,` -`),c},buildNamespaceConflictError:function(r){var e=`Namespace conflict found in grammar. -`+("The grammar has both a Terminal(Token) and a Non-Terminal(Rule) named: <"+r.name+`>. -`)+`To resolve this make sure each Terminal and Non-Terminal names are unique -This is easy to accomplish by using the convention that Terminal names start with an uppercase letter -and Non-Terminal names start with a lower case letter.`;return e},buildAlternationPrefixAmbiguityError:function(r){var e=(0,Xs.map)(r.prefixPath,function(n){return(0,jg.tokenLabel)(n)}).join(", "),t=r.alternation.idx===0?"":r.alternation.idx,i="Ambiguous alternatives: <"+r.ambiguityIndices.join(" ,")+`> due to common lookahead prefix -`+("in inside <"+r.topLevelRule.name+`> Rule, -`)+("<"+e+`> may appears as a prefix path in all these alternatives. -`)+`See: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#COMMON_PREFIX -For Further details.`;return i},buildAlternationAmbiguityError:function(r){var e=(0,Xs.map)(r.prefixPath,function(n){return(0,jg.tokenLabel)(n)}).join(", "),t=r.alternation.idx===0?"":r.alternation.idx,i="Ambiguous Alternatives Detected: <"+r.ambiguityIndices.join(" ,")+"> in "+(" inside <"+r.topLevelRule.name+`> Rule, -`)+("<"+e+`> may appears as a prefix path in all these alternatives. -`);return i=i+`See: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#AMBIGUOUS_ALTERNATIVES -For Further details.`,i},buildEmptyRepetitionError:function(r){var e=(0,hj.getProductionDslName)(r.repetition);r.repetition.idx!==0&&(e+=r.repetition.idx);var t="The repetition <"+e+"> within Rule <"+r.topLevelRule.name+`> can never consume any tokens. -This could lead to an infinite loop.`;return t},buildTokenNameError:function(r){return"deprecated"},buildEmptyAlternationError:function(r){var e="Ambiguous empty alternative: <"+(r.emptyChoiceIdx+1)+">"+(" in inside <"+r.topLevelRule.name+`> Rule. -`)+"Only the last alternative may be an empty alternative.";return e},buildTooManyAlternativesError:function(r){var e=`An Alternation cannot have more than 256 alternatives: -`+(" inside <"+r.topLevelRule.name+`> Rule. - has `+(r.alternation.definition.length+1)+" alternatives.");return e},buildLeftRecursionError:function(r){var e=r.topLevelRule.name,t=xEe.map(r.leftRecursionPath,function(s){return s.name}),i=e+" --> "+t.concat([e]).join(" --> "),n=`Left Recursion found in grammar. -`+("rule: <"+e+`> can be invoked from itself (directly or indirectly) -`)+(`without consuming any Tokens. The grammar path that causes this is: - `+i+` -`)+` To fix this refactor your grammar to remove the left recursion. -see: https://en.wikipedia.org/wiki/LL_parser#Left_Factoring.`;return n},buildInvalidRuleNameError:function(r){return"deprecated"},buildDuplicateRuleNameError:function(r){var e;r.topLevelRule instanceof Rv.Rule?e=r.topLevelRule.name:e=r.topLevelRule;var t="Duplicate definition, rule: ->"+e+"<- is already defined in the grammar: ->"+r.grammarName+"<-";return t}}});var Cj=w(vA=>{"use strict";var PEe=vA&&vA.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(vA,"__esModule",{value:!0});vA.GastRefResolverVisitor=vA.resolveGrammar=void 0;var DEe=Hn(),pj=Gt(),kEe=Yg();function REe(r,e){var t=new dj(r,e);return t.resolveRefs(),t.errors}vA.resolveGrammar=REe;var dj=function(r){PEe(e,r);function e(t,i){var n=r.call(this)||this;return n.nameToTopRule=t,n.errMsgProvider=i,n.errors=[],n}return e.prototype.resolveRefs=function(){var t=this;(0,pj.forEach)((0,pj.values)(this.nameToTopRule),function(i){t.currTopLevel=i,i.accept(t)})},e.prototype.visitNonTerminal=function(t){var i=this.nameToTopRule[t.nonTerminalName];if(i)t.referencedRule=i;else{var n=this.errMsgProvider.buildRuleNotFoundError(this.currTopLevel,t);this.errors.push({message:n,type:DEe.ParserDefinitionErrorType.UNRESOLVED_SUBRULE_REF,ruleName:this.currTopLevel.name,unresolvedRefName:t.nonTerminalName})}},e}(kEe.GAstVisitor);vA.GastRefResolverVisitor=dj});var Ed=w(Nr=>{"use strict";var sc=Nr&&Nr.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(Nr,"__esModule",{value:!0});Nr.nextPossibleTokensAfter=Nr.possiblePathsFrom=Nr.NextTerminalAfterAtLeastOneSepWalker=Nr.NextTerminalAfterAtLeastOneWalker=Nr.NextTerminalAfterManySepWalker=Nr.NextTerminalAfterManyWalker=Nr.AbstractNextTerminalAfterProductionWalker=Nr.NextAfterTokenWalker=Nr.AbstractNextPossibleTokensWalker=void 0;var mj=VI(),Kt=Gt(),FEe=Dv(),kt=dn(),Ej=function(r){sc(e,r);function e(t,i){var n=r.call(this)||this;return n.topProd=t,n.path=i,n.possibleTokTypes=[],n.nextProductionName="",n.nextProductionOccurrence=0,n.found=!1,n.isAtEndOfPath=!1,n}return e.prototype.startWalking=function(){if(this.found=!1,this.path.ruleStack[0]!==this.topProd.name)throw Error("The path does not start with the walker's top Rule!");return this.ruleStack=(0,Kt.cloneArr)(this.path.ruleStack).reverse(),this.occurrenceStack=(0,Kt.cloneArr)(this.path.occurrenceStack).reverse(),this.ruleStack.pop(),this.occurrenceStack.pop(),this.updateExpectedNext(),this.walk(this.topProd),this.possibleTokTypes},e.prototype.walk=function(t,i){i===void 0&&(i=[]),this.found||r.prototype.walk.call(this,t,i)},e.prototype.walkProdRef=function(t,i,n){if(t.referencedRule.name===this.nextProductionName&&t.idx===this.nextProductionOccurrence){var s=i.concat(n);this.updateExpectedNext(),this.walk(t.referencedRule,s)}},e.prototype.updateExpectedNext=function(){(0,Kt.isEmpty)(this.ruleStack)?(this.nextProductionName="",this.nextProductionOccurrence=0,this.isAtEndOfPath=!0):(this.nextProductionName=this.ruleStack.pop(),this.nextProductionOccurrence=this.occurrenceStack.pop())},e}(mj.RestWalker);Nr.AbstractNextPossibleTokensWalker=Ej;var NEe=function(r){sc(e,r);function e(t,i){var n=r.call(this,t,i)||this;return n.path=i,n.nextTerminalName="",n.nextTerminalOccurrence=0,n.nextTerminalName=n.path.lastTok.name,n.nextTerminalOccurrence=n.path.lastTokOccurrence,n}return e.prototype.walkTerminal=function(t,i,n){if(this.isAtEndOfPath&&t.terminalType.name===this.nextTerminalName&&t.idx===this.nextTerminalOccurrence&&!this.found){var s=i.concat(n),o=new kt.Alternative({definition:s});this.possibleTokTypes=(0,FEe.first)(o),this.found=!0}},e}(Ej);Nr.NextAfterTokenWalker=NEe;var md=function(r){sc(e,r);function e(t,i){var n=r.call(this)||this;return n.topRule=t,n.occurrence=i,n.result={token:void 0,occurrence:void 0,isEndOfRule:void 0},n}return e.prototype.startWalking=function(){return this.walk(this.topRule),this.result},e}(mj.RestWalker);Nr.AbstractNextTerminalAfterProductionWalker=md;var LEe=function(r){sc(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.walkMany=function(t,i,n){if(t.idx===this.occurrence){var s=(0,Kt.first)(i.concat(n));this.result.isEndOfRule=s===void 0,s instanceof kt.Terminal&&(this.result.token=s.terminalType,this.result.occurrence=s.idx)}else r.prototype.walkMany.call(this,t,i,n)},e}(md);Nr.NextTerminalAfterManyWalker=LEe;var TEe=function(r){sc(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.walkManySep=function(t,i,n){if(t.idx===this.occurrence){var s=(0,Kt.first)(i.concat(n));this.result.isEndOfRule=s===void 0,s instanceof kt.Terminal&&(this.result.token=s.terminalType,this.result.occurrence=s.idx)}else r.prototype.walkManySep.call(this,t,i,n)},e}(md);Nr.NextTerminalAfterManySepWalker=TEe;var OEe=function(r){sc(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.walkAtLeastOne=function(t,i,n){if(t.idx===this.occurrence){var s=(0,Kt.first)(i.concat(n));this.result.isEndOfRule=s===void 0,s instanceof kt.Terminal&&(this.result.token=s.terminalType,this.result.occurrence=s.idx)}else r.prototype.walkAtLeastOne.call(this,t,i,n)},e}(md);Nr.NextTerminalAfterAtLeastOneWalker=OEe;var MEe=function(r){sc(e,r);function e(){return r!==null&&r.apply(this,arguments)||this}return e.prototype.walkAtLeastOneSep=function(t,i,n){if(t.idx===this.occurrence){var s=(0,Kt.first)(i.concat(n));this.result.isEndOfRule=s===void 0,s instanceof kt.Terminal&&(this.result.token=s.terminalType,this.result.occurrence=s.idx)}else r.prototype.walkAtLeastOneSep.call(this,t,i,n)},e}(md);Nr.NextTerminalAfterAtLeastOneSepWalker=MEe;function Ij(r,e,t){t===void 0&&(t=[]),t=(0,Kt.cloneArr)(t);var i=[],n=0;function s(c){return c.concat((0,Kt.drop)(r,n+1))}function o(c){var u=Ij(s(c),e,t);return i.concat(u)}for(;t.length=0;ge--){var re=B.definition[ge],O={idx:p,def:re.definition.concat((0,Kt.drop)(h)),ruleStack:C,occurrenceStack:y};g.push(O),g.push(o)}else if(B instanceof kt.Alternative)g.push({idx:p,def:B.definition.concat((0,Kt.drop)(h)),ruleStack:C,occurrenceStack:y});else if(B instanceof kt.Rule)g.push(UEe(B,p,C,y));else throw Error("non exhaustive match")}}return u}Nr.nextPossibleTokensAfter=KEe;function UEe(r,e,t,i){var n=(0,Kt.cloneArr)(t);n.push(r.name);var s=(0,Kt.cloneArr)(i);return s.push(1),{idx:e,def:r.definition,ruleStack:n,occurrenceStack:s}}});var Id=w(_t=>{"use strict";var Bj=_t&&_t.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(_t,"__esModule",{value:!0});_t.areTokenCategoriesNotUsed=_t.isStrictPrefixOfPath=_t.containsPath=_t.getLookaheadPathsForOptionalProd=_t.getLookaheadPathsForOr=_t.lookAheadSequenceFromAlternatives=_t.buildSingleAlternativeLookaheadFunction=_t.buildAlternativesLookAheadFunc=_t.buildLookaheadFuncForOptionalProd=_t.buildLookaheadFuncForOr=_t.getProdType=_t.PROD_TYPE=void 0;var sr=Gt(),yj=Ed(),HEe=VI(),ty=Gg(),xA=dn(),GEe=Yg(),oi;(function(r){r[r.OPTION=0]="OPTION",r[r.REPETITION=1]="REPETITION",r[r.REPETITION_MANDATORY=2]="REPETITION_MANDATORY",r[r.REPETITION_MANDATORY_WITH_SEPARATOR=3]="REPETITION_MANDATORY_WITH_SEPARATOR",r[r.REPETITION_WITH_SEPARATOR=4]="REPETITION_WITH_SEPARATOR",r[r.ALTERNATION=5]="ALTERNATION"})(oi=_t.PROD_TYPE||(_t.PROD_TYPE={}));function YEe(r){if(r instanceof xA.Option)return oi.OPTION;if(r instanceof xA.Repetition)return oi.REPETITION;if(r instanceof xA.RepetitionMandatory)return oi.REPETITION_MANDATORY;if(r instanceof xA.RepetitionMandatoryWithSeparator)return oi.REPETITION_MANDATORY_WITH_SEPARATOR;if(r instanceof xA.RepetitionWithSeparator)return oi.REPETITION_WITH_SEPARATOR;if(r instanceof xA.Alternation)return oi.ALTERNATION;throw Error("non exhaustive match")}_t.getProdType=YEe;function jEe(r,e,t,i,n,s){var o=bj(r,e,t),a=Lv(o)?ty.tokenStructuredMatcherNoCategories:ty.tokenStructuredMatcher;return s(o,i,a,n)}_t.buildLookaheadFuncForOr=jEe;function qEe(r,e,t,i,n,s){var o=Sj(r,e,n,t),a=Lv(o)?ty.tokenStructuredMatcherNoCategories:ty.tokenStructuredMatcher;return s(o[0],a,i)}_t.buildLookaheadFuncForOptionalProd=qEe;function JEe(r,e,t,i){var n=r.length,s=(0,sr.every)(r,function(l){return(0,sr.every)(l,function(c){return c.length===1})});if(e)return function(l){for(var c=(0,sr.map)(l,function(D){return D.GATE}),u=0;u{"use strict";var Tv=zt&&zt.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(zt,"__esModule",{value:!0});zt.checkPrefixAlternativesAmbiguities=zt.validateSomeNonEmptyLookaheadPath=zt.validateTooManyAlts=zt.RepetionCollector=zt.validateAmbiguousAlternationAlternatives=zt.validateEmptyOrAlternative=zt.getFirstNoneTerminal=zt.validateNoLeftRecursion=zt.validateRuleIsOverridden=zt.validateRuleDoesNotAlreadyExist=zt.OccurrenceValidationCollector=zt.identifyProductionForDuplicates=zt.validateGrammar=void 0;var er=Gt(),br=Gt(),Do=Hn(),Ov=dd(),qg=Id(),_Ee=Ed(),_s=dn(),Mv=Yg();function ZEe(r,e,t,i,n){var s=er.map(r,function(h){return $Ee(h,i)}),o=er.map(r,function(h){return Kv(h,h,i)}),a=[],l=[],c=[];(0,br.every)(o,br.isEmpty)&&(a=(0,br.map)(r,function(h){return Rj(h,i)}),l=(0,br.map)(r,function(h){return Fj(h,e,i)}),c=Tj(r,e,i));var u=rIe(r,t,i),g=(0,br.map)(r,function(h){return Lj(h,i)}),f=(0,br.map)(r,function(h){return kj(h,r,n,i)});return er.flatten(s.concat(c,o,a,l,u,g,f))}zt.validateGrammar=ZEe;function $Ee(r,e){var t=new Dj;r.accept(t);var i=t.allProductions,n=er.groupBy(i,xj),s=er.pick(n,function(a){return a.length>1}),o=er.map(er.values(s),function(a){var l=er.first(a),c=e.buildDuplicateFoundError(r,a),u=(0,Ov.getProductionDslName)(l),g={message:c,type:Do.ParserDefinitionErrorType.DUPLICATE_PRODUCTIONS,ruleName:r.name,dslName:u,occurrence:l.idx},f=Pj(l);return f&&(g.parameter=f),g});return o}function xj(r){return(0,Ov.getProductionDslName)(r)+"_#_"+r.idx+"_#_"+Pj(r)}zt.identifyProductionForDuplicates=xj;function Pj(r){return r instanceof _s.Terminal?r.terminalType.name:r instanceof _s.NonTerminal?r.nonTerminalName:""}var Dj=function(r){Tv(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.allProductions=[],t}return e.prototype.visitNonTerminal=function(t){this.allProductions.push(t)},e.prototype.visitOption=function(t){this.allProductions.push(t)},e.prototype.visitRepetitionWithSeparator=function(t){this.allProductions.push(t)},e.prototype.visitRepetitionMandatory=function(t){this.allProductions.push(t)},e.prototype.visitRepetitionMandatoryWithSeparator=function(t){this.allProductions.push(t)},e.prototype.visitRepetition=function(t){this.allProductions.push(t)},e.prototype.visitAlternation=function(t){this.allProductions.push(t)},e.prototype.visitTerminal=function(t){this.allProductions.push(t)},e}(Mv.GAstVisitor);zt.OccurrenceValidationCollector=Dj;function kj(r,e,t,i){var n=[],s=(0,br.reduce)(e,function(a,l){return l.name===r.name?a+1:a},0);if(s>1){var o=i.buildDuplicateRuleNameError({topLevelRule:r,grammarName:t});n.push({message:o,type:Do.ParserDefinitionErrorType.DUPLICATE_RULE_NAME,ruleName:r.name})}return n}zt.validateRuleDoesNotAlreadyExist=kj;function eIe(r,e,t){var i=[],n;return er.contains(e,r)||(n="Invalid rule override, rule: ->"+r+"<- cannot be overridden in the grammar: ->"+t+"<-as it is not defined in any of the super grammars ",i.push({message:n,type:Do.ParserDefinitionErrorType.INVALID_RULE_OVERRIDE,ruleName:r})),i}zt.validateRuleIsOverridden=eIe;function Kv(r,e,t,i){i===void 0&&(i=[]);var n=[],s=yd(e.definition);if(er.isEmpty(s))return[];var o=r.name,a=er.contains(s,r);a&&n.push({message:t.buildLeftRecursionError({topLevelRule:r,leftRecursionPath:i}),type:Do.ParserDefinitionErrorType.LEFT_RECURSION,ruleName:o});var l=er.difference(s,i.concat([r])),c=er.map(l,function(u){var g=er.cloneArr(i);return g.push(u),Kv(r,u,t,g)});return n.concat(er.flatten(c))}zt.validateNoLeftRecursion=Kv;function yd(r){var e=[];if(er.isEmpty(r))return e;var t=er.first(r);if(t instanceof _s.NonTerminal)e.push(t.referencedRule);else if(t instanceof _s.Alternative||t instanceof _s.Option||t instanceof _s.RepetitionMandatory||t instanceof _s.RepetitionMandatoryWithSeparator||t instanceof _s.RepetitionWithSeparator||t instanceof _s.Repetition)e=e.concat(yd(t.definition));else if(t instanceof _s.Alternation)e=er.flatten(er.map(t.definition,function(o){return yd(o.definition)}));else if(!(t instanceof _s.Terminal))throw Error("non exhaustive match");var i=(0,Ov.isOptionalProd)(t),n=r.length>1;if(i&&n){var s=er.drop(r);return e.concat(yd(s))}else return e}zt.getFirstNoneTerminal=yd;var Uv=function(r){Tv(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.alternations=[],t}return e.prototype.visitAlternation=function(t){this.alternations.push(t)},e}(Mv.GAstVisitor);function Rj(r,e){var t=new Uv;r.accept(t);var i=t.alternations,n=er.reduce(i,function(s,o){var a=er.dropRight(o.definition),l=er.map(a,function(c,u){var g=(0,_Ee.nextPossibleTokensAfter)([c],[],null,1);return er.isEmpty(g)?{message:e.buildEmptyAlternationError({topLevelRule:r,alternation:o,emptyChoiceIdx:u}),type:Do.ParserDefinitionErrorType.NONE_LAST_EMPTY_ALT,ruleName:r.name,occurrence:o.idx,alternative:u+1}:null});return s.concat(er.compact(l))},[]);return n}zt.validateEmptyOrAlternative=Rj;function Fj(r,e,t){var i=new Uv;r.accept(i);var n=i.alternations;n=(0,br.reject)(n,function(o){return o.ignoreAmbiguities===!0});var s=er.reduce(n,function(o,a){var l=a.idx,c=a.maxLookahead||e,u=(0,qg.getLookaheadPathsForOr)(l,r,c,a),g=tIe(u,a,r,t),f=Oj(u,a,r,t);return o.concat(g,f)},[]);return s}zt.validateAmbiguousAlternationAlternatives=Fj;var Nj=function(r){Tv(e,r);function e(){var t=r!==null&&r.apply(this,arguments)||this;return t.allProductions=[],t}return e.prototype.visitRepetitionWithSeparator=function(t){this.allProductions.push(t)},e.prototype.visitRepetitionMandatory=function(t){this.allProductions.push(t)},e.prototype.visitRepetitionMandatoryWithSeparator=function(t){this.allProductions.push(t)},e.prototype.visitRepetition=function(t){this.allProductions.push(t)},e}(Mv.GAstVisitor);zt.RepetionCollector=Nj;function Lj(r,e){var t=new Uv;r.accept(t);var i=t.alternations,n=er.reduce(i,function(s,o){return o.definition.length>255&&s.push({message:e.buildTooManyAlternativesError({topLevelRule:r,alternation:o}),type:Do.ParserDefinitionErrorType.TOO_MANY_ALTS,ruleName:r.name,occurrence:o.idx}),s},[]);return n}zt.validateTooManyAlts=Lj;function Tj(r,e,t){var i=[];return(0,br.forEach)(r,function(n){var s=new Nj;n.accept(s);var o=s.allProductions;(0,br.forEach)(o,function(a){var l=(0,qg.getProdType)(a),c=a.maxLookahead||e,u=a.idx,g=(0,qg.getLookaheadPathsForOptionalProd)(u,n,l,c),f=g[0];if((0,br.isEmpty)((0,br.flatten)(f))){var h=t.buildEmptyRepetitionError({topLevelRule:n,repetition:a});i.push({message:h,type:Do.ParserDefinitionErrorType.NO_NON_EMPTY_LOOKAHEAD,ruleName:n.name})}})}),i}zt.validateSomeNonEmptyLookaheadPath=Tj;function tIe(r,e,t,i){var n=[],s=(0,br.reduce)(r,function(a,l,c){return e.definition[c].ignoreAmbiguities===!0||(0,br.forEach)(l,function(u){var g=[c];(0,br.forEach)(r,function(f,h){c!==h&&(0,qg.containsPath)(f,u)&&e.definition[h].ignoreAmbiguities!==!0&&g.push(h)}),g.length>1&&!(0,qg.containsPath)(n,u)&&(n.push(u),a.push({alts:g,path:u}))}),a},[]),o=er.map(s,function(a){var l=(0,br.map)(a.alts,function(u){return u+1}),c=i.buildAlternationAmbiguityError({topLevelRule:t,alternation:e,ambiguityIndices:l,prefixPath:a.path});return{message:c,type:Do.ParserDefinitionErrorType.AMBIGUOUS_ALTS,ruleName:t.name,occurrence:e.idx,alternatives:[a.alts]}});return o}function Oj(r,e,t,i){var n=[],s=(0,br.reduce)(r,function(o,a,l){var c=(0,br.map)(a,function(u){return{idx:l,path:u}});return o.concat(c)},[]);return(0,br.forEach)(s,function(o){var a=e.definition[o.idx];if(a.ignoreAmbiguities!==!0){var l=o.idx,c=o.path,u=(0,br.findAll)(s,function(f){return e.definition[f.idx].ignoreAmbiguities!==!0&&f.idx{"use strict";Object.defineProperty(Jg,"__esModule",{value:!0});Jg.validateGrammar=Jg.resolveGrammar=void 0;var Gv=Gt(),iIe=Cj(),nIe=Hv(),Mj=Cd();function sIe(r){r=(0,Gv.defaults)(r,{errMsgProvider:Mj.defaultGrammarResolverErrorProvider});var e={};return(0,Gv.forEach)(r.rules,function(t){e[t.name]=t}),(0,iIe.resolveGrammar)(e,r.errMsgProvider)}Jg.resolveGrammar=sIe;function oIe(r){return r=(0,Gv.defaults)(r,{errMsgProvider:Mj.defaultGrammarValidatorErrorProvider}),(0,nIe.validateGrammar)(r.rules,r.maxLookahead,r.tokenTypes,r.errMsgProvider,r.grammarName)}Jg.validateGrammar=oIe});var Wg=w(mn=>{"use strict";var wd=mn&&mn.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(mn,"__esModule",{value:!0});mn.EarlyExitException=mn.NotAllInputParsedException=mn.NoViableAltException=mn.MismatchedTokenException=mn.isRecognitionException=void 0;var aIe=Gt(),Uj="MismatchedTokenException",Hj="NoViableAltException",Gj="EarlyExitException",Yj="NotAllInputParsedException",jj=[Uj,Hj,Gj,Yj];Object.freeze(jj);function AIe(r){return(0,aIe.contains)(jj,r.name)}mn.isRecognitionException=AIe;var ry=function(r){wd(e,r);function e(t,i){var n=this.constructor,s=r.call(this,t)||this;return s.token=i,s.resyncedTokens=[],Object.setPrototypeOf(s,n.prototype),Error.captureStackTrace&&Error.captureStackTrace(s,s.constructor),s}return e}(Error),lIe=function(r){wd(e,r);function e(t,i,n){var s=r.call(this,t,i)||this;return s.previousToken=n,s.name=Uj,s}return e}(ry);mn.MismatchedTokenException=lIe;var cIe=function(r){wd(e,r);function e(t,i,n){var s=r.call(this,t,i)||this;return s.previousToken=n,s.name=Hj,s}return e}(ry);mn.NoViableAltException=cIe;var uIe=function(r){wd(e,r);function e(t,i){var n=r.call(this,t,i)||this;return n.name=Yj,n}return e}(ry);mn.NotAllInputParsedException=uIe;var gIe=function(r){wd(e,r);function e(t,i,n){var s=r.call(this,t,i)||this;return s.previousToken=n,s.name=Gj,s}return e}(ry);mn.EarlyExitException=gIe});var jv=w(Mi=>{"use strict";Object.defineProperty(Mi,"__esModule",{value:!0});Mi.attemptInRepetitionRecovery=Mi.Recoverable=Mi.InRuleRecoveryException=Mi.IN_RULE_RECOVERY_EXCEPTION=Mi.EOF_FOLLOW_KEY=void 0;var iy=SA(),ls=Gt(),fIe=Wg(),hIe=kv(),pIe=Hn();Mi.EOF_FOLLOW_KEY={};Mi.IN_RULE_RECOVERY_EXCEPTION="InRuleRecoveryException";function Yv(r){this.name=Mi.IN_RULE_RECOVERY_EXCEPTION,this.message=r}Mi.InRuleRecoveryException=Yv;Yv.prototype=Error.prototype;var dIe=function(){function r(){}return r.prototype.initRecoverable=function(e){this.firstAfterRepMap={},this.resyncFollows={},this.recoveryEnabled=(0,ls.has)(e,"recoveryEnabled")?e.recoveryEnabled:pIe.DEFAULT_PARSER_CONFIG.recoveryEnabled,this.recoveryEnabled&&(this.attemptInRepetitionRecovery=qj)},r.prototype.getTokenToInsert=function(e){var t=(0,iy.createTokenInstance)(e,"",NaN,NaN,NaN,NaN,NaN,NaN);return t.isInsertedInRecovery=!0,t},r.prototype.canTokenTypeBeInsertedInRecovery=function(e){return!0},r.prototype.tryInRepetitionRecovery=function(e,t,i,n){for(var s=this,o=this.findReSyncTokenType(),a=this.exportLexerState(),l=[],c=!1,u=this.LA(1),g=this.LA(1),f=function(){var h=s.LA(0),p=s.errorMessageProvider.buildMismatchTokenMessage({expected:n,actual:u,previous:h,ruleName:s.getCurrRuleFullName()}),C=new fIe.MismatchedTokenException(p,u,s.LA(0));C.resyncedTokens=(0,ls.dropRight)(l),s.SAVE_ERROR(C)};!c;)if(this.tokenMatcher(g,n)){f();return}else if(i.call(this)){f(),e.apply(this,t);return}else this.tokenMatcher(g,o)?c=!0:(g=this.SKIP_TOKEN(),this.addToResyncTokens(g,l));this.importLexerState(a)},r.prototype.shouldInRepetitionRecoveryBeTried=function(e,t,i){return!(i===!1||e===void 0||t===void 0||this.tokenMatcher(this.LA(1),e)||this.isBackTracking()||this.canPerformInRuleRecovery(e,this.getFollowsForInRuleRecovery(e,t)))},r.prototype.getFollowsForInRuleRecovery=function(e,t){var i=this.getCurrentGrammarPath(e,t),n=this.getNextPossibleTokenTypes(i);return n},r.prototype.tryInRuleRecovery=function(e,t){if(this.canRecoverWithSingleTokenInsertion(e,t)){var i=this.getTokenToInsert(e);return i}if(this.canRecoverWithSingleTokenDeletion(e)){var n=this.SKIP_TOKEN();return this.consumeToken(),n}throw new Yv("sad sad panda")},r.prototype.canPerformInRuleRecovery=function(e,t){return this.canRecoverWithSingleTokenInsertion(e,t)||this.canRecoverWithSingleTokenDeletion(e)},r.prototype.canRecoverWithSingleTokenInsertion=function(e,t){var i=this;if(!this.canTokenTypeBeInsertedInRecovery(e)||(0,ls.isEmpty)(t))return!1;var n=this.LA(1),s=(0,ls.find)(t,function(o){return i.tokenMatcher(n,o)})!==void 0;return s},r.prototype.canRecoverWithSingleTokenDeletion=function(e){var t=this.tokenMatcher(this.LA(2),e);return t},r.prototype.isInCurrentRuleReSyncSet=function(e){var t=this.getCurrFollowKey(),i=this.getFollowSetFromFollowKey(t);return(0,ls.contains)(i,e)},r.prototype.findReSyncTokenType=function(){for(var e=this.flattenFollowSet(),t=this.LA(1),i=2;;){var n=t.tokenType;if((0,ls.contains)(e,n))return n;t=this.LA(i),i++}},r.prototype.getCurrFollowKey=function(){if(this.RULE_STACK.length===1)return Mi.EOF_FOLLOW_KEY;var e=this.getLastExplicitRuleShortName(),t=this.getLastExplicitRuleOccurrenceIndex(),i=this.getPreviousExplicitRuleShortName();return{ruleName:this.shortRuleNameToFullName(e),idxInCallingRule:t,inRule:this.shortRuleNameToFullName(i)}},r.prototype.buildFullFollowKeyStack=function(){var e=this,t=this.RULE_STACK,i=this.RULE_OCCURRENCE_STACK;return(0,ls.map)(t,function(n,s){return s===0?Mi.EOF_FOLLOW_KEY:{ruleName:e.shortRuleNameToFullName(n),idxInCallingRule:i[s],inRule:e.shortRuleNameToFullName(t[s-1])}})},r.prototype.flattenFollowSet=function(){var e=this,t=(0,ls.map)(this.buildFullFollowKeyStack(),function(i){return e.getFollowSetFromFollowKey(i)});return(0,ls.flatten)(t)},r.prototype.getFollowSetFromFollowKey=function(e){if(e===Mi.EOF_FOLLOW_KEY)return[iy.EOF];var t=e.ruleName+e.idxInCallingRule+hIe.IN+e.inRule;return this.resyncFollows[t]},r.prototype.addToResyncTokens=function(e,t){return this.tokenMatcher(e,iy.EOF)||t.push(e),t},r.prototype.reSyncTo=function(e){for(var t=[],i=this.LA(1);this.tokenMatcher(i,e)===!1;)i=this.SKIP_TOKEN(),this.addToResyncTokens(i,t);return(0,ls.dropRight)(t)},r.prototype.attemptInRepetitionRecovery=function(e,t,i,n,s,o,a){},r.prototype.getCurrentGrammarPath=function(e,t){var i=this.getHumanReadableRuleStack(),n=(0,ls.cloneArr)(this.RULE_OCCURRENCE_STACK),s={ruleStack:i,occurrenceStack:n,lastTok:e,lastTokOccurrence:t};return s},r.prototype.getHumanReadableRuleStack=function(){var e=this;return(0,ls.map)(this.RULE_STACK,function(t){return e.shortRuleNameToFullName(t)})},r}();Mi.Recoverable=dIe;function qj(r,e,t,i,n,s,o){var a=this.getKeyForAutomaticLookahead(i,n),l=this.firstAfterRepMap[a];if(l===void 0){var c=this.getCurrRuleFullName(),u=this.getGAstProductions()[c],g=new s(u,n);l=g.startWalking(),this.firstAfterRepMap[a]=l}var f=l.token,h=l.occurrence,p=l.isEndOfRule;this.RULE_STACK.length===1&&p&&f===void 0&&(f=iy.EOF,h=1),this.shouldInRepetitionRecoveryBeTried(f,h,o)&&this.tryInRepetitionRecovery(r,e,t,f)}Mi.attemptInRepetitionRecovery=qj});var ny=w(qt=>{"use strict";Object.defineProperty(qt,"__esModule",{value:!0});qt.getKeyForAutomaticLookahead=qt.AT_LEAST_ONE_SEP_IDX=qt.MANY_SEP_IDX=qt.AT_LEAST_ONE_IDX=qt.MANY_IDX=qt.OPTION_IDX=qt.OR_IDX=qt.BITS_FOR_ALT_IDX=qt.BITS_FOR_RULE_IDX=qt.BITS_FOR_OCCURRENCE_IDX=qt.BITS_FOR_METHOD_TYPE=void 0;qt.BITS_FOR_METHOD_TYPE=4;qt.BITS_FOR_OCCURRENCE_IDX=8;qt.BITS_FOR_RULE_IDX=12;qt.BITS_FOR_ALT_IDX=8;qt.OR_IDX=1<{"use strict";Object.defineProperty(sy,"__esModule",{value:!0});sy.LooksAhead=void 0;var Qa=Id(),Zs=Gt(),Jj=Hn(),ba=ny(),oc=dd(),mIe=function(){function r(){}return r.prototype.initLooksAhead=function(e){this.dynamicTokensEnabled=(0,Zs.has)(e,"dynamicTokensEnabled")?e.dynamicTokensEnabled:Jj.DEFAULT_PARSER_CONFIG.dynamicTokensEnabled,this.maxLookahead=(0,Zs.has)(e,"maxLookahead")?e.maxLookahead:Jj.DEFAULT_PARSER_CONFIG.maxLookahead,this.lookAheadFuncsCache=(0,Zs.isES2015MapSupported)()?new Map:[],(0,Zs.isES2015MapSupported)()?(this.getLaFuncFromCache=this.getLaFuncFromMap,this.setLaFuncCache=this.setLaFuncCacheUsingMap):(this.getLaFuncFromCache=this.getLaFuncFromObj,this.setLaFuncCache=this.setLaFuncUsingObj)},r.prototype.preComputeLookaheadFunctions=function(e){var t=this;(0,Zs.forEach)(e,function(i){t.TRACE_INIT(i.name+" Rule Lookahead",function(){var n=(0,oc.collectMethods)(i),s=n.alternation,o=n.repetition,a=n.option,l=n.repetitionMandatory,c=n.repetitionMandatoryWithSeparator,u=n.repetitionWithSeparator;(0,Zs.forEach)(s,function(g){var f=g.idx===0?"":g.idx;t.TRACE_INIT(""+(0,oc.getProductionDslName)(g)+f,function(){var h=(0,Qa.buildLookaheadFuncForOr)(g.idx,i,g.maxLookahead||t.maxLookahead,g.hasPredicates,t.dynamicTokensEnabled,t.lookAheadBuilderForAlternatives),p=(0,ba.getKeyForAutomaticLookahead)(t.fullRuleNameToShort[i.name],ba.OR_IDX,g.idx);t.setLaFuncCache(p,h)})}),(0,Zs.forEach)(o,function(g){t.computeLookaheadFunc(i,g.idx,ba.MANY_IDX,Qa.PROD_TYPE.REPETITION,g.maxLookahead,(0,oc.getProductionDslName)(g))}),(0,Zs.forEach)(a,function(g){t.computeLookaheadFunc(i,g.idx,ba.OPTION_IDX,Qa.PROD_TYPE.OPTION,g.maxLookahead,(0,oc.getProductionDslName)(g))}),(0,Zs.forEach)(l,function(g){t.computeLookaheadFunc(i,g.idx,ba.AT_LEAST_ONE_IDX,Qa.PROD_TYPE.REPETITION_MANDATORY,g.maxLookahead,(0,oc.getProductionDslName)(g))}),(0,Zs.forEach)(c,function(g){t.computeLookaheadFunc(i,g.idx,ba.AT_LEAST_ONE_SEP_IDX,Qa.PROD_TYPE.REPETITION_MANDATORY_WITH_SEPARATOR,g.maxLookahead,(0,oc.getProductionDslName)(g))}),(0,Zs.forEach)(u,function(g){t.computeLookaheadFunc(i,g.idx,ba.MANY_SEP_IDX,Qa.PROD_TYPE.REPETITION_WITH_SEPARATOR,g.maxLookahead,(0,oc.getProductionDslName)(g))})})})},r.prototype.computeLookaheadFunc=function(e,t,i,n,s,o){var a=this;this.TRACE_INIT(""+o+(t===0?"":t),function(){var l=(0,Qa.buildLookaheadFuncForOptionalProd)(t,e,s||a.maxLookahead,a.dynamicTokensEnabled,n,a.lookAheadBuilderForOptional),c=(0,ba.getKeyForAutomaticLookahead)(a.fullRuleNameToShort[e.name],i,t);a.setLaFuncCache(c,l)})},r.prototype.lookAheadBuilderForOptional=function(e,t,i){return(0,Qa.buildSingleAlternativeLookaheadFunction)(e,t,i)},r.prototype.lookAheadBuilderForAlternatives=function(e,t,i,n){return(0,Qa.buildAlternativesLookAheadFunc)(e,t,i,n)},r.prototype.getKeyForAutomaticLookahead=function(e,t){var i=this.getLastExplicitRuleShortName();return(0,ba.getKeyForAutomaticLookahead)(i,e,t)},r.prototype.getLaFuncFromCache=function(e){},r.prototype.getLaFuncFromMap=function(e){return this.lookAheadFuncsCache.get(e)},r.prototype.getLaFuncFromObj=function(e){return this.lookAheadFuncsCache[e]},r.prototype.setLaFuncCache=function(e,t){},r.prototype.setLaFuncCacheUsingMap=function(e,t){this.lookAheadFuncsCache.set(e,t)},r.prototype.setLaFuncUsingObj=function(e,t){this.lookAheadFuncsCache[e]=t},r}();sy.LooksAhead=mIe});var zj=w(ko=>{"use strict";Object.defineProperty(ko,"__esModule",{value:!0});ko.addNoneTerminalToCst=ko.addTerminalToCst=ko.setNodeLocationFull=ko.setNodeLocationOnlyOffset=void 0;function EIe(r,e){isNaN(r.startOffset)===!0?(r.startOffset=e.startOffset,r.endOffset=e.endOffset):r.endOffset{"use strict";Object.defineProperty(PA,"__esModule",{value:!0});PA.defineNameProp=PA.functionName=PA.classNameFromInstance=void 0;var BIe=Gt();function QIe(r){return Xj(r.constructor)}PA.classNameFromInstance=QIe;var Vj="name";function Xj(r){var e=r.name;return e||"anonymous"}PA.functionName=Xj;function bIe(r,e){var t=Object.getOwnPropertyDescriptor(r,Vj);return(0,BIe.isUndefined)(t)||t.configurable?(Object.defineProperty(r,Vj,{enumerable:!1,configurable:!0,writable:!1,value:e}),!0):!1}PA.defineNameProp=bIe});var tq=w(bi=>{"use strict";Object.defineProperty(bi,"__esModule",{value:!0});bi.validateRedundantMethods=bi.validateMissingCstMethods=bi.validateVisitor=bi.CstVisitorDefinitionError=bi.createBaseVisitorConstructorWithDefaults=bi.createBaseSemanticVisitorConstructor=bi.defaultVisit=void 0;var cs=Gt(),Bd=qv();function _j(r,e){for(var t=(0,cs.keys)(r),i=t.length,n=0;n: - `+(""+s.join(` - -`).replace(/\n/g,` - `)))}}};return t.prototype=i,t.prototype.constructor=t,t._RULE_NAMES=e,t}bi.createBaseSemanticVisitorConstructor=SIe;function vIe(r,e,t){var i=function(){};(0,Bd.defineNameProp)(i,r+"BaseSemanticsWithDefaults");var n=Object.create(t.prototype);return(0,cs.forEach)(e,function(s){n[s]=_j}),i.prototype=n,i.prototype.constructor=i,i}bi.createBaseVisitorConstructorWithDefaults=vIe;var Jv;(function(r){r[r.REDUNDANT_METHOD=0]="REDUNDANT_METHOD",r[r.MISSING_METHOD=1]="MISSING_METHOD"})(Jv=bi.CstVisitorDefinitionError||(bi.CstVisitorDefinitionError={}));function Zj(r,e){var t=$j(r,e),i=eq(r,e);return t.concat(i)}bi.validateVisitor=Zj;function $j(r,e){var t=(0,cs.map)(e,function(i){if(!(0,cs.isFunction)(r[i]))return{msg:"Missing visitor method: <"+i+"> on "+(0,Bd.functionName)(r.constructor)+" CST Visitor.",type:Jv.MISSING_METHOD,methodName:i}});return(0,cs.compact)(t)}bi.validateMissingCstMethods=$j;var xIe=["constructor","visit","validateVisitor"];function eq(r,e){var t=[];for(var i in r)(0,cs.isFunction)(r[i])&&!(0,cs.contains)(xIe,i)&&!(0,cs.contains)(e,i)&&t.push({msg:"Redundant visitor method: <"+i+"> on "+(0,Bd.functionName)(r.constructor)+` CST Visitor -There is no Grammar Rule corresponding to this method's name. -`,type:Jv.REDUNDANT_METHOD,methodName:i});return t}bi.validateRedundantMethods=eq});var iq=w(oy=>{"use strict";Object.defineProperty(oy,"__esModule",{value:!0});oy.TreeBuilder=void 0;var zg=zj(),Zr=Gt(),rq=tq(),PIe=Hn(),DIe=function(){function r(){}return r.prototype.initTreeBuilder=function(e){if(this.CST_STACK=[],this.outputCst=e.outputCst,this.nodeLocationTracking=(0,Zr.has)(e,"nodeLocationTracking")?e.nodeLocationTracking:PIe.DEFAULT_PARSER_CONFIG.nodeLocationTracking,!this.outputCst)this.cstInvocationStateUpdate=Zr.NOOP,this.cstFinallyStateUpdate=Zr.NOOP,this.cstPostTerminal=Zr.NOOP,this.cstPostNonTerminal=Zr.NOOP,this.cstPostRule=Zr.NOOP;else if(/full/i.test(this.nodeLocationTracking))this.recoveryEnabled?(this.setNodeLocationFromToken=zg.setNodeLocationFull,this.setNodeLocationFromNode=zg.setNodeLocationFull,this.cstPostRule=Zr.NOOP,this.setInitialNodeLocation=this.setInitialNodeLocationFullRecovery):(this.setNodeLocationFromToken=Zr.NOOP,this.setNodeLocationFromNode=Zr.NOOP,this.cstPostRule=this.cstPostRuleFull,this.setInitialNodeLocation=this.setInitialNodeLocationFullRegular);else if(/onlyOffset/i.test(this.nodeLocationTracking))this.recoveryEnabled?(this.setNodeLocationFromToken=zg.setNodeLocationOnlyOffset,this.setNodeLocationFromNode=zg.setNodeLocationOnlyOffset,this.cstPostRule=Zr.NOOP,this.setInitialNodeLocation=this.setInitialNodeLocationOnlyOffsetRecovery):(this.setNodeLocationFromToken=Zr.NOOP,this.setNodeLocationFromNode=Zr.NOOP,this.cstPostRule=this.cstPostRuleOnlyOffset,this.setInitialNodeLocation=this.setInitialNodeLocationOnlyOffsetRegular);else if(/none/i.test(this.nodeLocationTracking))this.setNodeLocationFromToken=Zr.NOOP,this.setNodeLocationFromNode=Zr.NOOP,this.cstPostRule=Zr.NOOP,this.setInitialNodeLocation=Zr.NOOP;else throw Error('Invalid config option: "'+e.nodeLocationTracking+'"')},r.prototype.setInitialNodeLocationOnlyOffsetRecovery=function(e){e.location={startOffset:NaN,endOffset:NaN}},r.prototype.setInitialNodeLocationOnlyOffsetRegular=function(e){e.location={startOffset:this.LA(1).startOffset,endOffset:NaN}},r.prototype.setInitialNodeLocationFullRecovery=function(e){e.location={startOffset:NaN,startLine:NaN,startColumn:NaN,endOffset:NaN,endLine:NaN,endColumn:NaN}},r.prototype.setInitialNodeLocationFullRegular=function(e){var t=this.LA(1);e.location={startOffset:t.startOffset,startLine:t.startLine,startColumn:t.startColumn,endOffset:NaN,endLine:NaN,endColumn:NaN}},r.prototype.cstInvocationStateUpdate=function(e,t){var i={name:e,children:{}};this.setInitialNodeLocation(i),this.CST_STACK.push(i)},r.prototype.cstFinallyStateUpdate=function(){this.CST_STACK.pop()},r.prototype.cstPostRuleFull=function(e){var t=this.LA(0),i=e.location;i.startOffset<=t.startOffset?(i.endOffset=t.endOffset,i.endLine=t.endLine,i.endColumn=t.endColumn):(i.startOffset=NaN,i.startLine=NaN,i.startColumn=NaN)},r.prototype.cstPostRuleOnlyOffset=function(e){var t=this.LA(0),i=e.location;i.startOffset<=t.startOffset?i.endOffset=t.endOffset:i.startOffset=NaN},r.prototype.cstPostTerminal=function(e,t){var i=this.CST_STACK[this.CST_STACK.length-1];(0,zg.addTerminalToCst)(i,t,e),this.setNodeLocationFromToken(i.location,t)},r.prototype.cstPostNonTerminal=function(e,t){var i=this.CST_STACK[this.CST_STACK.length-1];(0,zg.addNoneTerminalToCst)(i,t,e),this.setNodeLocationFromNode(i.location,e.location)},r.prototype.getBaseCstVisitorConstructor=function(){if((0,Zr.isUndefined)(this.baseCstVisitorConstructor)){var e=(0,rq.createBaseSemanticVisitorConstructor)(this.className,(0,Zr.keys)(this.gastProductionsCache));return this.baseCstVisitorConstructor=e,e}return this.baseCstVisitorConstructor},r.prototype.getBaseCstVisitorConstructorWithDefaults=function(){if((0,Zr.isUndefined)(this.baseCstVisitorWithDefaultsConstructor)){var e=(0,rq.createBaseVisitorConstructorWithDefaults)(this.className,(0,Zr.keys)(this.gastProductionsCache),this.getBaseCstVisitorConstructor());return this.baseCstVisitorWithDefaultsConstructor=e,e}return this.baseCstVisitorWithDefaultsConstructor},r.prototype.getLastExplicitRuleShortName=function(){var e=this.RULE_STACK;return e[e.length-1]},r.prototype.getPreviousExplicitRuleShortName=function(){var e=this.RULE_STACK;return e[e.length-2]},r.prototype.getLastExplicitRuleOccurrenceIndex=function(){var e=this.RULE_OCCURRENCE_STACK;return e[e.length-1]},r}();oy.TreeBuilder=DIe});var sq=w(ay=>{"use strict";Object.defineProperty(ay,"__esModule",{value:!0});ay.LexerAdapter=void 0;var nq=Hn(),kIe=function(){function r(){}return r.prototype.initLexerAdapter=function(){this.tokVector=[],this.tokVectorLength=0,this.currIdx=-1},Object.defineProperty(r.prototype,"input",{get:function(){return this.tokVector},set:function(e){if(this.selfAnalysisDone!==!0)throw Error("Missing invocation at the end of the Parser's constructor.");this.reset(),this.tokVector=e,this.tokVectorLength=e.length},enumerable:!1,configurable:!0}),r.prototype.SKIP_TOKEN=function(){return this.currIdx<=this.tokVector.length-2?(this.consumeToken(),this.LA(1)):nq.END_OF_FILE},r.prototype.LA=function(e){var t=this.currIdx+e;return t<0||this.tokVectorLength<=t?nq.END_OF_FILE:this.tokVector[t]},r.prototype.consumeToken=function(){this.currIdx++},r.prototype.exportLexerState=function(){return this.currIdx},r.prototype.importLexerState=function(e){this.currIdx=e},r.prototype.resetLexerState=function(){this.currIdx=-1},r.prototype.moveToTerminatedState=function(){this.currIdx=this.tokVector.length-1},r.prototype.getLexerPosition=function(){return this.exportLexerState()},r}();ay.LexerAdapter=kIe});var aq=w(Ay=>{"use strict";Object.defineProperty(Ay,"__esModule",{value:!0});Ay.RecognizerApi=void 0;var oq=Gt(),RIe=Wg(),Wv=Hn(),FIe=Cd(),NIe=Hv(),LIe=dn(),TIe=function(){function r(){}return r.prototype.ACTION=function(e){return e.call(this)},r.prototype.consume=function(e,t,i){return this.consumeInternal(t,e,i)},r.prototype.subrule=function(e,t,i){return this.subruleInternal(t,e,i)},r.prototype.option=function(e,t){return this.optionInternal(t,e)},r.prototype.or=function(e,t){return this.orInternal(t,e)},r.prototype.many=function(e,t){return this.manyInternal(e,t)},r.prototype.atLeastOne=function(e,t){return this.atLeastOneInternal(e,t)},r.prototype.CONSUME=function(e,t){return this.consumeInternal(e,0,t)},r.prototype.CONSUME1=function(e,t){return this.consumeInternal(e,1,t)},r.prototype.CONSUME2=function(e,t){return this.consumeInternal(e,2,t)},r.prototype.CONSUME3=function(e,t){return this.consumeInternal(e,3,t)},r.prototype.CONSUME4=function(e,t){return this.consumeInternal(e,4,t)},r.prototype.CONSUME5=function(e,t){return this.consumeInternal(e,5,t)},r.prototype.CONSUME6=function(e,t){return this.consumeInternal(e,6,t)},r.prototype.CONSUME7=function(e,t){return this.consumeInternal(e,7,t)},r.prototype.CONSUME8=function(e,t){return this.consumeInternal(e,8,t)},r.prototype.CONSUME9=function(e,t){return this.consumeInternal(e,9,t)},r.prototype.SUBRULE=function(e,t){return this.subruleInternal(e,0,t)},r.prototype.SUBRULE1=function(e,t){return this.subruleInternal(e,1,t)},r.prototype.SUBRULE2=function(e,t){return this.subruleInternal(e,2,t)},r.prototype.SUBRULE3=function(e,t){return this.subruleInternal(e,3,t)},r.prototype.SUBRULE4=function(e,t){return this.subruleInternal(e,4,t)},r.prototype.SUBRULE5=function(e,t){return this.subruleInternal(e,5,t)},r.prototype.SUBRULE6=function(e,t){return this.subruleInternal(e,6,t)},r.prototype.SUBRULE7=function(e,t){return this.subruleInternal(e,7,t)},r.prototype.SUBRULE8=function(e,t){return this.subruleInternal(e,8,t)},r.prototype.SUBRULE9=function(e,t){return this.subruleInternal(e,9,t)},r.prototype.OPTION=function(e){return this.optionInternal(e,0)},r.prototype.OPTION1=function(e){return this.optionInternal(e,1)},r.prototype.OPTION2=function(e){return this.optionInternal(e,2)},r.prototype.OPTION3=function(e){return this.optionInternal(e,3)},r.prototype.OPTION4=function(e){return this.optionInternal(e,4)},r.prototype.OPTION5=function(e){return this.optionInternal(e,5)},r.prototype.OPTION6=function(e){return this.optionInternal(e,6)},r.prototype.OPTION7=function(e){return this.optionInternal(e,7)},r.prototype.OPTION8=function(e){return this.optionInternal(e,8)},r.prototype.OPTION9=function(e){return this.optionInternal(e,9)},r.prototype.OR=function(e){return this.orInternal(e,0)},r.prototype.OR1=function(e){return this.orInternal(e,1)},r.prototype.OR2=function(e){return this.orInternal(e,2)},r.prototype.OR3=function(e){return this.orInternal(e,3)},r.prototype.OR4=function(e){return this.orInternal(e,4)},r.prototype.OR5=function(e){return this.orInternal(e,5)},r.prototype.OR6=function(e){return this.orInternal(e,6)},r.prototype.OR7=function(e){return this.orInternal(e,7)},r.prototype.OR8=function(e){return this.orInternal(e,8)},r.prototype.OR9=function(e){return this.orInternal(e,9)},r.prototype.MANY=function(e){this.manyInternal(0,e)},r.prototype.MANY1=function(e){this.manyInternal(1,e)},r.prototype.MANY2=function(e){this.manyInternal(2,e)},r.prototype.MANY3=function(e){this.manyInternal(3,e)},r.prototype.MANY4=function(e){this.manyInternal(4,e)},r.prototype.MANY5=function(e){this.manyInternal(5,e)},r.prototype.MANY6=function(e){this.manyInternal(6,e)},r.prototype.MANY7=function(e){this.manyInternal(7,e)},r.prototype.MANY8=function(e){this.manyInternal(8,e)},r.prototype.MANY9=function(e){this.manyInternal(9,e)},r.prototype.MANY_SEP=function(e){this.manySepFirstInternal(0,e)},r.prototype.MANY_SEP1=function(e){this.manySepFirstInternal(1,e)},r.prototype.MANY_SEP2=function(e){this.manySepFirstInternal(2,e)},r.prototype.MANY_SEP3=function(e){this.manySepFirstInternal(3,e)},r.prototype.MANY_SEP4=function(e){this.manySepFirstInternal(4,e)},r.prototype.MANY_SEP5=function(e){this.manySepFirstInternal(5,e)},r.prototype.MANY_SEP6=function(e){this.manySepFirstInternal(6,e)},r.prototype.MANY_SEP7=function(e){this.manySepFirstInternal(7,e)},r.prototype.MANY_SEP8=function(e){this.manySepFirstInternal(8,e)},r.prototype.MANY_SEP9=function(e){this.manySepFirstInternal(9,e)},r.prototype.AT_LEAST_ONE=function(e){this.atLeastOneInternal(0,e)},r.prototype.AT_LEAST_ONE1=function(e){return this.atLeastOneInternal(1,e)},r.prototype.AT_LEAST_ONE2=function(e){this.atLeastOneInternal(2,e)},r.prototype.AT_LEAST_ONE3=function(e){this.atLeastOneInternal(3,e)},r.prototype.AT_LEAST_ONE4=function(e){this.atLeastOneInternal(4,e)},r.prototype.AT_LEAST_ONE5=function(e){this.atLeastOneInternal(5,e)},r.prototype.AT_LEAST_ONE6=function(e){this.atLeastOneInternal(6,e)},r.prototype.AT_LEAST_ONE7=function(e){this.atLeastOneInternal(7,e)},r.prototype.AT_LEAST_ONE8=function(e){this.atLeastOneInternal(8,e)},r.prototype.AT_LEAST_ONE9=function(e){this.atLeastOneInternal(9,e)},r.prototype.AT_LEAST_ONE_SEP=function(e){this.atLeastOneSepFirstInternal(0,e)},r.prototype.AT_LEAST_ONE_SEP1=function(e){this.atLeastOneSepFirstInternal(1,e)},r.prototype.AT_LEAST_ONE_SEP2=function(e){this.atLeastOneSepFirstInternal(2,e)},r.prototype.AT_LEAST_ONE_SEP3=function(e){this.atLeastOneSepFirstInternal(3,e)},r.prototype.AT_LEAST_ONE_SEP4=function(e){this.atLeastOneSepFirstInternal(4,e)},r.prototype.AT_LEAST_ONE_SEP5=function(e){this.atLeastOneSepFirstInternal(5,e)},r.prototype.AT_LEAST_ONE_SEP6=function(e){this.atLeastOneSepFirstInternal(6,e)},r.prototype.AT_LEAST_ONE_SEP7=function(e){this.atLeastOneSepFirstInternal(7,e)},r.prototype.AT_LEAST_ONE_SEP8=function(e){this.atLeastOneSepFirstInternal(8,e)},r.prototype.AT_LEAST_ONE_SEP9=function(e){this.atLeastOneSepFirstInternal(9,e)},r.prototype.RULE=function(e,t,i){if(i===void 0&&(i=Wv.DEFAULT_RULE_CONFIG),(0,oq.contains)(this.definedRulesNames,e)){var n=FIe.defaultGrammarValidatorErrorProvider.buildDuplicateRuleNameError({topLevelRule:e,grammarName:this.className}),s={message:n,type:Wv.ParserDefinitionErrorType.DUPLICATE_RULE_NAME,ruleName:e};this.definitionErrors.push(s)}this.definedRulesNames.push(e);var o=this.defineRule(e,t,i);return this[e]=o,o},r.prototype.OVERRIDE_RULE=function(e,t,i){i===void 0&&(i=Wv.DEFAULT_RULE_CONFIG);var n=[];n=n.concat((0,NIe.validateRuleIsOverridden)(e,this.definedRulesNames,this.className)),this.definitionErrors=this.definitionErrors.concat(n);var s=this.defineRule(e,t,i);return this[e]=s,s},r.prototype.BACKTRACK=function(e,t){return function(){this.isBackTrackingStack.push(1);var i=this.saveRecogState();try{return e.apply(this,t),!0}catch(n){if((0,RIe.isRecognitionException)(n))return!1;throw n}finally{this.reloadRecogState(i),this.isBackTrackingStack.pop()}}},r.prototype.getGAstProductions=function(){return this.gastProductionsCache},r.prototype.getSerializedGastProductions=function(){return(0,LIe.serializeGrammar)((0,oq.values)(this.gastProductionsCache))},r}();Ay.RecognizerApi=TIe});var uq=w(cy=>{"use strict";Object.defineProperty(cy,"__esModule",{value:!0});cy.RecognizerEngine=void 0;var Pr=Gt(),Gn=ny(),ly=Wg(),Aq=Id(),Vg=Ed(),lq=Hn(),OIe=jv(),cq=SA(),Qd=Gg(),MIe=qv(),KIe=function(){function r(){}return r.prototype.initRecognizerEngine=function(e,t){if(this.className=(0,MIe.classNameFromInstance)(this),this.shortRuleNameToFull={},this.fullRuleNameToShort={},this.ruleShortNameIdx=256,this.tokenMatcher=Qd.tokenStructuredMatcherNoCategories,this.definedRulesNames=[],this.tokensMap={},this.isBackTrackingStack=[],this.RULE_STACK=[],this.RULE_OCCURRENCE_STACK=[],this.gastProductionsCache={},(0,Pr.has)(t,"serializedGrammar"))throw Error(`The Parser's configuration can no longer contain a property. - See: https://chevrotain.io/docs/changes/BREAKING_CHANGES.html#_6-0-0 - For Further details.`);if((0,Pr.isArray)(e)){if((0,Pr.isEmpty)(e))throw Error(`A Token Vocabulary cannot be empty. - Note that the first argument for the parser constructor - is no longer a Token vector (since v4.0).`);if(typeof e[0].startOffset=="number")throw Error(`The Parser constructor no longer accepts a token vector as the first argument. - See: https://chevrotain.io/docs/changes/BREAKING_CHANGES.html#_4-0-0 - For Further details.`)}if((0,Pr.isArray)(e))this.tokensMap=(0,Pr.reduce)(e,function(o,a){return o[a.name]=a,o},{});else if((0,Pr.has)(e,"modes")&&(0,Pr.every)((0,Pr.flatten)((0,Pr.values)(e.modes)),Qd.isTokenType)){var i=(0,Pr.flatten)((0,Pr.values)(e.modes)),n=(0,Pr.uniq)(i);this.tokensMap=(0,Pr.reduce)(n,function(o,a){return o[a.name]=a,o},{})}else if((0,Pr.isObject)(e))this.tokensMap=(0,Pr.cloneObj)(e);else throw new Error(" argument must be An Array of Token constructors, A dictionary of Token constructors or an IMultiModeLexerDefinition");this.tokensMap.EOF=cq.EOF;var s=(0,Pr.every)((0,Pr.values)(e),function(o){return(0,Pr.isEmpty)(o.categoryMatches)});this.tokenMatcher=s?Qd.tokenStructuredMatcherNoCategories:Qd.tokenStructuredMatcher,(0,Qd.augmentTokenTypes)((0,Pr.values)(this.tokensMap))},r.prototype.defineRule=function(e,t,i){if(this.selfAnalysisDone)throw Error("Grammar rule <"+e+`> may not be defined after the 'performSelfAnalysis' method has been called' -Make sure that all grammar rule definitions are done before 'performSelfAnalysis' is called.`);var n=(0,Pr.has)(i,"resyncEnabled")?i.resyncEnabled:lq.DEFAULT_RULE_CONFIG.resyncEnabled,s=(0,Pr.has)(i,"recoveryValueFunc")?i.recoveryValueFunc:lq.DEFAULT_RULE_CONFIG.recoveryValueFunc,o=this.ruleShortNameIdx<t},r.prototype.orInternal=function(e,t){var i=this.getKeyForAutomaticLookahead(Gn.OR_IDX,t),n=(0,Pr.isArray)(e)?e:e.DEF,s=this.getLaFuncFromCache(i),o=s.call(this,n);if(o!==void 0){var a=n[o];return a.ALT.call(this)}this.raiseNoAltException(t,e.ERR_MSG)},r.prototype.ruleFinallyStateUpdate=function(){if(this.RULE_STACK.pop(),this.RULE_OCCURRENCE_STACK.pop(),this.cstFinallyStateUpdate(),this.RULE_STACK.length===0&&this.isAtEndOfInput()===!1){var e=this.LA(1),t=this.errorMessageProvider.buildNotAllInputParsedMessage({firstRedundant:e,ruleName:this.getCurrRuleFullName()});this.SAVE_ERROR(new ly.NotAllInputParsedException(t,e))}},r.prototype.subruleInternal=function(e,t,i){var n;try{var s=i!==void 0?i.ARGS:void 0;return n=e.call(this,t,s),this.cstPostNonTerminal(n,i!==void 0&&i.LABEL!==void 0?i.LABEL:e.ruleName),n}catch(o){this.subruleInternalError(o,i,e.ruleName)}},r.prototype.subruleInternalError=function(e,t,i){throw(0,ly.isRecognitionException)(e)&&e.partialCstResult!==void 0&&(this.cstPostNonTerminal(e.partialCstResult,t!==void 0&&t.LABEL!==void 0?t.LABEL:i),delete e.partialCstResult),e},r.prototype.consumeInternal=function(e,t,i){var n;try{var s=this.LA(1);this.tokenMatcher(s,e)===!0?(this.consumeToken(),n=s):this.consumeInternalError(e,s,i)}catch(o){n=this.consumeInternalRecovery(e,t,o)}return this.cstPostTerminal(i!==void 0&&i.LABEL!==void 0?i.LABEL:e.name,n),n},r.prototype.consumeInternalError=function(e,t,i){var n,s=this.LA(0);throw i!==void 0&&i.ERR_MSG?n=i.ERR_MSG:n=this.errorMessageProvider.buildMismatchTokenMessage({expected:e,actual:t,previous:s,ruleName:this.getCurrRuleFullName()}),this.SAVE_ERROR(new ly.MismatchedTokenException(n,t,s))},r.prototype.consumeInternalRecovery=function(e,t,i){if(this.recoveryEnabled&&i.name==="MismatchedTokenException"&&!this.isBackTracking()){var n=this.getFollowsForInRuleRecovery(e,t);try{return this.tryInRuleRecovery(e,n)}catch(s){throw s.name===OIe.IN_RULE_RECOVERY_EXCEPTION?i:s}}else throw i},r.prototype.saveRecogState=function(){var e=this.errors,t=(0,Pr.cloneArr)(this.RULE_STACK);return{errors:e,lexerState:this.exportLexerState(),RULE_STACK:t,CST_STACK:this.CST_STACK}},r.prototype.reloadRecogState=function(e){this.errors=e.errors,this.importLexerState(e.lexerState),this.RULE_STACK=e.RULE_STACK},r.prototype.ruleInvocationStateUpdate=function(e,t,i){this.RULE_OCCURRENCE_STACK.push(i),this.RULE_STACK.push(e),this.cstInvocationStateUpdate(t,e)},r.prototype.isBackTracking=function(){return this.isBackTrackingStack.length!==0},r.prototype.getCurrRuleFullName=function(){var e=this.getLastExplicitRuleShortName();return this.shortRuleNameToFull[e]},r.prototype.shortRuleNameToFullName=function(e){return this.shortRuleNameToFull[e]},r.prototype.isAtEndOfInput=function(){return this.tokenMatcher(this.LA(1),cq.EOF)},r.prototype.reset=function(){this.resetLexerState(),this.isBackTrackingStack=[],this.errors=[],this.RULE_STACK=[],this.CST_STACK=[],this.RULE_OCCURRENCE_STACK=[]},r}();cy.RecognizerEngine=KIe});var fq=w(uy=>{"use strict";Object.defineProperty(uy,"__esModule",{value:!0});uy.ErrorHandler=void 0;var zv=Wg(),Vv=Gt(),gq=Id(),UIe=Hn(),HIe=function(){function r(){}return r.prototype.initErrorHandler=function(e){this._errors=[],this.errorMessageProvider=(0,Vv.has)(e,"errorMessageProvider")?e.errorMessageProvider:UIe.DEFAULT_PARSER_CONFIG.errorMessageProvider},r.prototype.SAVE_ERROR=function(e){if((0,zv.isRecognitionException)(e))return e.context={ruleStack:this.getHumanReadableRuleStack(),ruleOccurrenceStack:(0,Vv.cloneArr)(this.RULE_OCCURRENCE_STACK)},this._errors.push(e),e;throw Error("Trying to save an Error which is not a RecognitionException")},Object.defineProperty(r.prototype,"errors",{get:function(){return(0,Vv.cloneArr)(this._errors)},set:function(e){this._errors=e},enumerable:!1,configurable:!0}),r.prototype.raiseEarlyExitException=function(e,t,i){for(var n=this.getCurrRuleFullName(),s=this.getGAstProductions()[n],o=(0,gq.getLookaheadPathsForOptionalProd)(e,s,t,this.maxLookahead),a=o[0],l=[],c=1;c<=this.maxLookahead;c++)l.push(this.LA(c));var u=this.errorMessageProvider.buildEarlyExitMessage({expectedIterationPaths:a,actual:l,previous:this.LA(0),customUserDescription:i,ruleName:n});throw this.SAVE_ERROR(new zv.EarlyExitException(u,this.LA(1),this.LA(0)))},r.prototype.raiseNoAltException=function(e,t){for(var i=this.getCurrRuleFullName(),n=this.getGAstProductions()[i],s=(0,gq.getLookaheadPathsForOr)(e,n,this.maxLookahead),o=[],a=1;a<=this.maxLookahead;a++)o.push(this.LA(a));var l=this.LA(0),c=this.errorMessageProvider.buildNoViableAltMessage({expectedPathsPerAlt:s,actual:o,previous:l,customUserDescription:t,ruleName:this.getCurrRuleFullName()});throw this.SAVE_ERROR(new zv.NoViableAltException(c,this.LA(1),l))},r}();uy.ErrorHandler=HIe});var dq=w(gy=>{"use strict";Object.defineProperty(gy,"__esModule",{value:!0});gy.ContentAssist=void 0;var hq=Ed(),pq=Gt(),GIe=function(){function r(){}return r.prototype.initContentAssist=function(){},r.prototype.computeContentAssist=function(e,t){var i=this.gastProductionsCache[e];if((0,pq.isUndefined)(i))throw Error("Rule ->"+e+"<- does not exist in this grammar.");return(0,hq.nextPossibleTokensAfter)([i],t,this.tokenMatcher,this.maxLookahead)},r.prototype.getNextPossibleTokenTypes=function(e){var t=(0,pq.first)(e.ruleStack),i=this.getGAstProductions(),n=i[t],s=new hq.NextAfterTokenWalker(n,e).startWalking();return s},r}();gy.ContentAssist=GIe});var Qq=w(py=>{"use strict";Object.defineProperty(py,"__esModule",{value:!0});py.GastRecorder=void 0;var En=Gt(),Ro=dn(),YIe=gd(),Iq=Gg(),yq=SA(),jIe=Hn(),qIe=ny(),hy={description:"This Object indicates the Parser is during Recording Phase"};Object.freeze(hy);var Cq=!0,mq=Math.pow(2,qIe.BITS_FOR_OCCURRENCE_IDX)-1,wq=(0,yq.createToken)({name:"RECORDING_PHASE_TOKEN",pattern:YIe.Lexer.NA});(0,Iq.augmentTokenTypes)([wq]);var Bq=(0,yq.createTokenInstance)(wq,`This IToken indicates the Parser is in Recording Phase - See: https://chevrotain.io/docs/guide/internals.html#grammar-recording for details`,-1,-1,-1,-1,-1,-1);Object.freeze(Bq);var JIe={name:`This CSTNode indicates the Parser is in Recording Phase - See: https://chevrotain.io/docs/guide/internals.html#grammar-recording for details`,children:{}},WIe=function(){function r(){}return r.prototype.initGastRecorder=function(e){this.recordingProdStack=[],this.RECORDING_PHASE=!1},r.prototype.enableRecording=function(){var e=this;this.RECORDING_PHASE=!0,this.TRACE_INIT("Enable Recording",function(){for(var t=function(n){var s=n>0?n:"";e["CONSUME"+s]=function(o,a){return this.consumeInternalRecord(o,n,a)},e["SUBRULE"+s]=function(o,a){return this.subruleInternalRecord(o,n,a)},e["OPTION"+s]=function(o){return this.optionInternalRecord(o,n)},e["OR"+s]=function(o){return this.orInternalRecord(o,n)},e["MANY"+s]=function(o){this.manyInternalRecord(n,o)},e["MANY_SEP"+s]=function(o){this.manySepFirstInternalRecord(n,o)},e["AT_LEAST_ONE"+s]=function(o){this.atLeastOneInternalRecord(n,o)},e["AT_LEAST_ONE_SEP"+s]=function(o){this.atLeastOneSepFirstInternalRecord(n,o)}},i=0;i<10;i++)t(i);e.consume=function(n,s,o){return this.consumeInternalRecord(s,n,o)},e.subrule=function(n,s,o){return this.subruleInternalRecord(s,n,o)},e.option=function(n,s){return this.optionInternalRecord(s,n)},e.or=function(n,s){return this.orInternalRecord(s,n)},e.many=function(n,s){this.manyInternalRecord(n,s)},e.atLeastOne=function(n,s){this.atLeastOneInternalRecord(n,s)},e.ACTION=e.ACTION_RECORD,e.BACKTRACK=e.BACKTRACK_RECORD,e.LA=e.LA_RECORD})},r.prototype.disableRecording=function(){var e=this;this.RECORDING_PHASE=!1,this.TRACE_INIT("Deleting Recording methods",function(){for(var t=0;t<10;t++){var i=t>0?t:"";delete e["CONSUME"+i],delete e["SUBRULE"+i],delete e["OPTION"+i],delete e["OR"+i],delete e["MANY"+i],delete e["MANY_SEP"+i],delete e["AT_LEAST_ONE"+i],delete e["AT_LEAST_ONE_SEP"+i]}delete e.consume,delete e.subrule,delete e.option,delete e.or,delete e.many,delete e.atLeastOne,delete e.ACTION,delete e.BACKTRACK,delete e.LA})},r.prototype.ACTION_RECORD=function(e){},r.prototype.BACKTRACK_RECORD=function(e,t){return function(){return!0}},r.prototype.LA_RECORD=function(e){return jIe.END_OF_FILE},r.prototype.topLevelRuleRecord=function(e,t){try{var i=new Ro.Rule({definition:[],name:e});return i.name=e,this.recordingProdStack.push(i),t.call(this),this.recordingProdStack.pop(),i}catch(n){if(n.KNOWN_RECORDER_ERROR!==!0)try{n.message=n.message+` - This error was thrown during the "grammar recording phase" For more info see: - https://chevrotain.io/docs/guide/internals.html#grammar-recording`}catch{throw n}throw n}},r.prototype.optionInternalRecord=function(e,t){return bd.call(this,Ro.Option,e,t)},r.prototype.atLeastOneInternalRecord=function(e,t){bd.call(this,Ro.RepetitionMandatory,t,e)},r.prototype.atLeastOneSepFirstInternalRecord=function(e,t){bd.call(this,Ro.RepetitionMandatoryWithSeparator,t,e,Cq)},r.prototype.manyInternalRecord=function(e,t){bd.call(this,Ro.Repetition,t,e)},r.prototype.manySepFirstInternalRecord=function(e,t){bd.call(this,Ro.RepetitionWithSeparator,t,e,Cq)},r.prototype.orInternalRecord=function(e,t){return zIe.call(this,e,t)},r.prototype.subruleInternalRecord=function(e,t,i){if(fy(t),!e||(0,En.has)(e,"ruleName")===!1){var n=new Error(" argument is invalid"+(" expecting a Parser method reference but got: <"+JSON.stringify(e)+">")+(` - inside top level rule: <`+this.recordingProdStack[0].name+">"));throw n.KNOWN_RECORDER_ERROR=!0,n}var s=(0,En.peek)(this.recordingProdStack),o=e.ruleName,a=new Ro.NonTerminal({idx:t,nonTerminalName:o,label:i==null?void 0:i.LABEL,referencedRule:void 0});return s.definition.push(a),this.outputCst?JIe:hy},r.prototype.consumeInternalRecord=function(e,t,i){if(fy(t),!(0,Iq.hasShortKeyProperty)(e)){var n=new Error(" argument is invalid"+(" expecting a TokenType reference but got: <"+JSON.stringify(e)+">")+(` - inside top level rule: <`+this.recordingProdStack[0].name+">"));throw n.KNOWN_RECORDER_ERROR=!0,n}var s=(0,En.peek)(this.recordingProdStack),o=new Ro.Terminal({idx:t,terminalType:e,label:i==null?void 0:i.LABEL});return s.definition.push(o),Bq},r}();py.GastRecorder=WIe;function bd(r,e,t,i){i===void 0&&(i=!1),fy(t);var n=(0,En.peek)(this.recordingProdStack),s=(0,En.isFunction)(e)?e:e.DEF,o=new r({definition:[],idx:t});return i&&(o.separator=e.SEP),(0,En.has)(e,"MAX_LOOKAHEAD")&&(o.maxLookahead=e.MAX_LOOKAHEAD),this.recordingProdStack.push(o),s.call(this),n.definition.push(o),this.recordingProdStack.pop(),hy}function zIe(r,e){var t=this;fy(e);var i=(0,En.peek)(this.recordingProdStack),n=(0,En.isArray)(r)===!1,s=n===!1?r:r.DEF,o=new Ro.Alternation({definition:[],idx:e,ignoreAmbiguities:n&&r.IGNORE_AMBIGUITIES===!0});(0,En.has)(r,"MAX_LOOKAHEAD")&&(o.maxLookahead=r.MAX_LOOKAHEAD);var a=(0,En.some)(s,function(l){return(0,En.isFunction)(l.GATE)});return o.hasPredicates=a,i.definition.push(o),(0,En.forEach)(s,function(l){var c=new Ro.Alternative({definition:[]});o.definition.push(c),(0,En.has)(l,"IGNORE_AMBIGUITIES")?c.ignoreAmbiguities=l.IGNORE_AMBIGUITIES:(0,En.has)(l,"GATE")&&(c.ignoreAmbiguities=!0),t.recordingProdStack.push(c),l.ALT.call(t),t.recordingProdStack.pop()}),hy}function Eq(r){return r===0?"":""+r}function fy(r){if(r<0||r>mq){var e=new Error("Invalid DSL Method idx value: <"+r+`> - `+("Idx value must be a none negative value smaller than "+(mq+1)));throw e.KNOWN_RECORDER_ERROR=!0,e}}});var Sq=w(dy=>{"use strict";Object.defineProperty(dy,"__esModule",{value:!0});dy.PerformanceTracer=void 0;var bq=Gt(),VIe=Hn(),XIe=function(){function r(){}return r.prototype.initPerformanceTracer=function(e){if((0,bq.has)(e,"traceInitPerf")){var t=e.traceInitPerf,i=typeof t=="number";this.traceInitMaxIdent=i?t:1/0,this.traceInitPerf=i?t>0:t}else this.traceInitMaxIdent=0,this.traceInitPerf=VIe.DEFAULT_PARSER_CONFIG.traceInitPerf;this.traceInitIndent=-1},r.prototype.TRACE_INIT=function(e,t){if(this.traceInitPerf===!0){this.traceInitIndent++;var i=new Array(this.traceInitIndent+1).join(" ");this.traceInitIndent <"+e+">");var n=(0,bq.timer)(t),s=n.time,o=n.value,a=s>10?console.warn:console.log;return this.traceInitIndent time: "+s+"ms"),this.traceInitIndent--,o}else return t()},r}();dy.PerformanceTracer=XIe});var vq=w(Cy=>{"use strict";Object.defineProperty(Cy,"__esModule",{value:!0});Cy.applyMixins=void 0;function _Ie(r,e){e.forEach(function(t){var i=t.prototype;Object.getOwnPropertyNames(i).forEach(function(n){if(n!=="constructor"){var s=Object.getOwnPropertyDescriptor(i,n);s&&(s.get||s.set)?Object.defineProperty(r.prototype,n,s):r.prototype[n]=t.prototype[n]}})})}Cy.applyMixins=_Ie});var Hn=w(dr=>{"use strict";var Dq=dr&&dr.__extends||function(){var r=function(e,t){return r=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(i,n){i.__proto__=n}||function(i,n){for(var s in n)Object.prototype.hasOwnProperty.call(n,s)&&(i[s]=n[s])},r(e,t)};return function(e,t){if(typeof t!="function"&&t!==null)throw new TypeError("Class extends value "+String(t)+" is not a constructor or null");r(e,t);function i(){this.constructor=e}e.prototype=t===null?Object.create(t):(i.prototype=t.prototype,new i)}}();Object.defineProperty(dr,"__esModule",{value:!0});dr.EmbeddedActionsParser=dr.CstParser=dr.Parser=dr.EMPTY_ALT=dr.ParserDefinitionErrorType=dr.DEFAULT_RULE_CONFIG=dr.DEFAULT_PARSER_CONFIG=dr.END_OF_FILE=void 0;var Xi=Gt(),ZIe=fj(),xq=SA(),kq=Cd(),Pq=Kj(),$Ie=jv(),eye=Wj(),tye=iq(),rye=sq(),iye=aq(),nye=uq(),sye=fq(),oye=dq(),aye=Qq(),Aye=Sq(),lye=vq();dr.END_OF_FILE=(0,xq.createTokenInstance)(xq.EOF,"",NaN,NaN,NaN,NaN,NaN,NaN);Object.freeze(dr.END_OF_FILE);dr.DEFAULT_PARSER_CONFIG=Object.freeze({recoveryEnabled:!1,maxLookahead:3,dynamicTokensEnabled:!1,outputCst:!0,errorMessageProvider:kq.defaultParserErrorProvider,nodeLocationTracking:"none",traceInitPerf:!1,skipValidations:!1});dr.DEFAULT_RULE_CONFIG=Object.freeze({recoveryValueFunc:function(){},resyncEnabled:!0});var cye;(function(r){r[r.INVALID_RULE_NAME=0]="INVALID_RULE_NAME",r[r.DUPLICATE_RULE_NAME=1]="DUPLICATE_RULE_NAME",r[r.INVALID_RULE_OVERRIDE=2]="INVALID_RULE_OVERRIDE",r[r.DUPLICATE_PRODUCTIONS=3]="DUPLICATE_PRODUCTIONS",r[r.UNRESOLVED_SUBRULE_REF=4]="UNRESOLVED_SUBRULE_REF",r[r.LEFT_RECURSION=5]="LEFT_RECURSION",r[r.NONE_LAST_EMPTY_ALT=6]="NONE_LAST_EMPTY_ALT",r[r.AMBIGUOUS_ALTS=7]="AMBIGUOUS_ALTS",r[r.CONFLICT_TOKENS_RULES_NAMESPACE=8]="CONFLICT_TOKENS_RULES_NAMESPACE",r[r.INVALID_TOKEN_NAME=9]="INVALID_TOKEN_NAME",r[r.NO_NON_EMPTY_LOOKAHEAD=10]="NO_NON_EMPTY_LOOKAHEAD",r[r.AMBIGUOUS_PREFIX_ALTS=11]="AMBIGUOUS_PREFIX_ALTS",r[r.TOO_MANY_ALTS=12]="TOO_MANY_ALTS"})(cye=dr.ParserDefinitionErrorType||(dr.ParserDefinitionErrorType={}));function uye(r){return r===void 0&&(r=void 0),function(){return r}}dr.EMPTY_ALT=uye;var my=function(){function r(e,t){this.definitionErrors=[],this.selfAnalysisDone=!1;var i=this;if(i.initErrorHandler(t),i.initLexerAdapter(),i.initLooksAhead(t),i.initRecognizerEngine(e,t),i.initRecoverable(t),i.initTreeBuilder(t),i.initContentAssist(),i.initGastRecorder(t),i.initPerformanceTracer(t),(0,Xi.has)(t,"ignoredIssues"))throw new Error(`The IParserConfig property has been deprecated. - Please use the flag on the relevant DSL method instead. - See: https://chevrotain.io/docs/guide/resolving_grammar_errors.html#IGNORING_AMBIGUITIES - For further details.`);this.skipValidations=(0,Xi.has)(t,"skipValidations")?t.skipValidations:dr.DEFAULT_PARSER_CONFIG.skipValidations}return r.performSelfAnalysis=function(e){throw Error("The **static** `performSelfAnalysis` method has been deprecated. \nUse the **instance** method with the same name instead.")},r.prototype.performSelfAnalysis=function(){var e=this;this.TRACE_INIT("performSelfAnalysis",function(){var t;e.selfAnalysisDone=!0;var i=e.className;e.TRACE_INIT("toFastProps",function(){(0,Xi.toFastProperties)(e)}),e.TRACE_INIT("Grammar Recording",function(){try{e.enableRecording(),(0,Xi.forEach)(e.definedRulesNames,function(s){var o=e[s],a=o.originalGrammarAction,l=void 0;e.TRACE_INIT(s+" Rule",function(){l=e.topLevelRuleRecord(s,a)}),e.gastProductionsCache[s]=l})}finally{e.disableRecording()}});var n=[];if(e.TRACE_INIT("Grammar Resolving",function(){n=(0,Pq.resolveGrammar)({rules:(0,Xi.values)(e.gastProductionsCache)}),e.definitionErrors=e.definitionErrors.concat(n)}),e.TRACE_INIT("Grammar Validations",function(){if((0,Xi.isEmpty)(n)&&e.skipValidations===!1){var s=(0,Pq.validateGrammar)({rules:(0,Xi.values)(e.gastProductionsCache),maxLookahead:e.maxLookahead,tokenTypes:(0,Xi.values)(e.tokensMap),errMsgProvider:kq.defaultGrammarValidatorErrorProvider,grammarName:i});e.definitionErrors=e.definitionErrors.concat(s)}}),(0,Xi.isEmpty)(e.definitionErrors)&&(e.recoveryEnabled&&e.TRACE_INIT("computeAllProdsFollows",function(){var s=(0,ZIe.computeAllProdsFollows)((0,Xi.values)(e.gastProductionsCache));e.resyncFollows=s}),e.TRACE_INIT("ComputeLookaheadFunctions",function(){e.preComputeLookaheadFunctions((0,Xi.values)(e.gastProductionsCache))})),!r.DEFER_DEFINITION_ERRORS_HANDLING&&!(0,Xi.isEmpty)(e.definitionErrors))throw t=(0,Xi.map)(e.definitionErrors,function(s){return s.message}),new Error(`Parser Definition Errors detected: - `+t.join(` -------------------------------- -`))})},r.DEFER_DEFINITION_ERRORS_HANDLING=!1,r}();dr.Parser=my;(0,lye.applyMixins)(my,[$Ie.Recoverable,eye.LooksAhead,tye.TreeBuilder,rye.LexerAdapter,nye.RecognizerEngine,iye.RecognizerApi,sye.ErrorHandler,oye.ContentAssist,aye.GastRecorder,Aye.PerformanceTracer]);var gye=function(r){Dq(e,r);function e(t,i){i===void 0&&(i=dr.DEFAULT_PARSER_CONFIG);var n=this,s=(0,Xi.cloneObj)(i);return s.outputCst=!0,n=r.call(this,t,s)||this,n}return e}(my);dr.CstParser=gye;var fye=function(r){Dq(e,r);function e(t,i){i===void 0&&(i=dr.DEFAULT_PARSER_CONFIG);var n=this,s=(0,Xi.cloneObj)(i);return s.outputCst=!1,n=r.call(this,t,s)||this,n}return e}(my);dr.EmbeddedActionsParser=fye});var Fq=w(Ey=>{"use strict";Object.defineProperty(Ey,"__esModule",{value:!0});Ey.createSyntaxDiagramsCode=void 0;var Rq=pv();function hye(r,e){var t=e===void 0?{}:e,i=t.resourceBase,n=i===void 0?"https://unpkg.com/chevrotain@"+Rq.VERSION+"/diagrams/":i,s=t.css,o=s===void 0?"https://unpkg.com/chevrotain@"+Rq.VERSION+"/diagrams/diagrams.css":s,a=` - - - - - -`,l=` - -`,c=` - - - - diff --git a/pkg/ui/web/package-lock.json b/pkg/ui/web/package-lock.json deleted file mode 100644 index c0da9c10e..000000000 --- a/pkg/ui/web/package-lock.json +++ /dev/null @@ -1,1483 +0,0 @@ -{ - "name": "frontend", - "version": "0.0.0", - "lockfileVersion": 3, - "requires": true, - "packages": { - "": { - "name": "frontend", - "version": "0.0.0", - "dependencies": { - "react": "^18.2.0", - "react-dom": "^18.2.0" - }, - "devDependencies": { - "@types/react": "^18.0.17", - "@types/react-dom": "^18.0.6", - "@vitejs/plugin-react": "^2.0.1", - "typescript": "^4.6.4", - "vite": "^3.0.7" - } - }, - "node_modules/@ampproject/remapping": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.0.tgz", - "integrity": "sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==", - "dev": true, - "dependencies": { - "@jridgewell/gen-mapping": "^0.1.0", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/code-frame": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", - "integrity": "sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q==", - "dev": true, - "dependencies": { - "@babel/highlight": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/compat-data": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/compat-data/-/compat-data-7.21.0.tgz", - "integrity": "sha512-gMuZsmsgxk/ENC3O/fRw5QY8A9/uxQbbCEypnLIiYYc/qVJtEV7ouxC3EllIIwNzMqAQee5tanFabWsUOutS7g==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/core": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/core/-/core-7.21.0.tgz", - "integrity": "sha512-PuxUbxcW6ZYe656yL3EAhpy7qXKq0DmYsrJLpbB8XrsCP9Nm+XCg9XFMb5vIDliPD7+U/+M+QJlH17XOcB7eXA==", - "dev": true, - "dependencies": { - "@ampproject/remapping": "^2.2.0", - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.21.0", - "@babel/helper-compilation-targets": "^7.20.7", - "@babel/helper-module-transforms": "^7.21.0", - "@babel/helpers": "^7.21.0", - "@babel/parser": "^7.21.0", - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.21.0", - "@babel/types": "^7.21.0", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.2.2", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@babel/generator": { - "version": "7.21.1", - "resolved": "https://registry.npmjs.org/@babel/generator/-/generator-7.21.1.tgz", - "integrity": "sha512-1lT45bAYlQhFn/BHivJs43AiW2rg3/UbLyShGfF3C0KmHvO5fSghWd5kBJy30kpRRucGzXStvnnCFniCR2kXAA==", - "dev": true, - "dependencies": { - "@babel/types": "^7.21.0", - "@jridgewell/gen-mapping": "^0.3.2", - "@jridgewell/trace-mapping": "^0.3.17", - "jsesc": "^2.5.1" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/generator/node_modules/@jridgewell/gen-mapping": { - "version": "0.3.2", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.2.tgz", - "integrity": "sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==", - "dev": true, - "dependencies": { - "@jridgewell/set-array": "^1.0.1", - "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/helper-annotate-as-pure": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.18.6.tgz", - "integrity": "sha512-duORpUiYrEpzKIop6iNbjnwKLAKnJ47csTyRACyEmWj0QdUrm5aqNJGHSSEQSUAvNW0ojX0dOmK9dZduvkfeXA==", - "dev": true, - "dependencies": { - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/helper-compilation-targets/-/helper-compilation-targets-7.20.7.tgz", - "integrity": "sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ==", - "dev": true, - "dependencies": { - "@babel/compat-data": "^7.20.5", - "@babel/helper-validator-option": "^7.18.6", - "browserslist": "^4.21.3", - "lru-cache": "^5.1.1", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" - } - }, - "node_modules/@babel/helper-environment-visitor": { - "version": "7.18.9", - "resolved": "https://registry.npmjs.org/@babel/helper-environment-visitor/-/helper-environment-visitor-7.18.9.tgz", - "integrity": "sha512-3r/aACDJ3fhQ/EVgFy0hpj8oHyHpQc+LPtJoY9SzTThAsStm4Ptegq92vqKoE3vD706ZVFWITnMnxucw+S9Ipg==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-function-name": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/helper-function-name/-/helper-function-name-7.21.0.tgz", - "integrity": "sha512-HfK1aMRanKHpxemaY2gqBmL04iAPOPRj7DxtNbiDOrJK+gdwkiNRVpCpUJYbUT+aZyemKN8brqTOxzCaG6ExRg==", - "dev": true, - "dependencies": { - "@babel/template": "^7.20.7", - "@babel/types": "^7.21.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-hoist-variables/-/helper-hoist-variables-7.18.6.tgz", - "integrity": "sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==", - "dev": true, - "dependencies": { - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-imports": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-module-imports/-/helper-module-imports-7.18.6.tgz", - "integrity": "sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==", - "dev": true, - "dependencies": { - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.21.2", - "resolved": "https://registry.npmjs.org/@babel/helper-module-transforms/-/helper-module-transforms-7.21.2.tgz", - "integrity": "sha512-79yj2AR4U/Oqq/WOV7Lx6hUjau1Zfo4cI+JLAVYeMV5XIlbOhmjEk5ulbTc9fMpmlojzZHkUUxAiK+UKn+hNQQ==", - "dev": true, - "dependencies": { - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-simple-access": "^7.20.2", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/helper-validator-identifier": "^7.19.1", - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.21.2", - "@babel/types": "^7.21.2" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-plugin-utils": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.20.2.tgz", - "integrity": "sha512-8RvlJG2mj4huQ4pZ+rU9lqKi9ZKiRmuvGuM2HlWmkmgOhbs6zEAw6IEiJ5cQqGbDzGZOhwuOQNtZMi/ENLjZoQ==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-simple-access": { - "version": "7.20.2", - "resolved": "https://registry.npmjs.org/@babel/helper-simple-access/-/helper-simple-access-7.20.2.tgz", - "integrity": "sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==", - "dev": true, - "dependencies": { - "@babel/types": "^7.20.2" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.18.6.tgz", - "integrity": "sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==", - "dev": true, - "dependencies": { - "@babel/types": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-string-parser": { - "version": "7.19.4", - "resolved": "https://registry.npmjs.org/@babel/helper-string-parser/-/helper-string-parser-7.19.4.tgz", - "integrity": "sha512-nHtDoQcuqFmwYNYPz3Rah5ph2p8PFeFCsZk9A/48dPc/rGocJ5J3hAAZ7pb76VWX3fZKu+uEr/FhH5jLx7umrw==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.19.1", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz", - "integrity": "sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helper-validator-option": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-option/-/helper-validator-option-7.21.0.tgz", - "integrity": "sha512-rmL/B8/f0mKS2baE9ZpyTcTavvEuWhTTW8amjzXNvYG4AwBsqTLikfXsEofsJEfKHf+HQVQbFOHy6o+4cnC/fQ==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/helpers": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.21.0.tgz", - "integrity": "sha512-XXve0CBtOW0pd7MRzzmoyuSj0e3SEzj8pgyFxnTT1NJZL38BD1MK7yYrm8yefRPIDvNNe14xR4FdbHwpInD4rA==", - "dev": true, - "dependencies": { - "@babel/template": "^7.20.7", - "@babel/traverse": "^7.21.0", - "@babel/types": "^7.21.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/highlight": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.18.6.tgz", - "integrity": "sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g==", - "dev": true, - "dependencies": { - "@babel/helper-validator-identifier": "^7.18.6", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/parser": { - "version": "7.21.2", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.21.2.tgz", - "integrity": "sha512-URpaIJQwEkEC2T9Kn+Ai6Xe/02iNaVCuT/PtoRz3GPVJVDpPd7mLo+VddTbhCRU9TXqW5mSrQfXZyi8kDKOVpQ==", - "dev": true, - "bin": { - "parser": "bin/babel-parser.js" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@babel/plugin-syntax-jsx": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.18.6.tgz", - "integrity": "sha512-6mmljtAedFGTWu2p/8WIORGwy+61PLgOMPOdazc7YoJ9ZCWUyFy3A6CpPkRKLKD1ToAesxX8KGEViAiLo9N+7Q==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.21.0.tgz", - "integrity": "sha512-6OAWljMvQrZjR2DaNhVfRz6dkCAVV+ymcLUmaf8bccGOHn2v5rHJK3tTpij0BuhdYWP4LLaqj5lwcdlpAAPuvg==", - "dev": true, - "dependencies": { - "@babel/helper-annotate-as-pure": "^7.18.6", - "@babel/helper-module-imports": "^7.18.6", - "@babel/helper-plugin-utils": "^7.20.2", - "@babel/plugin-syntax-jsx": "^7.18.6", - "@babel/types": "^7.21.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx-development": { - "version": "7.18.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.18.6.tgz", - "integrity": "sha512-SA6HEjwYFKF7WDjWcMcMGUimmw/nhNRDWxr+KaLSCrkD/LMDBvWRmHAYgE1HDeF8KUuI8OAu+RT6EOtKxSW2qA==", - "dev": true, - "dependencies": { - "@babel/plugin-transform-react-jsx": "^7.18.6" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx-self": { - "version": "7.21.0", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.21.0.tgz", - "integrity": "sha512-f/Eq+79JEu+KUANFks9UZCcvydOOGMgF7jBrcwjHa5jTZD8JivnhCJYvmlhR/WTXBWonDExPoW0eO/CR4QJirA==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.20.2" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/plugin-transform-react-jsx-source": { - "version": "7.19.6", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.19.6.tgz", - "integrity": "sha512-RpAi004QyMNisst/pvSanoRdJ4q+jMCWyk9zdw/CyLB9j8RXEahodR6l2GyttDRyEVWZtbN+TpLiHJ3t34LbsQ==", - "dev": true, - "dependencies": { - "@babel/helper-plugin-utils": "^7.19.0" - }, - "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0-0" - } - }, - "node_modules/@babel/template": { - "version": "7.20.7", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.20.7.tgz", - "integrity": "sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.18.6", - "@babel/parser": "^7.20.7", - "@babel/types": "^7.20.7" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/traverse": { - "version": "7.21.2", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.21.2.tgz", - "integrity": "sha512-ts5FFU/dSUPS13tv8XiEObDu9K+iagEKME9kAbaP7r0Y9KtZJZ+NGndDvWoRAYNpeWafbpFeki3q9QoMD6gxyw==", - "dev": true, - "dependencies": { - "@babel/code-frame": "^7.18.6", - "@babel/generator": "^7.21.1", - "@babel/helper-environment-visitor": "^7.18.9", - "@babel/helper-function-name": "^7.21.0", - "@babel/helper-hoist-variables": "^7.18.6", - "@babel/helper-split-export-declaration": "^7.18.6", - "@babel/parser": "^7.21.2", - "@babel/types": "^7.21.2", - "debug": "^4.1.0", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/types": { - "version": "7.21.2", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.21.2.tgz", - "integrity": "sha512-3wRZSs7jiFaB8AjxiiD+VqN5DTG2iRvJGQ+qYFrs/654lg6kGTQWIOFjlBo5RaXuAZjBmP3+OQH4dmhqiiyYxw==", - "dev": true, - "dependencies": { - "@babel/helper-string-parser": "^7.19.4", - "@babel/helper-validator-identifier": "^7.19.1", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@esbuild/android-arm": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.15.18.tgz", - "integrity": "sha512-5GT+kcs2WVGjVs7+boataCkO5Fg0y4kCjzkB5bAip7H4jfnOS3dA6KPiww9W1OEKTKeAcUVhdZGvgI65OXmUnw==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@esbuild/linux-loong64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.15.18.tgz", - "integrity": "sha512-L4jVKS82XVhw2nvzLg/19ClLWg0y27ulRwuP7lcyL6AbUWB5aPglXY3M21mauDQMDfRLs8cQmeT03r/+X3cZYQ==", - "cpu": [ - "loong64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/@jridgewell/gen-mapping": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.1.1.tgz", - "integrity": "sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==", - "dev": true, - "dependencies": { - "@jridgewell/set-array": "^1.0.0", - "@jridgewell/sourcemap-codec": "^1.4.10" - }, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.0.tgz", - "integrity": "sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", - "dev": true, - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.14", - "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.14.tgz", - "integrity": "sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==", - "dev": true - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.17", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.17.tgz", - "integrity": "sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==", - "dev": true, - "dependencies": { - "@jridgewell/resolve-uri": "3.1.0", - "@jridgewell/sourcemap-codec": "1.4.14" - } - }, - "node_modules/@types/prop-types": { - "version": "15.7.5", - "resolved": "https://registry.npmjs.org/@types/prop-types/-/prop-types-15.7.5.tgz", - "integrity": "sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w==", - "dev": true - }, - "node_modules/@types/react": { - "version": "18.0.28", - "resolved": "https://registry.npmjs.org/@types/react/-/react-18.0.28.tgz", - "integrity": "sha512-RD0ivG1kEztNBdoAK7lekI9M+azSnitIn85h4iOiaLjaTrMjzslhaqCGaI4IyCJ1RljWiLCEu4jyrLLgqxBTew==", - "dev": true, - "dependencies": { - "@types/prop-types": "*", - "@types/scheduler": "*", - "csstype": "^3.0.2" - } - }, - "node_modules/@types/react-dom": { - "version": "18.0.11", - "resolved": "https://registry.npmjs.org/@types/react-dom/-/react-dom-18.0.11.tgz", - "integrity": "sha512-O38bPbI2CWtgw/OoQoY+BRelw7uysmXbWvw3nLWO21H1HSh+GOlqPuXshJfjmpNlKiiSDG9cc1JZAaMmVdcTlw==", - "dev": true, - "dependencies": { - "@types/react": "*" - } - }, - "node_modules/@types/scheduler": { - "version": "0.16.2", - "resolved": "https://registry.npmjs.org/@types/scheduler/-/scheduler-0.16.2.tgz", - "integrity": "sha512-hppQEBDmlwhFAXKJX2KnWLYu5yMfi91yazPb2l+lbJiwW+wdo1gNeRA+3RgNSO39WYX2euey41KEwnqesU2Jew==", - "dev": true - }, - "node_modules/@vitejs/plugin-react": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@vitejs/plugin-react/-/plugin-react-2.2.0.tgz", - "integrity": "sha512-FFpefhvExd1toVRlokZgxgy2JtnBOdp4ZDsq7ldCWaqGSGn9UhWMAVm/1lxPL14JfNS5yGz+s9yFrQY6shoStA==", - "dev": true, - "dependencies": { - "@babel/core": "^7.19.6", - "@babel/plugin-transform-react-jsx": "^7.19.0", - "@babel/plugin-transform-react-jsx-development": "^7.18.6", - "@babel/plugin-transform-react-jsx-self": "^7.18.6", - "@babel/plugin-transform-react-jsx-source": "^7.19.6", - "magic-string": "^0.26.7", - "react-refresh": "^0.14.0" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "peerDependencies": { - "vite": "^3.0.0" - } - }, - "node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/browserslist": { - "version": "4.21.5", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.21.5.tgz", - "integrity": "sha512-tUkiguQGW7S3IhB7N+c2MV/HZPSCPAAiYBZXLsBhFB/PCy6ZKKsZrmBayHV9fdGV/ARIfJ14NkxKzRDjvp7L6w==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - } - ], - "dependencies": { - "caniuse-lite": "^1.0.30001449", - "electron-to-chromium": "^1.4.284", - "node-releases": "^2.0.8", - "update-browserslist-db": "^1.0.10" - }, - "bin": { - "browserslist": "cli.js" - }, - "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" - } - }, - "node_modules/caniuse-lite": { - "version": "1.0.30001465", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001465.tgz", - "integrity": "sha512-HvjgL3MYAJjceTDCcjRnQGjwUz/5qec9n7JPOzUursUoOTIsYCSDOb1l7RsnZE8mjbxG78zVRCKfrBXyvChBag==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - } - ] - }, - "node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/convert-source-map": { - "version": "1.9.0", - "resolved": "https://registry.npmjs.org/convert-source-map/-/convert-source-map-1.9.0.tgz", - "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", - "dev": true - }, - "node_modules/csstype": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/csstype/-/csstype-3.1.1.tgz", - "integrity": "sha512-DJR/VvkAvSZW9bTouZue2sSxDwdTN92uHjqeKVm+0dAqdfNykRzQ95tay8aXMBAAPpUiq4Qcug2L7neoRh2Egw==", - "dev": true - }, - "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", - "dev": true, - "dependencies": { - "ms": "2.1.2" - }, - "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } - } - }, - "node_modules/electron-to-chromium": { - "version": "1.4.328", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.328.tgz", - "integrity": "sha512-DE9tTy2PNmy1v55AZAO542ui+MLC2cvINMK4P2LXGsJdput/ThVG9t+QGecPuAZZSgC8XoI+Jh9M1OG9IoNSCw==", - "dev": true - }, - "node_modules/esbuild": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.15.18.tgz", - "integrity": "sha512-x/R72SmW3sSFRm5zrrIjAhCeQSAWoni3CmHEqfQrZIQTM3lVCdehdwuIqaOtfC2slvpdlLa62GYoN8SxT23m6Q==", - "dev": true, - "hasInstallScript": true, - "bin": { - "esbuild": "bin/esbuild" - }, - "engines": { - "node": ">=12" - }, - "optionalDependencies": { - "@esbuild/android-arm": "0.15.18", - "@esbuild/linux-loong64": "0.15.18", - "esbuild-android-64": "0.15.18", - "esbuild-android-arm64": "0.15.18", - "esbuild-darwin-64": "0.15.18", - "esbuild-darwin-arm64": "0.15.18", - "esbuild-freebsd-64": "0.15.18", - "esbuild-freebsd-arm64": "0.15.18", - "esbuild-linux-32": "0.15.18", - "esbuild-linux-64": "0.15.18", - "esbuild-linux-arm": "0.15.18", - "esbuild-linux-arm64": "0.15.18", - "esbuild-linux-mips64le": "0.15.18", - "esbuild-linux-ppc64le": "0.15.18", - "esbuild-linux-riscv64": "0.15.18", - "esbuild-linux-s390x": "0.15.18", - "esbuild-netbsd-64": "0.15.18", - "esbuild-openbsd-64": "0.15.18", - "esbuild-sunos-64": "0.15.18", - "esbuild-windows-32": "0.15.18", - "esbuild-windows-64": "0.15.18", - "esbuild-windows-arm64": "0.15.18" - } - }, - "node_modules/esbuild-android-64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-android-64/-/esbuild-android-64-0.15.18.tgz", - "integrity": "sha512-wnpt3OXRhcjfIDSZu9bnzT4/TNTDsOUvip0foZOUBG7QbSt//w3QV4FInVJxNhKc/ErhUxc5z4QjHtMi7/TbgA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-android-arm64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-android-arm64/-/esbuild-android-arm64-0.15.18.tgz", - "integrity": "sha512-G4xu89B8FCzav9XU8EjsXacCKSG2FT7wW9J6hOc18soEHJdtWu03L3TQDGf0geNxfLTtxENKBzMSq9LlbjS8OQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-darwin-64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-darwin-64/-/esbuild-darwin-64-0.15.18.tgz", - "integrity": "sha512-2WAvs95uPnVJPuYKP0Eqx+Dl/jaYseZEUUT1sjg97TJa4oBtbAKnPnl3b5M9l51/nbx7+QAEtuummJZW0sBEmg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-darwin-arm64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-darwin-arm64/-/esbuild-darwin-arm64-0.15.18.tgz", - "integrity": "sha512-tKPSxcTJ5OmNb1btVikATJ8NftlyNlc8BVNtyT/UAr62JFOhwHlnoPrhYWz09akBLHI9nElFVfWSTSRsrZiDUA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-freebsd-64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-64/-/esbuild-freebsd-64-0.15.18.tgz", - "integrity": "sha512-TT3uBUxkteAjR1QbsmvSsjpKjOX6UkCstr8nMr+q7zi3NuZ1oIpa8U41Y8I8dJH2fJgdC3Dj3CXO5biLQpfdZA==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-freebsd-arm64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-freebsd-arm64/-/esbuild-freebsd-arm64-0.15.18.tgz", - "integrity": "sha512-R/oVr+X3Tkh+S0+tL41wRMbdWtpWB8hEAMsOXDumSSa6qJR89U0S/PpLXrGF7Wk/JykfpWNokERUpCeHDl47wA==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "freebsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-32": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-linux-32/-/esbuild-linux-32-0.15.18.tgz", - "integrity": "sha512-lphF3HiCSYtaa9p1DtXndiQEeQDKPl9eN/XNoBf2amEghugNuqXNZA/ZovthNE2aa4EN43WroO0B85xVSjYkbg==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-linux-64/-/esbuild-linux-64-0.15.18.tgz", - "integrity": "sha512-hNSeP97IviD7oxLKFuii5sDPJ+QHeiFTFLoLm7NZQligur8poNOWGIgpQ7Qf8Balb69hptMZzyOBIPtY09GZYw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-arm": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm/-/esbuild-linux-arm-0.15.18.tgz", - "integrity": "sha512-UH779gstRblS4aoS2qpMl3wjg7U0j+ygu3GjIeTonCcN79ZvpPee12Qun3vcdxX+37O5LFxz39XeW2I9bybMVA==", - "cpu": [ - "arm" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-arm64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-linux-arm64/-/esbuild-linux-arm64-0.15.18.tgz", - "integrity": "sha512-54qr8kg/6ilcxd+0V3h9rjT4qmjc0CccMVWrjOEM/pEcUzt8X62HfBSeZfT2ECpM7104mk4yfQXkosY8Quptug==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-mips64le": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-linux-mips64le/-/esbuild-linux-mips64le-0.15.18.tgz", - "integrity": "sha512-Mk6Ppwzzz3YbMl/ZZL2P0q1tnYqh/trYZ1VfNP47C31yT0K8t9s7Z077QrDA/guU60tGNp2GOwCQnp+DYv7bxQ==", - "cpu": [ - "mips64el" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-ppc64le": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-linux-ppc64le/-/esbuild-linux-ppc64le-0.15.18.tgz", - "integrity": "sha512-b0XkN4pL9WUulPTa/VKHx2wLCgvIAbgwABGnKMY19WhKZPT+8BxhZdqz6EgkqCLld7X5qiCY2F/bfpUUlnFZ9w==", - "cpu": [ - "ppc64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-riscv64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-linux-riscv64/-/esbuild-linux-riscv64-0.15.18.tgz", - "integrity": "sha512-ba2COaoF5wL6VLZWn04k+ACZjZ6NYniMSQStodFKH/Pu6RxzQqzsmjR1t9QC89VYJxBeyVPTaHuBMCejl3O/xg==", - "cpu": [ - "riscv64" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-linux-s390x": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-linux-s390x/-/esbuild-linux-s390x-0.15.18.tgz", - "integrity": "sha512-VbpGuXEl5FCs1wDVp93O8UIzl3ZrglgnSQ+Hu79g7hZu6te6/YHgVJxCM2SqfIila0J3k0csfnf8VD2W7u2kzQ==", - "cpu": [ - "s390x" - ], - "dev": true, - "optional": true, - "os": [ - "linux" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-netbsd-64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-netbsd-64/-/esbuild-netbsd-64-0.15.18.tgz", - "integrity": "sha512-98ukeCdvdX7wr1vUYQzKo4kQ0N2p27H7I11maINv73fVEXt2kyh4K4m9f35U1K43Xc2QGXlzAw0K9yoU7JUjOg==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "netbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-openbsd-64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-openbsd-64/-/esbuild-openbsd-64-0.15.18.tgz", - "integrity": "sha512-yK5NCcH31Uae076AyQAXeJzt/vxIo9+omZRKj1pauhk3ITuADzuOx5N2fdHrAKPxN+zH3w96uFKlY7yIn490xQ==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "openbsd" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-sunos-64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-sunos-64/-/esbuild-sunos-64-0.15.18.tgz", - "integrity": "sha512-On22LLFlBeLNj/YF3FT+cXcyKPEI263nflYlAhz5crxtp3yRG1Ugfr7ITyxmCmjm4vbN/dGrb/B7w7U8yJR9yw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "sunos" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-windows-32": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-windows-32/-/esbuild-windows-32-0.15.18.tgz", - "integrity": "sha512-o+eyLu2MjVny/nt+E0uPnBxYuJHBvho8vWsC2lV61A7wwTWC3jkN2w36jtA+yv1UgYkHRihPuQsL23hsCYGcOQ==", - "cpu": [ - "ia32" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-windows-64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-windows-64/-/esbuild-windows-64-0.15.18.tgz", - "integrity": "sha512-qinug1iTTaIIrCorAUjR0fcBk24fjzEedFYhhispP8Oc7SFvs+XeW3YpAKiKp8dRpizl4YYAhxMjlftAMJiaUw==", - "cpu": [ - "x64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/esbuild-windows-arm64": { - "version": "0.15.18", - "resolved": "https://registry.npmjs.org/esbuild-windows-arm64/-/esbuild-windows-arm64-0.15.18.tgz", - "integrity": "sha512-q9bsYzegpZcLziq0zgUi5KqGVtfhjxGbnksaBFYmWLxeV/S1fK4OLdq2DFYnXcLMjlZw2L0jLsk1eGoB522WXQ==", - "cpu": [ - "arm64" - ], - "dev": true, - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" - } - }, - "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/fsevents": { - "version": "2.3.2", - "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", - "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", - "dev": true, - "hasInstallScript": true, - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, - "node_modules/function-bind": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.1.tgz", - "integrity": "sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==", - "dev": true - }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "resolved": "https://registry.npmjs.org/gensync/-/gensync-1.0.0-beta.2.tgz", - "integrity": "sha512-3hN7NaskYvMDLQY55gnW3NQ+mesEAepTqlg+VEbj7zzqEMBVNhzcGYYeqFo/TlYz6eQiFcp1HcsCZO+nGgS8zg==", - "dev": true, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/globals": { - "version": "11.12.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-11.12.0.tgz", - "integrity": "sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/has": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has/-/has-1.0.3.tgz", - "integrity": "sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.1" - }, - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/is-core-module": { - "version": "2.11.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.11.0.tgz", - "integrity": "sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==", - "dev": true, - "dependencies": { - "has": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz", - "integrity": "sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==" - }, - "node_modules/jsesc": { - "version": "2.5.2", - "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", - "integrity": "sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==", - "dev": true, - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/json5": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/json5/-/json5-2.2.3.tgz", - "integrity": "sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==", - "dev": true, - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } - }, - "node_modules/loose-envify": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/loose-envify/-/loose-envify-1.4.0.tgz", - "integrity": "sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==", - "dependencies": { - "js-tokens": "^3.0.0 || ^4.0.0" - }, - "bin": { - "loose-envify": "cli.js" - } - }, - "node_modules/lru-cache": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-5.1.1.tgz", - "integrity": "sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==", - "dev": true, - "dependencies": { - "yallist": "^3.0.2" - } - }, - "node_modules/magic-string": { - "version": "0.26.7", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.26.7.tgz", - "integrity": "sha512-hX9XH3ziStPoPhJxLq1syWuZMxbDvGNbVchfrdCtanC7D13888bMFow61x8axrx+GfHLtVeAx2kxL7tTGRl+Ow==", - "dev": true, - "dependencies": { - "sourcemap-codec": "^1.4.8" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/ms": { - "version": "2.1.2", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", - "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==", - "dev": true - }, - "node_modules/nanoid": { - "version": "3.3.4", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.4.tgz", - "integrity": "sha512-MqBkQh/OHTS2egovRtLk45wEyNXwF+cokD+1YPf9u5VfJiRdAiRwB2froX5Co9Rh20xs4siNPm8naNotSD6RBw==", - "dev": true, - "bin": { - "nanoid": "bin/nanoid.cjs" - }, - "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" - } - }, - "node_modules/node-releases": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.10.tgz", - "integrity": "sha512-5GFldHPXVG/YZmFzJvKK2zDSzPKhEp0+ZR5SVaoSag9fsL5YgHbUHDfnG5494ISANDcK4KwPXAx2xqVEydmd7w==", - "dev": true - }, - "node_modules/path-parse": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true - }, - "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", - "dev": true - }, - "node_modules/postcss": { - "version": "8.4.21", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.21.tgz", - "integrity": "sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - } - ], - "dependencies": { - "nanoid": "^3.3.4", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - }, - "engines": { - "node": "^10 || ^12 || >=14" - } - }, - "node_modules/react": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react/-/react-18.2.0.tgz", - "integrity": "sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ==", - "dependencies": { - "loose-envify": "^1.1.0" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/react-dom": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.2.0.tgz", - "integrity": "sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g==", - "dependencies": { - "loose-envify": "^1.1.0", - "scheduler": "^0.23.0" - }, - "peerDependencies": { - "react": "^18.2.0" - } - }, - "node_modules/react-refresh": { - "version": "0.14.0", - "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.0.tgz", - "integrity": "sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/resolve": { - "version": "1.22.1", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.1.tgz", - "integrity": "sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==", - "dev": true, - "dependencies": { - "is-core-module": "^2.9.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/rollup": { - "version": "2.79.1", - "resolved": "https://registry.npmjs.org/rollup/-/rollup-2.79.1.tgz", - "integrity": "sha512-uKxbd0IhMZOhjAiD5oAFp7BqvkA4Dv47qpOCtaNvng4HBwdbWtdOh8f5nZNuk2rp51PMGk3bzfWu5oayNEuYnw==", - "dev": true, - "bin": { - "rollup": "dist/bin/rollup" - }, - "engines": { - "node": ">=10.0.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - } - }, - "node_modules/scheduler": { - "version": "0.23.0", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.0.tgz", - "integrity": "sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==", - "dependencies": { - "loose-envify": "^1.1.0" - } - }, - "node_modules/semver": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", - "dev": true, - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/sourcemap-codec": { - "version": "1.4.8", - "resolved": "https://registry.npmjs.org/sourcemap-codec/-/sourcemap-codec-1.4.8.tgz", - "integrity": "sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==", - "deprecated": "Please use @jridgewell/sourcemap-codec instead", - "dev": true - }, - "node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/to-fast-properties/-/to-fast-properties-2.0.0.tgz", - "integrity": "sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/typescript": { - "version": "4.9.5", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.9.5.tgz", - "integrity": "sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g==", - "dev": true, - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" - }, - "engines": { - "node": ">=4.2.0" - } - }, - "node_modules/update-browserslist-db": { - "version": "1.0.10", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.10.tgz", - "integrity": "sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - } - ], - "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - }, - "bin": { - "browserslist-lint": "cli.js" - }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/vite": { - "version": "3.2.5", - "resolved": "https://registry.npmjs.org/vite/-/vite-3.2.5.tgz", - "integrity": "sha512-4mVEpXpSOgrssFZAOmGIr85wPHKvaDAcXqxVxVRZhljkJOMZi1ibLibzjLHzJvcok8BMguLc7g1W6W/GqZbLdQ==", - "dev": true, - "dependencies": { - "esbuild": "^0.15.9", - "postcss": "^8.4.18", - "resolve": "^1.22.1", - "rollup": "^2.79.1" - }, - "bin": { - "vite": "bin/vite.js" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - }, - "peerDependencies": { - "@types/node": ">= 14", - "less": "*", - "sass": "*", - "stylus": "*", - "sugarss": "*", - "terser": "^5.4.0" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "less": { - "optional": true - }, - "sass": { - "optional": true - }, - "stylus": { - "optional": true - }, - "sugarss": { - "optional": true - }, - "terser": { - "optional": true - } - } - }, - "node_modules/yallist": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-3.1.1.tgz", - "integrity": "sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==", - "dev": true - } - } -} diff --git a/pkg/ui/web/package.json b/pkg/ui/web/package.json deleted file mode 100644 index 27d037e95..000000000 --- a/pkg/ui/web/package.json +++ /dev/null @@ -1,61 +0,0 @@ -{ - "name": "frontend", - "private": true, - "version": "0.0.0", - "type": "module", - "scripts": { - "dev": "vite", - "build": "tsc && vite build", - "lint": "yarn lint:ts", - "lint:ts": "eslint ./src", - "fix": "yarn fix:ts", - "fix:ts": "eslint ./src --fix", - "graphql:codegen": "graphql-codegen --config codegen.yml" - }, - "engines": { - "node": "18.12.1" - }, - "packageManager": "yarn@3.4.1", - "dependencies": { - "@absinthe/socket": "0.2.1", - "@absinthe/socket-apollo-link": "0.2.1", - "@apollo/client": "3.7.10", - "@emotion/react": "11.10.6", - "@emotion/styled": "11.10.6", - "@pluralsh/design-system": "1.334.0", - "grommet": "2.31.0", - "honorable": "0.194.0", - "honorable-theme-default": "0.77.0", - "lodash": "4.17.21", - "phoenix": "1.7.2", - "react": "18.2.0", - "react-dom": "18.2.0", - "react-router-dom": "6.9.0", - "styled-components": "5.3.9" - }, - "devDependencies": { - "@graphql-codegen/add": "4.0.1", - "@graphql-codegen/cli": "3.2.2", - "@graphql-codegen/introspection": "3.0.1", - "@graphql-codegen/typescript": "3.0.2", - "@graphql-codegen/typescript-operations": "3.0.2", - "@graphql-codegen/typescript-react-apollo": "3.3.7", - "@pluralsh/eslint-config-typescript": "2.5.41", - "@types/absinthe__socket": "0.2.3", - "@types/absinthe__socket-apollo-link": "0.2.1", - "@types/phoenix": "1.5.5", - "@types/react": "18.0.28", - "@types/react-dom": "18.0.11", - "@types/styled-components": "5.1.26", - "@typescript-eslint/eslint-plugin": "5.56.0", - "@vitejs/plugin-react": "3.1.0", - "eslint": "8.33.0", - "eslint-plugin-import": "2.27.5", - "eslint-plugin-import-newlines": "1.3.1", - "eslint-plugin-jsx-a11y": "6.7.1", - "eslint-plugin-react": "7.32.2", - "eslint-plugin-react-hooks": "4.6.0", - "typescript": "5.0.2", - "vite": "4.2.1" - } -} diff --git a/pkg/ui/web/package.json.md5 b/pkg/ui/web/package.json.md5 deleted file mode 100755 index 3582d694a..000000000 --- a/pkg/ui/web/package.json.md5 +++ /dev/null @@ -1 +0,0 @@ -97ea82012b5185fffbbfdf3e3f33f8f9 \ No newline at end of file diff --git a/pkg/ui/web/public/favicon.ico b/pkg/ui/web/public/favicon.ico deleted file mode 100644 index e35d6828b49c9ab7efb6b64528c9c80edbbc74c3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 15406 zcmeHN&2QX96gPrDpd7ex$_e$@6KAeX(?B+9w)7*31O*Pj0T2kOh$2LhXbMe5tAa=% zp+P|u!3|N`01~9CMAH@|KKchhNYf^<_ru=x`tg2akFjCB8Smn?SJ={IvSW|mZ{Gag zdo$0YX?JLMYTLGHT=!{D+@)#vYns;A=ldSMso!vlo>gGC?Sy=7lAO{yGzo~)1Nh-^DloXri= zN21>WS?E)F=>;ks8mG#O&-%rhen;FB_#*Tj><>BBQ&Utud0dPI@5H-R`628QijN<<3hGYiQepg%>1=F-<_u%TTw+c!x2^OiY=Aj}XMzP> z0;jg@8!@kK+Ez=h2Hx3;4PI{Q6k;^O&-8J5fD8On)MXTQ7LB3)-vhW+$Jgm|E0E1{ zS5lBIu%|TcPW6`ePsg59(YvvCh){IIPjB3^ZL2!iNA`_VgDd;Z29M>d{?Eb)F0n6-tozI@px<7i}!xB}g^$(LsGp;K$-U9vuyZeC`msd3{s z7g7@P6~Hk5)y{uGj=o9G`faLx{wdFM!Jp?u z3)bKT>gv@>acqusK zi+yXP-({aH<6RQ+!-Q+{E8y$?EBT0>_K(+F##kAD5vOIWL##%7uuWy&nm&U)7spVQ z;`a~q@!KSC^IF-Ca^1C^|5Da*%6q`n_P`i7_TN!?f&WW8@+6$1)h4*K%9E4_2k+Gj z{YN*4cCPh`T^fb{RmOT;VCS0Wyxc3;B~F2v_3n*D*{)^(EY!WknJnll$B=y7%XOUV zIOjk{Ie@+Wfl)FJdS%~mILF30H~*e|Mz!9*r=yTJ@5vGNBwh9Qc*^c|JP_qws0 zzuB2{Gh%Nl@5icdu9AgZa0hwit;PV|0+YNN%U7s0@vw(~w~$YbhP)lScGhn4{PH{` zv=>esKkEiE(!oDK)ydZhoU$){uTYjahjNXmTJ`4%bDJ7|o^yk9b_UyFi8-KB%1=E` zjbDDw4F0(D4%=y5y^>A*>}$n20`DwAv#|;M>;vSLHh&~WosGCzEuDo0-- zW8Cvo0pF5E{N?AKCVTk@_geWcU{5bbwUt5-R2-h4J>WdfH zzZCs3WC}m?ygD^WPPrV$9r)$kzD1QIhy682rtovzw?0{L&k_YNhyJxJGT%Gn+BMrj z=J4~kLY#k!yt0fR{5f%q?e^c_0Ofd`jdiNL`f@h;13o-9!S;Jq!VTB3-)|N}el%13 z5q^Cam7jUi^PfBq!hhEIjNLlbzrILD#{H*^U!_B1RDJUeGUw;WoSmV{Ye&c!^Y#fD zk6&^O@=U8di|Ds!2|usBz~N@tRN7MKKd*hU23A=s;~A{2vBs8TOB+A-9@vA}mv}Ft zvS;DF4fZ&KQ}9<xi_aguk-^G z)DqNeab;B@0H6mK0D$uZ00;_TT6g>9mFby&l7IYYRDWQg_o|X?Y-{KM0Dz$a0HDM_ z)+w`MxZT*zg%AKh-2Blf{vZ_kifGEr!Q2)AfZ_lE!0!M6c(fcg)H!oQ=bzZ_z8}s1 zuLaTE#?uS{K>wkNjsZa4*rAUOwic#_CO_*2{E%$_0iO-6-{Ob-;o5%uUq2v$ng{=D zVe8@n0067}p!a7juVX;EwT->;j}D39r@op0p!{(UZfofAvo6qo^%4FDP-ui>J40Jj z0HEXKCwB0s#`x)*rBnxdXP2M)s(v&m|LMNl089=}ra!TWG(Udr4VL?40Y5da4AlLr9U3v*z0@WK z25uehZ2O;F^zw|4HwWRlT$!ts;mEakE#Zx!&PYf6}mS zy0O%iWLWIBK}rb|MF%R#Cjlj9D^X$?yjv5x1$i2Z@Q8?nMDkZz1ml#J$|pSdY&_3D zZ&a`1I`v)`Q_i~u&FJ+elbPGwZN}b@c~mk@i`)=)DmxTd6Qr20g3x042zS`$sulPS zHS>-?lWYX{?>O>Wj-bX)^#jreg!pO>&?Dl!>)*m5af#WZ!%tr}Ad0B~Yt;kdfAwn4 zuRHat4e(Yz!A;v)_a8LY|InUKcgk1|t0u_o&uV)HQ>@C9ohoHv^5%^b|25#!sM9}4E=uI40uCbX`V+ZWbaw3@EeTG?c;WUUcntaxWotC&v9EkyEwOC^M�(N_ z%kTMx_1l^O*4IIEUu=&^Cw-*N?hhwI_gr~B?;GCxTlDK==5)&D%Jc=`TI*m3mv;i&?S=$i$ z8+19YtFN8wHrKSC92Hxir8eTZ62?-NZ?8jFq4p1WeghrrvF-<1PIjyty(-IP9_!re z7S0&&E2o{CtcVJJ-9|92Lfe?mTsP^Xu9Kq>$bIu*hOuSY#;5Ryh=2!jA$>a`wfmxlB?+o*; zSlrKJqeG+kWDGxd7`p-9wn9(wre(IHLa_JWk4VggB})%!dKYa#i)INWTQcd6i>6Yy zl&>HO2bHQn@2_eSltQv9>Zt#*Pe4FfKtT9g*ENWvwCFfkqrXM8RL1t#WR+&GWOss>Xw5^KF&eO1m-837xR{n?z8pF8$F@0sn#xB@_< zT3L_C(ZBLF*^Ux~G3UF8Xp5t|h@20Dk}Tk=D^J&z5KcJFa}tkj+}t=ivw!ET@JjQn zL>m*yW=S&P?`Nnank~p$FV07^D^F{iwU0AfPqQ^HUfikOcWkTJ^V_Gmr#gM_qX1W%z+nk$|rkZpP%?jdp@*tD8nv}0(qKl>B zPSYO~DeqI0bK9D!MU6iT7Mf-0En=0cQZj@QsAqElVoe3Cwifab9SgaEu>Tyz7&0Pc zjHnjJ;^7*k*sN?h^M8B%8K&7I<~w3$y9L|e?EBTT$3gxQsQ;3@(>8-ANF|jtBvC~& zfqhAP-c+KK2<9X#b&yi=G!M@uz#XaXqa__-51=;G0CY5wq9H~-3rDwI9&-T0+T*6X_t$QNM?lqU1gDpoe!Wdf5GbjzaORy1U zf5Qgj5%x-B!ih6xOnd&4k$qvrPR%*!Iiu7EHe*TR2Ze?tE>uK?L7D@3gglTb!W4^{ zvi|iI=b?r;$%L#a>Z-PXN6Gp+C32UgvTLbGCILDtg}G0fMX8jYN*Z(8 zMYWVp%9=(gsbYo{dxtXEKCPUj5V$rKXT_xgVU@y{Kj;EUFU68rj7%?q#(j!>5cxs6 za#(?zY^+3hd{~qf-{_?EZpE)zvDI9vleAO3I+OjiuBmNlY+Eti+{{+5TpxlhTfayl zgTf-mHjchVsz2_wMhS6{XOrx+M*RK-#>c_c`rjU>Zmo?oik7nk7YziGP?zbtr8rVR z$DJT~&M~Bh+b~(cA*B@P*m=%!Nr!y(neZT1d-_@Mk=|I~d*(AKKk03z2F23eLoVUKZ;bAH3Xz-@m*}ACv1fq5t&1d7erbt1h5hpq9k52b_N$uC)kD7-4Ejl zm<;=pnz%!^41dON|8YDMrU<_jezb|2(i#eurw^2-=Ml_D-&v}?jsaRoXe-hjh>@Mr zrg2{qFxGTeGG=>Kqy~VJS8z07483AV?I-2in(+}p5BrB{h+JcGA0~Kl;lgG+HF~g33Sm}8WDdhTsA5+ILx_qN9p$b z&eq3eqt-cGx)|sqe>JsLAk`Lz)1Ou;Kw75RwOUC2rXtma-rfZP#QoCxH;*qSO{PD| zVKELWN(2sKQF2HaUnsJ`G_YKNwzU!4u;9SmBL@?9Rwk;tweiOb;i71x&u3|B#f3~Q zC`_@X0XZ)5t?A-6S=jP*jr2=%0D-e|OtgM2mIBqKOxD4Unr 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