From e64c2c21ab48ba426975caf5e6940ee919295ebf Mon Sep 17 00:00:00 2001 From: Oleg Yevik Date: Thu, 12 Oct 2023 00:05:53 +1300 Subject: [PATCH 1/4] Sentry Events support (#100) --- README.md | 19 ++++- pkg/plugin/handlers_query.go | 26 ++++++ pkg/plugin/handlers_query_response.go | 11 +++ pkg/plugin/handlers_query_test.go | 53 ++++++++++++ pkg/sentry/events.go | 84 +++++++++++++++++++ src/app/replace.spec.ts | 17 +++- src/app/replace.ts | 7 ++ .../query-editor/EventsEditor.spec.tsx | 20 +++++ src/components/query-editor/EventsEditor.tsx | 76 +++++++++++++++++ src/components/query-editor/ScopePicker.tsx | 2 +- src/constants.ts | 9 ++ src/editors/SentryQueryEditor.tsx | 2 + src/selectors.ts | 17 ++++ src/types.ts | 12 ++- 14 files changed, 348 insertions(+), 7 deletions(-) create mode 100644 pkg/sentry/events.go create mode 100644 src/components/query-editor/EventsEditor.spec.tsx create mode 100644 src/components/query-editor/EventsEditor.tsx diff --git a/README.md b/README.md index 00c73e7..f0f4f86 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ The Sentry data source has the following requirements: ## Known limitations -With the Grafana Sentry data source plugin, you are able to visualize issues or usage statistics within an organization. For more information, see [Issues](https://docs.sentry.io/product/issues/) and [Org Stats](https://docs.sentry.io/product/accounts/quotas/org-stats/). +With the Grafana Sentry data source plugin, you are able to visualize issues, events or usage statistics within an organization. For more information, see [Issues](https://docs.sentry.io/product/issues/), [Events](https://docs.sentry.io/product/discover-queries/) and [Org Stats](https://docs.sentry.io/product/accounts/quotas/org-stats/). ## Install the Sentry data source plugin @@ -65,7 +65,7 @@ datasources: ## Query the data source -The query editor allows you to query Sentry, get sentry issues and stats and display them in Grafana dashboard panels. You can choose one of the following query types, to get the relevant data. +The query editor allows you to query Sentry, get sentry issues, events and stats and display them in Grafana dashboard panels. You can choose one of the following query types, to get the relevant data. ### Sentry issues @@ -80,6 +80,19 @@ To get the list of Sentry issues, select **Sentry Issues** as the query type. Is | Sort By | (optional) Select the order of results you want to display. | | Limit | (optional) Limit the number of results displayed. | +### Sentry events + +To get the list of Sentry events, select **Sentry Events** as the query type. Events are filtered based on Grafana’s selected time range. + +| Field | Description | +| ------------ | -------------------------------------------------------------------------------------------------------------------------------------------- | +| Query Type | Choose **Events** as query type. | +| Projects | (optional) Select one or more projects to filter the results. | +| Environments | (optional) Select one or more environments to filter the results. | +| Query | (optional) Enter your sentry query to get the relevant results. More on [query syntax](https://docs.sentry.io/product/sentry-basics/search/) | +| Sort By | (optional) Select the order of results you want to display. | +| Limit | (optional) Limit the number of results displayed. Max limit - 100. | + ### Sentry Org stats To get the trend of Sentry Org stats, select **Stats** as the query type. Org stats are filtered based on Grafana’s selected time range. @@ -113,4 +126,4 @@ Annotations give you the ability to overlay Sentry issues on graphs. In the anno - Add [Annotations](https://grafana.com/docs/grafana/latest/dashboards/annotations/). - Configure and use [Templates and variables](https://grafana.com/docs/grafana/latest/variables/). - Add [Transformations](https://grafana.com/docs/grafana/latest/panels/transformations/). -- Set up alerting; refer to [Alerts overview](https://grafana.com/docs/grafana/latest/alerting/). +- Set up alerting; refer to [Alerts overview](https://grafana.com/docs/grafana/latest/alerting/). \ No newline at end of file diff --git a/pkg/plugin/handlers_query.go b/pkg/plugin/handlers_query.go index 49aeacd..dda3d15 100644 --- a/pkg/plugin/handlers_query.go +++ b/pkg/plugin/handlers_query.go @@ -16,6 +16,9 @@ type SentryQuery struct { IssuesQuery string `json:"issuesQuery,omitempty"` IssuesSort string `json:"issuesSort,omitempty"` IssuesLimit int64 `json:"issuesLimit,omitempty"` + EventsQuery string `json:"eventsQuery,omitempty"` + EventsSort string `json:"eventsSort,omitempty"` + EventsLimit int64 `json:"eventsLimit,omitempty"` StatsCategory []string `json:"statsCategory,omitempty"` StatsFields []string `json:"statsFields,omitempty"` StatsGroupBy []string `json:"statsGroupBy,omitempty"` @@ -73,6 +76,29 @@ func QueryData(ctx context.Context, pCtx backend.PluginContext, backendQuery bac } frame = UpdateFrameMeta(frame, executedQueryString, query, client.BaseURL, client.OrgSlug) response.Frames = append(response.Frames, frame) + case "events": + if client.OrgSlug == "" { + return GetErrorResponse(response, "", ErrorInvalidOrganizationSlug) + } + events, executedQueryString, err := client.GetEvents(sentry.GetEventsInput{ + OrganizationSlug: client.OrgSlug, + ProjectIds: query.ProjectIds, + Environments: query.Environments, + Query: query.EventsQuery, + Sort: query.EventsSort, + Limit: query.EventsLimit, + From: backendQuery.TimeRange.From, + To: backendQuery.TimeRange.To, + }) + if err != nil { + return GetErrorResponse(response, executedQueryString, err) + } + frame, err := framestruct.ToDataFrame(GetFrameName("Events", backendQuery.RefID), events) + if err != nil { + return GetErrorResponse(response, executedQueryString, err) + } + frame = UpdateFrameMeta(frame, executedQueryString, query, client.BaseURL, client.OrgSlug) + response.Frames = append(response.Frames, frame) case "statsV2": if client.OrgSlug == "" { return GetErrorResponse(response, "", ErrorInvalidOrganizationSlug) diff --git a/pkg/plugin/handlers_query_response.go b/pkg/plugin/handlers_query_response.go index 5afe689..a8a0f76 100644 --- a/pkg/plugin/handlers_query_response.go +++ b/pkg/plugin/handlers_query_response.go @@ -27,6 +27,17 @@ func UpdateFrameMeta(frame *data.Frame, executedQueryString string, query Sentry }, } } + if frame.Fields[i].Name == "ID" && query.QueryType == "events" { + frame.Fields[i].Config = &data.FieldConfig{ + Links: []data.DataLink{ + { + Title: "Open in Sentry", + URL: fmt.Sprintf("https://%s.sentry.io/discover/${__data.fields[\"Project\"]}:${__data.fields[\"ID\"]}/", orgSlug), + TargetBlank: true, + }, + }, + } + } } return frame } diff --git a/pkg/plugin/handlers_query_test.go b/pkg/plugin/handlers_query_test.go index b716dcd..9909643 100644 --- a/pkg/plugin/handlers_query_test.go +++ b/pkg/plugin/handlers_query_test.go @@ -135,5 +135,58 @@ func TestSentryDatasource_QueryData(t *testing.T) { require.Equal(t, "Category=foo2, Reason=bar", res.Frames[0].Fields[3].Labels.String()) require.Equal(t, "Category=foo2, Reason=bar", res.Frames[0].Fields[4].Labels.String()) }) + t.Run("valid events query should produce correct result", func(t *testing.T) { + sc := NewFakeClient(fakeDoer{Body: `{ + "data": [ + { + "id": "event_id_1", + "title": "event_title_1", + "message": "event_description", + "project.name": "project_name_1" + }, + { + "id": "event_id_2", + "title": "event_title_2", + "message": "event_description", + "project.name": "project_name_1" + }, + { + "id": "event_id_3", + "title": "event_title_3", + "message": "event_description", + "project.name": "project_name_2" + } + ], + "meta": { + "fields": { + "id": "string", + "title": "string", + "message": "string", + "project.name": "string" + } + } + }`}) + query := `{ + "queryType" : "events", + "projectIds" : ["project_id"], + "environments" : ["dev"], + "eventsQuery" : "event_query", + "eventsSort" : "event_sort", + "eventsLimit" : 10 + }` + res := plugin.QueryData(context.Background(), backend.PluginContext{}, backend.DataQuery{RefID: "A", JSON: []byte(query)}, *sc) + + // Assert that there are no errors and the data frame is correctly formed + assert.Nil(t, res.Error) + require.Equal(t, 1, len(res.Frames)) + assert.Equal(t, "Events (A)", res.Frames[0].Name) + // Assert the content of the data frame + frame := res.Frames[0] + require.NotNil(t, frame.Fields) + require.Equal(t, 11, len(frame.Fields)) + assert.Equal(t, 3, frame.Fields[0].Len()) + require.Equal(t, "ID", frame.Fields[0].Name) + require.Equal(t, "Title", frame.Fields[1].Name) + }) } diff --git a/pkg/sentry/events.go b/pkg/sentry/events.go new file mode 100644 index 0000000..a8f0b2f --- /dev/null +++ b/pkg/sentry/events.go @@ -0,0 +1,84 @@ +package sentry + +import ( + "fmt" + "net/url" + "strconv" + "time" +) + +var reqFields = [...]string{ + "id", + "title", + "project", + "project.id", + "release", + "count()", + "epm()", + "last_seen()", + "level", + "event.type", + "platform", +} + +type SentryEvents struct { + Data []SentryEvent `json:"data"` + Meta map[string]interface{} `json:"meta"` +} + +type SentryEvent struct { + ID string `json:"id"` + Title string `json:"title"` + Project string `json:"project"` + ProjectId int64 `json:"project.id"` + Release string `json:"release"` + Count int64 `json:"count()"` + EventsPerMinute float64 `json:"epm()"` + LastSeen time.Time `json:"last_seen()"` + Level string `json:"level"` + EventType string `json:"event.type"` + Platform string `json:"platform"` +} + +type GetEventsInput struct { + OrganizationSlug string + ProjectIds []string + Environments []string + Query string + From time.Time + To time.Time + Sort string + Limit int64 +} + +func (gei *GetEventsInput) ToQuery() string { + urlPath := fmt.Sprintf("/api/0/organizations/%s/events/?", gei.OrganizationSlug) + if gei.Limit < 1 || gei.Limit > 100 { + gei.Limit = 100 + } + params := url.Values{} + params.Set("query", gei.Query) + params.Set("start", gei.From.Format("2006-01-02T15:04:05")) + params.Set("end", gei.To.Format("2006-01-02T15:04:05")) + if gei.Sort != "" { + params.Set("sort", gei.Sort) + } + params.Set("per_page", strconv.FormatInt(gei.Limit, 10)) + for _, field := range reqFields { + params.Add("field", field) + } + for _, projectId := range gei.ProjectIds { + params.Add("project", projectId) + } + for _, environment := range gei.Environments { + params.Add("environment", environment) + } + return urlPath + params.Encode() +} + +func (sc *SentryClient) GetEvents(gei GetEventsInput) ([]SentryEvent, string, error) { + var out SentryEvents + executedQueryString := gei.ToQuery() + err := sc.Fetch(executedQueryString, &out) + return out.Data, sc.BaseURL + executedQueryString, err +} diff --git a/src/app/replace.spec.ts b/src/app/replace.spec.ts index 87704b7..20a7691 100644 --- a/src/app/replace.spec.ts +++ b/src/app/replace.spec.ts @@ -1,6 +1,6 @@ import { ScopedVars } from '@grafana/data'; import * as runtime from '@grafana/runtime'; -import { SentryIssuesQuery, SentryStatsV2Query } from 'types'; +import { SentryIssuesQuery, SentryEventsQuery, SentryStatsV2Query } from 'types'; import { applyTemplateVariables, replaceProjectIDs } from './replace'; describe('replace', () => { @@ -74,6 +74,21 @@ describe('replace', () => { expect(output.issuesQuery).toStrictEqual('hello bar'); }); + it('should interpolate template variables for events', () => { + const query: SentryEventsQuery = { + refId: '', + queryType: 'events', + projectIds: ['${foo}', 'baz'], + environments: ['${foo}', 'baz'], + eventsQuery: 'hello ${foo}', + }; + + const output = applyTemplateVariables(query, { foo: { value: 'bar', text: 'bar' } }) as SentryEventsQuery; + expect(output.projectIds).toStrictEqual(['bar', 'baz']); + expect(output.environments).toStrictEqual(['bar', 'baz']); + expect(output.eventsQuery).toStrictEqual('hello bar'); + }); + it('should interpolate template variables for statsV2', () => { const query: SentryStatsV2Query = { refId: '', diff --git a/src/app/replace.ts b/src/app/replace.ts index 05ab5f8..2378edd 100644 --- a/src/app/replace.ts +++ b/src/app/replace.ts @@ -26,6 +26,13 @@ export const applyTemplateVariables = (query: SentryQuery, scopedVars: ScopedVar projectIds: interpolateVariableArray(query.projectIds, scopedVars), environments: interpolateVariableArray(query.environments, scopedVars), }; + case 'events': + return { + ...query, + eventsQuery: interpolateVariable(query.eventsQuery || '', scopedVars), + projectIds: interpolateVariableArray(query.projectIds, scopedVars), + environments: interpolateVariableArray(query.environments, scopedVars), + }; case 'statsV2': return { ...query, diff --git a/src/components/query-editor/EventsEditor.spec.tsx b/src/components/query-editor/EventsEditor.spec.tsx new file mode 100644 index 0000000..39a4206 --- /dev/null +++ b/src/components/query-editor/EventsEditor.spec.tsx @@ -0,0 +1,20 @@ +import React from 'react'; +import { render } from '@testing-library/react'; +import { EventsEditor } from './EventsEditor'; +import type { SentryEventsQuery } from '../../types'; + +describe('EventsEditor', () => { + it('should render without error', () => { + const query = { + queryType: 'events', + projectIds: [], + environments: [], + eventsQuery: '', + refId: 'A', + } as SentryEventsQuery; + const onChange = jest.fn(); + const onRunQuery = jest.fn(); + const result = render(); + expect(result.container.firstChild).not.toBeNull(); + }); +}); diff --git a/src/components/query-editor/EventsEditor.tsx b/src/components/query-editor/EventsEditor.tsx new file mode 100644 index 0000000..4d0e369 --- /dev/null +++ b/src/components/query-editor/EventsEditor.tsx @@ -0,0 +1,76 @@ +import React from 'react'; +import { Input, QueryField, Select } from '@grafana/ui'; +import { selectors } from '../../selectors'; +import { SentryEventSortOptions } from '../../constants'; +import type { SentryEventSort, SentryEventsQuery } from '../../types'; +import { EditorField, EditorFieldGroup, EditorRow } from '@grafana/experimental'; + +interface EventsEditorProps { + query: SentryEventsQuery; + onChange: (value: SentryEventsQuery) => void; + onRunQuery: () => void; +} + +export const EventsEditor = ({ query, onChange, onRunQuery }: EventsEditorProps) => { + const onEventsQueryChange = (eventsQuery: string) => { + onChange({ ...query, eventsQuery }); + }; + const onEventsSortChange = (eventsSort: SentryEventSort) => { + onChange({ ...query, eventsSort: eventsSort }); + onRunQuery(); + }; + const onEventsLimitChange = (eventsLimit?: number) => { + onChange({ ...query, eventsLimit: eventsLimit }); + }; + return ( + <> + + + onEventsQueryChange(val)} + onRunQuery={onRunQuery} + placeholder={selectors.components.QueryEditor.Events.Query.placeholder} + portalOrigin="Sentry" + /> + + + + + + onEventsLimitChange(e.currentTarget.valueAsNumber)} + onBlur={onRunQuery} + width={32} + className="inline-element" + placeholder={selectors.components.QueryEditor.Events.Limit.placeholder} + /> + + + + + ); +}; diff --git a/src/components/query-editor/ScopePicker.tsx b/src/components/query-editor/ScopePicker.tsx index 5d87cc7..83d7510 100644 --- a/src/components/query-editor/ScopePicker.tsx +++ b/src/components/query-editor/ScopePicker.tsx @@ -17,7 +17,7 @@ type ScopePickerProps = { hideEnvironments?: boolean } & Pick< export const ScopePicker = (props: ScopePickerProps) => { const { query, onChange, onRunQuery, datasource, hideEnvironments = false } = props; const { projectIds } = query; - const environments = query.queryType === 'issues' ? query.environments : []; + const environments = query.queryType === 'issues' || query.queryType === 'events' ? query.environments : []; const [projects, setProjects] = useState([]); const [allEnvironments, setAllEnvironments] = useState([]); const orgSlug = datasource.getOrgSlug(); diff --git a/src/constants.ts b/src/constants.ts index f7803bb..91db1c5 100644 --- a/src/constants.ts +++ b/src/constants.ts @@ -2,6 +2,7 @@ import type { SelectableValue } from '@grafana/data'; import type { QueryType, SentryIssueSort, + SentryEventSort, SentryStatsV2QueryField, SentryStatsV2QueryGroupBy, SentryStatsV2QueryCategory, @@ -10,6 +11,7 @@ import type { export const QueryTypeOptions: Array> = [ { value: 'issues', label: 'Issues' }, + { value: 'events', label: 'Events' }, { value: 'statsV2', label: 'Stats' }, ]; export const SentryIssueSortOptions: Array> = [ @@ -20,6 +22,13 @@ export const SentryIssueSortOptions: Array> = [ { value: 'freq', label: 'Events' }, { value: 'user', label: 'Users' }, ]; +export const SentryEventSortOptions: Array> = [ + { value: 'last_seen()', label: 'Last Seen' }, + { value: 'count()', label: 'Count' }, + { value: 'epm()', label: 'Events per minute' }, + { value: 'failure_rate()', label: 'Failure rate' }, + { value: 'level', label: 'Level' }, +]; export const SentryStatsV2QueryFieldOptions: Array> = [ { value: 'sum(quantity)', label: 'sum(quantity)' }, { value: 'sum(times_seen)', label: 'sum(times_seen)' }, diff --git a/src/editors/SentryQueryEditor.tsx b/src/editors/SentryQueryEditor.tsx index b3c2de2..609d731 100644 --- a/src/editors/SentryQueryEditor.tsx +++ b/src/editors/SentryQueryEditor.tsx @@ -4,6 +4,7 @@ import { Error } from '../components/Error'; import { QueryTypePicker } from './../components/query-editor/QueryTypePicker'; import { ScopePicker } from './../components/query-editor/ScopePicker'; import { IssuesEditor } from './../components/query-editor/IssuesEditor'; +import { EventsEditor } from './../components/query-editor/EventsEditor'; import { StatsV2Editor } from './../components/query-editor/StatsV2Editor'; import type { QueryEditorProps } from '@grafana/data'; import type { SentryConfig, SentryQuery } from './../types'; @@ -28,6 +29,7 @@ export const SentryQueryEditor = (props: SentryQueryEditorProps) => { {query.queryType === 'statsV2' ? ( ) : null} + {query.queryType === 'events' ? : null} ); }; diff --git a/src/selectors.ts b/src/selectors.ts index ffd0932..5a8a04d 100644 --- a/src/selectors.ts +++ b/src/selectors.ts @@ -68,6 +68,23 @@ export const Components = { placeholder: '100', }, }, + Events: { + Query: { + label: 'Query', + tooltip: 'Sentry query to filter the results', + placeholder: 'Enter a Sentry query (run with Shift+Enter)', + }, + Sort: { + label: 'Sort By', + tooltip: 'Sort results', + placeholder: 'Optional', + }, + Limit: { + label: 'Limit', + tooltip: 'Number of results (100 max)', + placeholder: '100', + }, + }, StatsV2: { Field: { label: 'Field', diff --git a/src/types.ts b/src/types.ts index 9de2088..424d6b4 100644 --- a/src/types.ts +++ b/src/types.ts @@ -37,6 +37,7 @@ export type SentryTeam = { status?: string; }; export type SentryIssueSort = 'inbox' | 'new' | 'date' | 'priority' | 'freq' | 'user'; +export type SentryEventSort = 'last_seen()' | 'count()' | 'epm()' | 'failure_rate()' | 'level'; //#endregion //#region Config @@ -51,7 +52,7 @@ export interface SentrySecureConfig { //#endregion //#region Query -export type QueryType = 'issues' | 'statsV2'; +export type QueryType = 'issues' | 'events' | 'statsV2'; export type SentryQueryBase = { queryType: T } & DataQuery; export type SentryIssuesQuery = { projectIds: string[]; @@ -60,6 +61,13 @@ export type SentryIssuesQuery = { issuesSort?: SentryIssueSort; issuesLimit?: number; } & SentryQueryBase<'issues'>; +export type SentryEventsQuery = { + projectIds: string[]; + environments: string[]; + eventsQuery: string; + eventsSort?: SentryEventSort; + eventsLimit?: number; +} & SentryQueryBase<'events'>; export type SentryStatsV2QueryField = 'sum(quantity)' | 'sum(times_seen)'; export type SentryStatsV2QueryGroupBy = 'outcome' | 'reason' | 'category'; export type SentryStatsV2QueryCategory = 'transaction' | 'error' | 'attachment' | 'default' | 'session' | 'security'; @@ -72,7 +80,7 @@ export type SentryStatsV2Query = { statsOutcome: SentryStatsV2QueryOutcome[]; statsReason: string[]; } & SentryQueryBase<'statsV2'>; -export type SentryQuery = SentryIssuesQuery | SentryStatsV2Query; +export type SentryQuery = SentryIssuesQuery | SentryEventsQuery | SentryStatsV2Query; //#endregion //#region Variable Query From c77d31d2e52b5111627bc8f53b120432ec6bd1a7 Mon Sep 17 00:00:00 2001 From: Andreas Christou Date: Wed, 11 Oct 2023 17:58:22 +0100 Subject: [PATCH 2/4] Dependabot reviewer (#105) --- .github/dependabot-reviewer.yml | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 .github/dependabot-reviewer.yml diff --git a/.github/dependabot-reviewer.yml b/.github/dependabot-reviewer.yml new file mode 100644 index 0000000..548def2 --- /dev/null +++ b/.github/dependabot-reviewer.yml @@ -0,0 +1,15 @@ +name: Dependabot reviewer + +on: pull_request_target + +permissions: + pull-requests: write + contents: write + +jobs: + call-workflow-passing-data: + uses: grafana/security-github-actions/.github/workflows/dependabot-automerge.yaml@main + # with: + # Add this to define production packages that dependabot can auto-update if the bump is minor + # packages-minor-autoupdate: '[]' + secrets: inherit From 497ca8d55956e091c4dcb2cc9ae7deeb2b95ce28 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 11 Oct 2023 19:49:37 +0200 Subject: [PATCH 3/4] Bump @testing-library/dom from 7.31.2 to 9.3.3 (#102) Signed-off-by: dependabot[bot] Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com> Co-authored-by: Andreas Christou --- package.json | 2 +- yarn.lock | 315 ++++++++++++++++++++------------------------------- 2 files changed, 123 insertions(+), 194 deletions(-) diff --git a/package.json b/package.json index 33fafe3..f512837 100644 --- a/package.json +++ b/package.json @@ -44,7 +44,7 @@ "@swc/core": "1.3.75", "@swc/helpers": "^0.5.0", "@swc/jest": "^0.2.26", - "@testing-library/dom": "^7.31.0", + "@testing-library/dom": "^9.3.3", "@testing-library/jest-dom": "^5.16.5", "@testing-library/react": "^12.1.4", "@testing-library/user-event": "^14.5.1", diff --git a/yarn.lock b/yarn.lock index cce43e9..d91763b 100644 --- a/yarn.lock +++ b/yarn.lock @@ -23,28 +23,7 @@ "@jridgewell/gen-mapping" "^0.1.0" "@jridgewell/trace-mapping" "^0.3.9" -"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.14.5.tgz#23b08d740e83f49c5e59945fbf1b43e80bbf4edb" - integrity sha512-9pzDqyc6OLDaqe+zbACgFkb6fKMNG6CObKpnYXChRsvYGyEdc7CA2BaqeOM+vOtCS5ndmJicPJhKAwYRI6UfFw== - dependencies: - "@babel/highlight" "^7.14.5" - -"@babel/code-frame@^7.12.13", "@babel/code-frame@^7.16.7", "@babel/code-frame@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.18.6.tgz#3b25d38c89600baa2dcc219edfa88a74eb2c427a" - integrity sha512-TDCmlK5eOvH+eH7cdAFlNXeVJqWIQ7gW9tY1GJIpUtFb6CmjVyq2VM3u71bOyR8CRihcCgMUYoDNyLXao3+70Q== - dependencies: - "@babel/highlight" "^7.18.6" - -"@babel/code-frame@^7.21.4": - version "7.21.4" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.21.4.tgz#d0fa9e4413aca81f2b23b9442797bda1826edb39" - integrity sha512-LYvhNKfwWSPpocw8GI7gpK2nq3HSDuEPC/uSYaALSJu9xjsalaaYFOq0Pwt5KmVqwEbZlDu81aLXwBOmD/Fv9g== - dependencies: - "@babel/highlight" "^7.18.6" - -"@babel/code-frame@^7.22.13": +"@babel/code-frame@^7.0.0", "@babel/code-frame@^7.10.4", "@babel/code-frame@^7.12.13", "@babel/code-frame@^7.14.5", "@babel/code-frame@^7.16.7", "@babel/code-frame@^7.18.6", "@babel/code-frame@^7.21.4", "@babel/code-frame@^7.22.13": version "7.22.13" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.22.13.tgz#e3c1c099402598483b7a8c46a721d1038803755e" integrity sha512-XktuhWlJ5g+3TJXc5upd9Ks1HutSArik6jf2eAjYFyIOf4ej3RN+184cZbzDvbPnuTJIUhPKKJE3cIsYTiAT3w== @@ -515,12 +494,12 @@ resolved "https://registry.yarnpkg.com/@babel/helper-string-parser/-/helper-string-parser-7.22.5.tgz#533f36457a25814cf1df6488523ad547d784a99f" integrity sha512-mM4COjgZox8U+JcXQwPijIZLElkgEpO5rsERVDJTc2qfCDfERyob6k5WegS14SX18IIjv+XD+GrqNumY5JRCDw== -"@babel/helper-validator-identifier@^7.14.5", "@babel/helper-validator-identifier@^7.14.9": +"@babel/helper-validator-identifier@^7.14.9": version "7.15.7" resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.15.7.tgz#220df993bfe904a4a6b02ab4f3385a5ebf6e2389" integrity sha512-K4JvCtQqad9OY2+yTU8w+E82ywk/fe+ELNlt1G8z3bVGlZfn/hOcQQsUhGhW/N+tb3fxK800wLtKOE/aM0m72w== -"@babel/helper-validator-identifier@^7.18.6", "@babel/helper-validator-identifier@^7.19.1": +"@babel/helper-validator-identifier@^7.19.1": version "7.19.1" resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.19.1.tgz#7eea834cf32901ffdc1a7ee555e2f9c27e249ca2" integrity sha512-awrNfaMtnHUr653GgGEs++LlAvW6w+DcPrOliSMXWCKo597CwL5Acf/wWdNkf/tfEQE3mjkeD1YOVZOUV/od1w== @@ -582,24 +561,6 @@ "@babel/traverse" "^7.21.0" "@babel/types" "^7.21.0" -"@babel/highlight@^7.14.5": - version "7.14.5" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.14.5.tgz#6861a52f03966405001f6aa534a01a24d99e8cd9" - integrity sha512-qf9u2WFWVV0MppaL877j2dBtQIDgmidgjGk5VIMw3OadXvYaXn66U1BFlH2t4+t3i+8PhedppRv+i40ABzd+gg== - dependencies: - "@babel/helper-validator-identifier" "^7.14.5" - chalk "^2.0.0" - js-tokens "^4.0.0" - -"@babel/highlight@^7.18.6": - version "7.18.6" - resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.18.6.tgz#81158601e93e2563795adcbfbdf5d64be3f2ecdf" - integrity sha512-u7stbOuYjaPezCuLj29hNW1v64M2Md2qupEKP1fHc7WdOA3DgLh37suiSrZYY7haUB7iBeQZ9P1uiRF359do3g== - dependencies: - "@babel/helper-validator-identifier" "^7.18.6" - chalk "^2.0.0" - js-tokens "^4.0.0" - "@babel/highlight@^7.22.13": version "7.22.13" resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.22.13.tgz#9cda839e5d3be9ca9e8c26b6dd69e7548f0cbf16" @@ -1280,42 +1241,13 @@ resolved "https://registry.yarnpkg.com/@babel/regjsgen/-/regjsgen-0.8.0.tgz#f0ba69b075e1f05fb2825b7fad991e7adbb18310" integrity sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA== -"@babel/runtime-corejs3@^7.10.2": - version "7.15.4" - resolved "https://registry.yarnpkg.com/@babel/runtime-corejs3/-/runtime-corejs3-7.15.4.tgz#403139af262b9a6e8f9ba04a6fdcebf8de692bf1" - integrity sha512-lWcAqKeB624/twtTc3w6w/2o9RqJPaNBhPGK6DKLSiwuVWC7WFkypWyNg+CpZoyJH0jVzv1uMtXZ/5/lQOLtCg== - dependencies: - core-js-pure "^3.16.0" - regenerator-runtime "^0.13.4" - -"@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.12.0", "@babel/runtime@^7.12.13", "@babel/runtime@^7.15.4", "@babel/runtime@^7.18.3", "@babel/runtime@^7.6.2": - version "7.19.0" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.19.0.tgz#22b11c037b094d27a8a2504ea4dcff00f50e2259" - integrity sha512-eR8Lo9hnDS7tqkO7NsV+mKvCmv5boaXFSZ70DnfhcgiEne8hv9oCEd36Klw74EtizEqLsy4YnW8UWwpBVolHZA== - dependencies: - regenerator-runtime "^0.13.4" - -"@babel/runtime@^7.10.1", "@babel/runtime@^7.10.2", "@babel/runtime@^7.11.1", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.5", "@babel/runtime@^7.5.5", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2": - version "7.15.4" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.15.4.tgz#fd17d16bfdf878e6dd02d19753a39fa8a8d9c84a" - integrity sha512-99catp6bHCaxr4sJ/DbTGgHS4+Rs2RVd2g7iOap6SLGPDknRK9ztKNsE/Fg6QhSeh1FGE5f6gHGQmvvn3I3xhw== - dependencies: - regenerator-runtime "^0.13.4" - -"@babel/runtime@^7.12.1", "@babel/runtime@^7.19.4", "@babel/runtime@^7.20.7", "@babel/runtime@^7.21.0": +"@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.10.1", "@babel/runtime@^7.11.1", "@babel/runtime@^7.11.2", "@babel/runtime@^7.12.0", "@babel/runtime@^7.12.1", "@babel/runtime@^7.12.13", "@babel/runtime@^7.12.5", "@babel/runtime@^7.15.4", "@babel/runtime@^7.18.0", "@babel/runtime@^7.18.3", "@babel/runtime@^7.19.4", "@babel/runtime@^7.20.0", "@babel/runtime@^7.20.6", "@babel/runtime@^7.20.7", "@babel/runtime@^7.21.0", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.2", "@babel/runtime@^7.8.4", "@babel/runtime@^7.8.7", "@babel/runtime@^7.9.2": version "7.22.15" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.22.15.tgz#38f46494ccf6cf020bd4eed7124b425e83e523b8" integrity sha512-T0O+aa+4w0u06iNmapipJXMV4HoUir03hpx3/YqXXhu9xim3w+dVphjFWl1OH8NbZHw5Lbm9k45drDkgq2VNNA== dependencies: regenerator-runtime "^0.14.0" -"@babel/runtime@^7.18.0", "@babel/runtime@^7.20.0", "@babel/runtime@^7.20.6": - version "7.21.0" - resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.21.0.tgz#5b55c9d394e5fcf304909a8b00c07dc217b56673" - integrity sha512-xwII0//EObnq89Ji5AKYQaRYiW/nZ3llSv29d49IuxPhKbtJoLP+9QUUZ4nVragQVtaVGeZrpB+ZtG/Pdy/POw== - dependencies: - regenerator-runtime "^0.13.11" - "@babel/template@^7.18.10": version "7.18.10" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.18.10.tgz#6f9134835970d1dbf0835c0d100c9f38de0c5e71" @@ -2856,28 +2788,6 @@ slash "^3.0.0" write-file-atomic "^4.0.2" -"@jest/types@^26.6.2": - version "26.6.2" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-26.6.2.tgz#bef5a532030e1d88a2f5a6d933f84e97226ed48e" - integrity sha512-fC6QCp7Sc5sX6g8Tvbmj4XUTbyrik0akgRy03yjXbQaBWWNWGE7SGtJk98m0N8nzegD/7SggrUlivxo5ax4KWQ== - dependencies: - "@types/istanbul-lib-coverage" "^2.0.0" - "@types/istanbul-reports" "^3.0.0" - "@types/node" "*" - "@types/yargs" "^15.0.0" - chalk "^4.0.0" - -"@jest/types@^27.1.1": - version "27.1.1" - resolved "https://registry.yarnpkg.com/@jest/types/-/types-27.1.1.tgz#77a3fc014f906c65752d12123a0134359707c0ad" - integrity sha512-yqJPDDseb0mXgKqmNqypCsb85C22K1aY5+LUxh7syIM9n/b0AsaltxNy+o6tt29VcfGDpYEve175bm3uOhcehA== - dependencies: - "@types/istanbul-lib-coverage" "^2.0.0" - "@types/istanbul-reports" "^3.0.0" - "@types/node" "*" - "@types/yargs" "^16.0.0" - chalk "^4.0.0" - "@jest/types@^27.5.1": version "27.5.1" resolved "https://registry.yarnpkg.com/@jest/types/-/types-27.5.1.tgz#3c79ec4a8ba61c170bf937bcf9e98a9df175ec80" @@ -4028,34 +3938,20 @@ "@jest/create-cache-key-function" "^27.4.2" jsonc-parser "^3.2.0" -"@testing-library/dom@>=7": - version "8.18.1" - resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-8.18.1.tgz#80f91be02bc171fe5a3a7003f88207be31ac2cf3" - integrity sha512-oEvsm2B/WtcHKE+IcEeeCqNU/ltFGaVyGbpcm4g/2ytuT49jrlH9x5qRKL/H3A6yfM4YAbSbC0ceT5+9CEXnLg== +"@testing-library/dom@>=7", "@testing-library/dom@^9.3.3": + version "9.3.3" + resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-9.3.3.tgz#108c23a5b0ef51121c26ae92eb3179416b0434f5" + integrity sha512-fB0R+fa3AUqbLHWyxXa2kGVtf1Fe1ZZFr0Zp6AIbIAzXb2mKbEXl+PCQNUOaq5lbTab5tfctfXRNsWXxa2f7Aw== dependencies: "@babel/code-frame" "^7.10.4" "@babel/runtime" "^7.12.5" - "@types/aria-query" "^4.2.0" - aria-query "^5.0.0" + "@types/aria-query" "^5.0.1" + aria-query "5.1.3" chalk "^4.1.0" dom-accessibility-api "^0.5.9" - lz-string "^1.4.4" + lz-string "^1.5.0" pretty-format "^27.0.2" -"@testing-library/dom@^7.31.0": - version "7.31.2" - resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-7.31.2.tgz#df361db38f5212b88555068ab8119f5d841a8c4a" - integrity sha512-3UqjCpey6HiTZT92vODYLPxTBWlM8ZOOjr3LX5F37/VRipW2M1kX6I/Cm4VXzteZqfGfagg8yXywpcOgQBlNsQ== - dependencies: - "@babel/code-frame" "^7.10.4" - "@babel/runtime" "^7.12.5" - "@types/aria-query" "^4.2.0" - aria-query "^4.2.2" - chalk "^4.1.0" - dom-accessibility-api "^0.5.6" - lz-string "^1.4.4" - pretty-format "^26.6.2" - "@testing-library/dom@^8.0.0": version "8.20.0" resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-8.20.0.tgz#914aa862cef0f5e89b98cc48e3445c4c921010f6" @@ -4124,11 +4020,6 @@ resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.3.tgz#472eaab5f15c1ffdd7f8628bd4c4f753995ec79e" integrity sha512-yOlFc+7UtL/89t2ZhjPvvB/DeAr3r+Dq58IgzsFkOAvVC6NMJXmCGjbptdXdR9qsX7pKcTL+s87FtYREi2dEEQ== -"@types/aria-query@^4.2.0": - version "4.2.2" - resolved "https://registry.yarnpkg.com/@types/aria-query/-/aria-query-4.2.2.tgz#ed4e0ad92306a704f9fb132a0cfcf77486dbe2bc" - integrity sha512-HnYpAE1Y6kRyKM/XkEuiRQhTHvkzMBurTHnpFLYLBGPIylZNPs9jJcuOOYWxPLJCSEtmZT0Y8rHDokKN7rRTig== - "@types/aria-query@^5.0.1": version "5.0.1" resolved "https://registry.yarnpkg.com/@types/aria-query/-/aria-query-5.0.1.tgz#3286741fb8f1e1580ac28784add4c7a1d49bdfbc" @@ -4426,13 +4317,6 @@ resolved "https://registry.yarnpkg.com/@types/yargs-parser/-/yargs-parser-20.2.1.tgz#3b9ce2489919d9e4fea439b76916abc34b2df129" integrity sha512-7tFImggNeNBVMsn0vLrpn1H1uPrUBdnARPTpZoitY37ZrdJREzf7I16tMrlK3hen349gr1NYh8CmZQa7CTG6Aw== -"@types/yargs@^15.0.0": - version "15.0.14" - resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-15.0.14.tgz#26d821ddb89e70492160b66d10a0eb6df8f6fb06" - integrity sha512-yEJzHoxf6SyQGhBhIYGXQDSCkJjB6HohDShto7m8vaKg9Yp0Yn8+71J9eakh2bnPg6BfsH9PRMhiRTZnd4eXGQ== - dependencies: - "@types/yargs-parser" "*" - "@types/yargs@^16.0.0": version "16.0.4" resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-16.0.4.tgz#26aad98dd2c2a38e421086ea9ad42b9e51642977" @@ -4897,18 +4781,12 @@ argparse@^2.0.1: resolved "https://registry.yarnpkg.com/argparse/-/argparse-2.0.1.tgz#246f50f3ca78a3240f6c997e8a9bd1eac49e4b38" integrity sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q== -aria-query@^4.2.2: - version "4.2.2" - resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-4.2.2.tgz#0d2ca6c9aceb56b8977e9fed6aed7e15bbd2f83b" - integrity sha512-o/HelwhuKpTj/frsOsbNLNgnNGVIFsVP/SW2BSF14gVl7kAfMOJ6/8wUAUvG1R1NHKrfG+2sHZTu0yauT1qBrA== +aria-query@5.1.3, aria-query@^5.0.0: + version "5.1.3" + resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.1.3.tgz#19db27cd101152773631396f7a95a3b58c22c35e" + integrity sha512-R5iJ5lkuHybztUfuOAznmboyjWq8O6sqNqtK7CLOqdydi54VNbORp49mb14KbWgG1QD3JFO9hJdZ+y4KutfdOQ== dependencies: - "@babel/runtime" "^7.10.2" - "@babel/runtime-corejs3" "^7.10.2" - -aria-query@^5.0.0: - version "5.0.2" - resolved "https://registry.yarnpkg.com/aria-query/-/aria-query-5.0.2.tgz#0b8a744295271861e1d933f8feca13f9b70cfdc1" - integrity sha512-eigU3vhqSO+Z8BKDnVLN/ompjhf3pYzecKXz8+whRy+9gZu8n1TCGfwzQUUPnqdHl9ax1Hr9031orZ+UOEYr7Q== + deep-equal "^2.0.5" array-buffer-byte-length@^1.0.0: version "1.0.0" @@ -5380,7 +5258,7 @@ chalk-template@^1.1.0: dependencies: chalk "^5.2.0" -chalk@^2.0.0, chalk@^2.4.2: +chalk@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== @@ -5730,11 +5608,6 @@ core-js-compat@^3.25.1: dependencies: browserslist "^4.21.10" -core-js-pure@^3.16.0: - version "3.18.0" - resolved "https://registry.yarnpkg.com/core-js-pure/-/core-js-pure-3.18.0.tgz#e5187347bae66448c9e2d67c01c34c4df3261dc5" - integrity sha512-ZnK+9vyuMhKulIGqT/7RHGRok8RtkHMEX/BGPHkHx+ouDkq+MUvf9mfIgdqhpmPDu8+V5UtRn/CbCRc9I4lX4w== - core-js@3.27.1: version "3.27.1" resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.27.1.tgz#23cc909b315a6bb4e418bf40a52758af2103ba46" @@ -6458,6 +6331,30 @@ dedent@^1.0.0: resolved "https://registry.yarnpkg.com/dedent/-/dedent-1.5.1.tgz#4f3fc94c8b711e9bb2800d185cd6ad20f2a90aff" integrity sha512-+LxW+KLWxu3HW3M2w2ympwtqPrqYRzU8fqi6Fhd18fBALe15blJPI/I4+UHveMVG6lJqB4JNd4UG0S5cnVHwIg== +deep-equal@^2.0.5: + version "2.2.2" + resolved "https://registry.yarnpkg.com/deep-equal/-/deep-equal-2.2.2.tgz#9b2635da569a13ba8e1cc159c2f744071b115daa" + integrity sha512-xjVyBf0w5vH0I42jdAZzOKVldmPgSulmiyPRywoyq7HXC9qdgo17kxJE+rdnif5Tz6+pIrpJI8dCpMNLIGkUiA== + dependencies: + array-buffer-byte-length "^1.0.0" + call-bind "^1.0.2" + es-get-iterator "^1.1.3" + get-intrinsic "^1.2.1" + is-arguments "^1.1.1" + is-array-buffer "^3.0.2" + 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.5.0" + side-channel "^1.0.4" + which-boxed-primitive "^1.0.2" + which-collection "^1.0.1" + which-typed-array "^1.1.9" + deep-is@^0.1.3, deep-is@~0.1.3: version "0.1.4" resolved "https://registry.yarnpkg.com/deep-is/-/deep-is-0.1.4.tgz#a6f2dce612fadd2ef1f519b73551f17e85199831" @@ -6564,12 +6461,7 @@ doctrine@^3.0.0: dependencies: esutils "^2.0.2" -dom-accessibility-api@^0.5.6: - version "0.5.7" - resolved "https://registry.yarnpkg.com/dom-accessibility-api/-/dom-accessibility-api-0.5.7.tgz#8c2aa6325968f2933160a0b7dbb380893ddf3e7d" - integrity sha512-ml3lJIq9YjUfM9TUnEPvEYWFSwivwIGBPKpewX7tii7fwCazA8yCioGdqQcNsItPpfFvSJ3VIdMQPj60LJhcQA== - -dom-accessibility-api@^0.5.9: +dom-accessibility-api@^0.5.6, dom-accessibility-api@^0.5.9: version "0.5.14" resolved "https://registry.yarnpkg.com/dom-accessibility-api/-/dom-accessibility-api-0.5.14.tgz#56082f71b1dc7aac69d83c4285eef39c15d93f56" integrity sha512-NMt+m9zFMPZe0JcY9gN224Qvk6qLIdqex29clBvc/y75ZBX9YA9wNK3frsYvu2DI1xcCIwxwnX+TlsJ2DSOADg== @@ -6876,6 +6768,21 @@ es-abstract@^1.22.1: unbox-primitive "^1.0.2" which-typed-array "^1.1.10" +es-get-iterator@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/es-get-iterator/-/es-get-iterator-1.1.3.tgz#3ef87523c5d464d41084b2c3c9c214f1199763d6" + integrity sha512-sPZmqHBe6JIiTfN5q2pEi//TwxmAFHwj/XEuYjTuse78i8KxaqMTTzxPoFKuzRpDpTJ+0NAbpfenkmH2rePtuw== + 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" + es-module-lexer@^1.2.1: version "1.3.0" resolved "https://registry.yarnpkg.com/es-module-lexer/-/es-module-lexer-1.3.0.tgz#6be9c9e0b4543a60cd166ff6f8b4e9dae0b0c16f" @@ -8152,7 +8059,7 @@ internal-slot@^1.0.3: has "^1.0.3" side-channel "^1.0.4" -internal-slot@^1.0.5: +internal-slot@^1.0.4, internal-slot@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.5.tgz#f2a2ee21f668f8627a4667f309dc0f4fb6674986" integrity sha512-Y+R5hJrzs52QCG2laLn4udYVnxsfny9CpOhNhUvk/SSSVyF6T27FzRbF0sroPidSu3X8oEAkOn2K804mjpt6UQ== @@ -8188,6 +8095,14 @@ invariant@^2.2.2: dependencies: loose-envify "^1.0.0" +is-arguments@^1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/is-arguments/-/is-arguments-1.1.1.tgz#15b3f88fda01f2a97fec84ca761a560f123efa9b" + integrity sha512-8Q7EARjzEnKpt/PCD7e1cgUS0a6X8u5tdSiMqXhojOdoV9TsMsiO+9VLC5vAmO8N7/GmXn7yjR8qnA6bVAEzfA== + dependencies: + call-bind "^1.0.2" + has-tostringtag "^1.0.0" + is-array-buffer@^3.0.1, is-array-buffer@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.2.tgz#f2653ced8412081638ecb0ebbd0c41c6e0aecbbe" @@ -8262,7 +8177,7 @@ is-core-module@^2.9.0: dependencies: has "^1.0.3" -is-date-object@^1.0.1: +is-date-object@^1.0.1, is-date-object@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== @@ -8321,6 +8236,11 @@ is-installed-globally@~0.4.0: global-dirs "^3.0.0" is-path-inside "^3.0.2" +is-map@^2.0.1, is-map@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/is-map/-/is-map-2.0.2.tgz#00922db8c9bf73e81b7a335827bc2a43f2b91127" + integrity sha512-cOZFQQozTha1f4MxLFzlgKYPTyj26picdZTx82hbc/Xf4K/tZOOXSCkMvU4pKioRXGDLJRn0GM7Upe7kR721yg== + is-negative-zero@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.1.tgz#3de746c18dda2319241a53675908d8f766f11c24" @@ -8378,6 +8298,11 @@ is-regex@^1.1.4: call-bind "^1.0.2" has-tostringtag "^1.0.0" +is-set@^2.0.1, is-set@^2.0.2: + version "2.0.2" + resolved "https://registry.yarnpkg.com/is-set/-/is-set-2.0.2.tgz#90755fa4c2562dc1c5d4024760d6119b94ca18ec" + integrity sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g== + is-shared-array-buffer@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79" @@ -8425,6 +8350,11 @@ is-unicode-supported@^0.1.0: resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== +is-weakmap@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/is-weakmap/-/is-weakmap-2.0.1.tgz#5008b59bdc43b698201d18f62b37b2ca243e8cf2" + integrity sha512-NSBR4kH5oVj1Uwvv970ruUkCV7O1mzgVFO4/rev2cLRda9Tm9HrL70ZPut4rOHgY0FNrUu9BCbXA2sdQ+x0chA== + is-weakref@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" @@ -8432,6 +8362,14 @@ is-weakref@^1.0.2: dependencies: call-bind "^1.0.2" +is-weakset@^2.0.1: + version "2.0.2" + resolved "https://registry.yarnpkg.com/is-weakset/-/is-weakset-2.0.2.tgz#4569d67a747a1ce5a994dfd4ef6dcea76e7c0a1d" + integrity sha512-t2yVvttHkQktwnNNmBQ98AhENLdPUTDTE21uPqAQ0ARwQfGeQKRVS0NNurH7bTf7RrvcVn1OOge45CnBeHCSmg== + dependencies: + call-bind "^1.0.2" + get-intrinsic "^1.1.1" + is-window@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/is-window/-/is-window-1.0.2.tgz#2c896ca53db97de45d3c33133a65d8c9f563480d" @@ -9373,10 +9311,10 @@ lru-cache@^6.0.0: resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-10.0.1.tgz#0a3be479df549cca0e5d693ac402ff19537a6b7a" integrity sha512-IJ4uwUTi2qCccrioU6g9g/5rvvVl13bsdczUUcqbciD9iLr095yj8DQKdObriEvuNSx325N1rV1O0sJFszx75g== -lz-string@^1.4.4: - version "1.4.4" - resolved "https://registry.yarnpkg.com/lz-string/-/lz-string-1.4.4.tgz#c0d8eaf36059f705796e1e344811cf4c498d3a26" - integrity sha1-wNjq82BZ9wV5bh40SBHPTEmNOiY= +lz-string@^1.4.4, lz-string@^1.5.0: + version "1.5.0" + resolved "https://registry.yarnpkg.com/lz-string/-/lz-string-1.5.0.tgz#c1ab50f77887b712621201ba9fd4e3a6ed099941" + integrity sha512-h5bgJWpxJNswbU7qCrV0tIKQCaS3blPDrqKWx+QxzuzL1zGUzij9XCWLrSLsJPu5t+eWA/ycetzYAO5IOMcWAQ== make-dir@^3.0.0, make-dir@^3.0.2: version "3.1.0" @@ -9773,6 +9711,14 @@ object-inspect@^1.12.3: resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.3.tgz#ba62dffd67ee256c8c086dfae69e016cd1f198b9" integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g== +object-is@^1.1.5: + version "1.1.5" + resolved "https://registry.yarnpkg.com/object-is/-/object-is-1.1.5.tgz#b9deeaa5fc7f1846a0faecdceec138e5778f53ac" + integrity sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw== + dependencies: + call-bind "^1.0.2" + define-properties "^1.1.3" + object-keys@^1.0.12, object-keys@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" @@ -10253,27 +10199,7 @@ pretty-bytes@^5.6.0: resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-5.6.0.tgz#356256f643804773c82f64723fe78c92c62beaeb" integrity sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg== -pretty-format@^26.6.2: - version "26.6.2" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-26.6.2.tgz#e35c2705f14cb7fe2fe94fa078345b444120fc93" - integrity sha512-7AeGuCYNGmycyQbCqd/3PWH4eOoX/OiCa0uphp57NVTeAGdJGaAliecxwBDHYQCIvrW7aDBZCYeNTP/WX69mkg== - dependencies: - "@jest/types" "^26.6.2" - ansi-regex "^5.0.0" - ansi-styles "^4.0.0" - react-is "^17.0.1" - -pretty-format@^27.0.0, pretty-format@^27.2.0: - version "27.2.0" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-27.2.0.tgz#ee37a94ce2a79765791a8649ae374d468c18ef19" - integrity sha512-KyJdmgBkMscLqo8A7K77omgLx5PWPiXJswtTtFV7XgVZv2+qPk6UivpXXO+5k6ZEbWIbLoKdx1pZ6ldINzbwTA== - dependencies: - "@jest/types" "^27.1.1" - ansi-regex "^5.0.0" - ansi-styles "^5.0.0" - react-is "^17.0.1" - -pretty-format@^27.0.2: +pretty-format@^27.0.0, pretty-format@^27.0.2, pretty-format@^27.2.0: version "27.5.1" resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-27.5.1.tgz#2181879fdea51a7a5851fb39d920faa63f01d88e" integrity sha512-Qb1gy5OrP5+zDf2Bvnzdl3jsTf1qXVMazbvCoKhtKqVs4/YK4ozX4gKQJJVyNe+cajNPn0KoC0MC3FUmaHWEmQ== @@ -10282,16 +10208,7 @@ pretty-format@^27.0.2: ansi-styles "^5.0.0" react-is "^17.0.1" -pretty-format@^29.0.0, pretty-format@^29.5.0: - version "29.5.0" - resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.5.0.tgz#283134e74f70e2e3e7229336de0e4fce94ccde5a" - integrity sha512-V2mGkI31qdttvTFX7Mt4efOqHXqJWMu4/r66Xh3Z3BwZaPfPJgp6/gbwoujRpPUtfEF6AUUWx3Jim3GCw5g/Qw== - dependencies: - "@jest/schemas" "^29.4.3" - ansi-styles "^5.0.0" - react-is "^18.0.0" - -pretty-format@^29.6.3: +pretty-format@^29.0.0, pretty-format@^29.5.0, pretty-format@^29.6.3: version "29.6.3" resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-29.6.3.tgz#d432bb4f1ca6f9463410c3fb25a0ba88e594ace7" integrity sha512-ZsBgjVhFAj5KeK+nHfF1305/By3lechHQSMWCTl8iHSbfOm2TN5nHEtFc/+W7fAyUeCs2n5iow72gld4gW0xDw== @@ -11194,7 +11111,7 @@ regenerator-runtime@0.13.10: resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.10.tgz#ed07b19616bcbec5da6274ebc75ae95634bfc2ee" integrity sha512-KepLsg4dU12hryUO7bp/axHAKvwGOCV0sGloQtpagJ12ai+ojVDqkeGSiRX1zlq+kjIMZ1t7gpze+26QqtdGqw== -regenerator-runtime@0.13.11, regenerator-runtime@^0.13.11: +regenerator-runtime@0.13.11: version "0.13.11" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.11.tgz#f6dca3e7ceec20590d07ada785636a90cdca17f9" integrity sha512-kY1AZVr2Ra+t+piVaJ4gxaFaReZVH40AKNo7UCX6W+dEwBo/2oZJzqfuN1qLq1oL45o56cPaTXELwrTh8Fpggg== @@ -11204,11 +11121,6 @@ regenerator-runtime@^0.11.0: resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg== -regenerator-runtime@^0.13.4: - version "0.13.9" - resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz#8925742a98ffd90814988d7566ad30ca3b263b52" - integrity sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA== - regenerator-runtime@^0.14.0: version "0.14.0" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.14.0.tgz#5e19d68eb12d486f797e15a3c6a918f7cec5eb45" @@ -11939,6 +11851,13 @@ state-local@^1.0.6: resolved "https://registry.yarnpkg.com/state-local/-/state-local-1.0.7.tgz#da50211d07f05748d53009bee46307a37db386d5" integrity sha512-HTEHMNieakEnoe33shBYcZ7NX83ACUjCu8c40iOGEZsngj9zRnkqS9j1pqQPXwobB0ZcVTk27REb7COQ0UR59w== +stop-iteration-iterator@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/stop-iteration-iterator/-/stop-iteration-iterator-1.0.0.tgz#6a60be0b4ee757d1ed5254858ec66b10c49285e4" + integrity sha512-iCGQj+0l0HOdZ2AEeBADlsRC+vsnDsZsbdSiH1yNSjcfKM7fdpCMfqAL/dwF5BLiw/XhRft/Wax6zQbhq2BcjQ== + dependencies: + internal-slot "^1.0.4" + stream-buffers@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/stream-buffers/-/stream-buffers-1.0.1.tgz#9a44a37555f96a5b78a5a765f0c48446cb160b8c" @@ -12947,6 +12866,16 @@ which-boxed-primitive@^1.0.2: is-string "^1.0.5" is-symbol "^1.0.3" +which-collection@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/which-collection/-/which-collection-1.0.1.tgz#70eab71ebbbd2aefaf32f917082fc62cdcb70906" + integrity sha512-W8xeTUwaln8i3K/cY1nGXzdnVZlidBcagyNFtBdD5kxnb4TvGKR7FfSIS3mYpwWS1QUCutfKz8IY8RjftB0+1A== + dependencies: + is-map "^2.0.1" + is-set "^2.0.1" + is-weakmap "^2.0.1" + is-weakset "^2.0.1" + which-typed-array@^1.1.10: version "1.1.11" resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.11.tgz#99d691f23c72aab6768680805a271b69761ed61a" From 263e9d25bb56c6aca110e1a4dff77184b7dc51f0 Mon Sep 17 00:00:00 2001 From: Andreas Christou Date: Thu, 12 Oct 2023 16:55:49 +0100 Subject: [PATCH 4/4] Move reviewer file (#106) --- .github/{ => workflows}/dependabot-reviewer.yml | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename .github/{ => workflows}/dependabot-reviewer.yml (100%) diff --git a/.github/dependabot-reviewer.yml b/.github/workflows/dependabot-reviewer.yml similarity index 100% rename from .github/dependabot-reviewer.yml rename to .github/workflows/dependabot-reviewer.yml