From 2eb24bbc4e5be68efc3bc6caf720ce078c0d1692 Mon Sep 17 00:00:00 2001 From: Nathan Marrs Date: Fri, 30 Sep 2022 09:52:30 -0700 Subject: [PATCH 001/135] Canvas: Add canvas editor options to inline editor (#55970) Co-authored-by: Drew Slobodnjak <60050885+drew08t@users.noreply.github.com> --- .../app/plugins/panel/canvas/InlineEdit.tsx | 7 ++-- .../plugins/panel/canvas/InlineEditBody.tsx | 15 ++++++++- public/app/plugins/panel/canvas/module.tsx | 32 +++++++++++-------- 3 files changed, 36 insertions(+), 18 deletions(-) diff --git a/public/app/plugins/panel/canvas/InlineEdit.tsx b/public/app/plugins/panel/canvas/InlineEdit.tsx index 932dfc14f1b..79c8bd03fe1 100644 --- a/public/app/plugins/panel/canvas/InlineEdit.tsx +++ b/public/app/plugins/panel/canvas/InlineEdit.tsx @@ -20,7 +20,7 @@ const OFFSET_X = 10; const OFFSET_Y = 32; export function InlineEdit({ onClose, id, scene }: Props) { - const root = scene.root.div!.getBoundingClientRect(); + const root = scene.root.div?.getBoundingClientRect(); const windowHeight = window.innerHeight; const windowWidth = window.innerWidth; const ref = useRef(null); @@ -28,8 +28,9 @@ export function InlineEdit({ onClose, id, scene }: Props) { const inlineEditKey = 'inlineEditPanel' + id.toString(); const defaultMeasurements = { width: 350, height: 400 }; - const defaultX = root.x + root.width - defaultMeasurements.width - OFFSET_X; - const defaultY = root.y + OFFSET_Y; + const widthOffset = root?.width ?? defaultMeasurements.width + OFFSET_X * 2; + const defaultX = root?.x ?? 0 + widthOffset - defaultMeasurements.width - OFFSET_X; + const defaultY = root?.y ?? 0 + OFFSET_Y; const savedPlacement = store.getObject(inlineEditKey, { x: defaultX, diff --git a/public/app/plugins/panel/canvas/InlineEditBody.tsx b/public/app/plugins/panel/canvas/InlineEditBody.tsx index e454c083af2..5d63a82161c 100644 --- a/public/app/plugins/panel/canvas/InlineEditBody.tsx +++ b/public/app/plugins/panel/canvas/InlineEditBody.tsx @@ -14,6 +14,7 @@ import { setOptionImmutably } from 'app/features/dashboard/components/PanelEdito import { activePanelSubject, InstanceState } from './CanvasPanel'; import { getElementEditor } from './editor/elementEditor'; import { getLayerEditor } from './editor/layerEditor'; +import { addStandardCanvasEditorOptions } from './module'; export function InlineEditBody() { const activePanel = useObservable(activePanelSubject); @@ -41,6 +42,8 @@ export function InlineEditBody() { ); } } + + addStandardCanvasEditorOptions(builder); }; return getOptionsPaneCategoryDescriptor( @@ -53,7 +56,17 @@ export function InlineEditBody() { ); }, [instanceState, activePanel]); - return <>{pane.categories.map((p) => renderOptionsPaneCategoryDescriptor(p))}; + const topLevelItemsContainerStyle = { + marginLeft: 15, + marginTop: 10, + }; + + return ( + <> + {pane.categories.map((p) => renderOptionsPaneCategoryDescriptor(p))} +
{pane.items.map((item) => item.render())}
+ + ); } // Recursively render options diff --git a/public/app/plugins/panel/canvas/module.tsx b/public/app/plugins/panel/canvas/module.tsx index 4a9c8d4f58c..318efb6321c 100644 --- a/public/app/plugins/panel/canvas/module.tsx +++ b/public/app/plugins/panel/canvas/module.tsx @@ -1,4 +1,4 @@ -import { PanelPlugin } from '@grafana/data'; +import { PanelOptionsEditorBuilder, PanelPlugin } from '@grafana/data'; import { FrameState } from 'app/features/canvas/runtime/frame'; import { CanvasPanel, InstanceState } from './CanvasPanel'; @@ -6,25 +6,29 @@ import { getElementEditor } from './editor/elementEditor'; import { getLayerEditor } from './editor/layerEditor'; import { PanelOptions } from './models.gen'; +export const addStandardCanvasEditorOptions = (builder: PanelOptionsEditorBuilder) => { + builder.addBooleanSwitch({ + path: 'inlineEditing', + name: 'Inline editing', + description: 'Enable editing the panel directly', + defaultValue: true, + }); + + builder.addBooleanSwitch({ + path: 'showAdvancedTypes', + name: 'Show advanced element types', + description: '', + defaultValue: false, + }); +}; + export const plugin = new PanelPlugin(CanvasPanel) .setNoPadding() // extend to panel edges .useFieldConfig() .setPanelOptions((builder, context) => { const state: InstanceState = context.instanceState; - builder.addBooleanSwitch({ - path: 'inlineEditing', - name: 'Inline editing', - description: 'Enable editing the panel directly', - defaultValue: true, - }); - - builder.addBooleanSwitch({ - path: 'showAdvancedTypes', - name: 'Show advanced element types', - description: '', - defaultValue: false, - }); + addStandardCanvasEditorOptions(builder); if (state) { builder.addNestedOptions(getLayerEditor(state)); From ea1334c01d872ce37c1af6223916655baedb4c2b Mon Sep 17 00:00:00 2001 From: Artur Wierzbicki Date: Fri, 30 Sep 2022 21:34:44 +0400 Subject: [PATCH 002/135] Chore: Persistent collection (#56074) * persistent collection * dont remove temp dir * temp dir change * lint * add experimental comment * move to X package * lint * orgID -> namespace --- pkg/infra/x/persistentcollection/local_fs.go | 212 ++++++++++++++++++ .../x/persistentcollection/local_fs_test.go | 89 ++++++++ pkg/infra/x/persistentcollection/model.go | 21 ++ 3 files changed, 322 insertions(+) create mode 100644 pkg/infra/x/persistentcollection/local_fs.go create mode 100644 pkg/infra/x/persistentcollection/local_fs_test.go create mode 100644 pkg/infra/x/persistentcollection/model.go diff --git a/pkg/infra/x/persistentcollection/local_fs.go b/pkg/infra/x/persistentcollection/local_fs.go new file mode 100644 index 00000000000..912fcf9ce64 --- /dev/null +++ b/pkg/infra/x/persistentcollection/local_fs.go @@ -0,0 +1,212 @@ +package persistentcollection + +import ( + "context" + "encoding/json" + "fmt" + "os" + "path/filepath" + "sync" +) + +func NewLocalFSPersistentCollection[T any](name string, directory string, version int) PersistentCollection[T] { + c := &localFsCollection[T]{ + name: name, + version: version, + collectionsDir: filepath.Join(directory, "file-collections"), + } + err := c.createCollectionsDirectory() + if err != nil { + panic(err) + } + return c +} + +type CollectionFileContents[T any] struct { + Version int `json:"version"` + Items []T `json:"items"` +} + +type localFsCollection[T any] struct { + version int + name string + collectionsDir string + mu sync.Mutex +} + +func (s *localFsCollection[T]) Insert(ctx context.Context, namespace string, item T) error { + s.mu.Lock() + defer s.mu.Unlock() + + items, err := s.load(ctx, namespace) + if err != nil { + return err + } + + return s.save(ctx, namespace, append(items, item)) +} + +func (s *localFsCollection[T]) Delete(ctx context.Context, namespace string, predicate Predicate[T]) (int, error) { + s.mu.Lock() + defer s.mu.Unlock() + + items, err := s.load(ctx, namespace) + if err != nil { + return 0, err + } + + deletedCount := 0 + newItems := make([]T, 0) + for idx := range items { + del, err := predicate(items[idx]) + if err != nil { + return deletedCount, err + } + + if del { + deletedCount += 1 + } else { + newItems = append(newItems, items[idx]) + } + } + + if deletedCount != 0 { + return deletedCount, s.save(ctx, namespace, newItems) + } + + return deletedCount, nil +} + +func (s *localFsCollection[T]) FindFirst(ctx context.Context, namespace string, predicate Predicate[T]) (T, error) { + var nilResult T + + s.mu.Lock() + defer s.mu.Unlock() + + items, err := s.load(ctx, namespace) + if err != nil { + return nilResult, err + } + + for idx := range items { + match, err := predicate(items[idx]) + if err != nil { + return nilResult, err + } + if match { + return items[idx], nil + } + } + + return nilResult, nil +} + +func (s *localFsCollection[T]) Find(ctx context.Context, namespace string, predicate Predicate[T]) ([]T, error) { + s.mu.Lock() + defer s.mu.Unlock() + + items, err := s.load(ctx, namespace) + if err != nil { + return nil, err + } + + result := make([]T, 0) + for idx := range items { + match, err := predicate(items[idx]) + if err != nil { + return nil, err + } + + if match { + result = append(result, items[idx]) + } + } + + return result, nil +} + +func (s *localFsCollection[T]) Update(ctx context.Context, namespace string, updateFn UpdateFn[T]) (int, error) { + s.mu.Lock() + defer s.mu.Unlock() + + items, err := s.load(ctx, namespace) + if err != nil { + return 0, err + } + + newItems := make([]T, 0) + updatedCount := 0 + for idx := range items { + updated, updatedItem, err := updateFn(items[idx]) + if err != nil { + return updatedCount, err + } + + if updated { + updatedCount += 1 + newItems = append(newItems, updatedItem) + } else { + newItems = append(newItems, items[idx]) + } + } + + if updatedCount != 0 { + return updatedCount, s.save(ctx, namespace, newItems) + } + + return updatedCount, nil +} + +func (s *localFsCollection[T]) load(ctx context.Context, namespace string) ([]T, error) { + filePath := s.collectionFilePath(namespace) + // Safe to ignore gosec warning G304, the path comes from grafana settings rather than the user input + // nolint:gosec + bytes, err := os.ReadFile(filePath) + if err != nil { + if os.IsNotExist(err) { + return []T{}, nil + } + return nil, fmt.Errorf("can't read %s file: %w", filePath, err) + } + var db CollectionFileContents[T] + if err = json.Unmarshal(bytes, &db); err != nil { + return nil, fmt.Errorf("can't unmarshal %s data: %w", filePath, err) + } + + if db.Version != s.version { + if err := s.save(ctx, namespace, []T{}); err != nil { + return nil, err + } + + return []T{}, nil + } + + return db.Items, nil +} + +func (s *localFsCollection[T]) save(_ context.Context, namespace string, items []T) error { + filePath := s.collectionFilePath(namespace) + + bytes, err := json.MarshalIndent(&CollectionFileContents[T]{ + Version: s.version, + Items: items, + }, "", " ") + if err != nil { + return fmt.Errorf("can't marshal items: %w", err) + } + + return os.WriteFile(filePath, bytes, 0600) +} + +func (s *localFsCollection[T]) createCollectionsDirectory() error { + _, err := os.Stat(s.collectionsDir) + if os.IsNotExist(err) { + return os.MkdirAll(s.collectionsDir, 0750) + } + + return err +} + +func (s *localFsCollection[T]) collectionFilePath(namespace string) string { + return filepath.Join(s.collectionsDir, fmt.Sprintf("%s-namespace-%s.json", s.name, namespace)) +} diff --git a/pkg/infra/x/persistentcollection/local_fs_test.go b/pkg/infra/x/persistentcollection/local_fs_test.go new file mode 100644 index 00000000000..ac1908d4658 --- /dev/null +++ b/pkg/infra/x/persistentcollection/local_fs_test.go @@ -0,0 +1,89 @@ +package persistentcollection + +import ( + "context" + "fmt" + "os" + "path" + "testing" + + "github.com/stretchr/testify/require" +) + +type item struct { + Name string `json:"name"` + Val int64 `json:"val"` +} + +func TestLocalFSPersistentCollection(t *testing.T) { + namespace := "1" + ctx := context.Background() + dir := path.Join(os.TempDir(), "persistent-collection-test") + defer func() { + if err := os.RemoveAll(dir); err != nil { + fmt.Printf("Failed to remove temporary directory %q: %s\n", dir, err.Error()) + } + }() + + coll := NewLocalFSPersistentCollection[*item]("test", dir, 1) + + firstInserted := &item{ + Name: "test", + Val: 10, + } + err := coll.Insert(ctx, namespace, firstInserted) + require.NoError(t, err) + + err = coll.Insert(ctx, namespace, &item{ + Name: "test", + Val: 20, + }) + require.NoError(t, err) + + err = coll.Insert(ctx, namespace, &item{ + Name: "test", + Val: 30, + }) + require.NoError(t, err) + + updatedCount, err := coll.Update(ctx, namespace, func(i *item) (bool, *item, error) { + if i.Val == 20 { + return true, &item{Val: 25, Name: "test"}, nil + } + return false, nil, nil + }) + require.Equal(t, 1, updatedCount) + require.NoError(t, err) + + deletedCount, err := coll.Delete(ctx, namespace, func(i *item) (bool, error) { + if i.Val == 30 { + return true, nil + } + return false, nil + }) + require.Equal(t, 1, deletedCount) + require.NoError(t, err) + + firstFound, err := coll.FindFirst(ctx, namespace, func(i *item) (bool, error) { + if i.Name == "test" { + return true, nil + } + + return false, nil + }) + require.NoError(t, err) + require.Equal(t, firstInserted, firstFound) + + all, err := coll.Find(ctx, namespace, func(i *item) (bool, error) { return true, nil }) + require.NoError(t, err) + require.Equal(t, []*item{ + { + Name: "test", + Val: 10, + }, + { + Name: "test", + Val: 25, + }, + }, all) +} diff --git a/pkg/infra/x/persistentcollection/model.go b/pkg/infra/x/persistentcollection/model.go new file mode 100644 index 00000000000..36e99818a62 --- /dev/null +++ b/pkg/infra/x/persistentcollection/model.go @@ -0,0 +1,21 @@ +package persistentcollection + +import ( + "context" +) + +type Predicate[T any] func(item T) (bool, error) +type UpdateFn[T any] func(item T) (updated bool, updatedItem T, err error) + +// PersistentCollection is a collection of items that's going to retain its state between Grafana restarts. +// The main purpose of this API is to reduce the time-to-Proof-of-Concept - this is NOT intended for production use. +// +// The item type needs to be serializable to JSON. +// @alpha -- EXPERIMENTAL +type PersistentCollection[T any] interface { + Delete(ctx context.Context, namespace string, predicate Predicate[T]) (deletedCount int, err error) + FindFirst(ctx context.Context, namespace string, predicate Predicate[T]) (T, error) + Find(ctx context.Context, namespace string, predicate Predicate[T]) ([]T, error) + Update(ctx context.Context, namespace string, updateFn UpdateFn[T]) (updatedCount int, err error) + Insert(ctx context.Context, namespace string, item T) error +} From 82d7f80a15d0e0f322e95b2302020a48c36b26ae Mon Sep 17 00:00:00 2001 From: Drew Slobodnjak <60050885+drew08t@users.noreply.github.com> Date: Fri, 30 Sep 2022 10:44:47 -0700 Subject: [PATCH 003/135] Canvas: Rename textbox to rectangle (#55633) Co-authored-by: nmarrs --- .../features/canvas/elements/metricValue.tsx | 15 +++--- .../elements/{textBox.tsx => rectangle.tsx} | 48 ++++--------------- public/app/features/canvas/registry.ts | 4 +- public/app/features/canvas/types.ts | 30 +++++++++++- public/app/plugins/panel/canvas/migrations.ts | 22 +++++++++ public/app/plugins/panel/canvas/module.tsx | 2 + 6 files changed, 72 insertions(+), 49 deletions(-) rename public/app/features/canvas/elements/{textBox.tsx => rectangle.tsx} (76%) create mode 100644 public/app/plugins/panel/canvas/migrations.ts diff --git a/public/app/features/canvas/elements/metricValue.tsx b/public/app/features/canvas/elements/metricValue.tsx index fe424f705df..893d0bbd408 100644 --- a/public/app/features/canvas/elements/metricValue.tsx +++ b/public/app/features/canvas/elements/metricValue.tsx @@ -13,15 +13,14 @@ import { TextDimensionEditor } from 'app/features/dimensions/editors/TextDimensi import { CanvasElementItem, CanvasElementProps, defaultBgColor, defaultTextColor } from '../element'; import { ElementState } from '../runtime/element'; - -import { Align, TextBoxConfig, TextBoxData, VAlign } from './textBox'; +import { Align, TextConfig, TextData, VAlign } from '../types'; // eslint-disable-next-line const dummyFieldSettings: StandardEditorsRegistryItem = { settings: {}, } as StandardEditorsRegistryItem; -const MetricValueDisplay = (props: CanvasElementProps) => { +const MetricValueDisplay = (props: CanvasElementProps) => { const { data, isSelected } = props; const styles = useStyles2(getStyles(data)); @@ -40,7 +39,7 @@ const MetricValueDisplay = (props: CanvasElementProps) => { +const MetricValueEdit = (props: CanvasElementProps) => { let { data, config } = props; const context = usePanelContext(); let panelData: DataFrame[]; @@ -89,7 +88,7 @@ const MetricValueEdit = (props: CanvasElementProps) ); }; -const getStyles = (data: TextBoxData | undefined) => (theme: GrafanaTheme2) => ({ +const getStyles = (data: TextData | undefined) => (theme: GrafanaTheme2) => ({ container: css` position: absolute; height: 100%; @@ -112,7 +111,7 @@ const getStyles = (data: TextBoxData | undefined) => (theme: GrafanaTheme2) => ( `, }); -export const metricValueItem: CanvasElementItem = { +export const metricValueItem: CanvasElementItem = { id: 'metric-value', name: 'Metric Value', description: 'Display a field value', @@ -148,8 +147,8 @@ export const metricValueItem: CanvasElementItem = { }, }), - prepareData: (ctx: DimensionContext, cfg: TextBoxConfig) => { - const data: TextBoxData = { + prepareData: (ctx: DimensionContext, cfg: TextConfig) => { + const data: TextData = { text: cfg.text ? ctx.getText(cfg.text).value() : '', align: cfg.align ?? Align.Center, valign: cfg.valign ?? VAlign.Middle, diff --git a/public/app/features/canvas/elements/textBox.tsx b/public/app/features/canvas/elements/rectangle.tsx similarity index 76% rename from public/app/features/canvas/elements/textBox.tsx rename to public/app/features/canvas/elements/rectangle.tsx index 852e94f2201..8e75e27667c 100644 --- a/public/app/features/canvas/elements/textBox.tsx +++ b/public/app/features/canvas/elements/rectangle.tsx @@ -7,39 +7,11 @@ import { config } from 'app/core/config'; import { DimensionContext } from 'app/features/dimensions/context'; import { ColorDimensionEditor } from 'app/features/dimensions/editors/ColorDimensionEditor'; import { TextDimensionEditor } from 'app/features/dimensions/editors/TextDimensionEditor'; -import { ColorDimensionConfig, TextDimensionConfig } from 'app/features/dimensions/types'; import { CanvasElementItem, CanvasElementProps, defaultBgColor, defaultTextColor } from '../element'; +import { Align, TextConfig, TextData, VAlign } from '../types'; -export enum Align { - Left = 'left', - Center = 'center', - Right = 'right', -} - -export enum VAlign { - Top = 'top', - Middle = 'middle', - Bottom = 'bottom', -} - -export interface TextBoxData { - text?: string; - color?: string; - size?: number; // 0 or missing will "auto size" - align: Align; - valign: VAlign; -} - -export interface TextBoxConfig { - text?: TextDimensionConfig; - color?: ColorDimensionConfig; - size?: number; // 0 or missing will "auto size" - align: Align; - valign: VAlign; -} - -class TextBoxDisplay extends PureComponent> { +class RectangleDisplay extends PureComponent> { render() { const { data } = this.props; const styles = getStyles(config.theme2, data); @@ -65,12 +37,12 @@ const getStyles = stylesFactory((theme: GrafanaTheme2, data) => ({ color: ${data?.color}; `, })); -export const textBoxItem: CanvasElementItem = { - id: 'text-box', - name: 'Text', - description: 'Text box', +export const rectangleItem: CanvasElementItem = { + id: 'rectangle', + name: 'Rectangle', + description: 'Rectangle', - display: TextBoxDisplay, + display: RectangleDisplay, defaultSize: { width: 240, @@ -94,8 +66,8 @@ export const textBoxItem: CanvasElementItem = { }), // Called when data changes - prepareData: (ctx: DimensionContext, cfg: TextBoxConfig) => { - const data: TextBoxData = { + prepareData: (ctx: DimensionContext, cfg: TextConfig) => { + const data: TextData = { text: cfg.text ? ctx.getText(cfg.text).value() : '', align: cfg.align ?? Align.Center, valign: cfg.valign ?? VAlign.Middle, @@ -111,7 +83,7 @@ export const textBoxItem: CanvasElementItem = { // Heatmap overlay options registerOptionsUI: (builder) => { - const category = ['Text box']; + const category = ['Rectangle']; builder .addCustomEditor({ category, diff --git a/public/app/features/canvas/registry.ts b/public/app/features/canvas/registry.ts index 8ed20d197b6..28f6a71683f 100644 --- a/public/app/features/canvas/registry.ts +++ b/public/app/features/canvas/registry.ts @@ -7,7 +7,7 @@ import { droneSideItem } from './elements/droneSide'; import { droneTopItem } from './elements/droneTop'; import { iconItem } from './elements/icon'; import { metricValueItem } from './elements/metricValue'; -import { textBoxItem } from './elements/textBox'; +import { rectangleItem } from './elements/rectangle'; import { windTurbineItem } from './elements/windTurbine'; export const DEFAULT_CANVAS_ELEMENT_CONFIG: CanvasElementOptions = { @@ -19,7 +19,7 @@ export const DEFAULT_CANVAS_ELEMENT_CONFIG: CanvasElementOptions = { export const defaultElementItems = [ metricValueItem, // default for now - textBoxItem, + rectangleItem, iconItem, ]; diff --git a/public/app/features/canvas/types.ts b/public/app/features/canvas/types.ts index 24185c5448d..5e2af18d89e 100644 --- a/public/app/features/canvas/types.ts +++ b/public/app/features/canvas/types.ts @@ -1,4 +1,4 @@ -import { ColorDimensionConfig, ResourceDimensionConfig } from 'app/features/dimensions/types'; +import { ColorDimensionConfig, ResourceDimensionConfig, TextDimensionConfig } from 'app/features/dimensions/types'; export interface Placement { top?: number; @@ -58,3 +58,31 @@ export enum QuickPlacement { HorizontalCenter = 'hcenter', VerticalCenter = 'vcenter', } + +export enum Align { + Left = 'left', + Center = 'center', + Right = 'right', +} + +export enum VAlign { + Top = 'top', + Middle = 'middle', + Bottom = 'bottom', +} + +export interface TextData { + text?: string; + color?: string; + size?: number; // 0 or missing will "auto size" + align: Align; + valign: VAlign; +} + +export interface TextConfig { + text?: TextDimensionConfig; + color?: ColorDimensionConfig; + size?: number; // 0 or missing will "auto size" + align: Align; + valign: VAlign; +} diff --git a/public/app/plugins/panel/canvas/migrations.ts b/public/app/plugins/panel/canvas/migrations.ts new file mode 100644 index 00000000000..29e805d4841 --- /dev/null +++ b/public/app/plugins/panel/canvas/migrations.ts @@ -0,0 +1,22 @@ +import { PanelModel } from '@grafana/data'; + +import { PanelOptions } from './models.gen'; + +export const canvasMigrationHandler = (panel: PanelModel): Partial => { + const pluginVersion = panel?.pluginVersion ?? ''; + + // Rename text-box to rectangle + // Initial plugin version is empty string for first migration + if (pluginVersion === '') { + const root = panel.options?.root; + if (root?.elements) { + for (const element of root.elements) { + if (element.type === 'text-box') { + element.type = 'rectangle'; + } + } + } + } + + return panel.options; +}; diff --git a/public/app/plugins/panel/canvas/module.tsx b/public/app/plugins/panel/canvas/module.tsx index 318efb6321c..aa0488ab356 100644 --- a/public/app/plugins/panel/canvas/module.tsx +++ b/public/app/plugins/panel/canvas/module.tsx @@ -4,6 +4,7 @@ import { FrameState } from 'app/features/canvas/runtime/frame'; import { CanvasPanel, InstanceState } from './CanvasPanel'; import { getElementEditor } from './editor/elementEditor'; import { getLayerEditor } from './editor/layerEditor'; +import { canvasMigrationHandler } from './migrations'; import { PanelOptions } from './models.gen'; export const addStandardCanvasEditorOptions = (builder: PanelOptionsEditorBuilder) => { @@ -25,6 +26,7 @@ export const addStandardCanvasEditorOptions = (builder: PanelOptionsEditorBuilde export const plugin = new PanelPlugin(CanvasPanel) .setNoPadding() // extend to panel edges .useFieldConfig() + .setMigrationHandler(canvasMigrationHandler) .setPanelOptions((builder, context) => { const state: InstanceState = context.instanceState; From c16317e5b8ab011946d6ce7c9b3a51aa2293a77f Mon Sep 17 00:00:00 2001 From: Alexander Weaver Date: Fri, 30 Sep 2022 14:36:51 -0500 Subject: [PATCH 004/135] Alerting: Move fake rule store to the test utilities package (#56062) * Move fakeRuleStore to tests/fakes package * Break stub dependencies on store * Update existing tests to point to new location * Remove unused stub of TimeNow * Rename fake to take advantage of package name --- .../ngalert/api/api_prometheus_test.go | 12 +- pkg/services/ngalert/api/api_ruler_test.go | 35 +- pkg/services/ngalert/ngalert_test.go | 6 +- pkg/services/ngalert/store/deltas_test.go | 19 +- pkg/services/ngalert/store/testing.go | 331 ----------------- pkg/services/ngalert/tests/fakes/rules.go | 341 ++++++++++++++++++ 6 files changed, 378 insertions(+), 366 deletions(-) create mode 100644 pkg/services/ngalert/tests/fakes/rules.go diff --git a/pkg/services/ngalert/api/api_prometheus_test.go b/pkg/services/ngalert/api/api_prometheus_test.go index 440ec55d016..4e9c226e30f 100644 --- a/pkg/services/ngalert/api/api_prometheus_test.go +++ b/pkg/services/ngalert/api/api_prometheus_test.go @@ -20,7 +20,7 @@ import ( "github.com/grafana/grafana/pkg/services/ngalert/eval" ngmodels "github.com/grafana/grafana/pkg/services/ngalert/models" "github.com/grafana/grafana/pkg/services/ngalert/state" - "github.com/grafana/grafana/pkg/services/ngalert/store" + "github.com/grafana/grafana/pkg/services/ngalert/tests/fakes" "github.com/grafana/grafana/pkg/services/org" "github.com/grafana/grafana/pkg/services/user" "github.com/grafana/grafana/pkg/util" @@ -423,7 +423,7 @@ func TestRouteGetRuleStatuses(t *testing.T) { t.Run("with many rules in a group", func(t *testing.T) { t.Run("should return sorted", func(t *testing.T) { - ruleStore := store.NewFakeRuleStore(t) + ruleStore := fakes.NewRuleStore(t) fakeAIM := NewFakeAlertInstanceManager(t) groupKey := ngmodels.GenerateGroupKey(orgID) _, rules := ngmodels.GenerateUniqueAlertRules(rand.Intn(5)+5, ngmodels.AlertRuleGen(withGroupKey(groupKey), ngmodels.WithUniqueGroupIndex())) @@ -466,7 +466,7 @@ func TestRouteGetRuleStatuses(t *testing.T) { t.Run("when fine-grained access is enabled", func(t *testing.T) { t.Run("should return only rules if the user can query all data sources", func(t *testing.T) { - ruleStore := store.NewFakeRuleStore(t) + ruleStore := fakes.NewRuleStore(t) fakeAIM := NewFakeAlertInstanceManager(t) rules := ngmodels.GenerateAlertRules(rand.Intn(4)+2, ngmodels.AlertRuleGen(withOrgID(orgID))) @@ -503,8 +503,8 @@ func TestRouteGetRuleStatuses(t *testing.T) { }) } -func setupAPI(t *testing.T) (*store.FakeRuleStore, *fakeAlertInstanceManager, *acmock.Mock, PrometheusSrv) { - fakeStore := store.NewFakeRuleStore(t) +func setupAPI(t *testing.T) (*fakes.RuleStore, *fakeAlertInstanceManager, *acmock.Mock, PrometheusSrv) { + fakeStore := fakes.NewRuleStore(t) fakeAIM := NewFakeAlertInstanceManager(t) acMock := acmock.New().WithDisabled() @@ -518,7 +518,7 @@ func setupAPI(t *testing.T) (*store.FakeRuleStore, *fakeAlertInstanceManager, *a return fakeStore, fakeAIM, acMock, api } -func generateRuleAndInstanceWithQuery(t *testing.T, orgID int64, fakeAIM *fakeAlertInstanceManager, fakeStore *store.FakeRuleStore, query func(r *ngmodels.AlertRule)) { +func generateRuleAndInstanceWithQuery(t *testing.T, orgID int64, fakeAIM *fakeAlertInstanceManager, fakeStore *fakes.RuleStore, query func(r *ngmodels.AlertRule)) { t.Helper() rules := ngmodels.GenerateAlertRules(1, ngmodels.AlertRuleGen(withOrgID(orgID), asFixture(), query)) diff --git a/pkg/services/ngalert/api/api_ruler_test.go b/pkg/services/ngalert/api/api_ruler_test.go index b8dbb4e7939..4a7b2a4cc64 100644 --- a/pkg/services/ngalert/api/api_ruler_test.go +++ b/pkg/services/ngalert/api/api_ruler_test.go @@ -23,6 +23,7 @@ import ( "github.com/grafana/grafana/pkg/services/ngalert/provisioning" "github.com/grafana/grafana/pkg/services/ngalert/schedule" "github.com/grafana/grafana/pkg/services/ngalert/store" + "github.com/grafana/grafana/pkg/services/ngalert/tests/fakes" "github.com/grafana/grafana/pkg/services/org" "github.com/grafana/grafana/pkg/services/user" "github.com/grafana/grafana/pkg/util" @@ -30,22 +31,22 @@ import ( ) func TestRouteDeleteAlertRules(t *testing.T) { - getRecordedCommand := func(ruleStore *store.FakeRuleStore) []store.GenericRecordedQuery { + getRecordedCommand := func(ruleStore *fakes.RuleStore) []fakes.GenericRecordedQuery { results := ruleStore.GetRecordedCommands(func(cmd interface{}) (interface{}, bool) { - c, ok := cmd.(store.GenericRecordedQuery) + c, ok := cmd.(fakes.GenericRecordedQuery) if !ok || c.Name != "DeleteAlertRulesByUID" { return nil, false } return c, ok }) - var result []store.GenericRecordedQuery + var result []fakes.GenericRecordedQuery for _, cmd := range results { - result = append(result, cmd.(store.GenericRecordedQuery)) + result = append(result, cmd.(fakes.GenericRecordedQuery)) } return result } - assertRulesDeleted := func(t *testing.T, expectedRules []*models.AlertRule, ruleStore *store.FakeRuleStore, scheduler *schedule.FakeScheduleService) { + assertRulesDeleted := func(t *testing.T, expectedRules []*models.AlertRule, ruleStore *fakes.RuleStore, scheduler *schedule.FakeScheduleService) { deleteCommands := getRecordedCommand(ruleStore) require.Len(t, deleteCommands, 1) cmd := deleteCommands[0] @@ -73,8 +74,8 @@ func TestRouteDeleteAlertRules(t *testing.T) { orgID := rand.Int63() folder := randFolder() - initFakeRuleStore := func(t *testing.T) *store.FakeRuleStore { - ruleStore := store.NewFakeRuleStore(t) + initFakeRuleStore := func(t *testing.T) *fakes.RuleStore { + ruleStore := fakes.NewRuleStore(t) ruleStore.Folders[orgID] = append(ruleStore.Folders[orgID], folder) // add random data ruleStore.PutRule(context.Background(), models.GenerateAlertRulesSmallNonEmpty(models.AlertRuleGen(withOrgID(orgID)))...) @@ -267,7 +268,7 @@ func TestRouteGetNamespaceRulesConfig(t *testing.T) { t.Run("should return rules for which user has access to data source", func(t *testing.T) { orgID := rand.Int63() folder := randFolder() - ruleStore := store.NewFakeRuleStore(t) + ruleStore := fakes.NewRuleStore(t) ruleStore.Folders[orgID] = append(ruleStore.Folders[orgID], folder) expectedRules := models.GenerateAlertRules(rand.Intn(4)+2, models.AlertRuleGen(withOrgID(orgID), withNamespace(folder))) ruleStore.PutRule(context.Background(), expectedRules...) @@ -303,7 +304,7 @@ func TestRouteGetNamespaceRulesConfig(t *testing.T) { t.Run("should return all rules from folder", func(t *testing.T) { orgID := rand.Int63() folder := randFolder() - ruleStore := store.NewFakeRuleStore(t) + ruleStore := fakes.NewRuleStore(t) ruleStore.Folders[orgID] = append(ruleStore.Folders[orgID], folder) expectedRules := models.GenerateAlertRules(rand.Intn(4)+2, models.AlertRuleGen(withOrgID(orgID), withNamespace(folder))) ruleStore.PutRule(context.Background(), expectedRules...) @@ -337,7 +338,7 @@ func TestRouteGetNamespaceRulesConfig(t *testing.T) { t.Run("should return the provenance of the alert rules", func(t *testing.T) { orgID := rand.Int63() folder := randFolder() - ruleStore := store.NewFakeRuleStore(t) + ruleStore := fakes.NewRuleStore(t) ruleStore.Folders[orgID] = append(ruleStore.Folders[orgID], folder) expectedRules := models.GenerateAlertRules(rand.Intn(4)+2, models.AlertRuleGen(withOrgID(orgID), withNamespace(folder))) ruleStore.PutRule(context.Background(), expectedRules...) @@ -378,7 +379,7 @@ func TestRouteGetNamespaceRulesConfig(t *testing.T) { t.Run("should enforce order of rules in the group", func(t *testing.T) { orgID := rand.Int63() folder := randFolder() - ruleStore := store.NewFakeRuleStore(t) + ruleStore := fakes.NewRuleStore(t) ruleStore.Folders[orgID] = append(ruleStore.Folders[orgID], folder) groupKey := models.GenerateGroupKey(orgID) groupKey.NamespaceUID = folder.Uid @@ -422,7 +423,7 @@ func TestRouteGetRulesConfig(t *testing.T) { t.Run("fine-grained access is enabled", func(t *testing.T) { t.Run("should check access to data source", func(t *testing.T) { orgID := rand.Int63() - ruleStore := store.NewFakeRuleStore(t) + ruleStore := fakes.NewRuleStore(t) folder1 := randFolder() folder2 := randFolder() ruleStore.Folders[orgID] = []*models2.Folder{folder1, folder2} @@ -460,7 +461,7 @@ func TestRouteGetRulesConfig(t *testing.T) { t.Run("should return rules in group sorted by group index", func(t *testing.T) { orgID := rand.Int63() folder := randFolder() - ruleStore := store.NewFakeRuleStore(t) + ruleStore := fakes.NewRuleStore(t) ruleStore.Folders[orgID] = append(ruleStore.Folders[orgID], folder) groupKey := models.GenerateGroupKey(orgID) groupKey.NamespaceUID = folder.Uid @@ -505,7 +506,7 @@ func TestRouteGetRulesGroupConfig(t *testing.T) { t.Run("should check access to data source", func(t *testing.T) { orgID := rand.Int63() folder := randFolder() - ruleStore := store.NewFakeRuleStore(t) + ruleStore := fakes.NewRuleStore(t) ruleStore.Folders[orgID] = append(ruleStore.Folders[orgID], folder) groupKey := models.GenerateGroupKey(orgID) groupKey.NamespaceUID = folder.Uid @@ -540,7 +541,7 @@ func TestRouteGetRulesGroupConfig(t *testing.T) { t.Run("should return rules in group sorted by group index", func(t *testing.T) { orgID := rand.Int63() folder := randFolder() - ruleStore := store.NewFakeRuleStore(t) + ruleStore := fakes.NewRuleStore(t) ruleStore.Folders[orgID] = append(ruleStore.Folders[orgID], folder) groupKey := models.GenerateGroupKey(orgID) groupKey.NamespaceUID = folder.Uid @@ -636,13 +637,13 @@ func TestVerifyProvisionedRulesNotAffected(t *testing.T) { }) } -func createServiceWithProvenanceStore(ac *acMock.Mock, store *store.FakeRuleStore, scheduler schedule.ScheduleService, provenanceStore provisioning.ProvisioningStore) *RulerSrv { +func createServiceWithProvenanceStore(ac *acMock.Mock, store *fakes.RuleStore, scheduler schedule.ScheduleService, provenanceStore provisioning.ProvisioningStore) *RulerSrv { svc := createService(ac, store, scheduler) svc.provenanceStore = provenanceStore return svc } -func createService(ac *acMock.Mock, store *store.FakeRuleStore, scheduler schedule.ScheduleService) *RulerSrv { +func createService(ac *acMock.Mock, store *fakes.RuleStore, scheduler schedule.ScheduleService) *RulerSrv { return &RulerSrv{ xactManager: store, store: store, diff --git a/pkg/services/ngalert/ngalert_test.go b/pkg/services/ngalert/ngalert_test.go index a1911eb25b4..30540c6f1e7 100644 --- a/pkg/services/ngalert/ngalert_test.go +++ b/pkg/services/ngalert/ngalert_test.go @@ -15,7 +15,7 @@ import ( models2 "github.com/grafana/grafana/pkg/models" "github.com/grafana/grafana/pkg/services/ngalert/models" "github.com/grafana/grafana/pkg/services/ngalert/schedule" - "github.com/grafana/grafana/pkg/services/ngalert/store" + "github.com/grafana/grafana/pkg/services/ngalert/tests/fakes" "github.com/grafana/grafana/pkg/util" ) @@ -29,7 +29,7 @@ func Test_subscribeToFolderChanges(t *testing.T) { rules := models.GenerateAlertRules(5, models.AlertRuleGen(models.WithOrgID(orgID), models.WithNamespace(folder))) bus := busmock.New() - db := store.NewFakeRuleStore(t) + db := fakes.NewRuleStore(t) db.Folders[orgID] = append(db.Folders[orgID], folder) db.PutRule(context.Background(), rules...) @@ -49,7 +49,7 @@ func Test_subscribeToFolderChanges(t *testing.T) { require.Eventuallyf(t, func() bool { return len(db.GetRecordedCommands(func(cmd interface{}) (interface{}, bool) { - c, ok := cmd.(store.GenericRecordedQuery) + c, ok := cmd.(fakes.GenericRecordedQuery) if !ok || c.Name != "IncreaseVersionForAllRulesInNamespace" { return nil, false } diff --git a/pkg/services/ngalert/store/deltas_test.go b/pkg/services/ngalert/store/deltas_test.go index 0cd63526482..d61943490df 100644 --- a/pkg/services/ngalert/store/deltas_test.go +++ b/pkg/services/ngalert/store/deltas_test.go @@ -9,6 +9,7 @@ import ( grafana_models "github.com/grafana/grafana/pkg/models" "github.com/grafana/grafana/pkg/services/ngalert/models" + "github.com/grafana/grafana/pkg/services/ngalert/tests/fakes" "github.com/grafana/grafana/pkg/util" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" @@ -19,7 +20,7 @@ func TestCalculateChanges(t *testing.T) { orgId := rand.Int63() t.Run("detects alerts that need to be added", func(t *testing.T) { - fakeStore := NewFakeRuleStore(t) + fakeStore := fakes.NewRuleStore(t) groupKey := models.GenerateGroupKey(orgId) submitted := models.GenerateAlertRules(rand.Intn(5)+1, models.AlertRuleGen(withOrgID(orgId), simulateSubmitted, withoutUID)) @@ -46,7 +47,7 @@ func TestCalculateChanges(t *testing.T) { groupKey := models.GenerateGroupKey(orgId) inDatabaseMap, inDatabase := models.GenerateUniqueAlertRules(rand.Intn(5)+1, models.AlertRuleGen(withGroupKey(groupKey))) - fakeStore := NewFakeRuleStore(t) + fakeStore := fakes.NewRuleStore(t) fakeStore.PutRule(context.Background(), inDatabase...) changes, err := CalculateChanges(context.Background(), fakeStore, groupKey, make([]*models.AlertRule, 0)) @@ -70,7 +71,7 @@ func TestCalculateChanges(t *testing.T) { inDatabaseMap, inDatabase := models.GenerateUniqueAlertRules(rand.Intn(5)+1, models.AlertRuleGen(withGroupKey(groupKey))) submittedMap, submitted := models.GenerateUniqueAlertRules(len(inDatabase), models.AlertRuleGen(simulateSubmitted, withGroupKey(groupKey), withUIDs(inDatabaseMap))) - fakeStore := NewFakeRuleStore(t) + fakeStore := fakes.NewRuleStore(t) fakeStore.PutRule(context.Background(), inDatabase...) changes, err := CalculateChanges(context.Background(), fakeStore, groupKey, submitted) @@ -108,7 +109,7 @@ func TestCalculateChanges(t *testing.T) { submitted = append(submitted, r) } - fakeStore := NewFakeRuleStore(t) + fakeStore := fakes.NewRuleStore(t) fakeStore.PutRule(context.Background(), inDatabase...) changes, err := CalculateChanges(context.Background(), fakeStore, groupKey, submitted) @@ -159,7 +160,7 @@ func TestCalculateChanges(t *testing.T) { dbRule := models.AlertRuleGen(withOrgID(orgId))() - fakeStore := NewFakeRuleStore(t) + fakeStore := fakes.NewRuleStore(t) fakeStore.PutRule(context.Background(), dbRule) groupKey := models.GenerateGroupKey(orgId) @@ -185,7 +186,7 @@ func TestCalculateChanges(t *testing.T) { sourceGroupKey := models.GenerateGroupKey(orgId) inDatabaseMap, inDatabase := models.GenerateUniqueAlertRules(rand.Intn(10)+10, models.AlertRuleGen(withGroupKey(sourceGroupKey))) - fakeStore := NewFakeRuleStore(t) + fakeStore := fakes.NewRuleStore(t) fakeStore.PutRule(context.Background(), inDatabase...) namespace := randFolder() @@ -221,7 +222,7 @@ func TestCalculateChanges(t *testing.T) { }) t.Run("should fail when submitted rule has UID that does not exist in db", func(t *testing.T) { - fakeStore := NewFakeRuleStore(t) + fakeStore := fakes.NewRuleStore(t) groupKey := models.GenerateGroupKey(orgId) submitted := models.AlertRuleGen(withOrgID(orgId), simulateSubmitted)() require.NotEqual(t, "", submitted.UID) @@ -231,7 +232,7 @@ func TestCalculateChanges(t *testing.T) { }) t.Run("should fail if cannot fetch current rules in the group", func(t *testing.T) { - fakeStore := NewFakeRuleStore(t) + fakeStore := fakes.NewRuleStore(t) expectedErr := errors.New("TEST ERROR") fakeStore.Hook = func(cmd interface{}) error { switch cmd.(type) { @@ -249,7 +250,7 @@ func TestCalculateChanges(t *testing.T) { }) t.Run("should fail if cannot fetch rule by UID", func(t *testing.T) { - fakeStore := NewFakeRuleStore(t) + fakeStore := fakes.NewRuleStore(t) expectedErr := errors.New("TEST ERROR") fakeStore.Hook = func(cmd interface{}) error { switch cmd.(type) { diff --git a/pkg/services/ngalert/store/testing.go b/pkg/services/ngalert/store/testing.go index 5f6d2c3dd82..51770c100ce 100644 --- a/pkg/services/ngalert/store/testing.go +++ b/pkg/services/ngalert/store/testing.go @@ -2,16 +2,10 @@ package store import ( "context" - "fmt" - "math/rand" "strings" "sync" "testing" - "github.com/grafana/grafana/pkg/services/user" - "github.com/grafana/grafana/pkg/util" - - models2 "github.com/grafana/grafana/pkg/models" "github.com/grafana/grafana/pkg/services/ngalert/models" ) @@ -66,331 +60,6 @@ func (s *FakeImageStore) SaveImage(_ context.Context, image *models.Image) error return nil } -func NewFakeRuleStore(t *testing.T) *FakeRuleStore { - return &FakeRuleStore{ - t: t, - Rules: map[int64][]*models.AlertRule{}, - Hook: func(interface{}) error { - return nil - }, - Folders: map[int64][]*models2.Folder{}, - } -} - -// FakeRuleStore mocks the RuleStore of the scheduler. -type FakeRuleStore struct { - t *testing.T - mtx sync.Mutex - // OrgID -> RuleGroup -> Namespace -> Rules - Rules map[int64][]*models.AlertRule - Hook func(cmd interface{}) error // use Hook if you need to intercept some query and return an error - RecordedOps []interface{} - Folders map[int64][]*models2.Folder -} - -type GenericRecordedQuery struct { - Name string - Params []interface{} -} - -// PutRule puts the rule in the Rules map. If there are existing rule in the same namespace, they will be overwritten -func (f *FakeRuleStore) PutRule(_ context.Context, rules ...*models.AlertRule) { - f.mtx.Lock() - defer f.mtx.Unlock() -mainloop: - for _, r := range rules { - rgs := f.Rules[r.OrgID] - for idx, rulePtr := range rgs { - if rulePtr.UID == r.UID { - rgs[idx] = r - continue mainloop - } - } - rgs = append(rgs, r) - f.Rules[r.OrgID] = rgs - - var existing *models2.Folder - folders := f.Folders[r.OrgID] - for _, folder := range folders { - if folder.Uid == r.NamespaceUID { - existing = folder - break - } - } - if existing == nil { - folders = append(folders, &models2.Folder{ - Id: rand.Int63(), - Uid: r.NamespaceUID, - Title: "TEST-FOLDER-" + util.GenerateShortUID(), - }) - f.Folders[r.OrgID] = folders - } - } -} - -// GetRecordedCommands filters recorded commands using predicate function. Returns the subset of the recorded commands that meet the predicate -func (f *FakeRuleStore) GetRecordedCommands(predicate func(cmd interface{}) (interface{}, bool)) []interface{} { - f.mtx.Lock() - defer f.mtx.Unlock() - - result := make([]interface{}, 0, len(f.RecordedOps)) - for _, op := range f.RecordedOps { - cmd, ok := predicate(op) - if !ok { - continue - } - result = append(result, cmd) - } - return result -} - -func (f *FakeRuleStore) DeleteAlertRulesByUID(_ context.Context, orgID int64, UIDs ...string) error { - f.RecordedOps = append(f.RecordedOps, GenericRecordedQuery{ - Name: "DeleteAlertRulesByUID", - Params: []interface{}{orgID, UIDs}, - }) - - rules := f.Rules[orgID] - - var result = make([]*models.AlertRule, 0, len(rules)) - - for _, rule := range rules { - add := true - for _, UID := range UIDs { - if rule.UID == UID { - add = false - break - } - } - if add { - result = append(result, rule) - } - } - - f.Rules[orgID] = result - return nil -} - -func (f *FakeRuleStore) GetAlertRuleByUID(_ context.Context, q *models.GetAlertRuleByUIDQuery) error { - f.mtx.Lock() - defer f.mtx.Unlock() - f.RecordedOps = append(f.RecordedOps, *q) - if err := f.Hook(*q); err != nil { - return err - } - rules, ok := f.Rules[q.OrgID] - if !ok { - return nil - } - - for _, rule := range rules { - if rule.UID == q.UID { - q.Result = rule - break - } - } - return nil -} - -func (f *FakeRuleStore) GetAlertRulesGroupByRuleUID(_ context.Context, q *models.GetAlertRulesGroupByRuleUIDQuery) error { - f.mtx.Lock() - defer f.mtx.Unlock() - f.RecordedOps = append(f.RecordedOps, *q) - if err := f.Hook(*q); err != nil { - return err - } - rules, ok := f.Rules[q.OrgID] - if !ok { - return nil - } - - var selected *models.AlertRule - for _, rule := range rules { - if rule.UID == q.UID { - selected = rule - break - } - } - if selected == nil { - return nil - } - - for _, rule := range rules { - if rule.GetGroupKey() == selected.GetGroupKey() { - q.Result = append(q.Result, rule) - } - } - return nil -} - -func (f *FakeRuleStore) ListAlertRules(_ context.Context, q *models.ListAlertRulesQuery) error { - f.mtx.Lock() - defer f.mtx.Unlock() - f.RecordedOps = append(f.RecordedOps, *q) - - if err := f.Hook(*q); err != nil { - return err - } - - hasDashboard := func(r *models.AlertRule, dashboardUID string, panelID int64) bool { - if dashboardUID != "" { - if r.DashboardUID == nil || *r.DashboardUID != dashboardUID { - return false - } - if panelID > 0 { - if r.PanelID == nil || *r.PanelID != panelID { - return false - } - } - } - return true - } - - hasNamespace := func(r *models.AlertRule, namespaceUIDs []string) bool { - if len(namespaceUIDs) > 0 { - var ok bool - for _, uid := range q.NamespaceUIDs { - if uid == r.NamespaceUID { - ok = true - break - } - } - if !ok { - return false - } - } - return true - } - - for _, r := range f.Rules[q.OrgID] { - if !hasDashboard(r, q.DashboardUID, q.PanelID) { - continue - } - if !hasNamespace(r, q.NamespaceUIDs) { - continue - } - if q.RuleGroup != "" && r.RuleGroup != q.RuleGroup { - continue - } - q.Result = append(q.Result, r) - } - - return nil -} - -func (f *FakeRuleStore) GetUserVisibleNamespaces(_ context.Context, orgID int64, _ *user.SignedInUser) (map[string]*models2.Folder, error) { - f.mtx.Lock() - defer f.mtx.Unlock() - - namespacesMap := map[string]*models2.Folder{} - - _, ok := f.Rules[orgID] - if !ok { - return namespacesMap, nil - } - - for _, folder := range f.Folders[orgID] { - namespacesMap[folder.Uid] = folder - } - return namespacesMap, nil -} - -func (f *FakeRuleStore) GetNamespaceByTitle(_ context.Context, title string, orgID int64, _ *user.SignedInUser, _ bool) (*models2.Folder, error) { - folders := f.Folders[orgID] - for _, folder := range folders { - if folder.Title == title { - return folder, nil - } - } - return nil, fmt.Errorf("not found") -} - -func (f *FakeRuleStore) GetNamespaceByUID(_ context.Context, uid string, orgID int64, _ *user.SignedInUser) (*models2.Folder, error) { - f.RecordedOps = append(f.RecordedOps, GenericRecordedQuery{ - Name: "GetNamespaceByUID", - Params: []interface{}{orgID, uid}, - }) - - folders := f.Folders[orgID] - for _, folder := range folders { - if folder.Uid == uid { - return folder, nil - } - } - return nil, fmt.Errorf("not found") -} - -func (f *FakeRuleStore) UpdateAlertRules(_ context.Context, q []models.UpdateRule) error { - f.mtx.Lock() - defer f.mtx.Unlock() - f.RecordedOps = append(f.RecordedOps, q) - if err := f.Hook(q); err != nil { - return err - } - return nil -} - -func (f *FakeRuleStore) InsertAlertRules(_ context.Context, q []models.AlertRule) (map[string]int64, error) { - f.mtx.Lock() - defer f.mtx.Unlock() - f.RecordedOps = append(f.RecordedOps, q) - ids := make(map[string]int64, len(q)) - if err := f.Hook(q); err != nil { - return ids, err - } - return ids, nil -} - -func (f *FakeRuleStore) InTransaction(ctx context.Context, fn func(c context.Context) error) error { - return fn(ctx) -} - -func (f *FakeRuleStore) GetRuleGroupInterval(ctx context.Context, orgID int64, namespaceUID string, ruleGroup string) (int64, error) { - f.mtx.Lock() - defer f.mtx.Unlock() - for _, rule := range f.Rules[orgID] { - if rule.RuleGroup == ruleGroup && rule.NamespaceUID == namespaceUID { - return rule.IntervalSeconds, nil - } - } - return 0, ErrAlertRuleGroupNotFound -} - -func (f *FakeRuleStore) UpdateRuleGroup(ctx context.Context, orgID int64, namespaceUID string, ruleGroup string, interval int64) error { - f.mtx.Lock() - defer f.mtx.Unlock() - for _, rule := range f.Rules[orgID] { - if rule.RuleGroup == ruleGroup && rule.NamespaceUID == namespaceUID { - rule.IntervalSeconds = interval - } - } - return nil -} - -func (f *FakeRuleStore) IncreaseVersionForAllRulesInNamespace(_ context.Context, orgID int64, namespaceUID string) ([]models.AlertRuleKeyWithVersion, error) { - f.mtx.Lock() - defer f.mtx.Unlock() - - f.RecordedOps = append(f.RecordedOps, GenericRecordedQuery{ - Name: "IncreaseVersionForAllRulesInNamespace", - Params: []interface{}{orgID, namespaceUID}, - }) - - var result []models.AlertRuleKeyWithVersion - - for _, rule := range f.Rules[orgID] { - if rule.NamespaceUID == namespaceUID && rule.OrgID == orgID { - rule.Version++ - rule.Updated = TimeNow() - result = append(result, models.AlertRuleKeyWithVersion{ - Version: rule.Version, - AlertRuleKey: rule.GetKey(), - }) - } - } - return result, nil -} - func NewFakeAdminConfigStore(t *testing.T) *FakeAdminConfigStore { t.Helper() return &FakeAdminConfigStore{Configs: map[int64]*models.AdminConfiguration{}} diff --git a/pkg/services/ngalert/tests/fakes/rules.go b/pkg/services/ngalert/tests/fakes/rules.go new file mode 100644 index 00000000000..3cb2f1b7210 --- /dev/null +++ b/pkg/services/ngalert/tests/fakes/rules.go @@ -0,0 +1,341 @@ +package fakes + +import ( + "context" + "errors" + "fmt" + "math/rand" + "sync" + "testing" + "time" + + models2 "github.com/grafana/grafana/pkg/models" + "github.com/grafana/grafana/pkg/services/ngalert/models" + "github.com/grafana/grafana/pkg/services/user" + "github.com/grafana/grafana/pkg/util" +) + +// FakeRuleStore mocks the RuleStore of the scheduler. +type RuleStore struct { + t *testing.T + mtx sync.Mutex + // OrgID -> RuleGroup -> Namespace -> Rules + Rules map[int64][]*models.AlertRule + Hook func(cmd interface{}) error // use Hook if you need to intercept some query and return an error + RecordedOps []interface{} + Folders map[int64][]*models2.Folder +} + +type GenericRecordedQuery struct { + Name string + Params []interface{} +} + +func NewRuleStore(t *testing.T) *RuleStore { + return &RuleStore{ + t: t, + Rules: map[int64][]*models.AlertRule{}, + Hook: func(interface{}) error { + return nil + }, + Folders: map[int64][]*models2.Folder{}, + } +} + +// PutRule puts the rule in the Rules map. If there are existing rule in the same namespace, they will be overwritten +func (f *RuleStore) PutRule(_ context.Context, rules ...*models.AlertRule) { + f.mtx.Lock() + defer f.mtx.Unlock() +mainloop: + for _, r := range rules { + rgs := f.Rules[r.OrgID] + for idx, rulePtr := range rgs { + if rulePtr.UID == r.UID { + rgs[idx] = r + continue mainloop + } + } + rgs = append(rgs, r) + f.Rules[r.OrgID] = rgs + + var existing *models2.Folder + folders := f.Folders[r.OrgID] + for _, folder := range folders { + if folder.Uid == r.NamespaceUID { + existing = folder + break + } + } + if existing == nil { + folders = append(folders, &models2.Folder{ + Id: rand.Int63(), + Uid: r.NamespaceUID, + Title: "TEST-FOLDER-" + util.GenerateShortUID(), + }) + f.Folders[r.OrgID] = folders + } + } +} + +// GetRecordedCommands filters recorded commands using predicate function. Returns the subset of the recorded commands that meet the predicate +func (f *RuleStore) GetRecordedCommands(predicate func(cmd interface{}) (interface{}, bool)) []interface{} { + f.mtx.Lock() + defer f.mtx.Unlock() + + result := make([]interface{}, 0, len(f.RecordedOps)) + for _, op := range f.RecordedOps { + cmd, ok := predicate(op) + if !ok { + continue + } + result = append(result, cmd) + } + return result +} + +func (f *RuleStore) DeleteAlertRulesByUID(_ context.Context, orgID int64, UIDs ...string) error { + f.RecordedOps = append(f.RecordedOps, GenericRecordedQuery{ + Name: "DeleteAlertRulesByUID", + Params: []interface{}{orgID, UIDs}, + }) + + rules := f.Rules[orgID] + + var result = make([]*models.AlertRule, 0, len(rules)) + + for _, rule := range rules { + add := true + for _, UID := range UIDs { + if rule.UID == UID { + add = false + break + } + } + if add { + result = append(result, rule) + } + } + + f.Rules[orgID] = result + return nil +} + +func (f *RuleStore) GetAlertRuleByUID(_ context.Context, q *models.GetAlertRuleByUIDQuery) error { + f.mtx.Lock() + defer f.mtx.Unlock() + f.RecordedOps = append(f.RecordedOps, *q) + if err := f.Hook(*q); err != nil { + return err + } + rules, ok := f.Rules[q.OrgID] + if !ok { + return nil + } + + for _, rule := range rules { + if rule.UID == q.UID { + q.Result = rule + break + } + } + return nil +} + +func (f *RuleStore) GetAlertRulesGroupByRuleUID(_ context.Context, q *models.GetAlertRulesGroupByRuleUIDQuery) error { + f.mtx.Lock() + defer f.mtx.Unlock() + f.RecordedOps = append(f.RecordedOps, *q) + if err := f.Hook(*q); err != nil { + return err + } + rules, ok := f.Rules[q.OrgID] + if !ok { + return nil + } + + var selected *models.AlertRule + for _, rule := range rules { + if rule.UID == q.UID { + selected = rule + break + } + } + if selected == nil { + return nil + } + + for _, rule := range rules { + if rule.GetGroupKey() == selected.GetGroupKey() { + q.Result = append(q.Result, rule) + } + } + return nil +} + +func (f *RuleStore) ListAlertRules(_ context.Context, q *models.ListAlertRulesQuery) error { + f.mtx.Lock() + defer f.mtx.Unlock() + f.RecordedOps = append(f.RecordedOps, *q) + + if err := f.Hook(*q); err != nil { + return err + } + + hasDashboard := func(r *models.AlertRule, dashboardUID string, panelID int64) bool { + if dashboardUID != "" { + if r.DashboardUID == nil || *r.DashboardUID != dashboardUID { + return false + } + if panelID > 0 { + if r.PanelID == nil || *r.PanelID != panelID { + return false + } + } + } + return true + } + + hasNamespace := func(r *models.AlertRule, namespaceUIDs []string) bool { + if len(namespaceUIDs) > 0 { + var ok bool + for _, uid := range q.NamespaceUIDs { + if uid == r.NamespaceUID { + ok = true + break + } + } + if !ok { + return false + } + } + return true + } + + for _, r := range f.Rules[q.OrgID] { + if !hasDashboard(r, q.DashboardUID, q.PanelID) { + continue + } + if !hasNamespace(r, q.NamespaceUIDs) { + continue + } + if q.RuleGroup != "" && r.RuleGroup != q.RuleGroup { + continue + } + q.Result = append(q.Result, r) + } + + return nil +} + +func (f *RuleStore) GetUserVisibleNamespaces(_ context.Context, orgID int64, _ *user.SignedInUser) (map[string]*models2.Folder, error) { + f.mtx.Lock() + defer f.mtx.Unlock() + + namespacesMap := map[string]*models2.Folder{} + + _, ok := f.Rules[orgID] + if !ok { + return namespacesMap, nil + } + + for _, folder := range f.Folders[orgID] { + namespacesMap[folder.Uid] = folder + } + return namespacesMap, nil +} + +func (f *RuleStore) GetNamespaceByTitle(_ context.Context, title string, orgID int64, _ *user.SignedInUser, _ bool) (*models2.Folder, error) { + folders := f.Folders[orgID] + for _, folder := range folders { + if folder.Title == title { + return folder, nil + } + } + return nil, fmt.Errorf("not found") +} + +func (f *RuleStore) GetNamespaceByUID(_ context.Context, uid string, orgID int64, _ *user.SignedInUser) (*models2.Folder, error) { + f.RecordedOps = append(f.RecordedOps, GenericRecordedQuery{ + Name: "GetNamespaceByUID", + Params: []interface{}{orgID, uid}, + }) + + folders := f.Folders[orgID] + for _, folder := range folders { + if folder.Uid == uid { + return folder, nil + } + } + return nil, fmt.Errorf("not found") +} + +func (f *RuleStore) UpdateAlertRules(_ context.Context, q []models.UpdateRule) error { + f.mtx.Lock() + defer f.mtx.Unlock() + f.RecordedOps = append(f.RecordedOps, q) + if err := f.Hook(q); err != nil { + return err + } + return nil +} + +func (f *RuleStore) InsertAlertRules(_ context.Context, q []models.AlertRule) (map[string]int64, error) { + f.mtx.Lock() + defer f.mtx.Unlock() + f.RecordedOps = append(f.RecordedOps, q) + ids := make(map[string]int64, len(q)) + if err := f.Hook(q); err != nil { + return ids, err + } + return ids, nil +} + +func (f *RuleStore) InTransaction(ctx context.Context, fn func(c context.Context) error) error { + return fn(ctx) +} + +func (f *RuleStore) GetRuleGroupInterval(ctx context.Context, orgID int64, namespaceUID string, ruleGroup string) (int64, error) { + f.mtx.Lock() + defer f.mtx.Unlock() + for _, rule := range f.Rules[orgID] { + if rule.RuleGroup == ruleGroup && rule.NamespaceUID == namespaceUID { + return rule.IntervalSeconds, nil + } + } + return 0, errors.New("rule group not found") +} + +func (f *RuleStore) UpdateRuleGroup(ctx context.Context, orgID int64, namespaceUID string, ruleGroup string, interval int64) error { + f.mtx.Lock() + defer f.mtx.Unlock() + for _, rule := range f.Rules[orgID] { + if rule.RuleGroup == ruleGroup && rule.NamespaceUID == namespaceUID { + rule.IntervalSeconds = interval + } + } + return nil +} + +func (f *RuleStore) IncreaseVersionForAllRulesInNamespace(_ context.Context, orgID int64, namespaceUID string) ([]models.AlertRuleKeyWithVersion, error) { + f.mtx.Lock() + defer f.mtx.Unlock() + + f.RecordedOps = append(f.RecordedOps, GenericRecordedQuery{ + Name: "IncreaseVersionForAllRulesInNamespace", + Params: []interface{}{orgID, namespaceUID}, + }) + + var result []models.AlertRuleKeyWithVersion + + for _, rule := range f.Rules[orgID] { + if rule.NamespaceUID == namespaceUID && rule.OrgID == orgID { + rule.Version++ + rule.Updated = time.Now() + result = append(result, models.AlertRuleKeyWithVersion{ + Version: rule.Version, + AlertRuleKey: rule.GetKey(), + }) + } + } + return result, nil +} From 268a49cb3828e4e3b734788f66cd804f689664c7 Mon Sep 17 00:00:00 2001 From: Ryan McKinley Date: Fri, 30 Sep 2022 12:47:23 -0700 Subject: [PATCH 005/135] Devenv: add dashboard showing timeseries out of range points (#56130) --- .../timeseries-out-of-rage.json | 513 ++++++++++++++++++ .../object/testdata/dash_labels.jsonc | 11 +- .../searchV2/object/testdata/dash_raw.jsonc | 6 +- .../object/testdata/dash_references.jsonc | 10 +- .../object/testdata/dash_summary.jsonc | 5 +- 5 files changed, 541 insertions(+), 4 deletions(-) create mode 100644 devenv/dev-dashboards/panel-timeseries/timeseries-out-of-rage.json diff --git a/devenv/dev-dashboards/panel-timeseries/timeseries-out-of-rage.json b/devenv/dev-dashboards/panel-timeseries/timeseries-out-of-rage.json new file mode 100644 index 00000000000..1ca036ac71e --- /dev/null +++ b/devenv/dev-dashboards/panel-timeseries/timeseries-out-of-rage.json @@ -0,0 +1,513 @@ +{ + "annotations": { + "list": [ + { + "builtIn": 1, + "datasource": { + "type": "grafana", + "uid": "-- Grafana --" + }, + "enable": true, + "hide": true, + "iconColor": "rgba(0, 211, 255, 1)", + "name": "Annotations & Alerts", + "target": { + "limit": 100, + "matchAny": false, + "tags": [], + "type": "dashboard" + }, + "type": "dashboard" + } + ] + }, + "editable": true, + "fiscalYearStartMonth": 0, + "graphTooltip": 0, + "id": 1435, + "links": [], + "liveNow": false, + "panels": [ + { + "datasource": { + "type": "testdata", + "uid": "PD8C576611E62080A" + }, + "fieldConfig": { + "defaults": { + "color": { + "fixedColor": "blue", + "mode": "fixed" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 10, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 9, + "w": 8, + "x": 0, + "y": 0 + }, + "id": 3, + "maxDataPoints": 6, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "9.3.0-pre", + "targets": [ + { + "csvContent": "Time,Value,Name\n2022-09-01T05:00:00Z,100,Before\n2022-09-01T06:00:00Z,100,Middle", + "datasource": { + "type": "testdata", + "uid": "PD8C576611E62080A" + }, + "refId": "B", + "scenarioId": "csv_content" + } + ], + "title": "Before + Middle", + "type": "timeseries" + }, + { + "datasource": { + "type": "testdata", + "uid": "PD8C576611E62080A" + }, + "fieldConfig": { + "defaults": { + "color": { + "fixedColor": "blue", + "mode": "fixed" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 10, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 9, + "w": 8, + "x": 8, + "y": 0 + }, + "id": 2, + "maxDataPoints": 6, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "9.3.0-pre", + "targets": [ + { + "csvContent": "Time,Value,Name\n2022-09-01T05:00:00Z,100,Before\n2022-09-01T07:00:00Z,100,After\n", + "datasource": { + "type": "testdata", + "uid": "PD8C576611E62080A" + }, + "refId": "B", + "scenarioId": "csv_content" + } + ], + "title": "Before + After", + "type": "timeseries" + }, + { + "datasource": { + "type": "testdata", + "uid": "PD8C576611E62080A" + }, + "fieldConfig": { + "defaults": { + "color": { + "fixedColor": "blue", + "mode": "fixed" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 10, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 9, + "w": 8, + "x": 16, + "y": 0 + }, + "id": 4, + "maxDataPoints": 6, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "9.3.0-pre", + "targets": [ + { + "csvContent": "Time,Value,Name\n2022-09-01T06:00:00Z,100,Middle\n2022-09-01T07:00:00Z,100,After\n", + "datasource": { + "type": "testdata", + "uid": "PD8C576611E62080A" + }, + "refId": "B", + "scenarioId": "csv_content" + } + ], + "title": "Middle + After", + "type": "timeseries" + }, + { + "datasource": { + "type": "testdata", + "uid": "PD8C576611E62080A" + }, + "fieldConfig": { + "defaults": { + "color": { + "fixedColor": "blue", + "mode": "fixed" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 10, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 9, + "w": 12, + "x": 0, + "y": 9 + }, + "id": 5, + "maxDataPoints": 6, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "9.3.0-pre", + "targets": [ + { + "csvContent": "Time,Value,Name\n2022-09-01T04:00:00Z,100,Before1\n2022-09-01T05:00:00Z,100,Before2\n", + "datasource": { + "type": "testdata", + "uid": "PD8C576611E62080A" + }, + "refId": "B", + "scenarioId": "csv_content" + } + ], + "title": "Two points before (show zoom button)", + "type": "timeseries" + }, + { + "datasource": { + "type": "testdata", + "uid": "PD8C576611E62080A" + }, + "fieldConfig": { + "defaults": { + "color": { + "fixedColor": "blue", + "mode": "fixed" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 10, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 9, + "w": 12, + "x": 12, + "y": 9 + }, + "id": 6, + "maxDataPoints": 6, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "9.3.0-pre", + "targets": [ + { + "csvContent": "Time,Value,Name\n2022-09-01T07:00:00Z,100,After1\n2022-09-01T08:00:00Z,100,After2\n", + "datasource": { + "type": "testdata", + "uid": "PD8C576611E62080A" + }, + "refId": "B", + "scenarioId": "csv_content" + } + ], + "title": "Two points after (show zoom button)", + "type": "timeseries" + } + ], + "refresh": false, + "schemaVersion": 37, + "style": "dark", + "tags": [ + "gdev", + "panel-tests", + "graph-ng" + ], + "templating": { + "list": [] + }, + "time": { + "from": "now-6h", + "to": "now" + }, + "timepicker": {}, + "timezone": "", + "title": "Panel Tests - Timeseries - Out of range", + "uid": "pqnrfd4Vz", + "version": 1, + "weekStart": "" + } diff --git a/pkg/services/searchV2/object/testdata/dash_labels.jsonc b/pkg/services/searchV2/object/testdata/dash_labels.jsonc index dd1bae4ae22..c72589ce917 100644 --- a/pkg/services/searchV2/object/testdata/dash_labels.jsonc +++ b/pkg/services/searchV2/object/testdata/dash_labels.jsonc @@ -2,7 +2,7 @@ // // Frame[0] // Name: labels -// Dimensions: 3 Fields by 209 Rows +// Dimensions: 3 Fields by 212 Rows // +-----------------------------------------------------+-----------------+----------------+ // | Name: uid | Name: key | Name: value | // | Labels: | Labels: | Labels: | @@ -250,6 +250,9 @@ "panel-timeline/timeline-modes.json", "panel-timeline/timeline-modes.json", "panel-timeline/timeline-modes.json", + "panel-timeseries/timeseries-out-of-rage.json", + "panel-timeseries/timeseries-out-of-rage.json", + "panel-timeseries/timeseries-out-of-rage.json", "scenarios/time_zone_support.json", "scenarios/time_zone_support.json", "scenarios/time_zone_support.json", @@ -462,6 +465,9 @@ "graph-ng", "panel-tests", "gdev", + "graph-ng", + "panel-tests", + "gdev", "graph", "panel-tests", "table", @@ -684,6 +690,9 @@ "", "", "", + "", + "", + "", "" ] ] diff --git a/pkg/services/searchV2/object/testdata/dash_raw.jsonc b/pkg/services/searchV2/object/testdata/dash_raw.jsonc index 3223a3f73c6..4a8616193d1 100644 --- a/pkg/services/searchV2/object/testdata/dash_raw.jsonc +++ b/pkg/services/searchV2/object/testdata/dash_raw.jsonc @@ -2,7 +2,7 @@ // // Frame[0] // Name: raw -// Dimensions: 4 Fields by 96 Rows +// Dimensions: 4 Fields by 97 Rows // +---------------------------------------------------------+----------------+---------------+----------------------------------+ // | Name: uid | Name: kind | Name: size | Name: etag | // | Labels: | Labels: | Labels: | Labels: | @@ -150,6 +150,7 @@ "panel-text/text-options.json", "panel-timeline/timeline-demo.json", "panel-timeline/timeline-modes.json", + "panel-timeseries/timeseries-out-of-rage.json", "scenarios/slow_queries_and_annotations.json", "scenarios/time_zone_support.json", "transforms/config-from-query.json", @@ -254,6 +255,7 @@ "", "", "", + "", "" ], [ @@ -346,6 +348,7 @@ 7122, 10777, 8674, + 13368, 24166, 15128, 13876, @@ -444,6 +447,7 @@ "f6ea799109bb78d2f2954947a188d7b6", "dfcd599be6b6df94aef3b6da9d8ac3fb", "21dd0f87426cf7afc030d688d5516178", + "45294c2260bda5bba87039a18a98576d", "727c2c46deddeb164cd9ce36a0ec1567", "f517e61f40152e16f3291e72c27f606d", "c1cbaf503457216461032844f47ac065", diff --git a/pkg/services/searchV2/object/testdata/dash_references.jsonc b/pkg/services/searchV2/object/testdata/dash_references.jsonc index 80213368d6b..bc5076cdf13 100644 --- a/pkg/services/searchV2/object/testdata/dash_references.jsonc +++ b/pkg/services/searchV2/object/testdata/dash_references.jsonc @@ -2,7 +2,7 @@ // // Frame[0] // Name: references -// Dimensions: 4 Fields by 291 Rows +// Dimensions: 4 Fields by 293 Rows // +-------------------------------+----------------+----------------+----------------+ // | Name: uid | Name: kind | Name: type | Name: uid | // | Labels: | Labels: | Labels: | Labels: | @@ -328,6 +328,8 @@ "panel-timeline/timeline-modes.json", "panel-timeline/timeline-modes.json", "panel-timeline/timeline-modes.json", + "panel-timeseries/timeseries-out-of-rage.json", + "panel-timeseries/timeseries-out-of-rage.json", "scenarios/slow_queries_and_annotations.json", "scenarios/slow_queries_and_annotations.json", "scenarios/time_zone_support.json", @@ -627,6 +629,8 @@ "panel", "ds", "panel", + "ds", + "panel", "panel", "panel", "ds", @@ -915,6 +919,8 @@ "state-timeline", "status-history", "default.type", + "timeseries", + "default.type", "graph", "default.type", "graph", @@ -1213,6 +1219,8 @@ "", "default.uid", "", + "default.uid", + "", "", "", "default.uid", diff --git a/pkg/services/searchV2/object/testdata/dash_summary.jsonc b/pkg/services/searchV2/object/testdata/dash_summary.jsonc index a90c22afdd9..ebc30dbb6dc 100644 --- a/pkg/services/searchV2/object/testdata/dash_summary.jsonc +++ b/pkg/services/searchV2/object/testdata/dash_summary.jsonc @@ -2,7 +2,7 @@ // // Frame[0] // Name: summary -// Dimensions: 3 Fields by 96 Rows +// Dimensions: 3 Fields by 97 Rows // +---------------------------------------------------------+----------------------------------------------+--------------------------+ // | Name: uid | Name: name | Name: fields | // | Labels: | Labels: | Labels: | @@ -143,6 +143,7 @@ "panel-text/text-options.json", "panel-timeline/timeline-demo.json", "panel-timeline/timeline-modes.json", + "panel-timeseries/timeseries-out-of-rage.json", "scenarios/slow_queries_and_annotations.json", "scenarios/time_zone_support.json", "transforms/config-from-query.json", @@ -241,6 +242,7 @@ "Text options", "Timeline Demo", "Timeline Modes", + "Panel Tests - Timeseries - Out of range", "Panel tests - Slow Queries \u0026 Annotations", "Panel Tests - Time zone support", "Transforms - Config from query", @@ -409,6 +411,7 @@ {}, {}, {}, + {}, {} ] ] From 85b965cbec21637fe062572eefa8ca8f10fc102b Mon Sep 17 00:00:00 2001 From: Artur Wierzbicki Date: Fri, 30 Sep 2022 23:56:07 +0400 Subject: [PATCH 006/135] Storage: Dummy object server and basic integration tests (#56014) * object extractors * update bluge to use summary values * gosec * move to store/object package * references * references * references * same thign but with protobuf * now the service * now with summary * now with summary * from protobuf * from protobuf * cleanup * remove hand crafted file * update proto definitions * update comments * remove properties * remove properties * re-generate * add batch * move ref to raw struct * GRPC test infra * fix merge * add delete * lint * rename to dummyobjectserver * update comment * refactor collection, simplify dummy server * update * refactor test structure * more tests * more tests * replace collection with infra/persistentcollection * skip if not integration test suite * very important lint fix Co-authored-by: Ryan McKinley --- .../backgroundsvcs/background_services.go | 4 +- pkg/server/wire.go | 2 + .../store/object/dummy/dummy_server.go | 307 ++++++++++++++++ pkg/services/store/object/tests/common.go | 71 ++++ .../object/tests/server_integration_test.go | 334 ++++++++++++++++++ 5 files changed, 716 insertions(+), 2 deletions(-) create mode 100644 pkg/services/store/object/dummy/dummy_server.go create mode 100644 pkg/services/store/object/tests/common.go create mode 100644 pkg/services/store/object/tests/server_integration_test.go diff --git a/pkg/server/backgroundsvcs/background_services.go b/pkg/server/backgroundsvcs/background_services.go index 03aa3837eef..eaaa092aa08 100644 --- a/pkg/server/backgroundsvcs/background_services.go +++ b/pkg/server/backgroundsvcs/background_services.go @@ -29,6 +29,7 @@ import ( "github.com/grafana/grafana/pkg/services/serviceaccounts" samanager "github.com/grafana/grafana/pkg/services/serviceaccounts/manager" "github.com/grafana/grafana/pkg/services/store" + "github.com/grafana/grafana/pkg/services/store/object" "github.com/grafana/grafana/pkg/services/store/sanitizer" "github.com/grafana/grafana/pkg/services/thumbs" "github.com/grafana/grafana/pkg/services/updatechecker" @@ -50,8 +51,7 @@ func ProvideBackgroundServiceRegistry( _ dashboardsnapshots.Service, _ *alerting.AlertNotificationService, _ serviceaccounts.Service, _ *guardian.Provider, _ *plugindashboardsservice.DashboardUpdater, _ *sanitizer.Provider, - _ *grpcserver.HealthService, - _ *grpcserver.ReflectionService, + _ *grpcserver.HealthService, _ object.ObjectStoreServer, _ *grpcserver.ReflectionService, ) *BackgroundServiceRegistry { return NewBackgroundServiceRegistry( httpServer, diff --git a/pkg/server/wire.go b/pkg/server/wire.go index 109d1619b9a..c507b20f03f 100644 --- a/pkg/server/wire.go +++ b/pkg/server/wire.go @@ -121,6 +121,7 @@ import ( "github.com/grafana/grafana/pkg/services/sqlstore/mockstore" "github.com/grafana/grafana/pkg/services/star/starimpl" "github.com/grafana/grafana/pkg/services/store" + objectdummyserver "github.com/grafana/grafana/pkg/services/store/object/dummy" "github.com/grafana/grafana/pkg/services/store/sanitizer" "github.com/grafana/grafana/pkg/services/tag" "github.com/grafana/grafana/pkg/services/tag/tagimpl" @@ -345,6 +346,7 @@ var wireBasicSet = wire.NewSet( grpcserver.ProvideService, grpcserver.ProvideHealthService, grpcserver.ProvideReflectionService, + objectdummyserver.ProvideDummyObjectServer, teamimpl.ProvideService, tempuserimpl.ProvideService, loginattemptimpl.ProvideService, diff --git a/pkg/services/store/object/dummy/dummy_server.go b/pkg/services/store/object/dummy/dummy_server.go new file mode 100644 index 00000000000..20a439f6d93 --- /dev/null +++ b/pkg/services/store/object/dummy/dummy_server.go @@ -0,0 +1,307 @@ +package objectdummyserver + +import ( + "context" + "crypto/md5" + "encoding/hex" + "errors" + "fmt" + "strconv" + "time" + + "github.com/grafana/grafana/pkg/infra/log" + "github.com/grafana/grafana/pkg/infra/x/persistentcollection" + "github.com/grafana/grafana/pkg/services/grpcserver" + "github.com/grafana/grafana/pkg/services/store/object" + "github.com/grafana/grafana/pkg/services/user" + "github.com/grafana/grafana/pkg/setting" +) + +type RawObjectWithHistory struct { + *object.RawObject `json:"rawObject,omitempty"` + History []*object.RawObject `json:"history,omitempty"` +} + +var ( + // increment when RawObject changes + rawObjectVersion = 1 +) + +func ProvideDummyObjectServer(cfg *setting.Cfg, grpcServerProvider grpcserver.Provider) object.ObjectStoreServer { + objectServer := &dummyObjectServer{ + collection: persistentcollection.NewLocalFSPersistentCollection[*RawObjectWithHistory]("raw-object", cfg.DataPath, rawObjectVersion), + log: log.New("in-memory-object-server"), + } + object.RegisterObjectStoreServer(grpcServerProvider.GetServer(), objectServer) + return objectServer +} + +type dummyObjectServer struct { + log log.Logger + collection persistentcollection.PersistentCollection[*RawObjectWithHistory] +} + +func namespaceFromUID(uid string) string { + // TODO + return "orgId-1" +} + +func userFromContext(ctx context.Context) *user.SignedInUser { + // TODO implement in GRPC server + return &user.SignedInUser{ + UserID: 1, + OrgID: 1, + Login: "fake", + } +} + +func (i dummyObjectServer) findObject(ctx context.Context, uid string, kind string, version string) (*RawObjectWithHistory, *object.RawObject, error) { + if uid == "" { + return nil, nil, errors.New("UID must not be empty") + } + + obj, err := i.collection.FindFirst(ctx, namespaceFromUID(uid), func(i *RawObjectWithHistory) (bool, error) { + return i.UID == uid && i.Kind == kind, nil + }) + + if err != nil { + return nil, nil, err + } + + if obj == nil { + return nil, nil, nil + } + + getLatestVersion := version == "" + if getLatestVersion { + objVersion := obj.History[len(obj.History)-1] + return obj, objVersion, nil + } + + for _, objVersion := range obj.History { + if objVersion.Version == version { + return obj, objVersion, nil + } + } + + return obj, nil, nil +} + +func (i dummyObjectServer) Read(ctx context.Context, r *object.ReadObjectRequest) (*object.ReadObjectResponse, error) { + _, objVersion, err := i.findObject(ctx, r.UID, r.Kind, r.Version) + if err != nil { + return nil, err + } + + if objVersion == nil { + return &object.ReadObjectResponse{ + Object: nil, + SummaryJson: nil, + }, nil + } + + return &object.ReadObjectResponse{ + Object: objVersion, + SummaryJson: nil, + }, nil +} + +func (i dummyObjectServer) BatchRead(ctx context.Context, batchR *object.BatchReadObjectRequest) (*object.BatchReadObjectResponse, error) { + results := make([]*object.ReadObjectResponse, 0) + for _, r := range batchR.Batch { + resp, err := i.Read(ctx, r) + if err != nil { + return nil, err + } + results = append(results, resp) + } + + return &object.BatchReadObjectResponse{Results: results}, nil +} + +func createContentsHash(contents []byte) string { + hash := md5.Sum(contents) + return hex.EncodeToString(hash[:]) +} + +func (i dummyObjectServer) update(ctx context.Context, r *object.WriteObjectRequest, namespace string) (*object.WriteObjectResponse, error) { + var updated *object.RawObject + + updatedCount, err := i.collection.Update(ctx, namespace, func(i *RawObjectWithHistory) (bool, *RawObjectWithHistory, error) { + match := i.UID == r.UID && i.Kind == r.Kind + if !match { + return false, nil, nil + } + + if r.PreviousVersion != "" && i.Version != r.PreviousVersion { + return false, nil, fmt.Errorf("expected the previous version to be %s, but was %s", r.PreviousVersion, i.Version) + } + + prevVersion, err := strconv.Atoi(i.Version) + if err != nil { + return false, nil, err + } + + modifier := userFromContext(ctx) + + updated = &object.RawObject{ + UID: r.UID, + Kind: r.Kind, + Created: i.Created, + CreatedBy: i.CreatedBy, + Modified: time.Now().Unix(), + ModifiedBy: &object.UserInfo{ + Id: modifier.UserID, + Login: modifier.Login, + }, + Size: int64(len(r.Body)), + ETag: createContentsHash(r.Body), + Body: r.Body, + Version: fmt.Sprintf("%d", prevVersion+1), + Comment: r.Comment, + } + + return true, &RawObjectWithHistory{ + RawObject: updated, + History: append(i.History, updated), + }, nil + }) + + if err != nil { + return nil, err + } + + if updatedCount == 0 { + return nil, fmt.Errorf("could not find object with uid %s and kind %s", r.UID, r.Kind) + } + + return &object.WriteObjectResponse{ + Error: nil, + Object: updated, + }, nil +} + +func (i dummyObjectServer) insert(ctx context.Context, r *object.WriteObjectRequest, namespace string) (*object.WriteObjectResponse, error) { + modifier := userFromContext(ctx) + rawObj := &object.RawObject{ + UID: r.UID, + Kind: r.Kind, + Modified: time.Now().Unix(), + Created: time.Now().Unix(), + CreatedBy: &object.UserInfo{ + Id: modifier.UserID, + Login: modifier.Login, + }, + ModifiedBy: &object.UserInfo{ + Id: modifier.UserID, + Login: modifier.Login, + }, + Size: int64(len(r.Body)), + ETag: createContentsHash(r.Body), + Body: r.Body, + Version: fmt.Sprintf("%d", 1), + Comment: r.Comment, + } + newObj := &RawObjectWithHistory{ + RawObject: rawObj, + History: []*object.RawObject{rawObj}, + } + + err := i.collection.Insert(ctx, namespace, newObj) + if err != nil { + return nil, err + } + + return &object.WriteObjectResponse{ + Error: nil, + Object: newObj.RawObject, + }, nil +} + +func (i dummyObjectServer) Write(ctx context.Context, r *object.WriteObjectRequest) (*object.WriteObjectResponse, error) { + namespace := namespaceFromUID(r.UID) + obj, err := i.collection.FindFirst(ctx, namespace, func(i *RawObjectWithHistory) (bool, error) { + return i.UID == r.UID, nil + }) + if err != nil { + return nil, err + } + + if obj == nil { + return i.insert(ctx, r, namespace) + } + + return i.update(ctx, r, namespace) +} + +func (i dummyObjectServer) Delete(ctx context.Context, r *object.DeleteObjectRequest) (*object.DeleteObjectResponse, error) { + _, err := i.collection.Delete(ctx, namespaceFromUID(r.UID), func(i *RawObjectWithHistory) (bool, error) { + match := i.UID == r.UID && i.Kind == r.Kind + if match { + if r.PreviousVersion != "" && i.Version != r.PreviousVersion { + return false, fmt.Errorf("expected the previous version to be %s, but was %s", r.PreviousVersion, i.Version) + } + + return true, nil + } + + return false, nil + }) + + if err != nil { + return nil, err + } + + return &object.DeleteObjectResponse{ + OK: true, + }, nil +} + +func (i dummyObjectServer) History(ctx context.Context, r *object.ObjectHistoryRequest) (*object.ObjectHistoryResponse, error) { + obj, _, err := i.findObject(ctx, r.UID, r.Kind, "") + if err != nil { + return nil, err + } + + if obj == nil { + return &object.ObjectHistoryResponse{ + Object: nil, + }, nil + } + + return &object.ObjectHistoryResponse{ + Object: obj.History, + }, nil +} + +func (i dummyObjectServer) Search(ctx context.Context, r *object.ObjectSearchRequest) (*object.ObjectSearchResponse, error) { + var kindMap map[string]bool + if len(r.Kind) != 0 { + kindMap = make(map[string]bool) + for _, k := range r.Kind { + kindMap[k] = true + } + } + + // TODO more filters + objects, err := i.collection.Find(ctx, namespaceFromUID("TODO"), func(i *RawObjectWithHistory) (bool, error) { + if len(r.Kind) != 0 { + if _, ok := kindMap[i.Kind]; !ok { + return false, nil + } + } + return true, nil + }) + if err != nil { + return nil, err + } + + rawObjects := make([]*object.RawObject, 0) + for _, o := range objects { + rawObjects = append(rawObjects, o.RawObject) + } + + return &object.ObjectSearchResponse{ + Results: rawObjects, + }, nil +} diff --git a/pkg/services/store/object/tests/common.go b/pkg/services/store/object/tests/common.go new file mode 100644 index 00000000000..1b70fcb1325 --- /dev/null +++ b/pkg/services/store/object/tests/common.go @@ -0,0 +1,71 @@ +package object_server_tests + +import ( + "testing" + + apikeygenprefix "github.com/grafana/grafana/pkg/components/apikeygenprefixed" + "github.com/grafana/grafana/pkg/server" + "github.com/grafana/grafana/pkg/services/org" + saAPI "github.com/grafana/grafana/pkg/services/serviceaccounts/api" + saTests "github.com/grafana/grafana/pkg/services/serviceaccounts/tests" + "github.com/grafana/grafana/pkg/services/store/object" + "github.com/grafana/grafana/pkg/tests/testinfra" + "github.com/stretchr/testify/require" + "google.golang.org/grpc" + "google.golang.org/grpc/credentials/insecure" +) + +func createServiceAccountAdminToken(t *testing.T, env *server.TestEnv) string { + t.Helper() + + account := saTests.SetupUserServiceAccount(t, env.SQLStore, saTests.TestUser{ + Name: "grpc-server-sa", + Role: string(org.RoleAdmin), + Login: "grpc-server-sa", + IsServiceAccount: true, + OrgID: 1, + }) + + keyGen, err := apikeygenprefix.New(saAPI.ServiceID) + require.NoError(t, err) + + _ = saTests.SetupApiKey(t, env.SQLStore, saTests.TestApiKey{ + Name: "grpc-server-test", + Role: org.RoleAdmin, + OrgId: account.OrgID, + Key: keyGen.HashedKey, + ServiceAccountID: &account.ID, + }) + + return keyGen.ClientSecret +} + +type testContext struct { + authToken string + client object.ObjectStoreClient +} + +func createTestContext(t *testing.T) testContext { + t.Helper() + + dir, path := testinfra.CreateGrafDir(t, testinfra.GrafanaOpts{ + EnableFeatureToggles: []string{"grpcServer"}, + GRPCServerAddress: "127.0.0.1:0", // :0 for choosing the port automatically + }) + _, env := testinfra.StartGrafanaEnv(t, dir, path) + + authToken := createServiceAccountAdminToken(t, env) + + conn, err := grpc.Dial( + env.GRPCServer.GetAddress(), + grpc.WithTransportCredentials(insecure.NewCredentials()), + ) + require.NoError(t, err) + + client := object.NewObjectStoreClient(conn) + + return testContext{ + authToken: authToken, + client: client, + } +} diff --git a/pkg/services/store/object/tests/server_integration_test.go b/pkg/services/store/object/tests/server_integration_test.go new file mode 100644 index 00000000000..e0410c63e91 --- /dev/null +++ b/pkg/services/store/object/tests/server_integration_test.go @@ -0,0 +1,334 @@ +package object_server_tests + +import ( + "context" + "crypto/md5" + "encoding/hex" + "fmt" + "reflect" + "strings" + "testing" + "time" + + "github.com/grafana/grafana/pkg/services/store/object" + "github.com/stretchr/testify/require" + "google.golang.org/grpc/metadata" +) + +func createContentsHash(contents []byte) string { + hash := md5.Sum(contents) + return hex.EncodeToString(hash[:]) +} + +type rawObjectMatcher struct { + uid *string + kind *string + createdRange []time.Time + modifiedRange []time.Time + createdBy *object.UserInfo + modifiedBy *object.UserInfo + body []byte + version *string + comment *string +} + +func userInfoMatches(expected *object.UserInfo, actual *object.UserInfo) (bool, string) { + var mismatches []string + + if expected.Id != actual.Id { + mismatches = append(mismatches, fmt.Sprintf("expected ID %d, actual ID: %d", expected.Id, actual.Id)) + } + + if expected.Login != actual.Login { + mismatches = append(mismatches, fmt.Sprintf("expected login %s, actual login: %s", expected.Login, actual.Login)) + } + + return len(mismatches) == 0, strings.Join(mismatches, ", ") +} + +func timestampInRange(ts int64, tsRange []time.Time) bool { + return ts >= tsRange[0].Unix() && ts <= tsRange[1].Unix() +} + +func requireObjectMatch(t *testing.T, obj *object.RawObject, m rawObjectMatcher) { + t.Helper() + mismatches := "" + if m.uid != nil && *m.uid != obj.UID { + mismatches += fmt.Sprintf("expected UID: %s, actual UID: %s\n", *m.uid, obj.UID) + } + + if m.kind != nil && *m.kind != obj.Kind { + mismatches += fmt.Sprintf("expected kind: %s, actual kind: %s\n", *m.kind, obj.Kind) + } + + if len(m.createdRange) == 2 && !timestampInRange(obj.Created, m.createdRange) { + mismatches += fmt.Sprintf("expected createdBy range: [from %s to %s], actual created: %s\n", m.createdRange[0], m.createdRange[1], time.Unix(obj.Created, 0)) + } + + if len(m.modifiedRange) == 2 && !timestampInRange(obj.Modified, m.modifiedRange) { + mismatches += fmt.Sprintf("expected createdBy range: [from %s to %s], actual created: %s\n", m.createdRange[0], m.createdRange[1], time.Unix(obj.Created, 0)) + } + + if m.createdBy != nil { + userInfoMatches, msg := userInfoMatches(m.createdBy, obj.CreatedBy) + if !userInfoMatches { + mismatches += fmt.Sprintf("createdBy: %s\n", msg) + } + } + + if m.modifiedBy != nil { + userInfoMatches, msg := userInfoMatches(m.modifiedBy, obj.ModifiedBy) + if !userInfoMatches { + mismatches += fmt.Sprintf("modifiedBy: %s\n", msg) + } + } + + if !reflect.DeepEqual(m.body, obj.Body) { + mismatches += fmt.Sprintf("expected body len: %d, actual body len: %d\n", len(m.body), len(obj.Body)) + } + + expectedHash := createContentsHash(m.body) + actualHash := createContentsHash(obj.Body) + if expectedHash != actualHash { + mismatches += fmt.Sprintf("expected body hash: %s, actual body hash: %s\n", expectedHash, actualHash) + } + + if m.version != nil && *m.version != obj.Version { + mismatches += fmt.Sprintf("expected version: %s, actual version: %s\n", *m.version, obj.Version) + } + + if m.comment != nil && *m.comment != obj.Comment { + mismatches += fmt.Sprintf("expected comment: %s, actual comment: %s\n", *m.comment, obj.Comment) + } + + require.True(t, len(mismatches) == 0, mismatches) +} + +func TestObjectServer(t *testing.T) { + if testing.Short() { + t.Skip("skipping integration test") + } + + ctx := context.Background() + testCtx := createTestContext(t) + ctx = metadata.AppendToOutgoingContext(ctx, "authorization", fmt.Sprintf("Bearer %s", testCtx.authToken)) + + fakeUser := &object.UserInfo{ + Login: "fake", + Id: 1, + } + firstVersion := "1" + kind := "dashboard" + uid := "my-test-entity" + body := []byte("{\"name\":\"John\"}") + + t.Run("should not retrieve non-existent objects", func(t *testing.T) { + resp, err := testCtx.client.Read(ctx, &object.ReadObjectRequest{ + UID: uid, + Kind: kind, + }) + require.NoError(t, err) + + require.NotNil(t, resp) + require.Nil(t, resp.Object) + }) + + t.Run("should be able to read persisted objects", func(t *testing.T) { + before := time.Now() + writeReq := &object.WriteObjectRequest{ + UID: uid, + Kind: kind, + Body: body, + Comment: "first entity!", + } + writeResp, err := testCtx.client.Write(ctx, writeReq) + require.NoError(t, err) + + objectMatcher := rawObjectMatcher{ + uid: &uid, + kind: &kind, + createdRange: []time.Time{before, time.Now()}, + modifiedRange: []time.Time{before, time.Now()}, + createdBy: fakeUser, + modifiedBy: fakeUser, + body: body, + version: &firstVersion, + comment: &writeReq.Comment, + } + requireObjectMatch(t, writeResp.Object, objectMatcher) + + readResp, err := testCtx.client.Read(ctx, &object.ReadObjectRequest{ + UID: uid, + Kind: kind, + Version: "", + WithBody: true, + }) + require.NoError(t, err) + require.Nil(t, readResp.SummaryJson) + requireObjectMatch(t, writeResp.Object, objectMatcher) + + deleteResp, err := testCtx.client.Delete(ctx, &object.DeleteObjectRequest{ + UID: uid, + Kind: kind, + PreviousVersion: writeResp.Object.Version, + }) + require.NoError(t, err) + require.True(t, deleteResp.OK) + + readRespAfterDelete, err := testCtx.client.Read(ctx, &object.ReadObjectRequest{ + UID: uid, + Kind: kind, + Version: "", + WithBody: true, + }) + require.NoError(t, err) + require.Nil(t, readRespAfterDelete.Object) + }) + + t.Run("should be able to update an object", func(t *testing.T) { + before := time.Now() + writeReq1 := &object.WriteObjectRequest{ + UID: uid, + Kind: kind, + Body: body, + Comment: "first entity!", + } + writeResp1, err := testCtx.client.Write(ctx, writeReq1) + require.NoError(t, err) + + body2 := []byte("{\"name\":\"John2\"}") + + writeReq2 := &object.WriteObjectRequest{ + UID: uid, + Kind: kind, + Body: body2, + Comment: "update1", + } + writeResp2, err := testCtx.client.Write(ctx, writeReq2) + require.NoError(t, err) + require.NotEqual(t, writeResp1.Object.Version, writeResp2.Object.Version) + + body3 := []byte("{\"name\":\"John3\"}") + writeReq3 := &object.WriteObjectRequest{ + UID: uid, + Kind: kind, + Body: body3, + Comment: "update3", + } + writeResp3, err := testCtx.client.Write(ctx, writeReq3) + require.NoError(t, err) + require.NotEqual(t, writeResp3.Object.Version, writeResp2.Object.Version) + + latestMatcher := rawObjectMatcher{ + uid: &uid, + kind: &kind, + createdRange: []time.Time{before, time.Now()}, + modifiedRange: []time.Time{before, time.Now()}, + createdBy: fakeUser, + modifiedBy: fakeUser, + body: body3, + version: &writeResp3.Object.Version, + comment: &writeReq3.Comment, + } + readRespLatest, err := testCtx.client.Read(ctx, &object.ReadObjectRequest{ + UID: uid, + Kind: kind, + Version: "", // latest + WithBody: true, + }) + require.NoError(t, err) + require.Nil(t, readRespLatest.SummaryJson) + requireObjectMatch(t, readRespLatest.Object, latestMatcher) + + readRespFirstVer, err := testCtx.client.Read(ctx, &object.ReadObjectRequest{ + UID: uid, + Kind: kind, + Version: writeResp1.Object.Version, + WithBody: true, + }) + + require.NoError(t, err) + require.Nil(t, readRespFirstVer.SummaryJson) + require.NotNil(t, readRespFirstVer.Object) + requireObjectMatch(t, readRespFirstVer.Object, rawObjectMatcher{ + uid: &uid, + kind: &kind, + createdRange: []time.Time{before, time.Now()}, + modifiedRange: []time.Time{before, time.Now()}, + createdBy: fakeUser, + modifiedBy: fakeUser, + body: body, + version: &firstVersion, + comment: &writeReq1.Comment, + }) + + history, err := testCtx.client.History(ctx, &object.ObjectHistoryRequest{ + UID: uid, + Kind: kind, + }) + require.NoError(t, err) + require.Equal(t, []*object.RawObject{ + writeResp1.Object, + writeResp2.Object, + writeResp3.Object, + }, history.Object) + + deleteResp, err := testCtx.client.Delete(ctx, &object.DeleteObjectRequest{ + UID: uid, + Kind: kind, + PreviousVersion: writeResp3.Object.Version, + }) + require.NoError(t, err) + require.True(t, deleteResp.OK) + }) + + t.Run("should be able to search for objects", func(t *testing.T) { + uid2 := "uid2" + uid3 := "uid3" + uid4 := "uid4" + kind2 := "kind2" + w1, err := testCtx.client.Write(ctx, &object.WriteObjectRequest{ + UID: uid, + Kind: kind, + Body: body, + }) + require.NoError(t, err) + + w2, err := testCtx.client.Write(ctx, &object.WriteObjectRequest{ + UID: uid2, + Kind: kind, + Body: body, + }) + require.NoError(t, err) + + w3, err := testCtx.client.Write(ctx, &object.WriteObjectRequest{ + UID: uid3, + Kind: kind2, + Body: body, + }) + require.NoError(t, err) + + w4, err := testCtx.client.Write(ctx, &object.WriteObjectRequest{ + UID: uid4, + Kind: kind2, + Body: body, + }) + require.NoError(t, err) + + search, err := testCtx.client.Search(ctx, &object.ObjectSearchRequest{ + Kind: []string{kind, kind2}, + }) + require.NoError(t, err) + require.Equal(t, []*object.RawObject{ + w1.Object, w2.Object, w3.Object, w4.Object, + }, search.Results) + + searchKind1, err := testCtx.client.Search(ctx, &object.ObjectSearchRequest{ + Kind: []string{kind}, + }) + require.NoError(t, err) + require.Equal(t, []*object.RawObject{ + w1.Object, w2.Object, + }, searchKind1.Results) + }) +} From 385ebea5404a96e6649d17dc54ec97bf33a19bcf Mon Sep 17 00:00:00 2001 From: Ryan McKinley Date: Fri, 30 Sep 2022 13:10:20 -0700 Subject: [PATCH 007/135] Devenv: move timeseries dashboards to a timeseries folder (#56131) --- .../timeseries-by-value-color-schemes.json} | 0 .../timeseries-gradient-area.json} | 0 .../timeseries-hue-gradients.json} | 0 .../timeseries-nulls.json} | 0 ...eries-shared-tooltip-cursor-position.json} | 0 .../timeseries-soft-limits.json} | 0 .../timeseries-stacking.json} | 0 .../timeseries-stacking2.json} | 0 .../timeseries-thresholds.json} | 0 .../timeseries-time.json} | 0 .../timeseries-y-ticks-zero-decimals.json} | 0 .../timeseries-yaxis-ticks.json} | 0 .../timeseries.json} | 0 .../object/testdata/dash_labels.jsonc | 156 ++++++------ .../searchV2/object/testdata/dash_raw.jsonc | 78 +++--- .../object/testdata/dash_references.jsonc | 232 +++++++++--------- .../object/testdata/dash_summary.jsonc | 78 +++--- 17 files changed, 272 insertions(+), 272 deletions(-) rename devenv/dev-dashboards/{panel-graph/graph-ng-by-value-color-schemes.json => panel-timeseries/timeseries-by-value-color-schemes.json} (100%) rename devenv/dev-dashboards/{panel-graph/graph-ng-gradient-area.json => panel-timeseries/timeseries-gradient-area.json} (100%) rename devenv/dev-dashboards/{panel-graph/graph-ng-hue-gradients.json => panel-timeseries/timeseries-hue-gradients.json} (100%) rename devenv/dev-dashboards/{panel-graph/graph-ng-nulls.json => panel-timeseries/timeseries-nulls.json} (100%) rename devenv/dev-dashboards/{panel-graph/graph-shared-tooltip-cursor-position.json => panel-timeseries/timeseries-shared-tooltip-cursor-position.json} (100%) rename devenv/dev-dashboards/{panel-graph/graph-ng-soft-limits.json => panel-timeseries/timeseries-soft-limits.json} (100%) rename devenv/dev-dashboards/{panel-graph/graph-ng-stacking.json => panel-timeseries/timeseries-stacking.json} (100%) rename devenv/dev-dashboards/{panel-graph/graph-ng-stacking2.json => panel-timeseries/timeseries-stacking2.json} (100%) rename devenv/dev-dashboards/{panel-graph/graph-ng-thresholds.json => panel-timeseries/timeseries-thresholds.json} (100%) rename devenv/dev-dashboards/{panel-graph/graph-ng-time.json => panel-timeseries/timeseries-time.json} (100%) rename devenv/dev-dashboards/{panel-graph/graph-ng-y-ticks-zero-decimals.json => panel-timeseries/timeseries-y-ticks-zero-decimals.json} (100%) rename devenv/dev-dashboards/{panel-graph/graph-ng-yaxis-ticks.json => panel-timeseries/timeseries-yaxis-ticks.json} (100%) rename devenv/dev-dashboards/{panel-graph/graph-ng.json => panel-timeseries/timeseries.json} (100%) diff --git a/devenv/dev-dashboards/panel-graph/graph-ng-by-value-color-schemes.json b/devenv/dev-dashboards/panel-timeseries/timeseries-by-value-color-schemes.json similarity index 100% rename from devenv/dev-dashboards/panel-graph/graph-ng-by-value-color-schemes.json rename to devenv/dev-dashboards/panel-timeseries/timeseries-by-value-color-schemes.json diff --git a/devenv/dev-dashboards/panel-graph/graph-ng-gradient-area.json b/devenv/dev-dashboards/panel-timeseries/timeseries-gradient-area.json similarity index 100% rename from devenv/dev-dashboards/panel-graph/graph-ng-gradient-area.json rename to devenv/dev-dashboards/panel-timeseries/timeseries-gradient-area.json diff --git a/devenv/dev-dashboards/panel-graph/graph-ng-hue-gradients.json b/devenv/dev-dashboards/panel-timeseries/timeseries-hue-gradients.json similarity index 100% rename from devenv/dev-dashboards/panel-graph/graph-ng-hue-gradients.json rename to devenv/dev-dashboards/panel-timeseries/timeseries-hue-gradients.json diff --git a/devenv/dev-dashboards/panel-graph/graph-ng-nulls.json b/devenv/dev-dashboards/panel-timeseries/timeseries-nulls.json similarity index 100% rename from devenv/dev-dashboards/panel-graph/graph-ng-nulls.json rename to devenv/dev-dashboards/panel-timeseries/timeseries-nulls.json diff --git a/devenv/dev-dashboards/panel-graph/graph-shared-tooltip-cursor-position.json b/devenv/dev-dashboards/panel-timeseries/timeseries-shared-tooltip-cursor-position.json similarity index 100% rename from devenv/dev-dashboards/panel-graph/graph-shared-tooltip-cursor-position.json rename to devenv/dev-dashboards/panel-timeseries/timeseries-shared-tooltip-cursor-position.json diff --git a/devenv/dev-dashboards/panel-graph/graph-ng-soft-limits.json b/devenv/dev-dashboards/panel-timeseries/timeseries-soft-limits.json similarity index 100% rename from devenv/dev-dashboards/panel-graph/graph-ng-soft-limits.json rename to devenv/dev-dashboards/panel-timeseries/timeseries-soft-limits.json diff --git a/devenv/dev-dashboards/panel-graph/graph-ng-stacking.json b/devenv/dev-dashboards/panel-timeseries/timeseries-stacking.json similarity index 100% rename from devenv/dev-dashboards/panel-graph/graph-ng-stacking.json rename to devenv/dev-dashboards/panel-timeseries/timeseries-stacking.json diff --git a/devenv/dev-dashboards/panel-graph/graph-ng-stacking2.json b/devenv/dev-dashboards/panel-timeseries/timeseries-stacking2.json similarity index 100% rename from devenv/dev-dashboards/panel-graph/graph-ng-stacking2.json rename to devenv/dev-dashboards/panel-timeseries/timeseries-stacking2.json diff --git a/devenv/dev-dashboards/panel-graph/graph-ng-thresholds.json b/devenv/dev-dashboards/panel-timeseries/timeseries-thresholds.json similarity index 100% rename from devenv/dev-dashboards/panel-graph/graph-ng-thresholds.json rename to devenv/dev-dashboards/panel-timeseries/timeseries-thresholds.json diff --git a/devenv/dev-dashboards/panel-graph/graph-ng-time.json b/devenv/dev-dashboards/panel-timeseries/timeseries-time.json similarity index 100% rename from devenv/dev-dashboards/panel-graph/graph-ng-time.json rename to devenv/dev-dashboards/panel-timeseries/timeseries-time.json diff --git a/devenv/dev-dashboards/panel-graph/graph-ng-y-ticks-zero-decimals.json b/devenv/dev-dashboards/panel-timeseries/timeseries-y-ticks-zero-decimals.json similarity index 100% rename from devenv/dev-dashboards/panel-graph/graph-ng-y-ticks-zero-decimals.json rename to devenv/dev-dashboards/panel-timeseries/timeseries-y-ticks-zero-decimals.json diff --git a/devenv/dev-dashboards/panel-graph/graph-ng-yaxis-ticks.json b/devenv/dev-dashboards/panel-timeseries/timeseries-yaxis-ticks.json similarity index 100% rename from devenv/dev-dashboards/panel-graph/graph-ng-yaxis-ticks.json rename to devenv/dev-dashboards/panel-timeseries/timeseries-yaxis-ticks.json diff --git a/devenv/dev-dashboards/panel-graph/graph-ng.json b/devenv/dev-dashboards/panel-timeseries/timeseries.json similarity index 100% rename from devenv/dev-dashboards/panel-graph/graph-ng.json rename to devenv/dev-dashboards/panel-timeseries/timeseries.json diff --git a/pkg/services/searchV2/object/testdata/dash_labels.jsonc b/pkg/services/searchV2/object/testdata/dash_labels.jsonc index c72589ce917..47c475452cf 100644 --- a/pkg/services/searchV2/object/testdata/dash_labels.jsonc +++ b/pkg/services/searchV2/object/testdata/dash_labels.jsonc @@ -170,45 +170,6 @@ "panel-graph/graph-gradient-area-fills.json", "panel-graph/graph-gradient-area-fills.json", "panel-graph/graph-gradient-area-fills.json", - "panel-graph/graph-ng-by-value-color-schemes.json", - "panel-graph/graph-ng-by-value-color-schemes.json", - "panel-graph/graph-ng-by-value-color-schemes.json", - "panel-graph/graph-ng-gradient-area.json", - "panel-graph/graph-ng-gradient-area.json", - "panel-graph/graph-ng-gradient-area.json", - "panel-graph/graph-ng-hue-gradients.json", - "panel-graph/graph-ng-hue-gradients.json", - "panel-graph/graph-ng-hue-gradients.json", - "panel-graph/graph-ng-nulls.json", - "panel-graph/graph-ng-nulls.json", - "panel-graph/graph-ng-nulls.json", - "panel-graph/graph-ng-soft-limits.json", - "panel-graph/graph-ng-soft-limits.json", - "panel-graph/graph-ng-soft-limits.json", - "panel-graph/graph-ng-stacking.json", - "panel-graph/graph-ng-stacking.json", - "panel-graph/graph-ng-stacking.json", - "panel-graph/graph-ng-stacking2.json", - "panel-graph/graph-ng-stacking2.json", - "panel-graph/graph-ng-stacking2.json", - "panel-graph/graph-ng-thresholds.json", - "panel-graph/graph-ng-thresholds.json", - "panel-graph/graph-ng-thresholds.json", - "panel-graph/graph-ng-time.json", - "panel-graph/graph-ng-time.json", - "panel-graph/graph-ng-time.json", - "panel-graph/graph-ng-y-ticks-zero-decimals.json", - "panel-graph/graph-ng-y-ticks-zero-decimals.json", - "panel-graph/graph-ng-y-ticks-zero-decimals.json", - "panel-graph/graph-ng-yaxis-ticks.json", - "panel-graph/graph-ng-yaxis-ticks.json", - "panel-graph/graph-ng-yaxis-ticks.json", - "panel-graph/graph-ng.json", - "panel-graph/graph-ng.json", - "panel-graph/graph-ng.json", - "panel-graph/graph-shared-tooltip-cursor-position.json", - "panel-graph/graph-shared-tooltip-cursor-position.json", - "panel-graph/graph-shared-tooltip-cursor-position.json", "panel-graph/graph-shared-tooltips.json", "panel-graph/graph-shared-tooltips.json", "panel-graph/graph-shared-tooltips.json", @@ -250,9 +211,48 @@ "panel-timeline/timeline-modes.json", "panel-timeline/timeline-modes.json", "panel-timeline/timeline-modes.json", + "panel-timeseries/timeseries-by-value-color-schemes.json", + "panel-timeseries/timeseries-by-value-color-schemes.json", + "panel-timeseries/timeseries-by-value-color-schemes.json", + "panel-timeseries/timeseries-gradient-area.json", + "panel-timeseries/timeseries-gradient-area.json", + "panel-timeseries/timeseries-gradient-area.json", + "panel-timeseries/timeseries-hue-gradients.json", + "panel-timeseries/timeseries-hue-gradients.json", + "panel-timeseries/timeseries-hue-gradients.json", + "panel-timeseries/timeseries-nulls.json", + "panel-timeseries/timeseries-nulls.json", + "panel-timeseries/timeseries-nulls.json", "panel-timeseries/timeseries-out-of-rage.json", "panel-timeseries/timeseries-out-of-rage.json", "panel-timeseries/timeseries-out-of-rage.json", + "panel-timeseries/timeseries-shared-tooltip-cursor-position.json", + "panel-timeseries/timeseries-shared-tooltip-cursor-position.json", + "panel-timeseries/timeseries-shared-tooltip-cursor-position.json", + "panel-timeseries/timeseries-soft-limits.json", + "panel-timeseries/timeseries-soft-limits.json", + "panel-timeseries/timeseries-soft-limits.json", + "panel-timeseries/timeseries-stacking.json", + "panel-timeseries/timeseries-stacking.json", + "panel-timeseries/timeseries-stacking.json", + "panel-timeseries/timeseries-stacking2.json", + "panel-timeseries/timeseries-stacking2.json", + "panel-timeseries/timeseries-stacking2.json", + "panel-timeseries/timeseries-thresholds.json", + "panel-timeseries/timeseries-thresholds.json", + "panel-timeseries/timeseries-thresholds.json", + "panel-timeseries/timeseries-time.json", + "panel-timeseries/timeseries-time.json", + "panel-timeseries/timeseries-time.json", + "panel-timeseries/timeseries-y-ticks-zero-decimals.json", + "panel-timeseries/timeseries-y-ticks-zero-decimals.json", + "panel-timeseries/timeseries-y-ticks-zero-decimals.json", + "panel-timeseries/timeseries-yaxis-ticks.json", + "panel-timeseries/timeseries-yaxis-ticks.json", + "panel-timeseries/timeseries-yaxis-ticks.json", + "panel-timeseries/timeseries.json", + "panel-timeseries/timeseries.json", + "panel-timeseries/timeseries.json", "scenarios/time_zone_support.json", "scenarios/time_zone_support.json", "scenarios/time_zone_support.json", @@ -388,45 +388,6 @@ "graph-ng", "panel-tests", "gdev", - "graph-ng", - "panel-tests", - "gdev", - "graph-ng", - "panel-tests", - "gdev", - "graph-ng", - "panel-tests", - "gdev", - "graph-ng", - "panel-tests", - "gdev", - "graph-ng", - "panel-tests", - "gdev", - "graph-ng", - "panel-tests", - "gdev", - "graph-ng", - "panel-tests", - "gdev", - "graph-ng", - "panel-tests", - "gdev", - "graph-ng", - "panel-tests", - "gdev", - "graph-ng", - "panel-tests", - "gdev", - "graph-ng", - "panel-tests", - "gdev", - "graph-ng", - "panel-tests", - "gdev", - "graph-ng", - "panel-tests", - "gdev", "graph", "panel-tests", "gdev", @@ -468,6 +429,45 @@ "graph-ng", "panel-tests", "gdev", + "graph-ng", + "panel-tests", + "gdev", + "graph-ng", + "panel-tests", + "gdev", + "graph-ng", + "panel-tests", + "gdev", + "graph-ng", + "panel-tests", + "gdev", + "graph-ng", + "panel-tests", + "gdev", + "graph-ng", + "panel-tests", + "gdev", + "graph-ng", + "panel-tests", + "gdev", + "graph-ng", + "panel-tests", + "gdev", + "graph-ng", + "panel-tests", + "gdev", + "graph-ng", + "panel-tests", + "gdev", + "graph-ng", + "panel-tests", + "gdev", + "graph-ng", + "panel-tests", + "gdev", + "graph-ng", + "panel-tests", + "gdev", "graph", "panel-tests", "table", diff --git a/pkg/services/searchV2/object/testdata/dash_raw.jsonc b/pkg/services/searchV2/object/testdata/dash_raw.jsonc index 4a8616193d1..6d7a8f3f470 100644 --- a/pkg/services/searchV2/object/testdata/dash_raw.jsonc +++ b/pkg/services/searchV2/object/testdata/dash_raw.jsonc @@ -120,19 +120,6 @@ "panel-geomap/geomap_multi-layers.json", "panel-geomap/panel-geomap.json", "panel-graph/graph-gradient-area-fills.json", - "panel-graph/graph-ng-by-value-color-schemes.json", - "panel-graph/graph-ng-gradient-area.json", - "panel-graph/graph-ng-hue-gradients.json", - "panel-graph/graph-ng-nulls.json", - "panel-graph/graph-ng-soft-limits.json", - "panel-graph/graph-ng-stacking.json", - "panel-graph/graph-ng-stacking2.json", - "panel-graph/graph-ng-thresholds.json", - "panel-graph/graph-ng-time.json", - "panel-graph/graph-ng-y-ticks-zero-decimals.json", - "panel-graph/graph-ng-yaxis-ticks.json", - "panel-graph/graph-ng.json", - "panel-graph/graph-shared-tooltip-cursor-position.json", "panel-graph/graph-shared-tooltips.json", "panel-graph/graph-time-regions.json", "panel-graph/graph_tests.json", @@ -150,7 +137,20 @@ "panel-text/text-options.json", "panel-timeline/timeline-demo.json", "panel-timeline/timeline-modes.json", + "panel-timeseries/timeseries-by-value-color-schemes.json", + "panel-timeseries/timeseries-gradient-area.json", + "panel-timeseries/timeseries-hue-gradients.json", + "panel-timeseries/timeseries-nulls.json", "panel-timeseries/timeseries-out-of-rage.json", + "panel-timeseries/timeseries-shared-tooltip-cursor-position.json", + "panel-timeseries/timeseries-soft-limits.json", + "panel-timeseries/timeseries-stacking.json", + "panel-timeseries/timeseries-stacking2.json", + "panel-timeseries/timeseries-thresholds.json", + "panel-timeseries/timeseries-time.json", + "panel-timeseries/timeseries-y-ticks-zero-decimals.json", + "panel-timeseries/timeseries-yaxis-ticks.json", + "panel-timeseries/timeseries.json", "scenarios/slow_queries_and_annotations.json", "scenarios/time_zone_support.json", "transforms/config-from-query.json", @@ -318,19 +318,6 @@ 12115, 10579, 7932, - 19829, - 13044, - 20472, - 34841, - 71730, - 27339, - 92679, - 28016, - 10751, - 21473, - 16810, - 78597, - 13213, 17326, 12850, 36654, @@ -348,7 +335,20 @@ 7122, 10777, 8674, + 19829, + 13044, + 20472, + 34841, 13368, + 13213, + 71730, + 27339, + 92679, + 28016, + 10751, + 21473, + 16810, + 78597, 24166, 15128, 13876, @@ -417,19 +417,6 @@ "1da95824843a317223faa5e06cc50fd4", "53a1f9af752491d429439cff6fa4f96d", "43b962717f08ddc5347350620d084329", - "722fd9e83a671f881d89d4fcc8d0ccfc", - "d63e2f87ac9816f06b3afee1632dd2a0", - "566ca0e071cd3a992fd978648ca807ab", - "37daa49f2913fd329d5e33f1da3f4e7a", - "84d7fc19be0eefaffae1b882efa4388f", - "18c8037c2781381478aed7fd2fe5b4f6", - "9910843bdd5205cbda2cb5dd01673c90", - "5c2edf32997b1578e29cdd27f3ab4eda", - "898cbd382354c3d785011197de3abdd4", - "a0bed022d7309e665c97ff3049e1b495", - "7204212079a9c5d020cf956cd7782267", - "d5805d2754f152163bcf2d5805214080", - "fa9dd510a6ca45ff919d804082c2e206", "7e672ee13c5baa7d34f14f77bd73bb62", "aec241e9c1c88b8d60b0cbe078cc099b", "0271f13106f164b7a4f010b2d9debad3", @@ -447,7 +434,20 @@ "f6ea799109bb78d2f2954947a188d7b6", "dfcd599be6b6df94aef3b6da9d8ac3fb", "21dd0f87426cf7afc030d688d5516178", + "722fd9e83a671f881d89d4fcc8d0ccfc", + "d63e2f87ac9816f06b3afee1632dd2a0", + "566ca0e071cd3a992fd978648ca807ab", + "37daa49f2913fd329d5e33f1da3f4e7a", "45294c2260bda5bba87039a18a98576d", + "fa9dd510a6ca45ff919d804082c2e206", + "84d7fc19be0eefaffae1b882efa4388f", + "18c8037c2781381478aed7fd2fe5b4f6", + "9910843bdd5205cbda2cb5dd01673c90", + "5c2edf32997b1578e29cdd27f3ab4eda", + "898cbd382354c3d785011197de3abdd4", + "a0bed022d7309e665c97ff3049e1b495", + "7204212079a9c5d020cf956cd7782267", + "d5805d2754f152163bcf2d5805214080", "727c2c46deddeb164cd9ce36a0ec1567", "f517e61f40152e16f3291e72c27f606d", "c1cbaf503457216461032844f47ac065", diff --git a/pkg/services/searchV2/object/testdata/dash_references.jsonc b/pkg/services/searchV2/object/testdata/dash_references.jsonc index bc5076cdf13..a0ffe09604a 100644 --- a/pkg/services/searchV2/object/testdata/dash_references.jsonc +++ b/pkg/services/searchV2/object/testdata/dash_references.jsonc @@ -255,35 +255,6 @@ "panel-geomap/panel-geomap.json", "panel-graph/graph-gradient-area-fills.json", "panel-graph/graph-gradient-area-fills.json", - "panel-graph/graph-ng-by-value-color-schemes.json", - "panel-graph/graph-ng-by-value-color-schemes.json", - "panel-graph/graph-ng-gradient-area.json", - "panel-graph/graph-ng-gradient-area.json", - "panel-graph/graph-ng-hue-gradients.json", - "panel-graph/graph-ng-hue-gradients.json", - "panel-graph/graph-ng-nulls.json", - "panel-graph/graph-ng-nulls.json", - "panel-graph/graph-ng-soft-limits.json", - "panel-graph/graph-ng-soft-limits.json", - "panel-graph/graph-ng-stacking.json", - "panel-graph/graph-ng-stacking.json", - "panel-graph/graph-ng-stacking2.json", - "panel-graph/graph-ng-stacking2.json", - "panel-graph/graph-ng-stacking2.json", - "panel-graph/graph-ng-thresholds.json", - "panel-graph/graph-ng-thresholds.json", - "panel-graph/graph-ng-thresholds.json", - "panel-graph/graph-ng-time.json", - "panel-graph/graph-ng-time.json", - "panel-graph/graph-ng-y-ticks-zero-decimals.json", - "panel-graph/graph-ng-y-ticks-zero-decimals.json", - "panel-graph/graph-ng-yaxis-ticks.json", - "panel-graph/graph-ng-yaxis-ticks.json", - "panel-graph/graph-ng.json", - "panel-graph/graph-ng.json", - "panel-graph/graph-ng.json", - "panel-graph/graph-shared-tooltip-cursor-position.json", - "panel-graph/graph-shared-tooltip-cursor-position.json", "panel-graph/graph-shared-tooltips.json", "panel-graph/graph-shared-tooltips.json", "panel-graph/graph-shared-tooltips.json", @@ -328,8 +299,37 @@ "panel-timeline/timeline-modes.json", "panel-timeline/timeline-modes.json", "panel-timeline/timeline-modes.json", + "panel-timeseries/timeseries-by-value-color-schemes.json", + "panel-timeseries/timeseries-by-value-color-schemes.json", + "panel-timeseries/timeseries-gradient-area.json", + "panel-timeseries/timeseries-gradient-area.json", + "panel-timeseries/timeseries-hue-gradients.json", + "panel-timeseries/timeseries-hue-gradients.json", + "panel-timeseries/timeseries-nulls.json", + "panel-timeseries/timeseries-nulls.json", "panel-timeseries/timeseries-out-of-rage.json", "panel-timeseries/timeseries-out-of-rage.json", + "panel-timeseries/timeseries-shared-tooltip-cursor-position.json", + "panel-timeseries/timeseries-shared-tooltip-cursor-position.json", + "panel-timeseries/timeseries-soft-limits.json", + "panel-timeseries/timeseries-soft-limits.json", + "panel-timeseries/timeseries-stacking.json", + "panel-timeseries/timeseries-stacking.json", + "panel-timeseries/timeseries-stacking2.json", + "panel-timeseries/timeseries-stacking2.json", + "panel-timeseries/timeseries-stacking2.json", + "panel-timeseries/timeseries-thresholds.json", + "panel-timeseries/timeseries-thresholds.json", + "panel-timeseries/timeseries-thresholds.json", + "panel-timeseries/timeseries-time.json", + "panel-timeseries/timeseries-time.json", + "panel-timeseries/timeseries-y-ticks-zero-decimals.json", + "panel-timeseries/timeseries-y-ticks-zero-decimals.json", + "panel-timeseries/timeseries-yaxis-ticks.json", + "panel-timeseries/timeseries-yaxis-ticks.json", + "panel-timeseries/timeseries.json", + "panel-timeseries/timeseries.json", + "panel-timeseries/timeseries.json", "scenarios/slow_queries_and_annotations.json", "scenarios/slow_queries_and_annotations.json", "scenarios/time_zone_support.json", @@ -552,35 +552,6 @@ "panel", "ds", "panel", - "ds", - "panel", - "ds", - "panel", - "ds", - "panel", - "ds", - "panel", - "ds", - "panel", - "ds", - "panel", - "panel", - "ds", - "panel", - "panel", - "ds", - "panel", - "ds", - "panel", - "ds", - "panel", - "ds", - "panel", - "panel", - "ds", - "panel", - "ds", - "panel", "panel", "panel", "panel", @@ -631,6 +602,35 @@ "panel", "ds", "panel", + "ds", + "panel", + "ds", + "panel", + "ds", + "panel", + "ds", + "panel", + "ds", + "panel", + "panel", + "ds", + "panel", + "panel", + "ds", + "panel", + "ds", + "panel", + "ds", + "panel", + "ds", + "panel", + "panel", + "ds", + "panel", + "ds", + "panel", + "ds", + "panel", "panel", "panel", "ds", @@ -846,35 +846,6 @@ "default.type", "graph", "default.type", - "timeseries", - "default.type", - "timeseries", - "default.type", - "timeseries", - "default.type", - "timeseries", - "default.type", - "timeseries", - "default.type", - "timeseries", - "default.type", - "barchart", - "timeseries", - "default.type", - "graph", - "timeseries", - "default.type", - "timeseries", - "default.type", - "timeseries", - "default.type", - "timeseries", - "default.type", - "row", - "timeseries", - "default.type", - "timeseries", - "default.type", "debug", "graph", "timeseries", @@ -921,6 +892,35 @@ "default.type", "timeseries", "default.type", + "timeseries", + "default.type", + "timeseries", + "default.type", + "timeseries", + "default.type", + "timeseries", + "default.type", + "timeseries", + "default.type", + "timeseries", + "default.type", + "timeseries", + "default.type", + "barchart", + "timeseries", + "default.type", + "graph", + "timeseries", + "default.type", + "timeseries", + "default.type", + "timeseries", + "default.type", + "timeseries", + "default.type", + "row", + "timeseries", + "default.type", "graph", "default.type", "graph", @@ -1142,35 +1142,6 @@ "", "default.uid", "", - "default.uid", - "", - "default.uid", - "", - "default.uid", - "", - "default.uid", - "", - "default.uid", - "", - "default.uid", - "", - "", - "default.uid", - "", - "", - "default.uid", - "", - "default.uid", - "", - "default.uid", - "", - "default.uid", - "", - "", - "default.uid", - "", - "default.uid", - "", "", "", "", @@ -1221,6 +1192,35 @@ "", "default.uid", "", + "default.uid", + "", + "default.uid", + "", + "default.uid", + "", + "default.uid", + "", + "default.uid", + "", + "", + "default.uid", + "", + "", + "default.uid", + "", + "default.uid", + "", + "default.uid", + "", + "default.uid", + "", + "", + "default.uid", + "", + "default.uid", + "", + "default.uid", + "", "", "", "default.uid", diff --git a/pkg/services/searchV2/object/testdata/dash_summary.jsonc b/pkg/services/searchV2/object/testdata/dash_summary.jsonc index ebc30dbb6dc..5cd2a932589 100644 --- a/pkg/services/searchV2/object/testdata/dash_summary.jsonc +++ b/pkg/services/searchV2/object/testdata/dash_summary.jsonc @@ -113,19 +113,6 @@ "panel-geomap/geomap_multi-layers.json", "panel-geomap/panel-geomap.json", "panel-graph/graph-gradient-area-fills.json", - "panel-graph/graph-ng-by-value-color-schemes.json", - "panel-graph/graph-ng-gradient-area.json", - "panel-graph/graph-ng-hue-gradients.json", - "panel-graph/graph-ng-nulls.json", - "panel-graph/graph-ng-soft-limits.json", - "panel-graph/graph-ng-stacking.json", - "panel-graph/graph-ng-stacking2.json", - "panel-graph/graph-ng-thresholds.json", - "panel-graph/graph-ng-time.json", - "panel-graph/graph-ng-y-ticks-zero-decimals.json", - "panel-graph/graph-ng-yaxis-ticks.json", - "panel-graph/graph-ng.json", - "panel-graph/graph-shared-tooltip-cursor-position.json", "panel-graph/graph-shared-tooltips.json", "panel-graph/graph-time-regions.json", "panel-graph/graph_tests.json", @@ -143,7 +130,20 @@ "panel-text/text-options.json", "panel-timeline/timeline-demo.json", "panel-timeline/timeline-modes.json", + "panel-timeseries/timeseries-by-value-color-schemes.json", + "panel-timeseries/timeseries-gradient-area.json", + "panel-timeseries/timeseries-hue-gradients.json", + "panel-timeseries/timeseries-nulls.json", "panel-timeseries/timeseries-out-of-rage.json", + "panel-timeseries/timeseries-shared-tooltip-cursor-position.json", + "panel-timeseries/timeseries-soft-limits.json", + "panel-timeseries/timeseries-stacking.json", + "panel-timeseries/timeseries-stacking2.json", + "panel-timeseries/timeseries-thresholds.json", + "panel-timeseries/timeseries-time.json", + "panel-timeseries/timeseries-y-ticks-zero-decimals.json", + "panel-timeseries/timeseries-yaxis-ticks.json", + "panel-timeseries/timeseries.json", "scenarios/slow_queries_and_annotations.json", "scenarios/time_zone_support.json", "transforms/config-from-query.json", @@ -212,19 +212,6 @@ "Panel Tests - Geomap Multi Layers", "Panel Tests - Geomap", "Panel Tests - Graph - Gradient Area Fills", - "Panel Tests - Graph NG - By value color schemes", - "Panel Tests - Graph NG - Gradient Area Fills", - "Panel Tests - GraphNG - Hue Gradients", - "Panel Tests - Graph NG - Gaps and Connected", - "Panel Tests - Graph NG - softMin/softMax", - "Panel Tests - TimeSeries - stacking", - "TimeSeries \u0026 BarChart Stacking", - "Panel Tests - GraphNG Thresholds", - "Panel Tests - GraphNG - Time Axis", - "Zero Decimals Y Ticks", - "Panel Tests - Graph NG - Y axis ticks", - "Panel Tests - Graph NG", - "Panel Tests - shared tooltips cursor positioning", "Panel Tests - shared tooltips", "Panel Tests - Graph Time Regions", "Panel Tests - Graph", @@ -242,7 +229,20 @@ "Text options", "Timeline Demo", "Timeline Modes", + "Panel Tests - Graph NG - By value color schemes", + "Panel Tests - Graph NG - Gradient Area Fills", + "Panel Tests - GraphNG - Hue Gradients", + "Panel Tests - Graph NG - Gaps and Connected", "Panel Tests - Timeseries - Out of range", + "Panel Tests - shared tooltips cursor positioning", + "Panel Tests - Graph NG - softMin/softMax", + "Panel Tests - TimeSeries - stacking", + "TimeSeries \u0026 BarChart Stacking", + "Panel Tests - GraphNG Thresholds", + "Panel Tests - GraphNG - Time Axis", + "Zero Decimals Y Ticks", + "Panel Tests - Graph NG - Y axis ticks", + "Panel Tests - Graph NG", "Panel tests - Slow Queries \u0026 Annotations", "Panel Tests - Time zone support", "Transforms - Config from query", @@ -387,19 +387,6 @@ {}, {}, {}, - {}, - {}, - {}, - {}, - {}, - {}, - {}, - {}, - {}, - {}, - {}, - {}, - {}, { "hasTemplateVars": true }, @@ -412,6 +399,19 @@ {}, {}, {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, + {}, {} ] ] From ef1aa8ceb872f3740b1498e92898f644a69eb99d Mon Sep 17 00:00:00 2001 From: Garrett Guillotte <100453168+gguillotte-grafana@users.noreply.github.com> Date: Fri, 30 Sep 2022 15:35:11 -0700 Subject: [PATCH 008/135] Docs: Add link to TimescaleDB docs (#56134) * Added a link for more information Added a link to TimescaleDB so that users can get additional information if need be. * fixed formatting * fixed the table * made it prettier * make it pretty for CI Co-authored-by: Rajakavitha Kodhandapani --- docs/sources/datasources/postgres.md | 32 ++++++++++++++-------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/docs/sources/datasources/postgres.md b/docs/sources/datasources/postgres.md index 32b34124563..c877faa3742 100644 --- a/docs/sources/datasources/postgres.md +++ b/docs/sources/datasources/postgres.md @@ -19,22 +19,22 @@ Grafana ships with a built-in PostgreSQL data source plugin that allows you to q To access PostgreSQL settings, hover your mouse over the **Configuration** (gear) icon, then click **Data Sources**, and then click the PostgreSQL data source. -| Name | Description | -| ------------------------- | --------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | -| `Name` | The data source name. This is how you refer to the data source in panels and queries. | -| `Default` | Default data source means that it will be pre-selected for new panels. | -| `Host` | The IP address/hostname and optional port of your PostgreSQL instance. _Do not_ include the database name. The connection string for connecting to Postgres will not be correct and it may cause errors. | -| `Database` | Name of your PostgreSQL database. | -| `User` | Database user's login/username | -| `Password` | Database user's password | -| `SSL Mode` | Determines whether or with what priority a secure SSL TCP/IP connection will be negotiated with the server. When SSL Mode is disabled, SSL Method and Auth Details would not be visible. | -| `SSL Auth Details Method` | Determines whether the SSL Auth details will be configured as a file path or file content. Grafana v7.5+ | -| `SSL Auth Details Value` | File path or file content of SSL root certificate, client certificate and client key | -| `Max open` | The maximum number of open connections to the database, default `unlimited` (Grafana v5.4+). | -| `Max idle` | The maximum number of connections in the idle connection pool, default `2` (Grafana v5.4+). | -| `Max lifetime` | The maximum amount of time in seconds a connection may be reused, default `14400`/4 hours (Grafana v5.4+). | -| `Version` | Determines which functions are available in the query builder (only available in Grafana 5.3+). | -| `TimescaleDB` | A time-series database built as a PostgreSQL extension. When enabled, Grafana uses `time_bucket` in the `$__timeGroup` macro to display TimescaleDB specific aggregate functions in the query builder (only available in Grafana 5.3+). | +| Name | Description | +| ------------------------- | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | +| `Name` | The data source name. This is how you refer to the data source in panels and queries. | +| `Default` | Default data source means that it will be pre-selected for new panels. | +| `Host` | The IP address/hostname and optional port of your PostgreSQL instance. _Do not_ include the database name. The connection string for connecting to Postgres will not be correct and it may cause errors. | +| `Database` | Name of your PostgreSQL database. | +| `User` | Database user's login/username | +| `Password` | Database user's password | +| `SSL Mode` | Determines whether or with what priority a secure SSL TCP/IP connection will be negotiated with the server. When SSL Mode is disabled, SSL Method and Auth Details would not be visible. | +| `SSL Auth Details Method` | Determines whether the SSL Auth details will be configured as a file path or file content. Grafana v7.5+ | +| `SSL Auth Details Value` | File path or file content of SSL root certificate, client certificate and client key | +| `Max open` | The maximum number of open connections to the database, default `unlimited` (Grafana v5.4+). | +| `Max idle` | The maximum number of connections in the idle connection pool, default `2` (Grafana v5.4+). | +| `Max lifetime` | The maximum amount of time in seconds a connection may be reused, default `14400`/4 hours (Grafana v5.4+). | +| `Version` | Determines which functions are available in the query builder (only available in Grafana 5.3+). | +| `TimescaleDB` | A time-series database built as a PostgreSQL extension. When enabled, Grafana uses `time_bucket` in the `$__timeGroup` macro to display TimescaleDB specific aggregate functions in the query builder (only available in Grafana 5.3+). For more information, see [TimescaleDB documentation](https://docs.timescale.com/timescaledb/latest/tutorials/grafana/grafana-timescalecloud/#connect-timescaledb-and-grafana). | ### Min time interval From fc62f7ae23ae217df49fa2fb35f5bd4dbf0add8b Mon Sep 17 00:00:00 2001 From: Nathan Marrs Date: Fri, 30 Sep 2022 17:21:02 -0700 Subject: [PATCH 009/135] Canvas: Add text element (#56137) Co-authored-by: Drew Slobodnjak --- public/app/features/canvas/elements/text.tsx | 210 ++++++++++++++++++ public/app/features/canvas/registry.ts | 2 + .../editors/TextDimensionEditor.tsx | 9 +- 3 files changed, 214 insertions(+), 7 deletions(-) create mode 100644 public/app/features/canvas/elements/text.tsx diff --git a/public/app/features/canvas/elements/text.tsx b/public/app/features/canvas/elements/text.tsx new file mode 100644 index 00000000000..408e89120b7 --- /dev/null +++ b/public/app/features/canvas/elements/text.tsx @@ -0,0 +1,210 @@ +import { css } from '@emotion/css'; +import React, { useCallback } from 'react'; +import { useObservable } from 'react-use'; +import { of } from 'rxjs'; + +import { DataFrame, GrafanaTheme2 } from '@grafana/data'; +import { Input, usePanelContext, useStyles2 } from '@grafana/ui'; +import { DimensionContext } from 'app/features/dimensions/context'; +import { ColorDimensionEditor } from 'app/features/dimensions/editors/ColorDimensionEditor'; +import { TextDimensionEditor } from 'app/features/dimensions/editors/TextDimensionEditor'; + +import { CanvasElementItem, CanvasElementProps, defaultTextColor } from '../element'; +import { ElementState } from '../runtime/element'; +import { Align, TextConfig, TextData, VAlign } from '../types'; + +const TextDisplay = (props: CanvasElementProps) => { + const { data, isSelected } = props; + const styles = useStyles2(getStyles(data)); + + const context = usePanelContext(); + const scene = context.instanceState?.scene; + + const isEditMode = useObservable(scene?.editModeEnabled ?? of(false)); + + if (isEditMode && isSelected) { + return ; + } + return ( +
+ {data?.text ? data.text : 'Double click to set text'} +
+ ); +}; + +const TextEdit = (props: CanvasElementProps) => { + let { data, config } = props; + const context = usePanelContext(); + let panelData: DataFrame[]; + panelData = context.instanceState?.scene?.data.series; + + const onTextChange = (event: React.SyntheticEvent) => { + const { value: textValue } = event.currentTarget; + saveText(textValue); + }; + + const onKeyDown = (event: React.KeyboardEvent) => { + if (event.key === 'Enter') { + event.preventDefault(); + const scene = context.instanceState?.scene; + if (scene) { + scene.editModeEnabled.next(false); + } + } + }; + + const saveText = useCallback( + (textValue: string) => { + let selectedElement: ElementState; + selectedElement = context.instanceState?.selected[0]; + if (selectedElement) { + const options = selectedElement.options; + selectedElement.onChange({ + ...options, + config: { + ...options.config, + text: { ...selectedElement.options.config.text, fixed: textValue }, + }, + }); + + // Force a re-render (update scene data after config update) + const scene = context.instanceState?.scene; + if (scene) { + scene.updateData(scene.data); + } + } + }, + [context.instanceState?.scene, context.instanceState?.selected] + ); + + const styles = useStyles2(getStyles(data)); + return ( +
+ {panelData && } +
+ ); +}; + +const getStyles = (data: TextData | undefined) => (theme: GrafanaTheme2) => ({ + container: css` + position: absolute; + height: 100%; + width: 100%; + display: table; + `, + inlineEditorContainer: css` + height: 100%; + width: 100%; + display: flex; + align-items: center; + padding: 10px; + `, + span: css` + display: table-cell; + vertical-align: ${data?.valign}; + text-align: ${data?.align}; + font-size: ${data?.size}px; + color: ${data?.color}; + `, +}); + +export const textItem: CanvasElementItem = { + id: 'text', + name: 'Text', + description: 'Display text', + + display: TextDisplay, + + hasEditMode: true, + + defaultSize: { + width: 100, + height: 50, + }, + + getNewOptions: (options) => ({ + ...options, + config: { + align: Align.Center, + valign: VAlign.Middle, + color: { + fixed: defaultTextColor, + }, + size: 16, + }, + placement: { + top: 100, + left: 100, + }, + }), + + prepareData: (ctx: DimensionContext, cfg: TextConfig) => { + const data: TextData = { + text: cfg.text ? ctx.getText(cfg.text).value() : '', + align: cfg.align ?? Align.Center, + valign: cfg.valign ?? VAlign.Middle, + size: cfg.size, + }; + + if (cfg.color) { + data.color = ctx.getColor(cfg.color).value(); + } + + return data; + }, + + registerOptionsUI: (builder) => { + const category = ['Text']; + builder + .addCustomEditor({ + category, + id: 'textSelector', + path: 'config.text', + name: 'Text', + editor: TextDimensionEditor, + }) + .addCustomEditor({ + category, + id: 'config.color', + path: 'config.color', + name: 'Text color', + editor: ColorDimensionEditor, + settings: {}, + defaultValue: {}, + }) + .addRadio({ + category, + path: 'config.align', + name: 'Align text', + settings: { + options: [ + { value: Align.Left, label: 'Left' }, + { value: Align.Center, label: 'Center' }, + { value: Align.Right, label: 'Right' }, + ], + }, + defaultValue: Align.Left, + }) + .addRadio({ + category, + path: 'config.valign', + name: 'Vertical align', + settings: { + options: [ + { value: VAlign.Top, label: 'Top' }, + { value: VAlign.Middle, label: 'Middle' }, + { value: VAlign.Bottom, label: 'Bottom' }, + ], + }, + defaultValue: VAlign.Middle, + }) + .addNumberInput({ + category, + path: 'config.size', + name: 'Text size', + settings: { + placeholder: 'Auto', + }, + }); + }, +}; diff --git a/public/app/features/canvas/registry.ts b/public/app/features/canvas/registry.ts index 28f6a71683f..b65c26bd4e0 100644 --- a/public/app/features/canvas/registry.ts +++ b/public/app/features/canvas/registry.ts @@ -8,6 +8,7 @@ import { droneTopItem } from './elements/droneTop'; import { iconItem } from './elements/icon'; import { metricValueItem } from './elements/metricValue'; import { rectangleItem } from './elements/rectangle'; +import { textItem } from './elements/text'; import { windTurbineItem } from './elements/windTurbine'; export const DEFAULT_CANVAS_ELEMENT_CONFIG: CanvasElementOptions = { @@ -19,6 +20,7 @@ export const DEFAULT_CANVAS_ELEMENT_CONFIG: CanvasElementOptions = { export const defaultElementItems = [ metricValueItem, // default for now + textItem, rectangleItem, iconItem, ]; diff --git a/public/app/features/dimensions/editors/TextDimensionEditor.tsx b/public/app/features/dimensions/editors/TextDimensionEditor.tsx index a74ecfa0477..bda46e88493 100644 --- a/public/app/features/dimensions/editors/TextDimensionEditor.tsx +++ b/public/app/features/dimensions/editors/TextDimensionEditor.tsx @@ -1,4 +1,4 @@ -import React, { FC, useCallback, useState } from 'react'; +import React, { FC, useCallback } from 'react'; import { FieldNamePickerConfigSettings, @@ -30,9 +30,6 @@ export const TextDimensionEditor: FC { onChange({ @@ -65,11 +62,9 @@ export const TextDimensionEditor: FC { onFixedChange(''); - setRefresh(refresh + 1); }; const mode = value?.mode ?? TextDimensionMode.Fixed; - return ( <> @@ -90,7 +85,7 @@ export const TextDimensionEditor: FC )} {mode === TextDimensionMode.Fixed && ( - + Date: Mon, 3 Oct 2022 09:04:11 +0200 Subject: [PATCH 010/135] Toolkit: Remove unused legacy cherrypick command (#56114) --- .betterer.results | 5 - packages/grafana-toolkit/src/cli/index.ts | 9 -- .../src/cli/tasks/cherrypick.ts | 96 ------------------- 3 files changed, 110 deletions(-) delete mode 100644 packages/grafana-toolkit/src/cli/tasks/cherrypick.ts diff --git a/.betterer.results b/.betterer.results index 99ab870dd8e..65b9dce1476 100644 --- a/.betterer.results +++ b/.betterer.results @@ -1124,11 +1124,6 @@ exports[`better eslint`] = { [0, 0, 0, "Unexpected any. Specify a different type.", "11"], [0, 0, 0, "Unexpected any. Specify a different type.", "12"] ], - "packages/grafana-toolkit/src/cli/tasks/cherrypick.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"], - [0, 0, 0, "Unexpected any. Specify a different type.", "2"] - ], "packages/grafana-toolkit/src/cli/tasks/component.create.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], [0, 0, 0, "Unexpected any. Specify a different type.", "1"] diff --git a/packages/grafana-toolkit/src/cli/index.ts b/packages/grafana-toolkit/src/cli/index.ts index d20ddd835ea..0ddfaabb9bc 100644 --- a/packages/grafana-toolkit/src/cli/index.ts +++ b/packages/grafana-toolkit/src/cli/index.ts @@ -2,7 +2,6 @@ import chalk from 'chalk'; import { program } from 'commander'; import { changelogTask } from './tasks/changelog'; -import { cherryPickTask } from './tasks/cherrypick'; import { closeMilestoneTask } from './tasks/closeMilestone'; import { componentCreateTask } from './tasks/component.create'; import { nodeVersionCheckerTask } from './tasks/nodeVersionChecker'; @@ -54,14 +53,6 @@ export const run = (includeInternalScripts = false) => { }); }); - program - .command('cherrypick') - .option('-e, --enterprise', 'Run task for grafana-enterprise') - .description('Helps find commits to cherry pick') - .action(async (cmd) => { - await execTask(cherryPickTask)({ enterprise: !!cmd.enterprise }); - }); - program .command('node-version-check') .description('Verify node version') diff --git a/packages/grafana-toolkit/src/cli/tasks/cherrypick.ts b/packages/grafana-toolkit/src/cli/tasks/cherrypick.ts deleted file mode 100644 index 3aa66dd33f2..00000000000 --- a/packages/grafana-toolkit/src/cli/tasks/cherrypick.ts +++ /dev/null @@ -1,96 +0,0 @@ -import GithubClient from '../utils/githubClient'; - -import { Task, TaskRunner } from './task'; - -interface CherryPickOptions { - enterprise: boolean; -} - -// https://github.com/lisposter/github-pagination/blob/master/lib/octopage.js -const pagingParser = (linkStr: string): { prev?: string; next?: string; last?: string; first?: string } => { - return linkStr - .split(',') - .map((rel) => { - //@ts-ignore - return rel.split(';').map((curr, idx) => { - if (idx === 0) { - //@ts-ignore - return /[^_]page=(\d+)/.exec(curr)[1]; - } - if (idx === 1) { - //@ts-ignore - return /rel="(.+)"/.exec(curr)[1]; - } - }); - }) - .reduce(function (obj, curr, i) { - //@ts-ignore - obj[curr[1]] = curr[0]; - return obj; - }, {}); -}; - -const getIssues = async (client: any, page: string) => { - const result = await client.get('/issues', { - params: { - state: 'closed', - per_page: 100, - labels: 'cherry-pick needed', - sort: 'closed', - direction: 'asc', - page, - }, - }); - - let data = result.data; - if (!result.headers.link) { - return data; - } - - const pages = pagingParser(result.headers.link); - - if (pages.next) { - const nextPage = await getIssues(client, pages.next); - data = data.concat(nextPage); - } - return data; -}; - -const cherryPickRunner: TaskRunner = async ({ enterprise }) => { - const githubClient = new GithubClient({ enterprise }); - const client = githubClient.client; - const results = await getIssues(client, '1'); - - // sort by closed date ASC - results.sort((a: any, b: any) => { - return new Date(a.closed_at).getTime() - new Date(b.closed_at).getTime(); - }); - - let commands = ''; - - console.log('--------------------------------------------------------------------'); - console.log('Printing PRs with cherry-pick-needed, in ASC merge date order'); - console.log('--------------------------------------------------------------------'); - - for (const item of results) { - if (!item.milestone) { - console.log(item.number + ' missing milestone!'); - continue; - } - const issueDetails = await client.get(item.pull_request.url); - - if (!issueDetails.data.merged) { - continue; - } - - console.log(`* ${item.title}, (#${item.number}), merge-sha: ${issueDetails.data.merge_commit_sha}`); - commands += `git cherry-pick -x ${issueDetails.data.merge_commit_sha}\n`; - } - - console.log('--------------------------------------------------------------------'); - console.log('Commands (in order of how they should be executed)'); - console.log('--------------------------------------------------------------------'); - console.log(commands); -}; - -export const cherryPickTask = new Task('Cherry pick task', cherryPickRunner); From 6856784134713d7a653a29c404fb32f1d31ac067 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 3 Oct 2022 09:23:47 +0200 Subject: [PATCH 011/135] Update Storybook updates to v6.5.10 (#49793) * Update Storybook updates to v6.5.6 * refactor(storybook): fix up dependencies and webpack configs * chore(storybook): bump to 6.5.7 * chore(yarn): refresh lock file * chore(storybook): bump storybook to 6.5.10 * refactor(storybook): update configuration to use babel, tidy webpack config, clean dependencies * chore(storybook): bump to 6.5.12 * chore(storybook): bump storybook-dark-mode to 1.1.2 * chore(storybook): workaround resolving storybook-docs addon for yarn pnp * refactor(storybook): remove preview-head.html in favour of global theme styles * chore(storybook): patch storybook-dark-mode to work with SB 6.5.x and yarn PnP * feat(storybook): move to using MDXv2 * fix(icon): make sure icon story doesn't disappear offscreen and is scrollable * chore(grafana-ui): clean up dependencies related to storybook * feat(storybook): enable webpack5 filesystem cache * feat(storybook): replace babel with esbuild * fix(emotionperftest): fix jsx pragma for esbuild * fix(emotionperftest): force jsxRuntime to classic so esbuild and babel compile without error Co-authored-by: Renovate Bot Co-authored-by: Jack Westbrook --- .gitignore | 1 + ...ybook-dark-mode-npm-1.1.2-ecc4605688.patch | Bin 0 -> 99438 bytes .yarnrc.yml | 75 +- package.json | 6 +- packages/grafana-ui/.storybook/main.ts | 196 +- packages/grafana-ui/.storybook/manager.ts | 9 + .../grafana-ui/.storybook/preview-head.html | 6 - packages/grafana-ui/.storybook/preview.ts | 22 +- packages/grafana-ui/.storybook/tsconfig.json | 3 +- packages/grafana-ui/package.json | 43 +- .../src/components/Icon/Icon.story.tsx | 2 + .../components/ThemeDemos/EmotionPerfTest.tsx | 5 +- .../utils/storybook/ThemedDocsContainer.tsx | 2 +- .../src/utils/storybook/withTheme.tsx | 1 + yarn.lock | 5497 +++++++++++------ 15 files changed, 3648 insertions(+), 2220 deletions(-) create mode 100644 .yarn/patches/storybook-dark-mode-npm-1.1.2-ecc4605688.patch create mode 100644 packages/grafana-ui/.storybook/manager.ts delete mode 100644 packages/grafana-ui/.storybook/preview-head.html diff --git a/.gitignore b/.gitignore index cf9fe79b44d..50e6fb06da5 100644 --- a/.gitignore +++ b/.gitignore @@ -125,6 +125,7 @@ pkg/cmd/grafana-server/__debug_bin !.yarn/patches/*.patch # Ignoring frontend packages specifics +/packages/grafana-ui/.yarn/.cache /packages/**/dist /packages/**/compiled /packages/**/.rpt2_cache diff --git a/.yarn/patches/storybook-dark-mode-npm-1.1.2-ecc4605688.patch b/.yarn/patches/storybook-dark-mode-npm-1.1.2-ecc4605688.patch new file mode 100644 index 0000000000000000000000000000000000000000..981e943f101ace9bdf4eeb8d9d7666e9caecf0b1 GIT binary patch literal 99438 zcmeIbYkM0zeZGk8>BQq89o=g*8s6?Wd$l{eI6b}h;K73eE{`60jh5f?9t7T_ zNB16l@WBTk?q7_94?g&3eEe_t;olGb2Y;3ReTeV>^uhRp=?BXXR^w%QI-1WXS?!_$5XF{{9n^y`pr3j8Odz=!{I@a$k8oziRTTKAa#?>d#AFINSyGIKHh z@45n^di;#PkM!TIIzU2f|7|Jo8&lxkzj5H z^6_6k$Z+m)wsx+e%?_C=F`@nQ2ZeKy-5sQeaDgEd{m|*ixX90$8*8Z+r5g z=&=30rNEW~4h1+rc=+MpNBZyO+Z`yx(%X{{5@P#rOM(9Y6xg18{0Cst7R4s%UaP zWwCLVo+h{flg?+$m0WpQ?s`@yNPdV8LEPk2Y> zV~?M4?!+52%NMhYvr)ES(dlfJEhb5tc?YP?vg*3cyL$}}|91cQM|Q^p2FsUi8GxnlC#YFMptESF0PJG1$Y!c50?AUxn=ZX2 zT3F3P4;@_Ufdq-I^19g76*T~+86c>dKte#|x zB}HV}b70^KOkYw?PUmTIN{LF2m4sA+zc?Q!DeqFPjJ+FZcv;TaS;)zM21q70ga1gwt(oL zWuNYOUnh&zG&%hf31G*_CxTHS38<|PsIM3E^QHH$I0kZA<={7C2P1yZLjvG{6(sQh z+?$_{l7%Ic~* zj&VXA#^ERo$Ky$oB;85&9@9CHsG7{f0N41;Y+eKZW%^22HFWzGIB;}?!9P8oVK%L= zPB2yd&;JS0pDvpwW5@f)KfKAsEL}~(tNM;%y2(eyr=uUUbk)>=oZ|JBEzY@;b5Wg* zE`4u`dV%k;T}-PNWW=(0n$3<^Cl8VNCvS#74;~ci6UNf5@M6m8p2_B)ZQ`6Gb-9B{ z!mDfi&KL95oJ&UYBw0RvJ)<;ai`CmEhVyA1IGyk86rmC7>c#mFXmg1_PFs*<)8rys zT`VBQI`u8dhe#cc$t0BmzYs zYs%Hrr<3~m4w%t$2(wNQ(s=28^s&dwq#{6SUDkBR^6F6g+1swv+F1o`M}2U?fN?_8rxX(Hv%REOs~zPF&nBI(5s5IbFLwRmf00(S8A39l~K>ln}A zD_1nH#ff8vd&ZwYe2B?Mbpn|-XW5%oeP^c$T@ON>ESl#R%ai(|`6@ZR$T%V#ilxaa zJptnui}?aw_o(&ZH^1(wKi)474S6Ti8AfseuM(Ps%ziHfpM{{nk9AUV`l6<2Q3HQX z|EC5a2PuBEZ3#T|V|B8azs9%`+$>5(#wQE(F6X>buAe~zMeF6+H_t3d0rU|o1ndjG zvkUlxIXhcoDZe-cKANpab{LDPgbSQAR~QI-^zP)7^h?g5s9u;ut7cA=@x7NInS%b} zCC2~~@j*AOGiu{Z7TB6DU~@$PRiO$39jICxX{7TnA(N)XCQ^M$Y`r}Qmc?*SlE^Cl zDE)wIqM*Jvz#{R$pX4T}&5Q9YTfN+71PYg^y3?qvZ4`aLVf* zzbn$(XElt+{J6Y=h4(W|z~sxl0Xnxr>5%15f7j zYgS{)yxw@8iXH>T8Xmu}0`&vt8kOyPud%jbuBa}iGPSHgE;DL8FYb#beBbx((&w+`Xn1qlluL- zF40Kmr}IT)nbJ_$6J>nozL6|Fgkd}+XT&zOQnK@19tYBEU_B zT9e6632pJI-syDdaz#~1cgvW{nntSKqB%H8PM4V)%55A@BQW3)32IpQ(-!JYfVL&FgW{&$uu5|MJip~CGpJm#T>S)hs`8v z&|-5@E|fiWfMPF0V z>b5uT!d@t~$j;`kvU=X6DXACp45DP@zOsq+nrp>$8*9j*3Bz)|7l83n-j$LLSzarF z)EgfKPK(uVsX;~`C1k6n9uxE)%Ez9Wotn_rwPC#f_VKuW-GCEI^2t)wZDJx`L56Jxw8wh=C_#^k1-_Hn6IMJJE(Qk*vY0D8 zS^MXObRJR}A{etybnMz7KgXM1JmxMGk$K7tfE}K*{ zo^Vgz9cLvCgB!7;OyGm=52aeE7)Lz#sf!WS1jaCkS6ST%g`>7AZ8ck>VrP!D)ueEHSiNt5_^-OHyzUx2TKmz(P>6-~D0)k4S2w>Mj;x<=T>~ zZvurE-h1g ztRRzOwkjh%#17CXNnbjMpMj}`X^K@ffuHFGqSzxtKh7~EEhOvdIrqPpI8zYx_X+@B zu!$c$D>baArIC9M7#X>8s`+O?yIgCsr*&(_9tF*V!8czVJ$ZU?cy#!;!>^tneKmM; z=yPjg6G%lzz1kbySUTzUiSwo_Rt4%1vw}{!5saR&$Zk-HD|vnbSK$1&Id>KFL7d9t zH0(8UvqbTo(k0?i;JNOhkU(v`a2($`+Z`Ff_!5d!A$7&Z2)x5x?^91(>M(n>HR3Sb zNSW$`uqB_r3lq894yL+yM%=92LD*c5f}l@85`&+~B5QQkO9OaBsnP&DTjW|2rCy8VMwWfp?C{7mN;7%!2T0uu! zr%H4TE@Tj}L!sw#SpM;)!cf4BRmHF{{Gg;|bvuLkhT2?8N|r^=-lN3f><#Jv-3d-P zbNSZmfzo*0xlj-j%l`}$x9Pf_p${h$m>$klx7JNpj?kM@hn)^!sW_Z1FQ6^I&ZssB z<)!(h_wO3Yze5wn7CrX97d#-Jn}g_F0R$A`61IBmVeUDP$xr9Wcqy~F^je>AFPnK) zgWBa|@HyjrwqZsb?%TKC#u6 zEob*v-U(G>E--4hUW_H9nsdIwg1DSxI#fgj#94+UR>)-D!0#7hL1B{0;kV`x)U5b@9eXjl#BnE5jeoJ^-q=P2@pm4Nwbq&YLb zV{WppgZx_EoY{q9)xczXln|@LSmwxV!JaJQxfj z`O?|MFz3~QKS$1)e3>2i%Y(t=;~{fShW--8Y|i{}Fqliu`Otqm9DMc@p&c&v z1wbsI`}+hi5CDg7_Wj31;{s6r>ZA6de}<1weEj;JEdUM*Jn_F648HI`8w@^U&d`54 z7(7+QpXk!xN(QRT_kY%Pz8eg_Q+3Yvf#kj^F>LSqe`TwA0Rv^|e>)f`P=1U`v8rTh z9`+6uI>}&=5OjC=@bO^SKTx0qe}ZD-OuF`1VR;N#(kVghG4p@i_n!?0&+=aAMCqwO zaw;)V0~G`%pG44!--BEVl9U{RaJIXLfA)U@!G99=y&0Cf4tSDwu`dW5_&F^EYEEzY zBs7!e!I#I18`2NS1zG>9(&Q_Dk&BDNJdpzNXTOUq5D$4h&8=)O$P~8(BQ%kz9^upS zvxk6u{+T}q9W~>pK`Y)03lYCwb{T6#JOzM43);(6DBSe;tqW&R( z4_EuDHNiXYP%d(Ln)C`)Fi2RtOoN<$xhzSQFTnKSL%?~$2EVMVoVQo1j2gYG+AE=m z_D+PvpIhn=NPUc8;Iovhm8QNC=+8I+h8%A5{f86?Gnk}Tf?dwzbTCL2=oV<+5{X-C zxqCb~eDh~Taduuwl_B=ug$oaX;5TRk2+0^1aMDCh!i-`7nS1PrrQq5E)I-X$$lE~B zAigKk=o3}k02}xMTh)>3f|E#rd=ja~r{f&^T^Z_H!V99ZhP@yuaBMj>VM!W)QP6)J zS~l=I2EjGi;BZ0ay%HDl{^VqnHbL24HQ%U)?W9TZ``0oH@=n-t#ZFLmDmw8KnEKNp z^WGe&xkbn-NQx{$Dj{p&Fl3E#GN9lKMwoK@D#fhCYD8Pt>F%aJeRZPek7CD-8nx4xI%+n1!0>GU*KbITGf2 zy63E=7xxIQKO>kkF4l){v^FBNkapx3fjO=4D@$Yk=>mK`~c>ERz(?1xU(X z0Q$fOjo0K^ib&h&4Rkzw|H)mVEZZCo0FR#!{RkDJLz1eq)`c7oJte0Bk7J=0q-f;3_EwYn(~q@X}3_KpRAUTZW5 zmN#$=IEJ;CL4$CjUx}h!jwxyn(AXh#Sg9>JYzL!!c(T8#4)qRDg(TP7z~Nx1hlWt9 zL=Z=V1k12gA%7_xTWOBTOes~@IflvBaO^u$=5N>H82Tg9_7uDu{#|u1r&~?}5xEK; zC{jtT@GAec#;e2K13d{{U`RaSF#n#b-JueG%(VlyudEIBAaI4C*aT?`WnWs$iRzX? z|C!4{XmxQ^!pb6(IyKp;1^^sdoO_0_vxLF|Hm9%)7NcBpi@mF&0#Sr2V30WQAD~H? zeN4V&A~0H!3@K>4pvb`IN&##k53pdU!6?)dB8?S3M=<}S+jXb}LJR7}GE5tgN+X{$ zU35SMvAX2lw~HWK8(&MRG$fP^P8KNf2->wAueE9RO^hiwI)bJv$nOQ|L8<{qI6#z>A`UT1TUPzQXk zs&iF4PLJ}2Dta_LarF&|?_VrO^YQoj&A7_Vkx(zJ`J8}6j?2Sy)uGKKytMl8)HTgF z;#*j--(nEGm9Ys`b)$S9qtvksHIPIGjEDjSkGM{R4P2GJVK1tS7@8NaBxR! z|4LBb1FOSezp@d9JGY!ZBQ(9wmN%#JDe+=wF`rW;evbu98i0TaNG;x)_5`wdaX&+?TypT zF{53S@~F{%*z3ugnZ>KN5AHp%+xth#^Rqr5{fJ`_ul8t^jIz_+lkAlDy1j7a#L~gG0nsX<(&gJ*DaESBn-UGVQ!hr#xad+$91D=yUFsD@N1WFtPoHGu3E6}mg zlyc5r^VG|aM^H}rjH9u859oU$M=?k~l6&>@^KaBmvG1m*<1|@}^J`!Wdvi?JJkm#% zYjqEl<7Zygxj|;?(ldjO86QKi^wqRS>|Y^<2k%aq3i%n?hB|qHVzotfD7VNqRx8{g zGtI$=Y(oX)xDC)*`2aV=4ta|VRZ4VRqeazKGSjH_wsV^<-6b<+akzGk*2;IvOl=;v z-JrU?TW0EKZ_?8X9!ldn*k=Dw;hr7i8z_Sz#i^$_qLJucaQsw8Y3WiV%BcIcKq_wp zK8z(19wxXvR-fV6@-btv%yEhQot#kXG5uYZyu?YNOal2#VlS=o%<`eQy{81U&k0fk zLht!fvIf9IQSsDcv9I#x)=QbQ;G+%5qQ;Foq+vSU!~`Z7yQu7`B)1cozIF=K(eqi3 z!G@Uu^v8*A-cLi;kDN5l&g7H&8h3f(Bwa%Z_!`s*FrSjwSZBql zaEq4Ed2b@;5(vGC2PKlwhd`*wmgNHjH^{Q(bVX%=tCC@wf{Z+6$K=)qB?L9i0&$Qn z)5Y{$mL+rdzqo|3K~zVt=~e9nFUYGtbS_F~Z|Tj9t{Qg0gFw*-U>Q+FXr}?%#jY|6 z1%Ti#b@rC`5QJv9|H+$k)#!hE6_%ulf`=7djVk5q0ift3yg8OByU45h@)>@N(zHgl zNETjAM1}z5U4vyRJ_+hR9ET+`UjTVt??%J&kqqH~Iyb)$tI8m9gW)oJte6QT6ymCq zG-Ae@Gyx$`uNiOCeN+!qpJThW-(j3CIBes>yYTBHjbARy__Qfvh9(k$ zxo{MXjkqYJ9Es5!QKhcS?+t9xYmaK855G28+2j@oQA;~lQVr9)2#V#v&WdH7vfkxhl8?bif~b# zHKhBTxiDmx-We{0-st4em(!Pq74;mT5=W|-Yol{De?iz4A5~-<>)TB>Rp)xeOngo4O$Un;v^}@*3fQUC4Ij}x2HaRfipQP^Y z|6Bib@7w7=9`DRn_!R#m=>DS}?%?C_G&wuZ#yg)1s6XsBR}`TcCY6HtZX!-e(AEfv z1m8mdD#I9jG*bop#IK(qSj|F@<{e34@G6tyXaq7R`^*c$4odDoMjXL|VhE^&Pxv5V zili9k0F*=pnGAk0T_S`v@iIbNIU3cHazqSJ+4kU5byeCL)!G&p{q6!@>olOp!gk`I z?Q&@dYSIrR0Ml!a9+@=6WE8n!OT|@G$sr{bIJ`hH&XPxzONp4GzS4@3m<&1_0j-W8 zOcJg~t!vVSqp1>E00ZGZstcI<5tm406#@x8%-bLf*}e)abhI>)g#_U#6(7k34-jok zWEHdE2*&nH&>H{cL5BnqaaE`v$yUH(!D4v;AcZss(MQ0K(49y^&;zxO;if8Q&Kv|Q zA0g6?n(9ai;^D~knh>CSYg6?*>EJ*{+H@&@We&F^1eMBw=C5a5gQ#y|)`Ko%171Bv zBu@5UFLI7rf+f#X&_h|zI7MZ-tmc@&UuJ%)EUgg%+#)8Tt}ZPI{izAJN?zWynqVCn zL|T)s60ZZR|Jz=(Rx@u9MB2gq5%yDLNC$7@cieJQNB~32A!d{bt5wHm*fGN8R<&po zvqE^YK+Ogf5%AR1K-wF%MU7yHlP%3jf^2sGb|pSAj5?v$^U%UDBVb#u11Q zRLmgn=(KO}D+;6|CaTv`7_QO0Uy<`(0b1jJp|5Y1IU{Y!4kYQ!F^?3-bgag7ZY?g3 zMcKZTKkisnJDRw+HlIzV#}}f2nY7o7>52jD)OU@%w%GvNXy5|V=@+terznIbhz2KK zwYBJMdfE^hKDSsA49>(iswk@RuuDa#bdcw~QW4%r@|`d_C{-EWNXiv=Wpyxyn}jy9 zyTCF!j{^NlABa-(ve-0v>@g7_|?h)|aw3+W93vwvYE5%uXc-g*{vg#5r3726pXw?zI!o44g40CNzi@)dL zR{!J=v??8H=F-qgg_bN}K|o}qfI*&OOXf)i2RCIi5>6=y zE3wE^gvjbflD;`AN|wIZqo{aAWG0zMu8hirQondQ9MgIYMtjPU;<*MVrz)V952_GM z1v75G&2O$_GH^qKrxHCJS8_%0IGZUk`&t)s1gemsBAYm}bflsW{efF72ypP7OrDyA z1go;a9Ww{tC`1#mQ=D)@GzlG)h9pE0(@2GxDMmsW#%3hkD==gPNjuvq9CL7s9ND;zX)^E-DSxTbM= zZc!ETAV^h$XQDDGywqyLyWl0k(?K6V06UW@!86eyJOkH}tPRng@($`cH|U|R zvAK)9;Cstp=avHInAY}O667*5XfK1)L_P<7tOBiVc}A$EePPoPPDb|ctz}$Lvymxk zwpk3Mt(!-JvP9KeJ}wx@r5g!K1}uA_%AgCIqCg4IQeY&@tWvs)&xC$|R7aTQqr$1G zquuRX8UIPpD#|fcPK}IA372m;$?sPqDW#)GxASnRY zEqbTc0S8|x3Zj-8(+dU*UV$--Sj4sIsc7NOug08*W(`wY8-_(Q@v0b3GCkyKjL{h!+*3O$Ze^EBNPH;6<~&SP5s8pNqf8+vsO%OYmrF5{lng5lKxzuS zjcW}65k_>j5KL-kJ(^SwL0J$4g4T-g))Yxsr(ZAa=GvaA zxYM9g7Hx=vW{ySqlITJ*ZBa5xkyd0#f>^3=q#@wiAW|w7j|->}yKY?-OG*_G2PIA} zT0AR)NlE)<7O6l|N7lFH+Hs@=T2X6oabtHBW}KT{@pGnCRb8vWCLqx>PWFZxm?{-F zf%kgUDCCi`-{zXPP>D3SVazDYQr#mpqLp7+^{oOMTi0pEJg-7L3!L+sA5Q48D_O38NjHa2eO@CVckp8 zA2e-IL?swjJ0;6S@;a{JkxN4nvK?$UVArh!O9{Q~(5MV7CH!(^UgR{VkgN;0k0B+{ zv9icur<D`ITX@m)h-QsBo&>B;mUAPQbFqnc4jfw z9oI*Ld?{Me%_wj^FjvsyT0pL*j;F)#Nr=;Csap=|)SPPOb?#bWhE!i~EG#+#(+%Q2 zy$4@z*_iF2D4|d)#CiF>BRruaw~z01-Kq1&v7Lmx)U+H;+AdOs-6dHT)hxsE`jmpJ zs#8AKf(ivhW&l8Kq_VmrU)C7Ql?w+5e+YvxAmUF#p@Q zPFE8Hj_A$?O&;Uv>YDT_U$073II{Acg@fGgHy@ENijn3n7JetEGEfxWdXdwzhqt%@ zl-n-FTR?95-CPA4MdL6@;_;~63nyti?T@lfuhr^@S=0&RI0+`Bq~GtfFTV;@z{|N0 zgy;A0j_QN8>p)MHV<;%}{#REn3DgHJnX4;Rar}_2w!JlTH#ocHZRG&jqs^QfjCy0Md>SK+>Q8US$mQ~#5(OTNaJx7^;_{c zjYdh-io2aYL@yk*dM!jD#8Ya!ly>K<*Q?Jp%{sdid<69L6wX_En{UWx^YHAQm~EbSlJO1u zJuhgh6k{G;sifD=lhsMyKlbEF6voY7r|Y*{t!B`Q(nhPK^R?VgWXt+)||&2AL< zL4-naquXh=`aS&(CF5q$3;b526Ey<>>^A#oxrg6vLW$ck$^dXbXav9wnFQAk8f_rZ z?lwBzW+&{(pSCnDrTVIl0uiAOFzMNE0=|>B8e!0k)5?W1ha>o(dzu-Eq6y=Dg(b^st`v)yJG<0}x1{T^wh2?W?-+*1VVrJzsz`pfDKqY%(^qSP`gO()qFhG?y@Clkx zFZScO*$;Yt1h%yO9vIt={VpgJfr=8H z`6mowztd{AqsWiCARt=qqse}XZgpFzj^6eA#H}Ct?M^dn^`t~6Q00Z<8XSQmyVD`N zRKp!7R9YpW|#6A+y?vM7-)^eHAeqDG%m z+#$)Mu#Zs#0SJg=zZr!+d~ah|bn(3~s($vKv|FHKx8nmnvID$DgHadlLrlP247(n_ z0bCcu2{^^zk$fY4S-KasF+QT042YUBcmmG$F*MbPLYYv8A4glK5uuko3}K+#M;|cj zM37o=wgA7}mik?tpBazTd|Pk7aIX_xjRr zjycFD=VWjkdaM(^k(SX7SZc(yY z%?K>$gqZ9CC0a@ZW45geNtM3e#Q+7q0xlA8sG`257%5#$p%?@hsbL>eXxz~_$CyMr zyVJ+=g|UPB4X5n{q!& z?;+Q=w&^yO1P-ZwP1_VJlsk0s_5CcF{_lho3T<;XUIP{wtNdj?sEk3zgrL%=H0fhFiL&c z#NAiy7F&T4*MKDo>i`@UNj+)_n_5u8dflDH%8yfT|z@ zQPzt4<6gf#iL!pui90wz&XPVh=US6)*1gI)H#j+#c{i#)HNFe41=%D~P6=Njf(-9} z%Z55GhZu(vbyZ#Msu=eLCmS`KZ{VHwOj$5oCNeifJ+x6TrCdz}Lf6DqQ3NYRRa@o} zoqSbfOqJ;dptQ~&ZjJSzk(yd?PFm6#Q@gxv4pl%cjQ&@Q3c!$j*7l)isZDf(nwr2K zAc3l>TeK(Gl`-aU--Dr=g!nq9f%e0)aM&0^+G*NzA3}fB(E@;6-XTdVpmK$n0J?Qn z&x3C0cm+xo#Syg=f)?M5CXOvX<1|*nK#&(lIQ)`5IsVcN=38n-W-&$cG&k0ZVHXdS z#l_$aaHBKL;+x)>abhdtAergc3YS^Dx`dc4+bCQrWY{(e*ER~*HVW4^3Kyf${9h4; z3)h&i-2D-EBUcv-=pVTIVy9N5diGU<>*6Zr4&6& ze5u`gx44}PCCS;s&+p*MRaSX)R4zE})OXDN73cQa@9tJ^Wrwb~zl5u-R1=kA$J-~+ z&5Czi)%`IXFQTZvOJi;MH*{MYocy+IK7ac3OMPcRBGx+F-tt|dY-vnrJ(6$q4AC))7;UR*zJv5E zV(mebuIzW|@qKctn2xxTOJ22P#a}ckDnf;Wi%O_4W3O}o5$SO@9PHLV+XI#N_{$)! zV;7XS@&C>HYR)+Nrrw)-$pv#b^3 zY%Pw*O?aJO@1NMPl^Dup&ira8jaN7=dkhinlG~B&qV6Eyi%o zZco%6Zm4<5Wmy6!X9LbyRubo75i&1K~-4JcQ*C2awf$yvO( zTy^KUvAg>(I_f)K)HsK6{Ovbier(SVu``3H4Cgn!Q|~Z`)z?Rb27AT0fYWyxMQJ~t z^s+b(!ge$owXtW@pY)<|GD*8xi1#$J@ckJlovdJ9&boIs?KfB3Yx^}$2DQDKOQ)J& zQ!3Cm^Z5#S_WQE7_o4=b1Jv8? zt6tkzz2xaE`)Xg|!5#$4hQrSGRWG$BZeR5(y!Ewx)obm+T&)ysU-iOEbI={PuX^RL zYFUkI`>NM(@v7Gp@e~&;I3FcT6`S4T#A*oKOca^(xzIWLkkRhDo zKJGx|l|)6@rjGH36enN8=@bhvi6v-vnL}LPcXRYUuX?O2&sN`cZALVI-{;x% z-X)Q74iM0wYDvWxeUgo*N&UVFJlaSZNvE;IRq8YBmveu9=RUXdrAx{w+djbXj$6m_ z7}N7jFR&>Qm1jw$+XN`@VpTo7rVFd*LkK&6LJGy@i`ve2!{6V{dutA@RGd(AfMY#S zoaEonvuor^>0Kl6*Wz5t+CHZ?#vR@An{K&~;SK@Mbhgi_DOvw|`<$A3_scxNwtY^G zlQM#-@lSbfG2Rb6>Xhe3=qp=#O~gEVwtY@*j_2UH#3aX=XCIVv79pXcJC#dp>C+FgSrZ>_!>hJ0$G-pg4&3^AlVV<+U*lgKS0i_U$v-N71i!8pTiRdwQ>k)GNMFhWTv! z_8A_rRc~T$-#&BSMl}w^cDR%wBqL861xH z9Ge_9+QQbN;k+z%GtYmzqUQd*xodhk{cc=m!xRrD;66Y%zynQfTnR|JNq5pp!*073 zb)u{{>QAy(yTAGN`WjxY|Ez@IatRL+_w31i$iJ zTpdHo!K-u1#qVZ8(F@I$H)FQ%m~7uM;d2+;cTBeLm~7uMiMH>U;OUWoPoMnO@0gUd zF|KX5R}P>XI>Cf;-9V+^jcU;E^^|;8$})w%k5haHZ1-&ihR{H|9g!hUs95=&fiK$Dn*GG{m4XQ=Zh}9 z)?N{x;(9SB@LFgy!#(b9j7!|DQPhp`+;}HUMsXiu;=?Ei#-k*i1W^*lSLj9tCs!}( z%8rRub&j@?tsl?4`C^P41*^F?%DgEq7x0~)ZDi|hWb18Y>uqFf6$K$pR_TdX&lU?t z7CRclTwEgo)9dIXT)2g2>CyB>P3?hB?4740#iFlr^US$ArgEHnPSrQ7?7gk(%Twf@hmkv_IOrclJ>6R;Og}38@aPO>J*2 z^NzN}T4B&_^*ea97;&}3a5ReBI6&);dw5?w>`@&|<8gGwY1uk*uKp+C$?_od+vud} zHah8Qio3mh!bq)c+vud(V)Zt^^fn141k$z<}$AKqQF6FM* zG4wR;99ztMenlu%*E>+cd*Xuih9IhX{k&c1R7I*%P}J*0Ox3O4CQhoZia+lcANBu| zxTsnHl}bb(#9t*As^jkB216|+Ulp!1O0#~eGifJbG--Dx-A+53U>7MskW@qtj9VRe zL5;DAbi1gJWn?OXKDyyhi*ZnSIJxKHi0$J~yuUpAd-L!VK?7zhH~8r!xj0>U>J)Q5 zl&RBt?l4wJyox&gesA1QyRCK`{zqY_)x+OOzZXSG(2ek*=_o{O(+NC1ZWYY5h)NZ0 zf?ggIvlPx$Opqfr>%!hxVBV^)PNp*H@Gs(==9xQ;4QvgXI>JBDkZDjhxxnB%=PLYh zqNAF3|CkJ#vn<<$!b_UtX-BBr1qjw&wQ;px@~J^-jIHR9d?(4$iLKbgP1RE(fHwnn z*d(F9c=-bwKq5ZqMs$XKI8hg{xqN0x*G3vqQ@gm;@m|>xWx?W}gF~mfeI;_i$CTtH z$p#Bk#DG#xLaxnvZLcfqDMgi4riHX_Jixrt1K{424|)%i^W-SNQ`>LwrFH%WpXgMo zJ~4*#{#r|%?0^!>QsZX-^A((R@F z9-_o|M{&?g?m)4+WwdckB^y|LQ=oAjYuus0YWe1}XyXsnKZF|}_~CFcc(9KEye9x~yne~5_W{uhJ67x*+B@#~>VLlE=7GVSlE zgCd1;UstB(@P0x#^Pl!vySHzE4-Oyxbuj!=VI|D~tCVTy`~DLmXxct}_ywAM_;`Rg zZZRM|aaw!b0XF!h`i0)?;xqnyjoM?0pq`$pIO?RtpM7GIsW#b-8wXccyr8$=x?yBe zuM*I-7x!TeLBq$vdS~1VM!mSx!yATp&7d1*-ENemop>~Q9|5(vRH^>XD-lJr2(_+d z6`@?!`wlsA$~FCIy>Qa&MSZwsCjC*L_hnjH&>MG>UfSvf?@O2s z?>mH>A9&bWM2@MZZ4+fS{Tdb#q~&%7(RI9D*Q}Bl}b+rw3){UASzmNMMY0$x^mKVm20AKkxjF<8m zAMF1=Gx5z2V{`*G@K?V5eAa42y=FfR0ze7+&Aty^Tz%j-IGhDR14%x=HKYK4p$UFR zhWfy7X{!+go=FlIlKFED%Eb-)7ys%$tT)H0)r|b0)oFHLfrRL-A2!<_ob&vs8F={N z-z9$FCmHj513$0G3Q`7Tna(uxv*ZWYyYCi+`knZy-k6wS8$u|=Ok1EJeuR=iGxR_& z5GC{|kRhlAvNH|T3s3v_j-R{rPrWhnznxF&%~5S(Ai=!uoroMl3PDxMpd+JRrF5Ps z$)(`>m?Mgky2%gq7WiRef*^F8aazG}2t^mDcI9sbp=dQa%~)KHMGlxJKgg56$OX1Y zg$PLw1|@3wtOddGDLlErDM8Z$cZ<>YJMlLK)h{>RM02aQ-IR_dCe6*R^tx)_y5;78 zz2cRq_6Yu|X*lY((lm|QonX|DgDmc}MmWpFqu(&+V(gB;w_dE@tg6tA^BwWZSE5u` zZf3Tz&U;yH@*b4@f_;=*Z70TR)3zE+vIw?KBv#hxu+o^z4YGvKQo$Ts?EA;4b zIGEBtJ^c%Ri~UVgb+r$&4+qPA7~`}{U1L>ve>-DU+^-9Us!h4dNKN|V@ubzy(pH>= zaW@KaG=;nLNtPwOR?zE*LDC+##T&$1qDqeKTk3IIX~` z2%mK1sruW|eE#zOQUZTV^bA(pHD@*U9YlM~QgFT7^HBRVOJLTThZC#axGGKpwU4`r zV<0a*Nv;EH<2L!J?>8M2Ev@BD?zYKo^jcxO)H z#9j5wo(|5z4Rba)1>7@rqBqBNu7!`#u}H#$dtRoCiOZ|1!CJ3RcnP9jS5D-w=2M2y z##!a8(eOU;T00VMwN4<@<}7=&s_*O|(ESXqG0CENez82MFPh3%M#KL_!Ok6V=i-V> z_uF@Lz@0Dl)F14fB4nSSZXI%Syh>;iRrY%!_$&kkeyo#{j?XSmFm?Z@aEY`BaJn5r zv26)F^ka3hn7{V2rr>5#(lxXdpDX~3d%cE3IJ8v9n{_bao$kea;nm6Ab2)Y0kp@08 zr=Z1C*ZMgy)mbmjmFLH;J78*qICNxmtvX}c<(9Fvc51U8s-z#qeQ5{2>_iJvN(qVj7+Nh zk`mxv7_g8P@1NhHi)-r0$trwr5~{!4?Qf;Dj#dLSh~Yc%b=woZ*7~yd+T9*1ITjh!oD-O#z)6cD{jzb|hP2EXWq2SH2o+mayB{0(#vk*a1%3Rcc2x>W;&#KTfl7giYW8 zp^$=L(&_ZWD2`gms1r=mFzw&+iQhuUDin`=S*+CmP4z1+0KO2b3SUq4*XK6okDT8e z9}EU9p5F|EeLsT!_m*1W@aLib7GKT|_+@tBKY+?^j(HwF{A_Ue88bfjpNUq_hi0Lq z4`*@&H1K1n`SAgj{oa9}+C!EMn)rcIJaNjhIQ04c>=%+iK+jYb)cA4vBndV3am=@a z!M6l_Xbb;1%nw@f9RC>T;~`urDi#U8^UMZXFIsq|O&389*#ifL)r2>|07z5^qzerX zJ%6S8rJA$ospinvua%)B=S_kF(12;BKmP5&e>og{E9&@xKSgS^f8!$~;}uyrF)Acp zH7L?ii;rHnN1aHX+{JEL(8t+Ph}W)Lle7)f7_qI|+3i%tA}W`T3N`77d)B%lY~kdG zKTgtBeaw3OtQU7XIQa_F6qbLh+n%)0yDaNRaD>B2S=yPz@7u=>M?Y{kxLhMnmdoie z7nQQIqB2TaidCGBj%-EkqNcw)K6CYzEzXJGdblmIOrpU68a5ZR#qkAQ6qoji$*K1z zZ)To{%N0Vx;QLFq!i%X{PnpGkwh2+^@c6LfLU+EHujW+Xn?RquhLR=|L zZ>cmrrtqJmo9Y#e9+r}0S9o!*Gh}Mw>Fm?DLSpLoy2o6nsIQ44;&{|maAWJ1xPXLg zQfQ4r1j1R3V6%Fv-Q$aDr&C<#TOIWq>V*Jplx2F3Zq$^mLR($BDKD7kK9VIb`l6bt zMMIZ)euXoAU01%;sb0pjezyzY4dIL?>AKg8Jd+l9bj-+c-F|onJh4@!bBqmpx7Gh%Er*U6Q$4hp6 zzs~|NzNrcj)KXaNIa)x(^ zr&97&t8KrNh2!zK9U}^68;%umuOCFCFw8B6hVeIliQj*Hh~7L^zHNf3oMPlO z&C^I-fE={NRtUxTI6rhe&(OL)ZkYqHIvjaS?6k9)peVh=ugB!Q@-%z7Pk%KSKSCt_ zqDA&){#8ER*o;^$Wlbzt5pLSuTma5m*`$jbz+u#FWB<9=k4BSGw~e_W3ZSBg2vppU zaUQTa?n?nD_ug+?;=b(e?s|X1Q-v8q=BJsu$@eh=6YxrexBH2GLH3;|3;ExY#kHS_ z9en-R-okVA6im^)j92t@<2tt7!*riuYX|`oUex4SE4biD`0W~0W?O@c8oXX*Vd7_O zZAQuD@S|Mj}jnm z%!!hciDi(3F_l?hFXu;9b=9*OdqC^rl8zCWen+*kTf&D+(UB6H@lgP-kC2q#gwcQo zi6-&9%p>P@ETW5&5b_ zhEfF0u#O!`_1NF1dmf(OT}_kIKOH~>IGzN*PXwbv5>Q(oP+u?R=S%ZafEfe1ta9)h zc@?D$34jAuuEjytW%2yXPat{G+-BG$KXdovzix&)LEbJl^-jZj}AWOc0i znvKv=14k>RtsIu#d9@4HM6H|+IP3dYptIv?@1B~k=iCvcdu{lA2mM~q3%j`XG)fSm zJ__4mXEL5-QKy~a{%0^rE~Rt{=X(yRuestDnZU~ll}_L}8|VKak&8INIA0CQQ987Hy+&1djr+h7dmUKI|p6$9e3^3)5CSWH^6$V%2;c6 z^$WjciLJ=J8`@uYQ~y%hS7Dbk!JTP&rMfWZox`ym?-gPf0@sg6yYAO}a(3ml#zB~b z{dO{%#Ml=YKtQgwPs2g7Wfjsx8H@8d$tBu)`nJL^PU z98{$3G)86$xAIo28%5Hkq}U|S9ZFcRBO(0Ny$AR$a~ZVX8g)z@5o`vWXMQGXy-NPdvHErMFHzZ^VASz zU(FWad}Rk6O0ai~__;)h7yO3rID%9;_)MtyBHLgvwT|&MTY&L3WgFC#6iEWA{-6LR z7ps%`0ubM6h=%Zk*?0ka<;&@E{(AXx3cy9VlHmkkWT*LjH$w(@rQjoqn^FiP5#fGh zH||cxaflP*UX=8+5Sv;!CW=OtLng;1A0U2DhKQY2^c-+FgT0k4>#(j6MUPHK+^+CIX}~k8ipCbTM6IO>}gA`YNm6Z|+(i76<439U6-A1i9jOQ%zMos}bPE#^r^h z0%0A-fwa!It2X;4SuaVu8P>@-gojzT*T?^@QPvN;<8C|(JMB(18As8LH~U;1D$Wgk z$IT2@|5s0+AMU|?NX9U0Oc=k5CBH~;35i(?%XOTAaB#B9#vjo?!8?av-ZG83&z=NHysLovGyG07qwwvk7oGzu`Iotj$1SZ)Qgx#3H}oW zfQKa?zr(LzWTOv6AO-kqZAcnwID^qmx@yKtI{gW}1#nk%61OIZTG;JRV7`vCEC>T6 z^bp=UYK{6gp7A*N3W!uqd+t3_bs)`yBJn}H&LC{qI!eH*_B5G;iIZnry7V8tWU1rM z6eFiLY?12>LfK;`*n5r3$6zu0xgLX1F { - const isProductionBuild = configType === 'PRODUCTION'; - - // remove svg from default storybook webpack 5 config so we can use `raw-loader` - config.module.rules = config.module.rules.map((rule: any) => { - if ( - String(rule.test) === - String(/\.(svg|ico|jpg|jpeg|png|apng|gif|eot|otf|webp|ttf|woff|woff2|cur|ani|pdf)(\?.*)?$/) - ) { - return { - ...rule, - test: /\.(ico|jpg|jpeg|png|apng|gif|eot|otf|webp|ttf|woff|woff2|cur|ani|pdf)(\?.*)?$/, - }; - } - - return rule; + webpackFinal: async (config: any) => { + // expose jquery as a global so jquery plugins don't break at runtime. + config.module.rules.push({ + test: require.resolve('jquery'), + loader: 'expose-loader', + options: { + exposes: ['$', 'jQuery'], + }, }); - config.module.rules = [ - ...(config.module.rules || []), - { - test: /\.tsx?$/, - use: [ - { - loader: require.resolve('ts-loader'), - options: { - transpileOnly: true, - configFile: path.resolve(__dirname, 'tsconfig.json'), - }, - }, - ], - exclude: /node_modules/, - include: [path.resolve(__dirname, '../../../public/'), path.resolve(__dirname, '../../../packages/')], - }, - { - test: /\.scss$/, - use: [ - { - loader: 'style-loader', - options: { injectType: 'lazyStyleTag' }, - }, - { - loader: 'css-loader', - options: { - url: false, - importLoaders: 2, - }, - }, - { - loader: 'postcss-loader', - options: { - sourceMap: false, - postcssOptions: { - config: path.resolve(__dirname + '../../../../scripts/webpack/postcss.config.js'), - }, - }, - }, - { - loader: 'sass-loader', - options: { - sourceMap: false, - }, - }, - ], - }, - // for pre-caching SVGs as part of the JS bundles - { - test: /\.svg$/, - use: 'raw-loader', - }, - { - test: require.resolve('jquery'), - loader: 'expose-loader', - options: { - exposes: ['$', 'jQuery'], - }, - }, - ]; - - if (isProductionBuild) { - config.optimization = { - nodeEnv: 'production', - moduleIds: 'deterministic', - runtimeChunk: 'single', - splitChunks: { - chunks: 'all', - minChunks: 1, - cacheGroups: { - vendors: { - test: /[\\/]node_modules[\\/].*[jt]sx?$/, - chunks: 'initial', - priority: -10, - reuseExistingChunk: true, - enforce: true, - }, - default: { - priority: -20, - chunks: 'all', - test: /.*[jt]sx?$/, - reuseExistingChunk: true, - }, - }, - }, - minimize: isProductionBuild, - minimizer: isProductionBuild - ? [new TerserPlugin({ parallel: false, exclude: /monaco/ }), new CssMinimizerPlugin()] - : [], - }; - } - - config.resolve.alias['@grafana/ui'] = path.resolve(__dirname, '..'); - - // Silence "export not found" webpack warnings with transpileOnly - // https://github.com/TypeStrong/ts-loader#transpileonly - config.plugins.push( - new FilterWarningsPlugin({ - exclude: /export .* was not found in/, - }) - ); + // use the raw-loader for SVGS for compatibility with grafana/ui Icon component. + config.module.rules.push({ + test: /(unicons|mono|custom)[\\/].*\.svg$/, + type: 'asset/source', + }); return config; }, }; + +module.exports = mainConfig; diff --git a/packages/grafana-ui/.storybook/manager.ts b/packages/grafana-ui/.storybook/manager.ts new file mode 100644 index 00000000000..96ed58aa799 --- /dev/null +++ b/packages/grafana-ui/.storybook/manager.ts @@ -0,0 +1,9 @@ +import { addons } from '@storybook/addons'; +import { GrafanaDark } from './storybookTheme'; + +addons.setConfig({ + sidebar: { + showRoots: false, + }, + theme: GrafanaDark, +}); diff --git a/packages/grafana-ui/.storybook/preview-head.html b/packages/grafana-ui/.storybook/preview-head.html deleted file mode 100644 index 5bcc8d66948..00000000000 --- a/packages/grafana-ui/.storybook/preview-head.html +++ /dev/null @@ -1,6 +0,0 @@ - - diff --git a/packages/grafana-ui/.storybook/preview.ts b/packages/grafana-ui/.storybook/preview.ts index d8a51bcd804..37259f1e06d 100644 --- a/packages/grafana-ui/.storybook/preview.ts +++ b/packages/grafana-ui/.storybook/preview.ts @@ -9,13 +9,12 @@ import '../../../public/vendor/flot/jquery.flot.crosshair'; import '../../../public/vendor/flot/jquery.flot.dashes'; import '../../../public/vendor/flot/jquery.flot.gauge'; import { withTheme } from '../src/utils/storybook/withTheme'; +import { ThemedDocsContainer } from '../src/utils/storybook/ThemedDocsContainer'; // @ts-ignore import lightTheme from '../../../public/sass/grafana.light.scss'; // @ts-ignore import darkTheme from '../../../public/sass/grafana.dark.scss'; import { GrafanaLight, GrafanaDark } from './storybookTheme'; -import addons from '@storybook/addons'; -import { ThemedDocsContainer } from '../src/utils/storybook/ThemedDocsContainer'; const handleThemeChange = (theme: any) => { if (theme !== 'light') { @@ -27,23 +26,21 @@ const handleThemeChange = (theme: any) => { } }; -addons.setConfig({ - showRoots: false, - theme: GrafanaDark, -}); - export const decorators = [withTheme(handleThemeChange)]; export const parameters = { - docs: { - container: ThemedDocsContainer, - }, + actions: { argTypesRegex: '^on[A-Z].*' }, darkMode: { dark: GrafanaDark, light: GrafanaLight, }, + docs: { + container: ThemedDocsContainer, + }, + knobs: { + disable: true, + }, layout: 'fullscreen', - actions: { argTypesRegex: '^on[A-Z].*' }, options: { showPanel: true, panelPosition: 'right', @@ -56,7 +53,4 @@ export const parameters = { order: ['Docs Overview', ['Intro']], }, }, - knobs: { - disable: true, - }, }; diff --git a/packages/grafana-ui/.storybook/tsconfig.json b/packages/grafana-ui/.storybook/tsconfig.json index a37abf437df..cbcee5966e1 100644 --- a/packages/grafana-ui/.storybook/tsconfig.json +++ b/packages/grafana-ui/.storybook/tsconfig.json @@ -4,7 +4,6 @@ "noUnusedLocals": false, "outDir": "compiled" }, - "exclude": ["../dist/**/*"], "extends": "../tsconfig.json", - "include": ["../src/**/*.ts", "../src/**/*.tsx", "../../../public/app/types/svg.d.ts"] + "include": ["../src/**/*.ts*", "../../../public/app/types/svg.d.ts"] } diff --git a/packages/grafana-ui/package.json b/packages/grafana-ui/package.json index 29dd855df5a..1087ab73961 100644 --- a/packages/grafana-ui/package.json +++ b/packages/grafana-ui/package.json @@ -110,21 +110,23 @@ "@grafana/tsconfig": "^1.2.0-rc1", "@mdx-js/react": "1.6.22", "@rollup/plugin-node-resolve": "13.3.0", - "@storybook/addon-a11y": "6.4.21", - "@storybook/addon-actions": "6.4.21", - "@storybook/addon-docs": "6.4.21", - "@storybook/addon-essentials": "6.4.21", + "@storybook/addon-a11y": "6.5.12", + "@storybook/addon-actions": "6.5.12", + "@storybook/addon-docs": "6.5.12", + "@storybook/addon-essentials": "6.5.12", "@storybook/addon-knobs": "6.4.0", - "@storybook/addon-storysource": "6.4.21", - "@storybook/addons": "6.4.21", - "@storybook/api": "6.4.21", - "@storybook/builder-webpack5": "6.4.21", - "@storybook/client-api": "6.4.21", - "@storybook/components": "6.4.21", - "@storybook/core-events": "6.4.21", - "@storybook/manager-webpack5": "6.4.21", - "@storybook/react": "6.4.21", - "@storybook/theming": "6.4.21", + "@storybook/addon-storysource": "6.5.12", + "@storybook/addons": "6.5.12", + "@storybook/api": "6.5.12", + "@storybook/builder-webpack5": "6.5.12", + "@storybook/client-api": "6.5.12", + "@storybook/components": "6.5.12", + "@storybook/core-events": "6.5.12", + "@storybook/manager-webpack5": "6.5.12", + "@storybook/mdx2-csf": "0.0.3", + "@storybook/preset-scss": "1.0.3", + "@storybook/react": "6.5.12", + "@storybook/theming": "6.5.12", "@swc/helpers": "0.4.3", "@testing-library/dom": "8.13.0", "@testing-library/jest-dom": "5.16.4", @@ -163,19 +165,14 @@ "@types/tinycolor2": "1.4.3", "@types/uuid": "8.3.4", "@wojtekmaj/enzyme-adapter-react-17": "0.6.7", - "babel-loader": "8.2.5", "common-tags": "1.8.2", "css-loader": "6.7.1", - "css-minimizer-webpack-plugin": "4.1.0", "csstype": "3.1.0", "enzyme": "3.11.0", "esbuild": "0.15.7", "expose-loader": "4.0.0", "mock-raf": "1.0.1", - "postcss": "8.4.14", - "postcss-loader": "7.0.1", "process": "^0.11.10", - "raw-loader": "4.0.2", "react": "17.0.2", "react-docgen-typescript-loader": "3.7.2", "react-dom": "17.0.2", @@ -187,13 +184,11 @@ "rollup-plugin-node-externals": "^4.1.0", "rollup-plugin-svg-import": "^1.6.0", "sass-loader": "13.0.2", - "storybook-dark-mode": "1.1.0", + "storybook-addon-turbo-build": "1.1.0", + "storybook-dark-mode": "1.1.2", "style-loader": "3.3.1", - "terser-webpack-plugin": "5.3.3", - "ts-loader": "8.4.0", "typescript": "4.8.2", - "webpack": "5.74.0", - "webpack-filter-warnings-plugin": "1.2.1" + "webpack": "5.74.0" }, "peerDependencies": { "react": "^16.8.0 || ^17.0.0", diff --git a/packages/grafana-ui/src/components/Icon/Icon.story.tsx b/packages/grafana-ui/src/components/Icon/Icon.story.tsx index 28d96fc4255..b5576ec105e 100644 --- a/packages/grafana-ui/src/components/Icon/Icon.story.tsx +++ b/packages/grafana-ui/src/components/Icon/Icon.story.tsx @@ -72,6 +72,8 @@ export const IconsOverview = () => { className={css` display: flex; flex-direction: column; + height: 100%; + overflow: auto; width: 100%; `} > diff --git a/packages/grafana-ui/src/components/ThemeDemos/EmotionPerfTest.tsx b/packages/grafana-ui/src/components/ThemeDemos/EmotionPerfTest.tsx index 4d551791f88..e2bfc382258 100644 --- a/packages/grafana-ui/src/components/ThemeDemos/EmotionPerfTest.tsx +++ b/packages/grafana-ui/src/components/ThemeDemos/EmotionPerfTest.tsx @@ -1,6 +1,7 @@ -/** @jsxImportSource @emotion/react */ - +/** @jsxRuntime classic */ +/** @jsx jsx */ import { css, cx } from '@emotion/css'; +import { jsx } from '@emotion/react'; import classnames from 'classnames'; import { Profiler, ProfilerOnRenderCallback, useState, FC } from 'react'; diff --git a/packages/grafana-ui/src/utils/storybook/ThemedDocsContainer.tsx b/packages/grafana-ui/src/utils/storybook/ThemedDocsContainer.tsx index 095d1f3ed25..32f2773fbfa 100644 --- a/packages/grafana-ui/src/utils/storybook/ThemedDocsContainer.tsx +++ b/packages/grafana-ui/src/utils/storybook/ThemedDocsContainer.tsx @@ -1,6 +1,6 @@ // This is a temporary workaround to allow theme switching storybook docs // see https://github.com/storybookjs/storybook/issues/10523 for further details -import { DocsContainer } from '@storybook/addon-docs/blocks'; +import { DocsContainer } from '@storybook/addon-docs'; import React from 'react'; import { useDarkMode } from 'storybook-dark-mode'; diff --git a/packages/grafana-ui/src/utils/storybook/withTheme.tsx b/packages/grafana-ui/src/utils/storybook/withTheme.tsx index 785ae08cf29..da1f660e906 100644 --- a/packages/grafana-ui/src/utils/storybook/withTheme.tsx +++ b/packages/grafana-ui/src/utils/storybook/withTheme.tsx @@ -20,6 +20,7 @@ const ThemeableStory: React.FunctionComponent<{ handleSassThemeChange: SassTheme width: 100%; padding: 20px; display: flex; + height: 100%; min-height: 100%; background: ${theme.colors.background.primary}; }`; diff --git a/yarn.lock b/yarn.lock index 38eb0309946..6cf10636afe 100644 --- a/yarn.lock +++ b/yarn.lock @@ -64,13 +64,6 @@ __metadata: languageName: node linkType: hard -"@babel/compat-data@npm:^7.16.8, @babel/compat-data@npm:^7.17.0": - version: 7.17.0 - resolution: "@babel/compat-data@npm:7.17.0" - checksum: fe5afaf529d107a223cd5937dace248464b6df1e9f4ea4031a5723e9571b46a4db1c4ff226bac6351148b1bc02ba1b39cb142662cd235aa99c1dda77882f8c9d - languageName: node - linkType: hard - "@babel/compat-data@npm:^7.17.10": version: 7.17.10 resolution: "@babel/compat-data@npm:7.17.10" @@ -162,7 +155,7 @@ __metadata: languageName: node linkType: hard -"@babel/core@npm:^7.1.0, @babel/core@npm:^7.12.3, @babel/core@npm:^7.7.5": +"@babel/core@npm:^7.1.0, @babel/core@npm:^7.12.3": version: 7.15.8 resolution: "@babel/core@npm:7.15.8" dependencies: @@ -185,7 +178,7 @@ __metadata: languageName: node linkType: hard -"@babel/core@npm:^7.11.6": +"@babel/core@npm:^7.11.6, @babel/core@npm:^7.7.5": version: 7.18.2 resolution: "@babel/core@npm:7.18.2" dependencies: @@ -288,14 +281,14 @@ __metadata: languageName: node linkType: hard -"@babel/generator@npm:^7.12.11, @babel/generator@npm:^7.12.5": - version: 7.17.3 - resolution: "@babel/generator@npm:7.17.3" +"@babel/generator@npm:^7.12.11, @babel/generator@npm:^7.12.5, @babel/generator@npm:^7.18.2": + version: 7.18.2 + resolution: "@babel/generator@npm:7.18.2" dependencies: - "@babel/types": ^7.17.0 + "@babel/types": ^7.18.2 + "@jridgewell/gen-mapping": ^0.3.0 jsesc: ^2.5.1 - source-map: ^0.5.0 - checksum: ddf70e3489976018dfc2da8b9f43ec8c582cac2da681ed4a6227c53b26a9626223e4dca90098b3d3afe43bc67f20160856240e826c56b48e577f34a5a7e22b9f + checksum: d0661e95532ddd97566d41fec26355a7b28d1cbc4df95fe80cc084c413342935911b48db20910708db39714844ddd614f61c2ec4cca3fb10181418bdcaa2e7a3 languageName: node linkType: hard @@ -354,17 +347,6 @@ __metadata: languageName: node linkType: hard -"@babel/generator@npm:^7.18.2": - version: 7.18.2 - resolution: "@babel/generator@npm:7.18.2" - dependencies: - "@babel/types": ^7.18.2 - "@jridgewell/gen-mapping": ^0.3.0 - jsesc: ^2.5.1 - checksum: d0661e95532ddd97566d41fec26355a7b28d1cbc4df95fe80cc084c413342935911b48db20910708db39714844ddd614f61c2ec4cca3fb10181418bdcaa2e7a3 - languageName: node - linkType: hard - "@babel/generator@npm:^7.18.6": version: 7.18.6 resolution: "@babel/generator@npm:7.18.6" @@ -487,6 +469,20 @@ __metadata: languageName: node linkType: hard +"@babel/helper-compilation-targets@npm:^7.17.10, @babel/helper-compilation-targets@npm:^7.18.9": + version: 7.18.9 + resolution: "@babel/helper-compilation-targets@npm:7.18.9" + dependencies: + "@babel/compat-data": ^7.18.8 + "@babel/helper-validator-option": ^7.18.6 + browserslist: ^4.20.2 + semver: ^6.3.0 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 2a9d71e124e098a9f45de4527ddd1982349d231827d341e00da9dfb967e260ecc7662c8b62abee4a010fb34d5f07a8d2155c974e0bc1928144cee5644910621d + languageName: node + linkType: hard + "@babel/helper-compilation-targets@npm:^7.17.7, @babel/helper-compilation-targets@npm:^7.19.0": version: 7.19.0 resolution: "@babel/helper-compilation-targets@npm:7.19.0" @@ -515,37 +511,6 @@ __metadata: languageName: node linkType: hard -"@babel/helper-compilation-targets@npm:^7.18.9": - version: 7.18.9 - resolution: "@babel/helper-compilation-targets@npm:7.18.9" - dependencies: - "@babel/compat-data": ^7.18.8 - "@babel/helper-validator-option": ^7.18.6 - browserslist: ^4.20.2 - semver: ^6.3.0 - peerDependencies: - "@babel/core": ^7.0.0 - checksum: 2a9d71e124e098a9f45de4527ddd1982349d231827d341e00da9dfb967e260ecc7662c8b62abee4a010fb34d5f07a8d2155c974e0bc1928144cee5644910621d - languageName: node - linkType: hard - -"@babel/helper-create-class-features-plugin@npm:^7.16.10": - version: 7.17.1 - resolution: "@babel/helper-create-class-features-plugin@npm:7.17.1" - dependencies: - "@babel/helper-annotate-as-pure": ^7.16.7 - "@babel/helper-environment-visitor": ^7.16.7 - "@babel/helper-function-name": ^7.16.7 - "@babel/helper-member-expression-to-functions": ^7.16.7 - "@babel/helper-optimise-call-expression": ^7.16.7 - "@babel/helper-replace-supers": ^7.16.7 - "@babel/helper-split-export-declaration": ^7.16.7 - peerDependencies: - "@babel/core": ^7.0.0 - checksum: fb791071dcaa664640d7f1d041772c6b57a8a456720bf7cb21aa055845fad98c644cc7707f03aa94abe8720d19a7c69fd5984fe02fe57b7e99a69f77aa501fc8 - languageName: node - linkType: hard - "@babel/helper-create-class-features-plugin@npm:^7.16.7": version: 7.16.7 resolution: "@babel/helper-create-class-features-plugin@npm:7.16.7" @@ -563,20 +528,37 @@ __metadata: languageName: node linkType: hard -"@babel/helper-create-class-features-plugin@npm:^7.17.1": - version: 7.17.6 - resolution: "@babel/helper-create-class-features-plugin@npm:7.17.6" +"@babel/helper-create-class-features-plugin@npm:^7.17.12": + version: 7.18.9 + resolution: "@babel/helper-create-class-features-plugin@npm:7.18.9" + dependencies: + "@babel/helper-annotate-as-pure": ^7.18.6 + "@babel/helper-environment-visitor": ^7.18.9 + "@babel/helper-function-name": ^7.18.9 + "@babel/helper-member-expression-to-functions": ^7.18.9 + "@babel/helper-optimise-call-expression": ^7.18.6 + "@babel/helper-replace-supers": ^7.18.9 + "@babel/helper-split-export-declaration": ^7.18.6 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: 020dba79b92ee9a98520dad81dddb47d75b34b7b4392672cbefc59db6f5e89a96c5eb95bb1cc46b2fddf913ef63dfe6d17168f56b059af5c6965bb37b6ce1d82 + languageName: node + linkType: hard + +"@babel/helper-create-class-features-plugin@npm:^7.18.0": + version: 7.18.0 + resolution: "@babel/helper-create-class-features-plugin@npm:7.18.0" dependencies: "@babel/helper-annotate-as-pure": ^7.16.7 "@babel/helper-environment-visitor": ^7.16.7 - "@babel/helper-function-name": ^7.16.7 - "@babel/helper-member-expression-to-functions": ^7.16.7 + "@babel/helper-function-name": ^7.17.9 + "@babel/helper-member-expression-to-functions": ^7.17.7 "@babel/helper-optimise-call-expression": ^7.16.7 "@babel/helper-replace-supers": ^7.16.7 "@babel/helper-split-export-declaration": ^7.16.7 peerDependencies: "@babel/core": ^7.0.0 - checksum: d85a5b3f9a18a661372d77462e6ea2a6a03f1083f8b3055ed165284214af9ea6ad677f6bcc4b5ce215da27f95fa93064580d4b6723b578c480ecf17dd31a4307 + checksum: 9a6ef175350f1cf87abe7a738e8c9b603da7fcdb153c74e49af509183f8705278020baddb62a12c7f9ca059487fef97d75a4adea6a1446598ad9901d010e4296 languageName: node linkType: hard @@ -638,6 +620,18 @@ __metadata: languageName: node linkType: hard +"@babel/helper-create-regexp-features-plugin@npm:^7.17.12": + version: 7.17.12 + resolution: "@babel/helper-create-regexp-features-plugin@npm:7.17.12" + dependencies: + "@babel/helper-annotate-as-pure": ^7.16.7 + regexpu-core: ^5.0.1 + peerDependencies: + "@babel/core": ^7.0.0 + checksum: fe49d26b0f6c58d4c1748a4d0e98b343882b428e6db43c4ba5e0aa7ff2296b3a557f0a88de9f000599bb95640a6c47c0b0c9a952b58c11f61aabb06bcc304329 + languageName: node + linkType: hard + "@babel/helper-create-regexp-features-plugin@npm:^7.18.6": version: 7.18.6 resolution: "@babel/helper-create-regexp-features-plugin@npm:7.18.6" @@ -959,6 +953,15 @@ __metadata: languageName: node linkType: hard +"@babel/helper-member-expression-to-functions@npm:^7.17.7, @babel/helper-member-expression-to-functions@npm:^7.18.9": + version: 7.18.9 + resolution: "@babel/helper-member-expression-to-functions@npm:7.18.9" + dependencies: + "@babel/types": ^7.18.9 + checksum: fcf8184e3b55051c4286b2cbedf0eccc781d0f3c9b5cbaba582eca19bf0e8d87806cdb7efc8554fcb969ceaf2b187d5ea748d40022d06ec7739fbb18c1b19a7a + languageName: node + linkType: hard + "@babel/helper-member-expression-to-functions@npm:^7.18.6": version: 7.18.6 resolution: "@babel/helper-member-expression-to-functions@npm:7.18.6" @@ -968,15 +971,6 @@ __metadata: languageName: node linkType: hard -"@babel/helper-member-expression-to-functions@npm:^7.18.9": - version: 7.18.9 - resolution: "@babel/helper-member-expression-to-functions@npm:7.18.9" - dependencies: - "@babel/types": ^7.18.9 - checksum: fcf8184e3b55051c4286b2cbedf0eccc781d0f3c9b5cbaba582eca19bf0e8d87806cdb7efc8554fcb969ceaf2b187d5ea748d40022d06ec7739fbb18c1b19a7a - languageName: node - linkType: hard - "@babel/helper-module-imports@npm:^7.0.0, @babel/helper-module-imports@npm:^7.12.13, @babel/helper-module-imports@npm:^7.15.4": version: 7.15.4 resolution: "@babel/helper-module-imports@npm:7.15.4" @@ -1013,19 +1007,19 @@ __metadata: languageName: node linkType: hard -"@babel/helper-module-transforms@npm:^7.12.1": - version: 7.17.6 - resolution: "@babel/helper-module-transforms@npm:7.17.6" +"@babel/helper-module-transforms@npm:^7.12.1, @babel/helper-module-transforms@npm:^7.18.0": + version: 7.18.0 + resolution: "@babel/helper-module-transforms@npm:7.18.0" dependencies: "@babel/helper-environment-visitor": ^7.16.7 "@babel/helper-module-imports": ^7.16.7 - "@babel/helper-simple-access": ^7.16.7 + "@babel/helper-simple-access": ^7.17.7 "@babel/helper-split-export-declaration": ^7.16.7 "@babel/helper-validator-identifier": ^7.16.7 "@babel/template": ^7.16.7 - "@babel/traverse": ^7.17.3 - "@babel/types": ^7.17.0 - checksum: f3722754411ec2fb7975dac4bc1843c2fcd59a7ffbbc78be9d403e13b0e3b07661813cdb96b322bb9560841b3b73a63616633d78667b3c23ab8ce43b25232804 + "@babel/traverse": ^7.18.0 + "@babel/types": ^7.18.0 + checksum: 824c3967c08d75bb36adc18c31dcafebcd495b75b723e2e17c6185e88daf5c6db62a6a75d9f791b5f38618a349e7cb32503e715a1b9a4e8bad4d0f43e3e6b523 languageName: node linkType: hard @@ -1077,22 +1071,6 @@ __metadata: languageName: node linkType: hard -"@babel/helper-module-transforms@npm:^7.18.0": - version: 7.18.0 - resolution: "@babel/helper-module-transforms@npm:7.18.0" - dependencies: - "@babel/helper-environment-visitor": ^7.16.7 - "@babel/helper-module-imports": ^7.16.7 - "@babel/helper-simple-access": ^7.17.7 - "@babel/helper-split-export-declaration": ^7.16.7 - "@babel/helper-validator-identifier": ^7.16.7 - "@babel/template": ^7.16.7 - "@babel/traverse": ^7.18.0 - "@babel/types": ^7.18.0 - checksum: 824c3967c08d75bb36adc18c31dcafebcd495b75b723e2e17c6185e88daf5c6db62a6a75d9f791b5f38618a349e7cb32503e715a1b9a4e8bad4d0f43e3e6b523 - languageName: node - linkType: hard - "@babel/helper-module-transforms@npm:^7.18.6, @babel/helper-module-transforms@npm:^7.18.9": version: 7.18.9 resolution: "@babel/helper-module-transforms@npm:7.18.9" @@ -1173,6 +1151,13 @@ __metadata: languageName: node linkType: hard +"@babel/helper-plugin-utils@npm:^7.17.12, @babel/helper-plugin-utils@npm:^7.18.9": + version: 7.18.9 + resolution: "@babel/helper-plugin-utils@npm:7.18.9" + checksum: ebae876cd60f1fe238c7210986093845fa5c4cad5feeda843ea4d780bf068256717650376d3af2a5e760f2ed6a35c065ae144f99c47da3e54aa6cba99d8804e0 + languageName: node + linkType: hard + "@babel/helper-plugin-utils@npm:^7.18.6": version: 7.18.6 resolution: "@babel/helper-plugin-utils@npm:7.18.6" @@ -1180,13 +1165,6 @@ __metadata: languageName: node linkType: hard -"@babel/helper-plugin-utils@npm:^7.18.9": - version: 7.18.9 - resolution: "@babel/helper-plugin-utils@npm:7.18.9" - checksum: ebae876cd60f1fe238c7210986093845fa5c4cad5feeda843ea4d780bf068256717650376d3af2a5e760f2ed6a35c065ae144f99c47da3e54aa6cba99d8804e0 - languageName: node - linkType: hard - "@babel/helper-plugin-utils@npm:^7.19.0": version: 7.19.0 resolution: "@babel/helper-plugin-utils@npm:7.19.0" @@ -1244,6 +1222,19 @@ __metadata: languageName: node linkType: hard +"@babel/helper-replace-supers@npm:^7.18.2": + version: 7.18.2 + resolution: "@babel/helper-replace-supers@npm:7.18.2" + dependencies: + "@babel/helper-environment-visitor": ^7.18.2 + "@babel/helper-member-expression-to-functions": ^7.17.7 + "@babel/helper-optimise-call-expression": ^7.16.7 + "@babel/traverse": ^7.18.2 + "@babel/types": ^7.18.2 + checksum: c0083b7933672dd2aed50b79021c46401c83f41bc2132def19c5414cf8f944251f6d91dd959b2bedada9a7436a80fab629adb486e008566290c82293e89fec05 + languageName: node + linkType: hard + "@babel/helper-replace-supers@npm:^7.18.6": version: 7.18.6 resolution: "@babel/helper-replace-supers@npm:7.18.6" @@ -1306,6 +1297,15 @@ __metadata: languageName: node linkType: hard +"@babel/helper-simple-access@npm:^7.18.2": + version: 7.18.2 + resolution: "@babel/helper-simple-access@npm:7.18.2" + dependencies: + "@babel/types": ^7.18.2 + checksum: c0862b56db7e120754d89273a039b128c27517389f6a4425ff24e49779791e8fe10061579171fb986be81fa076778acb847c709f6f5e396278d9c5e01360c375 + languageName: node + linkType: hard + "@babel/helper-simple-access@npm:^7.18.6": version: 7.18.6 resolution: "@babel/helper-simple-access@npm:7.18.6" @@ -1397,6 +1397,13 @@ __metadata: languageName: node linkType: hard +"@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.14.5": version: 7.14.5 resolution: "@babel/helper-validator-option@npm:7.14.5" @@ -1442,14 +1449,14 @@ __metadata: languageName: node linkType: hard -"@babel/helpers@npm:^7.12.5, @babel/helpers@npm:^7.17.2": - version: 7.17.2 - resolution: "@babel/helpers@npm:7.17.2" +"@babel/helpers@npm:^7.12.5, @babel/helpers@npm:^7.18.2": + version: 7.18.2 + resolution: "@babel/helpers@npm:7.18.2" dependencies: "@babel/template": ^7.16.7 - "@babel/traverse": ^7.17.0 - "@babel/types": ^7.17.0 - checksum: 5fa06bbf59636314fb4098bb2e70cf488e0fb6989553438abab90356357b79976102ac129fb16fc8186893c79e0809de1d90e3304426d6fcdb1750da2b6dff9d + "@babel/traverse": ^7.18.2 + "@babel/types": ^7.18.2 + checksum: 94620242f23f6d5f9b83a02b1aa1632ffb05b0815e1bb53d3b46d64aa8e771066bba1db8bd267d9091fb00134cfaeda6a8d69d1d4cc2c89658631adfa077ae70 languageName: node linkType: hard @@ -1486,14 +1493,14 @@ __metadata: languageName: node linkType: hard -"@babel/helpers@npm:^7.18.2": - version: 7.18.2 - resolution: "@babel/helpers@npm:7.18.2" +"@babel/helpers@npm:^7.17.2": + version: 7.17.2 + resolution: "@babel/helpers@npm:7.17.2" dependencies: "@babel/template": ^7.16.7 "@babel/traverse": ^7.18.2 "@babel/types": ^7.18.2 - checksum: 94620242f23f6d5f9b83a02b1aa1632ffb05b0815e1bb53d3b46d64aa8e771066bba1db8bd267d9091fb00134cfaeda6a8d69d1d4cc2c89658631adfa077ae70 + checksum: 5fa06bbf59636314fb4098bb2e70cf488e0fb6989553438abab90356357b79976102ac129fb16fc8186893c79e0809de1d90e3304426d6fcdb1750da2b6dff9d languageName: node linkType: hard @@ -1581,12 +1588,12 @@ __metadata: languageName: node linkType: hard -"@babel/parser@npm:^7.12.11, @babel/parser@npm:^7.12.7": - version: 7.17.3 - resolution: "@babel/parser@npm:7.17.3" +"@babel/parser@npm:^7.12.11, @babel/parser@npm:^7.12.7, @babel/parser@npm:^7.18.0": + version: 7.18.4 + resolution: "@babel/parser@npm:7.18.4" bin: parser: ./bin/babel-parser.js - checksum: 311869baef97c7630ac3b3c4600da18229b95aa2785b2daab2044384745fe0653070916ade28749fb003f7369a081111ada53e37284ba48d6b5858cbb9e411d1 + checksum: e05b2dc720c4b200e088258f3c2a2de5041c140444edc38181d1217b10074e881a7133162c5b62356061f26279f08df5a06ec14c5842996ee8601ad03c57a44f languageName: node linkType: hard @@ -1635,15 +1642,6 @@ __metadata: languageName: node linkType: hard -"@babel/parser@npm:^7.18.0": - version: 7.18.4 - resolution: "@babel/parser@npm:7.18.4" - bin: - parser: ./bin/babel-parser.js - checksum: e05b2dc720c4b200e088258f3c2a2de5041c140444edc38181d1217b10074e881a7133162c5b62356061f26279f08df5a06ec14c5842996ee8601ad03c57a44f - languageName: node - linkType: hard - "@babel/parser@npm:^7.18.10, @babel/parser@npm:^7.19.0": version: 7.19.0 resolution: "@babel/parser@npm:7.19.0" @@ -1671,14 +1669,14 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:^7.16.7": - version: 7.16.7 - resolution: "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:7.16.7" +"@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:^7.17.12": + version: 7.17.12 + resolution: "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@npm:7.17.12" dependencies: - "@babel/helper-plugin-utils": ^7.16.7 + "@babel/helper-plugin-utils": ^7.17.12 peerDependencies: "@babel/core": ^7.0.0 - checksum: bbb0f82a4cf297bdbb9110eea570addd4b883fd1b61535558d849822b087aa340fe4e9c31f8a39b087595c8310b58d0f5548d6be0b72c410abefb23a5734b7bc + checksum: 6ef739b3a2b0ac0b22b60ff472c118163ceb8d414dd08c8186cc563fddc2be62ad4d8681e02074a1c7f0056a72e7146493a85d12ded02e50904b0009ed85d8bf languageName: node linkType: hard @@ -1693,16 +1691,16 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:^7.16.7": - version: 7.16.7 - resolution: "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:7.16.7" +"@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:^7.17.12": + version: 7.17.12 + resolution: "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@npm:7.17.12" dependencies: - "@babel/helper-plugin-utils": ^7.16.7 + "@babel/helper-plugin-utils": ^7.17.12 "@babel/helper-skip-transparent-expression-wrappers": ^7.16.0 - "@babel/plugin-proposal-optional-chaining": ^7.16.7 + "@babel/plugin-proposal-optional-chaining": ^7.17.12 peerDependencies: "@babel/core": ^7.13.0 - checksum: 81b372651a7d886a06596b02df7fb65ea90265a8bd60c9f0d5c1777590a598e6cccbdc3239033ee0719abf904813e69577eeb0ed5960b40e07978df023b17a6a + checksum: 68520a8f26e56bc8d90c22133537a9819e82598e3c82007f30bdaf8898b0e12a7bfa0cd3044aca35a7f362fd6bc04e4cd8052a571fc2eb40ad8f1cf24e0fc45f languageName: node linkType: hard @@ -1719,16 +1717,16 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-proposal-async-generator-functions@npm:^7.16.8": - version: 7.16.8 - resolution: "@babel/plugin-proposal-async-generator-functions@npm:7.16.8" +"@babel/plugin-proposal-async-generator-functions@npm:^7.17.12": + version: 7.17.12 + resolution: "@babel/plugin-proposal-async-generator-functions@npm:7.17.12" dependencies: - "@babel/helper-plugin-utils": ^7.16.7 + "@babel/helper-plugin-utils": ^7.17.12 "@babel/helper-remap-async-to-generator": ^7.16.8 "@babel/plugin-syntax-async-generators": ^7.8.4 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: abd2c2c67de262720d37c5509dafe2ce64d6cee2dc9a8e863bbba1796b77387214442f37618373c6a4521ca624bfc7dcdbeb1376300d16f2a474405ee0ca2e69 + checksum: 16a3c7f68a27031b4973b7c64ca009873c91b91afd7b3a4694ec7f1c6d8e91a6ee142eafd950113810fae122faa1031de71140333b2b1bd03d5367b1a05b1d91 languageName: node linkType: hard @@ -1772,7 +1770,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-proposal-class-properties@npm:^7.12.1, @babel/plugin-proposal-class-properties@npm:^7.16.7": +"@babel/plugin-proposal-class-properties@npm:^7.12.1": version: 7.16.7 resolution: "@babel/plugin-proposal-class-properties@npm:7.16.7" dependencies: @@ -1784,16 +1782,28 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-proposal-class-static-block@npm:^7.16.7": - version: 7.16.7 - resolution: "@babel/plugin-proposal-class-static-block@npm:7.16.7" +"@babel/plugin-proposal-class-properties@npm:^7.17.12": + version: 7.17.12 + resolution: "@babel/plugin-proposal-class-properties@npm:7.17.12" dependencies: - "@babel/helper-create-class-features-plugin": ^7.16.7 - "@babel/helper-plugin-utils": ^7.16.7 + "@babel/helper-create-class-features-plugin": ^7.17.12 + "@babel/helper-plugin-utils": ^7.17.12 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 884df6a4617a18cdc2a630096b2a10954bcc94757c893bb01abd6702fdc73343ca5c611f4884c4634e0608f5e86c3093ea6b973ce00bf21b248ba54de92c837d + languageName: node + linkType: hard + +"@babel/plugin-proposal-class-static-block@npm:^7.18.0": + version: 7.18.0 + resolution: "@babel/plugin-proposal-class-static-block@npm:7.18.0" + dependencies: + "@babel/helper-create-class-features-plugin": ^7.18.0 + "@babel/helper-plugin-utils": ^7.17.12 "@babel/plugin-syntax-class-static-block": ^7.14.5 peerDependencies: "@babel/core": ^7.12.0 - checksum: 3b95b5137e089f0be17de667299ea2e28867b6310ab94219a5a89ac7675824e69f316d31930586142b9f432122ef3b98eb05fffdffae01b5587019ce9aab4ef3 + checksum: 70fd622fd7c62cca2aa99c70532766340a5c30105e35cb3f1187b450580d43adc78b3fcb1142ed339bcfccf84be95ea03407adf467331b318ce6874432736c89 languageName: node linkType: hard @@ -1811,17 +1821,18 @@ __metadata: linkType: hard "@babel/plugin-proposal-decorators@npm:^7.12.12": - version: 7.17.2 - resolution: "@babel/plugin-proposal-decorators@npm:7.17.2" + version: 7.18.2 + resolution: "@babel/plugin-proposal-decorators@npm:7.18.2" dependencies: - "@babel/helper-create-class-features-plugin": ^7.17.1 - "@babel/helper-plugin-utils": ^7.16.7 - "@babel/helper-replace-supers": ^7.16.7 - "@babel/plugin-syntax-decorators": ^7.17.0 + "@babel/helper-create-class-features-plugin": ^7.18.0 + "@babel/helper-plugin-utils": ^7.17.12 + "@babel/helper-replace-supers": ^7.18.2 + "@babel/helper-split-export-declaration": ^7.16.7 + "@babel/plugin-syntax-decorators": ^7.17.12 charcodes: ^0.2.0 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: da5424d51e49912a1784a7074e8fb7b2d55b4a41c32bf05a829a81987274068e170f469de81d95d177def3480f7de3402a1808d599ad91f98fdaa44023a416da + checksum: cb40e31afe5c414d748d90943910ff7e8015f89f5845046bcdc8ae9b09882b183c550a6bc32969826680d9c41866d5f39097f1cd7b0a7c2101285ec4e38dbded languageName: node linkType: hard @@ -1850,26 +1861,26 @@ __metadata: linkType: hard "@babel/plugin-proposal-export-default-from@npm:^7.12.1": - version: 7.16.7 - resolution: "@babel/plugin-proposal-export-default-from@npm:7.16.7" + version: 7.17.12 + resolution: "@babel/plugin-proposal-export-default-from@npm:7.17.12" dependencies: - "@babel/helper-plugin-utils": ^7.16.7 + "@babel/helper-plugin-utils": ^7.17.12 "@babel/plugin-syntax-export-default-from": ^7.16.7 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: de6d2e4e8c77073ecbfe3cba8fb4db046a80d22a76817ad8e65c1861e3443956b82d931936388059dee2bb4b6c745f9cd16fa390d51a18ea7b56b2e8afdcc6d9 + checksum: fa98bcc188c6e508f70d5e7fa70d0c059dd8b5ac72ceed833d13c750ffbf2fe8ca78dd31335e7a95e6e4732fc78e5fb6de3d35375191f96f6b9363a65c41eea2 languageName: node linkType: hard -"@babel/plugin-proposal-export-namespace-from@npm:^7.16.7": - version: 7.16.7 - resolution: "@babel/plugin-proposal-export-namespace-from@npm:7.16.7" +"@babel/plugin-proposal-export-namespace-from@npm:^7.17.12": + version: 7.17.12 + resolution: "@babel/plugin-proposal-export-namespace-from@npm:7.17.12" dependencies: - "@babel/helper-plugin-utils": ^7.16.7 + "@babel/helper-plugin-utils": ^7.17.12 "@babel/plugin-syntax-export-namespace-from": ^7.8.3 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 5016079a5305c1c130fea587b42cdce501574739cfefa5b63469dbc1f32d436df0ff42fabf04089fe8b6a00f4ea7563869e944744b457e186c677995983cb166 + checksum: 41c9cd4c0a5629b65725d2554867c15b199f534cea5538bd1ae379c0d13e7206d8590e23b23cb05a8b243e33e6eb88c1de3fd03a55cdbc6d4cf8634a6bebe43d languageName: node linkType: hard @@ -1885,15 +1896,15 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-proposal-json-strings@npm:^7.16.7": - version: 7.16.7 - resolution: "@babel/plugin-proposal-json-strings@npm:7.16.7" +"@babel/plugin-proposal-json-strings@npm:^7.17.12": + version: 7.17.12 + resolution: "@babel/plugin-proposal-json-strings@npm:7.17.12" dependencies: - "@babel/helper-plugin-utils": ^7.16.7 + "@babel/helper-plugin-utils": ^7.17.12 "@babel/plugin-syntax-json-strings": ^7.8.3 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: ea6487918f8d88322ac2a4e5273be6163b0d84a34330c31cee346e23525299de3b4f753bc987951300a79f55b8f4b1971b24d04c0cdfcb7ceb4d636975c215e8 + checksum: 8ed4ee3fbc28e44fac17c48bd95b5b8c3ffc852053a9fffd36ab498ec0b0ba069b8b2f5658edc18332748948433b9d3e1e376f564a1d65cb54592ba9943be09b languageName: node linkType: hard @@ -1909,15 +1920,15 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-proposal-logical-assignment-operators@npm:^7.16.7": - version: 7.16.7 - resolution: "@babel/plugin-proposal-logical-assignment-operators@npm:7.16.7" +"@babel/plugin-proposal-logical-assignment-operators@npm:^7.17.12": + version: 7.17.12 + resolution: "@babel/plugin-proposal-logical-assignment-operators@npm:7.17.12" dependencies: - "@babel/helper-plugin-utils": ^7.16.7 + "@babel/helper-plugin-utils": ^7.17.12 "@babel/plugin-syntax-logical-assignment-operators": ^7.10.4 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: c4cf18e10f900d40eaa471c4adce4805e67bd845f997a4b9d5653eced4e653187b9950843b2bf7eab6c0c3e753aba222b1d38888e3e14e013f87295c5b014f19 + checksum: 0d48451836219b7beeca4be22a8aeb4a177a4944be4727afb94a4a11f201dde8b0b186dd2ad65b537d61e9af3fa1afda734f7096bec8602debd76d07aa342e21 languageName: node linkType: hard @@ -1945,7 +1956,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-proposal-nullish-coalescing-operator@npm:^7.12.1, @babel/plugin-proposal-nullish-coalescing-operator@npm:^7.16.7": +"@babel/plugin-proposal-nullish-coalescing-operator@npm:^7.12.1": version: 7.16.7 resolution: "@babel/plugin-proposal-nullish-coalescing-operator@npm:7.16.7" dependencies: @@ -1957,6 +1968,18 @@ __metadata: languageName: node linkType: hard +"@babel/plugin-proposal-nullish-coalescing-operator@npm:^7.17.12": + version: 7.17.12 + resolution: "@babel/plugin-proposal-nullish-coalescing-operator@npm:7.17.12" + dependencies: + "@babel/helper-plugin-utils": ^7.17.12 + "@babel/plugin-syntax-nullish-coalescing-operator": ^7.8.3 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: 7881d8005d0d4e17a94f3bfbfa4a0d8af016d2f62ed90912fabb8c5f8f0cc0a15fd412f09c230984c40b5c893086987d403c73198ef388ffcb3726ff72efc009 + languageName: node + linkType: hard + "@babel/plugin-proposal-numeric-separator@npm:^7.16.7": version: 7.16.7 resolution: "@babel/plugin-proposal-numeric-separator@npm:7.16.7" @@ -2009,33 +2032,18 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-proposal-object-rest-spread@npm:^7.12.1": - version: 7.17.3 - resolution: "@babel/plugin-proposal-object-rest-spread@npm:7.17.3" +"@babel/plugin-proposal-object-rest-spread@npm:^7.12.1, @babel/plugin-proposal-object-rest-spread@npm:^7.18.0": + version: 7.18.0 + resolution: "@babel/plugin-proposal-object-rest-spread@npm:7.18.0" dependencies: - "@babel/compat-data": ^7.17.0 - "@babel/helper-compilation-targets": ^7.16.7 - "@babel/helper-plugin-utils": ^7.16.7 + "@babel/compat-data": ^7.17.10 + "@babel/helper-compilation-targets": ^7.17.10 + "@babel/helper-plugin-utils": ^7.17.12 "@babel/plugin-syntax-object-rest-spread": ^7.8.3 - "@babel/plugin-transform-parameters": ^7.16.7 + "@babel/plugin-transform-parameters": ^7.17.12 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 02810f158db4aaf6883131621b5d2c7d901ea3c034df2c2b78663f8b26813795d78a346c37e56770a720c54773732fd1d7fe40947dbf11d1d8de0e9a38e856d3 - languageName: node - linkType: hard - -"@babel/plugin-proposal-object-rest-spread@npm:^7.16.7": - version: 7.16.7 - resolution: "@babel/plugin-proposal-object-rest-spread@npm:7.16.7" - dependencies: - "@babel/compat-data": ^7.16.4 - "@babel/helper-compilation-targets": ^7.16.7 - "@babel/helper-plugin-utils": ^7.16.7 - "@babel/plugin-syntax-object-rest-spread": ^7.8.3 - "@babel/plugin-transform-parameters": ^7.16.7 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: 2d3740e4df6d3f51d57862100c45c000104571aa98b7f798fdfc05ae0c12b9e7cc9b55f4a28612d626e29f3369a1481a0ee8a0241b23508b9d3da00c55f99d41 + checksum: 2b49bcf9a6b11fd8b6a1d4962a64f3c846a63f8340eca9824c907f75bfcff7422ca35b135607fc3ef2d4e7e77ce6b6d955b772dc3c1c39f7ed24a0d8a560ec78 languageName: node linkType: hard @@ -2076,7 +2084,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-proposal-optional-chaining@npm:^7.12.7, @babel/plugin-proposal-optional-chaining@npm:^7.16.7": +"@babel/plugin-proposal-optional-chaining@npm:^7.12.7": version: 7.16.7 resolution: "@babel/plugin-proposal-optional-chaining@npm:7.16.7" dependencies: @@ -2089,15 +2097,28 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-proposal-private-methods@npm:^7.12.1, @babel/plugin-proposal-private-methods@npm:^7.16.11": - version: 7.16.11 - resolution: "@babel/plugin-proposal-private-methods@npm:7.16.11" +"@babel/plugin-proposal-optional-chaining@npm:^7.17.12": + version: 7.17.12 + resolution: "@babel/plugin-proposal-optional-chaining@npm:7.17.12" dependencies: - "@babel/helper-create-class-features-plugin": ^7.16.10 - "@babel/helper-plugin-utils": ^7.16.7 + "@babel/helper-plugin-utils": ^7.17.12 + "@babel/helper-skip-transparent-expression-wrappers": ^7.16.0 + "@babel/plugin-syntax-optional-chaining": ^7.8.3 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: b333e5aa91c265bb394a57b5f4ae1a34fc8ee73a8d75506b12df258d8b5342107cbd9261f95e606bd3264a5b023db77f1f95be30c2e526683916c57f793f7943 + checksum: a27b220573441a0ad3eecf8ddcb249556a64de45add236791d76cfa164a8fd34181857528fa7d21d03d6b004e7c043bd929cce068e611ee1ac72aaf4d397aa12 + languageName: node + linkType: hard + +"@babel/plugin-proposal-private-methods@npm:^7.12.1, @babel/plugin-proposal-private-methods@npm:^7.17.12": + version: 7.17.12 + resolution: "@babel/plugin-proposal-private-methods@npm:7.17.12" + dependencies: + "@babel/helper-create-class-features-plugin": ^7.17.12 + "@babel/helper-plugin-utils": ^7.17.12 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: a1e5bd6a0a541af55d133d7bcf51ff8eb4ac7417a30f518c2f38107d7d033a3d5b7128ea5b3a910b458d7ceb296179b6ff9d972be60d1c686113d25fede8bed3 languageName: node linkType: hard @@ -2113,17 +2134,17 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-proposal-private-property-in-object@npm:^7.16.7": - version: 7.16.7 - resolution: "@babel/plugin-proposal-private-property-in-object@npm:7.16.7" +"@babel/plugin-proposal-private-property-in-object@npm:^7.12.1, @babel/plugin-proposal-private-property-in-object@npm:^7.17.12": + version: 7.17.12 + resolution: "@babel/plugin-proposal-private-property-in-object@npm:7.17.12" dependencies: "@babel/helper-annotate-as-pure": ^7.16.7 - "@babel/helper-create-class-features-plugin": ^7.16.7 - "@babel/helper-plugin-utils": ^7.16.7 + "@babel/helper-create-class-features-plugin": ^7.17.12 + "@babel/helper-plugin-utils": ^7.17.12 "@babel/plugin-syntax-private-property-in-object": ^7.14.5 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 666d668f51d8c01aaf0dd87b27a83fc0392884d2c8e9d8e17b3b7011c0d348865dee94b44dc2d7070726e58e3b579728dc2588aaa8140d563f7390743ee90f0a + checksum: 056cb77994b2ee367301cdf8c5b7ed71faf26d60859bbba1368b342977481b0884712a1b97fbd9b091750162923d0265bf901119d46002775aa66e4a9f30f411 languageName: node linkType: hard @@ -2141,15 +2162,15 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-proposal-unicode-property-regex@npm:^7.16.7": - version: 7.16.7 - resolution: "@babel/plugin-proposal-unicode-property-regex@npm:7.16.7" +"@babel/plugin-proposal-unicode-property-regex@npm:^7.17.12": + version: 7.17.12 + resolution: "@babel/plugin-proposal-unicode-property-regex@npm:7.17.12" dependencies: - "@babel/helper-create-regexp-features-plugin": ^7.16.7 - "@babel/helper-plugin-utils": ^7.16.7 + "@babel/helper-create-regexp-features-plugin": ^7.17.12 + "@babel/helper-plugin-utils": ^7.17.12 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 2b8a33713d456183f0b7d011011e7bd932c08cc06216399a7b2015ab39284b511993dc10a89bbb15d1d728e6a2ef42ca08c3202619aa148cbd48052422ea3995 + checksum: 0e4194510415ed11849f1617fcb32d996df746ba93cd05ebbabecb63cfc02c0e97b585c97da3dcf68acdd3c8b71cfae964abe5d5baba6bd3977a475d9225ad9e languageName: node linkType: hard @@ -2221,14 +2242,14 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-decorators@npm:^7.17.0": - version: 7.17.0 - resolution: "@babel/plugin-syntax-decorators@npm:7.17.0" +"@babel/plugin-syntax-decorators@npm:^7.17.12": + version: 7.17.12 + resolution: "@babel/plugin-syntax-decorators@npm:7.17.12" dependencies: - "@babel/helper-plugin-utils": ^7.16.7 + "@babel/helper-plugin-utils": ^7.17.12 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 745a3553c8ad4d2ea4805eaf50634cf0cb3036f1259fbfa1cd3cb04d685cec68b6f2f0b3ca1856091730e5aca630975283f9f910d87694141e81754fbc074a7a + checksum: cdbb7f92e43a85291845e38910aa1bed0c3e489ae2da187b2e9604d1f2769f72b712a5a8b5e45223c7f5856927557bc314e86f7f1832a47405fdf5e492baa164 languageName: node linkType: hard @@ -2265,14 +2286,25 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-flow@npm:^7.16.7": - version: 7.16.7 - resolution: "@babel/plugin-syntax-flow@npm:7.16.7" +"@babel/plugin-syntax-flow@npm:^7.17.12": + version: 7.17.12 + resolution: "@babel/plugin-syntax-flow@npm:7.17.12" dependencies: - "@babel/helper-plugin-utils": ^7.16.7 + "@babel/helper-plugin-utils": ^7.17.12 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: b1ab0bd9b78e4aa5fb48714d6514f3d08d72693807c6044a5be4f301a9bb677b5648fbdae11c8bc93923da6b320a1898560c307933021bdb75ee39e577ed74ee + checksum: f92f18c9414478a3f408866c8a3d3f6b83f5369c8b76880245ba05d7ab9166d47c7d4ab1e0ac8b7a69d1d1b448bea836d1b340f823b1e548fec62a563cc9d0ec + languageName: node + linkType: hard + +"@babel/plugin-syntax-import-assertions@npm:^7.17.12": + version: 7.17.12 + resolution: "@babel/plugin-syntax-import-assertions@npm:7.17.12" + dependencies: + "@babel/helper-plugin-utils": ^7.17.12 + peerDependencies: + "@babel/core": ^7.0.0-0 + checksum: fef25c3247d18dc7b8e432ed07f4afb92d70113fcfc3db0ca52388f8083b4bd60f88fe9ec0085e8a5a6daf18a619042376e76e2b4bd9470cddb7362cd268bea5 languageName: node linkType: hard @@ -2353,7 +2385,7 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-syntax-jsx@npm:^7.18.6": +"@babel/plugin-syntax-jsx@npm:^7.17.12, @babel/plugin-syntax-jsx@npm:^7.18.6": version: 7.18.6 resolution: "@babel/plugin-syntax-jsx@npm:7.18.6" dependencies: @@ -2485,14 +2517,14 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-arrow-functions@npm:^7.12.1, @babel/plugin-transform-arrow-functions@npm:^7.16.7": - version: 7.16.7 - resolution: "@babel/plugin-transform-arrow-functions@npm:7.16.7" +"@babel/plugin-transform-arrow-functions@npm:^7.12.1, @babel/plugin-transform-arrow-functions@npm:^7.17.12": + version: 7.17.12 + resolution: "@babel/plugin-transform-arrow-functions@npm:7.17.12" dependencies: - "@babel/helper-plugin-utils": ^7.16.7 + "@babel/helper-plugin-utils": ^7.17.12 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 2a6aa982c6fc80f4de7ccd973507ce5464fab129987cb6661136a7b9b6a020c2b329b912cbc46a68d39b5a18451ba833dcc8d1ca8d615597fec98624ac2add54 + checksum: 48f99e74f523641696d5d9fb3f5f02497eca2e97bc0e9b8230a47f388e37dc5fd84b8b29e9f5a0c82d63403f7ba5f085a28e26939678f6e917d5c01afd884b50 languageName: node linkType: hard @@ -2507,16 +2539,16 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-async-to-generator@npm:^7.16.8": - version: 7.16.8 - resolution: "@babel/plugin-transform-async-to-generator@npm:7.16.8" +"@babel/plugin-transform-async-to-generator@npm:^7.17.12": + version: 7.17.12 + resolution: "@babel/plugin-transform-async-to-generator@npm:7.17.12" dependencies: "@babel/helper-module-imports": ^7.16.7 - "@babel/helper-plugin-utils": ^7.16.7 + "@babel/helper-plugin-utils": ^7.17.12 "@babel/helper-remap-async-to-generator": ^7.16.8 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 3a2e781800e3dea1f526324ed259d1f9064c5ea3c9909c0c22b445d4c648ad489c579f358ae20ada11f7725ba67e0ddeb1e0241efadc734771e87dabd4c6820a + checksum: 052dd56eb3b10bc31f5aaced0f75fc7307713f74049ccfb91cd087bebfc890a6d462b59445c5299faaca9030814172cac290c941c76b731a38dcb267377c9187 languageName: node linkType: hard @@ -2555,14 +2587,14 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-block-scoping@npm:^7.12.12, @babel/plugin-transform-block-scoping@npm:^7.16.7": - version: 7.16.7 - resolution: "@babel/plugin-transform-block-scoping@npm:7.16.7" +"@babel/plugin-transform-block-scoping@npm:^7.12.12, @babel/plugin-transform-block-scoping@npm:^7.17.12": + version: 7.18.4 + resolution: "@babel/plugin-transform-block-scoping@npm:7.18.4" dependencies: - "@babel/helper-plugin-utils": ^7.16.7 + "@babel/helper-plugin-utils": ^7.17.12 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: f93b5441af573fc274655f1707aeb4f67a43e926b58f56d89cc35a27877ae0bf198648603cbc19f442579489138f93c3838905895f109aa356996dbc3ed97a68 + checksum: 5fdc8fd2f56f43e275353123fa1cda3df475daf1e9d92c03d5aa1ae50d3a0ccabf80c6168356947d8eb8e6e29098c875bc27fda8c7d4fbca6ffc6eec5d5faa8d languageName: node linkType: hard @@ -2577,21 +2609,21 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-classes@npm:^7.12.1, @babel/plugin-transform-classes@npm:^7.16.7": - version: 7.16.7 - resolution: "@babel/plugin-transform-classes@npm:7.16.7" +"@babel/plugin-transform-classes@npm:^7.12.1, @babel/plugin-transform-classes@npm:^7.17.12": + version: 7.18.4 + resolution: "@babel/plugin-transform-classes@npm:7.18.4" dependencies: "@babel/helper-annotate-as-pure": ^7.16.7 - "@babel/helper-environment-visitor": ^7.16.7 - "@babel/helper-function-name": ^7.16.7 + "@babel/helper-environment-visitor": ^7.18.2 + "@babel/helper-function-name": ^7.17.9 "@babel/helper-optimise-call-expression": ^7.16.7 - "@babel/helper-plugin-utils": ^7.16.7 - "@babel/helper-replace-supers": ^7.16.7 + "@babel/helper-plugin-utils": ^7.17.12 + "@babel/helper-replace-supers": ^7.18.2 "@babel/helper-split-export-declaration": ^7.16.7 globals: ^11.1.0 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 791526a1bf3c4659b94d619536e3181d3ad54887d50539066628c6e695789a3bb264dc1fbc8540169d62a222f623df54defb490c1811ae63bad1e3557d6b3bb0 + checksum: 968711024c2ed1c08ced754243edde3a663ab40c414ca6fcad1a75f27789f3f52cc78fbafe21c6337c4c6a0dfbeddd1527caff1558ed477790b600a1e6f99cda languageName: node linkType: hard @@ -2632,14 +2664,14 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-computed-properties@npm:^7.16.7": - version: 7.16.7 - resolution: "@babel/plugin-transform-computed-properties@npm:7.16.7" +"@babel/plugin-transform-computed-properties@npm:^7.17.12": + version: 7.17.12 + resolution: "@babel/plugin-transform-computed-properties@npm:7.17.12" dependencies: - "@babel/helper-plugin-utils": ^7.16.7 + "@babel/helper-plugin-utils": ^7.17.12 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 28b17f7cfe643f45920b76dc040cab40d4e54eccf5074fba2658c484feacda9b4885b3854ffaf26292189783fdecc97211519c61831b6708fcbf739cfbcbf31c + checksum: 5d05418617e0967bec4818556b7febb6f8c40813e32035f0bd6b7dbd7b9d63e9ab7c7c8fd7bd05bab2a599dad58e7b69957d9559b41079d112c219bbc3649aa1 languageName: node linkType: hard @@ -2654,25 +2686,14 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-destructuring@npm:^7.12.1": - version: 7.17.3 - resolution: "@babel/plugin-transform-destructuring@npm:7.17.3" +"@babel/plugin-transform-destructuring@npm:^7.12.1, @babel/plugin-transform-destructuring@npm:^7.18.0": + version: 7.18.0 + resolution: "@babel/plugin-transform-destructuring@npm:7.18.0" dependencies: - "@babel/helper-plugin-utils": ^7.16.7 + "@babel/helper-plugin-utils": ^7.17.12 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: af58115da1b5f1b7aa9c07af8fee53c1db05d2d68be3ba67aae162242d22e5ccd1bcd0fb149fced4618b31c0c6b4f99d32b472567c5f0807586b7fe5216ba7f0 - languageName: node - linkType: hard - -"@babel/plugin-transform-destructuring@npm:^7.16.7": - version: 7.16.7 - resolution: "@babel/plugin-transform-destructuring@npm:7.16.7" - dependencies: - "@babel/helper-plugin-utils": ^7.16.7 - peerDependencies: - "@babel/core": ^7.0.0-0 - checksum: d1c2e15e7be2a7c57ac8ec4df06fbb706c7ecc872ab7bc2193606e6d6a01929b6d5a1bb41540e41180e42a5ce0e70dce22e7896cb6578dd581d554f77780971b + checksum: d85d60737c3b05c4db71bc94270e952122d360bd6ebf91b5f98cf16fb8564558b615d115354fe0ef41e2aae9c4540e6e16144284d881ecaef687693736cd2a79 languageName: node linkType: hard @@ -2734,14 +2755,14 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-duplicate-keys@npm:^7.16.7": - version: 7.16.7 - resolution: "@babel/plugin-transform-duplicate-keys@npm:7.16.7" +"@babel/plugin-transform-duplicate-keys@npm:^7.17.12": + version: 7.17.12 + resolution: "@babel/plugin-transform-duplicate-keys@npm:7.17.12" dependencies: - "@babel/helper-plugin-utils": ^7.16.7 + "@babel/helper-plugin-utils": ^7.17.12 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: b96f6e9f7b33a91ad0eb6b793e4da58b7a0108b58269109f391d57078d26e043b3872c95429b491894ae6400e72e44d9b744c9b112b8433c99e6969b767e30ed + checksum: fb6ad550538830b0dc5b1b547734359f2d782209570e9d61fe9b84a6929af570fcc38ab579a67ee7cd6a832147db91a527f4cceb1248974f006fe815980816bb languageName: node linkType: hard @@ -2780,26 +2801,26 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-flow-strip-types@npm:^7.16.7": - version: 7.16.7 - resolution: "@babel/plugin-transform-flow-strip-types@npm:7.16.7" +"@babel/plugin-transform-flow-strip-types@npm:^7.17.12": + version: 7.17.12 + resolution: "@babel/plugin-transform-flow-strip-types@npm:7.17.12" dependencies: - "@babel/helper-plugin-utils": ^7.16.7 - "@babel/plugin-syntax-flow": ^7.16.7 + "@babel/helper-plugin-utils": ^7.17.12 + "@babel/plugin-syntax-flow": ^7.17.12 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 4b4801c91d805d95957781e537f88e9f34c7f8a4c262c4d230af2ab7a920889c542860e505149a856d4c16916ffb02df4f3af161733adeedb7671555d1510bba + checksum: c37d3cc00aaec2036d1046f5376820f5c6098df493bd9a4d9013c47e0f5ef9c213eb4567ba1ce466269d9771f5cdc76613309c310b696a0489a20e593c8967e2 languageName: node linkType: hard -"@babel/plugin-transform-for-of@npm:^7.12.1, @babel/plugin-transform-for-of@npm:^7.16.7": - version: 7.16.7 - resolution: "@babel/plugin-transform-for-of@npm:7.16.7" +"@babel/plugin-transform-for-of@npm:^7.12.1, @babel/plugin-transform-for-of@npm:^7.18.1": + version: 7.18.1 + resolution: "@babel/plugin-transform-for-of@npm:7.18.1" dependencies: - "@babel/helper-plugin-utils": ^7.16.7 + "@babel/helper-plugin-utils": ^7.17.12 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 35c9264ee4bef814818123d70afe8b2f0a85753a0a9dc7b73f93a71cadc5d7de852f1a3e300a7c69a491705805704611de1e2ccceb5686f7828d6bca2e5a7306 + checksum: cdc6e1f1170218cc6ac5b26b4b8f011ec5c36666101e00e0061aaa5772969b093bad5b2af8ce908c184126d5bb0c26b89dd4debb96b2375aba2e20e427a623a8 languageName: node linkType: hard @@ -2840,14 +2861,14 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-literals@npm:^7.16.7": - version: 7.16.7 - resolution: "@babel/plugin-transform-literals@npm:7.16.7" +"@babel/plugin-transform-literals@npm:^7.17.12": + version: 7.17.12 + resolution: "@babel/plugin-transform-literals@npm:7.17.12" dependencies: - "@babel/helper-plugin-utils": ^7.16.7 + "@babel/helper-plugin-utils": ^7.17.12 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: a9565d999fc7a72a391ef843cf66028c38ca858537c7014d9ea8ea587a59e5f952d9754bdcca6ca0446e84653e297d417d4faedccb9e4221af1aa30f25d918e0 + checksum: 09280fc1ed23b81deafd4fcd7a35d6c0944668de2317f14c1b8b78c5c201f71a063bb8d174d2fc97d86df480ff23104c8919d3aacf19f33c2b5ada584203bf1c languageName: node linkType: hard @@ -2884,16 +2905,16 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-modules-amd@npm:^7.16.7": - version: 7.16.7 - resolution: "@babel/plugin-transform-modules-amd@npm:7.16.7" +"@babel/plugin-transform-modules-amd@npm:^7.18.0": + version: 7.18.0 + resolution: "@babel/plugin-transform-modules-amd@npm:7.18.0" dependencies: - "@babel/helper-module-transforms": ^7.16.7 - "@babel/helper-plugin-utils": ^7.16.7 + "@babel/helper-module-transforms": ^7.18.0 + "@babel/helper-plugin-utils": ^7.17.12 babel-plugin-dynamic-import-node: ^2.3.3 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 9ac251ee96183b10cf9b4ec8f9e8d52e14ec186a56103f6c07d0c69e99faa60391f6bac67da733412975e487bd36adb403e2fc99bae6b785bf1413e9d928bc71 + checksum: bed3ff5cd81f236981360fc4a6fd2262685c1202772c657ce3ab95b7930437f8fa22361021b481c977b6f47988dfcc07c7782a1c91b90d3a5552c91401f4631a languageName: node linkType: hard @@ -2910,17 +2931,17 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-modules-commonjs@npm:^7.16.8": - version: 7.16.8 - resolution: "@babel/plugin-transform-modules-commonjs@npm:7.16.8" +"@babel/plugin-transform-modules-commonjs@npm:^7.18.2": + version: 7.18.2 + resolution: "@babel/plugin-transform-modules-commonjs@npm:7.18.2" dependencies: - "@babel/helper-module-transforms": ^7.16.7 - "@babel/helper-plugin-utils": ^7.16.7 - "@babel/helper-simple-access": ^7.16.7 + "@babel/helper-module-transforms": ^7.18.0 + "@babel/helper-plugin-utils": ^7.17.12 + "@babel/helper-simple-access": ^7.18.2 babel-plugin-dynamic-import-node: ^2.3.3 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: c0ac00f5457e12cac7825b14725b6fc787bef78945181469ff79f07ef0fd7df021cb00fe1d3a9f35fc9bc92ae59e6e3fc9075a70b627dfe10e00d0907892aace + checksum: 99c1c5ce9c353e29eb680ebb5bdf27c076c6403e133a066999298de642423cc7f38cfbac02372d33ed73278da13be23c4be7d60169c3e27bd900a373e61a599a languageName: node linkType: hard @@ -2938,18 +2959,18 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-modules-systemjs@npm:^7.16.7": - version: 7.16.7 - resolution: "@babel/plugin-transform-modules-systemjs@npm:7.16.7" +"@babel/plugin-transform-modules-systemjs@npm:^7.18.0": + version: 7.18.4 + resolution: "@babel/plugin-transform-modules-systemjs@npm:7.18.4" dependencies: "@babel/helper-hoist-variables": ^7.16.7 - "@babel/helper-module-transforms": ^7.16.7 - "@babel/helper-plugin-utils": ^7.16.7 + "@babel/helper-module-transforms": ^7.18.0 + "@babel/helper-plugin-utils": ^7.17.12 "@babel/helper-validator-identifier": ^7.16.7 babel-plugin-dynamic-import-node: ^2.3.3 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 2e50ae45a725eeafac5a9d30e07a5e17ab8dcf62c3528cf4efe444fc6f12cd3c4e42e911a9aa37abab169687a98b29a4418eeafcf2031f9917162ac36105cb1b + checksum: abe6948a1548b20055bf1c56ceab5b17dc283e7cdbcc0525b297b726f0785f1169333b5e685add81337fc749588adb8d96ccba9269565031db006a710e7eaf02 languageName: node linkType: hard @@ -2983,15 +3004,15 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-modules-umd@npm:^7.16.7": - version: 7.16.7 - resolution: "@babel/plugin-transform-modules-umd@npm:7.16.7" +"@babel/plugin-transform-modules-umd@npm:^7.18.0": + version: 7.18.0 + resolution: "@babel/plugin-transform-modules-umd@npm:7.18.0" dependencies: - "@babel/helper-module-transforms": ^7.16.7 - "@babel/helper-plugin-utils": ^7.16.7 + "@babel/helper-module-transforms": ^7.18.0 + "@babel/helper-plugin-utils": ^7.17.12 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: d1433f8b0e0b3c9f892aa530f08fe3ba653a5e51fe1ed6034ac7d45d4d6f22c3ba99186b72e41ad9ce5d8dcf964104c3da2419f15fcdcf5ba05c5fda3ea2cefc + checksum: 4081a79cfd4c6fda785c2137f9f2721e35c06a9d2f23c304172838d12e9317a24d3cb5b652a9db61e58319b370c57b1b44991429efe709679f98e114d98597fb languageName: node linkType: hard @@ -3007,14 +3028,15 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-named-capturing-groups-regex@npm:^7.16.8": - version: 7.16.8 - resolution: "@babel/plugin-transform-named-capturing-groups-regex@npm:7.16.8" +"@babel/plugin-transform-named-capturing-groups-regex@npm:^7.17.12": + version: 7.17.12 + resolution: "@babel/plugin-transform-named-capturing-groups-regex@npm:7.17.12" dependencies: - "@babel/helper-create-regexp-features-plugin": ^7.16.7 + "@babel/helper-create-regexp-features-plugin": ^7.17.12 + "@babel/helper-plugin-utils": ^7.17.12 peerDependencies: "@babel/core": ^7.0.0 - checksum: 73e149f5ff690f5b8e3764a881e8e5240f12f394256e7d5217705d0cbeae074c3faff394783190fe1a41f9fc5a53b960b6021158b7e5174391b5fc38f4ba047a + checksum: cff9d91d0abd87871da6574583e79093ed75d5faecea45b6a13350ba243b1a595d349a6e7d906f5dfdf6c69c643cba9df662c3d01eaa187c5b1a01cb5838e848 languageName: node linkType: hard @@ -3042,14 +3064,14 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-new-target@npm:^7.16.7": - version: 7.16.7 - resolution: "@babel/plugin-transform-new-target@npm:7.16.7" +"@babel/plugin-transform-new-target@npm:^7.17.12": + version: 7.17.12 + resolution: "@babel/plugin-transform-new-target@npm:7.17.12" dependencies: - "@babel/helper-plugin-utils": ^7.16.7 + "@babel/helper-plugin-utils": ^7.17.12 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 7410c3e68abc835f87a98d40269e65fb1a05c131decbb6721a80ed49a01bd0c53abb6b8f7f52d5055815509022790e1accca32e975c02f2231ac3cf13d8af768 + checksum: bec26350fa49c9a9431d23b4ff234f8eb60554b8cdffca432a94038406aae5701014f343568c0e0cc8afae6f95d492f6bae0d0e2c101c1a484fb20eec75b2c07 languageName: node linkType: hard @@ -3088,14 +3110,14 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-parameters@npm:^7.12.1, @babel/plugin-transform-parameters@npm:^7.16.7": - version: 7.16.7 - resolution: "@babel/plugin-transform-parameters@npm:7.16.7" +"@babel/plugin-transform-parameters@npm:^7.12.1, @babel/plugin-transform-parameters@npm:^7.17.12": + version: 7.17.12 + resolution: "@babel/plugin-transform-parameters@npm:7.17.12" dependencies: - "@babel/helper-plugin-utils": ^7.16.7 + "@babel/helper-plugin-utils": ^7.17.12 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 4d6904376db82d0b35f0a6cce08f630daf8608d94e903d6c7aff5bd742b251651bd1f88cdf9f16cad98aba5fc7c61da8635199364865fad6367d5ae37cf56cc1 + checksum: d9ed5ec61dc460835bade8fa710b42ec9f207bd448ead7e8abd46b87db0afedbb3f51284700fd2a6892fdf6544ec9b949c505c6542c5ba0a41ca4e8749af00f0 languageName: node linkType: hard @@ -3188,17 +3210,17 @@ __metadata: linkType: hard "@babel/plugin-transform-react-jsx@npm:^7.12.12": - version: 7.17.3 - resolution: "@babel/plugin-transform-react-jsx@npm:7.17.3" + version: 7.17.12 + resolution: "@babel/plugin-transform-react-jsx@npm:7.17.12" dependencies: "@babel/helper-annotate-as-pure": ^7.16.7 "@babel/helper-module-imports": ^7.16.7 - "@babel/helper-plugin-utils": ^7.16.7 - "@babel/plugin-syntax-jsx": ^7.16.7 - "@babel/types": ^7.17.0 + "@babel/helper-plugin-utils": ^7.17.12 + "@babel/plugin-syntax-jsx": ^7.17.12 + "@babel/types": ^7.17.12 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 7e33a3fb78a3b7352b56f48211160ae60dc3654bae314ea0352bfc179d10eaac789792ccb3701172388ec4e4dbdb94952cdf3386980f3af402d99ceadd91149b + checksum: 02e9974d14821173bb8e84db4bdfccd546bfdbf445d91d6345f953591f16306cf5741861d72e0d0910f3ffa7d4084fafed99cedf736e7ba8bed0cf64320c2ea6 languageName: node linkType: hard @@ -3256,14 +3278,15 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-regenerator@npm:^7.16.7": - version: 7.16.7 - resolution: "@babel/plugin-transform-regenerator@npm:7.16.7" +"@babel/plugin-transform-regenerator@npm:^7.18.0": + version: 7.18.0 + resolution: "@babel/plugin-transform-regenerator@npm:7.18.0" dependencies: - regenerator-transform: ^0.14.2 + "@babel/helper-plugin-utils": ^7.17.12 + regenerator-transform: ^0.15.0 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 12b1f9a4f324027af69f49522fbe7feea2ac53285ca5c7e27a70de09f56c74938bfda8b09ac06e57fa1207e441f00efb7adbc462afc9be5e8abd0c2a07715e01 + checksum: ebacf2bbe9e2fb6f2bd7996e19b41bfc9848628950ae06a1a832802a0b8e32a32003c6b89318da6ca521f79045c91324dcb4c97247ed56f86fa58d7401a7316f languageName: node linkType: hard @@ -3279,14 +3302,14 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-reserved-words@npm:^7.16.7": - version: 7.16.7 - resolution: "@babel/plugin-transform-reserved-words@npm:7.16.7" +"@babel/plugin-transform-reserved-words@npm:^7.17.12": + version: 7.17.12 + resolution: "@babel/plugin-transform-reserved-words@npm:7.17.12" dependencies: - "@babel/helper-plugin-utils": ^7.16.7 + "@babel/helper-plugin-utils": ^7.17.12 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 00218a646e99a97c1f10b77c41c178ca1b91d0e6cf18dd4ca3c59b8a5ad721db04ef508f49be4cd0dcca7742490dbb145307b706a2dbea1917d5e5f7ba2f31b7 + checksum: d8a617cb79ca5852ac2736a9f81c15a3b0760919720c3b9069a864e2288006ebcaab557dbb36a3eba936defd6699f82e3bf894915925aa9185f5d9bcbf3b29fd languageName: node linkType: hard @@ -3355,15 +3378,15 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-spread@npm:^7.12.1, @babel/plugin-transform-spread@npm:^7.16.7": - version: 7.16.7 - resolution: "@babel/plugin-transform-spread@npm:7.16.7" +"@babel/plugin-transform-spread@npm:^7.12.1, @babel/plugin-transform-spread@npm:^7.17.12": + version: 7.17.12 + resolution: "@babel/plugin-transform-spread@npm:7.17.12" dependencies: - "@babel/helper-plugin-utils": ^7.16.7 + "@babel/helper-plugin-utils": ^7.17.12 "@babel/helper-skip-transparent-expression-wrappers": ^7.16.0 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 6e961af1a70586bb72dd85e8296cee857c5dadd73225fccd0fe261c0d98652a82d69c65f3e9dc31ce019a12e9677262678479b96bd2d9140ddf6514618362828 + checksum: 3a95e4f163d598c0efc9d983e5ce3e8716998dd2af62af8102b11cb8d6383c71b74c7106adbce73cda6e48d3d3e927627847d36d76c2eb688cd0e2e07f67fb51 languageName: node linkType: hard @@ -3413,14 +3436,14 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-template-literals@npm:^7.12.1, @babel/plugin-transform-template-literals@npm:^7.16.7": - version: 7.16.7 - resolution: "@babel/plugin-transform-template-literals@npm:7.16.7" +"@babel/plugin-transform-template-literals@npm:^7.12.1, @babel/plugin-transform-template-literals@npm:^7.18.2": + version: 7.18.2 + resolution: "@babel/plugin-transform-template-literals@npm:7.18.2" dependencies: - "@babel/helper-plugin-utils": ^7.16.7 + "@babel/helper-plugin-utils": ^7.17.12 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: b55a519dd8b957247ebad3cab21918af5adca4f6e6c87819501cfe3d4d4bccda25bc296c7dfc8a30909b4ad905902aeb9d55ad955cb9f5cbc74b42dab32baa18 + checksum: bc0102ed8c789e5bc01053088e2de85b82cebcd4d57af9fdc32ca62f559d3dd19c33e9d26caa71c5fd8e94152e5ce4fc4da19badc2d537620e6dea83bce7eb05 languageName: node linkType: hard @@ -3435,14 +3458,14 @@ __metadata: languageName: node linkType: hard -"@babel/plugin-transform-typeof-symbol@npm:^7.16.7": - version: 7.16.7 - resolution: "@babel/plugin-transform-typeof-symbol@npm:7.16.7" +"@babel/plugin-transform-typeof-symbol@npm:^7.17.12": + version: 7.17.12 + resolution: "@babel/plugin-transform-typeof-symbol@npm:7.17.12" dependencies: - "@babel/helper-plugin-utils": ^7.16.7 + "@babel/helper-plugin-utils": ^7.17.12 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 739a8c439dacbd9af62cfbfa0a7cbc3f220849e5fc774e5ef708a09186689a724c41a1d11323e7d36588d24f5481c8b702c86ff7be8da2e2fed69bed0175f625 + checksum: e30bd03c8abc1b095f8b2a10289df6850e3bc3cd0aea1cbc29050aa3b421cbb77d0428b0cd012333632a7a930dc8301cd888e762b2dd601e7dc5dac50f4140c9 languageName: node linkType: hard @@ -3734,35 +3757,36 @@ __metadata: linkType: hard "@babel/preset-env@npm:^7.12.11": - version: 7.16.11 - resolution: "@babel/preset-env@npm:7.16.11" + version: 7.18.2 + resolution: "@babel/preset-env@npm:7.18.2" dependencies: - "@babel/compat-data": ^7.16.8 - "@babel/helper-compilation-targets": ^7.16.7 - "@babel/helper-plugin-utils": ^7.16.7 + "@babel/compat-data": ^7.17.10 + "@babel/helper-compilation-targets": ^7.18.2 + "@babel/helper-plugin-utils": ^7.17.12 "@babel/helper-validator-option": ^7.16.7 - "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": ^7.16.7 - "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": ^7.16.7 - "@babel/plugin-proposal-async-generator-functions": ^7.16.8 - "@babel/plugin-proposal-class-properties": ^7.16.7 - "@babel/plugin-proposal-class-static-block": ^7.16.7 + "@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression": ^7.17.12 + "@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining": ^7.17.12 + "@babel/plugin-proposal-async-generator-functions": ^7.17.12 + "@babel/plugin-proposal-class-properties": ^7.17.12 + "@babel/plugin-proposal-class-static-block": ^7.18.0 "@babel/plugin-proposal-dynamic-import": ^7.16.7 - "@babel/plugin-proposal-export-namespace-from": ^7.16.7 - "@babel/plugin-proposal-json-strings": ^7.16.7 - "@babel/plugin-proposal-logical-assignment-operators": ^7.16.7 - "@babel/plugin-proposal-nullish-coalescing-operator": ^7.16.7 + "@babel/plugin-proposal-export-namespace-from": ^7.17.12 + "@babel/plugin-proposal-json-strings": ^7.17.12 + "@babel/plugin-proposal-logical-assignment-operators": ^7.17.12 + "@babel/plugin-proposal-nullish-coalescing-operator": ^7.17.12 "@babel/plugin-proposal-numeric-separator": ^7.16.7 - "@babel/plugin-proposal-object-rest-spread": ^7.16.7 + "@babel/plugin-proposal-object-rest-spread": ^7.18.0 "@babel/plugin-proposal-optional-catch-binding": ^7.16.7 - "@babel/plugin-proposal-optional-chaining": ^7.16.7 - "@babel/plugin-proposal-private-methods": ^7.16.11 - "@babel/plugin-proposal-private-property-in-object": ^7.16.7 - "@babel/plugin-proposal-unicode-property-regex": ^7.16.7 + "@babel/plugin-proposal-optional-chaining": ^7.17.12 + "@babel/plugin-proposal-private-methods": ^7.17.12 + "@babel/plugin-proposal-private-property-in-object": ^7.17.12 + "@babel/plugin-proposal-unicode-property-regex": ^7.17.12 "@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.17.12 "@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 @@ -3772,61 +3796,61 @@ __metadata: "@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.16.7 - "@babel/plugin-transform-async-to-generator": ^7.16.8 + "@babel/plugin-transform-arrow-functions": ^7.17.12 + "@babel/plugin-transform-async-to-generator": ^7.17.12 "@babel/plugin-transform-block-scoped-functions": ^7.16.7 - "@babel/plugin-transform-block-scoping": ^7.16.7 - "@babel/plugin-transform-classes": ^7.16.7 - "@babel/plugin-transform-computed-properties": ^7.16.7 - "@babel/plugin-transform-destructuring": ^7.16.7 + "@babel/plugin-transform-block-scoping": ^7.17.12 + "@babel/plugin-transform-classes": ^7.17.12 + "@babel/plugin-transform-computed-properties": ^7.17.12 + "@babel/plugin-transform-destructuring": ^7.18.0 "@babel/plugin-transform-dotall-regex": ^7.16.7 - "@babel/plugin-transform-duplicate-keys": ^7.16.7 + "@babel/plugin-transform-duplicate-keys": ^7.17.12 "@babel/plugin-transform-exponentiation-operator": ^7.16.7 - "@babel/plugin-transform-for-of": ^7.16.7 + "@babel/plugin-transform-for-of": ^7.18.1 "@babel/plugin-transform-function-name": ^7.16.7 - "@babel/plugin-transform-literals": ^7.16.7 + "@babel/plugin-transform-literals": ^7.17.12 "@babel/plugin-transform-member-expression-literals": ^7.16.7 - "@babel/plugin-transform-modules-amd": ^7.16.7 - "@babel/plugin-transform-modules-commonjs": ^7.16.8 - "@babel/plugin-transform-modules-systemjs": ^7.16.7 - "@babel/plugin-transform-modules-umd": ^7.16.7 - "@babel/plugin-transform-named-capturing-groups-regex": ^7.16.8 - "@babel/plugin-transform-new-target": ^7.16.7 + "@babel/plugin-transform-modules-amd": ^7.18.0 + "@babel/plugin-transform-modules-commonjs": ^7.18.2 + "@babel/plugin-transform-modules-systemjs": ^7.18.0 + "@babel/plugin-transform-modules-umd": ^7.18.0 + "@babel/plugin-transform-named-capturing-groups-regex": ^7.17.12 + "@babel/plugin-transform-new-target": ^7.17.12 "@babel/plugin-transform-object-super": ^7.16.7 - "@babel/plugin-transform-parameters": ^7.16.7 + "@babel/plugin-transform-parameters": ^7.17.12 "@babel/plugin-transform-property-literals": ^7.16.7 - "@babel/plugin-transform-regenerator": ^7.16.7 - "@babel/plugin-transform-reserved-words": ^7.16.7 + "@babel/plugin-transform-regenerator": ^7.18.0 + "@babel/plugin-transform-reserved-words": ^7.17.12 "@babel/plugin-transform-shorthand-properties": ^7.16.7 - "@babel/plugin-transform-spread": ^7.16.7 + "@babel/plugin-transform-spread": ^7.17.12 "@babel/plugin-transform-sticky-regex": ^7.16.7 - "@babel/plugin-transform-template-literals": ^7.16.7 - "@babel/plugin-transform-typeof-symbol": ^7.16.7 + "@babel/plugin-transform-template-literals": ^7.18.2 + "@babel/plugin-transform-typeof-symbol": ^7.17.12 "@babel/plugin-transform-unicode-escapes": ^7.16.7 "@babel/plugin-transform-unicode-regex": ^7.16.7 "@babel/preset-modules": ^0.1.5 - "@babel/types": ^7.16.8 + "@babel/types": ^7.18.2 babel-plugin-polyfill-corejs2: ^0.3.0 babel-plugin-polyfill-corejs3: ^0.5.0 babel-plugin-polyfill-regenerator: ^0.3.0 - core-js-compat: ^3.20.2 + core-js-compat: ^3.22.1 semver: ^6.3.0 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: c8029c272073df787309d983ae458dd094b57f87152b8ccad95c7c8b1e82b042c1077e169538aae5f98b7659de0632d10708d9c85acf21a5e9406d7dd3656d8c + checksum: f81892a7970cb34643b93917cbbc9b581d5066d892639867521f4a85ec258e69362a37bbb7b899b351e71d26095a97cd2d6e35e5f9ee110715146e0ccc19e700 languageName: node linkType: hard "@babel/preset-flow@npm:^7.12.1": - version: 7.16.7 - resolution: "@babel/preset-flow@npm:7.16.7" + version: 7.17.12 + resolution: "@babel/preset-flow@npm:7.17.12" dependencies: - "@babel/helper-plugin-utils": ^7.16.7 + "@babel/helper-plugin-utils": ^7.17.12 "@babel/helper-validator-option": ^7.16.7 - "@babel/plugin-transform-flow-strip-types": ^7.16.7 + "@babel/plugin-transform-flow-strip-types": ^7.17.12 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: b73c743a6bdfb51fe907adbc425a82469145ea15f32b43096804e28ba30921c4ac3199f86e11d1cefbce95c3a5404aaf3534152f5a12358c57303c05dfc51b4f + checksum: 21b123c21133eb0998f7b847176da392d49e894671c96785c2471d34845bb50cf4d376e1b4ea3edeafb8b258cc884cd3bed5882fe7ba8d7b0522f3829dea39c5 languageName: node linkType: hard @@ -3904,8 +3928,8 @@ __metadata: linkType: hard "@babel/register@npm:^7.12.1": - version: 7.17.0 - resolution: "@babel/register@npm:7.17.0" + version: 7.17.7 + resolution: "@babel/register@npm:7.17.7" dependencies: clone-deep: ^4.0.1 find-cache-dir: ^2.0.0 @@ -3914,7 +3938,7 @@ __metadata: source-map-support: ^0.5.16 peerDependencies: "@babel/core": ^7.0.0-0 - checksum: 1d8e888c104022c2924803fc9e217c99f8a9b87dc5bf8ea1ddd9921765102c8267d2bd92d4f42aaa1b5ca3713ea400580b29702bb89829a59d63baf0321eb284 + checksum: b4b352a29487e9a45f3694e3f7cacc24668add2c3f9a45a5c8768a39cf495b1b49b7c95f0ebc6e415db4ac66317d20de15b3de96ca40f76d192137c4ad4cc7ce languageName: node linkType: hard @@ -3928,7 +3952,7 @@ __metadata: languageName: node linkType: hard -"@babel/runtime@npm:7.19.0, @babel/runtime@npm:^7.18.9": +"@babel/runtime@npm:7.19.0, @babel/runtime@npm:^7.10.2, @babel/runtime@npm:^7.18.9": version: 7.19.0 resolution: "@babel/runtime@npm:7.19.0" dependencies: @@ -3946,16 +3970,7 @@ __metadata: languageName: node linkType: hard -"@babel/runtime@npm:^7.10.2, @babel/runtime@npm:^7.14.8, @babel/runtime@npm:^7.16.7, @babel/runtime@npm:^7.3.1, @babel/runtime@npm:^7.4.4, @babel/runtime@npm:^7.5.0, @babel/runtime@npm:^7.7.6": - version: 7.17.2 - resolution: "@babel/runtime@npm:7.17.2" - dependencies: - regenerator-runtime: ^0.13.4 - checksum: a48702d271ecc59c09c397856407afa29ff980ab537b3da58eeee1aeaa0f545402d340a1680c9af58aec94dfdcbccfb6abb211991b74686a86d03d3f6956cacd - languageName: node - linkType: hard - -"@babel/runtime@npm:^7.14.0, @babel/runtime@npm:^7.18.3": +"@babel/runtime@npm:^7.14.0, @babel/runtime@npm:^7.17.8, @babel/runtime@npm:^7.18.3, @babel/runtime@npm:^7.3.1, @babel/runtime@npm:^7.4.4, @babel/runtime@npm:^7.5.0, @babel/runtime@npm:^7.7.6": version: 7.18.3 resolution: "@babel/runtime@npm:7.18.3" dependencies: @@ -4019,21 +4034,21 @@ __metadata: languageName: node linkType: hard -"@babel/traverse@npm:^7.1.6, @babel/traverse@npm:^7.12.11, @babel/traverse@npm:^7.12.9, @babel/traverse@npm:^7.17.0, @babel/traverse@npm:^7.17.3": - version: 7.17.3 - resolution: "@babel/traverse@npm:7.17.3" +"@babel/traverse@npm:^7.1.6, @babel/traverse@npm:^7.12.11, @babel/traverse@npm:^7.12.9, @babel/traverse@npm:^7.18.0, @babel/traverse@npm:^7.18.2": + version: 7.18.2 + resolution: "@babel/traverse@npm:7.18.2" dependencies: "@babel/code-frame": ^7.16.7 - "@babel/generator": ^7.17.3 - "@babel/helper-environment-visitor": ^7.16.7 - "@babel/helper-function-name": ^7.16.7 + "@babel/generator": ^7.18.2 + "@babel/helper-environment-visitor": ^7.18.2 + "@babel/helper-function-name": ^7.17.9 "@babel/helper-hoist-variables": ^7.16.7 "@babel/helper-split-export-declaration": ^7.16.7 - "@babel/parser": ^7.17.3 - "@babel/types": ^7.17.0 + "@babel/parser": ^7.18.0 + "@babel/types": ^7.18.2 debug: ^4.1.0 globals: ^11.1.0 - checksum: 780d7ecf711758174989794891af08d378f81febdb8932056c0d9979524bf0298e28f8e7708a872d7781151506c28f56c85c63ea3f1f654662c2fcb8a3eb9fdc + checksum: e21c2d550bf610406cf21ef6fbec525cb1d80b9d6d71af67552478a24ee371203cb4025b23b110ae7288a62a874ad5898daad19ad23daa95dfc8ab47a47a092f languageName: node linkType: hard @@ -4125,21 +4140,21 @@ __metadata: languageName: node linkType: hard -"@babel/traverse@npm:^7.18.0, @babel/traverse@npm:^7.18.2": - version: 7.18.2 - resolution: "@babel/traverse@npm:7.18.2" +"@babel/traverse@npm:^7.17.3": + version: 7.17.3 + resolution: "@babel/traverse@npm:7.17.3" dependencies: "@babel/code-frame": ^7.16.7 - "@babel/generator": ^7.18.2 - "@babel/helper-environment-visitor": ^7.18.2 - "@babel/helper-function-name": ^7.17.9 + "@babel/generator": ^7.17.3 + "@babel/helper-environment-visitor": ^7.16.7 + "@babel/helper-function-name": ^7.16.7 "@babel/helper-hoist-variables": ^7.16.7 "@babel/helper-split-export-declaration": ^7.16.7 - "@babel/parser": ^7.18.0 - "@babel/types": ^7.18.2 + "@babel/parser": ^7.17.3 + "@babel/types": ^7.17.0 debug: ^4.1.0 globals: ^11.1.0 - checksum: e21c2d550bf610406cf21ef6fbec525cb1d80b9d6d71af67552478a24ee371203cb4025b23b110ae7288a62a874ad5898daad19ad23daa95dfc8ab47a47a092f + checksum: 780d7ecf711758174989794891af08d378f81febdb8932056c0d9979524bf0298e28f8e7708a872d7781151506c28f56c85c63ea3f1f654662c2fcb8a3eb9fdc languageName: node linkType: hard @@ -4217,13 +4232,24 @@ __metadata: languageName: node linkType: hard -"@babel/types@npm:^7.12.11, @babel/types@npm:^7.12.7, @babel/types@npm:^7.16.8, @babel/types@npm:^7.17.0": - version: 7.17.0 - resolution: "@babel/types@npm:7.17.0" +"@babel/types@npm:^7.12.11, @babel/types@npm:^7.12.7, @babel/types@npm:^7.18.0, @babel/types@npm:^7.18.2": + version: 7.18.4 + resolution: "@babel/types@npm:7.18.4" dependencies: "@babel/helper-validator-identifier": ^7.16.7 to-fast-properties: ^2.0.0 - checksum: 12e5a287986fe557188e87b2c5202223f1dc83d9239a196ab936fdb9f8c1eb0be717ff19f934b5fad4e29a75586d5798f74bed209bccea1c20376b9952056f0e + checksum: 85df59beb99c1b95e9e41590442f2ffa1e5b1b558d025489db40c9f7c906bd03a17da26c3ec486e5800e80af27c42ca7eee9506d9212ab17766d2d68d30fbf52 + languageName: node + linkType: hard + +"@babel/types@npm:^7.14.8": + version: 7.19.3 + resolution: "@babel/types@npm:7.19.3" + dependencies: + "@babel/helper-string-parser": ^7.18.10 + "@babel/helper-validator-identifier": ^7.19.1 + to-fast-properties: ^2.0.0 + checksum: 34a5b3db3b99a1a80ec2a784c2bb0e48769a38f1526dc377a5753a3ac5e5704663c405a393117ecc7a9df9da07b01625be7c4c3fee43ae46aba23b0c40928d77 languageName: node linkType: hard @@ -4237,13 +4263,23 @@ __metadata: languageName: node linkType: hard -"@babel/types@npm:^7.18.0, @babel/types@npm:^7.18.2": - version: 7.18.4 - resolution: "@babel/types@npm:7.18.4" +"@babel/types@npm:^7.16.8, @babel/types@npm:^7.17.0": + version: 7.17.0 + resolution: "@babel/types@npm:7.17.0" dependencies: "@babel/helper-validator-identifier": ^7.16.7 to-fast-properties: ^2.0.0 - checksum: 85df59beb99c1b95e9e41590442f2ffa1e5b1b558d025489db40c9f7c906bd03a17da26c3ec486e5800e80af27c42ca7eee9506d9212ab17766d2d68d30fbf52 + checksum: 12e5a287986fe557188e87b2c5202223f1dc83d9239a196ab936fdb9f8c1eb0be717ff19f934b5fad4e29a75586d5798f74bed209bccea1c20376b9952056f0e + languageName: node + linkType: hard + +"@babel/types@npm:^7.17.12": + version: 7.17.12 + resolution: "@babel/types@npm:7.17.12" + dependencies: + "@babel/helper-validator-identifier": ^7.16.7 + to-fast-properties: ^2.0.0 + checksum: 5e522081587a0073a577fd05010ab917dbd2acea7aa06027ec42f90894ed1f8df2f03b9bb0713638153839b56a7be8dcf4b8ab2e55796c730a30ca9f0df1ba5c languageName: node linkType: hard @@ -4447,6 +4483,13 @@ __metadata: languageName: node linkType: hard +"@colors/colors@npm:1.5.0": + version: 1.5.0 + resolution: "@colors/colors@npm:1.5.0" + checksum: d64d5260bed1d5012ae3fc617d38d1afc0329fec05342f4e6b838f46998855ba56e0a73833f4a80fa8378c84810da254f76a8a19c39d038260dc06dc4e007425 + languageName: node + linkType: hard + "@cspotcode/source-map-support@npm:^0.8.0": version: 0.8.1 resolution: "@cspotcode/source-map-support@npm:0.8.1" @@ -4656,9 +4699,9 @@ __metadata: linkType: hard "@discoveryjs/json-ext@npm:^0.5.3": - version: 0.5.6 - resolution: "@discoveryjs/json-ext@npm:0.5.6" - checksum: e97df618511fb202dffa2eb0d23e17dfb02943a70e5bc38f6b9603ad1cb1d6b525aa2b07ff9fb00b041abe425b341146ddd9e487f1e35ddadc8c6b8c56358ae0 + version: 0.5.7 + resolution: "@discoveryjs/json-ext@npm:0.5.7" + checksum: 2176d301cc258ea5c2324402997cf8134ebb212469c0d397591636cea8d3c02f2b3cf9fd58dcb748c7a0dade77ebdc1b10284fa63e608c033a1db52fddc69918 languageName: node linkType: hard @@ -4758,7 +4801,7 @@ __metadata: languageName: node linkType: hard -"@emotion/core@npm:^10.0.9, @emotion/core@npm:^10.1.1": +"@emotion/core@npm:^10.0.9": version: 10.3.1 resolution: "@emotion/core@npm:10.3.1" dependencies: @@ -4819,15 +4862,6 @@ __metadata: languageName: node linkType: hard -"@emotion/is-prop-valid@npm:0.8.8, @emotion/is-prop-valid@npm:^0.8.6": - version: 0.8.8 - resolution: "@emotion/is-prop-valid@npm:0.8.8" - dependencies: - "@emotion/memoize": 0.7.4 - checksum: bb7ec6d48c572c540e24e47cc94fc2f8dec2d6a342ae97bc9c8b6388d9b8d283862672172a1bb62d335c02662afe6291e10c71e9b8642664a8b43416cdceffac - languageName: node - linkType: hard - "@emotion/memoize@npm:0.7.4": version: 0.7.4 resolution: "@emotion/memoize@npm:0.7.4" @@ -4968,34 +5002,6 @@ __metadata: languageName: node linkType: hard -"@emotion/styled-base@npm:^10.3.0": - version: 10.3.0 - resolution: "@emotion/styled-base@npm:10.3.0" - dependencies: - "@babel/runtime": ^7.5.5 - "@emotion/is-prop-valid": 0.8.8 - "@emotion/serialize": ^0.11.15 - "@emotion/utils": 0.11.3 - peerDependencies: - "@emotion/core": ^10.0.28 - react: ">=16.3.0" - checksum: ac0bb8f39e92fda12686afe5d398f7215cc7276d66195d5937f58ee7dae516e58017594cc74deed72859043623db824fdaf8213d29276316749ebff2ef7a5e4d - languageName: node - linkType: hard - -"@emotion/styled@npm:^10.0.27": - version: 10.3.0 - resolution: "@emotion/styled@npm:10.3.0" - dependencies: - "@emotion/styled-base": ^10.3.0 - babel-plugin-emotion: ^10.0.27 - peerDependencies: - "@emotion/core": ^10.0.27 - react: ">=16.3.0" - checksum: 9d9609c008c009d8b9249fdbb2017a404b1fc6c9118c84ec9a916e86670d4c61f03fee24297ad10b460dab628ff8260066338617ee99ede3ae7969ce5995e9bc - languageName: node - linkType: hard - "@emotion/stylis@npm:0.8.5": version: 0.8.5 resolution: "@emotion/stylis@npm:0.8.5" @@ -5074,6 +5080,20 @@ __metadata: languageName: node linkType: hard +"@esbuild/android-arm@npm:0.15.10": + version: 0.15.10 + resolution: "@esbuild/android-arm@npm:0.15.10" + conditions: os=android & cpu=arm + languageName: node + linkType: hard + +"@esbuild/linux-loong64@npm:0.15.10": + version: 0.15.10 + resolution: "@esbuild/linux-loong64@npm:0.15.10" + conditions: os=linux & cpu=loong64 + languageName: node + linkType: hard + "@esbuild/linux-loong64@npm:0.15.7": version: 0.15.7 resolution: "@esbuild/linux-loong64@npm:0.15.7" @@ -5590,21 +5610,23 @@ __metadata: "@react-stately/menu": 3.4.1 "@rollup/plugin-node-resolve": 13.3.0 "@sentry/browser": 6.19.7 - "@storybook/addon-a11y": 6.4.21 - "@storybook/addon-actions": 6.4.21 - "@storybook/addon-docs": 6.4.21 - "@storybook/addon-essentials": 6.4.21 + "@storybook/addon-a11y": 6.5.12 + "@storybook/addon-actions": 6.5.12 + "@storybook/addon-docs": 6.5.12 + "@storybook/addon-essentials": 6.5.12 "@storybook/addon-knobs": 6.4.0 - "@storybook/addon-storysource": 6.4.21 - "@storybook/addons": 6.4.21 - "@storybook/api": 6.4.21 - "@storybook/builder-webpack5": 6.4.21 - "@storybook/client-api": 6.4.21 - "@storybook/components": 6.4.21 - "@storybook/core-events": 6.4.21 - "@storybook/manager-webpack5": 6.4.21 - "@storybook/react": 6.4.21 - "@storybook/theming": 6.4.21 + "@storybook/addon-storysource": 6.5.12 + "@storybook/addons": 6.5.12 + "@storybook/api": 6.5.12 + "@storybook/builder-webpack5": 6.5.12 + "@storybook/client-api": 6.5.12 + "@storybook/components": 6.5.12 + "@storybook/core-events": 6.5.12 + "@storybook/manager-webpack5": 6.5.12 + "@storybook/mdx2-csf": 0.0.3 + "@storybook/preset-scss": 1.0.3 + "@storybook/react": 6.5.12 + "@storybook/theming": 6.5.12 "@swc/helpers": 0.4.3 "@testing-library/dom": 8.13.0 "@testing-library/jest-dom": 5.16.4 @@ -5644,13 +5666,11 @@ __metadata: "@types/uuid": 8.3.4 "@wojtekmaj/enzyme-adapter-react-17": 0.6.7 ansicolor: 1.1.100 - babel-loader: 8.2.5 calculate-size: 1.1.1 classnames: 2.3.1 common-tags: 1.8.2 core-js: 3.25.1 css-loader: 6.7.1 - css-minimizer-webpack-plugin: 4.1.0 csstype: 3.1.0 d3: 5.15.0 date-fns: 2.29.1 @@ -5667,11 +5687,8 @@ __metadata: moment: 2.29.4 monaco-editor: 0.34.0 ol: 6.15.1 - postcss: 8.4.14 - postcss-loader: 7.0.1 prismjs: 1.29.0 process: ^0.11.10 - raw-loader: 4.0.2 rc-cascader: 3.7.0 rc-drawer: 4.4.3 rc-slider: 9.7.5 @@ -5708,17 +5725,15 @@ __metadata: slate: 0.47.9 slate-plain-serializer: 0.7.11 slate-react: 0.22.10 - storybook-dark-mode: 1.1.0 + storybook-addon-turbo-build: 1.1.0 + storybook-dark-mode: 1.1.2 style-loader: 3.3.1 - terser-webpack-plugin: 5.3.3 tinycolor2: 1.4.2 - ts-loader: 8.4.0 tslib: 2.4.0 typescript: 4.8.2 uplot: 1.6.22 uuid: 8.3.2 webpack: 5.74.0 - webpack-filter-warnings-plugin: 1.2.1 peerDependencies: react: ^16.8.0 || ^17.0.0 react-dom: ^16.8.0 || ^17.0.0 @@ -5848,7 +5863,7 @@ __metadata: languageName: node linkType: hard -"@istanbuljs/schema@npm:^0.1.2": +"@istanbuljs/schema@npm:^0.1.2, @istanbuljs/schema@npm:^0.1.3": version: 0.1.3 resolution: "@istanbuljs/schema@npm:0.1.3" checksum: 5282759d961d61350f33d9118d16bcaed914ebf8061a52f4fa474b2cb08720c9c81d165e13b82f2e5a8a212cc5af482f0c6fc1ac27b9e067e5394c9a6ed186c9 @@ -7578,18 +7593,7 @@ __metadata: languageName: node linkType: hard -"@mdx-js/loader@npm:^1.6.22": - version: 1.6.22 - resolution: "@mdx-js/loader@npm:1.6.22" - dependencies: - "@mdx-js/mdx": 1.6.22 - "@mdx-js/react": 1.6.22 - loader-utils: 2.0.0 - checksum: 5ce4b92824555c6dd06c12ee7b9fc036e41499a5026218597316236d62253b6ff6417a416445a71f685716b57bbfc45593f156373252d1f53510b9ef9666334a - languageName: node - linkType: hard - -"@mdx-js/mdx@npm:1.6.22, @mdx-js/mdx@npm:^1.6.22": +"@mdx-js/mdx@npm:^1.6.22": version: 1.6.22 resolution: "@mdx-js/mdx@npm:1.6.22" dependencies: @@ -7616,6 +7620,31 @@ __metadata: languageName: node linkType: hard +"@mdx-js/mdx@npm:^2.0.0": + version: 2.1.3 + resolution: "@mdx-js/mdx@npm:2.1.3" + dependencies: + "@types/estree-jsx": ^1.0.0 + "@types/mdx": ^2.0.0 + estree-util-build-jsx: ^2.0.0 + estree-util-is-identifier-name: ^2.0.0 + estree-util-to-js: ^1.1.0 + estree-walker: ^3.0.0 + hast-util-to-estree: ^2.0.0 + markdown-extensions: ^1.0.0 + periscopic: ^3.0.0 + remark-mdx: ^2.0.0 + remark-parse: ^10.0.0 + remark-rehype: ^10.0.0 + unified: ^10.0.0 + unist-util-position-from-estree: ^1.0.0 + unist-util-stringify-position: ^3.0.0 + unist-util-visit: ^4.0.0 + vfile: ^5.0.0 + checksum: e13628758c47416beb38589036e9b3b96a647394afa9a93ce6f7b17b6f0bca07b8da6499ae3b9d2792b52e556e70ac099cb869119ecd0c024f284be3a1981c63 + languageName: node + linkType: hard + "@mdx-js/react@npm:1.6.22, @mdx-js/react@npm:^1.6.22": version: 1.6.22 resolution: "@mdx-js/react@npm:1.6.22" @@ -8362,7 +8391,7 @@ __metadata: languageName: node linkType: hard -"@pmmmwh/react-refresh-webpack-plugin@npm:0.5.7": +"@pmmmwh/react-refresh-webpack-plugin@npm:0.5.7, @pmmmwh/react-refresh-webpack-plugin@npm:^0.5.3": version: 0.5.7 resolution: "@pmmmwh/react-refresh-webpack-plugin@npm:0.5.7" dependencies: @@ -8401,45 +8430,6 @@ __metadata: languageName: node linkType: hard -"@pmmmwh/react-refresh-webpack-plugin@npm:^0.5.1": - version: 0.5.4 - resolution: "@pmmmwh/react-refresh-webpack-plugin@npm:0.5.4" - dependencies: - ansi-html-community: ^0.0.8 - common-path-prefix: ^3.0.0 - core-js-pure: ^3.8.1 - error-stack-parser: ^2.0.6 - find-up: ^5.0.0 - html-entities: ^2.1.0 - loader-utils: ^2.0.0 - schema-utils: ^3.0.0 - source-map: ^0.7.3 - peerDependencies: - "@types/webpack": 4.x || 5.x - react-refresh: ">=0.10.0 <1.0.0" - sockjs-client: ^1.4.0 - type-fest: ">=0.17.0 <3.0.0" - webpack: ">=4.43.0 <6.0.0" - webpack-dev-server: 3.x || 4.x - webpack-hot-middleware: 2.x - webpack-plugin-serve: 0.x || 1.x - peerDependenciesMeta: - "@types/webpack": - optional: true - sockjs-client: - optional: true - type-fest: - optional: true - webpack-dev-server: - optional: true - webpack-hot-middleware: - optional: true - webpack-plugin-serve: - optional: true - checksum: 66deb75fe06c0d93f9f6f87c57349013cdc82d4cc536b3aff919fd417df1c6603d14a96448d4088f1a680ec22a75f994b30c374a0042c524dfecd96a942ff674 - languageName: node - linkType: hard - "@polka/url@npm:^1.0.0-next.20": version: 1.0.0-next.21 resolution: "@polka/url@npm:1.0.0-next.21" @@ -8454,7 +8444,7 @@ __metadata: languageName: node linkType: hard -"@popperjs/core@npm:^2.10.2, @popperjs/core@npm:^2.5.4, @popperjs/core@npm:^2.6.0": +"@popperjs/core@npm:^2.10.2": version: 2.11.2 resolution: "@popperjs/core@npm:2.11.2" checksum: 5695bf020eda54636e16a62dc9b5fdd92beaf7b2d19f62fcef049d57c5cff92773562d80cbf760b217c3ec928da310eb24994ab6a00fd39dffa0af9b5dfc01a6 @@ -9304,18 +9294,18 @@ __metadata: languageName: node linkType: hard -"@storybook/addon-a11y@npm:6.4.21": - version: 6.4.21 - resolution: "@storybook/addon-a11y@npm:6.4.21" +"@storybook/addon-a11y@npm:6.5.12": + version: 6.5.12 + resolution: "@storybook/addon-a11y@npm:6.5.12" dependencies: - "@storybook/addons": 6.4.21 - "@storybook/api": 6.4.21 - "@storybook/channels": 6.4.21 - "@storybook/client-logger": 6.4.21 - "@storybook/components": 6.4.21 - "@storybook/core-events": 6.4.21 - "@storybook/csf": 0.0.2--canary.87bc651.0 - "@storybook/theming": 6.4.21 + "@storybook/addons": 6.5.12 + "@storybook/api": 6.5.12 + "@storybook/channels": 6.5.12 + "@storybook/client-logger": 6.5.12 + "@storybook/components": 6.5.12 + "@storybook/core-events": 6.5.12 + "@storybook/csf": 0.0.2--canary.4566f4d.1 + "@storybook/theming": 6.5.12 axe-core: ^4.2.0 core-js: ^3.8.2 global: ^4.4.0 @@ -9325,62 +9315,63 @@ __metadata: ts-dedent: ^2.0.0 util-deprecate: ^1.0.2 peerDependencies: - react: ^16.8.0 || ^17.0.0 - react-dom: ^16.8.0 || ^17.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 peerDependenciesMeta: react: optional: true react-dom: optional: true - checksum: 0e71c20a9516c3ff531f7accd3326177a1c7ede13eead5baa1794e350a9f8a6fc80021638a6419c92e1f88a0a936cb2b0355cb75295a12a2bfebeb890e8bd968 + checksum: f93f3c4f4dd9f2f8cfc79200d6201a385d19a3d1bb71ed4b253347db2628f7f414d3479d5545302383a8ff7580bfa5f542ddc9c22ee95ff1abc005e152193580 languageName: node linkType: hard -"@storybook/addon-actions@npm:6.4.21": - version: 6.4.21 - resolution: "@storybook/addon-actions@npm:6.4.21" +"@storybook/addon-actions@npm:6.5.12": + version: 6.5.12 + resolution: "@storybook/addon-actions@npm:6.5.12" dependencies: - "@storybook/addons": 6.4.21 - "@storybook/api": 6.4.21 - "@storybook/components": 6.4.21 - "@storybook/core-events": 6.4.21 - "@storybook/csf": 0.0.2--canary.87bc651.0 - "@storybook/theming": 6.4.21 + "@storybook/addons": 6.5.12 + "@storybook/api": 6.5.12 + "@storybook/client-logger": 6.5.12 + "@storybook/components": 6.5.12 + "@storybook/core-events": 6.5.12 + "@storybook/csf": 0.0.2--canary.4566f4d.1 + "@storybook/theming": 6.5.12 core-js: ^3.8.2 fast-deep-equal: ^3.1.3 global: ^4.4.0 lodash: ^4.17.21 - polished: ^4.0.5 + polished: ^4.2.2 prop-types: ^15.7.2 react-inspector: ^5.1.0 regenerator-runtime: ^0.13.7 - telejson: ^5.3.2 + telejson: ^6.0.8 ts-dedent: ^2.0.0 util-deprecate: ^1.0.2 uuid-browser: ^3.1.0 peerDependencies: - react: ^16.8.0 || ^17.0.0 - react-dom: ^16.8.0 || ^17.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 peerDependenciesMeta: react: optional: true react-dom: optional: true - checksum: 27f6cc73ecc6be33898c8623503d1c6a2db07228d390fa7bf82e03055f7d95faa64d9eab632929ac42cc2a3732de0b26fd06bc3c9397a0e756fb883302a235b6 + checksum: 94f433a6b0956e4301e5b46c68eb56f6a9b01b5ec314099611d584542369d1aec4878a5353052f963e462b1b5f3ce74070f0d03eadf30e275b0b88ef7b713dd8 languageName: node linkType: hard -"@storybook/addon-backgrounds@npm:6.4.21": - version: 6.4.21 - resolution: "@storybook/addon-backgrounds@npm:6.4.21" +"@storybook/addon-backgrounds@npm:6.5.12": + version: 6.5.12 + resolution: "@storybook/addon-backgrounds@npm:6.5.12" dependencies: - "@storybook/addons": 6.4.21 - "@storybook/api": 6.4.21 - "@storybook/client-logger": 6.4.21 - "@storybook/components": 6.4.21 - "@storybook/core-events": 6.4.21 - "@storybook/csf": 0.0.2--canary.87bc651.0 - "@storybook/theming": 6.4.21 + "@storybook/addons": 6.5.12 + "@storybook/api": 6.5.12 + "@storybook/client-logger": 6.5.12 + "@storybook/components": 6.5.12 + "@storybook/core-events": 6.5.12 + "@storybook/csf": 0.0.2--canary.4566f4d.1 + "@storybook/theming": 6.5.12 core-js: ^3.8.2 global: ^4.4.0 memoizerific: ^1.11.3 @@ -9388,116 +9379,125 @@ __metadata: ts-dedent: ^2.0.0 util-deprecate: ^1.0.2 peerDependencies: - react: ^16.8.0 || ^17.0.0 - react-dom: ^16.8.0 || ^17.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 peerDependenciesMeta: react: optional: true react-dom: optional: true - checksum: 41f2358fce5616886d2e364d19000f284df561973e1fca44873b8f90d6a8fe45f9f84583dcb42fffc68f286e3845ef9576bd2a2970f496e6f363c20cb27be275 + checksum: 67022905eb4c7104a28ae4feb3db99aa6f07b1f655fbeeb6bff6897dc2f70e452f7f799a98430c07242b2ba1b7bb0104a1879d9bf8fa855fea8293b6109f3a59 languageName: node linkType: hard -"@storybook/addon-controls@npm:6.4.21": - version: 6.4.21 - resolution: "@storybook/addon-controls@npm:6.4.21" +"@storybook/addon-controls@npm:6.5.12": + version: 6.5.12 + resolution: "@storybook/addon-controls@npm:6.5.12" dependencies: - "@storybook/addons": 6.4.21 - "@storybook/api": 6.4.21 - "@storybook/client-logger": 6.4.21 - "@storybook/components": 6.4.21 - "@storybook/core-common": 6.4.21 - "@storybook/csf": 0.0.2--canary.87bc651.0 - "@storybook/node-logger": 6.4.21 - "@storybook/store": 6.4.21 - "@storybook/theming": 6.4.21 + "@storybook/addons": 6.5.12 + "@storybook/api": 6.5.12 + "@storybook/client-logger": 6.5.12 + "@storybook/components": 6.5.12 + "@storybook/core-common": 6.5.12 + "@storybook/csf": 0.0.2--canary.4566f4d.1 + "@storybook/node-logger": 6.5.12 + "@storybook/store": 6.5.12 + "@storybook/theming": 6.5.12 core-js: ^3.8.2 lodash: ^4.17.21 ts-dedent: ^2.0.0 peerDependencies: - react: ^16.8.0 || ^17.0.0 - react-dom: ^16.8.0 || ^17.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 peerDependenciesMeta: react: optional: true react-dom: optional: true - checksum: c47aaffd6d13afbeac9c471033efe87837a1c46007cf4559fb55c8e4876552acf4e2814c87485cbf4afe70cb18b88e0bbfc239ed6fb8fb3eff72485b179ec12f + checksum: 27ee396ae4ab411b1bd99eacb0ebe747aa36300dc3b787d48eb685a446e64e33ff7df3b8713943132b6dbe3c78af3d2d6115b4da4c6196ec351d843690ab8a55 languageName: node linkType: hard -"@storybook/addon-docs@npm:6.4.21": - version: 6.4.21 - resolution: "@storybook/addon-docs@npm:6.4.21" +"@storybook/addon-docs@npm:6.5.12": + version: 6.5.12 + resolution: "@storybook/addon-docs@npm:6.5.12" dependencies: - "@babel/core": ^7.12.10 - "@babel/generator": ^7.12.11 - "@babel/parser": ^7.12.11 "@babel/plugin-transform-react-jsx": ^7.12.12 "@babel/preset-env": ^7.12.11 "@jest/transform": ^26.6.2 - "@mdx-js/loader": ^1.6.22 - "@mdx-js/mdx": ^1.6.22 "@mdx-js/react": ^1.6.22 - "@storybook/addons": 6.4.21 - "@storybook/api": 6.4.21 - "@storybook/builder-webpack4": 6.4.21 - "@storybook/client-logger": 6.4.21 - "@storybook/components": 6.4.21 - "@storybook/core": 6.4.21 - "@storybook/core-events": 6.4.21 - "@storybook/csf": 0.0.2--canary.87bc651.0 - "@storybook/csf-tools": 6.4.21 - "@storybook/node-logger": 6.4.21 - "@storybook/postinstall": 6.4.21 - "@storybook/preview-web": 6.4.21 - "@storybook/source-loader": 6.4.21 - "@storybook/store": 6.4.21 - "@storybook/theming": 6.4.21 - acorn: ^7.4.1 - acorn-jsx: ^5.3.1 - acorn-walk: ^7.2.0 + "@storybook/addons": 6.5.12 + "@storybook/api": 6.5.12 + "@storybook/components": 6.5.12 + "@storybook/core-common": 6.5.12 + "@storybook/core-events": 6.5.12 + "@storybook/csf": 0.0.2--canary.4566f4d.1 + "@storybook/docs-tools": 6.5.12 + "@storybook/mdx1-csf": ^0.0.1 + "@storybook/node-logger": 6.5.12 + "@storybook/postinstall": 6.5.12 + "@storybook/preview-web": 6.5.12 + "@storybook/source-loader": 6.5.12 + "@storybook/store": 6.5.12 + "@storybook/theming": 6.5.12 + babel-loader: ^8.0.0 core-js: ^3.8.2 - doctrine: ^3.0.0 - escodegen: ^2.0.0 fast-deep-equal: ^3.1.3 global: ^4.4.0 - html-tags: ^3.1.0 - js-string-escape: ^1.0.1 - loader-utils: ^2.0.0 lodash: ^4.17.21 - nanoid: ^3.1.23 - p-limit: ^3.1.0 - prettier: ">=2.2.1 <=2.3.0" - prop-types: ^15.7.2 - react-element-to-jsx-string: ^14.3.4 regenerator-runtime: ^0.13.7 remark-external-links: ^8.0.0 remark-slug: ^6.0.0 ts-dedent: ^2.0.0 util-deprecate: ^1.0.2 peerDependencies: - "@storybook/angular": 6.4.21 - "@storybook/html": 6.4.21 - "@storybook/react": 6.4.21 - "@storybook/vue": 6.4.21 - "@storybook/vue3": 6.4.21 - "@storybook/web-components": 6.4.21 - lit: ^2.0.0 - lit-html: ^1.4.1 || ^2.0.0 - react: ^16.8.0 || ^17.0.0 - react-dom: ^16.8.0 || ^17.0.0 - svelte: ^3.31.2 - sveltedoc-parser: ^4.1.0 - vue: ^2.6.10 || ^3.0.0 - webpack: "*" + "@storybook/mdx2-csf": ^0.0.3 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + "@storybook/mdx2-csf": + optional: true + react: + optional: true + react-dom: + optional: true + checksum: 671e6cf220a3657cb275dadfee6e5a3ea165c939b9919dac984881795a8d369bb01a45ab368f371d9499dd65743392969a46527d858c780de13871b9df8cdcdf + languageName: node + linkType: hard + +"@storybook/addon-essentials@npm:6.5.12": + version: 6.5.12 + resolution: "@storybook/addon-essentials@npm:6.5.12" + dependencies: + "@storybook/addon-actions": 6.5.12 + "@storybook/addon-backgrounds": 6.5.12 + "@storybook/addon-controls": 6.5.12 + "@storybook/addon-docs": 6.5.12 + "@storybook/addon-measure": 6.5.12 + "@storybook/addon-outline": 6.5.12 + "@storybook/addon-toolbars": 6.5.12 + "@storybook/addon-viewport": 6.5.12 + "@storybook/addons": 6.5.12 + "@storybook/api": 6.5.12 + "@storybook/core-common": 6.5.12 + "@storybook/node-logger": 6.5.12 + core-js: ^3.8.2 + regenerator-runtime: ^0.13.7 + ts-dedent: ^2.0.0 + peerDependencies: + "@babel/core": ^7.9.6 peerDependenciesMeta: "@storybook/angular": optional: true - "@storybook/html": + "@storybook/builder-manager4": optional: true - "@storybook/react": + "@storybook/builder-manager5": + optional: true + "@storybook/builder-webpack4": + optional: true + "@storybook/builder-webpack5": + optional: true + "@storybook/html": optional: true "@storybook/vue": optional: true @@ -9521,51 +9521,7 @@ __metadata: optional: true webpack: optional: true - checksum: df37cdb51c8a2656bb8dbf586f0cae2437f1c654375913e1a500d83a58bd32d3e59b0ae66ec00a5ec2c3352622078e594f6f3b8ac09662de7e7b7ce93cc1b1ba - languageName: node - linkType: hard - -"@storybook/addon-essentials@npm:6.4.21": - version: 6.4.21 - resolution: "@storybook/addon-essentials@npm:6.4.21" - dependencies: - "@storybook/addon-actions": 6.4.21 - "@storybook/addon-backgrounds": 6.4.21 - "@storybook/addon-controls": 6.4.21 - "@storybook/addon-docs": 6.4.21 - "@storybook/addon-measure": 6.4.21 - "@storybook/addon-outline": 6.4.21 - "@storybook/addon-toolbars": 6.4.21 - "@storybook/addon-viewport": 6.4.21 - "@storybook/addons": 6.4.21 - "@storybook/api": 6.4.21 - "@storybook/node-logger": 6.4.21 - core-js: ^3.8.2 - regenerator-runtime: ^0.13.7 - ts-dedent: ^2.0.0 - peerDependencies: - "@babel/core": ^7.9.6 - "@storybook/vue": 6.4.21 - "@storybook/web-components": 6.4.21 - babel-loader: ^8.0.0 - lit-html: ^1.4.1 || ^2.0.0-rc.3 - react: ^16.8.0 || ^17.0.0 - react-dom: ^16.8.0 || ^17.0.0 - webpack: "*" - peerDependenciesMeta: - "@storybook/vue": - optional: true - "@storybook/web-components": - optional: true - lit-html: - optional: true - react: - optional: true - react-dom: - optional: true - webpack: - optional: true - checksum: aee028eaebb6574a00c41d0540189ac9427d424972cb33c1d2fade68a5ec98560d8848969674acf5f54357c5c97428d14512ebe49cf1c069599d3ea3cac4cb03 + checksum: f69d545f7fac829d7688f132bc2a8e59fc387992864f7edd26ec52b993223f29a42d8805c75b5074a3c4fb2061b661b18d5d0971d3010982996e451407f74fea languageName: node linkType: hard @@ -9601,168 +9557,190 @@ __metadata: languageName: node linkType: hard -"@storybook/addon-measure@npm:6.4.21": - version: 6.4.21 - resolution: "@storybook/addon-measure@npm:6.4.21" +"@storybook/addon-measure@npm:6.5.12": + version: 6.5.12 + resolution: "@storybook/addon-measure@npm:6.5.12" dependencies: - "@storybook/addons": 6.4.21 - "@storybook/api": 6.4.21 - "@storybook/client-logger": 6.4.21 - "@storybook/components": 6.4.21 - "@storybook/core-events": 6.4.21 - "@storybook/csf": 0.0.2--canary.87bc651.0 + "@storybook/addons": 6.5.12 + "@storybook/api": 6.5.12 + "@storybook/client-logger": 6.5.12 + "@storybook/components": 6.5.12 + "@storybook/core-events": 6.5.12 + "@storybook/csf": 0.0.2--canary.4566f4d.1 core-js: ^3.8.2 global: ^4.4.0 peerDependencies: - react: ^16.8.0 || ^17.0.0 - react-dom: ^16.8.0 || ^17.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 peerDependenciesMeta: react: optional: true react-dom: optional: true - checksum: ef3004d789ff258c3eca31c6a7465678d5dbb89b2e7d7739e54749669b7bff927a6185798bd56e0e2137010a46c171f86df1166407334cb5daf7e4a5a7510887 + checksum: d47015e4e48f9d172d3faae9a49c1b3c749989299d6743ca29c646c4b2d43505c66678c77c035f524b50b54a520ae701def4da81daf80e2649b67174e05df89c languageName: node linkType: hard -"@storybook/addon-outline@npm:6.4.21": - version: 6.4.21 - resolution: "@storybook/addon-outline@npm:6.4.21" +"@storybook/addon-outline@npm:6.5.12": + version: 6.5.12 + resolution: "@storybook/addon-outline@npm:6.5.12" dependencies: - "@storybook/addons": 6.4.21 - "@storybook/api": 6.4.21 - "@storybook/client-logger": 6.4.21 - "@storybook/components": 6.4.21 - "@storybook/core-events": 6.4.21 - "@storybook/csf": 0.0.2--canary.87bc651.0 + "@storybook/addons": 6.5.12 + "@storybook/api": 6.5.12 + "@storybook/client-logger": 6.5.12 + "@storybook/components": 6.5.12 + "@storybook/core-events": 6.5.12 + "@storybook/csf": 0.0.2--canary.4566f4d.1 core-js: ^3.8.2 global: ^4.4.0 regenerator-runtime: ^0.13.7 ts-dedent: ^2.0.0 peerDependencies: - react: ^16.8.0 || ^17.0.0 - react-dom: ^16.8.0 || ^17.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 peerDependenciesMeta: react: optional: true react-dom: optional: true - checksum: 980878641a779084ed28c5c6460ad2e15b3c2fce9b9a4ca425b2a779956b0c84bdc70cfa22109337da1b72253cb8718c1ee2b778dd41200424f2c1e0ba9dba79 + checksum: 3ba7859e27178450107cae7210aa9b41ce20d9b050ad5281ef25ff9b513f132c3a0bd460d69840d7d177c7c32aa6abe71875514f373569c86f64ad24feca0f15 languageName: node linkType: hard -"@storybook/addon-storysource@npm:6.4.21": - version: 6.4.21 - resolution: "@storybook/addon-storysource@npm:6.4.21" +"@storybook/addon-storysource@npm:6.5.12": + version: 6.5.12 + resolution: "@storybook/addon-storysource@npm:6.5.12" dependencies: - "@storybook/addons": 6.4.21 - "@storybook/api": 6.4.21 - "@storybook/client-logger": 6.4.21 - "@storybook/components": 6.4.21 - "@storybook/router": 6.4.21 - "@storybook/source-loader": 6.4.21 - "@storybook/theming": 6.4.21 + "@storybook/addons": 6.5.12 + "@storybook/api": 6.5.12 + "@storybook/client-logger": 6.5.12 + "@storybook/components": 6.5.12 + "@storybook/router": 6.5.12 + "@storybook/source-loader": 6.5.12 + "@storybook/theming": 6.5.12 core-js: ^3.8.2 estraverse: ^5.2.0 loader-utils: ^2.0.0 - prettier: ">=2.2.1 <=2.3.0" prop-types: ^15.7.2 - react-syntax-highlighter: ^13.5.3 + react-syntax-highlighter: ^15.4.5 regenerator-runtime: ^0.13.7 peerDependencies: - react: ^16.8.0 || ^17.0.0 - react-dom: ^16.8.0 || ^17.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 peerDependenciesMeta: react: optional: true react-dom: optional: true - checksum: 41b1aca46f7cb5aa73dbccd3faf6a959e70846453847bff5009096f020dec290fc0db7d116439c4fbc339347367c6d279ac13f44ed80d67d08893be9df782a53 + checksum: 7ebaeffc1646229bebf7c9e918c225c73838b8972c00937e60928a5988440b3e6bf19225cf5f1d21c80aef59b2e20c6f473f6b5c386f5cebf7c9780d74b6ef18 languageName: node linkType: hard -"@storybook/addon-toolbars@npm:6.4.21": - version: 6.4.21 - resolution: "@storybook/addon-toolbars@npm:6.4.21" +"@storybook/addon-toolbars@npm:6.5.12": + version: 6.5.12 + resolution: "@storybook/addon-toolbars@npm:6.5.12" dependencies: - "@storybook/addons": 6.4.21 - "@storybook/api": 6.4.21 - "@storybook/components": 6.4.21 - "@storybook/theming": 6.4.21 + "@storybook/addons": 6.5.12 + "@storybook/api": 6.5.12 + "@storybook/client-logger": 6.5.12 + "@storybook/components": 6.5.12 + "@storybook/theming": 6.5.12 core-js: ^3.8.2 regenerator-runtime: ^0.13.7 peerDependencies: - react: ^16.8.0 || ^17.0.0 - react-dom: ^16.8.0 || ^17.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 peerDependenciesMeta: react: optional: true react-dom: optional: true - checksum: ab1460ee855772fc1ea61e65de4f228af9fd5d83e93908bffd50445ca391584299d1f7517ea750cde7c29d56815ccdd1463b91e1f872016956e1a253fe6983fd + checksum: 0b75ec7c9f7a789fb8cf2de0c2a8cf9a72c7f241be1bbe0b1faf832146bab29c722f825b64c1093b6e6127c7316d8a8f0aeeada4249915063d4795a7e79c3b0a languageName: node linkType: hard -"@storybook/addon-viewport@npm:6.4.21": - version: 6.4.21 - resolution: "@storybook/addon-viewport@npm:6.4.21" +"@storybook/addon-viewport@npm:6.5.12": + version: 6.5.12 + resolution: "@storybook/addon-viewport@npm:6.5.12" dependencies: - "@storybook/addons": 6.4.21 - "@storybook/api": 6.4.21 - "@storybook/client-logger": 6.4.21 - "@storybook/components": 6.4.21 - "@storybook/core-events": 6.4.21 - "@storybook/theming": 6.4.21 + "@storybook/addons": 6.5.12 + "@storybook/api": 6.5.12 + "@storybook/client-logger": 6.5.12 + "@storybook/components": 6.5.12 + "@storybook/core-events": 6.5.12 + "@storybook/theming": 6.5.12 core-js: ^3.8.2 global: ^4.4.0 memoizerific: ^1.11.3 prop-types: ^15.7.2 regenerator-runtime: ^0.13.7 peerDependencies: - react: ^16.8.0 || ^17.0.0 - react-dom: ^16.8.0 || ^17.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 peerDependenciesMeta: react: optional: true react-dom: optional: true - checksum: 76966f2597f2bb7811d885ee828728cec4e210af8c87dd56589d5b01df4447de163c83a2467f07e420e77584906e04e42e8632a14a9eb358d9b3c9400c30701a + checksum: 72d4b8a1b22456d3fa1cbe18c4804e3bae17790078a356e8ff43b2262842253f019b2cddbeeffbaef19fc06eecb55e48d895b2c9118238fb103d37aff8790378 languageName: node linkType: hard -"@storybook/addons@npm:6.4.21": - version: 6.4.21 - resolution: "@storybook/addons@npm:6.4.21" +"@storybook/addons@npm:6.5.12, @storybook/addons@npm:^6.0.0": + version: 6.5.12 + resolution: "@storybook/addons@npm:6.5.12" dependencies: - "@storybook/api": 6.4.21 - "@storybook/channels": 6.4.21 - "@storybook/client-logger": 6.4.21 - "@storybook/core-events": 6.4.21 - "@storybook/csf": 0.0.2--canary.87bc651.0 - "@storybook/router": 6.4.21 - "@storybook/theming": 6.4.21 + "@storybook/api": 6.5.12 + "@storybook/channels": 6.5.12 + "@storybook/client-logger": 6.5.12 + "@storybook/core-events": 6.5.12 + "@storybook/csf": 0.0.2--canary.4566f4d.1 + "@storybook/router": 6.5.12 + "@storybook/theming": 6.5.12 "@types/webpack-env": ^1.16.0 core-js: ^3.8.2 global: ^4.4.0 regenerator-runtime: ^0.13.7 peerDependencies: - react: ^16.8.0 || ^17.0.0 - react-dom: ^16.8.0 || ^17.0.0 - checksum: 16c173711a8261193d003a8b5521789d0e45d977e3aedaafe3d7f5afa0e0ab69864cbda5778935eb8c95267a4cf12ef14163a8a9fb20c27222606a7d1d1471ac + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + checksum: c6242a80c7355544eb309603e77fdc3787d78ad983aba931f00812aeba75cc2cbd0e98c1ac0ce01441b58fabcdb671a9a799358f4bd6511cab289bc030d91f61 languageName: node linkType: hard -"@storybook/api@npm:6.4.21": - version: 6.4.21 - resolution: "@storybook/api@npm:6.4.21" +"@storybook/addons@npm:6.5.7": + version: 6.5.7 + resolution: "@storybook/addons@npm:6.5.7" dependencies: - "@storybook/channels": 6.4.21 - "@storybook/client-logger": 6.4.21 - "@storybook/core-events": 6.4.21 - "@storybook/csf": 0.0.2--canary.87bc651.0 - "@storybook/router": 6.4.21 + "@storybook/api": 6.5.7 + "@storybook/channels": 6.5.7 + "@storybook/client-logger": 6.5.7 + "@storybook/core-events": 6.5.7 + "@storybook/csf": 0.0.2--canary.4566f4d.1 + "@storybook/router": 6.5.7 + "@storybook/theming": 6.5.7 + "@types/webpack-env": ^1.16.0 + core-js: ^3.8.2 + global: ^4.4.0 + regenerator-runtime: ^0.13.7 + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + checksum: 237f4537523f6a393aad07acc28338889dd668d8cbc46d75cc1837236c583de62fffd9b8a40c7386e552814a9636bed35fbd47a0cc5b3166461f82c6fe8a0931 + languageName: node + linkType: hard + +"@storybook/api@npm:6.5.12, @storybook/api@npm:^6.0.0": + version: 6.5.12 + resolution: "@storybook/api@npm:6.5.12" + dependencies: + "@storybook/channels": 6.5.12 + "@storybook/client-logger": 6.5.12 + "@storybook/core-events": 6.5.12 + "@storybook/csf": 0.0.2--canary.4566f4d.1 + "@storybook/router": 6.5.12 "@storybook/semver": ^7.3.2 - "@storybook/theming": 6.4.21 + "@storybook/theming": 6.5.12 core-js: ^3.8.2 fast-deep-equal: ^3.1.3 global: ^4.4.0 @@ -9770,63 +9748,69 @@ __metadata: memoizerific: ^1.11.3 regenerator-runtime: ^0.13.7 store2: ^2.12.0 - telejson: ^5.3.2 + telejson: ^6.0.8 ts-dedent: ^2.0.0 util-deprecate: ^1.0.2 peerDependencies: - react: ^16.8.0 || ^17.0.0 - react-dom: ^16.8.0 || ^17.0.0 - checksum: c3c32c3f3589d553d8d182aae804c9337ce2d6c8e238b3973fb1cadc1dddd49fff142fc863a9b6fa1f076c802475abbb1b60d461a8cef7d18c6d45b17f8d7721 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + checksum: 3982cea5aaf851ccc19ff97ef82b7590d47839f0ebee28399e3b9381578edc130b4e46fe36431c62fa281949b2e0d5da2b1feafab0c2d24f70c4097d800b2679 languageName: node linkType: hard -"@storybook/builder-webpack4@npm:6.4.21": - version: 6.4.21 - resolution: "@storybook/builder-webpack4@npm:6.4.21" +"@storybook/api@npm:6.5.7": + version: 6.5.7 + resolution: "@storybook/api@npm:6.5.7" + dependencies: + "@storybook/channels": 6.5.7 + "@storybook/client-logger": 6.5.7 + "@storybook/core-events": 6.5.7 + "@storybook/csf": 0.0.2--canary.4566f4d.1 + "@storybook/router": 6.5.7 + "@storybook/semver": ^7.3.2 + "@storybook/theming": 6.5.7 + core-js: ^3.8.2 + fast-deep-equal: ^3.1.3 + global: ^4.4.0 + lodash: ^4.17.21 + memoizerific: ^1.11.3 + regenerator-runtime: ^0.13.7 + store2: ^2.12.0 + telejson: ^6.0.8 + ts-dedent: ^2.0.0 + util-deprecate: ^1.0.2 + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + checksum: 84f43121f8fee7df2061be357621c3a5e13de8e49efadbfbaa08ee188aab4d2fbec4daf84b6d8d03cc16f897a20458916f482e57d998a1a59e20b1943094291a + languageName: node + linkType: hard + +"@storybook/builder-webpack4@npm:6.5.12": + version: 6.5.12 + resolution: "@storybook/builder-webpack4@npm:6.5.12" dependencies: "@babel/core": ^7.12.10 - "@babel/plugin-proposal-class-properties": ^7.12.1 - "@babel/plugin-proposal-decorators": ^7.12.12 - "@babel/plugin-proposal-export-default-from": ^7.12.1 - "@babel/plugin-proposal-nullish-coalescing-operator": ^7.12.1 - "@babel/plugin-proposal-object-rest-spread": ^7.12.1 - "@babel/plugin-proposal-optional-chaining": ^7.12.7 - "@babel/plugin-proposal-private-methods": ^7.12.1 - "@babel/plugin-syntax-dynamic-import": ^7.8.3 - "@babel/plugin-transform-arrow-functions": ^7.12.1 - "@babel/plugin-transform-block-scoping": ^7.12.12 - "@babel/plugin-transform-classes": ^7.12.1 - "@babel/plugin-transform-destructuring": ^7.12.1 - "@babel/plugin-transform-for-of": ^7.12.1 - "@babel/plugin-transform-parameters": ^7.12.1 - "@babel/plugin-transform-shorthand-properties": ^7.12.1 - "@babel/plugin-transform-spread": ^7.12.1 - "@babel/plugin-transform-template-literals": ^7.12.1 - "@babel/preset-env": ^7.12.11 - "@babel/preset-react": ^7.12.10 - "@babel/preset-typescript": ^7.12.7 - "@storybook/addons": 6.4.21 - "@storybook/api": 6.4.21 - "@storybook/channel-postmessage": 6.4.21 - "@storybook/channels": 6.4.21 - "@storybook/client-api": 6.4.21 - "@storybook/client-logger": 6.4.21 - "@storybook/components": 6.4.21 - "@storybook/core-common": 6.4.21 - "@storybook/core-events": 6.4.21 - "@storybook/node-logger": 6.4.21 - "@storybook/preview-web": 6.4.21 - "@storybook/router": 6.4.21 + "@storybook/addons": 6.5.12 + "@storybook/api": 6.5.12 + "@storybook/channel-postmessage": 6.5.12 + "@storybook/channels": 6.5.12 + "@storybook/client-api": 6.5.12 + "@storybook/client-logger": 6.5.12 + "@storybook/components": 6.5.12 + "@storybook/core-common": 6.5.12 + "@storybook/core-events": 6.5.12 + "@storybook/node-logger": 6.5.12 + "@storybook/preview-web": 6.5.12 + "@storybook/router": 6.5.12 "@storybook/semver": ^7.3.2 - "@storybook/store": 6.4.21 - "@storybook/theming": 6.4.21 - "@storybook/ui": 6.4.21 - "@types/node": ^14.0.10 + "@storybook/store": 6.5.12 + "@storybook/theming": 6.5.12 + "@storybook/ui": 6.5.12 + "@types/node": ^14.0.10 || ^16.0.0 "@types/webpack": ^4.41.26 autoprefixer: ^9.8.6 babel-loader: ^8.0.0 - babel-plugin-macros: ^2.8.0 - babel-plugin-polyfill-corejs3: ^0.1.0 case-sensitive-paths-webpack-plugin: ^2.3.0 core-js: ^3.8.2 css-loader: ^3.6.0 @@ -9854,58 +9838,39 @@ __metadata: webpack-hot-middleware: ^2.25.1 webpack-virtual-modules: ^0.2.2 peerDependencies: - react: ^16.8.0 || ^17.0.0 - react-dom: ^16.8.0 || ^17.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 peerDependenciesMeta: typescript: optional: true - checksum: 321a77c4e6f945b588feaeccc954adc314c02aa2d8a9428367a1ddf74c142504b1bb1a9e78d3e4e94ece4331478b56d8a93a86e5a625968ddbec835c2f4e33ba + checksum: 3cb72ade60fc0767480c424cd5da6659027c35759852198936530c555d7fa1ae18326b3d696def06a54a55f7f26a6eb0246e675ea566c5bbfc63db54e0ad8880 languageName: node linkType: hard -"@storybook/builder-webpack5@npm:6.4.21": - version: 6.4.21 - resolution: "@storybook/builder-webpack5@npm:6.4.21" +"@storybook/builder-webpack5@npm:6.5.12": + version: 6.5.12 + resolution: "@storybook/builder-webpack5@npm:6.5.12" dependencies: "@babel/core": ^7.12.10 - "@babel/plugin-proposal-class-properties": ^7.12.1 - "@babel/plugin-proposal-decorators": ^7.12.12 - "@babel/plugin-proposal-export-default-from": ^7.12.1 - "@babel/plugin-proposal-nullish-coalescing-operator": ^7.12.1 - "@babel/plugin-proposal-object-rest-spread": ^7.12.1 - "@babel/plugin-proposal-optional-chaining": ^7.12.7 - "@babel/plugin-proposal-private-methods": ^7.12.1 - "@babel/plugin-syntax-dynamic-import": ^7.8.3 - "@babel/plugin-transform-arrow-functions": ^7.12.1 - "@babel/plugin-transform-block-scoping": ^7.12.12 - "@babel/plugin-transform-classes": ^7.12.1 - "@babel/plugin-transform-destructuring": ^7.12.1 - "@babel/plugin-transform-for-of": ^7.12.1 - "@babel/plugin-transform-parameters": ^7.12.1 - "@babel/plugin-transform-shorthand-properties": ^7.12.1 - "@babel/plugin-transform-spread": ^7.12.1 - "@babel/preset-env": ^7.12.11 - "@babel/preset-react": ^7.12.10 - "@babel/preset-typescript": ^7.12.7 - "@storybook/addons": 6.4.21 - "@storybook/api": 6.4.21 - "@storybook/channel-postmessage": 6.4.21 - "@storybook/channels": 6.4.21 - "@storybook/client-api": 6.4.21 - "@storybook/client-logger": 6.4.21 - "@storybook/components": 6.4.21 - "@storybook/core-common": 6.4.21 - "@storybook/core-events": 6.4.21 - "@storybook/node-logger": 6.4.21 - "@storybook/preview-web": 6.4.21 - "@storybook/router": 6.4.21 + "@storybook/addons": 6.5.12 + "@storybook/api": 6.5.12 + "@storybook/channel-postmessage": 6.5.12 + "@storybook/channels": 6.5.12 + "@storybook/client-api": 6.5.12 + "@storybook/client-logger": 6.5.12 + "@storybook/components": 6.5.12 + "@storybook/core-common": 6.5.12 + "@storybook/core-events": 6.5.12 + "@storybook/node-logger": 6.5.12 + "@storybook/preview-web": 6.5.12 + "@storybook/router": 6.5.12 "@storybook/semver": ^7.3.2 - "@storybook/store": 6.4.21 - "@storybook/theming": 6.4.21 - "@types/node": ^14.0.10 + "@storybook/store": 6.5.12 + "@storybook/theming": 6.5.12 + "@types/node": ^14.0.10 || ^16.0.0 babel-loader: ^8.0.0 - babel-plugin-macros: ^3.0.1 - babel-plugin-polyfill-corejs3: ^0.1.0 + babel-plugin-named-exports-order: ^0.0.2 + browser-assert: ^1.2.1 case-sensitive-paths-webpack-plugin: ^2.3.0 core-js: ^3.8.2 css-loader: ^5.0.1 @@ -9925,65 +9890,91 @@ __metadata: webpack-hot-middleware: ^2.25.1 webpack-virtual-modules: ^0.4.1 peerDependencies: - react: ^16.8.0 || ^17.0.0 - react-dom: ^16.8.0 || ^17.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 peerDependenciesMeta: typescript: optional: true - checksum: 1837c75680f0158ec620759c4d09c6ae7fb1d50373b2174c37ff6bf0957dc8bb9bb8edcf15d745c41aaf96efc18776ffcce47c1963307b91919e662003f480ca + checksum: 60387a186defc3b40ceae8c41376da5de65d52cc652a203bce8ef8733e54bec552143440ce5fb466916a87b0ef67b98932a96985f3ee371a3f74a9049277092f languageName: node linkType: hard -"@storybook/channel-postmessage@npm:6.4.21": - version: 6.4.21 - resolution: "@storybook/channel-postmessage@npm:6.4.21" +"@storybook/channel-postmessage@npm:6.5.12": + version: 6.5.12 + resolution: "@storybook/channel-postmessage@npm:6.5.12" dependencies: - "@storybook/channels": 6.4.21 - "@storybook/client-logger": 6.4.21 - "@storybook/core-events": 6.4.21 + "@storybook/channels": 6.5.12 + "@storybook/client-logger": 6.5.12 + "@storybook/core-events": 6.5.12 core-js: ^3.8.2 global: ^4.4.0 qs: ^6.10.0 - telejson: ^5.3.2 - checksum: 00eafe2ab4cab45caefceb542a415296942c311eca062c66de62098e7a716a7c63854c2cf5fcdece00a57da7a5be8d010c3925d3841fccdbd4be5643d14fc842 + telejson: ^6.0.8 + checksum: c225f848f4774e8159b9fd8bd904520ab2755f46ac6ef5a8ed7193b5cd79856e0bb797d10adfa0a1db9b9df075c41b4487d195cc451fb65b04737db70e5db6db languageName: node linkType: hard -"@storybook/channel-websocket@npm:6.4.21": - version: 6.4.21 - resolution: "@storybook/channel-websocket@npm:6.4.21" +"@storybook/channel-postmessage@npm:6.5.7": + version: 6.5.7 + resolution: "@storybook/channel-postmessage@npm:6.5.7" dependencies: - "@storybook/channels": 6.4.21 - "@storybook/client-logger": 6.4.21 + "@storybook/channels": 6.5.7 + "@storybook/client-logger": 6.5.7 + "@storybook/core-events": 6.5.7 core-js: ^3.8.2 global: ^4.4.0 - telejson: ^5.3.2 - checksum: 4f41091f6026ab10f4fd260508a0db848dadad05eb7d2faaac59fe8ce52d73d4465970e362914e0618313ca9c072e0b9c2d7e28fbfb51f5bd2d60efdb247bda5 + qs: ^6.10.0 + telejson: ^6.0.8 + checksum: 4683d689fe065dd0de3583624e25b285a160f54bdc6681baef5fa4ad166c1fc654a447169247e7caca7a418d61aac537784728feb520361ecd2244b4ef34683d languageName: node linkType: hard -"@storybook/channels@npm:6.4.21": - version: 6.4.21 - resolution: "@storybook/channels@npm:6.4.21" +"@storybook/channel-websocket@npm:6.5.12": + version: 6.5.12 + resolution: "@storybook/channel-websocket@npm:6.5.12" + dependencies: + "@storybook/channels": 6.5.12 + "@storybook/client-logger": 6.5.12 + core-js: ^3.8.2 + global: ^4.4.0 + telejson: ^6.0.8 + checksum: 03d4ed3f2b67daceea06325c8705b95013b65d014dfda769a923b2c1c890d1eca1fe8eea09e3386cc572c738ce43bc8951225ebd92de4205ad80438bb9e36ebe + languageName: node + linkType: hard + +"@storybook/channels@npm:6.5.12": + version: 6.5.12 + resolution: "@storybook/channels@npm:6.5.12" dependencies: core-js: ^3.8.2 ts-dedent: ^2.0.0 util-deprecate: ^1.0.2 - checksum: 8953ac7dc34486406edca55f77e3e592283a9355f52c1608acdfa3845ed5df08b909d08467d8e4df1f6c0f7eb1e97ce3ee8e183d72a79ea6e29da4859da26681 + checksum: e6b240a6c62a68a485bf8f4db536df0504cfcbe9685654e5a5712b833917b9a620e91994bf2283a420e413511c967e92ead522c98ad7e6c0e88b3830ddfd4e30 languageName: node linkType: hard -"@storybook/client-api@npm:6.4.21": - version: 6.4.21 - resolution: "@storybook/client-api@npm:6.4.21" +"@storybook/channels@npm:6.5.7": + version: 6.5.7 + resolution: "@storybook/channels@npm:6.5.7" dependencies: - "@storybook/addons": 6.4.21 - "@storybook/channel-postmessage": 6.4.21 - "@storybook/channels": 6.4.21 - "@storybook/client-logger": 6.4.21 - "@storybook/core-events": 6.4.21 - "@storybook/csf": 0.0.2--canary.87bc651.0 - "@storybook/store": 6.4.21 + core-js: ^3.8.2 + ts-dedent: ^2.0.0 + util-deprecate: ^1.0.2 + checksum: 41b83607ef937ffef8d81beef6936e86d02cc14ad7159258ed94deedda8f495f095e26e9088557d547b3b1044cdb4e5501c21cdbbc0d4fb6c236b3b252d3cee3 + languageName: node + linkType: hard + +"@storybook/client-api@npm:*": + version: 6.5.7 + resolution: "@storybook/client-api@npm:6.5.7" + dependencies: + "@storybook/addons": 6.5.7 + "@storybook/channel-postmessage": 6.5.7 + "@storybook/channels": 6.5.7 + "@storybook/client-logger": 6.5.7 + "@storybook/core-events": 6.5.7 + "@storybook/csf": 0.0.2--canary.4566f4d.1 + "@storybook/store": 6.5.7 "@types/qs": ^6.9.5 "@types/webpack-env": ^1.16.0 core-js: ^3.8.2 @@ -9998,71 +9989,96 @@ __metadata: ts-dedent: ^2.0.0 util-deprecate: ^1.0.2 peerDependencies: - react: ^16.8.0 || ^17.0.0 - react-dom: ^16.8.0 || ^17.0.0 - checksum: 895c4eebf092c6804a4215548b0b52d2be2eca4bad1b9d7c050f6a22eaec314f261689c1e9f637c59e91aa1a3588ae791c75580d00b44bac4fe45c4875e1a53d + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + checksum: 30ba0b361833a750d60d1ceba91e8c8b7802aa9ab2de894d390b08dd9f415f5a8b7387604f8bc004de95ac4d7cd46e045c7e8e5bf7d12dc6f44f12f826370992 languageName: node linkType: hard -"@storybook/client-logger@npm:6.4.21": - version: 6.4.21 - resolution: "@storybook/client-logger@npm:6.4.21" +"@storybook/client-api@npm:6.5.12": + version: 6.5.12 + resolution: "@storybook/client-api@npm:6.5.12" dependencies: - core-js: ^3.8.2 - global: ^4.4.0 - checksum: e85ed5379cd214ea0d0441239bc7e9504f9a466dc353409945e4474b5baf1a2c33c437810ddc3c3bacd23df7dc5f498436ec5c58c0c2ef2ab88ebc74a800ecd5 - languageName: node - linkType: hard - -"@storybook/components@npm:6.4.21": - version: 6.4.21 - resolution: "@storybook/components@npm:6.4.21" - dependencies: - "@popperjs/core": ^2.6.0 - "@storybook/client-logger": 6.4.21 - "@storybook/csf": 0.0.2--canary.87bc651.0 - "@storybook/theming": 6.4.21 - "@types/color-convert": ^2.0.0 - "@types/overlayscrollbars": ^1.12.0 - "@types/react-syntax-highlighter": 11.0.5 - color-convert: ^2.0.1 + "@storybook/addons": 6.5.12 + "@storybook/channel-postmessage": 6.5.12 + "@storybook/channels": 6.5.12 + "@storybook/client-logger": 6.5.12 + "@storybook/core-events": 6.5.12 + "@storybook/csf": 0.0.2--canary.4566f4d.1 + "@storybook/store": 6.5.12 + "@types/qs": ^6.9.5 + "@types/webpack-env": ^1.16.0 core-js: ^3.8.2 fast-deep-equal: ^3.1.3 global: ^4.4.0 lodash: ^4.17.21 - markdown-to-jsx: ^7.1.3 memoizerific: ^1.11.3 - overlayscrollbars: ^1.13.1 - polished: ^4.0.5 - prop-types: ^15.7.2 - react-colorful: ^5.1.2 - react-popper-tooltip: ^3.1.1 - react-syntax-highlighter: ^13.5.3 - react-textarea-autosize: ^8.3.0 + qs: ^6.10.0 regenerator-runtime: ^0.13.7 + store2: ^2.12.0 + synchronous-promise: ^2.0.15 ts-dedent: ^2.0.0 util-deprecate: ^1.0.2 peerDependencies: - react: ^16.8.0 || ^17.0.0 - react-dom: ^16.8.0 || ^17.0.0 - checksum: 24159e630a6fd643672c377c0f118ee5f61a10e4171fa4cdcdac09b6bbfa09b814e60fb65322077b4402cab7e22b782d6d260ce92238d540821ab2e9def6e3e7 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + checksum: 6a103cdf1c0499e238e6a652f192b3287b7bce2a96c194c48854d1e6d8e470568aa36307aa49650e8322965295b10d601c4a087e2cb7e3515bb9ba8281aeda35 languageName: node linkType: hard -"@storybook/core-client@npm:6.4.21": - version: 6.4.21 - resolution: "@storybook/core-client@npm:6.4.21" +"@storybook/client-logger@npm:6.5.12": + version: 6.5.12 + resolution: "@storybook/client-logger@npm:6.5.12" dependencies: - "@storybook/addons": 6.4.21 - "@storybook/channel-postmessage": 6.4.21 - "@storybook/channel-websocket": 6.4.21 - "@storybook/client-api": 6.4.21 - "@storybook/client-logger": 6.4.21 - "@storybook/core-events": 6.4.21 - "@storybook/csf": 0.0.2--canary.87bc651.0 - "@storybook/preview-web": 6.4.21 - "@storybook/store": 6.4.21 - "@storybook/ui": 6.4.21 + core-js: ^3.8.2 + global: ^4.4.0 + checksum: bd11bc25115f9b4a965e378d7dac28f9152038173ab5debb1e116a7aba69c814752d2c8aa4092dd1fc3f60cd99d4896c9e74d5e6f3c85768e7633adaf5bd2bf2 + languageName: node + linkType: hard + +"@storybook/client-logger@npm:6.5.7": + version: 6.5.7 + resolution: "@storybook/client-logger@npm:6.5.7" + dependencies: + core-js: ^3.8.2 + global: ^4.4.0 + checksum: 5e8e0f24154bc8888cb0800320c4a054da166cb363e744a787a1fd42ead4cd97b7169f2a1a4696ece470974a41c4682a2aa78e384ca007493dc6579bdc5c0ccc + languageName: node + linkType: hard + +"@storybook/components@npm:6.5.12, @storybook/components@npm:^6.0.0": + version: 6.5.12 + resolution: "@storybook/components@npm:6.5.12" + dependencies: + "@storybook/client-logger": 6.5.12 + "@storybook/csf": 0.0.2--canary.4566f4d.1 + "@storybook/theming": 6.5.12 + core-js: ^3.8.2 + memoizerific: ^1.11.3 + qs: ^6.10.0 + regenerator-runtime: ^0.13.7 + util-deprecate: ^1.0.2 + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + checksum: fa469ae615d9146df7e23f01b85731d27e6400e2d94035db172deb1f61903d86c121d858558dd12307ecc6344d21b496db020731e73eff6ace3f82672b953a93 + languageName: node + linkType: hard + +"@storybook/core-client@npm:6.5.12": + version: 6.5.12 + resolution: "@storybook/core-client@npm:6.5.12" + dependencies: + "@storybook/addons": 6.5.12 + "@storybook/channel-postmessage": 6.5.12 + "@storybook/channel-websocket": 6.5.12 + "@storybook/client-api": 6.5.12 + "@storybook/client-logger": 6.5.12 + "@storybook/core-events": 6.5.12 + "@storybook/csf": 0.0.2--canary.4566f4d.1 + "@storybook/preview-web": 6.5.12 + "@storybook/store": 6.5.12 + "@storybook/ui": 6.5.12 airbnb-js-shims: ^2.2.1 ansi-to-html: ^0.6.11 core-js: ^3.8.2 @@ -10074,19 +10090,19 @@ __metadata: unfetch: ^4.2.0 util-deprecate: ^1.0.2 peerDependencies: - react: ^16.8.0 || ^17.0.0 - react-dom: ^16.8.0 || ^17.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 webpack: "*" peerDependenciesMeta: typescript: optional: true - checksum: e30c95770539a31f248e8b322fed371100bf50934e86d61331fde5e8f77a1bbb82ca162c5f9fcc177c38b62482f1ed47681ab8544fb0d977ed766be2ab52c73f + checksum: 4fb567964a6c15526ee6ee882e20d72c650ad0c74504ee2a058c13856efd25a0c9c7f666d36c6b4e70a75ece73c1ed812f554bbbf87771cd6171cd09ebf31410 languageName: node linkType: hard -"@storybook/core-common@npm:6.4.21": - version: 6.4.21 - resolution: "@storybook/core-common@npm:6.4.21" +"@storybook/core-common@npm:6.5.12": + version: 6.5.12 + resolution: "@storybook/core-common@npm:6.5.12" dependencies: "@babel/core": ^7.12.10 "@babel/plugin-proposal-class-properties": ^7.12.1 @@ -10096,6 +10112,7 @@ __metadata: "@babel/plugin-proposal-object-rest-spread": ^7.12.1 "@babel/plugin-proposal-optional-chaining": ^7.12.7 "@babel/plugin-proposal-private-methods": ^7.12.1 + "@babel/plugin-proposal-private-property-in-object": ^7.12.1 "@babel/plugin-syntax-dynamic-import": ^7.8.3 "@babel/plugin-transform-arrow-functions": ^7.12.1 "@babel/plugin-transform-block-scoping": ^7.12.12 @@ -10109,9 +10126,9 @@ __metadata: "@babel/preset-react": ^7.12.10 "@babel/preset-typescript": ^7.12.7 "@babel/register": ^7.12.1 - "@storybook/node-logger": 6.4.21 + "@storybook/node-logger": 6.5.12 "@storybook/semver": ^7.3.2 - "@types/node": ^14.0.10 + "@types/node": ^14.0.10 || ^16.0.0 "@types/pretty-hrtime": ^1.0.0 babel-loader: ^8.0.0 babel-plugin-macros: ^3.0.1 @@ -10133,45 +10150,55 @@ __metadata: pretty-hrtime: ^1.0.3 resolve-from: ^5.0.0 slash: ^3.0.0 - telejson: ^5.3.2 + telejson: ^6.0.8 ts-dedent: ^2.0.0 util-deprecate: ^1.0.2 webpack: 4 peerDependencies: - react: ^16.8.0 || ^17.0.0 - react-dom: ^16.8.0 || ^17.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 peerDependenciesMeta: typescript: optional: true - checksum: 12d417ec8692ecd467bfbebac083ca762b0b23e7e64162ad1e31b2daf0965e16bc25ffed92aae74639fd209267cc5cafd6b98e1ce27f2ef85368bee66e37d854 + checksum: d12b276718d3bb527084135882abc35fcdc4690896579b9f5e0417236a0d02f2791424ac62a891a0353af635be10c22db7dfe04d0db644ab0757ae3981f0ff1a languageName: node linkType: hard -"@storybook/core-events@npm:6.4.21": - version: 6.4.21 - resolution: "@storybook/core-events@npm:6.4.21" +"@storybook/core-events@npm:6.5.12, @storybook/core-events@npm:^6.0.0": + version: 6.5.12 + resolution: "@storybook/core-events@npm:6.5.12" dependencies: core-js: ^3.8.2 - checksum: 70c4e9f30f894f176d76a1a0b19b84efc70e0bbf9295e08f7c2595103f903c06b44279d2e6ece73f174d894e68a2e03c9511c8c9cd4b01f5d5e9941c6feaf9a7 + checksum: 82a4b9cb2a8599f3916db84b08b4cfbde8f56cb96a7afe641b3f144676fc7dc5a705e65f8844430b36ee6e6e14d6b2cb741622a8b39411276682219df5e04271 languageName: node linkType: hard -"@storybook/core-server@npm:6.4.21": - version: 6.4.21 - resolution: "@storybook/core-server@npm:6.4.21" +"@storybook/core-events@npm:6.5.7": + version: 6.5.7 + resolution: "@storybook/core-events@npm:6.5.7" + dependencies: + core-js: ^3.8.2 + checksum: 8abefa1453981dce5bb121068c8c1bb49d5aa13fc547308a26b6c7babe4d5dbf16195d590c11306d5edfc9b8f566e9562f30cd7c45190269df77d90a9d939516 + languageName: node + linkType: hard + +"@storybook/core-server@npm:6.5.12": + version: 6.5.12 + resolution: "@storybook/core-server@npm:6.5.12" dependencies: "@discoveryjs/json-ext": ^0.5.3 - "@storybook/builder-webpack4": 6.4.21 - "@storybook/core-client": 6.4.21 - "@storybook/core-common": 6.4.21 - "@storybook/core-events": 6.4.21 - "@storybook/csf": 0.0.2--canary.87bc651.0 - "@storybook/csf-tools": 6.4.21 - "@storybook/manager-webpack4": 6.4.21 - "@storybook/node-logger": 6.4.21 + "@storybook/builder-webpack4": 6.5.12 + "@storybook/core-client": 6.5.12 + "@storybook/core-common": 6.5.12 + "@storybook/core-events": 6.5.12 + "@storybook/csf": 0.0.2--canary.4566f4d.1 + "@storybook/csf-tools": 6.5.12 + "@storybook/manager-webpack4": 6.5.12 + "@storybook/node-logger": 6.5.12 "@storybook/semver": ^7.3.2 - "@storybook/store": 6.4.21 - "@types/node": ^14.0.10 + "@storybook/store": 6.5.12 + "@storybook/telemetry": 6.5.12 + "@types/node": ^14.0.10 || ^16.0.0 "@types/node-fetch": ^2.5.7 "@types/pretty-hrtime": ^1.0.0 "@types/webpack": ^4.41.26 @@ -10185,28 +10212,28 @@ __metadata: cpy: ^8.1.2 detect-port: ^1.3.0 express: ^4.17.1 - file-system-cache: ^1.0.5 fs-extra: ^9.0.1 + global: ^4.4.0 globby: ^11.0.2 - ip: ^1.1.5 + ip: ^2.0.0 lodash: ^4.17.21 - node-fetch: ^2.6.1 + node-fetch: ^2.6.7 + open: ^8.4.0 pretty-hrtime: ^1.0.3 prompts: ^2.4.0 regenerator-runtime: ^0.13.7 serve-favicon: ^2.5.0 slash: ^3.0.0 - telejson: ^5.3.3 + telejson: ^6.0.8 ts-dedent: ^2.0.0 util-deprecate: ^1.0.2 watchpack: ^2.2.0 webpack: 4 ws: ^8.2.3 + x-default-browser: ^0.4.0 peerDependencies: - "@storybook/builder-webpack5": 6.4.21 - "@storybook/manager-webpack5": 6.4.21 - react: ^16.8.0 || ^17.0.0 - react-dom: ^16.8.0 || ^17.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 peerDependenciesMeta: "@storybook/builder-webpack5": optional: true @@ -10214,33 +10241,34 @@ __metadata: optional: true typescript: optional: true - checksum: 7efb1c4c71dfe5af4cfb392ec0efaacf1c85ce88579196c3475799a96722ddf1c8aeda814e08173621eea17d24d4c8e147e043291abe1518956e15f5e51223f6 + checksum: 1e7e8de948012eb126f30261d23a552e18e671ad7796c46051e17be545c37a70c72437cbb24249d2e88b3525ed6a4b7205ddeeb167aca6b9478df85b128a57d3 languageName: node linkType: hard -"@storybook/core@npm:6.4.21": - version: 6.4.21 - resolution: "@storybook/core@npm:6.4.21" +"@storybook/core@npm:6.5.12": + version: 6.5.12 + resolution: "@storybook/core@npm:6.5.12" dependencies: - "@storybook/core-client": 6.4.21 - "@storybook/core-server": 6.4.21 + "@storybook/core-client": 6.5.12 + "@storybook/core-server": 6.5.12 peerDependencies: - "@storybook/builder-webpack5": 6.4.21 - react: ^16.8.0 || ^17.0.0 - react-dom: ^16.8.0 || ^17.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 webpack: "*" peerDependenciesMeta: "@storybook/builder-webpack5": optional: true + "@storybook/manager-webpack5": + optional: true typescript: optional: true - checksum: d7be99431d933b8abcb4420f271fb6859a42b5dca5afb88a1c35b7a99e7d624a9c5f9d34be8c47badf589b16020ed182affac0bd4590a5cda3728dff20a52b08 + checksum: 82606be8f89ad34a662d366e64d85af5a61270e2cff4dab8c3c3b0ec17ae3e34e560b54a1e2dd3fdd52eb072f8101b409e762f8581e65abcf07097e768baaaf0 languageName: node linkType: hard -"@storybook/csf-tools@npm:6.4.21": - version: 6.4.21 - resolution: "@storybook/csf-tools@npm:6.4.21" +"@storybook/csf-tools@npm:6.5.12": + version: 6.5.12 + resolution: "@storybook/csf-tools@npm:6.5.12" dependencies: "@babel/core": ^7.12.10 "@babel/generator": ^7.12.11 @@ -10249,43 +10277,60 @@ __metadata: "@babel/preset-env": ^7.12.11 "@babel/traverse": ^7.12.11 "@babel/types": ^7.12.11 - "@mdx-js/mdx": ^1.6.22 - "@storybook/csf": 0.0.2--canary.87bc651.0 + "@storybook/csf": 0.0.2--canary.4566f4d.1 + "@storybook/mdx1-csf": ^0.0.1 core-js: ^3.8.2 fs-extra: ^9.0.1 global: ^4.4.0 - js-string-escape: ^1.0.1 - lodash: ^4.17.21 - prettier: ">=2.2.1 <=2.3.0" regenerator-runtime: ^0.13.7 ts-dedent: ^2.0.0 - checksum: 3c23ad1781bc681d0a8eb9eebeb084613d951c03221e597d8cee5b85514afcb4ae6ebc9748b4f7c34a8bee1b068f14ca443591bbc67de74b7aa1bdd2b7657a61 + peerDependencies: + "@storybook/mdx2-csf": ^0.0.3 + peerDependenciesMeta: + "@storybook/mdx2-csf": + optional: true + checksum: 21da554c88f22ee583cd1956cf440506212d9e8727c7f0a493a92804e58b83d3fcfa18d3081a9fd1b5e8da07a1cfbee15bfa638a13a8fad585eac04fe26f5112 languageName: node linkType: hard -"@storybook/csf@npm:0.0.2--canary.87bc651.0": - version: 0.0.2--canary.87bc651.0 - resolution: "@storybook/csf@npm:0.0.2--canary.87bc651.0" +"@storybook/csf@npm:0.0.2--canary.4566f4d.1": + version: 0.0.2--canary.4566f4d.1 + resolution: "@storybook/csf@npm:0.0.2--canary.4566f4d.1" dependencies: lodash: ^4.17.15 - checksum: 1533ff81f7fb59c06fc608f452de3cfcafba5806da68dd2c88813e8284a7aa1c158daee6a58b028b7ccd03d96974b5d3727deaae1d1d38e304b2a7cdcd8a678d + checksum: afac948e1eae72f020b3708538dd2553524f291bc129ecb2941983668fd62b17448e52f9c9be5b8edeea7a64d96f620bbac78b8acc10ece11b8279930a1deb03 languageName: node linkType: hard -"@storybook/manager-webpack4@npm:6.4.21": - version: 6.4.21 - resolution: "@storybook/manager-webpack4@npm:6.4.21" +"@storybook/docs-tools@npm:6.5.12": + version: 6.5.12 + resolution: "@storybook/docs-tools@npm:6.5.12" + dependencies: + "@babel/core": ^7.12.10 + "@storybook/csf": 0.0.2--canary.4566f4d.1 + "@storybook/store": 6.5.12 + core-js: ^3.8.2 + doctrine: ^3.0.0 + lodash: ^4.17.21 + regenerator-runtime: ^0.13.7 + checksum: 9433b0bc74e739f37d4be857e366d74e56566cdf27f72f462eb09a6e84713aadc8c768e075fbe7a062be104bb1536c14b8dea1e890917ca94b1580e71dbe60be + languageName: node + linkType: hard + +"@storybook/manager-webpack4@npm:6.5.12": + version: 6.5.12 + resolution: "@storybook/manager-webpack4@npm:6.5.12" dependencies: "@babel/core": ^7.12.10 "@babel/plugin-transform-template-literals": ^7.12.1 "@babel/preset-react": ^7.12.10 - "@storybook/addons": 6.4.21 - "@storybook/core-client": 6.4.21 - "@storybook/core-common": 6.4.21 - "@storybook/node-logger": 6.4.21 - "@storybook/theming": 6.4.21 - "@storybook/ui": 6.4.21 - "@types/node": ^14.0.10 + "@storybook/addons": 6.5.12 + "@storybook/core-client": 6.5.12 + "@storybook/core-common": 6.5.12 + "@storybook/node-logger": 6.5.12 + "@storybook/theming": 6.5.12 + "@storybook/ui": 6.5.12 + "@types/node": ^14.0.10 || ^16.0.0 "@types/webpack": ^4.41.26 babel-loader: ^8.0.0 case-sensitive-paths-webpack-plugin: ^2.3.0 @@ -10294,17 +10339,16 @@ __metadata: css-loader: ^3.6.0 express: ^4.17.1 file-loader: ^6.2.0 - file-system-cache: ^1.0.5 find-up: ^5.0.0 fs-extra: ^9.0.1 html-webpack-plugin: ^4.0.0 - node-fetch: ^2.6.1 + node-fetch: ^2.6.7 pnp-webpack-plugin: 1.6.4 read-pkg-up: ^7.0.1 regenerator-runtime: ^0.13.7 resolve-from: ^5.0.0 style-loader: ^1.3.0 - telejson: ^5.3.2 + telejson: ^6.0.8 terser-webpack-plugin: ^4.2.3 ts-dedent: ^2.0.0 url-loader: ^4.1.1 @@ -10313,46 +10357,45 @@ __metadata: webpack-dev-middleware: ^3.7.3 webpack-virtual-modules: ^0.2.2 peerDependencies: - react: ^16.8.0 || ^17.0.0 - react-dom: ^16.8.0 || ^17.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 peerDependenciesMeta: typescript: optional: true - checksum: c085f6d81a2ba93eed32098efbb3d80637786e4cda71b2ea3e3f2f13044aaf5245e7532cebc39d954e695ba3aea35fff44d2c057731bfbcf08666a0252082b15 + checksum: 89c6ab508a930def13403275201e1e7efd667a25f0e04a6a4fe83e83d8a77065309f11c6ba183bb412072b80580e232365789d2317ae9c1e92df92c4061752be languageName: node linkType: hard -"@storybook/manager-webpack5@npm:6.4.21": - version: 6.4.21 - resolution: "@storybook/manager-webpack5@npm:6.4.21" +"@storybook/manager-webpack5@npm:6.5.12": + version: 6.5.12 + resolution: "@storybook/manager-webpack5@npm:6.5.12" dependencies: "@babel/core": ^7.12.10 "@babel/plugin-transform-template-literals": ^7.12.1 "@babel/preset-react": ^7.12.10 - "@storybook/addons": 6.4.21 - "@storybook/core-client": 6.4.21 - "@storybook/core-common": 6.4.21 - "@storybook/node-logger": 6.4.21 - "@storybook/theming": 6.4.21 - "@storybook/ui": 6.4.21 - "@types/node": ^14.0.10 + "@storybook/addons": 6.5.12 + "@storybook/core-client": 6.5.12 + "@storybook/core-common": 6.5.12 + "@storybook/node-logger": 6.5.12 + "@storybook/theming": 6.5.12 + "@storybook/ui": 6.5.12 + "@types/node": ^14.0.10 || ^16.0.0 babel-loader: ^8.0.0 case-sensitive-paths-webpack-plugin: ^2.3.0 chalk: ^4.1.0 core-js: ^3.8.2 css-loader: ^5.0.1 express: ^4.17.1 - file-system-cache: ^1.0.5 find-up: ^5.0.0 fs-extra: ^9.0.1 html-webpack-plugin: ^5.0.0 - node-fetch: ^2.6.1 + node-fetch: ^2.6.7 process: ^0.11.10 read-pkg-up: ^7.0.1 regenerator-runtime: ^0.13.7 resolve-from: ^5.0.0 style-loader: ^2.0.0 - telejson: ^5.3.2 + telejson: ^6.0.8 terser-webpack-plugin: ^5.0.3 ts-dedent: ^2.0.0 util-deprecate: ^1.0.2 @@ -10360,47 +10403,93 @@ __metadata: webpack-dev-middleware: ^4.1.0 webpack-virtual-modules: ^0.4.1 peerDependencies: - react: ^16.8.0 || ^17.0.0 - react-dom: ^16.8.0 || ^17.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 peerDependenciesMeta: typescript: optional: true - checksum: 97b154a3e40a9019b2eb2156ad661809d184ae4c53084a0cf15f7b730f6677328302cb6a536f64bc658a255acfe56212e14cee4bfd219fe4ed3a4a19f15109f9 + checksum: 701768cee510e9de024259c88ebd85ebc212d37d9f913fc7a1e13ab8751d7fb579bb99e494a439d6d5388c02e204eea8c8d91d1490b138105b414df8a384b7ae languageName: node linkType: hard -"@storybook/node-logger@npm:6.4.21": - version: 6.4.21 - resolution: "@storybook/node-logger@npm:6.4.21" +"@storybook/mdx1-csf@npm:^0.0.1": + version: 0.0.1 + resolution: "@storybook/mdx1-csf@npm:0.0.1" + dependencies: + "@babel/generator": ^7.12.11 + "@babel/parser": ^7.12.11 + "@babel/preset-env": ^7.12.11 + "@babel/types": ^7.12.11 + "@mdx-js/mdx": ^1.6.22 + "@types/lodash": ^4.14.167 + js-string-escape: ^1.0.1 + loader-utils: ^2.0.0 + lodash: ^4.17.21 + prettier: ">=2.2.1 <=2.3.0" + ts-dedent: ^2.0.0 + checksum: 34f952f4d00d4fbf680aadea53ca0d9b02b10c94ea492a47a6df916474ea1e36d08eece70ffaba760a4cdf6f634a8684360dc49355cf8a1461050b8a470d2666 + languageName: node + linkType: hard + +"@storybook/mdx2-csf@npm:0.0.3": + version: 0.0.3 + resolution: "@storybook/mdx2-csf@npm:0.0.3" + dependencies: + "@babel/generator": ^7.12.11 + "@babel/parser": ^7.12.11 + "@mdx-js/mdx": ^2.0.0 + estree-to-babel: ^4.9.0 + hast-util-to-estree: ^2.0.2 + js-string-escape: ^1.0.1 + loader-utils: ^2.0.0 + lodash: ^4.17.21 + checksum: 70792346109ec929929a3b0c6b3aaa66eb7c687e27f9742b603a679b0bf663e6194cbfa344371024d8d45ee843374bcabac13fc181cf4469f5a41834967aeba0 + languageName: node + linkType: hard + +"@storybook/node-logger@npm:6.5.12": + version: 6.5.12 + resolution: "@storybook/node-logger@npm:6.5.12" dependencies: "@types/npmlog": ^4.1.2 chalk: ^4.1.0 core-js: ^3.8.2 npmlog: ^5.0.1 pretty-hrtime: ^1.0.3 - checksum: d3b37def30185a3cb8df33fa34f4f85b0d152cfb871922e9591cb7c3fc78e481916cf0aaed3ee45631c3f60fea0242cfca46eab8dd2a7180eebd94719f453537 + checksum: 7589477486a25e67d9119e9c363e8bde23e52601043a506ac0d28f4d353f3a228face79b40a2eb0cc0c7c8b05ed084336fef5dcc3213ed4484527c6631eafeb0 languageName: node linkType: hard -"@storybook/postinstall@npm:6.4.21": - version: 6.4.21 - resolution: "@storybook/postinstall@npm:6.4.21" +"@storybook/postinstall@npm:6.5.12": + version: 6.5.12 + resolution: "@storybook/postinstall@npm:6.5.12" dependencies: core-js: ^3.8.2 - checksum: f90c57c85d144e8fd177646fbb19540f109d5f1d399b8dcc7a782048edc97391d8520ef4bbd6ad9e1d577cde61b6d91e5b7e7b9234692202e6b586b7d1fe6e9d + checksum: 0f84be944501d20fb12b554fe46967182fe1824acee40dbcead848c1f29ab3433980ef1cb0cc1c7dffdac7145459f3b38d37b8047d07aa83bee4909aeb27f23a languageName: node linkType: hard -"@storybook/preview-web@npm:6.4.21": - version: 6.4.21 - resolution: "@storybook/preview-web@npm:6.4.21" +"@storybook/preset-scss@npm:1.0.3": + version: 1.0.3 + resolution: "@storybook/preset-scss@npm:1.0.3" + peerDependencies: + css-loader: "*" + sass-loader: "*" + style-loader: "*" + checksum: 4f1cf1f57a4cd277d76afad5fc4f677436dc3ae3753ce549a6395c0aa9f3d9cf58e9d04c7f8b2cccd2e01929ae563764cca03c016c7e3fed4044a6409e8ca8cd + languageName: node + linkType: hard + +"@storybook/preview-web@npm:6.5.12": + version: 6.5.12 + resolution: "@storybook/preview-web@npm:6.5.12" dependencies: - "@storybook/addons": 6.4.21 - "@storybook/channel-postmessage": 6.4.21 - "@storybook/client-logger": 6.4.21 - "@storybook/core-events": 6.4.21 - "@storybook/csf": 0.0.2--canary.87bc651.0 - "@storybook/store": 6.4.21 + "@storybook/addons": 6.5.12 + "@storybook/channel-postmessage": 6.5.12 + "@storybook/client-logger": 6.5.12 + "@storybook/core-events": 6.5.12 + "@storybook/csf": 0.0.2--canary.4566f4d.1 + "@storybook/store": 6.5.12 ansi-to-html: ^0.6.11 core-js: ^3.8.2 global: ^4.4.0 @@ -10412,94 +10501,122 @@ __metadata: unfetch: ^4.2.0 util-deprecate: ^1.0.2 peerDependencies: - react: ^16.8.0 || ^17.0.0 - react-dom: ^16.8.0 || ^17.0.0 - checksum: 686175bcc867962c287e1f35a0d2a78b76bdccc55d7120f04fe3c6d10745588575f561ee7523a58e1129798d1c4e5dbc9faecf0960add89313a6d103a810f5be + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + checksum: e11671fd136042a0ac19be6749f40bcdf858adb6fbc36998eb2c1737fc622c15df233eb04ff3cf555a61a31d32e5218cf9ff3ff9b941b457a8159a8ca54ab2e8 languageName: node linkType: hard -"@storybook/react-docgen-typescript-plugin@npm:1.0.2-canary.253f8c1.0": - version: 1.0.2-canary.253f8c1.0 - resolution: "@storybook/react-docgen-typescript-plugin@npm:1.0.2-canary.253f8c1.0" +"@storybook/react-docgen-typescript-plugin@npm:1.0.2-canary.6.9d540b91e815f8fc2f8829189deb00553559ff63.0": + version: 1.0.2-canary.6.9d540b91e815f8fc2f8829189deb00553559ff63.0 + resolution: "@storybook/react-docgen-typescript-plugin@npm:1.0.2-canary.6.9d540b91e815f8fc2f8829189deb00553559ff63.0" dependencies: debug: ^4.1.1 endent: ^2.0.1 find-cache-dir: ^3.3.1 flat-cache: ^3.0.4 micromatch: ^4.0.2 - react-docgen-typescript: ^2.0.0 + react-docgen-typescript: ^2.1.1 tslib: ^2.0.0 peerDependencies: typescript: ">= 3.x" webpack: ">= 4" - checksum: 7d2d1309e9291fd9c9a776f17df8682036352548384bc213dcf7625ccae770c13db396ec3a07917810651eee91fe4577ee7c1fe913fac416df7d0ae3334ef673 + checksum: 91a3015d384e93d9ffb4def904cad51218eb1a9eaf504c758083f2988a97d8bf8748bc280aa629864eb26fd9f7fc05bd087df95383d719e0c914c722016804b9 languageName: node linkType: hard -"@storybook/react@npm:6.4.21": - version: 6.4.21 - resolution: "@storybook/react@npm:6.4.21" +"@storybook/react@npm:6.5.12": + version: 6.5.12 + resolution: "@storybook/react@npm:6.5.12" dependencies: "@babel/preset-flow": ^7.12.1 "@babel/preset-react": ^7.12.10 - "@pmmmwh/react-refresh-webpack-plugin": ^0.5.1 - "@storybook/addons": 6.4.21 - "@storybook/core": 6.4.21 - "@storybook/core-common": 6.4.21 - "@storybook/csf": 0.0.2--canary.87bc651.0 - "@storybook/node-logger": 6.4.21 - "@storybook/react-docgen-typescript-plugin": 1.0.2-canary.253f8c1.0 + "@pmmmwh/react-refresh-webpack-plugin": ^0.5.3 + "@storybook/addons": 6.5.12 + "@storybook/client-logger": 6.5.12 + "@storybook/core": 6.5.12 + "@storybook/core-common": 6.5.12 + "@storybook/csf": 0.0.2--canary.4566f4d.1 + "@storybook/docs-tools": 6.5.12 + "@storybook/node-logger": 6.5.12 + "@storybook/react-docgen-typescript-plugin": 1.0.2-canary.6.9d540b91e815f8fc2f8829189deb00553559ff63.0 "@storybook/semver": ^7.3.2 - "@storybook/store": 6.4.21 + "@storybook/store": 6.5.12 + "@types/estree": ^0.0.51 + "@types/node": ^14.14.20 || ^16.0.0 "@types/webpack-env": ^1.16.0 + acorn: ^7.4.1 + acorn-jsx: ^5.3.1 + acorn-walk: ^7.2.0 babel-plugin-add-react-displayname: ^0.0.5 - babel-plugin-named-asset-import: ^0.3.1 babel-plugin-react-docgen: ^4.2.1 core-js: ^3.8.2 + escodegen: ^2.0.0 + fs-extra: ^9.0.1 global: ^4.4.0 + html-tags: ^3.1.0 lodash: ^4.17.21 prop-types: ^15.7.2 + react-element-to-jsx-string: ^14.3.4 react-refresh: ^0.11.0 read-pkg-up: ^7.0.1 regenerator-runtime: ^0.13.7 ts-dedent: ^2.0.0 - webpack: 4 + util-deprecate: ^1.0.2 + webpack: ">=4.43.0 <6.0.0" peerDependencies: "@babel/core": ^7.11.5 - react: ^16.8.0 || ^17.0.0 - react-dom: ^16.8.0 || ^17.0.0 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + require-from-string: ^2.0.2 peerDependenciesMeta: "@babel/core": optional: true + "@storybook/builder-webpack4": + optional: true + "@storybook/builder-webpack5": + optional: true + "@storybook/manager-webpack4": + optional: true + "@storybook/manager-webpack5": + optional: true typescript: optional: true bin: build-storybook: bin/build.js start-storybook: bin/index.js storybook-server: bin/index.js - checksum: 42262eb1e017f7b2ced5945af8b0d1179767028ee8e1f88818989dae9c4f8f3046fa97bd98cff72045680de0aeef1c654874aba2ae0570c62f82922d94fdc47a + checksum: 7b762f5b0db2b94d3e492ed45a7566009dc9ff008c9b29db278d6404e1c7c9f419a0114090bf23fc5b3e193a83d74e21f0fe6ba04105eb30f59be1d4c87d652d languageName: node linkType: hard -"@storybook/router@npm:6.4.21": - version: 6.4.21 - resolution: "@storybook/router@npm:6.4.21" +"@storybook/router@npm:6.5.12": + version: 6.5.12 + resolution: "@storybook/router@npm:6.5.12" dependencies: - "@storybook/client-logger": 6.4.21 + "@storybook/client-logger": 6.5.12 core-js: ^3.8.2 - fast-deep-equal: ^3.1.3 - global: ^4.4.0 - history: 5.0.0 - lodash: ^4.17.21 memoizerific: ^1.11.3 qs: ^6.10.0 - react-router: ^6.0.0 - react-router-dom: ^6.0.0 - ts-dedent: ^2.0.0 + regenerator-runtime: ^0.13.7 peerDependencies: - react: ^16.8.0 || ^17.0.0 - react-dom: ^16.8.0 || ^17.0.0 - checksum: bd0ce2c5d58efc6326a02002eeb10535c3a558b40995aa25d7664421ab3e2c79f36eeb824da9a6921b032cd3cdeba87b164f61d8f469a816931ffd92ae7a2087 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + checksum: 545f4b767021b88f82eac69b9356fa5fa3a5866285c3a34fa762abc5743e3280895858aa5c820195d95a04c6768299191d4dd788a7d9fd3f17ff1d8236c0ba75 + languageName: node + linkType: hard + +"@storybook/router@npm:6.5.7": + version: 6.5.7 + resolution: "@storybook/router@npm:6.5.7" + dependencies: + "@storybook/client-logger": 6.5.7 + core-js: ^3.8.2 + regenerator-runtime: ^0.13.7 + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + checksum: 455d17898a5ef1a6caba6d25381c77cdbd00ae98c3fdb5fd0bb9f0b9d0e4a471197fd94de052fb5cfa141d9a3c5fb2d25995c5b2a48eabf43926f782abe2dab3 languageName: node linkType: hard @@ -10515,13 +10632,13 @@ __metadata: languageName: node linkType: hard -"@storybook/source-loader@npm:6.4.21": - version: 6.4.21 - resolution: "@storybook/source-loader@npm:6.4.21" +"@storybook/source-loader@npm:6.5.12": + version: 6.5.12 + resolution: "@storybook/source-loader@npm:6.5.12" dependencies: - "@storybook/addons": 6.4.21 - "@storybook/client-logger": 6.4.21 - "@storybook/csf": 0.0.2--canary.87bc651.0 + "@storybook/addons": 6.5.12 + "@storybook/client-logger": 6.5.12 + "@storybook/csf": 0.0.2--canary.4566f4d.1 core-js: ^3.8.2 estraverse: ^5.2.0 global: ^4.4.0 @@ -10530,20 +10647,20 @@ __metadata: prettier: ">=2.2.1 <=2.3.0" regenerator-runtime: ^0.13.7 peerDependencies: - react: ^16.8.0 || ^17.0.0 - react-dom: ^16.8.0 || ^17.0.0 - checksum: 21aefe8cdfc88d598838b2e5c4814b29d38b263ca27071c450ba9f28942265c533ee5c8bcc0613d98600e63a1a3c6f7d6c7379b1b9829127a1fcd32031e7d293 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + checksum: ad6b0774877678d8495e7afaeb820adbc2d1b091df5678da39123eca875cc30fe41f013c2db0a4c5f7614529dc46be00cb165484e65a960d3fe7657b04cf418f languageName: node linkType: hard -"@storybook/store@npm:6.4.21": - version: 6.4.21 - resolution: "@storybook/store@npm:6.4.21" +"@storybook/store@npm:6.5.12": + version: 6.5.12 + resolution: "@storybook/store@npm:6.5.12" dependencies: - "@storybook/addons": 6.4.21 - "@storybook/client-logger": 6.4.21 - "@storybook/core-events": 6.4.21 - "@storybook/csf": 0.0.2--canary.87bc651.0 + "@storybook/addons": 6.5.12 + "@storybook/client-logger": 6.5.12 + "@storybook/core-events": 6.5.12 + "@storybook/csf": 0.0.2--canary.4566f4d.1 core-js: ^3.8.2 fast-deep-equal: ^3.1.3 global: ^4.4.0 @@ -10556,71 +10673,109 @@ __metadata: ts-dedent: ^2.0.0 util-deprecate: ^1.0.2 peerDependencies: - react: ^16.8.0 || ^17.0.0 - react-dom: ^16.8.0 || ^17.0.0 - checksum: beaa302c6e3c24e53307f8c8219c1c30c4b8bf5ecb7be46fbb1fafd99c24963052a29c8d46c7b7934ab52da67ae262025246bc8ae47ba21c008769eba1bcd359 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + checksum: 7fab43471c692cda33e9cbb7abf8a932bf922bd01bf26c56a3dd909f57ff0f26a80c6456a41c5be01191bb818536f16f5c98617d263b49a60e432b0acca07949 languageName: node linkType: hard -"@storybook/theming@npm:6.4.21": - version: 6.4.21 - resolution: "@storybook/theming@npm:6.4.21" +"@storybook/store@npm:6.5.7": + version: 6.5.7 + resolution: "@storybook/store@npm:6.5.7" dependencies: - "@emotion/core": ^10.1.1 - "@emotion/is-prop-valid": ^0.8.6 - "@emotion/styled": ^10.0.27 - "@storybook/client-logger": 6.4.21 + "@storybook/addons": 6.5.7 + "@storybook/client-logger": 6.5.7 + "@storybook/core-events": 6.5.7 + "@storybook/csf": 0.0.2--canary.4566f4d.1 core-js: ^3.8.2 - deep-object-diff: ^1.1.0 - emotion-theming: ^10.0.27 - global: ^4.4.0 - memoizerific: ^1.11.3 - polished: ^4.0.5 - resolve-from: ^5.0.0 - ts-dedent: ^2.0.0 - peerDependencies: - react: ^16.8.0 || ^17.0.0 - react-dom: ^16.8.0 || ^17.0.0 - checksum: 11ab5d5f1708b648a0ab5c516e8d84ebb165d2fd7167af80ac38a549f40b7b1d0e3ea4e5e2a94bf71fb45f8d4e8cb1d48fee1f63c12d181e8906a7ef149601ea - languageName: node - linkType: hard - -"@storybook/ui@npm:6.4.21": - version: 6.4.21 - resolution: "@storybook/ui@npm:6.4.21" - dependencies: - "@emotion/core": ^10.1.1 - "@storybook/addons": 6.4.21 - "@storybook/api": 6.4.21 - "@storybook/channels": 6.4.21 - "@storybook/client-logger": 6.4.21 - "@storybook/components": 6.4.21 - "@storybook/core-events": 6.4.21 - "@storybook/router": 6.4.21 - "@storybook/semver": ^7.3.2 - "@storybook/theming": 6.4.21 - copy-to-clipboard: ^3.3.1 - core-js: ^3.8.2 - core-js-pure: ^3.8.2 - downshift: ^6.0.15 - emotion-theming: ^10.0.27 - fuse.js: ^3.6.1 + fast-deep-equal: ^3.1.3 global: ^4.4.0 lodash: ^4.17.21 - markdown-to-jsx: ^7.1.3 memoizerific: ^1.11.3 - polished: ^4.0.5 + regenerator-runtime: ^0.13.7 + slash: ^3.0.0 + stable: ^0.1.8 + synchronous-promise: ^2.0.15 + ts-dedent: ^2.0.0 + util-deprecate: ^1.0.2 + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + checksum: a92f14c5741dbf45dcbcaf492bae294b2c9663b58d0a25cdf47c522304d19f7021c4362aebae898670f51f5f559958f625b53a40d269184c0990bd053fbb992e + languageName: node + linkType: hard + +"@storybook/telemetry@npm:6.5.12": + version: 6.5.12 + resolution: "@storybook/telemetry@npm:6.5.12" + dependencies: + "@storybook/client-logger": 6.5.12 + "@storybook/core-common": 6.5.12 + chalk: ^4.1.0 + core-js: ^3.8.2 + detect-package-manager: ^2.0.1 + fetch-retry: ^5.0.2 + fs-extra: ^9.0.1 + global: ^4.4.0 + isomorphic-unfetch: ^3.1.0 + nanoid: ^3.3.1 + read-pkg-up: ^7.0.1 + regenerator-runtime: ^0.13.7 + checksum: fe465e31e20bc271b1b066a1c1fc4ea8b7cdca1858bc875e19d7ad4e7988c0cff084ce822dc0657ecdefafa02a416dd239753c9c197f6758b39d9260964d631c + languageName: node + linkType: hard + +"@storybook/theming@npm:6.5.12, @storybook/theming@npm:^6.0.0": + version: 6.5.12 + resolution: "@storybook/theming@npm:6.5.12" + dependencies: + "@storybook/client-logger": 6.5.12 + core-js: ^3.8.2 + memoizerific: ^1.11.3 + regenerator-runtime: ^0.13.7 + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + checksum: a982ebf88c7e1e21127febd17feebf26ac8d655f0c868bf110cbcaaef87eedb257300087618c525cb654808b590dc4b7b98dd6fec92fd76a040441d86c4b8289 + languageName: node + linkType: hard + +"@storybook/theming@npm:6.5.7": + version: 6.5.7 + resolution: "@storybook/theming@npm:6.5.7" + dependencies: + "@storybook/client-logger": 6.5.7 + core-js: ^3.8.2 + regenerator-runtime: ^0.13.7 + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + checksum: 2739a994a1e34d61d148107d28fd64665f2f6e1a2f8e02157beb64a564871ec2596573ae0f3bd5aed6887656b55befe1d0b3e7198f0730f2e087aee5f749d056 + languageName: node + linkType: hard + +"@storybook/ui@npm:6.5.12": + version: 6.5.12 + resolution: "@storybook/ui@npm:6.5.12" + dependencies: + "@storybook/addons": 6.5.12 + "@storybook/api": 6.5.12 + "@storybook/channels": 6.5.12 + "@storybook/client-logger": 6.5.12 + "@storybook/components": 6.5.12 + "@storybook/core-events": 6.5.12 + "@storybook/router": 6.5.12 + "@storybook/semver": ^7.3.2 + "@storybook/theming": 6.5.12 + core-js: ^3.8.2 + memoizerific: ^1.11.3 qs: ^6.10.0 - react-draggable: ^4.4.3 - react-helmet-async: ^1.0.7 - react-sizeme: ^3.0.1 regenerator-runtime: ^0.13.7 resolve-from: ^5.0.0 - store2: ^2.12.0 peerDependencies: - react: ^16.8.0 || ^17.0.0 - react-dom: ^16.8.0 || ^17.0.0 - checksum: 8db7c619e6e91f8ca2cb6249bcb911be50e0cd3c463ad99b11e85b326449a78b32f78a359d6ebf4fd6b7dd0841bba04a5dd9fbba33d096432b7cc7b1a87d4b92 + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + checksum: 026ddc42d00773ad711824a5374b040b589e8a87b8500db4d6a8cb67263eba0789d6e6afe7fd8e0fcb798380eba210b4225af197f064d3e88ec0bda97a83b28b languageName: node linkType: hard @@ -10927,6 +11082,15 @@ __metadata: languageName: node linkType: hard +"@types/acorn@npm:^4.0.0": + version: 4.0.6 + resolution: "@types/acorn@npm:4.0.6" + dependencies: + "@types/estree": "*" + checksum: 60e1fd28af18d6cb54a93a7231c7c18774a9a8739c9b179e9e8750dca631e10cbef2d82b02830ea3f557b1d121e6406441e9e1250bd492dc81d4b3456e76e4d4 + languageName: node + linkType: hard + "@types/angular-route@npm:1.7.2": version: 1.7.2 resolution: "@types/angular-route@npm:1.7.2" @@ -11054,22 +11218,6 @@ __metadata: languageName: node linkType: hard -"@types/color-convert@npm:^2.0.0": - version: 2.0.0 - resolution: "@types/color-convert@npm:2.0.0" - dependencies: - "@types/color-name": "*" - checksum: 027b68665dc2278cc2d83e796ada0a05a08aa5a11297e227c48c7f9f6eac518dec98578ab0072bd211963d3e4b431da70b20ea28d6c3136d0badfd3f9913baee - languageName: node - linkType: hard - -"@types/color-name@npm:*": - version: 1.1.1 - resolution: "@types/color-name@npm:1.1.1" - checksum: b71fcad728cc68abcba1d405742134410c8f8eb3c2ef18113b047afca158ad23a4f2c229bcf71a38f4a818dead375c45b20db121d0e69259c2d81e97a740daa6 - languageName: node - linkType: hard - "@types/command-exists@npm:^1.2.0": version: 1.2.0 resolution: "@types/command-exists@npm:1.2.0" @@ -11451,7 +11599,7 @@ __metadata: languageName: node linkType: hard -"@types/debug@npm:^4.1.7": +"@types/debug@npm:^4.0.0, @types/debug@npm:^4.1.7": version: 4.1.7 resolution: "@types/debug@npm:4.1.7" dependencies: @@ -11536,6 +11684,15 @@ __metadata: languageName: node linkType: hard +"@types/estree-jsx@npm:^1.0.0": + version: 1.0.0 + resolution: "@types/estree-jsx@npm:1.0.0" + dependencies: + "@types/estree": "*" + checksum: 851d7afb63a89fb9ce7822563930660433f29106d72db279ce9c99f791ec996ef21b05adc6f545325cd1745b3041cc86422f0ffa39a06734305b90cfbc871765 + languageName: node + linkType: hard + "@types/estree@npm:*": version: 0.0.50 resolution: "@types/estree@npm:0.0.50" @@ -11557,6 +11714,13 @@ __metadata: languageName: node linkType: hard +"@types/estree@npm:^1.0.0": + version: 1.0.0 + resolution: "@types/estree@npm:1.0.0" + checksum: 910d97fb7092c6738d30a7430ae4786a38542023c6302b95d46f49420b797f21619cdde11fa92b338366268795884111c2eb10356e4bd2c8ad5b92941e9e6443 + languageName: node + linkType: hard + "@types/express-serve-static-core@npm:*, @types/express-serve-static-core@npm:^4.17.18": version: 4.17.24 resolution: "@types/express-serve-static-core@npm:4.17.24" @@ -11897,7 +12061,7 @@ __metadata: languageName: node linkType: hard -"@types/lodash@npm:4.14.182": +"@types/lodash@npm:4.14.182, @types/lodash@npm:^4.14.167": version: 4.14.182 resolution: "@types/lodash@npm:4.14.182" checksum: 7dd137aa9dbabd632408bd37009d984655164fa1ecc3f2b6eb94afe35bf0a5852cbab6183148d883e9c73a958b7fec9a9bcf7c8e45d41195add6a18c34958209 @@ -11943,6 +12107,13 @@ __metadata: languageName: node linkType: hard +"@types/mdx@npm:^2.0.0": + version: 2.0.2 + resolution: "@types/mdx@npm:2.0.2" + checksum: a10b78946019fe78f7dba749e90924c29a59b23171e7c6aa41f3220a491723c14729212b99eb4e9e1f847d5f4a574ddc4e03c49a2621470e9c822082874eeafc + languageName: node + linkType: hard + "@types/mime@npm:^1": version: 1.3.2 resolution: "@types/mime@npm:1.3.2" @@ -12023,10 +12194,10 @@ __metadata: languageName: node linkType: hard -"@types/node@npm:^14.0.10": - version: 14.18.12 - resolution: "@types/node@npm:14.18.12" - checksum: 8a0273caa0584020adb8802784fc7d4f18f05e6c205335b7f3818a91d6b0c22736b9f51da3428d5bc54076ad47f1a4d6d57990a3ce8489a520ac66b2b3ff24bc +"@types/node@npm:^14.0.10 || ^16.0.0, @types/node@npm:^14.14.20 || ^16.0.0": + version: 16.11.38 + resolution: "@types/node@npm:16.11.38" + checksum: 471df020162098602fd77014c458e84f01f7faff3cddcc2b7739312a8b4f103bc0fab3dfc03641233d9f627c47fd82dfabc9b86413ef680e193c36b9aed322e6 languageName: node linkType: hard @@ -12060,13 +12231,6 @@ __metadata: languageName: node linkType: hard -"@types/overlayscrollbars@npm:^1.12.0": - version: 1.12.1 - resolution: "@types/overlayscrollbars@npm:1.12.1" - checksum: 4d539db07ad5a268d6eb8f3af84f64126dd2e99831895f0a7a82839dae6d7405dbb7dacecc0ecd6f6aef403f6c5ae946f9d65dd1fa8fa44f0cb9926f01032f3c - languageName: node - linkType: hard - "@types/papaparse@npm:5.3.2": version: 5.3.2 resolution: "@types/papaparse@npm:5.3.2" @@ -12336,15 +12500,6 @@ __metadata: languageName: node linkType: hard -"@types/react-syntax-highlighter@npm:11.0.5": - version: 11.0.5 - resolution: "@types/react-syntax-highlighter@npm:11.0.5" - dependencies: - "@types/react": "*" - checksum: 8f4dce3eb5c70178c5ec2f7434983d632d02a0371a80c31ea012e37a2b8b2174bee482c3b85764333cbe3bcba9132b95307e23ac56d05d490e485e371bdcea46 - languageName: node - linkType: hard - "@types/react-table@npm:7.7.12": version: 7.7.12 resolution: "@types/react-table@npm:7.7.12" @@ -12742,9 +12897,9 @@ __metadata: linkType: hard "@types/webpack-env@npm:^1.16.0": - version: 1.16.3 - resolution: "@types/webpack-env@npm:1.16.3" - checksum: faefa7c0a75289fb469b9a5ae44059a00009de840e0e62d13b3f837d77647da76808e7839cdc414b8c585969cf6b6a7f290dc2cb437a9ccdf04cb214c68f3223 + version: 1.17.0 + resolution: "@types/webpack-env@npm:1.17.0" + checksum: 9ad4d208c4429c9427191d1f4c92e4c43e530384c17a6bc298acb89003fc47fcde1d8372e50acefa3061e9100e57fd9d616e96def875afd06c0c2afe508f298e languageName: node linkType: hard @@ -13769,7 +13924,7 @@ __metadata: languageName: node linkType: hard -"accepts@npm:~1.3.5, accepts@npm:~1.3.7": +"accepts@npm:~1.3.5": version: 1.3.7 resolution: "accepts@npm:1.3.7" dependencies: @@ -13805,7 +13960,7 @@ __metadata: languageName: node linkType: hard -"acorn-jsx@npm:^5.3.1, acorn-jsx@npm:^5.3.2": +"acorn-jsx@npm:^5.0.0, acorn-jsx@npm:^5.3.1, acorn-jsx@npm:^5.3.2": version: 5.3.2 resolution: "acorn-jsx@npm:5.3.2" peerDependencies: @@ -13855,6 +14010,15 @@ __metadata: languageName: node linkType: hard +"acorn@npm:^8.0.0, acorn@npm:^8.8.0": + version: 8.8.0 + resolution: "acorn@npm:8.8.0" + bin: + acorn: bin/acorn + checksum: 7270ca82b242eafe5687a11fea6e088c960af712683756abf0791b68855ea9cace3057bd5e998ffcef50c944810c1e0ca1da526d02b32110e13c722aa959afdc + languageName: node + linkType: hard + "acorn@npm:^8.0.4, acorn@npm:^8.2.4, acorn@npm:^8.4.1": version: 8.5.0 resolution: "acorn@npm:8.5.0" @@ -13882,15 +14046,6 @@ __metadata: languageName: node linkType: hard -"acorn@npm:^8.8.0": - version: 8.8.0 - resolution: "acorn@npm:8.8.0" - bin: - acorn: bin/acorn - checksum: 7270ca82b242eafe5687a11fea6e088c960af712683756abf0791b68855ea9cace3057bd5e998ffcef50c944810c1e0ca1da526d02b32110e13c722aa959afdc - languageName: node - linkType: hard - "add-dom-event-listener@npm:^1.1.0": version: 1.1.0 resolution: "add-dom-event-listener@npm:1.1.0" @@ -14372,6 +14527,13 @@ __metadata: languageName: node linkType: hard +"array-find-index@npm:^1.0.1": + version: 1.0.2 + resolution: "array-find-index@npm:1.0.2" + checksum: aac128bf369e1ac6c06ff0bb330788371c0e256f71279fb92d745e26fb4b9db8920e485b4ec25e841c93146bf71a34dcdbcefa115e7e0f96927a214d237b7081 + languageName: node + linkType: hard + "array-flatten@npm:1.1.1": version: 1.1.1 resolution: "array-flatten@npm:1.1.1" @@ -14393,20 +14555,7 @@ __metadata: languageName: node linkType: hard -"array-includes@npm:^3.0.3, array-includes@npm:^3.1.3, array-includes@npm:^3.1.4": - version: 3.1.4 - resolution: "array-includes@npm:3.1.4" - dependencies: - call-bind: ^1.0.2 - define-properties: ^1.1.3 - es-abstract: ^1.19.1 - get-intrinsic: ^1.1.1 - is-string: ^1.0.7 - checksum: 69967c38c52698f84b50a7aed5554aadc89c6ac6399b6d92ad061a5952f8423b4bba054c51d40963f791dfa294d7247cdd7988b6b1f2c5861477031c6386e1c0 - languageName: node - linkType: hard - -"array-includes@npm:^3.1.5": +"array-includes@npm:^3.0.3, array-includes@npm:^3.1.5": version: 3.1.5 resolution: "array-includes@npm:3.1.5" dependencies: @@ -14419,6 +14568,19 @@ __metadata: languageName: node linkType: hard +"array-includes@npm:^3.1.3, array-includes@npm:^3.1.4": + version: 3.1.4 + resolution: "array-includes@npm:3.1.4" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.1.3 + es-abstract: ^1.19.1 + get-intrinsic: ^1.1.1 + is-string: ^1.0.7 + checksum: 69967c38c52698f84b50a7aed5554aadc89c6ac6399b6d92ad061a5952f8423b4bba054c51d40963f791dfa294d7247cdd7988b6b1f2c5861477031c6386e1c0 + languageName: node + linkType: hard + "array-tree-filter@npm:^2.1.0": version: 2.1.0 resolution: "array-tree-filter@npm:2.1.0" @@ -14469,18 +14631,7 @@ __metadata: languageName: node linkType: hard -"array.prototype.flat@npm:^1.2.1, array.prototype.flat@npm:^1.2.3": - version: 1.2.5 - resolution: "array.prototype.flat@npm:1.2.5" - dependencies: - call-bind: ^1.0.2 - define-properties: ^1.1.3 - es-abstract: ^1.19.0 - checksum: 9cc6414b111abfc7717e39546e4887b1e5ec74df8f1618d83425deaa95752bf05d475d1d241253b4d88d4a01f8e1bc84845ad5b7cc2047f8db2f614512acd40e - languageName: node - linkType: hard - -"array.prototype.flat@npm:^1.2.5": +"array.prototype.flat@npm:^1.2.1, array.prototype.flat@npm:^1.2.5": version: 1.3.0 resolution: "array.prototype.flat@npm:1.3.0" dependencies: @@ -14492,18 +14643,18 @@ __metadata: languageName: node linkType: hard -"array.prototype.flatmap@npm:^1.2.1, array.prototype.flatmap@npm:^1.2.5": +"array.prototype.flat@npm:^1.2.3": version: 1.2.5 - resolution: "array.prototype.flatmap@npm:1.2.5" + resolution: "array.prototype.flat@npm:1.2.5" dependencies: - call-bind: ^1.0.0 + call-bind: ^1.0.2 define-properties: ^1.1.3 es-abstract: ^1.19.0 - checksum: a14119a28e5687a13cf3fd6756a8e7810563a9e81cd4227e27a25c31d362df47ac72553f06a271fd728741e199047933ad43d561d64a28da0b4e1a26f74e939e + checksum: 9cc6414b111abfc7717e39546e4887b1e5ec74df8f1618d83425deaa95752bf05d475d1d241253b4d88d4a01f8e1bc84845ad5b7cc2047f8db2f614512acd40e languageName: node linkType: hard -"array.prototype.flatmap@npm:^1.3.0": +"array.prototype.flatmap@npm:^1.2.1, array.prototype.flatmap@npm:^1.3.0": version: 1.3.0 resolution: "array.prototype.flatmap@npm:1.3.0" dependencies: @@ -14515,6 +14666,17 @@ __metadata: languageName: node linkType: hard +"array.prototype.flatmap@npm:^1.2.5": + version: 1.2.5 + resolution: "array.prototype.flatmap@npm:1.2.5" + dependencies: + call-bind: ^1.0.0 + define-properties: ^1.1.3 + es-abstract: ^1.19.0 + checksum: a14119a28e5687a13cf3fd6756a8e7810563a9e81cd4227e27a25c31d362df47ac72553f06a271fd728741e199047933ad43d561d64a28da0b4e1a26f74e939e + languageName: node + linkType: hard + "array.prototype.map@npm:^1.0.4": version: 1.0.4 resolution: "array.prototype.map@npm:1.0.4" @@ -14528,6 +14690,19 @@ __metadata: languageName: node linkType: hard +"array.prototype.reduce@npm:^1.0.4": + version: 1.0.4 + resolution: "array.prototype.reduce@npm:1.0.4" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.1.3 + es-abstract: ^1.19.2 + es-array-method-boxes-properly: ^1.0.0 + is-string: ^1.0.7 + checksum: 6a57a1a2d3b77a9543db139cd52211f43a5af8e8271cb3c173be802076e3a6f71204ba8f090f5937ebc0842d5876db282f0f63dffd0e86b153e6e5a45681e4a5 + languageName: node + linkType: hard + "arrify@npm:^1.0.1": version: 1.0.1 resolution: "arrify@npm:1.0.1" @@ -14636,6 +14811,15 @@ __metadata: languageName: node linkType: hard +"astring@npm:^1.8.0": + version: 1.8.3 + resolution: "astring@npm:1.8.3" + bin: + astring: bin/astring + checksum: 72fc85de7420ca6edeee15157fd65c5253a8cb1ced979ba66ecc439fa569f1c1cc242e4c0a9fc5a6380bf73fb5ec894dc65cf1dc0f3d1cab8c707b31df7daa1c + languageName: node + linkType: hard + "async-each@npm:^1.0.1": version: 1.0.3 resolution: "async-each@npm:1.0.3" @@ -14764,9 +14948,9 @@ __metadata: linkType: hard "axe-core@npm:^4.2.0": - version: 4.4.1 - resolution: "axe-core@npm:4.4.1" - checksum: ad14c5b71059dc3d24ef2519b8cd96e98b4a572379396201ce449d1c4262181821d6ca9550df65b22371faf06d28bbe94d391fe5675f2a08e6550f7b5da8416d + version: 4.4.2 + resolution: "axe-core@npm:4.4.2" + checksum: 93fbb36c5ac8ab5e67e49678a6f7be0dc799a9f560edd95cca1f0a8183def8c50205972366b9941a3ea2b20224a1fe230e6d87ef38cb6db70472ed1b694febd1 languageName: node linkType: hard @@ -14991,7 +15175,7 @@ __metadata: languageName: node linkType: hard -"babel-plugin-macros@npm:^2.0.0, babel-plugin-macros@npm:^2.6.1, babel-plugin-macros@npm:^2.8.0": +"babel-plugin-macros@npm:^2.0.0, babel-plugin-macros@npm:^2.6.1": version: 2.8.0 resolution: "babel-plugin-macros@npm:2.8.0" dependencies: @@ -15002,12 +15186,10 @@ __metadata: languageName: node linkType: hard -"babel-plugin-named-asset-import@npm:^0.3.1": - version: 0.3.8 - resolution: "babel-plugin-named-asset-import@npm:0.3.8" - peerDependencies: - "@babel/core": ^7.1.0 - checksum: d1e58df8cb75d91d070feea31087bc989906d3465144bde7e9f3c3690b514a90a55d3aebf3e65e76c5d4c743ecedde5f640f09f43a21fa60f1a5d413cb3f7a67 +"babel-plugin-named-exports-order@npm:^0.0.2": + version: 0.0.2 + resolution: "babel-plugin-named-exports-order@npm:0.0.2" + checksum: d918390a09c0148893ea93bdc9c4fc6a03447c688eaf40bed0f0682d036e985ecee830b90fec2ab149b8dc0cb3220a2c0ac5054e42626bdfe0b436b505b7ef22 languageName: node linkType: hard @@ -15236,6 +15418,13 @@ __metadata: 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" @@ -15345,6 +15534,13 @@ __metadata: languageName: node linkType: hard +"big-integer@npm:^1.6.7": + version: 1.6.51 + resolution: "big-integer@npm:1.6.51" + checksum: 3d444173d1b2e20747e2c175568bedeebd8315b0637ea95d75fd27830d3b8e8ba36c6af40374f36bdaea7b5de376dcada1b07587cb2a79a928fccdb6e6e3c518 + languageName: node + linkType: hard + "big.js@npm:^5.2.2": version: 5.2.2 resolution: "big.js@npm:5.2.2" @@ -15434,7 +15630,7 @@ __metadata: languageName: node linkType: hard -"bluebird@npm:^3.3.5, bluebird@npm:^3.5.5, bluebird@npm:^3.7.2": +"bluebird@npm:^3.5.5, bluebird@npm:^3.7.2": version: 3.7.2 resolution: "bluebird@npm:3.7.2" checksum: 869417503c722e7dc54ca46715f70e15f4d9c602a423a02c825570862d12935be59ed9c7ba34a9b31f186c017c23cac6b54e35446f8353059c101da73eac22ef @@ -15449,27 +15645,9 @@ __metadata: linkType: hard "bn.js@npm:^5.0.0, bn.js@npm:^5.1.1": - version: 5.2.0 - resolution: "bn.js@npm:5.2.0" - checksum: 6117170393200f68b35a061ecbf55d01dd989302e7b3c798a3012354fa638d124f0b2f79e63f77be5556be80322a09c40339eda6413ba7468524c0b6d4b4cb7a - languageName: node - linkType: hard - -"body-parser@npm:1.19.0": - version: 1.19.0 - resolution: "body-parser@npm:1.19.0" - dependencies: - bytes: 3.1.0 - content-type: ~1.0.4 - debug: 2.6.9 - depd: ~1.1.2 - http-errors: 1.7.2 - iconv-lite: 0.4.24 - on-finished: ~2.3.0 - qs: 6.7.0 - raw-body: 2.4.0 - type-is: ~1.6.17 - checksum: 490231b4c89bbd43112762f7ba8e5342c174a6c9f64284a3b0fcabf63277e332f8316765596f1e5b15e4f3a6cf0422e005f4bb3149ed3a224bb025b7a36b9ac1 + version: 5.2.1 + resolution: "bn.js@npm:5.2.1" + checksum: 3dd8c8d38055fedfa95c1d5fc3c99f8dd547b36287b37768db0abab3c239711f88ff58d18d155dd8ad902b0b0cee973747b7ae20ea12a09473272b0201c9edd3 languageName: node linkType: hard @@ -15491,6 +15669,26 @@ __metadata: languageName: node linkType: hard +"body-parser@npm:1.20.0": + version: 1.20.0 + resolution: "body-parser@npm:1.20.0" + dependencies: + bytes: 3.1.2 + content-type: ~1.0.4 + debug: 2.6.9 + depd: 2.0.0 + destroy: 1.2.0 + http-errors: 2.0.0 + iconv-lite: 0.4.24 + on-finished: 2.4.1 + qs: 6.10.3 + raw-body: 2.5.1 + type-is: ~1.6.18 + unpipe: 1.0.0 + checksum: 12fffdeac82fe20dddcab7074215d5156e7d02a69ae90cbe9fee1ca3efa2f28ef52097cbea76685ee0a1509c71d85abd0056a08e612c09077cad6277a644cf88 + languageName: node + linkType: hard + "bonjour-service@npm:^1.0.11": version: 1.0.11 resolution: "bonjour-service@npm:1.0.11" @@ -15526,6 +15724,15 @@ __metadata: languageName: node linkType: hard +"bplist-parser@npm:^0.1.0": + version: 0.1.1 + resolution: "bplist-parser@npm:0.1.1" + dependencies: + big-integer: ^1.6.7 + checksum: 1501d52f009c9f23ecee6855940e84ac55a6120c0f05570b1f51c8d494023416ec12f4d91b5ac97d6c0941d96dd41d7cb0bc1a9c0a02092df5b4b511acb8dda5 + languageName: node + linkType: hard + "brace-expansion@npm:^1.1.7": version: 1.1.11 resolution: "brace-expansion@npm:1.1.11" @@ -15586,6 +15793,13 @@ __metadata: languageName: node linkType: hard +"browser-assert@npm:^1.2.1": + version: 1.2.1 + resolution: "browser-assert@npm:1.2.1" + checksum: 8b2407cd04c1ed592cf892dec35942b7d72635829221e0788c9a16c4d2afa8b7156bc9705b1c4b32c30d88136c576fda3cbcb8f494d6f865264c706ea8798d92 + languageName: node + linkType: hard + "browser-process-hrtime@npm:^1.0.0": version: 1.0.0 resolution: "browser-process-hrtime@npm:1.0.0" @@ -15673,7 +15887,7 @@ __metadata: languageName: node linkType: hard -"browserslist@npm:^4.0.0, browserslist@npm:^4.12.0, browserslist@npm:^4.14.5, browserslist@npm:^4.16.6, browserslist@npm:^4.17.5": +"browserslist@npm:^4.0.0, browserslist@npm:^4.14.5, browserslist@npm:^4.16.6, browserslist@npm:^4.17.5": version: 4.17.5 resolution: "browserslist@npm:4.17.5" dependencies: @@ -15688,6 +15902,21 @@ __metadata: languageName: node linkType: hard +"browserslist@npm:^4.12.0": + version: 4.20.4 + resolution: "browserslist@npm:4.20.4" + dependencies: + caniuse-lite: ^1.0.30001349 + electron-to-chromium: ^1.4.147 + escalade: ^3.1.1 + node-releases: ^2.0.5 + picocolors: ^1.0.0 + bin: + browserslist: cli.js + checksum: 0e56c42da765524e5c31bc9a1f08afaa8d5dba085071137cf21e56dc78d0cf0283764143df4c7d1c0cd18c3187fc9494e1d93fa0255004f0be493251a28635f9 + languageName: node + linkType: hard + "browserslist@npm:^4.18.1, browserslist@npm:^4.19.1": version: 4.19.1 resolution: "browserslist@npm:4.19.1" @@ -15860,13 +16089,6 @@ __metadata: languageName: node linkType: hard -"bytes@npm:3.1.0": - version: 3.1.0 - resolution: "bytes@npm:3.1.0" - checksum: 7c3b21c5d9d44ed455460d5d36a31abc6fa2ce3807964ba60a4b03fd44454c8cf07bb0585af83bfde1c5cc2ea4bbe5897bc3d18cd15e0acf25a3615a35aba2df - languageName: node - linkType: hard - "bytes@npm:3.1.2": version: 3.1.2 resolution: "bytes@npm:3.1.2" @@ -15875,24 +16097,24 @@ __metadata: linkType: hard "c8@npm:^7.6.0": - version: 7.11.0 - resolution: "c8@npm:7.11.0" + version: 7.11.3 + resolution: "c8@npm:7.11.3" dependencies: "@bcoe/v8-coverage": ^0.2.3 - "@istanbuljs/schema": ^0.1.2 + "@istanbuljs/schema": ^0.1.3 find-up: ^5.0.0 foreground-child: ^2.0.0 - istanbul-lib-coverage: ^3.0.1 + istanbul-lib-coverage: ^3.2.0 istanbul-lib-report: ^3.0.0 - istanbul-reports: ^3.0.2 - rimraf: ^3.0.0 + istanbul-reports: ^3.1.4 + rimraf: ^3.0.2 test-exclude: ^6.0.0 - v8-to-istanbul: ^8.0.0 + v8-to-istanbul: ^9.0.0 yargs: ^16.2.0 - yargs-parser: ^20.2.7 + yargs-parser: ^20.2.9 bin: c8: bin/c8.js - checksum: 3576fd62dfbef7ef8ae0ce95349d3b297c3b10fa77902b5067896f40a6a3a4bc89637fb81a5badc6b36b4da3f883edc96172c325629d3ec3e24ff9aefab6dcca + checksum: 9f7272bb5fd3d4f7d1c2f7fb986c1025a09c3afefce168c3ba62497dd6294f887c1678d23736126485ec534263ec6b4ed9b4bd2a05aa8d1682c949c3db1f5359 languageName: node linkType: hard @@ -16057,6 +16279,16 @@ __metadata: languageName: node linkType: hard +"camelcase-keys@npm:^2.0.0": + version: 2.1.0 + resolution: "camelcase-keys@npm:2.1.0" + dependencies: + camelcase: ^2.0.0 + map-obj: ^1.0.0 + checksum: 97d2993da5db44d45e285910c70a54ce7f83a2be05afceaafd9831f7aeaf38a48dcdede5ca3aae2b2694852281d38dc459706e346942c5df0bf755f4133f5c39 + languageName: node + linkType: hard + "camelcase-keys@npm:^6.2.2": version: 6.2.2 resolution: "camelcase-keys@npm:6.2.2" @@ -16068,6 +16300,13 @@ __metadata: languageName: node linkType: hard +"camelcase@npm:^2.0.0": + version: 2.1.1 + resolution: "camelcase@npm:2.1.1" + checksum: 20a3ef08f348de832631d605362ffe447d883ada89617144a82649363ed5860923b021f8e09681624ef774afb93ff3597cfbcf8aaf0574f65af7648f1aea5e50 + languageName: node + linkType: hard + "camelcase@npm:^5.3.1": version: 5.3.1 resolution: "camelcase@npm:5.3.1" @@ -16101,13 +16340,20 @@ __metadata: languageName: node linkType: hard -"caniuse-lite@npm:^1.0.0, caniuse-lite@npm:^1.0.30001109, caniuse-lite@npm:^1.0.30001271, caniuse-lite@npm:^1.0.30001286, caniuse-lite@npm:^1.0.30001317": +"caniuse-lite@npm:^1.0.0, caniuse-lite@npm:^1.0.30001271, caniuse-lite@npm:^1.0.30001286, caniuse-lite@npm:^1.0.30001317": version: 1.0.30001332 resolution: "caniuse-lite@npm:1.0.30001332" checksum: e54182ea42ab3d2ff1440f9a6480292f7ab23c00c188df7ad65586312e4da567e8bedd5cb5fb8f0ff4193dc027a54e17e0b3c0b6db5d5a3fb61c7726ff9c45b3 languageName: node linkType: hard +"caniuse-lite@npm:^1.0.30001109, caniuse-lite@npm:^1.0.30001349": + version: 1.0.30001349 + resolution: "caniuse-lite@npm:1.0.30001349" + checksum: 0095fcbb7ca4ef76227f5c3788c3cdbad3c52a25825c577371ffa73a44d74ff43fc5a849e5fa37c8b4c6237bb5272777085e1f674f9f86fde9aed85201d26f07 + languageName: node + linkType: hard + "caniuse-lite@npm:^1.0.30001332": version: 1.0.30001335 resolution: "caniuse-lite@npm:1.0.30001335" @@ -16175,6 +16421,13 @@ __metadata: languageName: node linkType: hard +"ccount@npm:^2.0.0": + version: 2.0.1 + resolution: "ccount@npm:2.0.1" + checksum: 48193dada54c9e260e0acf57fc16171a225305548f9ad20d5471e0f7a8c026aedd8747091dccb0d900cde7df4e4ddbd235df0d8de4a64c71b12f0d3303eeafd4 + languageName: node + linkType: hard + "centrifuge@npm:3.0.1": version: 3.0.1 resolution: "centrifuge@npm:3.0.1" @@ -16250,6 +16503,13 @@ __metadata: languageName: node linkType: hard +"character-entities-html4@npm:^2.0.0": + version: 2.1.0 + resolution: "character-entities-html4@npm:2.1.0" + checksum: 7034aa7c7fa90309667f6dd50499c8a760c3d3a6fb159adb4e0bada0107d194551cdbad0714302f62d06ce4ed68565c8c2e15fdef2e8f8764eb63fa92b34b11d + languageName: node + linkType: hard + "character-entities-legacy@npm:^1.0.0": version: 1.1.4 resolution: "character-entities-legacy@npm:1.1.4" @@ -16257,6 +16517,13 @@ __metadata: languageName: node linkType: hard +"character-entities-legacy@npm:^3.0.0": + version: 3.0.0 + resolution: "character-entities-legacy@npm:3.0.0" + checksum: 7582af055cb488b626d364b7d7a4e46b06abd526fb63c0e4eb35bcb9c9799cc4f76b39f34fdccef2d1174ac95e53e9ab355aae83227c1a2505877893fce77731 + languageName: node + linkType: hard + "character-entities@npm:^1.0.0": version: 1.2.4 resolution: "character-entities@npm:1.2.4" @@ -16264,6 +16531,13 @@ __metadata: 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 + "character-reference-invalid@npm:^1.0.0": version: 1.1.4 resolution: "character-reference-invalid@npm:1.1.4" @@ -16271,6 +16545,13 @@ __metadata: languageName: node linkType: hard +"character-reference-invalid@npm:^2.0.0": + version: 2.0.1 + resolution: "character-reference-invalid@npm:2.0.1" + checksum: 98d3b1a52ae510b7329e6ee7f6210df14f1e318c5415975d4c9e7ee0ef4c07875d47c6e74230c64551f12f556b4a8ccc24d9f3691a2aa197019e72a95e9297ee + languageName: node + linkType: hard + "charcodes@npm:^0.2.0": version: 0.2.0 resolution: "charcodes@npm:0.2.0" @@ -16540,7 +16821,20 @@ __metadata: languageName: node linkType: hard -"cli-table3@npm:^0.6.1, cli-table3@npm:~0.6.1": +"cli-table3@npm:^0.6.1": + version: 0.6.2 + resolution: "cli-table3@npm:0.6.2" + dependencies: + "@colors/colors": 1.5.0 + string-width: ^4.2.0 + dependenciesMeta: + "@colors/colors": + optional: true + checksum: 2f82391698b8a2a2a5e45d2adcfea5d93e557207f90455a8d4c1aac688e9b18a204d9eb4ba1d322fa123b17d64ea3dc5e11de8b005529f3c3e7dbeb27cb4d9be + languageName: node + linkType: hard + +"cli-table3@npm:~0.6.1": version: 0.6.1 resolution: "cli-table3@npm:0.6.1" dependencies: @@ -16827,6 +17121,13 @@ __metadata: languageName: node linkType: hard +"comma-separated-tokens@npm:^2.0.0": + version: 2.0.2 + resolution: "comma-separated-tokens@npm:2.0.2" + checksum: 8fa68ff2605233571536a802a7c712b0c766e0c5088e067be72740054e84d040865eea945c984924ae84932bcc3e25a99f71601220b438e875b5f42b87277767 + languageName: node + linkType: hard + "command-exists@npm:^1.2.9": version: 1.2.9 resolution: "command-exists@npm:1.2.9" @@ -17003,13 +17304,6 @@ __metadata: languageName: node linkType: hard -"compute-scroll-into-view@npm:^1.0.17": - version: 1.0.17 - resolution: "compute-scroll-into-view@npm:1.0.17" - checksum: b20c05a10c37813c5a6e4bf053c00f65c88d23afed7a6bd7a2a69e05e2ffc2df3483ecfe407d36bf16b8cec8be21ae1966c9c523093a03117e567156cd79a51e - languageName: node - linkType: hard - "concat-map@npm:0.0.1": version: 0.0.1 resolution: "concat-map@npm:0.0.1" @@ -17079,15 +17373,6 @@ __metadata: languageName: node linkType: hard -"content-disposition@npm:0.5.3": - version: 0.5.3 - resolution: "content-disposition@npm:0.5.3" - dependencies: - safe-buffer: 5.1.2 - checksum: 95bf164c0b0b8199d3f44b7631e51b37f683c6a90b9baa4315bd3d405a6d1bc81b7346f0981046aa004331fb3d7a28b629514d01fc209a5251573fc7e4d33380 - languageName: node - linkType: hard - "content-disposition@npm:0.5.4": version: 0.5.4 resolution: "content-disposition@npm:0.5.4" @@ -17222,13 +17507,6 @@ __metadata: languageName: node linkType: hard -"cookie@npm:0.4.0": - version: 0.4.0 - resolution: "cookie@npm:0.4.0" - checksum: 760384ba0aef329c52523747e36a452b5e51bc49b34160363a6934e7b7df3f93fcc88b35e33450361535d40a92a96412da870e1816aba9aa6cc556a9fedd8492 - languageName: node - linkType: hard - "cookie@npm:0.4.2, cookie@npm:^0.4.2": version: 0.4.2 resolution: "cookie@npm:0.4.2" @@ -17236,6 +17514,13 @@ __metadata: languageName: node linkType: hard +"cookie@npm:0.5.0": + version: 0.5.0 + resolution: "cookie@npm:0.5.0" + checksum: 1f4bd2ca5765f8c9689a7e8954183f5332139eb72b6ff783d8947032ec1fdf43109852c178e21a953a30c0dd42257828185be01b49d1eb1a67fd054ca588a180 + languageName: node + linkType: hard + "copy-anything@npm:^2.0.1": version: 2.0.3 resolution: "copy-anything@npm:2.0.3" @@ -17308,7 +17593,7 @@ __metadata: languageName: node linkType: hard -"core-js-compat@npm:^3.20.2, core-js-compat@npm:^3.21.0": +"core-js-compat@npm:^3.21.0": version: 3.21.0 resolution: "core-js-compat@npm:3.21.0" dependencies: @@ -17338,12 +17623,12 @@ __metadata: linkType: hard "core-js-compat@npm:^3.8.1": - version: 3.19.0 - resolution: "core-js-compat@npm:3.19.0" + version: 3.22.8 + resolution: "core-js-compat@npm:3.22.8" dependencies: - browserslist: ^4.17.5 + browserslist: ^4.20.3 semver: 7.0.0 - checksum: 78a497590bcb85a6836a423640a84a1d4968168a3deb483c5cd7b47bf68862d26167ee9d2ce7887881d11ab6211b4912feb9a84594eba5c79db3068d910c5408 + checksum: 0c82d9110dcb267c2f5547c61b62f8043793d203523048169176b8badf0b73f3792624342b85d9c923df8eb8971b4aa468b160abb81a023d183c5951e4f05a66 languageName: node linkType: hard @@ -17361,13 +17646,6 @@ __metadata: languageName: node linkType: hard -"core-js-pure@npm:^3.8.2": - version: 3.21.1 - resolution: "core-js-pure@npm:3.21.1" - checksum: 00a5dff599b7fb0b30746a638b9d0edbdc0df24ed1580ca56be595fbe3c78c375d37fc4e1bff23627109229702c9ee8ea2587a66b8280eb33b85160aa4e401e9 - languageName: node - linkType: hard - "core-js@npm:3.25.1": version: 3.25.1 resolution: "core-js@npm:3.25.1" @@ -17383,9 +17661,9 @@ __metadata: linkType: hard "core-js@npm:^3.0.4, core-js@npm:^3.6.5, core-js@npm:^3.8.2": - version: 3.21.1 - resolution: "core-js@npm:3.21.1" - checksum: d68eddd831340ad5b24ac29c72fda022a43b17f194c4278b6b875a843283d316502cb4abd07f28631d6ebc4387f66aa06e2b1b3c8fd7e08096a751b5c63f6889 + version: 3.22.8 + resolution: "core-js@npm:3.22.8" + checksum: c79bcfea37920a5da880ad1fc8336355e833c83998bb28cd45cc59eef4d9824dd8d59ccd24d6b18ff88f284d53d9eef021ddbd2b5ab1c6305b01e98c1402e510 languageName: node linkType: hard @@ -18016,6 +18294,15 @@ __metadata: languageName: node linkType: hard +"currently-unhandled@npm:^0.4.1": + version: 0.4.1 + resolution: "currently-unhandled@npm:0.4.1" + dependencies: + array-find-index: ^1.0.1 + checksum: 1f59fe10b5339b54b1a1eee110022f663f3495cf7cf2f480686e89edc7fa8bfe42dbab4b54f85034bc8b092a76cc7becbc2dad4f9adad332ab5831bec39ad540 + languageName: node + linkType: hard + "cyclist@npm:^1.0.1": version: 1.0.1 resolution: "cyclist@npm:1.0.1" @@ -18637,7 +18924,7 @@ __metadata: languageName: node linkType: hard -"debug@npm:4.3.4, debug@npm:^4.3.4": +"debug@npm:4.3.4, debug@npm:^4.0.0, debug@npm:^4.3.4": version: 4.3.4 resolution: "debug@npm:4.3.4" dependencies: @@ -18694,7 +18981,7 @@ __metadata: languageName: node linkType: hard -"decamelize@npm:^1.1.0, decamelize@npm:^1.2.0": +"decamelize@npm:^1.1.0, decamelize@npm:^1.1.2, decamelize@npm:^1.2.0": version: 1.2.0 resolution: "decamelize@npm:1.2.0" checksum: ad8c51a7e7e0720c70ec2eeb1163b66da03e7616d7b98c9ef43cce2416395e84c1e9548dd94f5f6ffecfee9f8b94251fc57121a8b021f2ff2469b2bae247b8aa @@ -18715,6 +19002,15 @@ __metadata: 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 + "decode-uri-component@npm:^0.2.0": version: 0.2.0 resolution: "decode-uri-component@npm:0.2.0" @@ -18743,13 +19039,6 @@ __metadata: languageName: node linkType: hard -"deep-object-diff@npm:^1.1.0": - version: 1.1.7 - resolution: "deep-object-diff@npm:1.1.7" - checksum: 543fb1ae87b138ad260691e6949e72bf7dc144825084b7ad1886bb725d2ace1c19ed1ef1280f1116243e86bf2c6b942f45c670958b1468f644613f28c5dc97ea - languageName: node - linkType: hard - "deepmerge@npm:^4.2.2": version: 4.2.2 resolution: "deepmerge@npm:4.2.2" @@ -18757,6 +19046,19 @@ __metadata: languageName: node linkType: hard +"default-browser-id@npm:^1.0.4": + version: 1.0.4 + resolution: "default-browser-id@npm:1.0.4" + dependencies: + bplist-parser: ^0.1.0 + meow: ^3.1.0 + untildify: ^2.0.0 + bin: + default-browser-id: cli.js + checksum: c6576428ebdd304d209e09c40803c974de3236232fdfa564d82bd1e985246a0d0f0b344f2b207fcbf663b925c20d30ab4d77fbe2755d2be3a6073f12620b9056 + languageName: node + linkType: hard + "default-gateway@npm:^6.0.3": version: 6.0.3 resolution: "default-gateway@npm:6.0.3" @@ -18843,6 +19145,13 @@ __metadata: 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 + "depd@npm:^1.1.2, depd@npm:~1.1.2": version: 1.1.2 resolution: "depd@npm:1.1.2" @@ -18857,6 +19166,13 @@ __metadata: 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 + "des.js@npm:^1.0.0": version: 1.0.1 resolution: "des.js@npm:1.0.1" @@ -18867,6 +19183,13 @@ __metadata: languageName: node linkType: hard +"destroy@npm:1.2.0": + version: 1.2.0 + resolution: "destroy@npm:1.2.0" + checksum: 0acb300b7478a08b92d810ab229d5afe0d2f4399272045ab22affa0d99dbaf12637659411530a6fcd597a9bdac718fc94373a61a95b4651bbc7b83684a565e38 + languageName: node + linkType: hard + "destroy@npm:~1.0.4": version: 1.0.4 resolution: "destroy@npm:1.0.4" @@ -18911,6 +19234,15 @@ __metadata: languageName: node linkType: hard +"detect-package-manager@npm:^2.0.1": + version: 2.0.1 + resolution: "detect-package-manager@npm:2.0.1" + dependencies: + execa: ^5.1.1 + checksum: e72b910182d5ad479198d4235be206ac64a479257b32201bb06f3c842cc34c65ea851d46f72cc1d4bf535bcc6c4b44b5b86bb29fe1192b8c9c07b46883672f28 + languageName: node + linkType: hard + "detect-port-alt@npm:^1.1.6": version: 1.1.6 resolution: "detect-port-alt@npm:1.1.6" @@ -19273,21 +19605,6 @@ __metadata: languageName: node linkType: hard -"downshift@npm:^6.0.15": - version: 6.1.7 - resolution: "downshift@npm:6.1.7" - dependencies: - "@babel/runtime": ^7.14.8 - compute-scroll-into-view: ^1.0.17 - prop-types: ^15.7.2 - react-is: ^17.0.2 - tslib: ^2.3.0 - peerDependencies: - react: ">=16.12.0" - checksum: 0904ed8f285d31ee00e471dcddd57e72468bee354b191167bcaebe690ec292647fe4c31f483665094d750e72dd71e5d7db695acef33ab5dba6a39fed0112bab6 - languageName: node - linkType: hard - "duplexer@npm:^0.1.1, duplexer@npm:^0.1.2": version: 0.1.2 resolution: "duplexer@npm:0.1.2" @@ -19345,6 +19662,13 @@ __metadata: languageName: node linkType: hard +"electron-to-chromium@npm:^1.4.147": + version: 1.4.147 + resolution: "electron-to-chromium@npm:1.4.147" + checksum: a714da8ac6842887e98886026b8eeaee0d2fd6d57f5707b0fc2a2916c1b9d026ca8deeef529fd3b069e96f719495a7467b01a508b881fd90d95aa204a7a92000 + languageName: node + linkType: hard + "electron-to-chromium@npm:^1.4.17": version: 1.4.37 resolution: "electron-to-chromium@npm:1.4.37" @@ -19432,20 +19756,6 @@ __metadata: languageName: node linkType: hard -"emotion-theming@npm:^10.0.27": - version: 10.3.0 - resolution: "emotion-theming@npm:10.3.0" - dependencies: - "@babel/runtime": ^7.5.5 - "@emotion/weak-memoize": 0.2.5 - hoist-non-react-statics: ^3.3.0 - peerDependencies: - "@emotion/core": ^10.0.27 - react: ">=16.3.0" - checksum: 2b0366afadbf60ab8d3d15750f0ac2949a74d580faa42713dad5c4fbe1652abee39e94ed9b228c47869111bf57d960d547da7a5844cd1ab86c9cdbfe62da9e99 - languageName: node - linkType: hard - "emotion@npm:11.0.0": version: 11.0.0 resolution: "emotion@npm:11.0.0" @@ -19677,7 +19987,7 @@ __metadata: languageName: node linkType: hard -"error-ex@npm:^1.3.1": +"error-ex@npm:^1.2.0, error-ex@npm:^1.3.1": version: 1.3.2 resolution: "error-ex@npm:1.3.2" dependencies: @@ -19751,7 +20061,7 @@ __metadata: languageName: node linkType: hard -"es-abstract@npm:^1.19.5": +"es-abstract@npm:^1.19.5, es-abstract@npm:^1.20.1": version: 1.20.1 resolution: "es-abstract@npm:1.20.1" dependencies: @@ -19844,9 +20154,9 @@ __metadata: linkType: hard "es5-shim@npm:^4.5.13": - version: 4.6.5 - resolution: "es5-shim@npm:4.6.5" - checksum: 55556f800b80d6a875bc8342ea4ac99e678718e01f8e4e2744427061fb23de75a54edec8a6a3b0bb2a4a358103db73492d063b44c7938ea2cd2168ce500e4920 + version: 4.6.7 + resolution: "es5-shim@npm:4.6.7" + checksum: f2f60cf3d9c682106c51a70d27d41273d2edb3b90fa8795a2765be4a214574b71ddf9147a7972eb82998d94f96ca015d29f5915efd3af0a6c09673abd4299ee8 languageName: node linkType: hard @@ -19885,6 +20195,13 @@ __metadata: languageName: node linkType: hard +"esbuild-android-64@npm:0.15.10": + version: 0.15.10 + resolution: "esbuild-android-64@npm:0.15.10" + conditions: os=android & cpu=x64 + languageName: node + linkType: hard + "esbuild-android-64@npm:0.15.7": version: 0.15.7 resolution: "esbuild-android-64@npm:0.15.7" @@ -19892,6 +20209,13 @@ __metadata: languageName: node linkType: hard +"esbuild-android-arm64@npm:0.15.10": + version: 0.15.10 + resolution: "esbuild-android-arm64@npm:0.15.10" + conditions: os=android & cpu=arm64 + languageName: node + linkType: hard + "esbuild-android-arm64@npm:0.15.7": version: 0.15.7 resolution: "esbuild-android-arm64@npm:0.15.7" @@ -19899,6 +20223,13 @@ __metadata: languageName: node linkType: hard +"esbuild-darwin-64@npm:0.15.10": + version: 0.15.10 + resolution: "esbuild-darwin-64@npm:0.15.10" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + "esbuild-darwin-64@npm:0.15.7": version: 0.15.7 resolution: "esbuild-darwin-64@npm:0.15.7" @@ -19906,6 +20237,13 @@ __metadata: languageName: node linkType: hard +"esbuild-darwin-arm64@npm:0.15.10": + version: 0.15.10 + resolution: "esbuild-darwin-arm64@npm:0.15.10" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + "esbuild-darwin-arm64@npm:0.15.7": version: 0.15.7 resolution: "esbuild-darwin-arm64@npm:0.15.7" @@ -19913,6 +20251,13 @@ __metadata: languageName: node linkType: hard +"esbuild-freebsd-64@npm:0.15.10": + version: 0.15.10 + resolution: "esbuild-freebsd-64@npm:0.15.10" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + "esbuild-freebsd-64@npm:0.15.7": version: 0.15.7 resolution: "esbuild-freebsd-64@npm:0.15.7" @@ -19920,6 +20265,13 @@ __metadata: languageName: node linkType: hard +"esbuild-freebsd-arm64@npm:0.15.10": + version: 0.15.10 + resolution: "esbuild-freebsd-arm64@npm:0.15.10" + conditions: os=freebsd & cpu=arm64 + languageName: node + linkType: hard + "esbuild-freebsd-arm64@npm:0.15.7": version: 0.15.7 resolution: "esbuild-freebsd-arm64@npm:0.15.7" @@ -19927,6 +20279,13 @@ __metadata: languageName: node linkType: hard +"esbuild-linux-32@npm:0.15.10": + version: 0.15.10 + resolution: "esbuild-linux-32@npm:0.15.10" + conditions: os=linux & cpu=ia32 + languageName: node + linkType: hard + "esbuild-linux-32@npm:0.15.7": version: 0.15.7 resolution: "esbuild-linux-32@npm:0.15.7" @@ -19934,6 +20293,13 @@ __metadata: languageName: node linkType: hard +"esbuild-linux-64@npm:0.15.10": + version: 0.15.10 + resolution: "esbuild-linux-64@npm:0.15.10" + conditions: os=linux & cpu=x64 + languageName: node + linkType: hard + "esbuild-linux-64@npm:0.15.7": version: 0.15.7 resolution: "esbuild-linux-64@npm:0.15.7" @@ -19941,6 +20307,13 @@ __metadata: languageName: node linkType: hard +"esbuild-linux-arm64@npm:0.15.10": + version: 0.15.10 + resolution: "esbuild-linux-arm64@npm:0.15.10" + conditions: os=linux & cpu=arm64 + languageName: node + linkType: hard + "esbuild-linux-arm64@npm:0.15.7": version: 0.15.7 resolution: "esbuild-linux-arm64@npm:0.15.7" @@ -19948,6 +20321,13 @@ __metadata: languageName: node linkType: hard +"esbuild-linux-arm@npm:0.15.10": + version: 0.15.10 + resolution: "esbuild-linux-arm@npm:0.15.10" + conditions: os=linux & cpu=arm + languageName: node + linkType: hard + "esbuild-linux-arm@npm:0.15.7": version: 0.15.7 resolution: "esbuild-linux-arm@npm:0.15.7" @@ -19955,6 +20335,13 @@ __metadata: languageName: node linkType: hard +"esbuild-linux-mips64le@npm:0.15.10": + version: 0.15.10 + resolution: "esbuild-linux-mips64le@npm:0.15.10" + conditions: os=linux & cpu=mips64el + languageName: node + linkType: hard + "esbuild-linux-mips64le@npm:0.15.7": version: 0.15.7 resolution: "esbuild-linux-mips64le@npm:0.15.7" @@ -19962,6 +20349,13 @@ __metadata: languageName: node linkType: hard +"esbuild-linux-ppc64le@npm:0.15.10": + version: 0.15.10 + resolution: "esbuild-linux-ppc64le@npm:0.15.10" + conditions: os=linux & cpu=ppc64 + languageName: node + linkType: hard + "esbuild-linux-ppc64le@npm:0.15.7": version: 0.15.7 resolution: "esbuild-linux-ppc64le@npm:0.15.7" @@ -19969,6 +20363,13 @@ __metadata: languageName: node linkType: hard +"esbuild-linux-riscv64@npm:0.15.10": + version: 0.15.10 + resolution: "esbuild-linux-riscv64@npm:0.15.10" + conditions: os=linux & cpu=riscv64 + languageName: node + linkType: hard + "esbuild-linux-riscv64@npm:0.15.7": version: 0.15.7 resolution: "esbuild-linux-riscv64@npm:0.15.7" @@ -19976,6 +20377,13 @@ __metadata: languageName: node linkType: hard +"esbuild-linux-s390x@npm:0.15.10": + version: 0.15.10 + resolution: "esbuild-linux-s390x@npm:0.15.10" + conditions: os=linux & cpu=s390x + languageName: node + linkType: hard + "esbuild-linux-s390x@npm:0.15.7": version: 0.15.7 resolution: "esbuild-linux-s390x@npm:0.15.7" @@ -19983,6 +20391,29 @@ __metadata: languageName: node linkType: hard +"esbuild-loader@npm:^2.10.0": + version: 2.20.0 + resolution: "esbuild-loader@npm:2.20.0" + dependencies: + esbuild: ^0.15.6 + joycon: ^3.0.1 + json5: ^2.2.0 + loader-utils: ^2.0.0 + tapable: ^2.2.0 + webpack-sources: ^2.2.0 + peerDependencies: + webpack: ^4.40.0 || ^5.0.0 + checksum: 81faee7155b35af1fdef3dffa273a14ec83e56b9efa1efb76cb1eb64964dd738809c147a87ab9d3507de11946eed51fd1ee42d476b2c9654cbda145da0d9479b + languageName: node + linkType: hard + +"esbuild-netbsd-64@npm:0.15.10": + version: 0.15.10 + resolution: "esbuild-netbsd-64@npm:0.15.10" + conditions: os=netbsd & cpu=x64 + languageName: node + linkType: hard + "esbuild-netbsd-64@npm:0.15.7": version: 0.15.7 resolution: "esbuild-netbsd-64@npm:0.15.7" @@ -19990,6 +20421,13 @@ __metadata: languageName: node linkType: hard +"esbuild-openbsd-64@npm:0.15.10": + version: 0.15.10 + resolution: "esbuild-openbsd-64@npm:0.15.10" + conditions: os=openbsd & cpu=x64 + languageName: node + linkType: hard + "esbuild-openbsd-64@npm:0.15.7": version: 0.15.7 resolution: "esbuild-openbsd-64@npm:0.15.7" @@ -19997,6 +20435,13 @@ __metadata: languageName: node linkType: hard +"esbuild-sunos-64@npm:0.15.10": + version: 0.15.10 + resolution: "esbuild-sunos-64@npm:0.15.10" + conditions: os=sunos & cpu=x64 + languageName: node + linkType: hard + "esbuild-sunos-64@npm:0.15.7": version: 0.15.7 resolution: "esbuild-sunos-64@npm:0.15.7" @@ -20004,6 +20449,13 @@ __metadata: languageName: node linkType: hard +"esbuild-windows-32@npm:0.15.10": + version: 0.15.10 + resolution: "esbuild-windows-32@npm:0.15.10" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + "esbuild-windows-32@npm:0.15.7": version: 0.15.7 resolution: "esbuild-windows-32@npm:0.15.7" @@ -20011,6 +20463,13 @@ __metadata: languageName: node linkType: hard +"esbuild-windows-64@npm:0.15.10": + version: 0.15.10 + resolution: "esbuild-windows-64@npm:0.15.10" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + "esbuild-windows-64@npm:0.15.7": version: 0.15.7 resolution: "esbuild-windows-64@npm:0.15.7" @@ -20018,6 +20477,13 @@ __metadata: languageName: node linkType: hard +"esbuild-windows-arm64@npm:0.15.10": + version: 0.15.10 + resolution: "esbuild-windows-arm64@npm:0.15.10" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + "esbuild-windows-arm64@npm:0.15.7": version: 0.15.7 resolution: "esbuild-windows-arm64@npm:0.15.7" @@ -20099,6 +20565,83 @@ __metadata: languageName: node linkType: hard +"esbuild@npm:^0.15.6": + version: 0.15.10 + resolution: "esbuild@npm:0.15.10" + dependencies: + "@esbuild/android-arm": 0.15.10 + "@esbuild/linux-loong64": 0.15.10 + esbuild-android-64: 0.15.10 + esbuild-android-arm64: 0.15.10 + esbuild-darwin-64: 0.15.10 + esbuild-darwin-arm64: 0.15.10 + esbuild-freebsd-64: 0.15.10 + esbuild-freebsd-arm64: 0.15.10 + esbuild-linux-32: 0.15.10 + esbuild-linux-64: 0.15.10 + esbuild-linux-arm: 0.15.10 + esbuild-linux-arm64: 0.15.10 + esbuild-linux-mips64le: 0.15.10 + esbuild-linux-ppc64le: 0.15.10 + esbuild-linux-riscv64: 0.15.10 + esbuild-linux-s390x: 0.15.10 + esbuild-netbsd-64: 0.15.10 + esbuild-openbsd-64: 0.15.10 + esbuild-sunos-64: 0.15.10 + esbuild-windows-32: 0.15.10 + esbuild-windows-64: 0.15.10 + esbuild-windows-arm64: 0.15.10 + dependenciesMeta: + "@esbuild/android-arm": + optional: true + "@esbuild/linux-loong64": + optional: true + esbuild-android-64: + optional: true + esbuild-android-arm64: + optional: true + esbuild-darwin-64: + optional: true + esbuild-darwin-arm64: + optional: true + esbuild-freebsd-64: + optional: true + esbuild-freebsd-arm64: + optional: true + esbuild-linux-32: + optional: true + esbuild-linux-64: + optional: true + esbuild-linux-arm: + optional: true + esbuild-linux-arm64: + optional: true + esbuild-linux-mips64le: + optional: true + esbuild-linux-ppc64le: + optional: true + esbuild-linux-riscv64: + optional: true + esbuild-linux-s390x: + optional: true + esbuild-netbsd-64: + optional: true + esbuild-openbsd-64: + optional: true + esbuild-sunos-64: + optional: true + esbuild-windows-32: + optional: true + esbuild-windows-64: + optional: true + esbuild-windows-arm64: + optional: true + bin: + esbuild: bin/esbuild + checksum: bc2daadb952c527e7ab0a972fd4f79071c9fd3d948cd97290d3de8811b6b7fc0abc43fb20116dffa24dc923550f4fe7b0d930ff6418ae7dfbff3034c1a01d59a + languageName: node + linkType: hard + "escalade@npm:^3.1.1": version: 3.1.1 resolution: "escalade@npm:3.1.1" @@ -20669,6 +21212,64 @@ __metadata: languageName: node linkType: hard +"estree-to-babel@npm:^4.9.0": + version: 4.9.0 + resolution: "estree-to-babel@npm:4.9.0" + dependencies: + "@babel/traverse": ^7.1.6 + "@babel/types": ^7.2.0 + checksum: 82a6338e66cef2a29351de8eb615a3f967deef86087366f175862d8bc6c497ded4b907b69335b818d91046f79c00464b9ba36ac2200dfad91d9e71e776a0fcb8 + languageName: node + linkType: hard + +"estree-util-attach-comments@npm:^2.0.0": + version: 2.1.0 + resolution: "estree-util-attach-comments@npm:2.1.0" + dependencies: + "@types/estree": ^1.0.0 + checksum: 8489b977dc420e4af59b03528487b2963d7bfe2d6d265819231dce5a1a5c389109230be102d4b7b85a86ec64f75a7e70b0f306542d56ec557c83f92ec326738a + languageName: node + linkType: hard + +"estree-util-build-jsx@npm:^2.0.0": + version: 2.2.0 + resolution: "estree-util-build-jsx@npm:2.2.0" + dependencies: + "@types/estree-jsx": ^1.0.0 + estree-util-is-identifier-name: ^2.0.0 + estree-walker: ^3.0.0 + checksum: 639b76f5395df5234e5424e092c583d656418a07075156947b72e69183c01feeb94946e79002117cd7dff374a25115832ab4af4ad449f1f6cac3594c95006aa5 + languageName: node + linkType: hard + +"estree-util-is-identifier-name@npm:^2.0.0": + version: 2.0.1 + resolution: "estree-util-is-identifier-name@npm:2.0.1" + checksum: d91693dc1c8e7f9860e5c73d3f2e0ad4fc484dc9df432086e0432c27c89f1690fe3c63f0d608d11bce77bb026a4edef434c28da5cbad0761d0292741a96b1481 + languageName: node + linkType: hard + +"estree-util-to-js@npm:^1.1.0": + version: 1.1.0 + resolution: "estree-util-to-js@npm:1.1.0" + dependencies: + "@types/estree-jsx": ^1.0.0 + astring: ^1.8.0 + source-map: ^0.7.0 + checksum: 3ce2ef2fd78497fa7a0e5250be0f217af9060c819f7ed4f4739285e4ade4ed244536cb88e8ba1e38986af98d3a9064165122bb1622f2c6d57fe7b241b884fc47 + languageName: node + linkType: hard + +"estree-util-visit@npm:^1.0.0": + version: 1.2.0 + resolution: "estree-util-visit@npm:1.2.0" + dependencies: + "@types/estree-jsx": ^1.0.0 + "@types/unist": ^2.0.0 + checksum: d36a36aed82d6cb00d24615889052e22308ff008191b3760f65f93e9d0b06d3bc448af9f99a685947f1c69fba36d9a412da243b0b026096c66ecd74054c3b090 + languageName: node + linkType: hard + "estree-walker@npm:^1.0.1": version: 1.0.1 resolution: "estree-walker@npm:1.0.1" @@ -20683,6 +21284,13 @@ __metadata: languageName: node linkType: hard +"estree-walker@npm:^3.0.0": + version: 3.0.1 + resolution: "estree-walker@npm:3.0.1" + checksum: 674096950819041f1ee471e63f7aa987f2ed3a3a441cc41a5176e9ed01ea5cfd6487822c3b9c2cddd0e2c8f9d7ef52d32d06147a19b5a9ca9f8ab0c094bd43b9 + languageName: node + linkType: hard + "esutils@npm:^2.0.2": version: 2.0.3 resolution: "esutils@npm:2.0.3" @@ -20884,40 +21492,41 @@ __metadata: linkType: hard "express@npm:^4.17.1": - version: 4.17.1 - resolution: "express@npm:4.17.1" + version: 4.18.1 + resolution: "express@npm:4.18.1" dependencies: - accepts: ~1.3.7 + accepts: ~1.3.8 array-flatten: 1.1.1 - body-parser: 1.19.0 - content-disposition: 0.5.3 + body-parser: 1.20.0 + content-disposition: 0.5.4 content-type: ~1.0.4 - cookie: 0.4.0 + cookie: 0.5.0 cookie-signature: 1.0.6 debug: 2.6.9 - depd: ~1.1.2 + depd: 2.0.0 encodeurl: ~1.0.2 escape-html: ~1.0.3 etag: ~1.8.1 - finalhandler: ~1.1.2 + finalhandler: 1.2.0 fresh: 0.5.2 + http-errors: 2.0.0 merge-descriptors: 1.0.1 methods: ~1.1.2 - on-finished: ~2.3.0 + on-finished: 2.4.1 parseurl: ~1.3.3 path-to-regexp: 0.1.7 - proxy-addr: ~2.0.5 - qs: 6.7.0 + proxy-addr: ~2.0.7 + qs: 6.10.3 range-parser: ~1.2.1 - safe-buffer: 5.1.2 - send: 0.17.1 - serve-static: 1.14.1 - setprototypeof: 1.1.1 - statuses: ~1.5.0 + safe-buffer: 5.2.1 + send: 0.18.0 + serve-static: 1.15.0 + setprototypeof: 1.2.0 + statuses: 2.0.1 type-is: ~1.6.18 utils-merge: 1.0.1 vary: ~1.1.2 - checksum: d964e9e17af331ea6fa2f84999b063bc47189dd71b4a735df83f9126d3bb2b92e830f1cb1d7c2742530eb625e2689d7a9a9c71f0c3cc4dd6015c3cd32a01abd5 + checksum: c3d44c92e48226ef32ec978becfedb0ecf0ca21316bfd33674b3c5d20459840584f2325726a4f17f33d9c99f769636f728982d1c5433a5b6fe6eb95b8cf0c854 languageName: node linkType: hard @@ -21214,6 +21823,13 @@ __metadata: languageName: node linkType: hard +"fetch-retry@npm:^5.0.2": + version: 5.0.2 + resolution: "fetch-retry@npm:5.0.2" + checksum: 888d81e2a872cd47d4e5cf9156e13e7b73cb902a677f882a88fb3d8d5fb029a4238b44b07328dfb7735860b038fdc3d92acbef7f07d8633a314e4809d2f1f9c0 + languageName: node + linkType: hard + "fflate@npm:^0.4.8": version: 0.4.8 resolution: "fflate@npm:0.4.8" @@ -21275,13 +21891,12 @@ __metadata: linkType: hard "file-system-cache@npm:^1.0.5": - version: 1.0.5 - resolution: "file-system-cache@npm:1.0.5" + version: 1.1.0 + resolution: "file-system-cache@npm:1.1.0" dependencies: - bluebird: ^3.3.5 - fs-extra: ^0.30.0 - ramda: ^0.21.0 - checksum: 25dd942d522b95a4165029f78d4a74d82dcb9582b2745dc012d03e1311d98b1012f9b361ef1c79708c66be6cb7201f4f4e96f2dea319ace962d6c9c0f93526ec + fs-extra: ^10.1.0 + ramda: ^0.28.0 + checksum: d60d7aadf2e9d1629c20dd423f9e1fc3a9719f80dc4e08017a1aa06a8f8d8f66cf140a63ab68a72f07edd9684786ce7409ef4177b43ed0209cd6bcdbb39dab00 languageName: node linkType: hard @@ -21320,6 +21935,21 @@ __metadata: languageName: node linkType: hard +"finalhandler@npm:1.2.0": + version: 1.2.0 + resolution: "finalhandler@npm:1.2.0" + dependencies: + debug: 2.6.9 + encodeurl: ~1.0.2 + escape-html: ~1.0.3 + on-finished: 2.4.1 + parseurl: ~1.3.3 + statuses: 2.0.1 + unpipe: ~1.0.0 + checksum: 92effbfd32e22a7dff2994acedbd9bcc3aa646a3e919ea6a53238090e87097f8ef07cced90aa2cc421abdf993aefbdd5b00104d55c7c5479a8d00ed105b45716 + languageName: node + linkType: hard + "finalhandler@npm:~1.1.2": version: 1.1.2 resolution: "finalhandler@npm:1.1.2" @@ -21374,6 +22004,16 @@ __metadata: languageName: node linkType: hard +"find-up@npm:^1.0.0": + version: 1.1.2 + resolution: "find-up@npm:1.1.2" + dependencies: + path-exists: ^2.0.0 + pinkie-promise: ^2.0.0 + checksum: a2cb9f4c9f06ee3a1e92ed71d5aed41ac8ae30aefa568132f6c556fac7678a5035126153b59eaec68da78ac409eef02503b2b059706bdbf232668d7245e3240a + languageName: node + linkType: hard + "find-up@npm:^2.0.0, find-up@npm:^2.1.0": version: 2.1.0 resolution: "find-up@npm:2.1.0" @@ -21541,7 +22181,38 @@ __metadata: languageName: node linkType: hard -"fork-ts-checker-webpack-plugin@npm:^6.0.4, fork-ts-checker-webpack-plugin@npm:^6.5.0": +"fork-ts-checker-webpack-plugin@npm:^6.0.4": + version: 6.5.2 + resolution: "fork-ts-checker-webpack-plugin@npm:6.5.2" + dependencies: + "@babel/code-frame": ^7.8.3 + "@types/json-schema": ^7.0.5 + chalk: ^4.1.0 + chokidar: ^3.4.2 + cosmiconfig: ^6.0.0 + deepmerge: ^4.2.2 + fs-extra: ^9.0.0 + glob: ^7.1.6 + memfs: ^3.1.2 + minimatch: ^3.0.4 + schema-utils: 2.7.0 + semver: ^7.3.2 + tapable: ^1.0.0 + peerDependencies: + eslint: ">= 6" + typescript: ">= 2.7" + vue-template-compiler: "*" + webpack: ">= 4" + peerDependenciesMeta: + eslint: + optional: true + vue-template-compiler: + optional: true + checksum: c823de02ee258a26ea5c0c488b2f1825b941f72292417478689862468a9140b209ad7df52f67bd134228fe9f40e9115b604fc8f88a69338929fe52be869469b6 + languageName: node + linkType: hard + +"fork-ts-checker-webpack-plugin@npm:^6.5.0": version: 6.5.0 resolution: "fork-ts-checker-webpack-plugin@npm:6.5.0" dependencies: @@ -21703,19 +22374,6 @@ __metadata: languageName: node linkType: hard -"fs-extra@npm:^0.30.0": - version: 0.30.0 - resolution: "fs-extra@npm:0.30.0" - dependencies: - graceful-fs: ^4.1.2 - jsonfile: ^2.1.0 - klaw: ^1.0.0 - path-is-absolute: ^1.0.0 - rimraf: ^2.2.8 - checksum: 6edfd65fc813baa27f1603778c0f5ec11f8c5006a20b920437813ee2023eba18aeec8bef1c89b2e6c84f9fc90fdc7c916f4a700466c8c69d22a35d018f2570f0 - languageName: node - linkType: hard - "fs-extra@npm:^10.0.0": version: 10.0.0 resolution: "fs-extra@npm:10.0.0" @@ -21847,13 +22505,6 @@ __metadata: languageName: node linkType: hard -"fuse.js@npm:^3.6.1": - version: 3.6.1 - resolution: "fuse.js@npm:3.6.1" - checksum: 958aa877ace65dc900df776becd39a03df68d7eebc7890b5fd2fc8c5d88e2fff238f60c37f80013ce70e9d9e7ac8efa9f503695fdd23d1eca3cc983797b50191 - languageName: node - linkType: hard - "fuzzaldrin@npm:^2.1.0": version: 2.1.0 resolution: "fuzzaldrin@npm:2.1.0" @@ -22002,6 +22653,13 @@ __metadata: languageName: node linkType: hard +"get-stdin@npm:^4.0.1": + version: 4.0.1 + resolution: "get-stdin@npm:4.0.1" + checksum: 4f73d3fe0516bc1f3dc7764466a68ad7c2ba809397a02f56c2a598120e028430fcff137a648a01876b2adfb486b4bc164119f98f1f7d7c0abd63385bdaa0113f + languageName: node + linkType: hard + "get-stdin@npm:^8.0.0": version: 8.0.0 resolution: "get-stdin@npm:8.0.0" @@ -22318,11 +22976,11 @@ __metadata: linkType: hard "globalthis@npm:^1.0.0": - version: 1.0.2 - resolution: "globalthis@npm:1.0.2" + version: 1.0.3 + resolution: "globalthis@npm:1.0.3" dependencies: define-properties: ^1.1.3 - checksum: 5a5f3c7ab94708260a98106b35946b74bb57f6b2013e39668dc9e8770b80a3418103b63a2b4aa01c31af15fdf6a2940398ffc0a408573c34c2304f928895adff + checksum: fbd7d760dc464c886d0196166d92e5ffb4c84d0730846d6621a39fbbc068aeeb9c8d1421ad330e94b7bca4bb4ea092f5f21f3d36077812af5d098b4dc006c998 languageName: node linkType: hard @@ -22384,7 +23042,7 @@ __metadata: languageName: node linkType: hard -"graceful-fs@npm:^4.1.9, graceful-fs@npm:^4.2.9": +"graceful-fs@npm:^4.2.9": version: 4.2.9 resolution: "graceful-fs@npm:4.2.9" checksum: 68ea4e07ff2c041ada184f9278b830375f8e0b75154e3f080af6b70f66172fabb4108d19b3863a96b53fc068a310b9b6493d86d1291acc5f3861eb4b79d26ad6 @@ -23010,6 +23668,29 @@ __metadata: languageName: node linkType: hard +"hast-util-to-estree@npm:^2.0.0, hast-util-to-estree@npm:^2.0.2": + version: 2.1.0 + resolution: "hast-util-to-estree@npm:2.1.0" + dependencies: + "@types/estree": ^1.0.0 + "@types/estree-jsx": ^1.0.0 + "@types/hast": ^2.0.0 + "@types/unist": ^2.0.0 + comma-separated-tokens: ^2.0.0 + estree-util-attach-comments: ^2.0.0 + estree-util-is-identifier-name: ^2.0.0 + hast-util-whitespace: ^2.0.0 + mdast-util-mdx-expression: ^1.0.0 + mdast-util-mdxjs-esm: ^1.0.0 + property-information: ^6.0.0 + space-separated-tokens: ^2.0.0 + style-to-object: ^0.3.0 + unist-util-position: ^4.0.0 + zwitch: ^2.0.0 + checksum: 1e14cfbfd57ff00ffda48cfef23bcebb6ebbea0385bb03d748a9432591c60f0a69428baaba82375a8cdbc924217ba9e75d30820b3641fdbe12ae62aa6c3f90a7 + languageName: node + linkType: hard + "hast-util-to-parse5@npm:^6.0.0": version: 6.0.0 resolution: "hast-util-to-parse5@npm:6.0.0" @@ -23023,6 +23704,13 @@ __metadata: languageName: node linkType: hard +"hast-util-whitespace@npm:^2.0.0": + version: 2.0.0 + resolution: "hast-util-whitespace@npm:2.0.0" + checksum: abeb5386075bfb0facfce89eed0e13d2cb27a0910cec8fd234b48821a1538387a73fa7f458842e8c404148dc69434acbc10488d75b02817e460652c2c894c024 + languageName: node + linkType: hard + "hastscript@npm:^6.0.0": version: 6.0.0 resolution: "hastscript@npm:6.0.0" @@ -23059,7 +23747,7 @@ __metadata: languageName: node linkType: hard -"highlight.js@npm:^10.1.1, highlight.js@npm:~10.7.0": +"highlight.js@npm:^10.4.1, highlight.js@npm:~10.7.0": version: 10.7.3 resolution: "highlight.js@npm:10.7.3" checksum: defeafcd546b535d710d8efb8e650af9e3b369ef53e28c3dc7893eacfe263200bba4c5fcf43524ae66d5c0c296b1af0870523ceae3e3104d24b7abf6374a4fea @@ -23080,24 +23768,6 @@ __metadata: languageName: node linkType: hard -"history@npm:5.0.0": - version: 5.0.0 - resolution: "history@npm:5.0.0" - dependencies: - "@babel/runtime": ^7.7.6 - checksum: 14eab13619b4d297eeda0ae7adcf2dd8e6cec48fc9fac903b8dfb626337f8f6fc12743c286be819885c71f522daf0e9e7f814aa126ae5e1b01ab4a3d6801b5f5 - languageName: node - linkType: hard - -"history@npm:^5.2.0": - version: 5.3.0 - resolution: "history@npm:5.3.0" - dependencies: - "@babel/runtime": ^7.7.6 - checksum: d73c35df49d19ac172f9547d30a21a26793e83f16a78386d99583b5bf1429cc980799fcf1827eb215d31816a6600684fba9686ce78104e23bd89ec239e7c726f - languageName: node - linkType: hard - "hmac-drbg@npm:^1.0.1": version: 1.0.1 resolution: "hmac-drbg@npm:1.0.1" @@ -23281,14 +23951,7 @@ __metadata: languageName: node linkType: hard -"html-tags@npm:^3.1.0": - version: 3.1.0 - resolution: "html-tags@npm:3.1.0" - checksum: 67587f2d4022390d7bc34b1313773ecb0b0e0c79fb331aa3e20023eb4c862c7188a1ff775d126fcd75f4e4f08f956666a1c57688c4d24d85a77f9d4b1a42f345 - languageName: node - linkType: hard - -"html-tags@npm:^3.2.0": +"html-tags@npm:^3.1.0, html-tags@npm:^3.2.0": version: 3.2.0 resolution: "html-tags@npm:3.2.0" checksum: a0c9e96ac26c84adad9cc66d15d6711a17f60acda8d987218f1d4cbaacd52864939b230e635cce5a1179f3ddab2a12b9231355617dfbae7945fcfec5e96d2041 @@ -23372,19 +24035,6 @@ __metadata: languageName: node linkType: hard -"http-errors@npm:1.7.2": - version: 1.7.2 - resolution: "http-errors@npm:1.7.2" - dependencies: - depd: ~1.1.2 - inherits: 2.0.3 - setprototypeof: 1.1.1 - statuses: ">= 1.5.0 < 2" - toidentifier: 1.0.0 - checksum: 5534b0ae08e77f5a45a2380f500e781f6580c4ff75b816cb1f09f99a290b57e78a518be6d866db1b48cca6b052c09da2c75fc91fb16a2fe3da3c44d9acbb9972 - languageName: node - linkType: hard - "http-errors@npm:1.8.1": version: 1.8.1 resolution: "http-errors@npm:1.8.1" @@ -23398,6 +24048,19 @@ __metadata: languageName: node linkType: hard +"http-errors@npm:2.0.0": + version: 2.0.0 + resolution: "http-errors@npm:2.0.0" + dependencies: + depd: 2.0.0 + inherits: 2.0.4 + setprototypeof: 1.2.0 + statuses: 2.0.1 + toidentifier: 1.0.1 + checksum: 9b0a3782665c52ce9dc658a0d1560bcb0214ba5699e4ea15aefb2a496e2ca83db03ebc42e1cce4ac1f413e4e0d2d736a3fd755772c556a9a06853ba2a0b7d920 + languageName: node + linkType: hard + "http-errors@npm:~1.6.2": version: 1.6.3 resolution: "http-errors@npm:1.6.3" @@ -23410,19 +24073,6 @@ __metadata: languageName: node linkType: hard -"http-errors@npm:~1.7.2": - version: 1.7.3 - resolution: "http-errors@npm:1.7.3" - dependencies: - depd: ~1.1.2 - inherits: 2.0.4 - setprototypeof: 1.1.1 - statuses: ">= 1.5.0 < 2" - toidentifier: 1.0.0 - checksum: a59f359473f4b3ea78305beee90d186268d6075432622a46fb7483059068a2dd4c854a20ac8cd438883127e06afb78c1309168bde6cdfeed1e3700eb42487d99 - languageName: node - linkType: hard - "http-parser-js@npm:>=0.5.1": version: 0.5.6 resolution: "http-parser-js@npm:0.5.6" @@ -23762,6 +24412,15 @@ __metadata: languageName: node linkType: hard +"indent-string@npm:^2.1.0": + version: 2.1.0 + resolution: "indent-string@npm:2.1.0" + dependencies: + repeating: ^2.0.0 + checksum: 2fe7124311435f4d7a98f0a314d8259a4ec47ecb221110a58e2e2073e5f75c8d2b4f775f2ed199598fbe20638917e57423096539455ca8bff8eab113c9bee12c + languageName: node + linkType: hard + "indent-string@npm:^4.0.0": version: 4.0.0 resolution: "indent-string@npm:4.0.0" @@ -23978,6 +24637,13 @@ __metadata: 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 + "ipaddr.js@npm:1.9.1": version: 1.9.1 resolution: "ipaddr.js@npm:1.9.1" @@ -24024,6 +24690,13 @@ __metadata: languageName: node linkType: hard +"is-alphabetical@npm:^2.0.0": + version: 2.0.1 + resolution: "is-alphabetical@npm:2.0.1" + checksum: 56207db8d9de0850f0cd30f4966bf731eb82cedfe496cbc2e97e7c3bacaf66fc54a972d2d08c0d93bb679cb84976a05d24c5ad63de56fabbfc60aadae312edaa + languageName: node + linkType: hard + "is-alphanumerical@npm:^1.0.0": version: 1.0.4 resolution: "is-alphanumerical@npm:1.0.4" @@ -24034,6 +24707,16 @@ __metadata: languageName: node linkType: hard +"is-alphanumerical@npm:^2.0.0": + version: 2.0.1 + resolution: "is-alphanumerical@npm:2.0.1" + dependencies: + is-alphabetical: ^2.0.0 + is-decimal: ^2.0.0 + checksum: 87acc068008d4c9c4e9f5bd5e251041d42e7a50995c77b1499cf6ed248f971aadeddb11f239cabf09f7975ee58cac7a48ffc170b7890076d8d227b24a68663c9 + languageName: node + linkType: hard + "is-arguments@npm:^1.0.4, is-arguments@npm:^1.1.0": version: 1.1.1 resolution: "is-arguments@npm:1.1.1" @@ -24192,6 +24875,13 @@ __metadata: languageName: node linkType: hard +"is-decimal@npm:^2.0.0": + version: 2.0.1 + resolution: "is-decimal@npm:2.0.1" + checksum: 97132de7acdce77caa7b797632970a2ecd649a88e715db0e4dbc00ab0708b5e7574ba5903962c860cd4894a14fd12b100c0c4ac8aed445cf6f55c6cf747a4158 + languageName: node + linkType: hard + "is-descriptor@npm:^0.1.0": version: 0.1.6 resolution: "is-descriptor@npm:0.1.6" @@ -24256,6 +24946,13 @@ __metadata: languageName: node linkType: hard +"is-finite@npm:^1.0.0": + version: 1.1.0 + resolution: "is-finite@npm:1.1.0" + checksum: 532b97ed3d03e04c6bd203984d9e4ba3c0c390efee492bad5d1d1cd1802a68ab27adbd3ef6382f6312bed6c8bb1bd3e325ea79a8dc8fe080ed7a06f5f97b93e7 + languageName: node + linkType: hard + "is-fullwidth-code-point@npm:^1.0.0": version: 1.0.0 resolution: "is-fullwidth-code-point@npm:1.0.0" @@ -24327,6 +25024,13 @@ __metadata: languageName: node linkType: hard +"is-hexadecimal@npm:^2.0.0": + version: 2.0.1 + resolution: "is-hexadecimal@npm:2.0.1" + checksum: 66a2ea85994c622858f063f23eda506db29d92b52580709eb6f4c19550552d4dcf3fb81952e52f7cf972097237959e00adc7bb8c9400cd12886e15bf06145321 + languageName: node + linkType: hard + "is-hotkey@npm:0.1.4": version: 0.1.4 resolution: "is-hotkey@npm:0.1.4" @@ -24484,6 +25188,13 @@ __metadata: 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-plain-object@npm:5.0.0, is-plain-object@npm:^5.0.0": version: 5.0.0 resolution: "is-plain-object@npm:5.0.0" @@ -24516,6 +25227,15 @@ __metadata: languageName: node linkType: hard +"is-reference@npm:^3.0.0": + version: 3.0.0 + resolution: "is-reference@npm:3.0.0" + dependencies: + "@types/estree": "*" + checksum: 408bb3442ff5f90a9740bf578e8fa2863f68bc07ee99b92079a358a34af58341dc7014b054e8cc51a3da5d1ab83f635b6ee1ce2982db7899a128d7a05173898f + languageName: node + linkType: hard + "is-regex@npm:^1.0.5, is-regex@npm:^1.1.2, is-regex@npm:^1.1.4": version: 1.1.4 resolution: "is-regex@npm:1.1.4" @@ -24654,6 +25374,13 @@ __metadata: languageName: node linkType: hard +"is-utf8@npm:^0.2.0": + version: 0.2.1 + resolution: "is-utf8@npm:0.2.1" + checksum: 167ccd2be869fc228cc62c1a28df4b78c6b5485d15a29027d3b5dceb09b383e86a3522008b56dcac14b592b22f0a224388718c2505027a994fd8471465de54b3 + languageName: node + linkType: hard + "is-weakref@npm:^1.0.1": version: 1.0.1 resolution: "is-weakref@npm:1.0.1" @@ -24781,6 +25508,16 @@ __metadata: languageName: node linkType: hard +"isomorphic-unfetch@npm:^3.1.0": + version: 3.1.0 + resolution: "isomorphic-unfetch@npm:3.1.0" + dependencies: + node-fetch: ^2.6.1 + unfetch: ^4.2.0 + checksum: 82b92fe4ec2823a81ab0fc0d11bd94d710e6f9a940d56b3cba31896d4345ec9ffc7949f4ff31ebcae84f6b95f7ebf3474c4c7452b834eb4078ea3f2c37e459c5 + languageName: node + linkType: hard + "isstream@npm:~0.1.2": version: 0.1.2 resolution: "isstream@npm:0.1.2" @@ -24788,7 +25525,7 @@ __metadata: languageName: node linkType: hard -"istanbul-lib-coverage@npm:^3.0.0, istanbul-lib-coverage@npm:^3.0.1, istanbul-lib-coverage@npm:^3.2.0": +"istanbul-lib-coverage@npm:^3.0.0, istanbul-lib-coverage@npm:^3.2.0": version: 3.2.0 resolution: "istanbul-lib-coverage@npm:3.2.0" checksum: a2a545033b9d56da04a8571ed05c8120bf10e9bce01cf8633a3a2b0d1d83dff4ac4fe78d6d5673c27fc29b7f21a41d75f83a36be09f82a61c367b56aa73c1ff9 @@ -24843,16 +25580,6 @@ __metadata: languageName: node linkType: hard -"istanbul-reports@npm:^3.0.2": - version: 3.0.5 - resolution: "istanbul-reports@npm:3.0.5" - dependencies: - html-escaper: ^2.0.0 - istanbul-lib-report: ^3.0.0 - checksum: b167411c4cd551aec39c8275ef42f25e7083caa5a467c1b35f33b19f37211656ebf03f1cbe5c55d691b44398314dcc73be52dc6b7afb13b7a1a02eb65d702a75 - languageName: node - linkType: hard - "istanbul-reports@npm:^3.1.3": version: 3.1.3 resolution: "istanbul-reports@npm:3.1.3" @@ -24863,6 +25590,16 @@ __metadata: languageName: node linkType: hard +"istanbul-reports@npm:^3.1.4": + version: 3.1.4 + resolution: "istanbul-reports@npm:3.1.4" + dependencies: + html-escaper: ^2.0.0 + istanbul-lib-report: ^3.0.0 + checksum: 2132983355710c522f6b26808015cab9a0ee8b9f5ae0db0d3edeff40b886dd83cb670fb123cb7b32dbe59473d7c00cdde2ba6136bc0acdb20a865fccea64dfe1 + languageName: node + linkType: hard + "iterate-iterator@npm:^1.0.1": version: 1.0.2 resolution: "iterate-iterator@npm:1.0.2" @@ -26329,7 +27066,7 @@ __metadata: languageName: node linkType: hard -"json5@npm:2.x, json5@npm:^2.1.2, json5@npm:^2.1.3": +"json5@npm:2.x, json5@npm:^2.1.2": version: 2.2.0 resolution: "json5@npm:2.2.0" dependencies: @@ -26351,7 +27088,7 @@ __metadata: languageName: node linkType: hard -"json5@npm:^2.2.1": +"json5@npm:^2.1.3, json5@npm:^2.2.0, json5@npm:^2.2.1": version: 2.2.1 resolution: "json5@npm:2.2.1" bin: @@ -26367,18 +27104,6 @@ __metadata: languageName: node linkType: hard -"jsonfile@npm:^2.1.0": - version: 2.4.0 - resolution: "jsonfile@npm:2.4.0" - dependencies: - graceful-fs: ^4.1.6 - dependenciesMeta: - graceful-fs: - optional: true - checksum: f5064aabbc9e35530dc471d8b203ae1f40dbe949ddde4391c6f6a6d310619a15f0efdae5587df594d1d70c555193aaeee9d2ed4aec9ffd5767bd5e4e62d49c3d - languageName: node - linkType: hard - "jsonfile@npm:^6.0.1": version: 6.1.0 resolution: "jsonfile@npm:6.1.0" @@ -26576,18 +27301,6 @@ __metadata: languageName: node linkType: hard -"klaw@npm:^1.0.0": - version: 1.3.1 - resolution: "klaw@npm:1.3.1" - dependencies: - graceful-fs: ^4.1.9 - dependenciesMeta: - graceful-fs: - optional: true - checksum: 8f69e4797c26e7c3f2426bfa85f38a3da3c2cb1b4c6bd850d2377aed440d41ce9d806f2885c2e2e224372c56af4b1d43b8a499adecf9a05e7373dc6b8b7c52e4 - languageName: node - linkType: hard - "kleur@npm:^3.0.3": version: 3.0.3 resolution: "kleur@npm:3.0.3" @@ -26595,6 +27308,13 @@ __metadata: 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 + "klona@npm:^2.0.4": version: 2.0.4 resolution: "klona@npm:2.0.4" @@ -26876,6 +27596,19 @@ __metadata: languageName: node linkType: hard +"load-json-file@npm:^1.0.0": + version: 1.1.0 + resolution: "load-json-file@npm:1.1.0" + dependencies: + graceful-fs: ^4.1.2 + parse-json: ^2.2.0 + pify: ^2.0.0 + pinkie-promise: ^2.0.0 + strip-bom: ^2.0.0 + checksum: 0e4e4f380d897e13aa236246a917527ea5a14e4fc34d49e01ce4e7e2a1e08e2740ee463a03fb021c04f594f29a178f4adb994087549d7c1c5315fcd29bf9934b + languageName: node + linkType: hard + "load-json-file@npm:^4.0.0": version: 4.0.0 resolution: "load-json-file@npm:4.0.0" @@ -26914,17 +27647,6 @@ __metadata: languageName: node linkType: hard -"loader-utils@npm:2.0.0, loader-utils@npm:^2.0.0": - version: 2.0.0 - resolution: "loader-utils@npm:2.0.0" - dependencies: - big.js: ^5.2.2 - emojis-list: ^3.0.0 - json5: ^2.1.2 - checksum: 6856423131b50b6f5f259da36f498cfd7fc3c3f8bb17777cf87fdd9159e797d4ba4288d9a96415fd8da62c2906960e88f74711dee72d03a9003bddcd0d364a51 - languageName: node - linkType: hard - "loader-utils@npm:^1.0.2, loader-utils@npm:^1.2.3, loader-utils@npm:^1.4.0": version: 1.4.0 resolution: "loader-utils@npm:1.4.0" @@ -26936,6 +27658,17 @@ __metadata: languageName: node linkType: hard +"loader-utils@npm:^2.0.0": + version: 2.0.0 + resolution: "loader-utils@npm:2.0.0" + dependencies: + big.js: ^5.2.2 + emojis-list: ^3.0.0 + json5: ^2.1.2 + checksum: 6856423131b50b6f5f259da36f498cfd7fc3c3f8bb17777cf87fdd9159e797d4ba4288d9a96415fd8da62c2906960e88f74711dee72d03a9003bddcd0d364a51 + languageName: node + linkType: hard + "loader-utils@npm:^3.2.0": version: 3.2.0 resolution: "loader-utils@npm:3.2.0" @@ -27143,6 +27876,13 @@ __metadata: languageName: node linkType: hard +"longest-streak@npm:^3.0.0": + version: 3.0.1 + resolution: "longest-streak@npm:3.0.1" + checksum: 3b59c4c04ce3c70f137e339c10d574026fa3a711c45dc0e69a63a2c0ac981e57f837e1d5b64b991eee5234c4fa46fa10886a20626fb739ed3b04b77bcf6d14a8 + languageName: node + linkType: hard + "loose-envify@npm:^1.0.0, loose-envify@npm:^1.1.0, loose-envify@npm:^1.2.0, loose-envify@npm:^1.3.1, loose-envify@npm:^1.4.0": version: 1.4.0 resolution: "loose-envify@npm:1.4.0" @@ -27154,6 +27894,16 @@ __metadata: languageName: node linkType: hard +"loud-rejection@npm:^1.0.0": + version: 1.6.0 + resolution: "loud-rejection@npm:1.6.0" + dependencies: + currently-unhandled: ^0.4.1 + signal-exit: ^3.0.0 + checksum: 750e12defde34e8cbf263c2bff16f028a89b56e022ad6b368aa7c39495b5ac33f2349a8d00665a9b6d25c030b376396524d8a31eb0dde98aaa97956d7324f927 + languageName: node + linkType: hard + "lower-case@npm:^2.0.2": version: 2.0.2 resolution: "lower-case@npm:2.0.2" @@ -27163,7 +27913,7 @@ __metadata: languageName: node linkType: hard -"lowlight@npm:^1.14.0": +"lowlight@npm:^1.17.0": version: 1.20.0 resolution: "lowlight@npm:1.20.0" dependencies: @@ -27368,7 +28118,7 @@ __metadata: languageName: node linkType: hard -"map-obj@npm:^1.0.0": +"map-obj@npm:^1.0.0, map-obj@npm:^1.0.1": version: 1.0.1 resolution: "map-obj@npm:1.0.1" checksum: 9949e7baec2a336e63b8d4dc71018c117c3ce6e39d2451ccbfd3b8350c547c4f6af331a4cbe1c83193d7c6b786082b6256bde843db90cb7da2a21e8fcc28afed @@ -27412,12 +28162,10 @@ __metadata: languageName: node linkType: hard -"markdown-to-jsx@npm:^7.1.3": - version: 7.1.6 - resolution: "markdown-to-jsx@npm:7.1.6" - peerDependencies: - react: ">= 0.14.0" - checksum: f7d8375f9871f228f2d0a06055f1d01f82c57cbd93fde2b9cb24ccebde741b9ebc0f4b8c52239f7b192c72e7f587cca4d3e752b731539be1936b3290470d119c +"markdown-extensions@npm:^1.0.0": + version: 1.1.1 + resolution: "markdown-extensions@npm:1.1.1" + checksum: 8a6dd128be1c524049ea6a41a9193715c2835d3d706af4b8b714ff2043a82786dbcd4a8f1fa9ddd28facbc444426c97515aef2d1f3dd11d5e2d63749ba577b1e languageName: node linkType: hard @@ -27475,6 +28223,92 @@ __metadata: languageName: node linkType: hard +"mdast-util-definitions@npm:^5.0.0": + version: 5.1.1 + resolution: "mdast-util-definitions@npm:5.1.1" + dependencies: + "@types/mdast": ^3.0.0 + "@types/unist": ^2.0.0 + unist-util-visit: ^4.0.0 + checksum: f8025e2c35f6f8641528037abe18f492ef100e00a48c92cf78b7a313f9ccdb0e30c6aed0b40539767a3f425be09e78cb0f2f9bc4131fff41ea4664a1a7314a14 + languageName: node + linkType: hard + +"mdast-util-from-markdown@npm:^1.0.0": + version: 1.2.0 + resolution: "mdast-util-from-markdown@npm:1.2.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: fadc3521a3d95f4adbadad462ca27c28b3bfe08740ae158dc0c4a22329bf5593254d98b8fd4024ecad8c47c77ec275454dfacfb907ff1b98ff8f5de25c716d40 + languageName: node + linkType: hard + +"mdast-util-mdx-expression@npm:^1.0.0": + version: 1.3.0 + resolution: "mdast-util-mdx-expression@npm:1.3.0" + dependencies: + "@types/estree-jsx": ^1.0.0 + "@types/hast": ^2.0.0 + "@types/mdast": ^3.0.0 + mdast-util-from-markdown: ^1.0.0 + mdast-util-to-markdown: ^1.0.0 + checksum: 5a49b657f1988d9c95ec763da325a2ccd20121c4f88ad5f9b8c7aa2792ab0dc474fbba22c8d87169f1ac3e717ee817cdc222e7b3db8bbc240bf0b607762eea06 + languageName: node + linkType: hard + +"mdast-util-mdx-jsx@npm:^2.0.0": + version: 2.1.0 + resolution: "mdast-util-mdx-jsx@npm:2.1.0" + dependencies: + "@types/estree-jsx": ^1.0.0 + "@types/hast": ^2.0.0 + "@types/mdast": ^3.0.0 + ccount: ^2.0.0 + mdast-util-to-markdown: ^1.3.0 + parse-entities: ^4.0.0 + stringify-entities: ^4.0.0 + unist-util-remove-position: ^4.0.0 + unist-util-stringify-position: ^3.0.0 + vfile-message: ^3.0.0 + checksum: 40520a299449e4074ff1097789c7372220c9751e0de151566dcc133118d748c2231e29bafcbbf2c3beb3a917a85cfbbaa9195dadfb4122603bad479f93a61dbe + languageName: node + linkType: hard + +"mdast-util-mdx@npm:^2.0.0": + version: 2.0.0 + resolution: "mdast-util-mdx@npm:2.0.0" + dependencies: + mdast-util-mdx-expression: ^1.0.0 + mdast-util-mdx-jsx: ^2.0.0 + mdast-util-mdxjs-esm: ^1.0.0 + checksum: 4744bfbbd337c2a99a3ef339673c549a670d6496e0d3a6d747d2451e112d6fef7d27613549b0bd62a5f92ea7919e3bacd78c731e8a3d80552a09b80896554cf6 + languageName: node + linkType: hard + +"mdast-util-mdxjs-esm@npm:^1.0.0": + version: 1.3.0 + resolution: "mdast-util-mdxjs-esm@npm:1.3.0" + dependencies: + "@types/estree-jsx": ^1.0.0 + "@types/hast": ^2.0.0 + "@types/mdast": ^3.0.0 + mdast-util-from-markdown: ^1.0.0 + mdast-util-to-markdown: ^1.0.0 + checksum: df3902eb884b4f83cebbfe33647f51938b36db54d4539afd884dc83ff43052676cd48df4c382dc986335290f5c691576d1a848da8ffb671b69ade29fe1c317e0 + languageName: node + linkType: hard + "mdast-util-to-hast@npm:10.0.1": version: 10.0.1 resolution: "mdast-util-to-hast@npm:10.0.1" @@ -27491,6 +28325,38 @@ __metadata: languageName: node linkType: hard +"mdast-util-to-hast@npm:^12.1.0": + version: 12.2.4 + resolution: "mdast-util-to-hast@npm:12.2.4" + 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-builder: ^3.0.0 + unist-util-generated: ^2.0.0 + unist-util-position: ^4.0.0 + unist-util-visit: ^4.0.0 + checksum: c9a1c31527590a11ec7a637ae46a8f52b05b457523e9be9c4ca8bcc1efb3eac5ed1575353e97a70fffcf61e40c80d649bee28058fa1509bc1c213eacfa73bc5f + languageName: node + linkType: hard + +"mdast-util-to-markdown@npm:^1.0.0, mdast-util-to-markdown@npm:^1.3.0": + version: 1.3.0 + resolution: "mdast-util-to-markdown@npm:1.3.0" + dependencies: + "@types/mdast": ^3.0.0 + "@types/unist": ^2.0.0 + longest-streak: ^3.0.0 + mdast-util-to-string: ^3.0.0 + micromark-util-decode-string: ^1.0.0 + unist-util-visit: ^4.0.0 + zwitch: ^2.0.0 + checksum: 0ea4fc11b7a49b15d400d50044429c45222cb9bc583553288c7c54704d051f25049233817129ba56a6f581f1e20916e5c540870a80987318747a95b44a36ba3e + languageName: node + linkType: hard + "mdast-util-to-string@npm:^1.0.0": version: 1.1.0 resolution: "mdast-util-to-string@npm:1.1.0" @@ -27498,6 +28364,13 @@ __metadata: languageName: node linkType: hard +"mdast-util-to-string@npm:^3.0.0, mdast-util-to-string@npm:^3.1.0": + version: 3.1.0 + resolution: "mdast-util-to-string@npm:3.1.0" + checksum: f42ddd4e22f2215a75715b92ea6e3149c4ba356e7781d7b94fc86ded1c79cec3f986afeecef3a4a80068c9b224a6520099783a12146b957de24f020a3e47dd29 + languageName: node + linkType: hard + "mdn-data@npm:2.0.14": version: 2.0.14 resolution: "mdn-data@npm:2.0.14" @@ -27538,7 +28411,16 @@ __metadata: languageName: node linkType: hard -"memfs@npm:^3.2.2, memfs@npm:^3.4.1": +"memfs@npm:^3.2.2": + version: 3.4.4 + resolution: "memfs@npm:3.4.4" + dependencies: + fs-monkey: 1.0.3 + checksum: c91d5a3f7e57c6b4a7ddbb28b4ccbce9f6ba15c478d2257d9c495f05ef8ca16ebbe18c8bc0f89dc79aeaba9854c89ac72a09ebfd99aeeeae1d9cd13a57cf4573 + languageName: node + linkType: hard + +"memfs@npm:^3.4.1": version: 3.4.1 resolution: "memfs@npm:3.4.1" dependencies: @@ -27597,6 +28479,24 @@ __metadata: languageName: node linkType: hard +"meow@npm:^3.1.0": + version: 3.7.0 + resolution: "meow@npm:3.7.0" + dependencies: + camelcase-keys: ^2.0.0 + decamelize: ^1.1.2 + loud-rejection: ^1.0.0 + map-obj: ^1.0.1 + minimist: ^1.1.3 + normalize-package-data: ^2.3.4 + object-assign: ^4.0.1 + read-pkg-up: ^1.0.1 + redent: ^1.0.0 + trim-newlines: ^1.0.0 + checksum: 65a412e5d0d643615508007a9292799bb3e4e690597d54c9e98eb0ca3adb7b8ca8899f41ea7cb7d8277129cdcd9a1a60202b31f88e0034e6aaae02894d80999a + languageName: node + linkType: hard + "meow@npm:^8.0.0": version: 8.1.2 resolution: "meow@npm:8.1.2" @@ -27685,6 +28585,347 @@ __metadata: languageName: node linkType: hard +"micromark-core-commonmark@npm:^1.0.0, 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-extension-mdx-expression@npm:^1.0.0": + version: 1.0.3 + resolution: "micromark-extension-mdx-expression@npm:1.0.3" + dependencies: + micromark-factory-mdx-expression: ^1.0.0 + micromark-factory-space: ^1.0.0 + micromark-util-character: ^1.0.0 + micromark-util-events-to-acorn: ^1.0.0 + micromark-util-symbol: ^1.0.0 + micromark-util-types: ^1.0.0 + uvu: ^0.5.0 + checksum: ef4b4137894624a6754b951d3cb7abb20951ca7b37f9ad8a50d2e2b95d0cf880258d71296bfac6be4ff83a8d137b6b657ae852bb6f11f4ca11e5e6d62f1b025d + languageName: node + linkType: hard + +"micromark-extension-mdx-jsx@npm:^1.0.0": + version: 1.0.3 + resolution: "micromark-extension-mdx-jsx@npm:1.0.3" + dependencies: + "@types/acorn": ^4.0.0 + estree-util-is-identifier-name: ^2.0.0 + micromark-factory-mdx-expression: ^1.0.0 + 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 + vfile-message: ^3.0.0 + checksum: 1a5566890aabc52fe96b78e3a3a507dee03a2232e44b9360b00617734e156f934e85bc6a477fbb856c793fe33c9fb7d2207a4f50e680168c0d04ba9c9336d960 + languageName: node + linkType: hard + +"micromark-extension-mdx-md@npm:^1.0.0": + version: 1.0.0 + resolution: "micromark-extension-mdx-md@npm:1.0.0" + dependencies: + micromark-util-types: ^1.0.0 + checksum: b4f205e1d5f0946b4755541ef44ffd0b3be8c7ecfc08d8b139b6a21fbd3ff62d8fdb6b7e6d17bd9a3b610450267f43a41703dc48b341da9addd743a28cdefa64 + languageName: node + linkType: hard + +"micromark-extension-mdxjs-esm@npm:^1.0.0": + version: 1.0.3 + resolution: "micromark-extension-mdxjs-esm@npm:1.0.3" + dependencies: + micromark-core-commonmark: ^1.0.0 + micromark-util-character: ^1.0.0 + micromark-util-events-to-acorn: ^1.0.0 + micromark-util-symbol: ^1.0.0 + micromark-util-types: ^1.0.0 + unist-util-position-from-estree: ^1.1.0 + uvu: ^0.5.0 + vfile-message: ^3.0.0 + checksum: 756074656391a5e5bb96bc8a0e9c1df7d9f7be5299847c9719e6a90552e1c76a11876aa89986ad5da89ab485f776a4a43a61ea3acddd4f865a5cee43ac523ffd + languageName: node + linkType: hard + +"micromark-extension-mdxjs@npm:^1.0.0": + version: 1.0.0 + resolution: "micromark-extension-mdxjs@npm:1.0.0" + dependencies: + acorn: ^8.0.0 + acorn-jsx: ^5.0.0 + micromark-extension-mdx-expression: ^1.0.0 + micromark-extension-mdx-jsx: ^1.0.0 + micromark-extension-mdx-md: ^1.0.0 + micromark-extension-mdxjs-esm: ^1.0.0 + micromark-util-combine-extensions: ^1.0.0 + micromark-util-types: ^1.0.0 + checksum: ba836c6d2dfc67597886e88f533ffa02f2029dbe216a0651f1066e70f8529a700bcc7fa2bc4201ee12fd3d1cd7da7093d5a442442daeb84b27df96aaffb7699c + 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-mdx-expression@npm:^1.0.0": + version: 1.0.6 + resolution: "micromark-factory-mdx-expression@npm:1.0.6" + dependencies: + micromark-factory-space: ^1.0.0 + micromark-util-character: ^1.0.0 + micromark-util-events-to-acorn: ^1.0.0 + micromark-util-symbol: ^1.0.0 + micromark-util-types: ^1.0.0 + unist-util-position-from-estree: ^1.0.0 + uvu: ^0.5.0 + vfile-message: ^3.0.0 + checksum: 7b69f0e77664e9820639cf23c4f01d43aa0e7abd88021c3db428435e3a5a1f9446f8dc5c2a6ed4ac16c6495ca51937609a5c98ff59a62c54be382c2725500b39 + 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-events-to-acorn@npm:^1.0.0": + version: 1.2.0 + resolution: "micromark-util-events-to-acorn@npm:1.2.0" + dependencies: + "@types/acorn": ^4.0.0 + "@types/estree": ^1.0.0 + estree-util-visit: ^1.0.0 + micromark-util-types: ^1.0.0 + uvu: ^0.5.0 + vfile-location: ^4.0.0 + vfile-message: ^3.0.0 + checksum: 422285d68c8e8a57042bf31eefa55a136eec5c1fb021278a7c25d60a000c4e3ddaf140c94065a270499281f79ff59999468b850a461f22b5731fc47eccb2c4c2 + 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.0.10 + resolution: "micromark@npm:3.0.10" + 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: 04663fe0308cccfbf338111b41d3d82d6445d1d2b834c9fc1880e1ea3874c4a3b81adfafe62b0bc7708ba0a86889885ea31b4dbb39f1f72190c3aab46b743bb1 + languageName: node + linkType: hard + "micromatch@npm:4.0.2": version: 4.0.2 resolution: "micromatch@npm:4.0.2" @@ -27755,13 +28996,6 @@ __metadata: languageName: node linkType: hard -"mime-db@npm:1.51.0": - version: 1.51.0 - resolution: "mime-db@npm:1.51.0" - checksum: 613b1ac9d6e725cc24444600b124a7f1ce6c60b1baa654f39a3e260d0995a6dffc5693190217e271af7e2a5612dae19f2a73f3e316707d797a7391165f7ef423 - languageName: node - linkType: hard - "mime-db@npm:1.52.0": version: 1.52.0 resolution: "mime-db@npm:1.52.0" @@ -27778,16 +29012,7 @@ __metadata: languageName: node linkType: hard -"mime-types@npm:^2.1.30": - version: 2.1.34 - resolution: "mime-types@npm:2.1.34" - dependencies: - mime-db: 1.51.0 - checksum: 67013de9e9d6799bde6d669d18785b7e18bcd212e710d3e04a4727f92f67a8ad4e74aee24be28b685adb794944814bde649119b58ee3282ffdbee58f9278d9f3 - languageName: node - linkType: hard - -"mime-types@npm:^2.1.31, mime-types@npm:~2.1.17, mime-types@npm:~2.1.34": +"mime-types@npm:^2.1.30, mime-types@npm:^2.1.31, mime-types@npm:~2.1.17, mime-types@npm:~2.1.34": version: 2.1.35 resolution: "mime-types@npm:2.1.35" dependencies: @@ -27805,7 +29030,7 @@ __metadata: languageName: node linkType: hard -"mime@npm:^2.3.1, mime@npm:^2.4.4": +"mime@npm:^2.3.1": version: 2.5.2 resolution: "mime@npm:2.5.2" bin: @@ -27814,6 +29039,15 @@ __metadata: languageName: node linkType: hard +"mime@npm:^2.4.4": + version: 2.6.0 + resolution: "mime@npm:2.6.0" + bin: + mime: cli.js + checksum: 1497ba7b9f6960694268a557eae24b743fd2923da46ec392b042469f4b901721ba0adcf8b0d3c2677839d0e243b209d76e5edcbd09cfdeffa2dfb6bb4df4b862 + languageName: node + linkType: hard + "mimic-fn@npm:^2.1.0": version: 2.1.0 resolution: "mimic-fn@npm:2.1.0" @@ -27947,7 +29181,7 @@ __metadata: languageName: node linkType: hard -"minimist@npm:^1.1.1, minimist@npm:^1.2.0, minimist@npm:^1.2.5, minimist@npm:^1.2.6": +"minimist@npm:^1.1.1, minimist@npm:^1.1.3, minimist@npm:^1.2.0, minimist@npm:^1.2.5, minimist@npm:^1.2.6": version: 1.2.6 resolution: "minimist@npm:1.2.6" checksum: d15428cd1e11eb14e1233bcfb88ae07ed7a147de251441d61158619dfb32c4d7e9061d09cab4825fdee18ecd6fce323228c8c47b5ba7cd20af378ca4048fb3fb @@ -28097,7 +29331,7 @@ __metadata: languageName: node linkType: hard -"mkdirp@npm:^0.5.1, mkdirp@npm:^0.5.3": +"mkdirp@npm:^0.5.1": version: 0.5.5 resolution: "mkdirp@npm:0.5.5" dependencies: @@ -28108,7 +29342,7 @@ __metadata: languageName: node linkType: hard -"mkdirp@npm:^0.5.5": +"mkdirp@npm:^0.5.3, mkdirp@npm:^0.5.5": version: 0.5.6 resolution: "mkdirp@npm:0.5.6" dependencies: @@ -28265,6 +29499,13 @@ __metadata: 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.0.0": version: 2.0.0 resolution: "ms@npm:2.0.0" @@ -28368,11 +29609,11 @@ __metadata: linkType: hard "nan@npm:^2.12.1": - version: 2.15.0 - resolution: "nan@npm:2.15.0" + version: 2.16.0 + resolution: "nan@npm:2.16.0" dependencies: node-gyp: latest - checksum: 33e1bb4dfca447fe37d4bb5889be55de154828632c8d38646db67293a21afd61ed9909cdf1b886214a64707d935926c4e60e2b09de9edfc2ad58de31d6ce8f39 + checksum: cb16937273ea55b01ea47df244094c12297ce6b29b36e845d349f1f7c268b8d7c5abd126a102c5678a1e1afd0d36bba35ea0cc959e364928ce60561c9306064a languageName: node linkType: hard @@ -28404,15 +29645,6 @@ __metadata: languageName: node linkType: hard -"nanoid@npm:^3.1.23, nanoid@npm:^3.3.1": - version: 3.3.1 - resolution: "nanoid@npm:3.3.1" - bin: - nanoid: bin/nanoid.cjs - checksum: 4ef0969e1bbe866fc223eb32276cbccb0961900bfe79104fa5abe34361979dead8d0e061410a5c03bc3d47455685adf32c09d6f27790f4a6898fb51f7df7ec86 - languageName: node - linkType: hard - "nanoid@npm:^3.1.30": version: 3.1.30 resolution: "nanoid@npm:3.1.30" @@ -28422,6 +29654,15 @@ __metadata: languageName: node linkType: hard +"nanoid@npm:^3.3.1": + version: 3.3.1 + resolution: "nanoid@npm:3.3.1" + bin: + nanoid: bin/nanoid.cjs + checksum: 4ef0969e1bbe866fc223eb32276cbccb0961900bfe79104fa5abe34361979dead8d0e061410a5c03bc3d47455685adf32c09d6f27790f4a6898fb51f7df7ec86 + languageName: node + linkType: hard + "nanoid@npm:^3.3.3, nanoid@npm:^3.3.4": version: 3.3.4 resolution: "nanoid@npm:3.3.4" @@ -28509,9 +29750,9 @@ __metadata: linkType: hard "nested-error-stacks@npm:^2.0.0, nested-error-stacks@npm:^2.1.0": - version: 2.1.0 - resolution: "nested-error-stacks@npm:2.1.0" - checksum: 206ee736f9eb83489cc093d43e7d3024255ec93c66a31eaee58ca14d5ad9d925d813494725dcf5dec264e70cd8430167b7f82a2d00b0dd099f83c78d9ca650fd + version: 2.1.1 + resolution: "nested-error-stacks@npm:2.1.1" + checksum: 5f452fad75db8480b4db584e1602894ff5977f8bf3d2822f7ba5cb7be80e89adf1fffa34dada3347ef313a4288850b4486eb0635b315c32bdfb505577e8880e3 languageName: node linkType: hard @@ -28726,13 +29967,6 @@ __metadata: languageName: node linkType: hard -"node-modules-regexp@npm:^1.0.0": - version: 1.0.0 - resolution: "node-modules-regexp@npm:1.0.0" - checksum: 99541903536c5ce552786f0fca7f06b88df595e62e423c21fa86a1674ee2363dad1f7482d1bec20b4bd9fa5f262f88e6e5cb788fc56411113f2fe2e97783a3a7 - languageName: node - linkType: hard - "node-notifier@npm:10.0.1": version: 10.0.1 resolution: "node-notifier@npm:10.0.1" @@ -28768,6 +30002,13 @@ __metadata: languageName: node linkType: hard +"node-releases@npm:^2.0.5": + version: 2.0.5 + resolution: "node-releases@npm:2.0.5" + checksum: e85d949addd19f8827f32569d2be5751e7812ccf6cc47879d49f79b5234ff4982225e39a3929315f96370823b070640fb04d79fc0ddec8b515a969a03493a42f + languageName: node + linkType: hard + "node-releases@npm:^2.0.6": version: 2.0.6 resolution: "node-releases@npm:2.0.6" @@ -28786,7 +30027,7 @@ __metadata: languageName: node linkType: hard -"normalize-package-data@npm:^2.3.2, normalize-package-data@npm:^2.5.0": +"normalize-package-data@npm:^2.3.2, normalize-package-data@npm:^2.3.4, normalize-package-data@npm:^2.5.0": version: 2.5.0 resolution: "normalize-package-data@npm:2.5.0" dependencies: @@ -29237,7 +30478,7 @@ __metadata: languageName: node linkType: hard -"object.getownpropertydescriptors@npm:^2.0.3, object.getownpropertydescriptors@npm:^2.1.2": +"object.getownpropertydescriptors@npm:^2.0.3": version: 2.1.3 resolution: "object.getownpropertydescriptors@npm:2.1.3" dependencies: @@ -29248,6 +30489,18 @@ __metadata: languageName: node linkType: hard +"object.getownpropertydescriptors@npm:^2.1.2": + version: 2.1.4 + resolution: "object.getownpropertydescriptors@npm:2.1.4" + dependencies: + array.prototype.reduce: ^1.0.4 + call-bind: ^1.0.2 + define-properties: ^1.1.4 + es-abstract: ^1.20.1 + checksum: 988c466fe49fc4f19a28d2d1d894c95c6abfe33c94674ec0b14d96eed71f453c7ad16873d430dc2acbb1760de6d3d2affac4b81237a306012cc4dc49f7539e7f + languageName: node + linkType: hard + "object.hasown@npm:^1.1.0": version: 1.1.0 resolution: "object.hasown@npm:1.1.0" @@ -29333,6 +30586,15 @@ __metadata: languageName: node linkType: hard +"on-finished@npm:2.4.1": + version: 2.4.1 + resolution: "on-finished@npm:2.4.1" + dependencies: + ee-first: 1.1.1 + checksum: d20929a25e7f0bb62f937a425b5edeb4e4cde0540d77ba146ec9357f00b0d497cdb3b9b05b9c8e46222407d1548d08166bff69cc56dfa55ba0e4469228920ff0 + languageName: node + linkType: hard + "on-finished@npm:~2.3.0": version: 2.3.0 resolution: "on-finished@npm:2.3.0" @@ -29458,6 +30720,13 @@ __metadata: languageName: node linkType: hard +"os-homedir@npm:^1.0.0": + version: 1.0.2 + resolution: "os-homedir@npm:1.0.2" + checksum: af609f5a7ab72de2f6ca9be6d6b91a599777afc122ac5cad47e126c1f67c176fe9b52516b9eeca1ff6ca0ab8587fe66208bc85e40a3940125f03cdb91408e9d2 + languageName: node + linkType: hard + "os-tmpdir@npm:~1.0.2": version: 1.0.2 resolution: "os-tmpdir@npm:1.0.2" @@ -29488,13 +30757,6 @@ __metadata: languageName: node linkType: hard -"overlayscrollbars@npm:^1.13.1": - version: 1.13.1 - resolution: "overlayscrollbars@npm:1.13.1" - checksum: 6f3be25b60dd9c2adcb6bd42d51f1ac72a1538247dfa991f5238602fc941ede0ec1fb0f04d4e1367d85ac2e95bdb27d81e05c7e3bfdff585c48a5cd611af9271 - languageName: node - linkType: hard - "p-all@npm:^2.1.0": version: 2.1.0 resolution: "p-all@npm:2.1.0" @@ -29831,6 +31093,22 @@ __metadata: languageName: node linkType: hard +"parse-entities@npm:^4.0.0": + version: 4.0.0 + resolution: "parse-entities@npm:4.0.0" + dependencies: + "@types/unist": ^2.0.0 + character-entities: ^2.0.0 + character-entities-legacy: ^3.0.0 + character-reference-invalid: ^2.0.0 + decode-named-character-reference: ^1.0.0 + is-alphanumerical: ^2.0.0 + is-decimal: ^2.0.0 + is-hexadecimal: ^2.0.0 + checksum: cd9fa53bc056ad8cf8a45494bfd7ce65e8bf6f1b12dcc9a6343376fa529c2012041303c5d0f86babf70afbd13b71c2f219fc3a76fb97d9d559b66578e19cdaf0 + languageName: node + linkType: hard + "parse-headers@npm:^2.0.2": version: 2.0.4 resolution: "parse-headers@npm:2.0.4" @@ -29838,6 +31116,15 @@ __metadata: languageName: node linkType: hard +"parse-json@npm:^2.2.0": + version: 2.2.0 + resolution: "parse-json@npm:2.2.0" + dependencies: + error-ex: ^1.2.0 + checksum: dda78a63e57a47b713a038630868538f718a7ca0cd172a36887b0392ccf544ed0374902eb28f8bf3409e8b71d62b79d17062f8543afccf2745f9b0b2d2bb80ca + languageName: node + linkType: hard + "parse-json@npm:^4.0.0": version: 4.0.0 resolution: "parse-json@npm:4.0.0" @@ -29958,6 +31245,15 @@ __metadata: languageName: node linkType: hard +"path-exists@npm:^2.0.0": + version: 2.1.0 + resolution: "path-exists@npm:2.1.0" + dependencies: + pinkie-promise: ^2.0.0 + checksum: fdb734f1d00f225f7a0033ce6d73bff6a7f76ea08936abf0e5196fa6e54a645103538cd8aedcb90d6d8c3fa3705ded0c58a4da5948ae92aa8834892c1ab44a84 + languageName: node + linkType: hard + "path-exists@npm:^3.0.0": version: 3.0.0 resolution: "path-exists@npm:3.0.0" @@ -30030,6 +31326,17 @@ __metadata: languageName: node linkType: hard +"path-type@npm:^1.0.0": + version: 1.1.0 + resolution: "path-type@npm:1.1.0" + dependencies: + graceful-fs: ^4.1.2 + pify: ^2.0.0 + pinkie-promise: ^2.0.0 + checksum: 59a4b2c0e566baf4db3021a1ed4ec09a8b36fca960a490b54a6bcefdb9987dafe772852982b6011cd09579478a96e57960a01f75fa78a794192853c9d468fc79 + languageName: node + linkType: hard + "path-type@npm:^3.0.0": version: 3.0.0 resolution: "path-type@npm:3.0.0" @@ -30085,6 +31392,16 @@ __metadata: languageName: node linkType: hard +"periscopic@npm:^3.0.0": + version: 3.0.4 + resolution: "periscopic@npm:3.0.4" + dependencies: + estree-walker: ^3.0.0 + is-reference: ^3.0.0 + checksum: 0920ea1b0294c2463b7df858d7f895d0a69f15ec5c7b93d63749e7a8f6d9c065853ebea701305f1756f70310633832cf5c90e43e9363cce51abec44cc2f5c188 + languageName: node + linkType: hard + "picocolors@npm:^0.2.1": version: 0.2.1 resolution: "picocolors@npm:0.2.1" @@ -30122,7 +31439,7 @@ __metadata: languageName: node linkType: hard -"pify@npm:^2.2.0, pify@npm:^2.3.0": +"pify@npm:^2.0.0, pify@npm:^2.2.0, pify@npm:^2.3.0": version: 2.3.0 resolution: "pify@npm:2.3.0" checksum: 9503aaeaf4577acc58642ad1d25c45c6d90288596238fb68f82811c08104c800e5a7870398e9f015d82b44ecbcbef3dc3d4251a1cbb582f6e5959fe09884b2ba @@ -30150,12 +31467,26 @@ __metadata: languageName: node linkType: hard -"pirates@npm:^4.0.1": - version: 4.0.1 - resolution: "pirates@npm:4.0.1" +"pinkie-promise@npm:^2.0.0": + version: 2.0.1 + resolution: "pinkie-promise@npm:2.0.1" dependencies: - node-modules-regexp: ^1.0.0 - checksum: 091e232aac19f0049a681838fa9fcb4af824b5b1eb0e9325aa07b9d13245bfe3e4fa57a7766b9fdcd19cb89f2c15c688b46023be3047cb288023a0c079d3b2a3 + pinkie: ^2.0.0 + checksum: b53a4a2e73bf56b6f421eef711e7bdcb693d6abb474d57c5c413b809f654ba5ee750c6a96dd7225052d4b96c4d053cdcb34b708a86fceed4663303abee52fcca + languageName: node + linkType: hard + +"pinkie@npm:^2.0.0": + version: 2.0.4 + resolution: "pinkie@npm:2.0.4" + checksum: b12b10afea1177595aab036fc220785488f67b4b0fc49e7a27979472592e971614fa1c728e63ad3e7eb748b4ec3c3dbd780819331dad6f7d635c77c10537b9db + languageName: node + linkType: hard + +"pirates@npm:^4.0.1, pirates@npm:^4.0.5": + version: 4.0.5 + resolution: "pirates@npm:4.0.5" + checksum: c9994e61b85260bec6c4fc0307016340d9b0c4f4b6550a957afaaff0c9b1ad58fbbea5cfcf083860a25cb27a375442e2b0edf52e2e1e40e69934e08dcc52d227 languageName: node linkType: hard @@ -30166,13 +31497,6 @@ __metadata: languageName: node linkType: hard -"pirates@npm:^4.0.5": - version: 4.0.5 - resolution: "pirates@npm:4.0.5" - checksum: c9994e61b85260bec6c4fc0307016340d9b0c4f4b6550a957afaaff0c9b1ad58fbbea5cfcf083860a25cb27a375442e2b0edf52e2e1e40e69934e08dcc52d227 - languageName: node - linkType: hard - "pixelmatch@npm:^5.2.1": version: 5.2.1 resolution: "pixelmatch@npm:5.2.1" @@ -30285,12 +31609,12 @@ __metadata: languageName: node linkType: hard -"polished@npm:^4.0.5": - version: 4.1.4 - resolution: "polished@npm:4.1.4" +"polished@npm:^4.2.2": + version: 4.2.2 + resolution: "polished@npm:4.2.2" dependencies: - "@babel/runtime": ^7.16.7 - checksum: 8faa41958df921e1441afc78c31dbe05b09b5b234b2a64ebfae56350c4580105f06e1ef4b3dcb69e86c28b354059e876ced36ba4deb3fb16e67485e1f59753f4 + "@babel/runtime": ^7.17.8 + checksum: 97fb927dc55cd34aeb11b31ae2a3332463f114351c86e8aa6580d7755864a0120164fdc3770e6160c8b1775052f0eda14db9a6e34402cd4b08ab2d658a593725 languageName: node linkType: hard @@ -31135,17 +32459,7 @@ __metadata: languageName: node linkType: hard -"postcss-selector-parser@npm:^6.0.0, postcss-selector-parser@npm:^6.0.2, postcss-selector-parser@npm:^6.0.4, postcss-selector-parser@npm:^6.0.5, postcss-selector-parser@npm:^6.0.6": - version: 6.0.6 - resolution: "postcss-selector-parser@npm:6.0.6" - dependencies: - cssesc: ^3.0.0 - util-deprecate: ^1.0.2 - checksum: 3602758798048bffbd6a97d6f009b32a993d6fd2cc70775bb59593e803d7fa8738822ecffb2fafc745edf7fad297dad53c30d2cfe78446a7d3f4a4a258cb15b2 - languageName: node - linkType: hard - -"postcss-selector-parser@npm:^6.0.10": +"postcss-selector-parser@npm:^6.0.0, postcss-selector-parser@npm:^6.0.10": version: 6.0.10 resolution: "postcss-selector-parser@npm:6.0.10" dependencies: @@ -31155,6 +32469,16 @@ __metadata: languageName: node linkType: hard +"postcss-selector-parser@npm:^6.0.2, postcss-selector-parser@npm:^6.0.4, postcss-selector-parser@npm:^6.0.5, postcss-selector-parser@npm:^6.0.6": + version: 6.0.6 + resolution: "postcss-selector-parser@npm:6.0.6" + dependencies: + cssesc: ^3.0.0 + util-deprecate: ^1.0.2 + checksum: 3602758798048bffbd6a97d6f009b32a993d6fd2cc70775bb59593e803d7fa8738822ecffb2fafc745edf7fad297dad53c30d2cfe78446a7d3f4a4a258cb15b2 + languageName: node + linkType: hard + "postcss-selector-parser@npm:^6.0.9": version: 6.0.9 resolution: "postcss-selector-parser@npm:6.0.9" @@ -31211,7 +32535,7 @@ __metadata: languageName: node linkType: hard -"postcss@npm:8.4.14, postcss@npm:^8.4.12, postcss@npm:^8.4.14": +"postcss@npm:8.4.14, postcss@npm:^8.2.15, postcss@npm:^8.4.12, postcss@npm:^8.4.14": version: 8.4.14 resolution: "postcss@npm:8.4.14" dependencies: @@ -31232,17 +32556,6 @@ __metadata: languageName: node linkType: hard -"postcss@npm:^8.2.15, postcss@npm:^8.4.7": - version: 8.4.7 - resolution: "postcss@npm:8.4.7" - dependencies: - nanoid: ^3.3.1 - picocolors: ^1.0.0 - source-map-js: ^1.0.2 - checksum: a515ed36622edbee1d3ba153298d3b62ae9826dfa6de19204c2a6f975c8d3ad36808423b5119a9d82b78efd486de3ce35a1faf882a36ac8aa09492be4fbb7fe1 - languageName: node - linkType: hard - "postcss@npm:^8.3.11, postcss@npm:^8.3.5": version: 8.3.11 resolution: "postcss@npm:8.3.11" @@ -31265,6 +32578,17 @@ __metadata: languageName: node linkType: hard +"postcss@npm:^8.4.7": + version: 8.4.7 + resolution: "postcss@npm:8.4.7" + dependencies: + nanoid: ^3.3.1 + picocolors: ^1.0.0 + source-map-js: ^1.0.2 + checksum: a515ed36622edbee1d3ba153298d3b62ae9826dfa6de19204c2a6f975c8d3ad36808423b5119a9d82b78efd486de3ce35a1faf882a36ac8aa09492be4fbb7fe1 + languageName: node + linkType: hard + "power-assert-context-formatter@npm:^1.0.7": version: 1.2.0 resolution: "power-assert-context-formatter@npm:1.2.0" @@ -31523,7 +32847,14 @@ __metadata: languageName: node linkType: hard -"prismjs@npm:^1.21.0, prismjs@npm:~1.27.0": +"prismjs@npm:^1.27.0": + version: 1.28.0 + resolution: "prismjs@npm:1.28.0" + checksum: bde93fb2beb45b7243219fc53855f59ee54b3fa179f315e8f9d66244d756ef984462e10561bbdc6713d3d7e051852472d7c284f5794a8791eeaefea2fb910b16 + languageName: node + linkType: hard + +"prismjs@npm:~1.27.0": version: 1.27.0 resolution: "prismjs@npm:1.27.0" checksum: 85c7f4a3e999073502cc9e1882af01e3709706369ec254b60bff1149eda701f40d02512acab956012dc7e61cfd61743a3a34c1bd0737e8dbacd79141e5698bbc @@ -31675,6 +33006,13 @@ __metadata: languageName: node linkType: hard +"property-information@npm:^6.0.0": + version: 6.1.1 + resolution: "property-information@npm:6.1.1" + checksum: 654b1e5c3578e1d522bd22b7cf48881f5054789969ddbefea22e5359805fda5dbf0c5ef76bb26516da26fedac8752587ddc4c8f3b9e16bc0c6e7feb8b6086864 + languageName: node + linkType: hard + "proto-list@npm:~1.2.1": version: 1.2.4 resolution: "proto-list@npm:1.2.4" @@ -31720,7 +33058,7 @@ __metadata: languageName: node linkType: hard -"proxy-addr@npm:~2.0.5, proxy-addr@npm:~2.0.7": +"proxy-addr@npm:~2.0.7": version: 2.0.7 resolution: "proxy-addr@npm:2.0.7" dependencies: @@ -31833,10 +33171,12 @@ __metadata: languageName: node linkType: hard -"qs@npm:6.7.0": - version: 6.7.0 - resolution: "qs@npm:6.7.0" - checksum: dfd5f6adef50e36e908cfa70a6233871b5afe66fbaca37ecc1da352ba29eb2151a3797991948f158bb37fccde51bd57845cb619a8035287bfc24e4591172c347 +"qs@npm:6.10.3": + version: 6.10.3 + resolution: "qs@npm:6.10.3" + dependencies: + side-channel: ^1.0.4 + checksum: 0fac5e6c7191d0295a96d0e83c851aeb015df7e990e4d3b093897d3ac6c94e555dbd0a599739c84d7fa46d7fee282d94ba76943983935cf33bba6769539b8019 languageName: node linkType: hard @@ -31848,11 +33188,11 @@ __metadata: linkType: hard "qs@npm:^6.10.0": - version: 6.10.3 - resolution: "qs@npm:6.10.3" + version: 6.10.5 + resolution: "qs@npm:6.10.5" dependencies: side-channel: ^1.0.4 - checksum: 0fac5e6c7191d0295a96d0e83c851aeb015df7e990e4d3b093897d3ac6c94e555dbd0a599739c84d7fa46d7fee282d94ba76943983935cf33bba6769539b8019 + checksum: b3873189a11bcf48445864b3ba66f7a76db0d9d874955d197779f561addfa604884f7b107971526ce1eca02c99bf7d1e47f28a3e7e6e29204d798fb279164226 languageName: node linkType: hard @@ -31937,13 +33277,6 @@ __metadata: languageName: node linkType: hard -"ramda@npm:^0.21.0": - version: 0.21.0 - resolution: "ramda@npm:0.21.0" - checksum: e08d63c12ed4bab70bfd700a843901d9fa340d1a88c50085a6ef0ecf25f528e5ac7c71848481270923491e7315a34301bb35905d45861cb13cc75b8ca05add32 - languageName: node - linkType: hard - "ramda@npm:^0.27.1": version: 0.27.1 resolution: "ramda@npm:0.27.1" @@ -31951,6 +33284,13 @@ __metadata: languageName: node linkType: hard +"ramda@npm:^0.28.0": + version: 0.28.0 + resolution: "ramda@npm:0.28.0" + checksum: 44ea6e5010bba70151b6a92d8114a91915e8b5a16105cce65fae58c9d7386b812c429645e35f21141d7087568550ce383bc10ee1a65cdec951f4b69ea457e6a4 + languageName: node + linkType: hard + "randexp@npm:0.4.6": version: 0.4.6 resolution: "randexp@npm:0.4.6" @@ -31987,18 +33327,6 @@ __metadata: languageName: node linkType: hard -"raw-body@npm:2.4.0": - version: 2.4.0 - resolution: "raw-body@npm:2.4.0" - dependencies: - bytes: 3.1.0 - http-errors: 1.7.2 - iconv-lite: 0.4.24 - unpipe: 1.0.0 - checksum: 6343906939e018c6e633a34a938a5d6d1e93ffcfa48646e00207d53b418e941953b521473950c079347220944dc75ba10e7b3c08bf97e3ac72c7624882db09bb - languageName: node - linkType: hard - "raw-body@npm:2.4.3": version: 2.4.3 resolution: "raw-body@npm:2.4.3" @@ -32011,6 +33339,18 @@ __metadata: languageName: node linkType: hard +"raw-body@npm:2.5.1": + version: 2.5.1 + resolution: "raw-body@npm:2.5.1" + dependencies: + bytes: 3.1.2 + http-errors: 2.0.0 + iconv-lite: 0.4.24 + unpipe: 1.0.0 + checksum: 5362adff1575d691bb3f75998803a0ffed8c64eabeaa06e54b4ada25a0cd1b2ae7f4f5ec46565d1bec337e08b5ac90c76eaa0758de6f72a633f025d754dec29e + languageName: node + linkType: hard + "raw-loader@npm:4.0.2, raw-loader@npm:^4.0.2": version: 4.0.2 resolution: "raw-loader@npm:4.0.2" @@ -32565,7 +33905,7 @@ __metadata: languageName: node linkType: hard -"react-docgen-typescript@npm:^2.0.0": +"react-docgen-typescript@npm:^2.1.1": version: 2.2.2 resolution: "react-docgen-typescript@npm:2.2.2" peerDependencies: @@ -32575,8 +33915,8 @@ __metadata: linkType: hard "react-docgen@npm:^5.0.0": - version: 5.4.0 - resolution: "react-docgen@npm:5.4.0" + version: 5.4.1 + resolution: "react-docgen@npm:5.4.1" dependencies: "@babel/core": ^7.7.5 "@babel/generator": ^7.12.11 @@ -32590,7 +33930,7 @@ __metadata: strip-indent: ^3.0.0 bin: react-docgen: bin/react-docgen.js - checksum: b0f16789437c75b02ba726c7c94ed902dfcdf66d11f271232c46d270d7eadc7eabbad95587cc70996bbbe5fea1e860afe0dc2659fa22d5773cef1e8deb7fa2ce + checksum: ed8f5d8d3084de4514d2de9d331e1bfc2249279c15b59f86a97dfc79c3c1c461d9af59aa8980e5745bdd2fb6877b084d304b3a4942185a6da603a2e8bd401a93 languageName: node linkType: hard @@ -32633,7 +33973,7 @@ __metadata: languageName: node linkType: hard -"react-draggable@npm:^4.0.0, react-draggable@npm:^4.0.3, react-draggable@npm:^4.4.3": +"react-draggable@npm:^4.0.0, react-draggable@npm:^4.0.3": version: 4.4.4 resolution: "react-draggable@npm:4.4.4" dependencies: @@ -32691,7 +34031,7 @@ __metadata: languageName: node linkType: hard -"react-fast-compare@npm:^3.0.1, react-fast-compare@npm:^3.2.0": +"react-fast-compare@npm:^3.0.1": version: 3.2.0 resolution: "react-fast-compare@npm:3.2.0" checksum: 8ef272c825ae329f61633ce4ce7f15aa5b84e5214d88bc0823880236e03e985a13195befa2c7a4eda7db3b017dc7985729152d88445823f652403cf36c2b86aa @@ -32723,22 +34063,6 @@ __metadata: languageName: node linkType: hard -"react-helmet-async@npm:^1.0.7": - version: 1.2.3 - resolution: "react-helmet-async@npm:1.2.3" - dependencies: - "@babel/runtime": ^7.12.5 - invariant: ^2.2.4 - prop-types: ^15.7.2 - react-fast-compare: ^3.2.0 - shallowequal: ^1.1.0 - peerDependencies: - react: ^16.6.0 || ^17.0.0 - react-dom: ^16.6.0 || ^17.0.0 - checksum: af7041314f6ebaefa64f3c06f75cf1ad62602b93228798615c2ca3365065688ee2b8c58bde98a9ae0d728aecfda5a757e9fc7695da3af2a504ff7e5291c716c9 - languageName: node - linkType: hard - "react-highlight-words@npm:0.18.0": version: 0.18.0 resolution: "react-highlight-words@npm:0.18.0" @@ -32892,20 +34216,6 @@ __metadata: languageName: node linkType: hard -"react-popper-tooltip@npm:^3.1.1": - version: 3.1.1 - resolution: "react-popper-tooltip@npm:3.1.1" - dependencies: - "@babel/runtime": ^7.12.5 - "@popperjs/core": ^2.5.4 - react-popper: ^2.2.4 - peerDependencies: - react: ^16.6.0 || ^17.0.0 - react-dom: ^16.6.0 || ^17.0.0 - checksum: c820122a4fdce46ff446b2c7bfe45727de42eacf1c2981fe8f8562da246a289dc7349f0732e36390a08ce50717dc52c4e8ab8e418af19cdd2ded7795ea6b8017 - languageName: node - linkType: hard - "react-popper-tooltip@npm:^4.3.1": version: 4.3.1 resolution: "react-popper-tooltip@npm:4.3.1" @@ -32934,7 +34244,7 @@ __metadata: languageName: node linkType: hard -"react-popper@npm:^2.2.4, react-popper@npm:^2.2.5": +"react-popper@npm:^2.2.5": version: 2.2.5 resolution: "react-popper@npm:2.2.5" dependencies: @@ -33042,19 +34352,6 @@ __metadata: languageName: node linkType: hard -"react-router-dom@npm:^6.0.0": - version: 6.2.2 - resolution: "react-router-dom@npm:6.2.2" - dependencies: - history: ^5.2.0 - react-router: 6.2.2 - peerDependencies: - react: ">=16.8" - react-dom: ">=16.8" - checksum: 83c5105af923c4f8af65a6de98283a95f46ffa643fd0c1a5005647c2c3deb946dae52dda32dc00cfcc3659517b08be806ff02ff03173361dba3d824850053e99 - languageName: node - linkType: hard - "react-router@npm:5.2.1": version: 5.2.1 resolution: "react-router@npm:5.2.1" @@ -33075,17 +34372,6 @@ __metadata: languageName: node linkType: hard -"react-router@npm:6.2.2, react-router@npm:^6.0.0": - version: 6.2.2 - resolution: "react-router@npm:6.2.2" - dependencies: - history: ^5.2.0 - peerDependencies: - react: ">=16.8" - checksum: 1a2e7006d4d56bfae8ff11dd5ec15e8049578864dfb2764652510eb0ce4af26a8949790a3732c4f7beb14bcb6500469ea18841b8cfc953e09828e4e4113922f0 - languageName: node - linkType: hard - "react-select-event@npm:5.5.0": version: 5.5.0 resolution: "react-select-event@npm:5.5.0" @@ -33208,18 +34494,18 @@ __metadata: languageName: node linkType: hard -"react-syntax-highlighter@npm:^13.5.3": - version: 13.5.3 - resolution: "react-syntax-highlighter@npm:13.5.3" +"react-syntax-highlighter@npm:^15.4.5": + version: 15.5.0 + resolution: "react-syntax-highlighter@npm:15.5.0" dependencies: "@babel/runtime": ^7.3.1 - highlight.js: ^10.1.1 - lowlight: ^1.14.0 - prismjs: ^1.21.0 - refractor: ^3.1.0 + highlight.js: ^10.4.1 + lowlight: ^1.17.0 + prismjs: ^1.27.0 + refractor: ^3.6.0 peerDependencies: react: ">= 0.14.0" - checksum: fa03880a887bc0c79c0be25fc35924980d75f684f8d05620272bdfcbb9f119f45bb7f8ddd92b9e944103964a4e094b99750d0b19c992fd86f2ce0b70266e89c3 + checksum: c082b48f30f8ba8d0c55ed1d761910630860077c7ff5793c4c912adcb5760df06436ed0ad62be0de28113aac9ad2af55eccd995f8eee98df53382e4ced2072fb languageName: node linkType: hard @@ -33246,19 +34532,6 @@ __metadata: languageName: node linkType: hard -"react-textarea-autosize@npm:^8.3.0": - version: 8.3.3 - resolution: "react-textarea-autosize@npm:8.3.3" - dependencies: - "@babel/runtime": ^7.10.2 - use-composed-ref: ^1.0.0 - use-latest: ^1.0.0 - peerDependencies: - react: ^16.8.0 || ^17.0.0 - checksum: da3d0192825df3d9f27eef33e7eddf928359a7e3e2b01ae7f7f672ecf4e5c1f7a34f27bdde9ccc24e2e9fbe1d1b9dd2a39c7d47323c9bdf63e7b9bd05c325a71 - languageName: node - linkType: hard - "react-transition-group@npm:4.4.2, react-transition-group@npm:^4.3.0": version: 4.4.2 resolution: "react-transition-group@npm:4.4.2" @@ -33445,6 +34718,16 @@ __metadata: languageName: node linkType: hard +"read-pkg-up@npm:^1.0.1": + version: 1.0.1 + resolution: "read-pkg-up@npm:1.0.1" + dependencies: + find-up: ^1.0.0 + read-pkg: ^1.0.0 + checksum: d18399a0f46e2da32beb2f041edd0cda49d2f2cc30195a05c759ef3ed9b5e6e19ba1ad1bae2362bdec8c6a9f2c3d18f4d5e8c369e808b03d498d5781cb9122c7 + languageName: node + linkType: hard + "read-pkg-up@npm:^3.0.0": version: 3.0.0 resolution: "read-pkg-up@npm:3.0.0" @@ -33466,6 +34749,17 @@ __metadata: languageName: node linkType: hard +"read-pkg@npm:^1.0.0": + version: 1.1.0 + resolution: "read-pkg@npm:1.1.0" + dependencies: + load-json-file: ^1.0.0 + normalize-package-data: ^2.3.2 + path-type: ^1.0.0 + checksum: a0f5d5e32227ec8e6a028dd5c5134eab229768dcb7a5d9a41a284ed28ad4b9284fecc47383dc1593b5694f4de603a7ffaee84b738956b9b77e0999567485a366 + languageName: node + linkType: hard + "read-pkg@npm:^3.0.0": version: 3.0.0 resolution: "read-pkg@npm:3.0.0" @@ -33595,6 +34889,16 @@ __metadata: languageName: node linkType: hard +"redent@npm:^1.0.0": + version: 1.0.0 + resolution: "redent@npm:1.0.0" + dependencies: + indent-string: ^2.1.0 + strip-indent: ^1.0.1 + checksum: 2bb8f76fda9c9f44e26620047b0ba9dd1834b0a80309d0badcc23fdcf7bb27a7ca74e66b683baa0d4b8cb5db787f11be086504036d63447976f409dd3e73fd7d + languageName: node + linkType: hard + "redent@npm:^3.0.0": version: 3.0.0 resolution: "redent@npm:3.0.0" @@ -33650,7 +34954,7 @@ __metadata: languageName: node linkType: hard -"refractor@npm:^3.1.0": +"refractor@npm:^3.6.0": version: 3.6.0 resolution: "refractor@npm:3.6.0" dependencies: @@ -33700,15 +35004,6 @@ __metadata: languageName: node linkType: hard -"regenerator-transform@npm:^0.14.2": - version: 0.14.5 - resolution: "regenerator-transform@npm:0.14.5" - dependencies: - "@babel/runtime": ^7.8.4 - checksum: a467a3b652b4ec26ff964e9c5f1817523a73fc44cb928b8d21ff11aebeac5d10a84d297fe02cea9f282bcec81a0b0d562237da69ef0f40a0160b30a4fa98bc94 - languageName: node - linkType: hard - "regenerator-transform@npm:^0.15.0": version: 0.15.0 resolution: "regenerator-transform@npm:0.15.0" @@ -33770,7 +35065,7 @@ __metadata: languageName: node linkType: hard -"regexpu-core@npm:^5.1.0": +"regexpu-core@npm:^5.0.1, regexpu-core@npm:^5.1.0": version: 5.1.0 resolution: "regexpu-core@npm:5.1.0" dependencies: @@ -33870,6 +35165,16 @@ __metadata: languageName: node linkType: hard +"remark-mdx@npm:^2.0.0": + version: 2.1.3 + resolution: "remark-mdx@npm:2.1.3" + dependencies: + mdast-util-mdx: ^2.0.0 + micromark-extension-mdxjs: ^1.0.0 + checksum: cda7c0809d890d800ed592ea43456e84ed3fc798f8b387e185babc16aadb97970d64704dd0fb51c54f8e27003cd2740cd8f1794d9d57d2a35f690c7f3ad95d68 + languageName: node + linkType: hard + "remark-parse@npm:8.0.3": version: 8.0.3 resolution: "remark-parse@npm:8.0.3" @@ -33894,6 +35199,29 @@ __metadata: 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 + "remark-slug@npm:^6.0.0": version: 6.1.0 resolution: "remark-slug@npm:6.1.0" @@ -33961,6 +35289,15 @@ __metadata: languageName: node linkType: hard +"repeating@npm:^2.0.0": + version: 2.0.1 + resolution: "repeating@npm:2.0.1" + dependencies: + is-finite: ^1.0.0 + checksum: d2db0b69c5cb0c14dd750036e0abcd6b3c3f7b2da3ee179786b755cf737ca15fa0fff417ca72de33d6966056f4695440e680a352401fc02c95ade59899afbdd0 + languageName: node + linkType: hard + "replace-in-file-webpack-plugin@npm:1.0.6": version: 1.0.6 resolution: "replace-in-file-webpack-plugin@npm:1.0.6" @@ -34259,7 +35596,7 @@ __metadata: languageName: node linkType: hard -"rimraf@npm:^2.2.8, rimraf@npm:^2.5.4, rimraf@npm:^2.6.3": +"rimraf@npm:^2.5.4, rimraf@npm:^2.6.3": version: 2.7.1 resolution: "rimraf@npm:2.7.1" dependencies: @@ -34488,6 +35825,15 @@ __metadata: 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.1.1": version: 5.1.1 resolution: "safe-buffer@npm:5.1.1" @@ -34817,27 +36163,6 @@ __metadata: languageName: node linkType: hard -"send@npm:0.17.1": - version: 0.17.1 - resolution: "send@npm:0.17.1" - dependencies: - debug: 2.6.9 - depd: ~1.1.2 - destroy: ~1.0.4 - encodeurl: ~1.0.2 - escape-html: ~1.0.3 - etag: ~1.8.1 - fresh: 0.5.2 - http-errors: ~1.7.2 - mime: 1.6.0 - ms: 2.1.1 - on-finished: ~2.3.0 - range-parser: ~1.2.1 - statuses: ~1.5.0 - checksum: d214c2fa42e7fae3f8fc1aa3931eeb3e6b78c2cf141574e09dbe159915c1e3a337269fc6b7512e7dfddcd7d6ff5974cb62f7c3637ba86a55bde20a92c18bdca0 - languageName: node - linkType: hard - "send@npm:0.17.2": version: 0.17.2 resolution: "send@npm:0.17.2" @@ -34859,6 +36184,27 @@ __metadata: languageName: node linkType: hard +"send@npm:0.18.0": + version: 0.18.0 + resolution: "send@npm:0.18.0" + dependencies: + debug: 2.6.9 + depd: 2.0.0 + destroy: 1.2.0 + encodeurl: ~1.0.2 + escape-html: ~1.0.3 + etag: ~1.8.1 + fresh: 0.5.2 + http-errors: 2.0.0 + mime: 1.6.0 + ms: 2.1.3 + on-finished: 2.4.1 + range-parser: ~1.2.1 + statuses: 2.0.1 + checksum: 74fc07ebb58566b87b078ec63e5a3e41ecd987e4272ba67b7467e86c6ad51bc6b0b0154133b6d8b08a2ddda360464f71382f7ef864700f34844a76c8027817a8 + languageName: node + linkType: hard + "serialize-javascript@npm:6.0.0, serialize-javascript@npm:^6.0.0": version: 6.0.0 resolution: "serialize-javascript@npm:6.0.0" @@ -34914,18 +36260,6 @@ __metadata: languageName: node linkType: hard -"serve-static@npm:1.14.1": - version: 1.14.1 - resolution: "serve-static@npm:1.14.1" - dependencies: - encodeurl: ~1.0.2 - escape-html: ~1.0.3 - parseurl: ~1.3.3 - send: 0.17.1 - checksum: c6b268e8486d39ecd54b86c7f2d0ee4a38cd7514ddd9c92c8d5793bb005afde5e908b12395898ae206782306ccc848193d93daa15b86afb3cbe5a8414806abe8 - languageName: node - linkType: hard - "serve-static@npm:1.14.2": version: 1.14.2 resolution: "serve-static@npm:1.14.2" @@ -34938,6 +36272,18 @@ __metadata: languageName: node linkType: hard +"serve-static@npm:1.15.0": + version: 1.15.0 + resolution: "serve-static@npm:1.15.0" + dependencies: + encodeurl: ~1.0.2 + escape-html: ~1.0.3 + parseurl: ~1.3.3 + send: 0.18.0 + checksum: af57fc13be40d90a12562e98c0b7855cf6e8bd4c107fe9a45c212bf023058d54a1871b1c89511c3958f70626fff47faeb795f5d83f8cf88514dbaeb2b724464d + languageName: node + linkType: hard + "set-blocking@npm:^2.0.0, set-blocking@npm:~2.0.0": version: 2.0.0 resolution: "set-blocking@npm:2.0.0" @@ -34985,13 +36331,6 @@ __metadata: languageName: node linkType: hard -"setprototypeof@npm:1.1.1": - version: 1.1.1 - resolution: "setprototypeof@npm:1.1.1" - checksum: a8bee29c1c64c245d460ce53f7460af8cbd0aceac68d66e5215153992cc8b3a7a123416353e0c642060e85cc5fd4241c92d1190eec97eda0dcb97436e8fcca3b - languageName: node - linkType: hard - "setprototypeof@npm:1.2.0": version: 1.2.0 resolution: "setprototypeof@npm:1.2.0" @@ -35531,7 +36870,7 @@ __metadata: languageName: node linkType: hard -"source-map-support@npm:^0.5.16": +"source-map-support@npm:^0.5.16, source-map-support@npm:~0.5.12": version: 0.5.21 resolution: "source-map-support@npm:0.5.21" dependencies: @@ -35541,7 +36880,7 @@ __metadata: languageName: node linkType: hard -"source-map-support@npm:^0.5.17, source-map-support@npm:^0.5.6, source-map-support@npm:~0.5.12, source-map-support@npm:~0.5.20": +"source-map-support@npm:^0.5.17, source-map-support@npm:^0.5.6, source-map-support@npm:~0.5.20": version: 0.5.20 resolution: "source-map-support@npm:0.5.20" dependencies: @@ -35579,6 +36918,13 @@ __metadata: languageName: node linkType: hard +"source-map@npm:^0.7.0, source-map@npm:~0.7.2": + version: 0.7.4 + resolution: "source-map@npm:0.7.4" + checksum: 01cc5a74b1f0e1d626a58d36ad6898ea820567e87f18dfc9d24a9843a351aaa2ec09b87422589906d6ff1deed29693e176194dc88bcae7c9a852dc74b311dbf5 + languageName: node + linkType: hard + "source-map@npm:^0.7.3": version: 0.7.3 resolution: "source-map@npm:0.7.3" @@ -35586,13 +36932,6 @@ __metadata: languageName: node linkType: hard -"source-map@npm:~0.7.2": - version: 0.7.4 - resolution: "source-map@npm:0.7.4" - checksum: 01cc5a74b1f0e1d626a58d36ad6898ea820567e87f18dfc9d24a9843a351aaa2ec09b87422589906d6ff1deed29693e176194dc88bcae7c9a852dc74b311dbf5 - languageName: node - linkType: hard - "sourcemap-codec@npm:^1.4.4, sourcemap-codec@npm:^1.4.8": version: 1.4.8 resolution: "sourcemap-codec@npm:1.4.8" @@ -35607,6 +36946,13 @@ __metadata: languageName: node linkType: hard +"space-separated-tokens@npm:^2.0.0": + version: 2.0.1 + resolution: "space-separated-tokens@npm:2.0.1" + checksum: 66e30a6382d6e3ab0a6573d510235a198202071d4ebfef8c198f10433166f0cdced4dbf0946cad3c4b2ecc336896a11f98b2ec93047e140fe7aef6fd3a21365b + languageName: node + linkType: hard + "spdx-correct@npm:^3.0.0": version: 3.1.1 resolution: "spdx-correct@npm:3.1.1" @@ -35867,6 +37213,13 @@ __metadata: languageName: node linkType: hard +"statuses@npm:2.0.1, statuses@npm:^2.0.0": + version: 2.0.1 + resolution: "statuses@npm:2.0.1" + checksum: 18c7623fdb8f646fb213ca4051be4df7efb3484d4ab662937ca6fbef7ced9b9e12842709872eb3020cc3504b93bde88935c9f6417489627a7786f24f8031cbcb + languageName: node + linkType: hard + "statuses@npm:>= 1.4.0 < 2, statuses@npm:>= 1.5.0 < 2, statuses@npm:~1.5.0": version: 1.5.0 resolution: "statuses@npm:1.5.0" @@ -35874,33 +37227,67 @@ __metadata: languageName: node linkType: hard -"statuses@npm:^2.0.0": - version: 2.0.1 - resolution: "statuses@npm:2.0.1" - checksum: 18c7623fdb8f646fb213ca4051be4df7efb3484d4ab662937ca6fbef7ced9b9e12842709872eb3020cc3504b93bde88935c9f6417489627a7786f24f8031cbcb - languageName: node - linkType: hard - "store2@npm:^2.12.0": - version: 2.13.1 - resolution: "store2@npm:2.13.1" - checksum: c5fa1ac7dbf8431d87ad4563d9838311bb421cc6e13696b668c772192942be2e07ef20d36104f7496acab6dc4d569a9b50d6c2299ceaddbcb86628f585323ff4 + version: 2.13.2 + resolution: "store2@npm:2.13.2" + checksum: 9e760ea2a7f56eae47d5bafe507511b25ad983bba901e1e0c5f65713e631c15aafb8e031c658047af53c2008a5d21cb6c43f2383673b3493144e8e1ead5c8f91 languageName: node linkType: hard -"storybook-dark-mode@npm:1.1.0": +"storybook-addon-turbo-build@npm:1.1.0": version: 1.1.0 - resolution: "storybook-dark-mode@npm:1.1.0" + resolution: "storybook-addon-turbo-build@npm:1.1.0" + dependencies: + esbuild-loader: ^2.10.0 + checksum: c9173fdef68bcfc35a950990ce056223f02cf402a307139e6d3070402ea85f35012ad2066ea83b362fe9799bd7b9277a64056c964c6658b04dd63c51eea9f32a + languageName: node + linkType: hard + +"storybook-dark-mode@npm:1.1.2": + version: 1.1.2 + resolution: "storybook-dark-mode@npm:1.1.2" dependencies: - fast-deep-equal: ^3.0.0 - memoizerific: ^1.11.3 - peerDependencies: "@storybook/addons": ^6.0.0 "@storybook/api": ^6.0.0 "@storybook/components": ^6.0.0 "@storybook/core-events": ^6.0.0 "@storybook/theming": ^6.0.0 - checksum: e1d7abbb96d1cdbe9cdba1e20aabffa6878f170e348958cc328de4183027c2052f44f6d78f82a45039f803349c7a4ec19988d42898030b2720dc591192f520e6 + fast-deep-equal: ^3.0.0 + global: ^4.4.0 + memoizerific: ^1.11.3 + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + react: + optional: true + react-dom: + optional: true + checksum: c1522be5d7b52315e7343840bc5b6ed771e671814ccc0f63fbaa3a9f47d25c5cc0e0f5d0cdb5ac3e75e356e93d66ced8722ad2b0f7306b4113489e21cf8b07ff + languageName: node + linkType: hard + +"storybook-dark-mode@patch:storybook-dark-mode@npm%3A1.1.2#./.yarn/patches/storybook-dark-mode-npm-1.1.2-ecc4605688.patch::locator=grafana%40workspace%3A.": + version: 1.1.2 + resolution: "storybook-dark-mode@patch:storybook-dark-mode@npm%3A1.1.2#./.yarn/patches/storybook-dark-mode-npm-1.1.2-ecc4605688.patch::version=1.1.2&hash=5d30c8&locator=grafana%40workspace%3A." + dependencies: + "@storybook/addons": ^6.0.0 + "@storybook/api": ^6.0.0 + "@storybook/components": ^6.0.0 + "@storybook/core-events": ^6.0.0 + "@storybook/theming": ^6.0.0 + fast-deep-equal: ^3.0.0 + global: ^4.4.0 + memoizerific: ^1.11.3 + peerDependencies: + react: ^16.8.0 || ^17.0.0 || ^18.0.0 + react-dom: ^16.8.0 || ^17.0.0 || ^18.0.0 + peerDependenciesMeta: + react: + optional: true + react-dom: + optional: true + checksum: 531417fdb350ad271dd0150728f3f4c5c9d2d889697585819e648cc9f614bf9014781b164f63262a5ffda931639b432622e989df37900d0eda60a76905ead147 languageName: node linkType: hard @@ -36029,23 +37416,7 @@ __metadata: languageName: node linkType: hard -"string.prototype.matchall@npm:^4.0.0 || ^3.0.1, string.prototype.matchall@npm:^4.0.6": - version: 4.0.6 - resolution: "string.prototype.matchall@npm:4.0.6" - dependencies: - call-bind: ^1.0.2 - define-properties: ^1.1.3 - es-abstract: ^1.19.1 - get-intrinsic: ^1.1.1 - has-symbols: ^1.0.2 - internal-slot: ^1.0.3 - regexp.prototype.flags: ^1.3.1 - side-channel: ^1.0.4 - checksum: 07aca53ddd8a096a8bd0560eb8574386c6b3887a6a06b40a98abd42c94dadeed3296261fca22fec59a1ed970d199bdeb450fcb6a7390193588d9c6b5f48fe842 - languageName: node - linkType: hard - -"string.prototype.matchall@npm:^4.0.7": +"string.prototype.matchall@npm:^4.0.0 || ^3.0.1, string.prototype.matchall@npm:^4.0.7": version: 4.0.7 resolution: "string.prototype.matchall@npm:4.0.7" dependencies: @@ -36061,6 +37432,22 @@ __metadata: languageName: node linkType: hard +"string.prototype.matchall@npm:^4.0.6": + version: 4.0.6 + resolution: "string.prototype.matchall@npm:4.0.6" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.1.3 + es-abstract: ^1.19.1 + get-intrinsic: ^1.1.1 + has-symbols: ^1.0.2 + internal-slot: ^1.0.3 + regexp.prototype.flags: ^1.3.1 + side-channel: ^1.0.4 + checksum: 07aca53ddd8a096a8bd0560eb8574386c6b3887a6a06b40a98abd42c94dadeed3296261fca22fec59a1ed970d199bdeb450fcb6a7390193588d9c6b5f48fe842 + languageName: node + linkType: hard + "string.prototype.padend@npm:^3.0.0": version: 3.1.3 resolution: "string.prototype.padend@npm:3.1.3" @@ -36172,6 +37559,16 @@ __metadata: languageName: node linkType: hard +"stringify-entities@npm:^4.0.0": + version: 4.0.3 + resolution: "stringify-entities@npm:4.0.3" + dependencies: + character-entities-html4: ^2.0.0 + character-entities-legacy: ^3.0.0 + checksum: 59e8f523b403bf7d415690e72ae52982decd6ea5426bd8b3f5c66225ddde73e766c0c0d91627df082d0794e30b19dd907ffb5864cef3602e4098d6777d7ca3c2 + languageName: node + linkType: hard + "strip-ansi@npm:^3.0.0, strip-ansi@npm:^3.0.1": version: 3.0.1 resolution: "strip-ansi@npm:3.0.1" @@ -36208,6 +37605,15 @@ __metadata: languageName: node linkType: hard +"strip-bom@npm:^2.0.0": + version: 2.0.0 + resolution: "strip-bom@npm:2.0.0" + dependencies: + is-utf8: ^0.2.0 + checksum: 08efb746bc67b10814cd03d79eb31bac633393a782e3f35efbc1b61b5165d3806d03332a97f362822cf0d4dd14ba2e12707fcff44fe1c870c48a063a0c9e4944 + languageName: node + linkType: hard + "strip-bom@npm:^3.0.0": version: 3.0.0 resolution: "strip-bom@npm:3.0.0" @@ -36243,6 +37649,17 @@ __metadata: languageName: node linkType: hard +"strip-indent@npm:^1.0.1": + version: 1.0.1 + resolution: "strip-indent@npm:1.0.1" + dependencies: + get-stdin: ^4.0.1 + bin: + strip-indent: cli.js + checksum: 81ad9a0b8a558bdbd05b66c6c437b9ab364aa2b5479ed89969ca7908e680e21b043d40229558c434b22b3d640622e39b66288e0456d601981ac9289de9700fbd + languageName: node + linkType: hard + "strip-indent@npm:^3.0.0": version: 3.0.0 resolution: "strip-indent@npm:3.0.0" @@ -36619,9 +38036,9 @@ __metadata: languageName: node linkType: hard -"telejson@npm:^5.3.2, telejson@npm:^5.3.3": - version: 5.3.3 - resolution: "telejson@npm:5.3.3" +"telejson@npm:^6.0.8": + version: 6.0.8 + resolution: "telejson@npm:6.0.8" dependencies: "@types/is-function": ^1.0.0 global: ^4.4.0 @@ -36631,7 +38048,7 @@ __metadata: isobject: ^4.0.0 lodash: ^4.17.21 memoizerific: ^1.11.3 - checksum: 16a3152bd49e1eb634856de8bf45d82e9b0ccea5ac4ae0092bced4abbd5536a60fb0a2a20fdd930b56242125a51baa86a3d15b7beb8d3640353548c7b5c2516a + checksum: 7411a5e78a35720bd0654a544409d3ce467b1dbb2073c73f36476b4c0905d97dbf539d6cbae737bb1fd8c872c2058f2a5450163a15117ed3fa031b2a2b8b33f6 languageName: node linkType: hard @@ -36798,8 +38215,8 @@ __metadata: linkType: hard "terser@npm:^5.3.4": - version: 5.12.0 - resolution: "terser@npm:5.12.0" + version: 5.14.0 + resolution: "terser@npm:5.14.0" dependencies: "@jridgewell/source-map": ^0.3.2 acorn: ^8.5.0 @@ -36807,7 +38224,7 @@ __metadata: source-map-support: ~0.5.20 bin: terser: bin/terser - checksum: 1d0426bcb602f29cc87561feb8067b2f84d92ef954756714eeb8593cb4c69192297fd8b8a0dc6d64caedd510fb04be790a7c321ccbf67e51eaed8e9cf16d35e8 + checksum: 9bce919c17cf028b1b41a3aca9f7e05354ff46701de39e733d6d7a43ebd9c6042d33cfa3e7ef84e5f4c17f1c429c7f40381a38c6e6d6ab1cdc46a1bf8f4e8985 languageName: node linkType: hard @@ -37099,13 +38516,6 @@ __metadata: languageName: node linkType: hard -"toidentifier@npm:1.0.0": - version: 1.0.0 - resolution: "toidentifier@npm:1.0.0" - checksum: 199e6bfca1531d49b3506cff02353d53ec987c9ee10ee272ca6484ed97f1fc10fb77c6c009079ca16d5c5be4a10378178c3cacdb41ce9ec954c3297c74c6053e - languageName: node - linkType: hard - "toidentifier@npm:1.0.1": version: 1.0.1 resolution: "toidentifier@npm:1.0.1" @@ -37187,6 +38597,20 @@ __metadata: 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 + +"trim-newlines@npm:^1.0.0": + version: 1.0.0 + resolution: "trim-newlines@npm:1.0.0" + checksum: ed96eea318581c6f894c0a98d0c4f16dcce11a41794ce140a79db55f1cab709cd9117578ee5e49a9b52f41e9cd93eaf3efa6c4bddbc77afbf91128b396fadbc1 + languageName: node + linkType: hard + "trim-newlines@npm:^3.0.0": version: 3.0.1 resolution: "trim-newlines@npm:3.0.1" @@ -37215,6 +38639,13 @@ __metadata: 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-dedent@npm:^2.0.0": version: 2.2.0 resolution: "ts-dedent@npm:2.2.0" @@ -37311,22 +38742,6 @@ __metadata: languageName: node linkType: hard -"ts-loader@npm:8.4.0": - version: 8.4.0 - resolution: "ts-loader@npm:8.4.0" - dependencies: - chalk: ^4.1.0 - enhanced-resolve: ^4.0.0 - loader-utils: ^2.0.0 - micromatch: ^4.0.0 - semver: ^7.3.4 - peerDependencies: - typescript: "*" - webpack: "*" - checksum: 79da0f364c013231bff28baede3f4f4081b1cca30b24df2d9f31a0517e0524eca2c8e4d438b853b1566a3a8eb9ff51ab0b36743346f0b3d5daa7001c98e5c738 - languageName: node - linkType: hard - "ts-loader@npm:9.3.1, ts-loader@npm:^9.3.1": version: 9.3.1 resolution: "ts-loader@npm:9.3.1" @@ -37461,7 +38876,7 @@ __metadata: languageName: node linkType: hard -"tslib@npm:2.4.0, tslib@npm:^2.3.1, tslib@npm:^2.4.0": +"tslib@npm:2.4.0, tslib@npm:^2.4.0": version: 2.4.0 resolution: "tslib@npm:2.4.0" checksum: 8c4aa6a3c5a754bf76aefc38026134180c053b7bd2f81338cb5e5ebf96fefa0f417bff221592bf801077f5bf990562f6264fecbc42cd3309b33872cb6fc3b113 @@ -37475,7 +38890,7 @@ __metadata: languageName: node linkType: hard -"tslib@npm:^2, tslib@npm:^2.0.0, tslib@npm:^2.0.1, tslib@npm:^2.0.3, tslib@npm:^2.1.0, tslib@npm:^2.2.0, tslib@npm:^2.3.0": +"tslib@npm:^2, tslib@npm:^2.0.0, tslib@npm:^2.0.1, tslib@npm:^2.0.3, tslib@npm:^2.1.0, tslib@npm:^2.2.0, tslib@npm:^2.3.0, tslib@npm:^2.3.1": version: 2.3.1 resolution: "tslib@npm:2.3.1" checksum: de17a98d4614481f7fcb5cd53ffc1aaf8654313be0291e1bfaee4b4bb31a20494b7d218ff2e15017883e8ea9626599b3b0e0229c18383ba9dce89da2adf15cb9 @@ -37604,7 +39019,7 @@ __metadata: languageName: node linkType: hard -"type-is@npm:~1.6.17, type-is@npm:~1.6.18": +"type-is@npm:~1.6.18": version: 1.6.18 resolution: "type-is@npm:1.6.18" dependencies: @@ -37827,6 +39242,21 @@ __metadata: 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 + "union-value@npm:^1.0.0": version: 1.0.1 resolution: "union-value@npm:1.0.1" @@ -37873,6 +39303,15 @@ __metadata: languageName: node linkType: hard +"unist-builder@npm:^3.0.0": + version: 3.0.0 + resolution: "unist-builder@npm:3.0.0" + dependencies: + "@types/unist": ^2.0.0 + checksum: 80459ee3c2ece90bbc4f4b4faeed524d144c1a09ee07ff3e9004648d9b71a652e80a3b3ef60311a1e92f6ab915caf27c6f08062b5f8c84fa725bc0d7c5759e84 + languageName: node + linkType: hard + "unist-util-generated@npm:^1.0.0": version: 1.1.6 resolution: "unist-util-generated@npm:1.1.6" @@ -37880,6 +39319,13 @@ __metadata: languageName: node linkType: hard +"unist-util-generated@npm:^2.0.0": + version: 2.0.0 + resolution: "unist-util-generated@npm:2.0.0" + checksum: 3a806793fa24a75190c217740ce706340d6cb0d51eff677134253d628f8e4355ebd8a243fe8045c583463f6bebfd50f902d653161da87c1359fcd1a14b99c8e0 + languageName: node + linkType: hard + "unist-util-is@npm:^4.0.0": version: 4.1.0 resolution: "unist-util-is@npm:4.1.0" @@ -37887,6 +39333,13 @@ __metadata: languageName: node linkType: hard +"unist-util-is@npm:^5.0.0": + version: 5.1.1 + resolution: "unist-util-is@npm:5.1.1" + checksum: e8743a19a304d8a8f5684f3e5ddb5546f2655847b42123687277d76566a2aba89beb7b4a8a9e9ebc4d904cd1cecc285356d7923d973a43cfc19a1e10ff6bdee4 + languageName: node + linkType: hard + "unist-util-map@npm:^1.0.2": version: 1.0.5 resolution: "unist-util-map@npm:1.0.5" @@ -37896,6 +39349,15 @@ __metadata: languageName: node linkType: hard +"unist-util-position-from-estree@npm:^1.0.0, unist-util-position-from-estree@npm:^1.1.0": + version: 1.1.1 + resolution: "unist-util-position-from-estree@npm:1.1.1" + dependencies: + "@types/unist": ^2.0.0 + checksum: 63808bdcb8b49afa5231712d95b586fe877859ee03d23adb47485c30222007a5af55e95d103d4af51d1d16376aaa5a58fa985a08d63727c38b1515873df8b79b + languageName: node + linkType: hard + "unist-util-position@npm:^3.0.0": version: 3.1.0 resolution: "unist-util-position@npm:3.1.0" @@ -37903,6 +39365,15 @@ __metadata: languageName: node linkType: hard +"unist-util-position@npm:^4.0.0": + version: 4.0.3 + resolution: "unist-util-position@npm:4.0.3" + dependencies: + "@types/unist": ^2.0.0 + checksum: 0d89973628d40f19345cbcc50008f7f56d411afa54434bbe6c224b22d26aaf9d4500da2de363f1f01945acab1f1c31920c514253149eb546ff9b8bbc1ea94209 + languageName: node + linkType: hard + "unist-util-remove-position@npm:^2.0.0": version: 2.0.1 resolution: "unist-util-remove-position@npm:2.0.1" @@ -37912,6 +39383,16 @@ __metadata: languageName: node linkType: hard +"unist-util-remove-position@npm:^4.0.0": + version: 4.0.1 + resolution: "unist-util-remove-position@npm:4.0.1" + dependencies: + "@types/unist": ^2.0.0 + unist-util-visit: ^4.0.0 + checksum: 7d2808662ac65f2b2f615822b78060419f738fb3b074b10cec77c596ea966b8f5c47553d2d322822a5975c49d2b21cdd64c198ae9fb02a9d54d1afa6342cdd6a + languageName: node + linkType: hard + "unist-util-remove@npm:^2.0.0": version: 2.1.0 resolution: "unist-util-remove@npm:2.1.0" @@ -37930,6 +39411,15 @@ __metadata: languageName: node linkType: hard +"unist-util-stringify-position@npm:^3.0.0": + version: 3.0.2 + resolution: "unist-util-stringify-position@npm:3.0.2" + dependencies: + "@types/unist": ^2.0.0 + checksum: 2dfd7a0fb2a55e99cc319c3bf7f9f1f73ed652978fa70d19117faa7245d20f21738ec926ecc47f341705ca1bb157e87ced0b6bb5ecaa666bd2ae6b2510d6a671 + languageName: node + linkType: hard + "unist-util-visit-parents@npm:^3.0.0": version: 3.1.1 resolution: "unist-util-visit-parents@npm:3.1.1" @@ -37940,6 +39430,16 @@ __metadata: languageName: node linkType: hard +"unist-util-visit-parents@npm:^5.1.1": + version: 5.1.1 + resolution: "unist-util-visit-parents@npm:5.1.1" + dependencies: + "@types/unist": ^2.0.0 + unist-util-is: ^5.0.0 + checksum: c699d18f5b26461dee37612b84c243fd5457c98f4c0540d9ba8bee05062aece5f3b4fb1af6b07423ce6750d8926e8c01fc2b1a4de1e54925ef6795c177ed8e18 + languageName: node + linkType: hard + "unist-util-visit@npm:2.0.3, unist-util-visit@npm:^2.0.0": version: 2.0.3 resolution: "unist-util-visit@npm:2.0.3" @@ -37951,6 +39451,17 @@ __metadata: languageName: node linkType: hard +"unist-util-visit@npm:^4.0.0": + version: 4.1.1 + resolution: "unist-util-visit@npm:4.1.1" + dependencies: + "@types/unist": ^2.0.0 + unist-util-is: ^5.0.0 + unist-util-visit-parents: ^5.1.1 + checksum: c4a63734b0a5b439c62d20901bb472bdafdbbcd80c383e254aedeb98b23d0bae815a331e776ce7d63ea3c8018a54318abb8709d07cdf7dd094f79b2f07bb39f0 + languageName: node + linkType: hard + "universal-deep-strict-equal@npm:^1.2.1": version: 1.2.2 resolution: "universal-deep-strict-equal@npm:1.2.2" @@ -38000,6 +39511,15 @@ __metadata: languageName: node linkType: hard +"untildify@npm:^2.0.0": + version: 2.1.0 + resolution: "untildify@npm:2.1.0" + dependencies: + os-homedir: ^1.0.0 + checksum: 071b394053fc94747d9df8c7f7ca50af41355c1207c8a0bf9f35f52b0d9ad5142a1920b018bc2b6ff04340a4f9c599ad50c9b8f4ff2c689ae52b1463ebbda94e + languageName: node + linkType: hard + "untildify@npm:^4.0.0": version: 4.0.0 resolution: "untildify@npm:4.0.0" @@ -38092,41 +39612,6 @@ __metadata: languageName: node linkType: hard -"use-composed-ref@npm:^1.0.0": - version: 1.2.1 - resolution: "use-composed-ref@npm:1.2.1" - peerDependencies: - react: ^16.8.0 || ^17.0.0 - checksum: 27238fef7184bfdd4be24901188d3f5fe641536a7aee0f7b435166d3c0bc958b7d84c4c512c4737422a623b07ca7ee95f5eca2fa3ea52722fcc66bc367bd32bc - languageName: node - linkType: hard - -"use-isomorphic-layout-effect@npm:^1.0.0": - version: 1.1.1 - resolution: "use-isomorphic-layout-effect@npm:1.1.1" - peerDependencies: - react: ^16.8.0 || ^17.0.0 - peerDependenciesMeta: - "@types/react": - optional: true - checksum: fd9061817d4945af37fd79866b1fe96a09cafe873169a66ec699140b609c64db6c60512d94ec3ca90967837026ea6e6d003901c557693708aeee11d392418a9e - languageName: node - linkType: hard - -"use-latest@npm:^1.0.0": - version: 1.2.0 - resolution: "use-latest@npm:1.2.0" - dependencies: - use-isomorphic-layout-effect: ^1.0.0 - peerDependencies: - react: ^16.8.0 || ^17.0.0 - peerDependenciesMeta: - "@types/react": - optional: true - checksum: f0cb3a49119e14ed46db8a946b1aa17b838b8834c8a652bde314877ede6057c55b50654a97ee802597a5839c070180195e58ea3a756b7c33db7f540642f0ddea - languageName: node - linkType: hard - "use-memo-one@npm:^1.1.1": version: 1.1.2 resolution: "use-memo-one@npm:1.1.2" @@ -38240,6 +39725,20 @@ __metadata: 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 + "v8-compile-cache-lib@npm:^3.0.1": version: 3.0.1 resolution: "v8-compile-cache-lib@npm:3.0.1" @@ -38254,17 +39753,6 @@ __metadata: languageName: node linkType: hard -"v8-to-istanbul@npm:^8.0.0": - version: 8.1.1 - resolution: "v8-to-istanbul@npm:8.1.1" - dependencies: - "@types/istanbul-lib-coverage": ^2.0.1 - convert-source-map: ^1.6.0 - source-map: ^0.7.3 - checksum: 54ce92bec2727879626f623d02c8d193f0c7e919941fa373ec135189a8382265117f5316ea317a1e12a5f9c13d84d8449052a731fe3306fa4beaafbfa4cab229 - languageName: node - linkType: hard - "v8-to-istanbul@npm:^8.1.0": version: 8.1.0 resolution: "v8-to-istanbul@npm:8.1.0" @@ -38276,7 +39764,7 @@ __metadata: languageName: node linkType: hard -"v8-to-istanbul@npm:^9.0.1": +"v8-to-istanbul@npm:^9.0.0, v8-to-istanbul@npm:^9.0.1": version: 9.0.1 resolution: "v8-to-istanbul@npm:9.0.1" dependencies: @@ -38353,6 +39841,16 @@ __metadata: languageName: node linkType: hard +"vfile-location@npm:^4.0.0": + version: 4.0.1 + resolution: "vfile-location@npm:4.0.1" + dependencies: + "@types/unist": ^2.0.0 + vfile: ^5.0.0 + checksum: cc0df62075c741beee699e651374aeb56c4c1f4333398c0ba924281c2b51d4b7669c69c5b837ea395775626ad030d6f1bd27fd0a7eaf3f9f1bbd55393948ad6c + languageName: node + linkType: hard + "vfile-message@npm:^2.0.0": version: 2.0.4 resolution: "vfile-message@npm:2.0.4" @@ -38363,6 +39861,16 @@ __metadata: languageName: node linkType: hard +"vfile-message@npm:^3.0.0": + version: 3.1.2 + resolution: "vfile-message@npm:3.1.2" + dependencies: + "@types/unist": ^2.0.0 + unist-util-stringify-position: ^3.0.0 + checksum: 96fbd9e9b5e0babb5ee61e3a716dc7a6a8c28f2c8c711837d95c88b782161b31549ad16059a78990d7b836d0f4d3b4d8c9ffde44370d48d9cac991fc1e3e17c5 + languageName: node + linkType: hard + "vfile@npm:^4.0.0": version: 4.2.1 resolution: "vfile@npm:4.2.1" @@ -38375,6 +39883,18 @@ __metadata: languageName: node linkType: hard +"vfile@npm:^5.0.0": + version: 5.3.5 + resolution: "vfile@npm:5.3.5" + dependencies: + "@types/unist": ^2.0.0 + is-buffer: ^2.0.0 + unist-util-stringify-position: ^3.0.0 + vfile-message: ^3.0.0 + checksum: 14a9ea19d1801bb99fc9a451d220d2ee84d891bae52094db660f9bf637c1cada0c45a3e00962ff3e901da16dd5051367e25a4a214e40db57ae40f57363796b45 + languageName: node + linkType: hard + "visjs-network@npm:4.25.0": version: 4.25.0 resolution: "visjs-network@npm:4.25.0" @@ -38489,13 +40009,13 @@ __metadata: languageName: node linkType: hard -"watchpack@npm:^2.2.0": - version: 2.2.0 - resolution: "watchpack@npm:2.2.0" +"watchpack@npm:^2.2.0, watchpack@npm:^2.4.0": + version: 2.4.0 + resolution: "watchpack@npm:2.4.0" dependencies: glob-to-regexp: ^0.4.1 graceful-fs: ^4.1.2 - checksum: e275f48fae29edee3195c51a8312b609581b9be5ce323d3102ffd082cb124f48d7a393ce05e4110239e4354379e04d78a97ceb26ae367746e7e218bf258135c8 + checksum: 23d4bc58634dbe13b86093e01c6a68d8096028b664ab7139d58f0c37d962d549a940e98f2f201cecdabd6f9c340338dc73ef8bf094a2249ef582f35183d1a131 languageName: node linkType: hard @@ -38509,16 +40029,6 @@ __metadata: languageName: node linkType: hard -"watchpack@npm:^2.4.0": - version: 2.4.0 - resolution: "watchpack@npm:2.4.0" - dependencies: - glob-to-regexp: ^0.4.1 - graceful-fs: ^4.1.2 - checksum: 23d4bc58634dbe13b86093e01c6a68d8096028b664ab7139d58f0c37d962d549a940e98f2f201cecdabd6f9c340338dc73ef8bf094a2249ef582f35183d1a131 - languageName: node - linkType: hard - "wbuf@npm:^1.1.0, wbuf@npm:^1.7.3": version: 1.7.3 resolution: "wbuf@npm:1.7.3" @@ -38741,7 +40251,7 @@ __metadata: languageName: node linkType: hard -"webpack-filter-warnings-plugin@npm:1.2.1, webpack-filter-warnings-plugin@npm:^1.2.1": +"webpack-filter-warnings-plugin@npm:^1.2.1": version: 1.2.1 resolution: "webpack-filter-warnings-plugin@npm:1.2.1" peerDependencies: @@ -38887,7 +40397,7 @@ __metadata: languageName: node linkType: hard -"webpack@npm:5.74.0": +"webpack@npm:5.74.0, webpack@npm:>=4.43.0 <6.0.0": version: 5.74.0 resolution: "webpack@npm:5.74.0" dependencies: @@ -38961,43 +40471,6 @@ __metadata: languageName: node linkType: hard -"webpack@npm:^5.9.0": - version: 5.70.0 - resolution: "webpack@npm:5.70.0" - dependencies: - "@types/eslint-scope": ^3.7.3 - "@types/estree": ^0.0.51 - "@webassemblyjs/ast": 1.11.1 - "@webassemblyjs/wasm-edit": 1.11.1 - "@webassemblyjs/wasm-parser": 1.11.1 - acorn: ^8.4.1 - acorn-import-assertions: ^1.7.6 - browserslist: ^4.14.5 - chrome-trace-event: ^1.0.2 - enhanced-resolve: ^5.9.2 - es-module-lexer: ^0.9.0 - eslint-scope: 5.1.1 - events: ^3.2.0 - glob-to-regexp: ^0.4.1 - graceful-fs: ^4.2.9 - json-parse-better-errors: ^1.0.2 - loader-runner: ^4.2.0 - mime-types: ^2.1.27 - neo-async: ^2.6.2 - schema-utils: ^3.1.0 - tapable: ^2.1.1 - terser-webpack-plugin: ^5.1.3 - watchpack: ^2.3.1 - webpack-sources: ^3.2.3 - peerDependenciesMeta: - webpack-cli: - optional: true - bin: - webpack: bin/webpack.js - checksum: 00439884a9cdd5305aed3ce93735635785a15c5464a6d2cfce87e17727a07585de02420913e82aa85ddd2ae7322175d2cfda6ac0878a17f061cb605e6a7db57a - languageName: node - linkType: hard - "websocket-driver@npm:>=0.5.1, websocket-driver@npm:^0.7.4": version: 0.7.4 resolution: "websocket-driver@npm:0.7.4" @@ -39340,7 +40813,22 @@ __metadata: languageName: node linkType: hard -"ws@npm:^8.2.3, ws@npm:^8.4.2": +"ws@npm:^8.2.3": + version: 8.7.0 + resolution: "ws@npm:8.7.0" + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: ^5.0.2 + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + checksum: 078fa2dbc06b31a45e0057b19e2930d26c222622e355955afe019c9b9b25f62eb2a8eff7cceabdad04910ecd2bd6ef4fa48e6f3673f2fdddff02a6e4c2459584 + languageName: node + linkType: hard + +"ws@npm:^8.4.2": version: 8.5.0 resolution: "ws@npm:8.5.0" peerDependencies: @@ -39355,6 +40843,20 @@ __metadata: languageName: node linkType: hard +"x-default-browser@npm:^0.4.0": + version: 0.4.0 + resolution: "x-default-browser@npm:0.4.0" + dependencies: + default-browser-id: ^1.0.4 + dependenciesMeta: + default-browser-id: + optional: true + bin: + x-default-browser: bin/x-default-browser.js + checksum: 9649fe6b4b91de93d5a48a5042b55a6e15c87d2514bc4f2e12582f8b25c1a6810fafc6f4c454fb531540e431e32a0a26ac130e418c0ce5c6ca892fb01945ea9e + languageName: node + linkType: hard + "xml-name-validator@npm:^3.0.0": version: 3.0.0 resolution: "xml-name-validator@npm:3.0.0" @@ -39465,7 +40967,7 @@ __metadata: languageName: node linkType: hard -"yargs-parser@npm:20.x, yargs-parser@npm:^20.2.2, yargs-parser@npm:^20.2.3, yargs-parser@npm:^20.2.7": +"yargs-parser@npm:20.x, yargs-parser@npm:^20.2.2, yargs-parser@npm:^20.2.3, yargs-parser@npm:^20.2.9": version: 20.2.9 resolution: "yargs-parser@npm:20.2.9" checksum: 8bb69015f2b0ff9e17b2c8e6bfe224ab463dd00ca211eece72a4cd8a906224d2703fb8a326d36fdd0e68701e201b2a60ed7cf81ce0fd9b3799f9fe7745977ae3 @@ -39551,3 +41053,10 @@ __metadata: checksum: 28a1bebacab3bc60150b6b0a2ba1db2ad033f068e81f05e4892ec0ea13ae63f5d140a1d692062ac0657840c8da076f35b94433b5f1c329d7803b247de80f064a languageName: node linkType: hard + +"zwitch@npm:^2.0.0": + version: 2.0.2 + resolution: "zwitch@npm:2.0.2" + checksum: 8edd7af8375f12f64d8dbef815af32cd77bd9237d0b013210ba4e3aef25fdc460fe264cd0a19deabe9f86ef0c607240ebac1a336bf4a70bf06ef53e0652de116 + languageName: node + linkType: hard From fca252e7dc259ef2151f41b612cfef38edcc2373 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Laura=20Fern=C3=A1ndez?= Date: Mon, 3 Oct 2022 10:27:04 +0200 Subject: [PATCH 012/135] A11y: enable rule jsx-a11y/alt-text (#55832) * Enable jsx-a11y/alt-text rule * Fix errors * Fix tests * Enable jsx-a11y/alt-text rule after solving merge conflict * Delete unused import * Modify files according to the reviewer's comments * Revert test changes and update snapshot * tweaks to image alt names Co-authored-by: Ashley Harrison --- .eslintrc | 2 +- .../src/components/Forms/Legacy/Select/SelectOption.tsx | 2 +- .../Select/__snapshots__/SelectOption.test.tsx.snap | 1 + packages/grafana-ui/src/components/Table/ImageCell.tsx | 4 ++-- pkg/build/cmd/rpm.go | 2 +- public/app/core/components/AppChrome/TopSearchBar.tsx | 2 +- .../core/components/PermissionList/PermissionListItem.tsx | 4 ++-- .../components/rule-editor/rule-types/RuleType.tsx | 2 +- public/app/features/correlations/CorrelationsPage.tsx | 2 +- .../components/DashboardSettings/PreviewSettings.tsx | 4 ++-- .../dashboard/components/PubdashFooter/PubdashFooter.tsx | 2 +- public/app/features/dimensions/editors/FileUploader.tsx | 2 +- public/app/features/dimensions/editors/ResourceCards.tsx | 2 +- public/app/features/dimensions/editors/URLPickerTab.tsx | 4 +++- public/app/features/search/components/SearchCard.tsx | 8 +++++++- .../app/features/search/components/SearchCardExpanded.tsx | 1 + public/app/features/search/page/components/columns.tsx | 2 +- public/app/features/storage/FileView.tsx | 2 +- .../plugins/datasource/dashboard/DashboardQueryEditor.tsx | 2 +- public/app/plugins/datasource/prometheus/datasource.tsx | 1 + .../timeseries/plugins/annotations/AnnotationTooltip.tsx | 2 +- 21 files changed, 32 insertions(+), 21 deletions(-) diff --git a/.eslintrc b/.eslintrc index 3d3cae6a0fd..c70c9f3ebf8 100644 --- a/.eslintrc +++ b/.eslintrc @@ -67,7 +67,7 @@ // we should fix them one by one and mark them as errors // once they're all fixed, we can remove them all and instead extend the strict preset // with "extends": ["plugin:jsx-a11y/strict"] - "jsx-a11y/alt-text": "off", + "jsx-a11y/alt-text": "error", "jsx-a11y/anchor-has-content": "error", "jsx-a11y/anchor-is-valid": "off", "jsx-a11y/aria-activedescendant-has-tabindex": "error", diff --git a/packages/grafana-ui/src/components/Forms/Legacy/Select/SelectOption.tsx b/packages/grafana-ui/src/components/Forms/Legacy/Select/SelectOption.tsx index ecfa3948e54..c618e71605e 100644 --- a/packages/grafana-ui/src/components/Forms/Legacy/Select/SelectOption.tsx +++ b/packages/grafana-ui/src/components/Forms/Legacy/Select/SelectOption.tsx @@ -17,7 +17,7 @@ export const SelectOption = (props: ExtendedOptionProps) => { return (
- {data.imgUrl && } + {data.imgUrl && }
{children}
{data.description &&
{data.description}
} diff --git a/packages/grafana-ui/src/components/Forms/Legacy/Select/__snapshots__/SelectOption.test.tsx.snap b/packages/grafana-ui/src/components/Forms/Legacy/Select/__snapshots__/SelectOption.test.tsx.snap index 8146572a82d..157d8ca4818 100644 --- a/packages/grafana-ui/src/components/Forms/Legacy/Select/__snapshots__/SelectOption.test.tsx.snap +++ b/packages/grafana-ui/src/components/Forms/Legacy/Select/__snapshots__/SelectOption.test.tsx.snap @@ -14,6 +14,7 @@ exports[`SelectOption renders correctly 1`] = ` className="gf-form-select-box__desc-option" > diff --git a/packages/grafana-ui/src/components/Table/ImageCell.tsx b/packages/grafana-ui/src/components/Table/ImageCell.tsx index 9c90f009aae..6961be2fe22 100644 --- a/packages/grafana-ui/src/components/Table/ImageCell.tsx +++ b/packages/grafana-ui/src/components/Table/ImageCell.tsx @@ -15,13 +15,13 @@ export const ImageCell: FC = (props) => { return (
- {!hasLinks && } + {!hasLinks && } {hasLinks && ( getCellLinks(field, row) || []}> {(api) => { return (
- +
); }} diff --git a/pkg/build/cmd/rpm.go b/pkg/build/cmd/rpm.go index 9072c50750f..ef5725c959c 100644 --- a/pkg/build/cmd/rpm.go +++ b/pkg/build/cmd/rpm.go @@ -291,7 +291,7 @@ func signRPMRepo(repoRoot string, cfg PublishConfig) error { PrimaryKey: pubKey, PrivateKey: privKey, Identities: map[string]*openpgp.Identity{ - uid.Id: &openpgp.Identity{ + uid.Id: { Name: uid.Name, UserId: uid, SelfSignature: &packet.Signature{ diff --git a/public/app/core/components/AppChrome/TopSearchBar.tsx b/public/app/core/components/AppChrome/TopSearchBar.tsx index 432e7a5d792..0a982eb8e1a 100644 --- a/public/app/core/components/AppChrome/TopSearchBar.tsx +++ b/public/app/core/components/AppChrome/TopSearchBar.tsx @@ -48,7 +48,7 @@ export function TopSearchBar() { {profileNode && ( }> )} diff --git a/public/app/core/components/PermissionList/PermissionListItem.tsx b/public/app/core/components/PermissionList/PermissionListItem.tsx index 6fecca391df..f93b2791107 100644 --- a/public/app/core/components/PermissionList/PermissionListItem.tsx +++ b/public/app/core/components/PermissionList/PermissionListItem.tsx @@ -11,10 +11,10 @@ const setClassNameHelper = (inherited: boolean) => { function ItemAvatar({ item }: { item: DashboardAcl }) { if (item.userAvatarUrl) { - return ; + return User avatar; } if (item.teamAvatarUrl) { - return ; + return Team avatar; } if (item.role === 'Editor') { return ; diff --git a/public/app/features/alerting/unified/components/rule-editor/rule-types/RuleType.tsx b/public/app/features/alerting/unified/components/rule-editor/rule-types/RuleType.tsx index 258617c1730..163af5695e8 100644 --- a/public/app/features/alerting/unified/components/rule-editor/rule-types/RuleType.tsx +++ b/public/app/features/alerting/unified/components/rule-editor/rule-types/RuleType.tsx @@ -32,7 +32,7 @@ const RuleType: FC = (props) => { return ( onClick(value)} disabled={disabled}> - + {name} {description} diff --git a/public/app/features/correlations/CorrelationsPage.tsx b/public/app/features/correlations/CorrelationsPage.tsx index a8a17e2046c..d1b8824c13d 100644 --- a/public/app/features/correlations/CorrelationsPage.tsx +++ b/public/app/features/correlations/CorrelationsPage.tsx @@ -184,7 +184,7 @@ const DataSourceCell = memo( return ( - + {value.name} ); diff --git a/public/app/features/dashboard/components/DashboardSettings/PreviewSettings.tsx b/public/app/features/dashboard/components/DashboardSettings/PreviewSettings.tsx index 407c2f96783..2d4f4dffc12 100644 --- a/public/app/features/dashboard/components/DashboardSettings/PreviewSettings.tsx +++ b/public/app/features/dashboard/components/DashboardSettings/PreviewSettings.tsx @@ -70,10 +70,10 @@ export class PreviewSettings extends PureComponent { - + Preview of dashboard in dark theme - + Preview of dashboard in light theme diff --git a/public/app/features/dashboard/components/PubdashFooter/PubdashFooter.tsx b/public/app/features/dashboard/components/PubdashFooter/PubdashFooter.tsx index e281c11f827..b94c7484454 100644 --- a/public/app/features/dashboard/components/PubdashFooter/PubdashFooter.tsx +++ b/public/app/features/dashboard/components/PubdashFooter/PubdashFooter.tsx @@ -11,7 +11,7 @@ export const PubdashFooter = function () { diff --git a/public/app/features/dimensions/editors/FileUploader.tsx b/public/app/features/dimensions/editors/FileUploader.tsx index 7ea6c151039..9a8cf21712d 100644 --- a/public/app/features/dimensions/editors/FileUploader.tsx +++ b/public/app/features/dimensions/editors/FileUploader.tsx @@ -37,7 +37,7 @@ export const FileUploader = ({ mediaType, setFormData, setUpload, error }: Props
{mediaType === MediaType.Icon && } - {mediaType === MediaType.Image && } + {mediaType === MediaType.Image && Preview of the uploaded file}
); diff --git a/public/app/features/dimensions/editors/ResourceCards.tsx b/public/app/features/dimensions/editors/ResourceCards.tsx index afd7e0d6bd1..49aa6ea804c 100644 --- a/public/app/features/dimensions/editors/ResourceCards.tsx +++ b/public/app/features/dimensions/editors/ResourceCards.tsx @@ -40,7 +40,7 @@ function Cell(props: CellProps) { {card.imgUrl.endsWith('.svg') ? ( ) : ( - + )}
{card.label.slice(0, -4)}
diff --git a/public/app/features/dimensions/editors/URLPickerTab.tsx b/public/app/features/dimensions/editors/URLPickerTab.tsx index 5402d2e6112..6cf7ea8df8b 100644 --- a/public/app/features/dimensions/editors/URLPickerTab.tsx +++ b/public/app/features/dimensions/editors/URLPickerTab.tsx @@ -34,7 +34,9 @@ export const URLPickerTab = (props: Props) => {
{mediaType === MediaType.Icon && } - {mediaType === MediaType.Image && newValue && } + {mediaType === MediaType.Image && newValue && ( + Preview of the selected URL + )}
diff --git a/public/app/features/search/components/SearchCard.tsx b/public/app/features/search/components/SearchCard.tsx index d99ddd7b318..b2d6d026f61 100644 --- a/public/app/features/search/components/SearchCard.tsx +++ b/public/app/features/search/components/SearchCard.tsx @@ -130,7 +130,13 @@ export function SearchCard({ editable, item, onTagSelected, onToggleChecked, onC onClick={onCheckboxClick} /> {hasImage ? ( - setHasImage(false)} /> + Dashboard preview setHasImage(false)} + /> ) : (
{item.icon ? ( diff --git a/public/app/features/search/components/SearchCardExpanded.tsx b/public/app/features/search/components/SearchCardExpanded.tsx index c369df0f889..51b72bd4f49 100644 --- a/public/app/features/search/components/SearchCardExpanded.tsx +++ b/public/app/features/search/components/SearchCardExpanded.tsx @@ -33,6 +33,7 @@ export function SearchCardExpanded({ className, imageHeight, imageWidth, item, l {hasImage ? ( Dashboard preview setHasImage(true)} diff --git a/public/app/features/search/page/components/columns.tsx b/public/app/features/search/page/components/columns.tsx index 03a57dce58a..b1c0ab6f79c 100644 --- a/public/app/features/search/page/components/columns.tsx +++ b/public/app/features/search/page/components/columns.tsx @@ -302,7 +302,7 @@ function makeDataSourceColumn( onDatasourceChange(settings.uid); }} > - + {settings.name} ); diff --git a/public/app/features/storage/FileView.tsx b/public/app/features/storage/FileView.tsx index df22b93e951..0405ffe2433 100644 --- a/public/app/features/storage/FileView.tsx +++ b/public/app/features/storage/FileView.tsx @@ -62,7 +62,7 @@ export function FileView({ listing, path, onPathChange, view }: Props) { return ( ); diff --git a/public/app/plugins/datasource/dashboard/DashboardQueryEditor.tsx b/public/app/plugins/datasource/dashboard/DashboardQueryEditor.tsx index 6415142017b..91d18d5e3bf 100644 --- a/public/app/plugins/datasource/dashboard/DashboardQueryEditor.tsx +++ b/public/app/plugins/datasource/dashboard/DashboardQueryEditor.tsx @@ -168,7 +168,7 @@ export function DashboardQueryEditor({ panelData, queries, onChange, onRunQuerie {results.map((target, i) => (
- + {target.refId}:
diff --git a/public/app/plugins/datasource/prometheus/datasource.tsx b/public/app/plugins/datasource/prometheus/datasource.tsx index 41fa69a5faf..166689782aa 100644 --- a/public/app/plugins/datasource/prometheus/datasource.tsx +++ b/public/app/plugins/datasource/prometheus/datasource.tsx @@ -923,6 +923,7 @@ export class PrometheusDatasource {' '} {buildInfo.application ? AppDisplayNames[buildInfo.application] : 'Unknown'} diff --git a/public/app/plugins/panel/timeseries/plugins/annotations/AnnotationTooltip.tsx b/public/app/plugins/panel/timeseries/plugins/annotations/AnnotationTooltip.tsx index 0a6da533d90..51a0f01a149 100644 --- a/public/app/plugins/panel/timeseries/plugins/annotations/AnnotationTooltip.tsx +++ b/public/app/plugins/panel/timeseries/plugins/annotations/AnnotationTooltip.tsx @@ -37,7 +37,7 @@ export const AnnotationTooltip = ({ const ts = {Boolean(annotation.isRegion) ? `${time} - ${timeEnd}` : time}; if (annotation.login && annotation.avatarUrl) { - avatar = ; + avatar = Annotation avatar; } if (annotation.alertId !== undefined && annotation.newState) { From 501e921b2b13d19964a2a0e900682e6707199158 Mon Sep 17 00:00:00 2001 From: gotjosh Date: Mon, 3 Oct 2022 09:56:27 +0100 Subject: [PATCH 013/135] Alerting: Allow created by to be manually set when there's no creator for silences (#55952) * Alerting: Allow created by to be manually set when there's no creator Grafana has a mode that allows unauthenticated interaction, typically the created by field of a silence is inferred from the current logged user. When this is not present, the field is left black and thus the silence creation fails. This allows us to set the created by when we is not possible to infer it from the current user. * Show created by input field only if user is not logged * Add test for new logic with createdBy input field Co-authored-by: Sonia Aguilar --- .../alerting/unified/Silences.test.tsx | 18 +++++++++++++++++- .../components/silences/SilencesEditor.tsx | 15 +++++++++++++++ 2 files changed, 32 insertions(+), 1 deletion(-) diff --git a/public/app/features/alerting/unified/Silences.test.tsx b/public/app/features/alerting/unified/Silences.test.tsx index d3f1fe9b1a5..efe5d0b6b37 100644 --- a/public/app/features/alerting/unified/Silences.test.tsx +++ b/public/app/features/alerting/unified/Silences.test.tsx @@ -6,7 +6,7 @@ import { Router } from 'react-router-dom'; import { byLabelText, byPlaceholderText, byRole, byTestId, byText } from 'testing-library-selector'; import { dateTime } from '@grafana/data'; -import { locationService, setDataSourceSrv } from '@grafana/runtime'; +import { locationService, setDataSourceSrv, config } from '@grafana/runtime'; import { contextSrv } from 'app/core/services/context_srv'; import { AlertState, MatcherOperator } from 'app/plugins/datasource/alertmanager/types'; import { configureStore } from 'app/store/configureStore'; @@ -70,6 +70,7 @@ const ui = { matcherOperator: (operator: MatcherOperator) => byText(operator, { exact: true }), addMatcherButton: byRole('button', { name: 'Add matcher' }), submit: byText('Submit'), + createdBy: byText(/created by \*/i), }, }; @@ -112,6 +113,11 @@ const resetMocks = () => { mocks.contextSrv.hasAccess.mockImplementation(() => true); }; +const setUserLogged = (isLogged: boolean) => { + config.bootData.user.isSignedIn = isLogged; + config.bootData.user.name = isLogged ? 'admin' : ''; +}; + describe('Silences', () => { beforeAll(resetMocks); afterEach(resetMocks); @@ -210,9 +216,19 @@ describe('Silence edit', () => { afterEach(resetMocks); beforeEach(() => { + setUserLogged(true); setDataSourceSrv(new MockDataSourceSrv(dataSources)); }); + it('Should not render createdBy if user is logged in and has a name', async () => { + renderSilences(baseUrlPath); + await waitFor(() => expect(ui.editor.createdBy.query()).not.toBeInTheDocument()); + }); + it('Should render createdBy if user is not logged or has no name', async () => { + setUserLogged(false); + renderSilences(baseUrlPath); + await waitFor(() => expect(ui.editor.createdBy.get()).toBeInTheDocument()); + }); it( 'prefills the matchers field with matchers params', async () => { diff --git a/public/app/features/alerting/unified/components/silences/SilencesEditor.tsx b/public/app/features/alerting/unified/components/silences/SilencesEditor.tsx index 52fa9d54bdc..2c37eddfd47 100644 --- a/public/app/features/alerting/unified/components/silences/SilencesEditor.tsx +++ b/public/app/features/alerting/unified/components/silences/SilencesEditor.tsx @@ -164,6 +164,7 @@ export const SilencesEditor: FC = ({ silence, alertManagerSourceName }) = 700, [clearErrors, duration, endsAt, prevDuration, setValue, startsAt] ); + const userLogged = Boolean(config.bootData.user.isSignedIn && config.bootData.user.name); return ( @@ -206,6 +207,20 @@ export const SilencesEditor: FC = ({ silence, alertManagerSourceName }) = placeholder="Details about the silence" /> + {!userLogged && ( + + + + )}
From f7de253cdd4031456287b002d7e57758b74e3636 Mon Sep 17 00:00:00 2001 From: Eric Leijonmarck Date: Mon, 3 Oct 2022 10:59:24 +0200 Subject: [PATCH 014/135] fix: remove permission grouping (#56157) --- pkg/services/accesscontrol/database/database.go | 3 --- 1 file changed, 3 deletions(-) diff --git a/pkg/services/accesscontrol/database/database.go b/pkg/services/accesscontrol/database/database.go index dcf967751ad..72b25ca2cb9 100644 --- a/pkg/services/accesscontrol/database/database.go +++ b/pkg/services/accesscontrol/database/database.go @@ -49,9 +49,6 @@ func (s *AccessControlStore) GetUserPermissions(ctx context.Context, query acces params = append(params, a) } } - q += ` - ORDER BY permission.scope - ` if err := sess.SQL(q, params...).Find(&result); err != nil { return err } From 3e688ecf7d2b7479a13a30bd720c2a0296ba92c0 Mon Sep 17 00:00:00 2001 From: Ashley Harrison Date: Mon, 3 Oct 2022 10:09:32 +0100 Subject: [PATCH 015/135] Navigation: remove `description` from the backend navmodel and use `subTitle` instead (#56155) * remove description from the backend navmodel and use subTitle instead * only add admin subtitle in topnav --- pkg/services/navtree/models.go | 1 - pkg/services/navtree/navtreeimpl/admin.go | 113 +++++++++--------- pkg/services/navtree/navtreeimpl/applinks.go | 42 +++---- pkg/services/navtree/navtreeimpl/navtree.go | 111 +++++++++-------- .../AppChrome/NavLandingPage.test.tsx | 22 ++-- .../components/AppChrome/NavLandingPage.tsx | 10 +- .../core/components/PageNew/PageHeader.tsx | 2 +- 7 files changed, 149 insertions(+), 152 deletions(-) diff --git a/pkg/services/navtree/models.go b/pkg/services/navtree/models.go index 46fe6738271..be3bb89b889 100644 --- a/pkg/services/navtree/models.go +++ b/pkg/services/navtree/models.go @@ -44,7 +44,6 @@ const ( type NavLink struct { Id string `json:"id,omitempty"` Text string `json:"text"` - Description string `json:"description,omitempty"` Section string `json:"section,omitempty"` SubTitle string `json:"subTitle,omitempty"` Icon string `json:"icon,omitempty"` // Available icons can be browsed in Storybook: https://developers.grafana.com/ui/latest/index.html?path=/story/docs-overview-icon--icons-overview diff --git a/pkg/services/navtree/navtreeimpl/admin.go b/pkg/services/navtree/navtreeimpl/admin.go index af3bcff0d6f..d6016f1f1ab 100644 --- a/pkg/services/navtree/navtreeimpl/admin.go +++ b/pkg/services/navtree/navtreeimpl/admin.go @@ -18,62 +18,62 @@ func (s *ServiceImpl) getOrgAdminNode(c *models.ReqContext) (*navtree.NavLink, e hasAccess := ac.HasAccess(s.accessControl, c) if hasAccess(ac.ReqOrgAdmin, datasources.ConfigurationPageAccess) { configNodes = append(configNodes, &navtree.NavLink{ - Text: "Data sources", - Icon: "database", - Description: "Add and configure data sources", - Id: "datasources", - Url: s.cfg.AppSubURL + "/datasources", + Text: "Data sources", + Icon: "database", + SubTitle: "Add and configure data sources", + Id: "datasources", + Url: s.cfg.AppSubURL + "/datasources", }) } if s.features.IsEnabled(featuremgmt.FlagCorrelations) && hasAccess(ac.ReqOrgAdmin, correlations.ConfigurationPageAccess) { configNodes = append(configNodes, &navtree.NavLink{ - Text: "Correlations", - Icon: "gf-glue", - Description: "Add and configure correlations", - Id: "correlations", - Url: s.cfg.AppSubURL + "/datasources/correlations", + Text: "Correlations", + Icon: "gf-glue", + SubTitle: "Add and configure correlations", + Id: "correlations", + Url: s.cfg.AppSubURL + "/datasources/correlations", }) } if hasAccess(ac.ReqOrgAdmin, ac.EvalPermission(ac.ActionOrgUsersRead)) { configNodes = append(configNodes, &navtree.NavLink{ - Text: "Users", - Id: "users", - Description: "Invite and assign roles to users", - Icon: "user", - Url: s.cfg.AppSubURL + "/org/users", + Text: "Users", + Id: "users", + SubTitle: "Invite and assign roles to users", + Icon: "user", + Url: s.cfg.AppSubURL + "/org/users", }) } if hasAccess(s.ReqCanAdminTeams, ac.TeamsAccessEvaluator) { configNodes = append(configNodes, &navtree.NavLink{ - Text: "Teams", - Id: "teams", - Description: "Groups of users that have common dashboard and permission needs", - Icon: "users-alt", - Url: s.cfg.AppSubURL + "/org/teams", + Text: "Teams", + Id: "teams", + SubTitle: "Groups of users that have common dashboard and permission needs", + Icon: "users-alt", + Url: s.cfg.AppSubURL + "/org/teams", }) } // FIXME: while we don't have a permissions for listing plugins the legacy check has to stay as a default if plugins.ReqCanAdminPlugins(s.cfg)(c) || hasAccess(plugins.ReqCanAdminPlugins(s.cfg), plugins.AdminAccessEvaluator) { configNodes = append(configNodes, &navtree.NavLink{ - Text: "Plugins", - Id: "plugins", - Description: "Extend the Grafana experience with plugins", - Icon: "plug", - Url: s.cfg.AppSubURL + "/plugins", + Text: "Plugins", + Id: "plugins", + SubTitle: "Extend the Grafana experience with plugins", + Icon: "plug", + Url: s.cfg.AppSubURL + "/plugins", }) } if hasAccess(ac.ReqOrgAdmin, ac.OrgPreferencesAccessEvaluator) { configNodes = append(configNodes, &navtree.NavLink{ - Text: "Preferences", - Id: "org-settings", - Description: "Manage preferences across an organization", - Icon: "sliders-v-alt", - Url: s.cfg.AppSubURL + "/org", + Text: "Preferences", + Id: "org-settings", + SubTitle: "Manage preferences across an organization", + Icon: "sliders-v-alt", + Url: s.cfg.AppSubURL + "/org", }) } @@ -86,21 +86,21 @@ func (s *ServiceImpl) getOrgAdminNode(c *models.ReqContext) (*navtree.NavLink, e apiKeysHidden := hideApiKeys == "1" && len(apiKeys) == 0 if hasAccess(ac.ReqOrgAdmin, ac.ApiKeyAccessEvaluator) && !apiKeysHidden { configNodes = append(configNodes, &navtree.NavLink{ - Text: "API keys", - Id: "apikeys", - Description: "Manage and create API keys that are used to interact with Grafana HTTP APIs", - Icon: "key-skeleton-alt", - Url: s.cfg.AppSubURL + "/org/apikeys", + Text: "API keys", + Id: "apikeys", + SubTitle: "Manage and create API keys that are used to interact with Grafana HTTP APIs", + Icon: "key-skeleton-alt", + Url: s.cfg.AppSubURL + "/org/apikeys", }) } if enableServiceAccount(s, c) { configNodes = append(configNodes, &navtree.NavLink{ - Text: "Service accounts", - Id: "serviceaccounts", - Description: "Use service accounts to run automated workloads in Grafana", - Icon: "gf-service-account", - Url: s.cfg.AppSubURL + "/org/serviceaccounts", + Text: "Service accounts", + Id: "serviceaccounts", + SubTitle: "Use service accounts to run automated workloads in Grafana", + Icon: "gf-service-account", + Url: s.cfg.AppSubURL + "/org/serviceaccounts", }) } @@ -125,29 +125,29 @@ func (s *ServiceImpl) getServerAdminNode(c *models.ReqContext) *navtree.NavLink if hasAccess(ac.ReqGrafanaAdmin, ac.EvalPermission(ac.ActionUsersRead, ac.ScopeGlobalUsersAll)) { adminNavLinks = append(adminNavLinks, &navtree.NavLink{ - Text: "Users", Description: "Manage and create users across the whole Grafana server", Id: "global-users", Url: s.cfg.AppSubURL + "/admin/users", Icon: "user", + Text: "Users", SubTitle: "Manage and create users across the whole Grafana server", Id: "global-users", Url: s.cfg.AppSubURL + "/admin/users", Icon: "user", }) } if hasGlobalAccess(ac.ReqGrafanaAdmin, orgsAccessEvaluator) { adminNavLinks = append(adminNavLinks, &navtree.NavLink{ - Text: "Organizations", Description: "Isolated instances of Grafana running on the same server", Id: "global-orgs", Url: s.cfg.AppSubURL + "/admin/orgs", Icon: "building", + Text: "Organizations", SubTitle: "Isolated instances of Grafana running on the same server", Id: "global-orgs", Url: s.cfg.AppSubURL + "/admin/orgs", Icon: "building", }) } if hasAccess(ac.ReqGrafanaAdmin, ac.EvalPermission(ac.ActionSettingsRead)) { adminNavLinks = append(adminNavLinks, &navtree.NavLink{ - Text: "Settings", Description: "View the settings defined in your Grafana config", Id: "server-settings", Url: s.cfg.AppSubURL + "/admin/settings", Icon: "sliders-v-alt", + Text: "Settings", SubTitle: "View the settings defined in your Grafana config", Id: "server-settings", Url: s.cfg.AppSubURL + "/admin/settings", Icon: "sliders-v-alt", }) } if hasAccess(ac.ReqGrafanaAdmin, ac.EvalPermission(ac.ActionSettingsRead)) && s.features.IsEnabled(featuremgmt.FlagStorage) { adminNavLinks = append(adminNavLinks, &navtree.NavLink{ - Text: "Storage", - Id: "storage", - Description: "Manage file storage", - Icon: "cube", - Url: s.cfg.AppSubURL + "/admin/storage", + Text: "Storage", + Id: "storage", + SubTitle: "Manage file storage", + Icon: "cube", + Url: s.cfg.AppSubURL + "/admin/storage", }) } @@ -158,13 +158,16 @@ func (s *ServiceImpl) getServerAdminNode(c *models.ReqContext) *navtree.NavLink } adminNode := &navtree.NavLink{ - Text: "Server admin", - Description: "Manage server-wide settings and access to resources such as organizations, users, and licenses", - Id: navtree.NavIDAdmin, - Icon: "shield", - SortWeight: navtree.WeightAdmin, - Section: navtree.NavSectionConfig, - Children: adminNavLinks, + Text: "Server admin", + Id: navtree.NavIDAdmin, + Icon: "shield", + SortWeight: navtree.WeightAdmin, + Section: navtree.NavSectionConfig, + Children: adminNavLinks, + } + + if s.cfg.IsFeatureToggleEnabled(featuremgmt.FlagTopnav) { + adminNode.SubTitle = "Manage server-wide settings and access to resources such as organizations, users, and licenses" } if len(adminNavLinks) > 0 { diff --git a/pkg/services/navtree/navtreeimpl/applinks.go b/pkg/services/navtree/navtreeimpl/applinks.go index 88b52e62b5b..133c5aa359e 100644 --- a/pkg/services/navtree/navtreeimpl/applinks.go +++ b/pkg/services/navtree/navtreeimpl/applinks.go @@ -59,13 +59,13 @@ func (s *ServiceImpl) addAppLinks(treeRoot *navtree.NavTreeRoot, c *models.ReqCo if topNavEnabled { treeRoot.AddSection(&navtree.NavLink{ - Text: "Apps", - Icon: "apps", - Description: "App plugins that extend the Grafana experience", - Id: "apps", - Children: appLinks, - Section: navtree.NavSectionCore, - Url: s.cfg.AppSubURL + "/apps", + Text: "Apps", + Icon: "apps", + SubTitle: "App plugins that extend the Grafana experience", + Id: "apps", + Children: appLinks, + Section: navtree.NavSectionCore, + Url: s.cfg.AppSubURL + "/apps", }) } else { for _, appLink := range appLinks { @@ -150,23 +150,23 @@ func (s *ServiceImpl) processAppPlugin(plugin plugins.PluginDTO, c *models.ReqCo } else { if navConfig.SectionID == navtree.NavIDMonitoring { treeRoot.AddSection(&navtree.NavLink{ - Text: "Monitoring", - Id: navtree.NavIDMonitoring, - Description: "Monitoring and infrastructure apps", - Icon: "heart-rate", - Section: navtree.NavSectionCore, - Children: []*navtree.NavLink{appLink}, - Url: s.cfg.AppSubURL + "/monitoring", + Text: "Monitoring", + Id: navtree.NavIDMonitoring, + SubTitle: "Monitoring and infrastructure apps", + Icon: "heart-rate", + Section: navtree.NavSectionCore, + Children: []*navtree.NavLink{appLink}, + Url: s.cfg.AppSubURL + "/monitoring", }) } else if navConfig.SectionID == navtree.NavIDAlertsAndIncidents && alertingNode != nil { treeRoot.AddSection(&navtree.NavLink{ - Text: "Alerts & incidents", - Id: navtree.NavIDAlertsAndIncidents, - Description: "Alerting and incident management apps", - Icon: "bell", - Section: navtree.NavSectionCore, - Children: []*navtree.NavLink{alertingNode, appLink}, - Url: s.cfg.AppSubURL + "/alerts-and-incidents", + Text: "Alerts & incidents", + Id: navtree.NavIDAlertsAndIncidents, + SubTitle: "Alerting and incident management apps", + Icon: "bell", + Section: navtree.NavSectionCore, + Children: []*navtree.NavLink{alertingNode, appLink}, + Url: s.cfg.AppSubURL + "/alerts-and-incidents", }) treeRoot.RemoveSection(alertingNode) } else { diff --git a/pkg/services/navtree/navtreeimpl/navtree.go b/pkg/services/navtree/navtreeimpl/navtree.go index b723fe536b0..888f7d29b92 100644 --- a/pkg/services/navtree/navtreeimpl/navtree.go +++ b/pkg/services/navtree/navtreeimpl/navtree.go @@ -88,15 +88,14 @@ func (s *ServiceImpl) GetNavTree(c *models.ReqContext, hasEditPerm bool, prefs * dashboardChildLinks := s.buildDashboardNavLinks(c, hasEditPerm) dashboardLink := &navtree.NavLink{ - Text: "Dashboards", - Id: navtree.NavIDDashboards, - Description: "Create and manage dashboards to visualize your data", - SubTitle: "Manage dashboards and folders", - Icon: "apps", - Url: s.cfg.AppSubURL + "/dashboards", - SortWeight: navtree.WeightDashboard, - Section: navtree.NavSectionCore, - Children: dashboardChildLinks, + Text: "Dashboards", + Id: navtree.NavIDDashboards, + SubTitle: "Create and manage dashboards to visualize your data", + Icon: "apps", + Url: s.cfg.AppSubURL + "/dashboards", + SortWeight: navtree.WeightDashboard, + Section: navtree.NavSectionCore, + Children: dashboardChildLinks, } treeRoot.AddSection(dashboardLink) @@ -318,24 +317,24 @@ func (s *ServiceImpl) buildDashboardNavLinks(c *models.ReqContext, hasEditPerm b } dashboardChildNavs = append(dashboardChildNavs, &navtree.NavLink{ - Text: "Playlists", Description: "Groups of dashboards that are displayed in a sequence", Id: "dashboards/playlists", Url: s.cfg.AppSubURL + "/playlists", Icon: "presentation-play", + Text: "Playlists", SubTitle: "Groups of dashboards that are displayed in a sequence", Id: "dashboards/playlists", Url: s.cfg.AppSubURL + "/playlists", Icon: "presentation-play", }) if c.IsSignedIn { dashboardChildNavs = append(dashboardChildNavs, &navtree.NavLink{ - Text: "Snapshots", - Description: "Interactive, publically available, point-in-time representations of dashboards", - Id: "dashboards/snapshots", - Url: s.cfg.AppSubURL + "/dashboard/snapshots", - Icon: "camera", + Text: "Snapshots", + SubTitle: "Interactive, publically available, point-in-time representations of dashboards", + Id: "dashboards/snapshots", + Url: s.cfg.AppSubURL + "/dashboard/snapshots", + Icon: "camera", }) dashboardChildNavs = append(dashboardChildNavs, &navtree.NavLink{ - Text: "Library panels", - Description: "Reusable panels that can be added to multiple dashboards", - Id: "dashboards/library-panels", - Url: s.cfg.AppSubURL + "/library-panels", - Icon: "library-panel", + Text: "Library panels", + SubTitle: "Reusable panels that can be added to multiple dashboards", + Id: "dashboards/library-panels", + Url: s.cfg.AppSubURL + "/library-panels", + Icon: "library-panel", }) } @@ -391,14 +390,13 @@ func (s *ServiceImpl) buildLegacyAlertNavLinks(c *models.ReqContext) *navtree.Na } var alertNav = navtree.NavLink{ - Text: "Alerting", - Description: "Learn about problems in your systems moments after they occur", - SubTitle: "Alert rules and notifications", - Id: "alerting-legacy", - Icon: "bell", - Children: alertChildNavs, - Section: navtree.NavSectionCore, - SortWeight: navtree.WeightAlerting, + Text: "Alerting", + SubTitle: "Learn about problems in your systems moments after they occur", + Id: "alerting-legacy", + Icon: "bell", + Children: alertChildNavs, + Section: navtree.NavSectionCore, + SortWeight: navtree.WeightAlerting, } if s.features.IsEnabled(featuremgmt.FlagTopnav) { @@ -416,21 +414,21 @@ func (s *ServiceImpl) buildAlertNavLinks(c *models.ReqContext, hasEditPerm bool) if hasAccess(ac.ReqViewer, ac.EvalAny(ac.EvalPermission(ac.ActionAlertingRuleRead), ac.EvalPermission(ac.ActionAlertingRuleExternalRead))) { alertChildNavs = append(alertChildNavs, &navtree.NavLink{ - Text: "Alert rules", Description: "Rules that determine whether an alert will fire", Id: "alert-list", Url: s.cfg.AppSubURL + "/alerting/list", Icon: "list-ul", + Text: "Alert rules", SubTitle: "Rules that determine whether an alert will fire", Id: "alert-list", Url: s.cfg.AppSubURL + "/alerting/list", Icon: "list-ul", }) } if hasAccess(ac.ReqOrgAdminOrEditor, ac.EvalAny(ac.EvalPermission(ac.ActionAlertingNotificationsRead), ac.EvalPermission(ac.ActionAlertingNotificationsExternalRead))) { alertChildNavs = append(alertChildNavs, &navtree.NavLink{ - Text: "Contact points", Description: "Decide how your contacts are notified when an alert fires", Id: "receivers", Url: s.cfg.AppSubURL + "/alerting/notifications", - Icon: "comment-alt-share", SubTitle: "Manage the settings of your contact points", + Text: "Contact points", SubTitle: "Decide how your contacts are notified when an alert fires", Id: "receivers", Url: s.cfg.AppSubURL + "/alerting/notifications", + Icon: "comment-alt-share", }) - alertChildNavs = append(alertChildNavs, &navtree.NavLink{Text: "Notification policies", Description: "Determine how alerts are routed to contact points", Id: "am-routes", Url: s.cfg.AppSubURL + "/alerting/routes", Icon: "sitemap"}) + alertChildNavs = append(alertChildNavs, &navtree.NavLink{Text: "Notification policies", SubTitle: "Determine how alerts are routed to contact points", Id: "am-routes", Url: s.cfg.AppSubURL + "/alerting/routes", Icon: "sitemap"}) } if hasAccess(ac.ReqViewer, ac.EvalAny(ac.EvalPermission(ac.ActionAlertingInstanceRead), ac.EvalPermission(ac.ActionAlertingInstancesExternalRead))) { - alertChildNavs = append(alertChildNavs, &navtree.NavLink{Text: "Silences", Description: "Stop notifications from one or more alerting rules", Id: "silences", Url: s.cfg.AppSubURL + "/alerting/silences", Icon: "bell-slash"}) - alertChildNavs = append(alertChildNavs, &navtree.NavLink{Text: "Alert groups", Description: "See grouped alerts from an Alertmanager instance", Id: "groups", Url: s.cfg.AppSubURL + "/alerting/groups", Icon: "layer-group"}) + alertChildNavs = append(alertChildNavs, &navtree.NavLink{Text: "Silences", SubTitle: "Stop notifications from one or more alerting rules", Id: "silences", Url: s.cfg.AppSubURL + "/alerting/silences", Icon: "bell-slash"}) + alertChildNavs = append(alertChildNavs, &navtree.NavLink{Text: "Alert groups", SubTitle: "See grouped alerts from an Alertmanager instance", Id: "groups", Url: s.cfg.AppSubURL + "/alerting/groups", Icon: "layer-group"}) } if c.OrgRole == org.RoleAdmin { @@ -455,14 +453,13 @@ func (s *ServiceImpl) buildAlertNavLinks(c *models.ReqContext, hasEditPerm bool) if len(alertChildNavs) > 0 { var alertNav = navtree.NavLink{ - Text: "Alerting", - Description: "Learn about problems in your systems moments after they occur", - SubTitle: "Alert rules and notifications", - Id: navtree.NavIDAlerting, - Icon: "bell", - Children: alertChildNavs, - Section: navtree.NavSectionCore, - SortWeight: navtree.WeightAlerting, + Text: "Alerting", + SubTitle: "Learn about problems in your systems moments after they occur", + Id: navtree.NavIDAlerting, + Icon: "bell", + Children: alertChildNavs, + Section: navtree.NavSectionCore, + SortWeight: navtree.WeightAlerting, } if s.features.IsEnabled(featuremgmt.FlagTopnav) { @@ -485,27 +482,27 @@ func (s *ServiceImpl) buildDataConnectionsNavLink(c *models.ReqContext) *navtree baseUrl := s.cfg.AppSubURL + "/" + baseId children = append(children, &navtree.NavLink{ - Id: baseId + "-datasources", - Text: "Data sources", - Icon: "database", - Description: "Add and configure data sources", - Url: baseUrl + "/datasources", + Id: baseId + "-datasources", + Text: "Data sources", + Icon: "database", + SubTitle: "Add and configure data sources", + Url: baseUrl + "/datasources", }) children = append(children, &navtree.NavLink{ - Id: baseId + "-plugins", - Text: "Plugins", - Icon: "plug", - Description: "Manage plugins", - Url: baseUrl + "/plugins", + Id: baseId + "-plugins", + Text: "Plugins", + Icon: "plug", + SubTitle: "Manage plugins", + Url: baseUrl + "/plugins", }) children = append(children, &navtree.NavLink{ - Id: baseId + "-cloud-integrations", - Text: "Cloud integrations", - Icon: "bolt", - Description: "Manage your cloud integrations", - Url: baseUrl + "/cloud-integrations", + Id: baseId + "-cloud-integrations", + Text: "Cloud integrations", + Icon: "bolt", + SubTitle: "Manage your cloud integrations", + Url: baseUrl + "/cloud-integrations", }) navLink = &navtree.NavLink{ diff --git a/public/app/core/components/AppChrome/NavLandingPage.test.tsx b/public/app/core/components/AppChrome/NavLandingPage.test.tsx index e773e879ca3..3e19f2b7131 100644 --- a/public/app/core/components/AppChrome/NavLandingPage.test.tsx +++ b/public/app/core/components/AppChrome/NavLandingPage.test.tsx @@ -14,26 +14,26 @@ describe('NavLandingPage', () => { const mockSectionSubtitle = 'Section subtitle'; const mockChild1 = { text: 'Child 1', - description: 'Child 1 description', + subTitle: 'Child 1 subTitle', id: 'child1', url: 'mock-section-url/child1', }; const mockChild2 = { text: 'Child 2', - description: 'Child 2 description', + subTitle: 'Child 2 subTitle', id: 'child2', url: 'mock-section-url/child2', }; const mockChild3 = { text: 'Child 3', id: 'child3', - description: 'Child 3 subtitle', + subTitle: 'Child 3 subtitle', url: 'mock-section-url/child3', hideFromTabs: true, children: [ { text: 'Child 3.1', - description: 'Child 3.1 description', + subTitle: 'Child 3.1 subTitle', id: 'child3.1', url: 'mock-section-url/child3/child3.1', }, @@ -75,10 +75,10 @@ describe('NavLandingPage', () => { expect(screen.getByRole('link', { name: mockChild2.text })).toBeInTheDocument(); }); - it('renders the description for each direct child', () => { + it('renders the subTitle for each direct child', () => { setup(); - expect(screen.getByText(mockChild1.description)).toBeInTheDocument(); - expect(screen.getByText(mockChild2.description)).toBeInTheDocument(); + expect(screen.getByText(mockChild1.subTitle)).toBeInTheDocument(); + expect(screen.getByText(mockChild2.subTitle)).toBeInTheDocument(); }); it('renders the heading for nested sections', () => { @@ -86,9 +86,9 @@ describe('NavLandingPage', () => { expect(screen.getByRole('heading', { name: mockChild3.text })).toBeInTheDocument(); }); - it('renders the description for a nested section', () => { + it('renders the subTitle for a nested section', () => { setup(); - expect(screen.getByText(mockChild3.description)).toBeInTheDocument(); + expect(screen.getByText(mockChild3.subTitle)).toBeInTheDocument(); }); it('renders a link for a nested child', () => { @@ -96,8 +96,8 @@ describe('NavLandingPage', () => { expect(screen.getByRole('link', { name: mockChild3.children[0].text })).toBeInTheDocument(); }); - it('renders the description for a nested child', () => { + it('renders the subTitle for a nested child', () => { setup(); - expect(screen.getByText(mockChild3.children[0].description)).toBeInTheDocument(); + expect(screen.getByText(mockChild3.children[0].subTitle)).toBeInTheDocument(); }); }); diff --git a/public/app/core/components/AppChrome/NavLandingPage.tsx b/public/app/core/components/AppChrome/NavLandingPage.tsx index 185dd8ed62a..39f33ae2ef6 100644 --- a/public/app/core/components/AppChrome/NavLandingPage.tsx +++ b/public/app/core/components/AppChrome/NavLandingPage.tsx @@ -27,7 +27,7 @@ export function NavLandingPage({ navId }: Props) { {directChildren?.map((child) => ( @@ -36,15 +36,13 @@ export function NavLandingPage({ navId }: Props) { )} {nestedChildren?.map((child) => (
-
-

{child.text}

-
-
{child.description}
+

{child.text}

+
{child.subTitle}
{child.children?.map((child) => ( diff --git a/public/app/core/components/PageNew/PageHeader.tsx b/public/app/core/components/PageNew/PageHeader.tsx index 8516a27dfda..ff858f4b508 100644 --- a/public/app/core/components/PageNew/PageHeader.tsx +++ b/public/app/core/components/PageNew/PageHeader.tsx @@ -11,7 +11,7 @@ export interface Props { export function PageHeader({ navItem, subTitle }: Props) { const styles = useStyles2(getStyles); - const sub = subTitle ?? navItem.description; + const sub = subTitle ?? navItem.subTitle; return ( <> From f2b06abb330c1dd1c2767730a59af44f2fd1adba Mon Sep 17 00:00:00 2001 From: Ashley Harrison Date: Mon, 3 Oct 2022 10:22:50 +0100 Subject: [PATCH 016/135] Convert SpanDetail/index.test.js to RTL (#56019) --- .betterer.results | 3 - .../SpanDetail/index.test.js | 87 ++++++++----------- 2 files changed, 35 insertions(+), 55 deletions(-) diff --git a/.betterer.results b/.betterer.results index 65b9dce1476..e8f91a1b754 100644 --- a/.betterer.results +++ b/.betterer.results @@ -29,9 +29,6 @@ exports[`no enzyme tests`] = { "packages/jaeger-ui-components/src/TraceTimelineViewer/ListView/index.test.js:1734982398": [ [14, 26, 13, "RegExp match", "2409514259"] ], - "packages/jaeger-ui-components/src/TraceTimelineViewer/SpanDetail/index.test.js:1241675783": [ - [16, 19, 13, "RegExp match", "2409514259"] - ], "packages/jaeger-ui-components/src/TraceTimelineViewer/SpanTreeOffset.test.js:174536706": [ [14, 19, 13, "RegExp match", "2409514259"] ], diff --git a/packages/jaeger-ui-components/src/TraceTimelineViewer/SpanDetail/index.test.js b/packages/jaeger-ui-components/src/TraceTimelineViewer/SpanDetail/index.test.js index b9423169915..70f74c92848 100644 --- a/packages/jaeger-ui-components/src/TraceTimelineViewer/SpanDetail/index.test.js +++ b/packages/jaeger-ui-components/src/TraceTimelineViewer/SpanDetail/index.test.js @@ -14,23 +14,19 @@ jest.mock('../utils'); -import { shallow } from 'enzyme'; +import { render, screen } from '@testing-library/react'; +import userEvent from '@testing-library/user-event'; import React from 'react'; -import LabeledList from '../../common/LabeledList'; import traceGenerator from '../../demo/trace-generators'; import transformTraceData from '../../model/transform-trace-data'; import { formatDuration } from '../utils'; -import AccordianKeyValues from './AccordianKeyValues'; -import AccordianLogs from './AccordianLogs'; import DetailState from './DetailState'; import SpanDetail, { getAbsoluteTime } from './index'; describe('', () => { - let wrapper; - // use `transformTraceData` on a fake trace to get a fully processed span const span = transformTraceData(traceGenerator.trace({ numberOfSpans: 1 })).spans[0]; const detailState = new DetailState().toggleLogs().toggleProcess().toggleReferences().toggleTags(); @@ -47,7 +43,7 @@ describe('', () => { tagsToggle: jest.fn(), warningsToggle: jest.fn(), referencesToggle: jest.fn(), - createFocusSpanLink: jest.fn(), + createFocusSpanLink: jest.fn().mockReturnValue({}), topOfViewRefType: 'Explore', }; span.logs = [ @@ -117,81 +113,68 @@ describe('', () => { props.processToggle.mockReset(); props.logsToggle.mockReset(); props.logItemToggle.mockReset(); - wrapper = shallow(); }); it('renders without exploding', () => { - expect(wrapper).toBeDefined(); + expect(() => render()).not.toThrow(); }); it('shows the operation name', () => { - expect(wrapper.find('h2').text()).toBe(span.operationName); + render(); + expect(screen.getByRole('heading', { name: span.operationName })).toBeInTheDocument(); }); it('lists the service name, duration and start time', () => { - const words = ['Duration:', 'Service:', 'Start Time:']; - const overview = wrapper.find(LabeledList); - expect( - overview - .prop('items') - .map((item) => item.label) - .sort() - ).toEqual(words); + render(); + expect(screen.getByText('Duration:')).toBeInTheDocument(); + expect(screen.getByText('Service:')).toBeInTheDocument(); + expect(screen.getByText('Start Time:')).toBeInTheDocument(); }); it('start time shows the absolute time', () => { - const startTime = wrapper.find(LabeledList).prop('items')[2].value; + render(); const absoluteTime = getAbsoluteTime(span.startTime); - expect(startTime).toContain(absoluteTime); + expect( + screen.getByText((text) => { + return text.includes(absoluteTime); + }) + ).toBeInTheDocument(); }); - it('renders the span tags', () => { - const target = ; - expect(wrapper.containsMatchingElement(target)).toBe(true); - wrapper.find({ data: span.tags }).simulate('toggle'); + it('renders the span tags', async () => { + render(); + await userEvent.click(screen.getByRole('switch', { name: /Attributes/ })); expect(props.tagsToggle).toHaveBeenLastCalledWith(span.spanID); }); - it('renders the process tags', () => { - const target = ; - expect(wrapper.containsMatchingElement(target)).toBe(true); - wrapper.find({ data: span.process.tags }).simulate('toggle'); + it('renders the process tags', async () => { + render(); + await userEvent.click(screen.getByRole('switch', { name: /Resource/ })); expect(props.processToggle).toHaveBeenLastCalledWith(span.spanID); }); - it('renders the logs', () => { - const somethingUniq = {}; - const target = ( - - ); - expect(wrapper.containsMatchingElement(target)).toBe(true); - const accordianLogs = wrapper.find(AccordianLogs); - accordianLogs.simulate('toggle'); - accordianLogs.simulate('itemToggle', somethingUniq); + it('renders the logs', async () => { + render(); + await userEvent.click(screen.getByRole('switch', { name: /Events/ })); expect(props.logsToggle).toHaveBeenLastCalledWith(span.spanID); - expect(props.logItemToggle).toHaveBeenLastCalledWith(span.spanID, somethingUniq); + await userEvent.click(screen.getByRole('switch', { name: /oh the log/ })); + expect(props.logItemToggle).toHaveBeenLastCalledWith(span.spanID, props.span.logs[0]); }); - it('renders the warnings', () => { - const warningElm = wrapper.find({ data: span.warnings }); - expect(warningElm.length).toBe(1); - warningElm.simulate('toggle'); + it('renders the warnings', async () => { + render(); + await userEvent.click(screen.getByRole('switch', { name: /Warnings/ })); expect(props.warningsToggle).toHaveBeenLastCalledWith(span.spanID); }); - it('renders the references', () => { - const refElem = wrapper.find({ data: span.references }); - expect(refElem.length).toBe(1); - refElem.simulate('toggle'); + it('renders the references', async () => { + render(); + await userEvent.click(screen.getByRole('switch', { name: /References/ })); expect(props.referencesToggle).toHaveBeenLastCalledWith(span.spanID); }); it('renders deep link URL', () => { - expect(wrapper.find('a').exists()).toBeTruthy(); + render(); + expect(document.getElementsByTagName('a').length).toBeGreaterThan(1); }); }); From d1b21a5981db378d076ed1d9bbf5fdeff8203939 Mon Sep 17 00:00:00 2001 From: Jack Westbrook Date: Mon, 3 Oct 2022 11:41:38 +0200 Subject: [PATCH 017/135] Grafana UI: Prevent built storybook being bundled with package (#56158) --- packages/grafana-ui/package.json | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/packages/grafana-ui/package.json b/packages/grafana-ui/package.json index 1087ab73961..706c7b6895f 100644 --- a/packages/grafana-ui/package.json +++ b/packages/grafana-ui/package.json @@ -25,10 +25,11 @@ "access": "public" }, "files": [ - "dist", + "./dist", + "!./dist/storybook", "./README.md", "./CHANGELOG.md", - "LICENSE_APACHE2" + "./LICENSE_APACHE2" ], "scripts": { "build": "tsc -p ./tsconfig.build.json && rollup -c rollup.config.ts", From 3372668889f057719b16867408ba857d391ad657 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 3 Oct 2022 10:58:26 +0100 Subject: [PATCH 018/135] Update dependency css-minimizer-webpack-plugin to v4.2.0 (#56153) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 63 +++++++++++++++++++++++++++++++++++++++++++++++----- 2 files changed, 58 insertions(+), 7 deletions(-) diff --git a/package.json b/package.json index 1b540d1b1ef..de36181d957 100644 --- a/package.json +++ b/package.json @@ -176,7 +176,7 @@ "blob-polyfill": "7.0.20220408", "copy-webpack-plugin": "9.0.1", "css-loader": "6.7.1", - "css-minimizer-webpack-plugin": "4.1.0", + "css-minimizer-webpack-plugin": "4.2.0", "cypress": "9.5.1", "enzyme": "3.11.0", "enzyme-to-json": "3.6.2", diff --git a/yarn.lock b/yarn.lock index 6cf10636afe..62497d01922 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6220,6 +6220,15 @@ __metadata: languageName: node linkType: hard +"@jest/schemas@npm:^29.0.0": + version: 29.0.0 + resolution: "@jest/schemas@npm:29.0.0" + dependencies: + "@sinclair/typebox": ^0.24.1 + checksum: 41355c78f09eb1097e57a3c5d0ca11c9099e235e01ea5fa4e3953562a79a6a9296c1d300f1ba50ca75236048829e056b00685cd2f1ff8285e56fd2ce01249acb + languageName: node + linkType: hard + "@jest/source-map@npm:^27.5.1": version: 27.5.1 resolution: "@jest/source-map@npm:27.5.1" @@ -6439,6 +6448,20 @@ __metadata: languageName: node linkType: hard +"@jest/types@npm:^29.1.2": + version: 29.1.2 + resolution: "@jest/types@npm:29.1.2" + dependencies: + "@jest/schemas": ^29.0.0 + "@types/istanbul-lib-coverage": ^2.0.0 + "@types/istanbul-reports": ^3.0.0 + "@types/node": "*" + "@types/yargs": ^17.0.8 + chalk: ^4.0.0 + checksum: 697fc72c37814606715fd1dcbdcb84129d8b292dc6d6d5fa9b8f2b7e8ffd297757b508913be049a4acfbe9f80b982d96e4aa9aa60c40bbc643274ca1867194f8 + languageName: node + linkType: hard + "@jridgewell/gen-mapping@npm:^0.3.0": version: 0.3.1 resolution: "@jridgewell/gen-mapping@npm:0.3.1" @@ -17990,12 +18013,12 @@ __metadata: languageName: node linkType: hard -"css-minimizer-webpack-plugin@npm:4.1.0": - version: 4.1.0 - resolution: "css-minimizer-webpack-plugin@npm:4.1.0" +"css-minimizer-webpack-plugin@npm:4.2.0": + version: 4.2.0 + resolution: "css-minimizer-webpack-plugin@npm:4.2.0" dependencies: cssnano: ^5.1.8 - jest-worker: ^27.5.1 + jest-worker: ^29.0.3 postcss: ^8.4.13 schema-utils: ^4.0.0 serialize-javascript: ^6.0.0 @@ -18005,6 +18028,8 @@ __metadata: peerDependenciesMeta: "@parcel/css": optional: true + "@swc/css": + optional: true clean-css: optional: true csso: @@ -18013,7 +18038,7 @@ __metadata: optional: true lightningcss: optional: true - checksum: bf3c9e9ca4ab23ab139dac2fdfb1daeee2c60455aa314c91745038d01c188107a2108269ff2f2c82c41bc0d342b636a962826646c3c098946f15edd8ed98f42e + checksum: fa95f0ae93b755606c6024f632252de6e60c5307ddbf6928a40447a6b33b551f4bfda274ff6a6c0419aa6c38b5a8b909d9d27d6cd868da6fe55cf16ec2d5de21 languageName: node linkType: hard @@ -23219,7 +23244,7 @@ __metadata: copy-webpack-plugin: 9.0.1 core-js: 3.25.1 css-loader: 6.7.1 - css-minimizer-webpack-plugin: 4.1.0 + css-minimizer-webpack-plugin: 4.2.0 cypress: 9.5.1 d3: 5.15.0 d3-force: ^2.1.1 @@ -26613,6 +26638,20 @@ __metadata: languageName: node linkType: hard +"jest-util@npm:^29.1.2": + version: 29.1.2 + resolution: "jest-util@npm:29.1.2" + dependencies: + "@jest/types": ^29.1.2 + "@types/node": "*" + chalk: ^4.0.0 + ci-info: ^3.2.0 + graceful-fs: ^4.2.9 + picomatch: ^2.2.3 + checksum: 6c55464e2028032692c4801b339bc1f7418826072d75981b8f29ded6ccba8cb8e1f164eb3d12d859cb63c24a8e9be90204f0d3c4d33e530375f1e5935755b5a9 + languageName: node + linkType: hard + "jest-validate@npm:^26.5.2": version: 26.6.2 resolution: "jest-validate@npm:26.6.2" @@ -26741,6 +26780,18 @@ __metadata: languageName: node linkType: hard +"jest-worker@npm:^29.0.3": + version: 29.1.2 + resolution: "jest-worker@npm:29.1.2" + dependencies: + "@types/node": "*" + jest-util: ^29.1.2 + merge-stream: ^2.0.0 + supports-color: ^8.0.0 + checksum: 788d14b2a051bf548a316dd177175c0e46127e63d794677fb0ba67e9b0b9f579cbc6a602a72671c80a020bf4d3f502b0a2dff7bf380986e5f30d30ec0f69168b + languageName: node + linkType: hard + "jest@npm:27.5.1": version: 27.5.1 resolution: "jest@npm:27.5.1" From 4200d7b2466c4603e63b9750e016f654599a6306 Mon Sep 17 00:00:00 2001 From: Eric Leijonmarck Date: Mon, 3 Oct 2022 12:24:26 +0200 Subject: [PATCH 019/135] Auth: fix check for conflict login in validation (#56154) * fix: check for conflict login * review comment fix --- pkg/cmd/grafana-cli/commands/conflict_user_command.go | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/pkg/cmd/grafana-cli/commands/conflict_user_command.go b/pkg/cmd/grafana-cli/commands/conflict_user_command.go index d4f5f7acbd6..4a60232c697 100644 --- a/pkg/cmd/grafana-cli/commands/conflict_user_command.go +++ b/pkg/cmd/grafana-cli/commands/conflict_user_command.go @@ -220,10 +220,12 @@ func getValidConflictUsers(r *ConflictResolver, b []byte) error { // need to verify that id or email exists previouslySeenIds := map[string]bool{} previouslySeenEmails := map[string]bool{} + previouslySeenLogins := map[string]bool{} for _, users := range r.Blocks { for _, u := range users { previouslySeenIds[strings.ToLower(u.ID)] = true previouslySeenEmails[strings.ToLower(u.Email)] = true + previouslySeenLogins[strings.ToLower(u.Login)] = true } } @@ -256,8 +258,11 @@ func getValidConflictUsers(r *ConflictResolver, b []byte) error { if err != nil { return fmt.Errorf("could not parse the content of the file with error %e", err) } - if !previouslySeenEmails[strings.ToLower(newUser.Email)] { - return fmt.Errorf("not valid email: %s, email not in previous conflicts seen", newUser.Email) + if newUser.ConflictEmail != "" && !previouslySeenEmails[strings.ToLower(newUser.Email)] { + return fmt.Errorf("not valid email: %s, email not seen in previous conflicts", newUser.Email) + } + if newUser.ConflictLogin != "" && !previouslySeenLogins[strings.ToLower(newUser.Login)] { + return fmt.Errorf("not valid login: %s, login not seen in previous conflicts", newUser.Login) } // valid entry newConflicts = append(newConflicts, *newUser) From ec024ae960f8254505c14dc8ffb4b505a16c6fe5 Mon Sep 17 00:00:00 2001 From: ms-hujia <48512395+ms-hujia@users.noreply.github.com> Date: Mon, 3 Oct 2022 18:33:37 +0800 Subject: [PATCH 020/135] Azure Monitor: Add support to customized routes (#54829) --- go.mod | 2 +- go.sum | 2 ++ pkg/tsdb/azuremonitor/azuremonitor.go | 33 ++++++++++++++++++++- pkg/tsdb/azuremonitor/azuremonitor_test.go | 34 ++++++++++++++++++++++ pkg/tsdb/azuremonitor/credentials.go | 5 ++++ pkg/tsdb/azuremonitor/types/types.go | 5 ++++ 6 files changed, 79 insertions(+), 2 deletions(-) diff --git a/go.mod b/go.mod index 46db1203e84..72f75eee7b7 100644 --- a/go.mod +++ b/go.mod @@ -56,7 +56,7 @@ require ( github.com/gosimple/slug v1.12.0 github.com/grafana/cuetsy v0.1.1 github.com/grafana/grafana-aws-sdk v0.11.0 - github.com/grafana/grafana-azure-sdk-go v1.3.0 + github.com/grafana/grafana-azure-sdk-go v1.3.1 github.com/grafana/grafana-plugin-sdk-go v0.139.0 github.com/grafana/thema v0.0.0-20220817114012-ebeee841c104 github.com/grpc-ecosystem/go-grpc-middleware v1.3.0 diff --git a/go.sum b/go.sum index 519b3771fb6..578cd6272d7 100644 --- a/go.sum +++ b/go.sum @@ -1378,6 +1378,8 @@ github.com/grafana/grafana-aws-sdk v0.11.0 h1:ncPD/UN0wNcKq3kEU90RdvrnK/6R4VW2Lo github.com/grafana/grafana-aws-sdk v0.11.0/go.mod h1:5Iw3xY7iXJfNaYHrRHMXa/kaB2lWoyntg71PPLGvSs8= github.com/grafana/grafana-azure-sdk-go v1.3.0 h1:zboQpq/ljBjqHo/6UQNZAUwqGTtnEGRYSEnqIQvLuAo= github.com/grafana/grafana-azure-sdk-go v1.3.0/go.mod h1:rgrnK9m6CgKlgx4rH3FFP/6dTdyRO6LYC2mVZov35yo= +github.com/grafana/grafana-azure-sdk-go v1.3.1 h1:xTgBmbDxUPj3X9Pl9vgIOgZoDdtxWl0fYDuHrHr79jM= +github.com/grafana/grafana-azure-sdk-go v1.3.1/go.mod h1:rgrnK9m6CgKlgx4rH3FFP/6dTdyRO6LYC2mVZov35yo= github.com/grafana/grafana-google-sdk-go v0.0.0-20211104130251-b190293eaf58 h1:2ud7NNM7LrGPO4x0NFR8qLq68CqI4SmB7I2yRN2w9oE= github.com/grafana/grafana-google-sdk-go v0.0.0-20211104130251-b190293eaf58/go.mod h1:Vo2TKWfDVmNTELBUM+3lkrZvFtBws0qSZdXhQxRdJrE= github.com/grafana/grafana-plugin-sdk-go v0.114.0/go.mod h1:D7x3ah+1d4phNXpbnOaxa/osSaZlwh9/ZUnGGzegRbk= diff --git a/pkg/tsdb/azuremonitor/azuremonitor.go b/pkg/tsdb/azuremonitor/azuremonitor.go index 24836ac0828..35c90ab33da 100644 --- a/pkg/tsdb/azuremonitor/azuremonitor.go +++ b/pkg/tsdb/azuremonitor/azuremonitor.go @@ -10,6 +10,7 @@ import ( "net/http" "strconv" + "github.com/grafana/grafana-azure-sdk-go/azsettings" "github.com/grafana/grafana-plugin-sdk-go/backend" "github.com/grafana/grafana-plugin-sdk-go/backend/datasource" "github.com/grafana/grafana-plugin-sdk-go/backend/httpclient" @@ -99,6 +100,11 @@ func NewInstanceSettings(cfg *setting.Cfg, clientProvider *httpclient.Provider, return nil, fmt.Errorf("error getting credentials: %w", err) } + routesForModel, err := getAzureRoutes(cloud, settings.JSONData) + if err != nil { + return nil, err + } + credentials, err := getAzureCredentials(cfg, jsonData, settings.DecryptedSecureJSONData) if err != nil { return nil, fmt.Errorf("error getting credentials: %w", err) @@ -111,7 +117,7 @@ func NewInstanceSettings(cfg *setting.Cfg, clientProvider *httpclient.Provider, JSONData: jsonDataObj, DecryptedSecureJSONData: settings.DecryptedSecureJSONData, DatasourceID: settings.ID, - Routes: routes[cloud], + Routes: routesForModel, Services: map[string]types.DatasourceService{}, } @@ -127,6 +133,31 @@ func NewInstanceSettings(cfg *setting.Cfg, clientProvider *httpclient.Provider, } } +func getCustomizedCloudSettings(cloud string, jsonData json.RawMessage) (types.AzureMonitorCustomizedCloudSettings, error) { + customizedCloudSettings := types.AzureMonitorCustomizedCloudSettings{} + err := json.Unmarshal(jsonData, &customizedCloudSettings) + if err != nil { + return types.AzureMonitorCustomizedCloudSettings{}, fmt.Errorf("error getting customized cloud settings: %w", err) + } + return customizedCloudSettings, nil +} + +func getAzureRoutes(cloud string, jsonData json.RawMessage) (map[string]types.AzRoute, error) { + if cloud == azsettings.AzureCustomized { + customizedCloudSettings, err := getCustomizedCloudSettings(cloud, jsonData) + if err != nil { + return nil, err + } + if customizedCloudSettings.CustomizedRoutes == nil { + return nil, fmt.Errorf("unable to instantiate routes, customizedRoutes must be set") + } + azureRoutes := customizedCloudSettings.CustomizedRoutes + return azureRoutes, nil + } else { + return routes[cloud], nil + } +} + type azDatasourceExecutor interface { ExecuteTimeSeriesQuery(ctx context.Context, originalQueries []backend.DataQuery, dsInfo types.DatasourceInfo, client *http.Client, url string, tracer tracing.Tracer) (*backend.QueryDataResponse, error) ResourceRequest(rw http.ResponseWriter, req *http.Request, cli *http.Client) diff --git a/pkg/tsdb/azuremonitor/azuremonitor_test.go b/pkg/tsdb/azuremonitor/azuremonitor_test.go index 98621dfb0f0..8f9218bec95 100644 --- a/pkg/tsdb/azuremonitor/azuremonitor_test.go +++ b/pkg/tsdb/azuremonitor/azuremonitor_test.go @@ -51,6 +51,40 @@ func TestNewInstanceSettings(t *testing.T) { }, Err: require.NoError, }, + { + name: "creates an instance for customized cloud", + settings: backend.DataSourceInstanceSettings{ + JSONData: []byte(`{"cloudName":"customizedazuremonitor","customizedRoutes":{"Route":{"URL":"url"}},"azureAuthType":"clientsecret"}`), + DecryptedSecureJSONData: map[string]string{"clientSecret": "secret"}, + ID: 50, + }, + expectedModel: types.DatasourceInfo{ + Cloud: "AzureCustomizedCloud", + Credentials: &azcredentials.AzureClientSecretCredentials{ + AzureCloud: "AzureCustomizedCloud", + ClientSecret: "secret", + }, + Settings: types.AzureMonitorSettings{}, + Routes: map[string]types.AzRoute{ + "Route": { + URL: "url", + }, + }, + JSONData: map[string]interface{}{ + "azureAuthType": "clientsecret", + "cloudName": "customizedazuremonitor", + "customizedRoutes": map[string]interface{}{ + "Route": map[string]interface{}{ + "URL": "url", + }, + }, + }, + DatasourceID: 50, + DecryptedSecureJSONData: map[string]string{"clientSecret": "secret"}, + Services: map[string]types.DatasourceService{}, + }, + Err: require.NoError, + }, } cfg := &setting.Cfg{ diff --git a/pkg/tsdb/azuremonitor/credentials.go b/pkg/tsdb/azuremonitor/credentials.go index b60b3733467..5a227accc22 100644 --- a/pkg/tsdb/azuremonitor/credentials.go +++ b/pkg/tsdb/azuremonitor/credentials.go @@ -16,6 +16,7 @@ const ( azureMonitorChina = "chinaazuremonitor" azureMonitorUSGovernment = "govazuremonitor" azureMonitorGermany = "germanyazuremonitor" + azureMonitorCustomized = "customizedazuremonitor" ) func getAuthType(cfg *setting.Cfg, jsonData *simplejson.Json) string { @@ -53,6 +54,8 @@ func getDefaultAzureCloud(cfg *setting.Cfg) (string, error) { return azsettings.AzureUSGovernment, nil case azsettings.AzureGermany: return azsettings.AzureGermany, nil + case azsettings.AzureCustomized: + return azsettings.AzureCustomized, nil case "": // Not set cloud defaults to public return azsettings.AzurePublic, nil @@ -72,6 +75,8 @@ func normalizeAzureCloud(cloudName string) (string, error) { return azsettings.AzureUSGovernment, nil case azureMonitorGermany: return azsettings.AzureGermany, nil + case azureMonitorCustomized: + return azsettings.AzureCustomized, nil default: err := fmt.Errorf("the cloud '%s' not supported", cloudName) return "", err diff --git a/pkg/tsdb/azuremonitor/types/types.go b/pkg/tsdb/azuremonitor/types/types.go index ff0d868991d..8193a7b3f7d 100644 --- a/pkg/tsdb/azuremonitor/types/types.go +++ b/pkg/tsdb/azuremonitor/types/types.go @@ -33,6 +33,11 @@ type AzureMonitorSettings struct { AppInsightsAppId string `json:"appInsightsAppId"` } +// AzureMonitorCustomizedCloudSettings is the extended Azure Monitor settings for customized cloud +type AzureMonitorCustomizedCloudSettings struct { + CustomizedRoutes map[string]AzRoute `json:"customizedRoutes"` +} + type DatasourceService struct { URL string HTTPClient *http.Client From eed8df5ccc2556ef00db1e0b8d36c1c4353d32cf Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 3 Oct 2022 11:38:18 +0100 Subject: [PATCH 021/135] Update dependency react-colorful to v5.6.1 (#56165) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- packages/grafana-ui/package.json | 2 +- yarn.lock | 14 ++++++++++++-- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/packages/grafana-ui/package.json b/packages/grafana-ui/package.json index 706c7b6895f..b093bbb9f80 100644 --- a/packages/grafana-ui/package.json +++ b/packages/grafana-ui/package.json @@ -82,7 +82,7 @@ "rc-time-picker": "^3.7.3", "react-beautiful-dnd": "13.1.0", "react-calendar": "3.9.0", - "react-colorful": "5.5.1", + "react-colorful": "5.6.1", "react-custom-scrollbars-2": "4.5.0", "react-dropzone": "14.2.2", "react-highlight-words": "0.18.0", diff --git a/yarn.lock b/yarn.lock index 62497d01922..c6467e907fe 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5696,7 +5696,7 @@ __metadata: react: 17.0.2 react-beautiful-dnd: 13.1.0 react-calendar: 3.9.0 - react-colorful: 5.5.1 + react-colorful: 5.6.1 react-custom-scrollbars-2: 4.5.0 react-docgen-typescript-loader: 3.7.2 react-dom: 17.0.2 @@ -33818,7 +33818,17 @@ __metadata: languageName: node linkType: hard -"react-colorful@npm:5.5.1, react-colorful@npm:^5.1.2": +"react-colorful@npm:5.6.1": + version: 5.6.1 + resolution: "react-colorful@npm:5.6.1" + peerDependencies: + react: ">=16.8.0" + react-dom: ">=16.8.0" + checksum: e432b7cb0df57e8f0bcdc3b012d2e93fcbcb6092c9e0f85654788d5ebfc4442536d8cc35b2418061ba3c4afb8b7788cc101c606d86a1732407921de7a9244c8d + languageName: node + linkType: hard + +"react-colorful@npm:^5.1.2": version: 5.5.1 resolution: "react-colorful@npm:5.5.1" peerDependencies: From abfd6472839ab79952524e268eca657320f79c36 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 3 Oct 2022 12:45:11 +0200 Subject: [PATCH 022/135] Update dependency lerna to v5.5.4 (#54955) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 1310 ++++++++++++++++++++++++-------------------------- 2 files changed, 642 insertions(+), 670 deletions(-) diff --git a/package.json b/package.json index de36181d957..4e2a2af7d60 100644 --- a/package.json +++ b/package.json @@ -206,7 +206,7 @@ "jest-fail-on-console": "2.4.2", "jest-junit": "14.0.0", "jest-matcher-utils": "28.1.3", - "lerna": "5.2.0", + "lerna": "5.5.4", "lint-staged": "13.0.3", "mini-css-extract-plugin": "2.6.1", "msw": "^0.47.3", diff --git a/yarn.lock b/yarn.lock index c6467e907fe..68094f7d3c4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -6611,782 +6611,784 @@ __metadata: languageName: node linkType: hard -"@lerna/add@npm:5.2.0": - version: 5.2.0 - resolution: "@lerna/add@npm:5.2.0" +"@lerna/add@npm:5.5.4": + version: 5.5.4 + resolution: "@lerna/add@npm:5.5.4" dependencies: - "@lerna/bootstrap": 5.2.0 - "@lerna/command": 5.2.0 - "@lerna/filter-options": 5.2.0 - "@lerna/npm-conf": 5.2.0 - "@lerna/validation-error": 5.2.0 + "@lerna/bootstrap": 5.5.4 + "@lerna/command": 5.5.4 + "@lerna/filter-options": 5.5.4 + "@lerna/npm-conf": 5.5.4 + "@lerna/validation-error": 5.5.4 dedent: ^0.7.0 - npm-package-arg: ^8.1.0 + npm-package-arg: 8.1.1 p-map: ^4.0.0 pacote: ^13.6.1 semver: ^7.3.4 - checksum: b7bab5d9a088a1d55eadcc81e3f4c66ede1ab582afcf431851ca9a311e21db3b5b9e924036d86bf4dadef7e8cb6d27633eb62ffa8c2e918b9b62db7948ad1b38 + checksum: f4f17fda326a550cdbb3025a98a5ccf0e275b378fb1a1df6f518b5cbd3f334d5486394f84d12adddc8341d2802a37715390fdbf71375327dc89bdcd4986ef364 languageName: node linkType: hard -"@lerna/bootstrap@npm:5.2.0": - version: 5.2.0 - resolution: "@lerna/bootstrap@npm:5.2.0" +"@lerna/bootstrap@npm:5.5.4": + version: 5.5.4 + resolution: "@lerna/bootstrap@npm:5.5.4" dependencies: - "@lerna/command": 5.2.0 - "@lerna/filter-options": 5.2.0 - "@lerna/has-npm-version": 5.2.0 - "@lerna/npm-install": 5.2.0 - "@lerna/package-graph": 5.2.0 - "@lerna/pulse-till-done": 5.2.0 - "@lerna/rimraf-dir": 5.2.0 - "@lerna/run-lifecycle": 5.2.0 - "@lerna/run-topologically": 5.2.0 - "@lerna/symlink-binary": 5.2.0 - "@lerna/symlink-dependencies": 5.2.0 - "@lerna/validation-error": 5.2.0 - "@npmcli/arborist": 5.2.0 + "@lerna/command": 5.5.4 + "@lerna/filter-options": 5.5.4 + "@lerna/has-npm-version": 5.5.4 + "@lerna/npm-install": 5.5.4 + "@lerna/package-graph": 5.5.4 + "@lerna/pulse-till-done": 5.5.4 + "@lerna/rimraf-dir": 5.5.4 + "@lerna/run-lifecycle": 5.5.4 + "@lerna/run-topologically": 5.5.4 + "@lerna/symlink-binary": 5.5.4 + "@lerna/symlink-dependencies": 5.5.4 + "@lerna/validation-error": 5.5.4 + "@npmcli/arborist": 5.3.0 dedent: ^0.7.0 get-port: ^5.1.1 multimatch: ^5.0.0 - npm-package-arg: ^8.1.0 + npm-package-arg: 8.1.1 npmlog: ^6.0.2 p-map: ^4.0.0 p-map-series: ^2.1.0 p-waterfall: ^2.1.1 semver: ^7.3.4 - checksum: d55ae35147a8a03d86b3ab5606b5087aa25dd39bb562119066d51fd43f2b1c95f0a76a8047cc6c4bebd3696e2d0c7a10df9f1b11e8fed5074243055c6b037bfa + checksum: 67a5f30045690b2b62be901c0272f6a67d830ca7183f1296d1b551a1d25c4e13ed0c1e6286a682685e42e2b6d5cd421dd16e812c12cefc43dd62036376fe4230 languageName: node linkType: hard -"@lerna/changed@npm:5.2.0": - version: 5.2.0 - resolution: "@lerna/changed@npm:5.2.0" +"@lerna/changed@npm:5.5.4": + version: 5.5.4 + resolution: "@lerna/changed@npm:5.5.4" dependencies: - "@lerna/collect-updates": 5.2.0 - "@lerna/command": 5.2.0 - "@lerna/listable": 5.2.0 - "@lerna/output": 5.2.0 - checksum: 39ff589b84d7cf2a431903c97061e5e8477b02619bbbf50f73ba05efd3f6ccc14672082fc915c7586f96f1953115d5fa2c33e07aaa87422e83c96e90bdc34aa6 + "@lerna/collect-updates": 5.5.4 + "@lerna/command": 5.5.4 + "@lerna/listable": 5.5.4 + "@lerna/output": 5.5.4 + checksum: f2ff13b2a00740832428cfc626ae559c1cd210e8a6e71ee489c6872942c62cdec252598180bb3bada96d4ef6bc3ae494b5bb83b1b03e5313df96c52b4daf5e0d languageName: node linkType: hard -"@lerna/check-working-tree@npm:5.2.0": - version: 5.2.0 - resolution: "@lerna/check-working-tree@npm:5.2.0" +"@lerna/check-working-tree@npm:5.5.4": + version: 5.5.4 + resolution: "@lerna/check-working-tree@npm:5.5.4" dependencies: - "@lerna/collect-uncommitted": 5.2.0 - "@lerna/describe-ref": 5.2.0 - "@lerna/validation-error": 5.2.0 - checksum: e86c5634fe794f263fa4661d726004122886ce6b00c4ac65acef0fc4033f542b4a19878cdab4354c01263e8df89e444a782ab8f5f76adf70ccadcebda6313604 + "@lerna/collect-uncommitted": 5.5.4 + "@lerna/describe-ref": 5.5.4 + "@lerna/validation-error": 5.5.4 + checksum: 43d28c714b96ddf6d7cd9023f0f24a32786420d40746037a3cf4e35d03441ba4c3760826034034692ac355091d2a8a5166ee5538833762db51301982f732abaa languageName: node linkType: hard -"@lerna/child-process@npm:5.2.0": - version: 5.2.0 - resolution: "@lerna/child-process@npm:5.2.0" +"@lerna/child-process@npm:5.5.4": + version: 5.5.4 + resolution: "@lerna/child-process@npm:5.5.4" dependencies: chalk: ^4.1.0 execa: ^5.0.0 strong-log-transformer: ^2.1.0 - checksum: 5fc5eee8dc2530af1e1468e5ec5328bd3aa2995b690a54bf04c3b5f63a17cd4df712b54998f15cf7978a0886455dbf91e947698da36298b9835496f778b34c9f + checksum: f481252bd3aa2b1dc61fedf527840e5acf19e893ad15e3589ffa2466110d11f595b86402197cbc03fe8286339d8da1076f3bb25ef3d618a7aa4d18417a63e7e7 languageName: node linkType: hard -"@lerna/clean@npm:5.2.0": - version: 5.2.0 - resolution: "@lerna/clean@npm:5.2.0" +"@lerna/clean@npm:5.5.4": + version: 5.5.4 + resolution: "@lerna/clean@npm:5.5.4" dependencies: - "@lerna/command": 5.2.0 - "@lerna/filter-options": 5.2.0 - "@lerna/prompt": 5.2.0 - "@lerna/pulse-till-done": 5.2.0 - "@lerna/rimraf-dir": 5.2.0 + "@lerna/command": 5.5.4 + "@lerna/filter-options": 5.5.4 + "@lerna/prompt": 5.5.4 + "@lerna/pulse-till-done": 5.5.4 + "@lerna/rimraf-dir": 5.5.4 p-map: ^4.0.0 p-map-series: ^2.1.0 p-waterfall: ^2.1.1 - checksum: f849bab104ec92913f553dbcfc9fda492e88192ec3b674c94be39433121b8d4844225f16e5aa04eaf83637d1d38fe1794d88b559eb710bdbce0cd118acfaaf08 + checksum: cf2aadf90f825cf5d458ba4dd4e4182e40983b23b6b3cd6ffc7ff9780b02f7552ca4106007e2af080728470a6e935ec1ba0a925b21d806fce1eb290838e0ee06 languageName: node linkType: hard -"@lerna/cli@npm:5.2.0": - version: 5.2.0 - resolution: "@lerna/cli@npm:5.2.0" +"@lerna/cli@npm:5.5.4": + version: 5.5.4 + resolution: "@lerna/cli@npm:5.5.4" dependencies: - "@lerna/global-options": 5.2.0 + "@lerna/global-options": 5.5.4 dedent: ^0.7.0 npmlog: ^6.0.2 yargs: ^16.2.0 - checksum: b0217a3887b11ed8b2750b282d97b7bec8c8f0b77aa17de4333c284c7d0352975e1668843c33145be776626330ad7cef3154aaacda86b3d4f5ab62a1462ece76 + checksum: 54f4106233550c98fabd3771d4f813f2e0284a6d8e71f8fd7105fcade317cc46016529441af0042dd38c713a35d4f6c992fa0add51025667b729c674f630a2da languageName: node linkType: hard -"@lerna/collect-uncommitted@npm:5.2.0": - version: 5.2.0 - resolution: "@lerna/collect-uncommitted@npm:5.2.0" +"@lerna/collect-uncommitted@npm:5.5.4": + version: 5.5.4 + resolution: "@lerna/collect-uncommitted@npm:5.5.4" dependencies: - "@lerna/child-process": 5.2.0 + "@lerna/child-process": 5.5.4 chalk: ^4.1.0 npmlog: ^6.0.2 - checksum: 93dd2390bc3412003b2faff7dec2d3111d38ba48d7f3376c62b400d96d8773aeed7956f5994947102cb00f8dd7995dd215c70bab4b0ff4a8457f04ed28612cca + checksum: 3d0c1a9526651499799df689974f9e8efb4a3aac760f421ae18013cadd53c62eda4d1d3dbd152ceb8c864096b71ade01aeab5335e461495a12159a7cb33119d9 languageName: node linkType: hard -"@lerna/collect-updates@npm:5.2.0": - version: 5.2.0 - resolution: "@lerna/collect-updates@npm:5.2.0" +"@lerna/collect-updates@npm:5.5.4": + version: 5.5.4 + resolution: "@lerna/collect-updates@npm:5.5.4" dependencies: - "@lerna/child-process": 5.2.0 - "@lerna/describe-ref": 5.2.0 + "@lerna/child-process": 5.5.4 + "@lerna/describe-ref": 5.5.4 minimatch: ^3.0.4 npmlog: ^6.0.2 slash: ^3.0.0 - checksum: 9ea36d0afdffbc8622dad0f0b31f9292d98d0a3474496c207f1caf1ac8e798bfa8569927e0b3d3a1a5651b132b9dce00e7a7fd562a87a5312cf5c784a4221f90 + checksum: dc051fdd205099dd005520549e50bf0c94a318c7d0e6ab51246e2278525c66dc98f513d3bbde7b33a9e9dd9d6d6d811666527570a56c0c9cadedca32db156969 languageName: node linkType: hard -"@lerna/command@npm:5.2.0": - version: 5.2.0 - resolution: "@lerna/command@npm:5.2.0" +"@lerna/command@npm:5.5.4": + version: 5.5.4 + resolution: "@lerna/command@npm:5.5.4" dependencies: - "@lerna/child-process": 5.2.0 - "@lerna/package-graph": 5.2.0 - "@lerna/project": 5.2.0 - "@lerna/validation-error": 5.2.0 - "@lerna/write-log-file": 5.2.0 + "@lerna/child-process": 5.5.4 + "@lerna/package-graph": 5.5.4 + "@lerna/project": 5.5.4 + "@lerna/validation-error": 5.5.4 + "@lerna/write-log-file": 5.5.4 clone-deep: ^4.0.1 dedent: ^0.7.0 execa: ^5.0.0 is-ci: ^2.0.0 npmlog: ^6.0.2 - checksum: 7d4477f1add37bef9b5b32d0c85bfab42ef5c244fa982077a4cdad9609675283be3b427e39285e18e71fe712714f8319b98a6f51a2c4b40e4317f745e5af4868 + checksum: 096aadc9e3c0c0dc9f6127af9f655058360658ca73ffea476998a89594e29c6492894311ee7021df7532273b657c930d1060917b488ffccdff7643fa65bbeb25 languageName: node linkType: hard -"@lerna/conventional-commits@npm:5.2.0": - version: 5.2.0 - resolution: "@lerna/conventional-commits@npm:5.2.0" +"@lerna/conventional-commits@npm:5.5.4": + version: 5.5.4 + resolution: "@lerna/conventional-commits@npm:5.5.4" dependencies: - "@lerna/validation-error": 5.2.0 + "@lerna/validation-error": 5.5.4 conventional-changelog-angular: ^5.0.12 conventional-changelog-core: ^4.2.4 conventional-recommended-bump: ^6.1.0 fs-extra: ^9.1.0 get-stream: ^6.0.0 - npm-package-arg: ^8.1.0 + npm-package-arg: 8.1.1 npmlog: ^6.0.2 pify: ^5.0.0 semver: ^7.3.4 - checksum: c2484d230a1f3558b12354feb3023e9cd40ac7ff4c6a8fb5cab76de7e32ab0e0899338c54b1c680d703920fe4ddd447a42674a346e446c4876d00d493551f8cf + checksum: 866731a1e1ff2bcb9795a10f6b462935f3e98bf353f24b7f04deea31c58a128e99ca9aabab24a6eb2181ea5f3f2e645d437bb485750cd2876853d48ec78211c0 languageName: node linkType: hard -"@lerna/create-symlink@npm:5.2.0": - version: 5.2.0 - resolution: "@lerna/create-symlink@npm:5.2.0" +"@lerna/create-symlink@npm:5.5.4": + version: 5.5.4 + resolution: "@lerna/create-symlink@npm:5.5.4" dependencies: - cmd-shim: ^4.1.0 + cmd-shim: ^5.0.0 fs-extra: ^9.1.0 npmlog: ^6.0.2 - checksum: 4cccbc34090d110f39272e4223be401df1ab5cbfc22e642140b6a99266f55f4d94242d30c6f375d32372229bf6dbdda91f2c1f7e3be0e8d0876dd8c5d4e9bebf + checksum: 05c1bc24f450fc74b38991fd6a7f8a6df83b6777fe9456e1a0875071b032289942cba9d43173caef19df8946ef9eac7d423ed8c0fcb78980ddc6f24884298990 languageName: node linkType: hard -"@lerna/create@npm:5.2.0": - version: 5.2.0 - resolution: "@lerna/create@npm:5.2.0" +"@lerna/create@npm:5.5.4": + version: 5.5.4 + resolution: "@lerna/create@npm:5.5.4" dependencies: - "@lerna/child-process": 5.2.0 - "@lerna/command": 5.2.0 - "@lerna/npm-conf": 5.2.0 - "@lerna/validation-error": 5.2.0 + "@lerna/child-process": 5.5.4 + "@lerna/command": 5.5.4 + "@lerna/npm-conf": 5.5.4 + "@lerna/validation-error": 5.5.4 dedent: ^0.7.0 fs-extra: ^9.1.0 globby: ^11.0.2 - init-package-json: ^2.0.2 - npm-package-arg: ^8.1.0 + init-package-json: ^3.0.2 + npm-package-arg: 8.1.1 p-reduce: ^2.1.0 pacote: ^13.6.1 pify: ^5.0.0 semver: ^7.3.4 slash: ^3.0.0 validate-npm-package-license: ^3.0.4 - validate-npm-package-name: ^3.0.0 - whatwg-url: ^8.4.0 + validate-npm-package-name: ^4.0.0 yargs-parser: 20.2.4 - checksum: 8dd727c1d56c60ccb2295be5c82015ace45a027a78a881af125e263a09e5c24ed6ab16f39cd755b2af55022055635416558f0b2c10b9c0865ab23cf0284a85f0 + checksum: 44e63b3ea4cae77abd0fbd1fd5227e6d5691a67f48e8bcf53bb657a6014230ed3baf6584982a1c25811c47d751563e59850224dd3291c61ca30a7fb8ef69eff7 languageName: node linkType: hard -"@lerna/describe-ref@npm:5.2.0": - version: 5.2.0 - resolution: "@lerna/describe-ref@npm:5.2.0" +"@lerna/describe-ref@npm:5.5.4": + version: 5.5.4 + resolution: "@lerna/describe-ref@npm:5.5.4" dependencies: - "@lerna/child-process": 5.2.0 + "@lerna/child-process": 5.5.4 npmlog: ^6.0.2 - checksum: fb37df0a4d00bfb8d8641929a9f69ed3c70dab493d76de852830f60ab6cbccf428cf1f54023945ac79857b21ba8b58165e4642d3049fff55905e3abe6915f915 + checksum: 2ba2d0a8e6f6d81b007a42b1c799f5759b68003ca93a922b091450cd66cd08ae60e5c55e306883609f7762a253a07215f40aa03c5c0652348acab9ede4d09848 languageName: node linkType: hard -"@lerna/diff@npm:5.2.0": - version: 5.2.0 - resolution: "@lerna/diff@npm:5.2.0" +"@lerna/diff@npm:5.5.4": + version: 5.5.4 + resolution: "@lerna/diff@npm:5.5.4" dependencies: - "@lerna/child-process": 5.2.0 - "@lerna/command": 5.2.0 - "@lerna/validation-error": 5.2.0 + "@lerna/child-process": 5.5.4 + "@lerna/command": 5.5.4 + "@lerna/validation-error": 5.5.4 npmlog: ^6.0.2 - checksum: cfe8d41532ba765bca6b7d77078ec2dd7c39ad0a362edb068d3211c89a7c7bf7cf6a83be73c5dbb535608c0c4b1cfaec377bd0a418d90b9a70daf4a55ac71517 + checksum: 5a171e653c3074bc1c1d4d200dd2a82cf36e92ad7f9ab03f9d38cd9cd33b44ea0a568c3804d5d15323931ee353f51870ba3f000a917c041df77a8412bcffdb2f languageName: node linkType: hard -"@lerna/exec@npm:5.2.0": - version: 5.2.0 - resolution: "@lerna/exec@npm:5.2.0" +"@lerna/exec@npm:5.5.4": + version: 5.5.4 + resolution: "@lerna/exec@npm:5.5.4" dependencies: - "@lerna/child-process": 5.2.0 - "@lerna/command": 5.2.0 - "@lerna/filter-options": 5.2.0 - "@lerna/profiler": 5.2.0 - "@lerna/run-topologically": 5.2.0 - "@lerna/validation-error": 5.2.0 + "@lerna/child-process": 5.5.4 + "@lerna/command": 5.5.4 + "@lerna/filter-options": 5.5.4 + "@lerna/profiler": 5.5.4 + "@lerna/run-topologically": 5.5.4 + "@lerna/validation-error": 5.5.4 p-map: ^4.0.0 - checksum: 581efa61af2d7992259747ffb27dff434900dfed7fd3ea83110e2a9c671c99ff974d4f6475dd3647e8552cec1413008882dbbe799e990488ac8dabcd38907a6a + checksum: 90ba92303def5a1d39e15c3275282e6782005d52c7c880d2d1305f87c6f4a641cff67e2d1ef86dea46c8d18a1a03cb4b21ead7c60306cde5e9fb1d00396086fa languageName: node linkType: hard -"@lerna/filter-options@npm:5.2.0": - version: 5.2.0 - resolution: "@lerna/filter-options@npm:5.2.0" +"@lerna/filter-options@npm:5.5.4": + version: 5.5.4 + resolution: "@lerna/filter-options@npm:5.5.4" dependencies: - "@lerna/collect-updates": 5.2.0 - "@lerna/filter-packages": 5.2.0 + "@lerna/collect-updates": 5.5.4 + "@lerna/filter-packages": 5.5.4 dedent: ^0.7.0 npmlog: ^6.0.2 - checksum: ec34fa56743b59445339599f503ed0aed01199d5cec1990725cef0e861894faa1b512899562c9108285066611b06f56758916934f9be91d23012db1f8f724a62 + checksum: a3fc09f042a66373231237fd9521b2d6e35ea56cb2cdf428de80fe7817cf27130718db2ddf68cfd7d7269c34f1cf266208c8e5c8b8dc2fa469fe8c35cbea8ee4 languageName: node linkType: hard -"@lerna/filter-packages@npm:5.2.0": - version: 5.2.0 - resolution: "@lerna/filter-packages@npm:5.2.0" +"@lerna/filter-packages@npm:5.5.4": + version: 5.5.4 + resolution: "@lerna/filter-packages@npm:5.5.4" dependencies: - "@lerna/validation-error": 5.2.0 + "@lerna/validation-error": 5.5.4 multimatch: ^5.0.0 npmlog: ^6.0.2 - checksum: babe19dd51b58b7649dbb8d643f057e1c848b4f99218438501c919d66215af63c5b8bb6db7aad3063ed825257f661aa6e642da3620cea87f546d1cea1d8c0496 + checksum: 889c26a659228c041f70ce27c81feaa360e8659299851208c931b726983449a885e943ca50db7c975b670adb07424c83bba0d0f4dc71ea99f9f6143b88a05315 languageName: node linkType: hard -"@lerna/get-npm-exec-opts@npm:5.2.0": - version: 5.2.0 - resolution: "@lerna/get-npm-exec-opts@npm:5.2.0" +"@lerna/get-npm-exec-opts@npm:5.5.4": + version: 5.5.4 + resolution: "@lerna/get-npm-exec-opts@npm:5.5.4" dependencies: npmlog: ^6.0.2 - checksum: 6c8765382f25436d84fff92d38f3c0809b98607c899bd9541ed6933a2fcf4c6a8151032a76f8fae28a8e4dec01add7aec446ccb367fe02309c250f85b60bd4e4 + checksum: b4c0e88a53a32eb538b0730b316d7df51281d11d05f2ed928b6ef553c25611af1346921856999b6a8d69ff64742f51dde3e32156dba37ff950206bdebf51048f languageName: node linkType: hard -"@lerna/get-packed@npm:5.2.0": - version: 5.2.0 - resolution: "@lerna/get-packed@npm:5.2.0" +"@lerna/get-packed@npm:5.5.4": + version: 5.5.4 + resolution: "@lerna/get-packed@npm:5.5.4" dependencies: fs-extra: ^9.1.0 - ssri: ^8.0.1 + ssri: ^9.0.1 tar: ^6.1.0 - checksum: 75575fc7219ea1f5afd6909244fb532822bb2312bec543f3dd8eef2aee2fd225fece911908e9c670f956732ffaaf5629f9f3b73672ac79290344ae05ad8951be + checksum: e53c57740651086c0d5c3eb8aa5a9cd777e7aa9b4ec8bb3d997f1d9df783f67597c6418d73c5d680926998f45fb3ff3735fb72e232098bfb6e788c5fee416a5f languageName: node linkType: hard -"@lerna/github-client@npm:5.2.0": - version: 5.2.0 - resolution: "@lerna/github-client@npm:5.2.0" +"@lerna/github-client@npm:5.5.4": + version: 5.5.4 + resolution: "@lerna/github-client@npm:5.5.4" dependencies: - "@lerna/child-process": 5.2.0 + "@lerna/child-process": 5.5.4 "@octokit/plugin-enterprise-rest": ^6.0.1 "@octokit/rest": ^19.0.3 - git-url-parse: ^12.0.0 + git-url-parse: ^13.1.0 npmlog: ^6.0.2 - checksum: 9746f647b63d8495cf545fc42b66f23ac278081c8e78cd30f7f72d0fd6ec8a49463fd340cb676dc6c5eefffb95f7e6c469ddac5c59b1793a7585e93cf2bc972b + checksum: 6f531f1c133c2643fa7c716c0d986bf59d18eed13099195fcf4c7fe683b49dc7fad1d410985d3f5273ec0f607763ef800b4d0d841557adc4a3fe4fe05a78dca2 languageName: node linkType: hard -"@lerna/gitlab-client@npm:5.2.0": - version: 5.2.0 - resolution: "@lerna/gitlab-client@npm:5.2.0" +"@lerna/gitlab-client@npm:5.5.4": + version: 5.5.4 + resolution: "@lerna/gitlab-client@npm:5.5.4" dependencies: node-fetch: ^2.6.1 npmlog: ^6.0.2 - whatwg-url: ^8.4.0 - checksum: dafdfe684f683d6dad60965ce45e57f62929e4397d5eacb65c70f851b11bb6eec0f3c7eda4b9a7f377283361d6e3b74f7171ff54b938e39b7c05730bfd3edbe2 + checksum: bcd867c6e66f5eaa790c2c40a85f88b7fc37dc2504b17d096102630049bcb3dbf6d0ec33e8369fb6204e5537a263bbaeefacae42ab8570e104a5f5a17fa59685 languageName: node linkType: hard -"@lerna/global-options@npm:5.2.0": - version: 5.2.0 - resolution: "@lerna/global-options@npm:5.2.0" - checksum: b0eadfc2e6bf4ad067ba758bbf69069a4a0cfd4d58c97e2f44152cf8f7ff2969f9d3e31a055f455b2b73392523b25dc8d9a918caefe9f8259075031e6f82808c +"@lerna/global-options@npm:5.5.4": + version: 5.5.4 + resolution: "@lerna/global-options@npm:5.5.4" + checksum: 5a501be802d3bc02f8525a8ee32bab7833e387323b7b52e86c8ed273ed197ca81aa12651a462a98eef11cabd61dca1e5e1a2390023cb056dae30da246ca94b72 languageName: node linkType: hard -"@lerna/has-npm-version@npm:5.2.0": - version: 5.2.0 - resolution: "@lerna/has-npm-version@npm:5.2.0" +"@lerna/has-npm-version@npm:5.5.4": + version: 5.5.4 + resolution: "@lerna/has-npm-version@npm:5.5.4" dependencies: - "@lerna/child-process": 5.2.0 + "@lerna/child-process": 5.5.4 semver: ^7.3.4 - checksum: c2c0c141cf26cf3fe0fefaea3ff5bce1e16aafcccf2851b32d68c2ad568e2511eb85090bd968c80246f9e3230ead5e40cee1cd47c1ea552b7fe223576935005e + checksum: e28690f9efc7034da6f0e49b84816a184cea95376088c526621395add30a4e3475f5b66fc4945e126412e72aaa67cf557af236a65d5905084485f0acaf129140 languageName: node linkType: hard -"@lerna/import@npm:5.2.0": - version: 5.2.0 - resolution: "@lerna/import@npm:5.2.0" +"@lerna/import@npm:5.5.4": + version: 5.5.4 + resolution: "@lerna/import@npm:5.5.4" dependencies: - "@lerna/child-process": 5.2.0 - "@lerna/command": 5.2.0 - "@lerna/prompt": 5.2.0 - "@lerna/pulse-till-done": 5.2.0 - "@lerna/validation-error": 5.2.0 + "@lerna/child-process": 5.5.4 + "@lerna/command": 5.5.4 + "@lerna/prompt": 5.5.4 + "@lerna/pulse-till-done": 5.5.4 + "@lerna/validation-error": 5.5.4 dedent: ^0.7.0 fs-extra: ^9.1.0 p-map-series: ^2.1.0 - checksum: 5356e5babe20a49e4fe75924d0f68d8d6e0a3ceb0952779fe599370ba747ebfac43477782843eca925a512a16c091805d8aa92f5a6591e2063d506b74d2fd160 + checksum: e04b2e85fef25c1ced9f98e607cf6ad25f3e98fe8fe80ae359614c34de4679c45b082a8cae164c6fbe6af86d9ce72128640a225bd603d3faa89d285406adf1f9 languageName: node linkType: hard -"@lerna/info@npm:5.2.0": - version: 5.2.0 - resolution: "@lerna/info@npm:5.2.0" +"@lerna/info@npm:5.5.4": + version: 5.5.4 + resolution: "@lerna/info@npm:5.5.4" dependencies: - "@lerna/command": 5.2.0 - "@lerna/output": 5.2.0 + "@lerna/command": 5.5.4 + "@lerna/output": 5.5.4 envinfo: ^7.7.4 - checksum: 6f8c67abd3a222008c0883bdd582bbf283b6e9c94ec5557fabd673d0cc1cedad217f493b964e862e9d8a9527fac7e9b61e658e926456ecda3acd0342b5423ca0 + checksum: 2bfb409a6b60bf2e7f755fe8443adbd3a414a50ea99119294c949770fa800ab6ebbc0a05c6646f2aed1d503ec1b7bfbf06688cfa7ae090d1132b4f041456ac6e languageName: node linkType: hard -"@lerna/init@npm:5.2.0": - version: 5.2.0 - resolution: "@lerna/init@npm:5.2.0" +"@lerna/init@npm:5.5.4": + version: 5.5.4 + resolution: "@lerna/init@npm:5.5.4" dependencies: - "@lerna/child-process": 5.2.0 - "@lerna/command": 5.2.0 - "@lerna/project": 5.2.0 + "@lerna/child-process": 5.5.4 + "@lerna/command": 5.5.4 + "@lerna/project": 5.5.4 fs-extra: ^9.1.0 p-map: ^4.0.0 write-json-file: ^4.3.0 - checksum: 02d66d88774f4366b0a3a0ad2c11c2fe3a6493ffe3f1797811366bf0c9c20c8d270c0a5bdc7b5b877a6d526c6003c10d19c356434d2cdb5422e35e88e879777b + checksum: 610bfc08593d54095898e02adc1e49b742eb385cf6168ec0c134e2f04231fa695924f5bfd404730fc11ae72dfb8700f408fb6514d56333e6e4cc46d4547563a1 languageName: node linkType: hard -"@lerna/link@npm:5.2.0": - version: 5.2.0 - resolution: "@lerna/link@npm:5.2.0" +"@lerna/link@npm:5.5.4": + version: 5.5.4 + resolution: "@lerna/link@npm:5.5.4" dependencies: - "@lerna/command": 5.2.0 - "@lerna/package-graph": 5.2.0 - "@lerna/symlink-dependencies": 5.2.0 + "@lerna/command": 5.5.4 + "@lerna/package-graph": 5.5.4 + "@lerna/symlink-dependencies": 5.5.4 + "@lerna/validation-error": 5.5.4 p-map: ^4.0.0 slash: ^3.0.0 - checksum: bc7d107c1c439bc1d929931674163ad4e2f66347676557ec3edc9b510119946206ed62b0b0d61141af655a55454ff654746c09bc7ae59b15bbd1c4d4d9c448f0 + checksum: 391cb0e93f324cb1b7e72c7a415f23ab0690912ff72f0e40b5794ad7c32c4ecd3500f75efac73efd08dc83978aa23bf343b527d2b501d156e8f857ee9fe4f1d9 languageName: node linkType: hard -"@lerna/list@npm:5.2.0": - version: 5.2.0 - resolution: "@lerna/list@npm:5.2.0" +"@lerna/list@npm:5.5.4": + version: 5.5.4 + resolution: "@lerna/list@npm:5.5.4" dependencies: - "@lerna/command": 5.2.0 - "@lerna/filter-options": 5.2.0 - "@lerna/listable": 5.2.0 - "@lerna/output": 5.2.0 - checksum: 95d7a6bc9d645a90cb22fcbadccf821b6a1db7422d2b68078bcfb975e4250426257c5c6ac95d65f1b66615ba03dc8a1e4874d709930c5361d4f1f1833f9e98db + "@lerna/command": 5.5.4 + "@lerna/filter-options": 5.5.4 + "@lerna/listable": 5.5.4 + "@lerna/output": 5.5.4 + checksum: ccbea2a102b6c9ebfdfb38bd8fac81a329a8c8bcd466e334ebb7626bf094361fff00a5895523744f12ba3ea4ed4e9798f8ddebc8006fb642f758b79014a3b64e languageName: node linkType: hard -"@lerna/listable@npm:5.2.0": - version: 5.2.0 - resolution: "@lerna/listable@npm:5.2.0" +"@lerna/listable@npm:5.5.4": + version: 5.5.4 + resolution: "@lerna/listable@npm:5.5.4" dependencies: - "@lerna/query-graph": 5.2.0 + "@lerna/query-graph": 5.5.4 chalk: ^4.1.0 columnify: ^1.6.0 - checksum: b8d447683aba40b6a124113f99f73325eb918f2acbd7b1dbc1789a7800eaefa84774a00964e6f904bab05421f31bdeb2460a0fe3fb18c620b7ca7bf7efd7ad0e + checksum: db4e674fc75f320e5888a2ada8c2447d5111584f3c35e744a6d8fb9a026abe557ad6d02430915aeb7b4cb99cd129f391825053fa785d4ce2db2df462291c8ded languageName: node linkType: hard -"@lerna/log-packed@npm:5.2.0": - version: 5.2.0 - resolution: "@lerna/log-packed@npm:5.2.0" +"@lerna/log-packed@npm:5.5.4": + version: 5.5.4 + resolution: "@lerna/log-packed@npm:5.5.4" dependencies: byte-size: ^7.0.0 columnify: ^1.6.0 has-unicode: ^2.0.1 npmlog: ^6.0.2 - checksum: b54536f5f46090f93a3f09a774dabd9f8b74e28e97865c4dc4b135a3140080c9b0710ffa3ed406a81ee08d4be7cb185560642f5d82af78c3078276a4c76fc3de + checksum: 83af3e1b63e658b9fde75feb9508a38492f23743ce028d74bde674ffba01bb7d9b0607f751f42c3b805c6b1a5c2ca70cd4e7ec70997f200875ce5ff4e4798e51 languageName: node linkType: hard -"@lerna/npm-conf@npm:5.2.0": - version: 5.2.0 - resolution: "@lerna/npm-conf@npm:5.2.0" +"@lerna/npm-conf@npm:5.5.4": + version: 5.5.4 + resolution: "@lerna/npm-conf@npm:5.5.4" dependencies: config-chain: ^1.1.12 pify: ^5.0.0 - checksum: e3dd3c834116c487862384227cae329833dc79ba3d08d52494f83e416e9dfad8d8b007bc00ccb5b4427bcbca330b5205c37a2bbaa5f31ed440a86037c2c0a0f6 + checksum: dfbad876fd5bb92d6a34f0f4ec58eeaeaea323cd40be0e7b7cc8235093af7c855be3fd1aa689992aa884e404f5a16d38ea7a4c244f112b43f630d18aef8a162d languageName: node linkType: hard -"@lerna/npm-dist-tag@npm:5.2.0": - version: 5.2.0 - resolution: "@lerna/npm-dist-tag@npm:5.2.0" +"@lerna/npm-dist-tag@npm:5.5.4": + version: 5.5.4 + resolution: "@lerna/npm-dist-tag@npm:5.5.4" dependencies: - "@lerna/otplease": 5.2.0 - npm-package-arg: ^8.1.0 - npm-registry-fetch: ^9.0.0 + "@lerna/otplease": 5.5.4 + npm-package-arg: 8.1.1 + npm-registry-fetch: ^13.3.0 npmlog: ^6.0.2 - checksum: 9f34083241adcf470504b30152a79230216f317bea64c3935e62f171684e9dfc0a7b89e9193e5cf0056228fd7db85877e16dfdf6df873d7f9cd232155fa3084b + checksum: 4fb1fa54c1dd2e6a5c5ab68723a753bc74542f7031e513c5ada7507496f3dae10884a6727486024b1b6f272c81d4e1a1f63dfc012180d3e27b896689dc79f402 languageName: node linkType: hard -"@lerna/npm-install@npm:5.2.0": - version: 5.2.0 - resolution: "@lerna/npm-install@npm:5.2.0" +"@lerna/npm-install@npm:5.5.4": + version: 5.5.4 + resolution: "@lerna/npm-install@npm:5.5.4" dependencies: - "@lerna/child-process": 5.2.0 - "@lerna/get-npm-exec-opts": 5.2.0 + "@lerna/child-process": 5.5.4 + "@lerna/get-npm-exec-opts": 5.5.4 fs-extra: ^9.1.0 - npm-package-arg: ^8.1.0 + npm-package-arg: 8.1.1 npmlog: ^6.0.2 signal-exit: ^3.0.3 write-pkg: ^4.0.0 - checksum: 5627c76e880da74ae92db2fb20b634063fb05c4cd7d9a70be69f94695117b225dee3470eca3282e9918d009ce85a29e1d1bfe235a0eaf47e1d65b225347b2c87 + checksum: 156524225ab1e504e86aa025c464b1557f04e0cc72ff1c288afe69334eea3b394640ee0e48582e9cae357daa186a14066a8ad6be12eb4f497ac1cbe5bc3f1df5 languageName: node linkType: hard -"@lerna/npm-publish@npm:5.2.0": - version: 5.2.0 - resolution: "@lerna/npm-publish@npm:5.2.0" +"@lerna/npm-publish@npm:5.5.4": + version: 5.5.4 + resolution: "@lerna/npm-publish@npm:5.5.4" dependencies: - "@lerna/otplease": 5.2.0 - "@lerna/run-lifecycle": 5.2.0 + "@lerna/otplease": 5.5.4 + "@lerna/run-lifecycle": 5.5.4 fs-extra: ^9.1.0 - libnpmpublish: ^4.0.0 - npm-package-arg: ^8.1.0 + libnpmpublish: ^6.0.4 + npm-package-arg: 8.1.1 npmlog: ^6.0.2 pify: ^5.0.0 - read-package-json: ^3.0.0 - checksum: de3a4f39476c09af10151dd294055046c3f709305ca13e28136e58b5eb39f3a787b087b20021cfbc91dad8b32e193bbf75c87d50066e3432de193205e02987c5 + read-package-json: ^5.0.1 + checksum: 6a28621b59bc91a411c78f87d2b6aa9bdfd406cd7b2e05b448c5e94fdcab4643933cbc6b708e013ad158f9b839bb0ac8d305b92a2bd398ebc3e7fed72407af27 languageName: node linkType: hard -"@lerna/npm-run-script@npm:5.2.0": - version: 5.2.0 - resolution: "@lerna/npm-run-script@npm:5.2.0" +"@lerna/npm-run-script@npm:5.5.4": + version: 5.5.4 + resolution: "@lerna/npm-run-script@npm:5.5.4" dependencies: - "@lerna/child-process": 5.2.0 - "@lerna/get-npm-exec-opts": 5.2.0 + "@lerna/child-process": 5.5.4 + "@lerna/get-npm-exec-opts": 5.5.4 npmlog: ^6.0.2 - checksum: a6bef1d48990461835463693ee22498bb152b0b5d5ca59acc7c54f7bc96b19c182e0a8cb4aad7d84b7cb9bdb9a6a8b82e7b04f7902e63f2099628ea16d28f67c + checksum: 488d32847ac2f15e7d8c5ef3564438029fecc92da5b643f5b642bb0706e041ca93c753b36f0325a4c62e78226379de201a1eb5b65c32287421dee3d0fb0d84c0 languageName: node linkType: hard -"@lerna/otplease@npm:5.2.0": - version: 5.2.0 - resolution: "@lerna/otplease@npm:5.2.0" +"@lerna/otplease@npm:5.5.4": + version: 5.5.4 + resolution: "@lerna/otplease@npm:5.5.4" dependencies: - "@lerna/prompt": 5.2.0 - checksum: a7b769d5ad1d0caea568f2cabcb93a18a8f9ff598690e5e07b35a81d140e408352f91c4e01d4fc09f136cd04672f98c693ee463751822b3340df645d209e9663 + "@lerna/prompt": 5.5.4 + checksum: 13970bae350dbbc58588a475ee706b1c5ecff556dfbc9858da0d0fc75f5687d608e0bd134260c354fbbc0108d9bdac6b2f2cc3e1c61f5cba9c188210835eae7e languageName: node linkType: hard -"@lerna/output@npm:5.2.0": - version: 5.2.0 - resolution: "@lerna/output@npm:5.2.0" +"@lerna/output@npm:5.5.4": + version: 5.5.4 + resolution: "@lerna/output@npm:5.5.4" dependencies: npmlog: ^6.0.2 - checksum: e25c4c7cb18d2a3cbc68527738109bd00acf67f03e5b7ea686a3d3e9c896df63dfd54bbd2e0763220513302c1917b79d9d7b3385f514e363bc43ae6a00e4a726 + checksum: f72633c06f8052c8283d039e10fa7aa4e9c965d6c838bdc736bd51d635a0ba20e173fc2e19173f3537b6d94a5881ac964b10ebaf99704ec5105a303563b64afe languageName: node linkType: hard -"@lerna/pack-directory@npm:5.2.0": - version: 5.2.0 - resolution: "@lerna/pack-directory@npm:5.2.0" +"@lerna/pack-directory@npm:5.5.4": + version: 5.5.4 + resolution: "@lerna/pack-directory@npm:5.5.4" dependencies: - "@lerna/get-packed": 5.2.0 - "@lerna/package": 5.2.0 - "@lerna/run-lifecycle": 5.2.0 - "@lerna/temp-write": 5.2.0 + "@lerna/get-packed": 5.5.4 + "@lerna/package": 5.5.4 + "@lerna/run-lifecycle": 5.5.4 + "@lerna/temp-write": 5.5.4 npm-packlist: ^5.1.1 npmlog: ^6.0.2 tar: ^6.1.0 - checksum: da8e5f1e3f50e3e20226110e0d68612973701e0ee6eefb9597ec86ff4520f1fd9f496ee7fcb5bcc632b6f8acc3e597d087069f971199313e6edb514fbc4bdf18 + checksum: 1d31a76e463957e8441e53d96b228da92daa1c2c242a9a1d2b4a4e95fca710f3b6f9e01f2f129cb33f0a9bf3d3e63ae579cf8f79f48c774ba604078b90b8775b languageName: node linkType: hard -"@lerna/package-graph@npm:5.2.0": - version: 5.2.0 - resolution: "@lerna/package-graph@npm:5.2.0" +"@lerna/package-graph@npm:5.5.4": + version: 5.5.4 + resolution: "@lerna/package-graph@npm:5.5.4" dependencies: - "@lerna/prerelease-id-from-version": 5.2.0 - "@lerna/validation-error": 5.2.0 - npm-package-arg: ^8.1.0 + "@lerna/prerelease-id-from-version": 5.5.4 + "@lerna/validation-error": 5.5.4 + npm-package-arg: 8.1.1 npmlog: ^6.0.2 semver: ^7.3.4 - checksum: d357400ae255978608afdb20d2d760bd711da796647949b94631c88ed939c682221fbdbec9aff3656c0ce7a04ae1f1742744a9efa5ee6b4e50ef08c2f66721e4 + checksum: 4e48d8993eec4e381f817535e0f45472191889ba596e812941caeaf7fd57b28c7cd24e27ad23085db5ad1df6a82498812521b9698e2fad5d8be23d2d7a376f9d languageName: node linkType: hard -"@lerna/package@npm:5.2.0": - version: 5.2.0 - resolution: "@lerna/package@npm:5.2.0" +"@lerna/package@npm:5.5.4": + version: 5.5.4 + resolution: "@lerna/package@npm:5.5.4" dependencies: load-json-file: ^6.2.0 - npm-package-arg: ^8.1.0 + npm-package-arg: 8.1.1 write-pkg: ^4.0.0 - checksum: 7477c2daea17b5eaddc9565c6f6a961d9163f7586810836b499aa97f2a5b6da2fd8bd69236c27a0b4532c597ec2224a1394f54394ba35be746444f5e7783fb10 + checksum: 9e2ef5f6c43f02f8f81ccc33b6a195f5a3b505e0112a8a72c8169211249abeff1ccc1480a6f9dcf7e23068541cefa0eb26541fabf867d452657145aaef88dd6b languageName: node linkType: hard -"@lerna/prerelease-id-from-version@npm:5.2.0": - version: 5.2.0 - resolution: "@lerna/prerelease-id-from-version@npm:5.2.0" +"@lerna/prerelease-id-from-version@npm:5.5.4": + version: 5.5.4 + resolution: "@lerna/prerelease-id-from-version@npm:5.5.4" dependencies: semver: ^7.3.4 - checksum: d5540ae6eb5804b6ad379e9b626d01ac13021026d8f5aa576ab099e1ee884b998140a7ea788f62ece5a90d965e927a47e1607d4962069c4f43c91ff616893786 + checksum: 6213fe4dc060d7c41e153e4e6c1f6214bad88e911659846ea39ccc874801d276c7751b836cf0bf17cb63e45943f1c67396717f6843fe58c6a31806a49c26cbd7 languageName: node linkType: hard -"@lerna/profiler@npm:5.2.0": - version: 5.2.0 - resolution: "@lerna/profiler@npm:5.2.0" +"@lerna/profiler@npm:5.5.4": + version: 5.5.4 + resolution: "@lerna/profiler@npm:5.5.4" dependencies: fs-extra: ^9.1.0 npmlog: ^6.0.2 upath: ^2.0.1 - checksum: 9828c2bda88d6a6875cb2edf05ac194213634063c28283680b1a1c6a90105b1eca802e0e1fd1f02df4ead1c3b70aa74fc23c18d6fcba93a61343a203da9ce550 + checksum: 1c3eb01eccf7d478ee3197886b60d43f743058c9f2591bf40d0b0737d263af3169a9d55d42fcc7b02c41d60cba1ac4bee1f146318c4c2e85a9892b0190b2d3ae languageName: node linkType: hard -"@lerna/project@npm:5.2.0": - version: 5.2.0 - resolution: "@lerna/project@npm:5.2.0" +"@lerna/project@npm:5.5.4": + version: 5.5.4 + resolution: "@lerna/project@npm:5.5.4" dependencies: - "@lerna/package": 5.2.0 - "@lerna/validation-error": 5.2.0 + "@lerna/package": 5.5.4 + "@lerna/validation-error": 5.5.4 cosmiconfig: ^7.0.0 dedent: ^0.7.0 dot-prop: ^6.0.1 glob-parent: ^5.1.1 globby: ^11.0.2 + js-yaml: ^4.1.0 load-json-file: ^6.2.0 npmlog: ^6.0.2 p-map: ^4.0.0 resolve-from: ^5.0.0 write-json-file: ^4.3.0 - checksum: 6651fed986b46ae98df5fd59863c81526b91623cb03e0d3c91ebf726b87e137b3e33f0d5b144b2415d63137cae8bb0cfa370b6968a365911f65b6d32a559f2df + checksum: a97b76a6fc655e7d3177f9bfeff4da5e2b353322dfbeb70ae619fdd2b69f0ab6b2d2cb772388f396f8b21fbe0fade882303fbed9fb5c476a26f9b3b7aaa722dc languageName: node linkType: hard -"@lerna/prompt@npm:5.2.0": - version: 5.2.0 - resolution: "@lerna/prompt@npm:5.2.0" +"@lerna/prompt@npm:5.5.4": + version: 5.5.4 + resolution: "@lerna/prompt@npm:5.5.4" dependencies: inquirer: ^8.2.4 npmlog: ^6.0.2 - checksum: 1a55a36348e27504125e452f7744e8eeba0e4cb8da52c225c708cf4ff41356568b4ec0e6c06b08b4408db285566964db516d82fa58a1f9bf1fa0ad9487a1bb0e + checksum: 652293aac0a159bc4eea11c85014e8368447f36b18810b7c92f3c33614890e74528d77ddceccd7ea038b3aa7f3976428329b34ca6f7cad8b424502bf64240b40 languageName: node linkType: hard -"@lerna/publish@npm:5.2.0": - version: 5.2.0 - resolution: "@lerna/publish@npm:5.2.0" +"@lerna/publish@npm:5.5.4": + version: 5.5.4 + resolution: "@lerna/publish@npm:5.5.4" dependencies: - "@lerna/check-working-tree": 5.2.0 - "@lerna/child-process": 5.2.0 - "@lerna/collect-updates": 5.2.0 - "@lerna/command": 5.2.0 - "@lerna/describe-ref": 5.2.0 - "@lerna/log-packed": 5.2.0 - "@lerna/npm-conf": 5.2.0 - "@lerna/npm-dist-tag": 5.2.0 - "@lerna/npm-publish": 5.2.0 - "@lerna/otplease": 5.2.0 - "@lerna/output": 5.2.0 - "@lerna/pack-directory": 5.2.0 - "@lerna/prerelease-id-from-version": 5.2.0 - "@lerna/prompt": 5.2.0 - "@lerna/pulse-till-done": 5.2.0 - "@lerna/run-lifecycle": 5.2.0 - "@lerna/run-topologically": 5.2.0 - "@lerna/validation-error": 5.2.0 - "@lerna/version": 5.2.0 + "@lerna/check-working-tree": 5.5.4 + "@lerna/child-process": 5.5.4 + "@lerna/collect-updates": 5.5.4 + "@lerna/command": 5.5.4 + "@lerna/describe-ref": 5.5.4 + "@lerna/log-packed": 5.5.4 + "@lerna/npm-conf": 5.5.4 + "@lerna/npm-dist-tag": 5.5.4 + "@lerna/npm-publish": 5.5.4 + "@lerna/otplease": 5.5.4 + "@lerna/output": 5.5.4 + "@lerna/pack-directory": 5.5.4 + "@lerna/prerelease-id-from-version": 5.5.4 + "@lerna/prompt": 5.5.4 + "@lerna/pulse-till-done": 5.5.4 + "@lerna/run-lifecycle": 5.5.4 + "@lerna/run-topologically": 5.5.4 + "@lerna/validation-error": 5.5.4 + "@lerna/version": 5.5.4 fs-extra: ^9.1.0 - libnpmaccess: ^4.0.1 - npm-package-arg: ^8.1.0 - npm-registry-fetch: ^9.0.0 + libnpmaccess: ^6.0.3 + npm-package-arg: 8.1.1 + npm-registry-fetch: ^13.3.0 npmlog: ^6.0.2 p-map: ^4.0.0 p-pipe: ^3.1.0 pacote: ^13.6.1 semver: ^7.3.4 - checksum: 8b6be218fc81b6aa6a631184cc9cfcb1e2a57eaa0d07595743ef45b67671bcad93ffbb8110ea599b885e7e8ca867d7a19b9b050881452d32fa5628ced90c8277 + checksum: 466de9cade594c1f9bcb28f6e68dd51b7180a2eda864b0a55b46ddca59250ed7b91c996bd2f8a10ce6024e8f9b914561832b07cf149c8e7c66d596a3159591cc languageName: node linkType: hard -"@lerna/pulse-till-done@npm:5.2.0": - version: 5.2.0 - resolution: "@lerna/pulse-till-done@npm:5.2.0" +"@lerna/pulse-till-done@npm:5.5.4": + version: 5.5.4 + resolution: "@lerna/pulse-till-done@npm:5.5.4" dependencies: npmlog: ^6.0.2 - checksum: 54e139c5688ce010ed24faa660c4de76accb0f06c86a3bc11a69a31c0dee7431f54b5ed2e2d989bd7c5f60b8551084ed5eb3a74f119bab2b0aabe55cb9a40d7b + checksum: a296b1617590188ad51da84020afc09db906a98c2d9b993bb93db493a8d9297dfdecdedc31e7f52c996e3b9fec9891c4d8dea7f5a7da912b8e711aa320ab6901 languageName: node linkType: hard -"@lerna/query-graph@npm:5.2.0": - version: 5.2.0 - resolution: "@lerna/query-graph@npm:5.2.0" +"@lerna/query-graph@npm:5.5.4": + version: 5.5.4 + resolution: "@lerna/query-graph@npm:5.5.4" dependencies: - "@lerna/package-graph": 5.2.0 - checksum: 11311b5d704c8211575b83f2c97d8eedd8c023c35344f439d20bb42863e1c2e12513ec26dff8fcb49c61d9195d2cef7e731947223e33e8f56e71492cc1f26cc9 + "@lerna/package-graph": 5.5.4 + checksum: b360f980ff5ab5706a61b11b5d3ea256a729142b52af5c41a926e481b9722c8a04ca9d0c9a4a474a6258c49365ae8fdc3188be37a97acd48cec2174a09a9bb52 languageName: node linkType: hard -"@lerna/resolve-symlink@npm:5.2.0": - version: 5.2.0 - resolution: "@lerna/resolve-symlink@npm:5.2.0" +"@lerna/resolve-symlink@npm:5.5.4": + version: 5.5.4 + resolution: "@lerna/resolve-symlink@npm:5.5.4" dependencies: fs-extra: ^9.1.0 npmlog: ^6.0.2 - read-cmd-shim: ^2.0.0 - checksum: 8bbab7479574c31fee8a0e666cf2ac4bc9a18ae81434aa670a9158ba72121e2cdeca4497b534ae9e86048cc7ada3d6c06726388d93dc040823ff2b54b1ee00f5 + read-cmd-shim: ^3.0.0 + checksum: b3ddc7c92404385d6ba8a67cd63594192f84655af19cbe5fcc781f4d0d09348c480bf6d8eb86b689a02dac0e729fbf97355f3a6645312098992d2a47d1db57a0 languageName: node linkType: hard -"@lerna/rimraf-dir@npm:5.2.0": - version: 5.2.0 - resolution: "@lerna/rimraf-dir@npm:5.2.0" +"@lerna/rimraf-dir@npm:5.5.4": + version: 5.5.4 + resolution: "@lerna/rimraf-dir@npm:5.5.4" dependencies: - "@lerna/child-process": 5.2.0 + "@lerna/child-process": 5.5.4 npmlog: ^6.0.2 path-exists: ^4.0.0 rimraf: ^3.0.2 - checksum: 4ac661f8a0b792effbc31fae902fe8a239d4895763d4249a5569c83889e5128c4a7480e9584337ce7358632a09d306500419f2cc8e17e160787293195e14805f + checksum: fd7255b7fcd895db588eb01b2c4387d9f43b0b618b1dfba426250545e2c3e3586bdaf8274ea4631c5f574cb973e6daf2c3fda1aee69dfa75d4ee5b681d8689dc languageName: node linkType: hard -"@lerna/run-lifecycle@npm:5.2.0": - version: 5.2.0 - resolution: "@lerna/run-lifecycle@npm:5.2.0" +"@lerna/run-lifecycle@npm:5.5.4": + version: 5.5.4 + resolution: "@lerna/run-lifecycle@npm:5.5.4" dependencies: - "@lerna/npm-conf": 5.2.0 - "@npmcli/run-script": ^3.0.2 + "@lerna/npm-conf": 5.5.4 + "@npmcli/run-script": ^4.1.7 npmlog: ^6.0.2 - checksum: a0498fc45c7e4b2ab072ad1147958e7c307cf28489d55a468d0f1284019b648d802a3af7be0e1b5dc0364d10b540ed223f2ca8d66740e90bce7a0ac31531697b - languageName: node - linkType: hard - -"@lerna/run-topologically@npm:5.2.0": - version: 5.2.0 - resolution: "@lerna/run-topologically@npm:5.2.0" - dependencies: - "@lerna/query-graph": 5.2.0 p-queue: ^6.6.2 - checksum: e1c943b41a2017724fd3cc227e762eeb82255175feb02e79898926740037e7cf446d903971b085bb5bf530d417b4eafea9a92f315bfe1856276ad986750b006d + checksum: 3bbf90da32e83f3a909b190a174c215aa14ebc90c2eba62de79216d6c3c08411abba03d3dee1f2146c5552a36b9507ec0550ce38769265a5ede5f1f8c0b1fd75 languageName: node linkType: hard -"@lerna/run@npm:5.2.0": - version: 5.2.0 - resolution: "@lerna/run@npm:5.2.0" +"@lerna/run-topologically@npm:5.5.4": + version: 5.5.4 + resolution: "@lerna/run-topologically@npm:5.5.4" dependencies: - "@lerna/command": 5.2.0 - "@lerna/filter-options": 5.2.0 - "@lerna/npm-run-script": 5.2.0 - "@lerna/output": 5.2.0 - "@lerna/profiler": 5.2.0 - "@lerna/run-topologically": 5.2.0 - "@lerna/timer": 5.2.0 - "@lerna/validation-error": 5.2.0 - p-map: ^4.0.0 - checksum: 318ac6d2d0e40c097dab3530ce1292c248f60f4d99bb4ffb41ab94d9c05ea28e0ca5e187cc9ebf743d308491ae349cc6dfbe84824433173eff95488713770e6a + "@lerna/query-graph": 5.5.4 + p-queue: ^6.6.2 + checksum: 2fc3f2bcc6180e6b41e8cbc5bda35180c1fc6f69e6cf17306bc532c8d59667104dc3f65e6f05669b9cd222e06788ea4d110503bd26f75204657edb01d7389ae0 languageName: node linkType: hard -"@lerna/symlink-binary@npm:5.2.0": - version: 5.2.0 - resolution: "@lerna/symlink-binary@npm:5.2.0" +"@lerna/run@npm:5.5.4": + version: 5.5.4 + resolution: "@lerna/run@npm:5.5.4" dependencies: - "@lerna/create-symlink": 5.2.0 - "@lerna/package": 5.2.0 + "@lerna/command": 5.5.4 + "@lerna/filter-options": 5.5.4 + "@lerna/npm-run-script": 5.5.4 + "@lerna/output": 5.5.4 + "@lerna/profiler": 5.5.4 + "@lerna/run-topologically": 5.5.4 + "@lerna/timer": 5.5.4 + "@lerna/validation-error": 5.5.4 fs-extra: ^9.1.0 p-map: ^4.0.0 - checksum: 9b429f10b0cae318c0f18b8a13a53cab539335960376dd1a3872b6180169346b312924a3bba708a557832a7e865a0d1b307f17dbc5ddc4cba9724cbb24024586 + checksum: aab32307bf40ff5c6bd061deaa1911068f1f02125b599148e1b7b8344ce26209ba7807f86a713531710fe7ffb46186980ffaf801b3f3151afb8e4952b5ab6ef6 languageName: node linkType: hard -"@lerna/symlink-dependencies@npm:5.2.0": - version: 5.2.0 - resolution: "@lerna/symlink-dependencies@npm:5.2.0" +"@lerna/symlink-binary@npm:5.5.4": + version: 5.5.4 + resolution: "@lerna/symlink-binary@npm:5.5.4" dependencies: - "@lerna/create-symlink": 5.2.0 - "@lerna/resolve-symlink": 5.2.0 - "@lerna/symlink-binary": 5.2.0 + "@lerna/create-symlink": 5.5.4 + "@lerna/package": 5.5.4 + fs-extra: ^9.1.0 + p-map: ^4.0.0 + checksum: a4bff1050a379f237fbcfe7145ea1b3ad0ccce3daff44be19dd3ca96f542d78cec24be7ac14ef97163fb4024c679ee1d748c8035faf4cedc3a0270fc965b9f4d + languageName: node + linkType: hard + +"@lerna/symlink-dependencies@npm:5.5.4": + version: 5.5.4 + resolution: "@lerna/symlink-dependencies@npm:5.5.4" + dependencies: + "@lerna/create-symlink": 5.5.4 + "@lerna/resolve-symlink": 5.5.4 + "@lerna/symlink-binary": 5.5.4 fs-extra: ^9.1.0 p-map: ^4.0.0 p-map-series: ^2.1.0 - checksum: 4a00e85ac8bd63896834978cd6d380fecb4093098f09e7d53112b4543ea3ab70b563c24467748c6a4d1e77a25cb0a463f2a3284339bf7366eacff9f1d2ca6593 + checksum: d7675966af7cb83a8e0a963e4b08049be4cdf4381196d4fbc975f571a5b3f5f0bf5002b5c15a5256ae861bacf86856469fa2bc90f64270998f4ac529bbdb08ed languageName: node linkType: hard -"@lerna/temp-write@npm:5.2.0": - version: 5.2.0 - resolution: "@lerna/temp-write@npm:5.2.0" +"@lerna/temp-write@npm:5.5.4": + version: 5.5.4 + resolution: "@lerna/temp-write@npm:5.5.4" dependencies: graceful-fs: ^4.1.15 is-stream: ^2.0.0 make-dir: ^3.0.0 temp-dir: ^1.0.0 uuid: ^8.3.2 - checksum: 5daf344bafa17383c993c160fb95e78a47af1f19fd23577b16c1f80934719864c38c1401fe214c9b7c74a76d165454c5271d8b6db4e5702338320c461c1ff215 + checksum: f9d61e997dd10d4445da1f85582c4649b8ee1bcf3e9cd3ce52013cc88d3f39b7b26445dfe7a222eb5fde2687d759281a5222994fe1dcf1fa5f3d68dec22a51a6 languageName: node linkType: hard -"@lerna/timer@npm:5.2.0": - version: 5.2.0 - resolution: "@lerna/timer@npm:5.2.0" - checksum: 144cdba9fba13304fe13488c707a014ae7fb4fa776059f2ac5e9235f322afdecdb040587c5bd318fe41c372d475f2a1d446197f9cc50b68bee13efa387809cff +"@lerna/timer@npm:5.5.4": + version: 5.5.4 + resolution: "@lerna/timer@npm:5.5.4" + checksum: b15c10881a5e2e8e6c42643bdb1d1e0c73930545f522f161fb24c007bf373b8d7d59694cd24d1ea17bc631f72bd40f45095a538bd86b03fa7161febec4ec94c5 languageName: node linkType: hard -"@lerna/validation-error@npm:5.2.0": - version: 5.2.0 - resolution: "@lerna/validation-error@npm:5.2.0" +"@lerna/validation-error@npm:5.5.4": + version: 5.5.4 + resolution: "@lerna/validation-error@npm:5.5.4" dependencies: npmlog: ^6.0.2 - checksum: 5db1e89ed080a961b33f0b3d60d28a6be2467f788204c7b21f8e00f1d2630ed2df797b82dd73b6a2abd286d1f89a1c32487b0e739b71002adc501af269cd1f7e + checksum: 86cc66dd8f3d35ff333ad6e5009f176cb21c3e073e4591dc714f18d7f8d44cd3838ae365d5e9d927d7d8a08248296b76048f7d5948052bddecc9920ad8f5a013 languageName: node linkType: hard -"@lerna/version@npm:5.2.0": - version: 5.2.0 - resolution: "@lerna/version@npm:5.2.0" +"@lerna/version@npm:5.5.4": + version: 5.5.4 + resolution: "@lerna/version@npm:5.5.4" dependencies: - "@lerna/check-working-tree": 5.2.0 - "@lerna/child-process": 5.2.0 - "@lerna/collect-updates": 5.2.0 - "@lerna/command": 5.2.0 - "@lerna/conventional-commits": 5.2.0 - "@lerna/github-client": 5.2.0 - "@lerna/gitlab-client": 5.2.0 - "@lerna/output": 5.2.0 - "@lerna/prerelease-id-from-version": 5.2.0 - "@lerna/prompt": 5.2.0 - "@lerna/run-lifecycle": 5.2.0 - "@lerna/run-topologically": 5.2.0 - "@lerna/temp-write": 5.2.0 - "@lerna/validation-error": 5.2.0 + "@lerna/check-working-tree": 5.5.4 + "@lerna/child-process": 5.5.4 + "@lerna/collect-updates": 5.5.4 + "@lerna/command": 5.5.4 + "@lerna/conventional-commits": 5.5.4 + "@lerna/github-client": 5.5.4 + "@lerna/gitlab-client": 5.5.4 + "@lerna/output": 5.5.4 + "@lerna/prerelease-id-from-version": 5.5.4 + "@lerna/prompt": 5.5.4 + "@lerna/run-lifecycle": 5.5.4 + "@lerna/run-topologically": 5.5.4 + "@lerna/temp-write": 5.5.4 + "@lerna/validation-error": 5.5.4 chalk: ^4.1.0 dedent: ^0.7.0 load-json-file: ^6.2.0 @@ -7399,17 +7401,17 @@ __metadata: semver: ^7.3.4 slash: ^3.0.0 write-json-file: ^4.3.0 - checksum: 2e6f399da3fc2cf8d937ae12ac5edb5ffb5b1210690d71a1314737891250f040cb0dc83fac635a64079cf81c93e173eaaf236608561672081e64d2d01651391c + checksum: 785d1cfb837cd6c2559a4f777ee621fd760019d591b6e878b2845d257595bdad4eb3a11710beac91e1a2244b95f7ca708b576ecf59a8747cc85de074b7f0e086 languageName: node linkType: hard -"@lerna/write-log-file@npm:5.2.0": - version: 5.2.0 - resolution: "@lerna/write-log-file@npm:5.2.0" +"@lerna/write-log-file@npm:5.5.4": + version: 5.5.4 + resolution: "@lerna/write-log-file@npm:5.5.4" dependencies: npmlog: ^6.0.2 - write-file-atomic: ^3.0.3 - checksum: c72547b33f8c9b16cf650419f2348d05deb2e1d3a085b4e707d3d6dc9659d1b537a18b191f7579cdc8ce72d02a07aa0bfdac4ec1e6670f38c5f9898066f80a16 + write-file-atomic: ^4.0.1 + checksum: c25c235f5399e0d510a4b6d7b3a675d0a8dabd8b84dd663fbf713a4174e234e21bc1b5d35c50f442cc4e57000482955bbd351fbd9181cd56fe4f5dd730ada001 languageName: node linkType: hard @@ -7788,9 +7790,9 @@ __metadata: languageName: node linkType: hard -"@npmcli/arborist@npm:5.2.0": - version: 5.2.0 - resolution: "@npmcli/arborist@npm:5.2.0" +"@npmcli/arborist@npm:5.3.0": + version: 5.3.0 + resolution: "@npmcli/arborist@npm:5.3.0" dependencies: "@isaacs/string-locale-compare": ^1.1.0 "@npmcli/installed-package-contents": ^1.0.7 @@ -7800,7 +7802,7 @@ __metadata: "@npmcli/name-from-folder": ^1.0.1 "@npmcli/node-gyp": ^2.0.0 "@npmcli/package-json": ^2.0.0 - "@npmcli/run-script": ^3.0.0 + "@npmcli/run-script": ^4.1.3 bin-links: ^3.0.0 cacache: ^16.0.6 common-ancestor-path: ^1.0.1 @@ -7814,7 +7816,7 @@ __metadata: npm-pick-manifest: ^7.0.0 npm-registry-fetch: ^13.0.0 npmlog: ^6.0.2 - pacote: ^13.0.5 + pacote: ^13.6.1 parse-conflict-json: ^2.0.1 proc-log: ^2.0.0 promise-all-reject-late: ^1.0.0 @@ -7828,14 +7830,7 @@ __metadata: walk-up-path: ^1.0.0 bin: arborist: bin/index.js - checksum: e466133cb564619f1544b53ed48632082e90d294a2c7f31103bc685b029c4ba6cb63cea845212148f28b5328ad42fd137936e3395039028b1bd84ed542b9108c - languageName: node - linkType: hard - -"@npmcli/ci-detect@npm:^1.0.0": - version: 1.4.0 - resolution: "@npmcli/ci-detect@npm:1.4.0" - checksum: c262fc86dd543efb8a721dec39ab333f99861abff5850136c2dcbee58610ccb1f5e66c3c669903b1bcf0668084c1fe6c443a90490fba771223fb6db137e9bfc5 + checksum: 7f99f451ba625dd3532e7a69b27cc399cab1e7ef2a069bbc04cf22ef9d16a0076f8f5fb92c4cd146c256cd8a41963b2e417684f063a108e96939c440bad0e95e languageName: node linkType: hard @@ -7964,18 +7959,6 @@ __metadata: languageName: node linkType: hard -"@npmcli/run-script@npm:^3.0.0, @npmcli/run-script@npm:^3.0.2": - version: 3.0.3 - resolution: "@npmcli/run-script@npm:3.0.3" - dependencies: - "@npmcli/node-gyp": ^2.0.0 - "@npmcli/promise-spawn": ^3.0.0 - node-gyp: ^8.4.1 - read-package-json-fast: ^2.0.3 - checksum: 3d0540a95620420d6e77c796a9e9d4fdf2600b5cf5b8d1ceabda15b1dd1d88cc5abf11e28b0494f03eee79c075a1549127bcfa550eb758b08f3948557d77b27a - languageName: node - linkType: hard - "@npmcli/run-script@npm:^4.1.0": version: 4.1.5 resolution: "@npmcli/run-script@npm:4.1.5" @@ -7989,23 +7972,36 @@ __metadata: languageName: node linkType: hard -"@nrwl/cli@npm:14.4.3": - version: 14.4.3 - resolution: "@nrwl/cli@npm:14.4.3" +"@npmcli/run-script@npm:^4.1.3, @npmcli/run-script@npm:^4.1.7": + version: 4.2.1 + resolution: "@npmcli/run-script@npm:4.2.1" dependencies: - nx: 14.4.3 - checksum: 083dd64624297ff249e5ccfdce150164abfffe8570a80c45743fc9778d3dc6cfd3358200886c57ac96d9de1ca07c8b865599aac97b2cf4727724e6f14575e287 + "@npmcli/node-gyp": ^2.0.0 + "@npmcli/promise-spawn": ^3.0.0 + node-gyp: ^9.0.0 + read-package-json-fast: ^2.0.3 + which: ^2.0.2 + checksum: 7b8d6676353f157e68b26baf848e01e5d887bcf90ce81a52f23fc9a5d93e6ffb60057532d664cfd7aeeb76d464d0c8b0d314ee6cccb56943acb3b6c570b756c8 languageName: node linkType: hard -"@nrwl/tao@npm:14.4.3": - version: 14.4.3 - resolution: "@nrwl/tao@npm:14.4.3" +"@nrwl/cli@npm:14.8.2": + version: 14.8.2 + resolution: "@nrwl/cli@npm:14.8.2" dependencies: - nx: 14.4.3 + nx: 14.8.2 + checksum: 18d698397cd0536109b1a6dbe50e9ec13063dde2793b49ab25d3db3f55ec74931ad20ae32375c5d2a1554d9c91f5b1152e42d6738aaca3ebecca4735bd4916c8 + languageName: node + linkType: hard + +"@nrwl/tao@npm:14.8.2": + version: 14.8.2 + resolution: "@nrwl/tao@npm:14.8.2" + dependencies: + nx: 14.8.2 bin: tao: index.js - checksum: 261ba6c57402f6634d1af06862de5c33159da9a767cda29beac2d3f5aea6f05d76922ece41284fb4f7a767cf25b1418c48a1899ab750b34dc4a8b17c158cdd1f + checksum: 78067a5c61b88c7cc43b0313dd1a96cc40149b84f349f2c634dd8ee5514b9d71deca28267a03fa081c8c5877d406e3774046c4927f0111c9f5c5571fd617e254 languageName: node linkType: hard @@ -13897,6 +13893,34 @@ __metadata: languageName: node linkType: hard +"@yarnpkg/lockfile@npm:^1.1.0": + version: 1.1.0 + resolution: "@yarnpkg/lockfile@npm:1.1.0" + checksum: 05b881b4866a3546861fee756e6d3812776ea47fa6eb7098f983d6d0eefa02e12b66c3fff931574120f196286a7ad4879ce02743c8bb2be36c6a576c7852083a + languageName: node + linkType: hard + +"@yarnpkg/parsers@npm:^3.0.0-rc.18": + version: 3.0.0-rc.22 + resolution: "@yarnpkg/parsers@npm:3.0.0-rc.22" + dependencies: + js-yaml: ^3.10.0 + tslib: ^2.4.0 + checksum: 4a31b4faad853b6cb09ff198017dd2f81782cb57ff8aaa2446ab9c8eb51aacaad3fa740e0c156c60c66cdb9cff8939f99b2b09c9890e2b8d015dcbed0150cb8a + languageName: node + linkType: hard + +"@zkochan/js-yaml@npm:0.0.6": + version: 0.0.6 + resolution: "@zkochan/js-yaml@npm:0.0.6" + dependencies: + argparse: ^2.0.1 + bin: + js-yaml: bin/js-yaml.js + checksum: 51b81597a1d1d79c778b8fae48317eaad78d75223d0b7477ad2b35f47cf63b19504da430bb7a03b326e668b282874242cc123e323e57293be038684cb5e755f8 + languageName: node + linkType: hard + "@zxing/text-encoding@npm:0.9.0": version: 0.9.0 resolution: "@zxing/text-encoding@npm:0.9.0" @@ -16958,15 +16982,6 @@ __metadata: languageName: node linkType: hard -"cmd-shim@npm:^4.1.0": - version: 4.1.0 - resolution: "cmd-shim@npm:4.1.0" - dependencies: - mkdirp-infer-owner: ^2.0.0 - checksum: d25bb57a8accab681bcfc632e085573b9395cdc60aed8d0ce479f988f9ced16720c89732aef81020140e43fd223b6573c22402e5a1c0cbd0149443104df88d68 - languageName: node - linkType: hard - "cmd-shim@npm:^5.0.0": version: 5.0.0 resolution: "cmd-shim@npm:5.0.0" @@ -22807,22 +22822,22 @@ __metadata: languageName: node linkType: hard -"git-up@npm:^6.0.0": - version: 6.0.0 - resolution: "git-up@npm:6.0.0" +"git-up@npm:^7.0.0": + version: 7.0.0 + resolution: "git-up@npm:7.0.0" dependencies: is-ssh: ^1.4.0 - parse-url: ^7.0.2 - checksum: 145a1f546d7a078cdfc2616556e518e634d134e34a31c6bf2ed89e44158659cb525dbd451c338121f7107f55cef066d0b37a7bbf178555befc9304b3940b435e + parse-url: ^8.1.0 + checksum: 2faadbab51e94d2ffb220e426e950087cc02c15d664e673bd5d1f734cfa8196fed8b19493f7bf28fe216d087d10e22a7fd9b63687e0ba7d24f0ddcfb0a266d6e languageName: node linkType: hard -"git-url-parse@npm:^12.0.0": - version: 12.0.0 - resolution: "git-url-parse@npm:12.0.0" +"git-url-parse@npm:^13.1.0": + version: 13.1.0 + resolution: "git-url-parse@npm:13.1.0" dependencies: - git-up: ^6.0.0 - checksum: b4c8530b816202ecf9d4dabf755f785a314a096b56145018385b3d7171e862f9d0d9b38cce620c0af354b269750fe7b2d9aa95815c7150922090a11dac4ab1e6 + git-up: ^7.0.0 + checksum: 212a9b0343e9199998b6a532efe2014476a7a1283af393663ca49ac28d4768929aad16d3322e2685236065ee394dbc93e7aa63a48956531e984c56d8b5edb54d languageName: node linkType: hard @@ -23295,7 +23310,7 @@ __metadata: json-source-map: 0.6.1 jsurl: ^0.1.5 kbar: 0.1.0-beta.36 - lerna: 5.2.0 + lerna: 5.5.4 lint-staged: 13.0.3 lodash: 4.17.21 logfmt: ^1.3.2 @@ -23820,6 +23835,15 @@ __metadata: languageName: node linkType: hard +"hosted-git-info@npm:^3.0.6": + version: 3.0.8 + resolution: "hosted-git-info@npm:3.0.8" + dependencies: + lru-cache: ^6.0.0 + checksum: 5af7a69581acb84206a7b8e009f4680c36396814e92c8a83973dfb3b87e44e44d1f7b8eaf3e4a953686482770ecb78406a4ce4666bfdfe447762434127871d8d + languageName: node + linkType: hard + "hosted-git-info@npm:^4.0.0": version: 4.1.0 resolution: "hosted-git-info@npm:4.1.0" @@ -24512,18 +24536,18 @@ __metadata: languageName: node linkType: hard -"init-package-json@npm:^2.0.2": - version: 2.0.5 - resolution: "init-package-json@npm:2.0.5" +"init-package-json@npm:^3.0.2": + version: 3.0.2 + resolution: "init-package-json@npm:3.0.2" dependencies: - npm-package-arg: ^8.1.5 + npm-package-arg: ^9.0.1 promzard: ^0.3.0 - read: ~1.0.1 - read-package-json: ^4.1.1 + read: ^1.0.7 + read-package-json: ^5.0.0 semver: ^7.3.5 validate-npm-package-license: ^3.0.4 - validate-npm-package-name: ^3.0.0 - checksum: cbd3e2e79156d6e8722699f571e509e0733dde31ac4cb58c0aadb63f7cef1a131037c6d549bd6af5757032a51252b1bdb86a70f68ed6c10f866f203e5fb4f9ba + validate-npm-package-name: ^4.0.0 + checksum: e027f60e4a1564809eee790d5a842341c784888fd7c7ace5f9a34ea76224c0adb6f3ab3bf205cf1c9c877a6e1a76c68b00847a984139f60813125d7b42a23a13 languageName: node linkType: hard @@ -26909,7 +26933,7 @@ __metadata: languageName: node linkType: hard -"js-yaml@npm:^3.13.1": +"js-yaml@npm:^3.10.0, js-yaml@npm:^3.13.1": version: 3.14.1 resolution: "js-yaml@npm:3.14.1" dependencies: @@ -27148,7 +27172,14 @@ __metadata: languageName: node linkType: hard -"jsonc-parser@npm:3.0.0, jsonc-parser@npm:^3.0.0": +"jsonc-parser@npm:3.2.0": + version: 3.2.0 + resolution: "jsonc-parser@npm:3.2.0" + checksum: 946dd9a5f326b745aa326d48a7257e3f4a4b62c5e98ec8e49fa2bdd8d96cef7e6febf1399f5c7016114fd1f68a1c62c6138826d5d90bc650448e3cf0951c53c7 + languageName: node + linkType: hard + +"jsonc-parser@npm:^3.0.0": version: 3.0.0 resolution: "jsonc-parser@npm:3.0.0" checksum: 1df2326f1f9688de30c70ff19c5b2a83ba3b89a1036160da79821d1361090775e9db502dc57a67c11b56e1186fc1ed70b887f25c5febf9a3ec4f91435836c99d @@ -27430,32 +27461,33 @@ __metadata: languageName: node linkType: hard -"lerna@npm:5.2.0": - version: 5.2.0 - resolution: "lerna@npm:5.2.0" +"lerna@npm:5.5.4": + version: 5.5.4 + resolution: "lerna@npm:5.5.4" dependencies: - "@lerna/add": 5.2.0 - "@lerna/bootstrap": 5.2.0 - "@lerna/changed": 5.2.0 - "@lerna/clean": 5.2.0 - "@lerna/cli": 5.2.0 - "@lerna/create": 5.2.0 - "@lerna/diff": 5.2.0 - "@lerna/exec": 5.2.0 - "@lerna/import": 5.2.0 - "@lerna/info": 5.2.0 - "@lerna/init": 5.2.0 - "@lerna/link": 5.2.0 - "@lerna/list": 5.2.0 - "@lerna/publish": 5.2.0 - "@lerna/run": 5.2.0 - "@lerna/version": 5.2.0 + "@lerna/add": 5.5.4 + "@lerna/bootstrap": 5.5.4 + "@lerna/changed": 5.5.4 + "@lerna/clean": 5.5.4 + "@lerna/cli": 5.5.4 + "@lerna/create": 5.5.4 + "@lerna/diff": 5.5.4 + "@lerna/exec": 5.5.4 + "@lerna/import": 5.5.4 + "@lerna/info": 5.5.4 + "@lerna/init": 5.5.4 + "@lerna/link": 5.5.4 + "@lerna/list": 5.5.4 + "@lerna/publish": 5.5.4 + "@lerna/run": 5.5.4 + "@lerna/version": 5.5.4 import-local: ^3.0.2 npmlog: ^6.0.2 - nx: ">=14.4.3 < 16" + nx: ">=14.6.1 < 16" + typescript: ^3 || ^4 bin: lerna: cli.js - checksum: d47b6068a1760e502176635dc9dd135da4b9dd02f24998f72bd8dd8d43cad99d0b1d89a7406959f65e580b6c80930e12c3e0cc5c82fdd15773bde6a4d6f74d46 + checksum: 3107df46a5ce9d5bc4c5587767ac7b27d62b9732991853c48a58c88bdbc8ad972df7928e5cf98fbcb4d87ba5e47116cec5326cb9438f235e7a6686bc4e1c9ada languageName: node linkType: hard @@ -27533,28 +27565,28 @@ __metadata: languageName: node linkType: hard -"libnpmaccess@npm:^4.0.1": - version: 4.0.3 - resolution: "libnpmaccess@npm:4.0.3" +"libnpmaccess@npm:^6.0.3": + version: 6.0.4 + resolution: "libnpmaccess@npm:6.0.4" dependencies: aproba: ^2.0.0 minipass: ^3.1.1 - npm-package-arg: ^8.1.2 - npm-registry-fetch: ^11.0.0 - checksum: cc6b9fa0abadb6945adbd00dcf1c22267ed0b4d35e0f6ddc50b9fe7a60aa596613110367502e3cb483f93fbe9aa7df4c575ca00b7b3d9eb429fa2aeaad5783aa + npm-package-arg: ^9.0.1 + npm-registry-fetch: ^13.0.0 + checksum: 86130b435c67a03254489c3b3684d435260b609164f76bcc69adbee78652c36a64551228b2c5ddc2b16851e9e367ee0ba173a641406768397716faa006042322 languageName: node linkType: hard -"libnpmpublish@npm:^4.0.0": - version: 4.0.2 - resolution: "libnpmpublish@npm:4.0.2" +"libnpmpublish@npm:^6.0.4": + version: 6.0.5 + resolution: "libnpmpublish@npm:6.0.5" dependencies: - normalize-package-data: ^3.0.2 - npm-package-arg: ^8.1.2 - npm-registry-fetch: ^11.0.0 - semver: ^7.1.3 - ssri: ^8.0.1 - checksum: 5aa83352bb70bc9bb082107678d1e42f8f80ef1c354b37849a40fa0ab9c9e715aeba803811ee2f0da99605054aead41450e040b4d37cf543237594e1d1b97173 + normalize-package-data: ^4.0.0 + npm-package-arg: ^9.0.1 + npm-registry-fetch: ^13.0.0 + semver: ^7.3.7 + ssri: ^9.0.0 + checksum: d2f2434517038438be44db2e90e1c8c524df05f7c3b1458617177c2f9ca008dde8a72a4f739b34aee4df0352f71c9289788da86aa38a4709e05c6db33eed570a languageName: node linkType: hard @@ -28090,30 +28122,7 @@ __metadata: languageName: node linkType: hard -"make-fetch-happen@npm:^8.0.9": - version: 8.0.14 - resolution: "make-fetch-happen@npm:8.0.14" - dependencies: - agentkeepalive: ^4.1.3 - cacache: ^15.0.5 - http-cache-semantics: ^4.1.0 - http-proxy-agent: ^4.0.1 - https-proxy-agent: ^5.0.0 - is-lambda: ^1.0.1 - lru-cache: ^6.0.0 - minipass: ^3.1.3 - minipass-collect: ^1.0.2 - minipass-fetch: ^1.3.2 - minipass-flush: ^1.0.5 - minipass-pipeline: ^1.2.4 - promise-retry: ^2.0.1 - socks-proxy-agent: ^5.0.0 - ssri: ^8.0.0 - checksum: 326fefde1aec1f1314e548be74baaaa322208718d1b51c9688a326f73dea70f57767b4f5423230e39408cfe7c6dcf7adcf86ca4798c919c3ea78f54532910434 - languageName: node - linkType: hard - -"make-fetch-happen@npm:^9.0.1, make-fetch-happen@npm:^9.1.0": +"make-fetch-happen@npm:^9.1.0": version: 9.1.0 resolution: "make-fetch-happen@npm:9.1.0" dependencies: @@ -29248,7 +29257,7 @@ __metadata: languageName: node linkType: hard -"minipass-fetch@npm:^1.3.0, minipass-fetch@npm:^1.3.2": +"minipass-fetch@npm:^1.3.2": version: 1.4.1 resolution: "minipass-fetch@npm:1.4.1" dependencies: @@ -29920,26 +29929,6 @@ __metadata: languageName: node linkType: hard -"node-gyp@npm:^8.4.1": - version: 8.4.1 - resolution: "node-gyp@npm:8.4.1" - dependencies: - env-paths: ^2.2.0 - glob: ^7.1.4 - graceful-fs: ^4.2.6 - make-fetch-happen: ^9.1.0 - nopt: ^5.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: 341710b5da39d3660e6a886b37e210d33f8282047405c2e62c277bcc744c7552c5b8b972ebc3a7d5c2813794e60cc48c3ebd142c46d6e0321db4db6c92dd0355 - languageName: node - linkType: hard - "node-gyp@npm:^9.0.0": version: 9.0.0 resolution: "node-gyp@npm:9.0.0" @@ -30090,7 +30079,7 @@ __metadata: languageName: node linkType: hard -"normalize-package-data@npm:^3.0.0, normalize-package-data@npm:^3.0.2": +"normalize-package-data@npm:^3.0.0": version: 3.0.3 resolution: "normalize-package-data@npm:3.0.3" dependencies: @@ -30137,7 +30126,7 @@ __metadata: languageName: node linkType: hard -"normalize-url@npm:^6.0.1, normalize-url@npm:^6.1.0": +"normalize-url@npm:^6.0.1": version: 6.1.0 resolution: "normalize-url@npm:6.1.0" checksum: 4a4944631173e7d521d6b80e4c85ccaeceb2870f315584fa30121f505a6dfd86439c5e3fdd8cd9e0e291290c41d0c3599f0cb12ab356722ed242584c30348e50 @@ -30169,14 +30158,21 @@ __metadata: languageName: node linkType: hard -"npm-package-arg@npm:^8.0.0, npm-package-arg@npm:^8.1.0, npm-package-arg@npm:^8.1.2, npm-package-arg@npm:^8.1.5": - version: 8.1.5 - resolution: "npm-package-arg@npm:8.1.5" +"npm-normalize-package-bin@npm:^2.0.0": + version: 2.0.0 + resolution: "npm-normalize-package-bin@npm:2.0.0" + checksum: 7c5379f9b188b564c4332c97bdd9a5d6b7b15f02b5823b00989d6a0e6fb31eb0280f02b0a924f930e1fcaf00e60fae333aec8923d2a4c7747613c7d629d8aa25 + languageName: node + linkType: hard + +"npm-package-arg@npm:8.1.1": + version: 8.1.1 + resolution: "npm-package-arg@npm:8.1.1" dependencies: - hosted-git-info: ^4.0.1 - semver: ^7.3.4 + hosted-git-info: ^3.0.6 + semver: ^7.0.0 validate-npm-package-name: ^3.0.0 - checksum: ae76afbcebb4ea8d0b849b8b18ed1b0491030fb04a0af5d75f1b8390cc50bec186ced9fbe60f47d939eab630c7c0db0919d879ac56a87d3782267dfe8eec60d3 + checksum: 406c59f92d8fac5acbd1df62f4af8075e925af51131b6bc66245641ea71ddb0e60b3e2c56fafebd4e8ffc3ba0453e700a221a36a44740dc9f7488cec97ae4c55 languageName: node linkType: hard @@ -30218,20 +30214,6 @@ __metadata: languageName: node linkType: hard -"npm-registry-fetch@npm:^11.0.0": - version: 11.0.0 - resolution: "npm-registry-fetch@npm:11.0.0" - dependencies: - make-fetch-happen: ^9.0.1 - minipass: ^3.1.3 - minipass-fetch: ^1.3.0 - minipass-json-stream: ^1.0.1 - minizlib: ^2.0.0 - npm-package-arg: ^8.0.0 - checksum: dda149cd86f8ee73db1b0a0302fbf59983ef03ad180051caa9aad1de9f1e099aaa77adcda3ca2c3bd9d98958e9e6593bd56ee21d3f660746b0a65fafbf5ae161 - languageName: node - linkType: hard - "npm-registry-fetch@npm:^13.0.0, npm-registry-fetch@npm:^13.0.1": version: 13.1.1 resolution: "npm-registry-fetch@npm:13.1.1" @@ -30247,19 +30229,18 @@ __metadata: languageName: node linkType: hard -"npm-registry-fetch@npm:^9.0.0": - version: 9.0.0 - resolution: "npm-registry-fetch@npm:9.0.0" +"npm-registry-fetch@npm:^13.3.0": + version: 13.3.1 + resolution: "npm-registry-fetch@npm:13.3.1" dependencies: - "@npmcli/ci-detect": ^1.0.0 - lru-cache: ^6.0.0 - make-fetch-happen: ^8.0.9 - minipass: ^3.1.3 - minipass-fetch: ^1.3.0 + make-fetch-happen: ^10.0.6 + minipass: ^3.1.6 + minipass-fetch: ^2.0.3 minipass-json-stream: ^1.0.1 - minizlib: ^2.0.0 - npm-package-arg: ^8.0.0 - checksum: b5376b72efc503e46a84cda967b79c08b093f040bfa819b59db32dfa9b057c810401a740dbf739a94a2ebbd0f6a3888bc0918db6506553ab97afb555260a5a22 + minizlib: ^2.1.2 + npm-package-arg: ^9.0.1 + proc-log: ^2.0.0 + checksum: 5a941c2c799568e0dbccfc15f280444da398dadf2eede1b1921f08ddd5cb5f32c7cb4d16be96401f95a33073aeec13a3fd928c753790d3c412c2e64e7f7c6ee4 languageName: node linkType: hard @@ -30356,13 +30337,16 @@ __metadata: languageName: node linkType: hard -"nx@npm:14.4.3, nx@npm:>=14.4.3 < 16": - version: 14.4.3 - resolution: "nx@npm:14.4.3" +"nx@npm:14.8.2, nx@npm:>=14.6.1 < 16": + version: 14.8.2 + resolution: "nx@npm:14.8.2" dependencies: - "@nrwl/cli": 14.4.3 - "@nrwl/tao": 14.4.3 + "@nrwl/cli": 14.8.2 + "@nrwl/tao": 14.8.2 "@parcel/watcher": 2.0.4 + "@yarnpkg/lockfile": ^1.1.0 + "@yarnpkg/parsers": ^3.0.0-rc.18 + "@zkochan/js-yaml": 0.0.6 chalk: 4.1.0 chokidar: ^3.5.1 cli-cursor: 3.1.0 @@ -30377,12 +30361,13 @@ __metadata: glob: 7.1.4 ignore: ^5.0.4 js-yaml: 4.1.0 - jsonc-parser: 3.0.0 + jsonc-parser: 3.2.0 minimatch: 3.0.5 npm-run-path: ^4.0.1 open: ^8.4.0 semver: 7.3.4 string-width: ^4.2.3 + strong-log-transformer: ^2.1.0 tar-stream: ~2.2.0 tmp: ~0.2.1 tsconfig-paths: ^3.9.0 @@ -30400,7 +30385,7 @@ __metadata: optional: true bin: nx: bin/nx.js - checksum: ee5dd89edb614c069ce822e6b3fb996fc41beb111cf5cf86f4929c6e61999a4857135a9a6fc95fd0b842fed00effbecb22235aa7e8f370cc5ed3ed4a3bb20740 + checksum: b0c0428366f867e20d5f89d8e9bf2f8c8b6f9c0a60a7b8bebc3617d652b0e33109bc8bce352b9e7218db69eb181b0bacb3378c3d0f5b063acfd986ed0b35f7df languageName: node linkType: hard @@ -31010,7 +30995,7 @@ __metadata: languageName: node linkType: hard -"pacote@npm:^13.0.3, pacote@npm:^13.0.5, pacote@npm:^13.6.1": +"pacote@npm:^13.0.3, pacote@npm:^13.6.1": version: 13.6.1 resolution: "pacote@npm:13.6.1" dependencies: @@ -31205,24 +31190,21 @@ __metadata: languageName: node linkType: hard -"parse-path@npm:^5.0.0": - version: 5.0.0 - resolution: "parse-path@npm:5.0.0" +"parse-path@npm:^7.0.0": + version: 7.0.0 + resolution: "parse-path@npm:7.0.0" dependencies: protocols: ^2.0.0 - checksum: e9f670559cd8e535f39f548bf5d41ad96a220190ea98df33d0babd9dfaa7c3c70ee2e55394078517d5e7e93c6a39c8eac1261ed3f9e68033656614fc954262e8 + checksum: 244b46523a58181d251dda9b888efde35d8afb957436598d948852f416d8c76ddb4f2010f9fc94218b4be3e5c0f716aa0d2026194a781e3b8981924142009302 languageName: node linkType: hard -"parse-url@npm:^7.0.2": - version: 7.0.2 - resolution: "parse-url@npm:7.0.2" +"parse-url@npm:^8.1.0": + version: 8.1.0 + resolution: "parse-url@npm:8.1.0" dependencies: - is-ssh: ^1.4.0 - normalize-url: ^6.1.0 - parse-path: ^5.0.0 - protocols: ^2.0.1 - checksum: 3e26852706bebe9fac409909316716dee52883d2fb5c82d65577effba1507abb7bc42bb59ce0ba6c8659168fb99acf89000bd8fe096ed3ad7124fa85227436d7 + parse-path: ^7.0.0 + checksum: b93e21ab4c93c7d7317df23507b41be7697694d4c94f49ed5c8d6288b01cba328fcef5ba388e147948eac20453dee0df9a67ab2012415189fff85973bdffe8d9 languageName: node linkType: hard @@ -34719,13 +34701,6 @@ __metadata: languageName: node linkType: hard -"read-cmd-shim@npm:^2.0.0": - version: 2.0.0 - resolution: "read-cmd-shim@npm:2.0.0" - checksum: 024f0a092d3630ad344af63eb0539bce90978883dd06a93e7bfbb26913168ab034473eae4a85685ea76a982eb31b0e8e16dee9c1138dabb3a925e7c4757952bc - languageName: node - linkType: hard - "read-cmd-shim@npm:^3.0.0": version: 3.0.0 resolution: "read-cmd-shim@npm:3.0.0" @@ -34743,30 +34718,6 @@ __metadata: languageName: node linkType: hard -"read-package-json@npm:^3.0.0": - version: 3.0.1 - resolution: "read-package-json@npm:3.0.1" - dependencies: - glob: ^7.1.1 - json-parse-even-better-errors: ^2.3.0 - normalize-package-data: ^3.0.0 - npm-normalize-package-bin: ^1.0.0 - checksum: 963904f00f70283e89b8a4a06b51b1453e7e23a9a029af3030e301f8c2429a2bad21a72c53943cdb735c9a7b643282d5b0b1a09b7d31f74640e81311127f8f68 - languageName: node - linkType: hard - -"read-package-json@npm:^4.1.1": - version: 4.1.2 - resolution: "read-package-json@npm:4.1.2" - dependencies: - glob: ^7.1.1 - json-parse-even-better-errors: ^2.3.0 - normalize-package-data: ^3.0.0 - npm-normalize-package-bin: ^1.0.0 - checksum: 729acda12fdbff6cee8cee7b6023a16e85c02406e2427b3cd091948d945940cfb6a6ebe7a8b4df967d483f360d0ec12fb83ab80de3e7bbb2ba2c426d07fd774e - languageName: node - linkType: hard - "read-package-json@npm:^5.0.0": version: 5.0.1 resolution: "read-package-json@npm:5.0.1" @@ -34779,6 +34730,18 @@ __metadata: languageName: node linkType: hard +"read-package-json@npm:^5.0.1": + version: 5.0.2 + resolution: "read-package-json@npm:5.0.2" + dependencies: + glob: ^8.0.1 + json-parse-even-better-errors: ^2.3.1 + normalize-package-data: ^4.0.0 + npm-normalize-package-bin: ^2.0.0 + checksum: 0882ac9cec1bc92fb5515e9727611fb2909351e1e5c840dce3503cbb25b4cd48eb44b61071986e0fc51043208161f07d364a7336206c8609770186818753b51a + languageName: node + linkType: hard + "read-pkg-up@npm:^1.0.1": version: 1.0.1 resolution: "read-pkg-up@npm:1.0.1" @@ -34844,7 +34807,7 @@ __metadata: languageName: node linkType: hard -"read@npm:1, read@npm:~1.0.1": +"read@npm:1, read@npm:^1.0.7": version: 1.0.7 resolution: "read@npm:1.0.7" dependencies: @@ -36193,7 +36156,7 @@ __metadata: languageName: node linkType: hard -"semver@npm:7.3.7, semver@npm:^7.0.0, semver@npm:^7.1.1, semver@npm:^7.1.3, semver@npm:^7.3.7": +"semver@npm:7.3.7, semver@npm:^7.0.0, semver@npm:^7.1.1, semver@npm:^7.3.7": version: 7.3.7 resolution: "semver@npm:7.3.7" dependencies: @@ -36775,17 +36738,6 @@ __metadata: languageName: node linkType: hard -"socks-proxy-agent@npm:^5.0.0": - version: 5.0.1 - resolution: "socks-proxy-agent@npm:5.0.1" - dependencies: - agent-base: ^6.0.2 - debug: 4 - socks: ^2.3.3 - checksum: 1b60c4977b2fef783f0fc4dc619cd2758aafdb43f3cf679f1e3627cb6c6e752811cee5513ebb4157ad26786033d2f85029440f197d321e8293b38cc5aab01e06 - languageName: node - linkType: hard - "socks-proxy-agent@npm:^6.0.0": version: 6.1.0 resolution: "socks-proxy-agent@npm:6.1.0" @@ -36808,16 +36760,6 @@ __metadata: languageName: node linkType: hard -"socks@npm:^2.3.3, socks@npm:^2.6.2": - version: 2.6.2 - resolution: "socks@npm:2.6.2" - dependencies: - ip: ^1.1.5 - smart-buffer: ^4.2.0 - checksum: dd9194293059d737759d5c69273850ad4149f448426249325c4bea0e340d1cf3d266c3b022694b0dcf5d31f759de23657244c481fc1e8322add80b7985c36b5e - languageName: node - linkType: hard - "socks@npm:^2.6.1": version: 2.6.1 resolution: "socks@npm:2.6.1" @@ -36828,6 +36770,16 @@ __metadata: languageName: node linkType: hard +"socks@npm:^2.6.2": + version: 2.6.2 + resolution: "socks@npm:2.6.2" + dependencies: + ip: ^1.1.5 + smart-buffer: ^4.2.0 + checksum: dd9194293059d737759d5c69273850ad4149f448426249325c4bea0e340d1cf3d266c3b022694b0dcf5d31f759de23657244c481fc1e8322add80b7985c36b5e + languageName: node + linkType: hard + "sort-asc@npm:^0.1.0": version: 0.1.0 resolution: "sort-asc@npm:0.1.0" @@ -37181,7 +37133,7 @@ __metadata: languageName: node linkType: hard -"ssri@npm:^9.0.0": +"ssri@npm:^9.0.0, ssri@npm:^9.0.1": version: 9.0.1 resolution: "ssri@npm:9.0.1" dependencies: @@ -39164,6 +39116,16 @@ __metadata: languageName: node linkType: hard +"typescript@npm:^3 || ^4": + version: 4.8.4 + resolution: "typescript@npm:4.8.4" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: 3e4f061658e0c8f36c820802fa809e0fd812b85687a9a2f5430bc3d0368e37d1c9605c3ce9b39df9a05af2ece67b1d844f9f6ea8ff42819f13bcb80f85629af0 + languageName: node + linkType: hard + "typescript@patch:typescript@4.6.4#~builtin": version: 4.6.4 resolution: "typescript@patch:typescript@npm%3A4.6.4#~builtin::version=4.6.4&hash=a1c5e5" @@ -39194,6 +39156,16 @@ __metadata: languageName: node linkType: hard +"typescript@patch:typescript@^3 || ^4#~builtin": + version: 4.8.4 + resolution: "typescript@patch:typescript@npm%3A4.8.4#~builtin::version=4.8.4&hash=a1c5e5" + bin: + tsc: bin/tsc + tsserver: bin/tsserver + checksum: 563a0ef47abae6df27a9a3ab38f75fc681f633ccf1a3502b1108e252e187787893de689220f4544aaf95a371a4eb3141e4a337deb9895de5ac3c1ca76430e5f0 + languageName: node + linkType: hard + "ua-parser-js@npm:^1.0.2": version: 1.0.2 resolution: "ua-parser-js@npm:1.0.2" @@ -40619,7 +40591,7 @@ __metadata: languageName: node linkType: hard -"whatwg-url@npm:^8.0.0, whatwg-url@npm:^8.4.0, whatwg-url@npm:^8.5.0": +"whatwg-url@npm:^8.0.0, whatwg-url@npm:^8.5.0": version: 8.7.0 resolution: "whatwg-url@npm:8.7.0" dependencies: @@ -40783,7 +40755,7 @@ __metadata: languageName: node linkType: hard -"write-file-atomic@npm:^3.0.0, write-file-atomic@npm:^3.0.3": +"write-file-atomic@npm:^3.0.0": version: 3.0.3 resolution: "write-file-atomic@npm:3.0.3" dependencies: From 947838cca08386d4e7554e0a3fcf9584907098e7 Mon Sep 17 00:00:00 2001 From: Dimitris Sotirakis Date: Mon, 3 Oct 2022 14:14:24 +0300 Subject: [PATCH 023/135] CI: Move `grafanacom` command to OSS (#55853) * Move publish-packages command over from * Fix lint * Move grafanacom command to OSS * Add GetLatestMainBuild to gsutil * Fix lint * More lint fixes * Add tests for grafanacom * Fix lint --- pkg/build/cmd/artifacts.go | 118 +++++++++++ pkg/build/cmd/grafanacom.go | 323 +++++++++++++++++++++++++++++ pkg/build/cmd/grafanacom_test.go | 35 ++++ pkg/build/cmd/main.go | 15 ++ pkg/build/config/version_mode.go | 2 + pkg/build/gcloud/storage/gsutil.go | 36 ++++ 6 files changed, 529 insertions(+) create mode 100644 pkg/build/cmd/grafanacom.go create mode 100644 pkg/build/cmd/grafanacom_test.go diff --git a/pkg/build/cmd/artifacts.go b/pkg/build/cmd/artifacts.go index 53807878518..f93d002b107 100644 --- a/pkg/build/cmd/artifacts.go +++ b/pkg/build/cmd/artifacts.go @@ -1,13 +1,24 @@ package main import ( + "fmt" + "strings" + "github.com/grafana/grafana/pkg/build/config" ) const ReleaseFolder = "release" +const MainFolder = "main" const EnterpriseSfx = "-enterprise" const CacheSettings = "Cache-Control:public, max-age=" +type buildArtifact struct { + Os string + Arch string + urlPostfix string + packagePostfix string +} + type PublishConfig struct { config.Config @@ -20,3 +31,110 @@ type PublishConfig struct { TTL string SimulateRelease bool } + +const rhelOS = "rhel" +const debOS = "deb" + +func (t buildArtifact) GetURL(baseArchiveURL string, cfg PublishConfig) string { + rev := "" + prefix := "-" + if t.Os == debOS { + prefix = "_" + } else if t.Os == rhelOS { + rev = "-1" + } + + version := cfg.Version + verComponents := strings.Split(version, "-") + if len(verComponents) > 2 { + panic(fmt.Sprintf("Version string contains more than one hyphen: %q", version)) + } + + switch t.Os { + case debOS, rhelOS: + if len(verComponents) > 1 { + // With Debian and RPM packages, it's customary to prefix any pre-release component with a ~, since this + // is considered of lower lexical value than the empty character, and this way pre-release versions are + // considered to be of a lower version than the final version (which lacks this suffix). + version = fmt.Sprintf("%s~%s", verComponents[0], verComponents[1]) + } + } + + // https://dl.grafana.com/oss/main/grafana_8.5.0~54094pre_armhf.deb: 404 Not Found + url := fmt.Sprintf("%s%s%s%s%s%s", baseArchiveURL, t.packagePostfix, prefix, version, rev, t.urlPostfix) + return url +} + +var ArtifactConfigs = []buildArtifact{ + { + Os: debOS, + Arch: "arm64", + urlPostfix: "_arm64.deb", + }, + { + Os: rhelOS, + Arch: "arm64", + urlPostfix: ".aarch64.rpm", + }, + { + Os: "linux", + Arch: "arm64", + urlPostfix: ".linux-arm64.tar.gz", + }, + { + Os: debOS, + Arch: "armv7", + urlPostfix: "_armhf.deb", + }, + { + Os: debOS, + Arch: "armv6", + packagePostfix: "-rpi", + urlPostfix: "_armhf.deb", + }, + { + Os: rhelOS, + Arch: "armv7", + urlPostfix: ".armhfp.rpm", + }, + { + Os: "linux", + Arch: "armv6", + urlPostfix: ".linux-armv6.tar.gz", + }, + { + Os: "linux", + Arch: "armv7", + urlPostfix: ".linux-armv7.tar.gz", + }, + { + Os: "darwin", + Arch: "amd64", + urlPostfix: ".darwin-amd64.tar.gz", + }, + { + Os: "deb", + Arch: "amd64", + urlPostfix: "_amd64.deb", + }, + { + Os: rhelOS, + Arch: "amd64", + urlPostfix: ".x86_64.rpm", + }, + { + Os: "linux", + Arch: "amd64", + urlPostfix: ".linux-amd64.tar.gz", + }, + { + Os: "win", + Arch: "amd64", + urlPostfix: ".windows-amd64.zip", + }, + { + Os: "win-installer", + Arch: "amd64", + urlPostfix: ".windows-amd64.msi", + }, +} diff --git a/pkg/build/cmd/grafanacom.go b/pkg/build/cmd/grafanacom.go new file mode 100644 index 00000000000..87358419b22 --- /dev/null +++ b/pkg/build/cmd/grafanacom.go @@ -0,0 +1,323 @@ +package main + +import ( + "bytes" + "encoding/json" + "fmt" + "log" + "net/http" + "net/url" + "os" + + "path" + "path/filepath" + "strings" + "time" + + "github.com/grafana/grafana/pkg/build/config" + "github.com/grafana/grafana/pkg/build/gcloud" + "github.com/grafana/grafana/pkg/build/gcloud/storage" + "github.com/urfave/cli/v2" +) + +const grafanaAPI = "https://grafana.com/api" + +// GrafanaCom implements the sub-command "grafana-com". +func GrafanaCom(c *cli.Context) error { + bucketStr := c.String("src-bucket") + edition := config.Edition(c.String("edition")) + + if err := gcloud.ActivateServiceAccount(); err != nil { + return fmt.Errorf("couldn't activate service account, err: %w", err) + } + + metadata, err := GenerateMetadata(c) + if err != nil { + return err + } + + releaseMode, err := metadata.GetReleaseMode() + if err != nil { + return err + } + + version := metadata.GrafanaVersion + if releaseMode.Mode == config.Cronjob { + gcs, err := storage.New() + if err != nil { + return err + } + bucket := gcs.Bucket(bucketStr) + latestMainVersion, err := storage.GetLatestMainBuild(c.Context, bucket, filepath.Join(string(edition), "main")) + if err != nil { + return err + } + version = latestMainVersion + } + + dryRun := c.Bool("dry-run") + simulateRelease := c.Bool("simulate-release") + // Test release mode and dryRun imply simulateRelease + if releaseMode.IsTest || dryRun { + simulateRelease = true + } + + grafanaAPIKey := strings.TrimSpace(os.Getenv("GRAFANA_COM_API_KEY")) + if grafanaAPIKey == "" { + return cli.NewExitError("the environment variable GRAFANA_COM_API_KEY must be set", 1) + } + whatsNewURL, releaseNotesURL, err := getReleaseURLs() + if err != nil { + return cli.NewExitError(err.Error(), 1) + } + + // TODO: Verify config values + cfg := PublishConfig{ + Config: config.Config{ + Version: version, + }, + Edition: edition, + ReleaseMode: releaseMode, + GrafanaAPIKey: grafanaAPIKey, + WhatsNewURL: whatsNewURL, + ReleaseNotesURL: releaseNotesURL, + DryRun: dryRun, + TTL: c.String("ttl"), + SimulateRelease: simulateRelease, + } + + if err := publishPackages(cfg); err != nil { + return cli.NewExitError(err.Error(), 1) + } + + log.Println("Successfully published packages to grafana.com!") + return nil +} + +func getReleaseURLs() (string, string, error) { + type grafanaConf struct { + WhatsNewURL string `json:"whatsNewUrl"` + ReleaseNotesURL string `json:"releaseNotesUrl"` + } + type packageConf struct { + Grafana grafanaConf `json:"grafana"` + } + + pkgB, err := os.ReadFile("package.json") + if err != nil { + return "", "", fmt.Errorf("failed to read package.json: %w", err) + } + + var pconf packageConf + if err := json.Unmarshal(pkgB, &pconf); err != nil { + return "", "", fmt.Errorf("failed to decode package.json: %w", err) + } + if _, err := url.ParseRequestURI(pconf.Grafana.WhatsNewURL); err != nil { + return "", "", fmt.Errorf("grafana.whatsNewUrl is invalid in package.json: %q", pconf.Grafana.WhatsNewURL) + } + if _, err := url.ParseRequestURI(pconf.Grafana.ReleaseNotesURL); err != nil { + return "", "", fmt.Errorf("grafana.releaseNotesUrl is invalid in package.json: %q", + pconf.Grafana.ReleaseNotesURL) + } + + return pconf.Grafana.WhatsNewURL, pconf.Grafana.ReleaseNotesURL, nil +} + +// publishPackages publishes packages to grafana.com. +func publishPackages(cfg PublishConfig) error { + log.Printf("Publishing Grafana packages, version %s, %s edition, %s mode, dryRun: %v, simulating: %v...\n", + cfg.Version, cfg.Edition, cfg.ReleaseMode.Mode, cfg.DryRun, cfg.SimulateRelease) + + versionStr := fmt.Sprintf("v%s", cfg.Version) + log.Printf("Creating release %s at grafana.com...\n", versionStr) + + var sfx string + var pth string + switch cfg.Edition { + case config.EditionOSS: + pth = "oss" + case config.EditionEnterprise: + pth = "enterprise" + sfx = EnterpriseSfx + default: + return fmt.Errorf("unrecognized edition %q", cfg.Edition) + } + + switch cfg.ReleaseMode.Mode { + case config.MainMode, config.CustomMode, config.CronjobMode: + pth = path.Join(pth, MainFolder) + default: + pth = path.Join(pth, ReleaseFolder) + } + + product := fmt.Sprintf("grafana%s", sfx) + pth = path.Join(pth, product) + baseArchiveURL := fmt.Sprintf("https://dl.grafana.com/%s", pth) + + var builds []buildRepr + for _, ba := range ArtifactConfigs { + u := ba.GetURL(baseArchiveURL, cfg) + + sha256, err := getSHA256(u) + if err != nil { + return err + } + + builds = append(builds, buildRepr{ + OS: ba.Os, + URL: u, + SHA256: string(sha256), + Arch: ba.Arch, + }) + } + + r := releaseRepr{ + Version: cfg.Version, + ReleaseDate: time.Now().UTC(), + Builds: builds, + Stable: cfg.ReleaseMode.Mode == config.TagMode, + Beta: cfg.ReleaseMode.IsBeta, + Nightly: cfg.ReleaseMode.Mode == config.CronjobMode, + } + if cfg.ReleaseMode.Mode == config.TagMode || r.Beta { + r.WhatsNewURL = cfg.WhatsNewURL + r.ReleaseNotesURL = cfg.ReleaseNotesURL + } + + if err := postRequest(cfg, "versions", r, fmt.Sprintf("create release %s", r.Version)); err != nil { + return err + } + + if err := postRequest(cfg, fmt.Sprintf("versions/%s", cfg.Version), r, + fmt.Sprintf("update release %s", cfg.Version)); err != nil { + return err + } + + for _, b := range r.Builds { + if err := postRequest(cfg, fmt.Sprintf("versions/%s/packages", cfg.Version), b, + fmt.Sprintf("create build %s %s", b.OS, b.Arch)); err != nil { + return err + } + if err := postRequest(cfg, fmt.Sprintf("versions/%s/packages/%s/%s", cfg.Version, b.Arch, b.OS), b, + fmt.Sprintf("update build %s %s", b.OS, b.Arch)); err != nil { + return err + } + } + + return nil +} + +func getSHA256(u string) ([]byte, error) { + shaURL := fmt.Sprintf("%s.sha256", u) + // nolint:gosec + resp, err := http.Get(shaURL) + if err != nil { + return nil, err + } + defer func() { + if err := resp.Body.Close(); err != nil { + log.Println("failed to close response body, err: %w", err) + } + }() + if resp.StatusCode < 200 || resp.StatusCode >= 300 { + return nil, fmt.Errorf("failed downloading %s: %s", u, resp.Status) + } + + var sha256 []byte + if err := json.NewDecoder(resp.Body).Decode(&sha256); err != nil { + return nil, err + } + return sha256, nil +} + +func postRequest(cfg PublishConfig, pth string, obj interface{}, descr string) error { + var sfx string + switch cfg.Edition { + case config.EditionOSS: + case config.EditionEnterprise: + sfx = EnterpriseSfx + default: + return fmt.Errorf("unrecognized edition %q", cfg.Edition) + } + product := fmt.Sprintf("grafana%s", sfx) + + jsonB, err := json.Marshal(obj) + if err != nil { + return fmt.Errorf("failed to JSON encode release: %w", err) + } + + u, err := constructURL(product, pth) + if err != nil { + return err + } + req, err := http.NewRequest(http.MethodPost, u, bytes.NewReader(jsonB)) + if err != nil { + return err + } + req.Header.Add("Authorization", fmt.Sprintf("Bearer %s", cfg.GrafanaAPIKey)) + req.Header.Add("Content-Type", "application/json") + + log.Printf("Posting to grafana.com API, %s - JSON: %s\n", u, string(jsonB)) + if cfg.SimulateRelease { + log.Println("Only simulating request") + return nil + } + + resp, err := http.DefaultClient.Do(req) + if err != nil { + return fmt.Errorf("failed posting to %s (%s): %s", u, descr, err) + } + defer func() { + if err := resp.Body.Close(); err != nil { + log.Println("failed to close response body, err: %w", err) + } + }() + if resp.StatusCode < 200 || resp.StatusCode >= 300 { + var body []byte + if err := json.NewDecoder(resp.Body).Decode(&body); err != nil { + return err + } + if err != nil { + return err + } + + if strings.Contains(string(body), "already exists") || strings.Contains(string(body), "Nothing to update") { + log.Printf("Already exists: %s\n", descr) + return nil + } + + return fmt.Errorf("failed posting to %s (%s): %s", u, descr, resp.Status) + } + + log.Printf("Successfully posted to grafana.com API, %s\n", u) + + return nil +} + +func constructURL(product string, pth string) (string, error) { + productPath := filepath.Clean(filepath.Join("/", product, pth)) + u, err := url.Parse(grafanaAPI) + if err != nil { + return "", err + } + u.Path = path.Join(u.Path, productPath) + return u.String(), err +} + +type buildRepr struct { + OS string `json:"os"` + URL string `json:"url"` + SHA256 string `json:"sha256"` + Arch string `json:"arch"` +} + +type releaseRepr struct { + Version string `json:"version"` + ReleaseDate time.Time `json:"releaseDate"` + Stable bool `json:"stable"` + Beta bool `json:"beta"` + Nightly bool `json:"nightly"` + WhatsNewURL string `json:"whatsNewUrl"` + ReleaseNotesURL string `json:"releaseNotesUrl"` + Builds []buildRepr `json:"-"` +} diff --git a/pkg/build/cmd/grafanacom_test.go b/pkg/build/cmd/grafanacom_test.go new file mode 100644 index 00000000000..bf90874b1c9 --- /dev/null +++ b/pkg/build/cmd/grafanacom_test.go @@ -0,0 +1,35 @@ +package main + +import ( + "testing" +) + +func Test_constructURL(t *testing.T) { + type args struct { + product string + pth string + } + tests := []struct { + name string + args args + want string + wantErr bool + }{ + {name: "cleans .. sequence", args: args{"..", ".."}, want: "https://grafana.com/api", wantErr: false}, + {name: "doesn't clean anything - non malicious url", args: args{"foo", "bar"}, want: "https://grafana.com/api/foo/bar", wantErr: false}, + {name: "doesn't clean anything - three dots", args: args{"...", "..."}, want: "https://grafana.com/api/.../...", wantErr: false}, + {name: "cleans .", args: args{"..", ".."}, want: "https://grafana.com/api", wantErr: false}, + } + for _, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + got, err := constructURL(tt.args.product, tt.args.pth) + if (err != nil) != tt.wantErr { + t.Errorf("constructURL() error = %v, wantErr %v", err, tt.wantErr) + return + } + if got != tt.want { + t.Errorf("constructURL() got = %v, want %v", got, tt.want) + } + }) + } +} diff --git a/pkg/build/cmd/main.go b/pkg/build/cmd/main.go index 66c5e801d07..71e3c06c70c 100644 --- a/pkg/build/cmd/main.go +++ b/pkg/build/cmd/main.go @@ -216,6 +216,21 @@ func main() { }, }, }, + { + Name: "grafana-com", + Usage: "Publish packages to grafana.com", + Action: GrafanaCom, + Flags: []cli.Flag{ + &editionFlag, + &buildIDFlag, + &dryRunFlag, + &cli.StringFlag{ + Name: "src-bucket", + Value: "grafana-downloads", + Usage: "Google Cloud Storage bucket", + }, + }, + }, }, }, } diff --git a/pkg/build/config/version_mode.go b/pkg/build/config/version_mode.go index 7f1c0c635ce..f7aa6578fe4 100644 --- a/pkg/build/config/version_mode.go +++ b/pkg/build/config/version_mode.go @@ -9,6 +9,7 @@ const ( ReleaseBranchMode VersionMode = "branch" PullRequestMode VersionMode = "pull_request" CustomMode VersionMode = "custom" + CronjobMode VersionMode = "cron" ) const ( @@ -17,6 +18,7 @@ const ( Push = "push" Custom = "custom" Promote = "promote" + Cronjob = "cron" ) const ( diff --git a/pkg/build/gcloud/storage/gsutil.go b/pkg/build/gcloud/storage/gsutil.go index d9865f5fa98..ca3484c5df7 100644 --- a/pkg/build/gcloud/storage/gsutil.go +++ b/pkg/build/gcloud/storage/gsutil.go @@ -10,6 +10,7 @@ import ( "os" "path" "path/filepath" + "regexp" "strings" "sync" "time" @@ -358,6 +359,41 @@ func (client *Client) DownloadDirectory(ctx context.Context, bucket *storage.Buc return nil } +// GetLatestMainBuild gets the latest main build which is successfully uploaded to the gcs bucket. +func GetLatestMainBuild(ctx context.Context, bucket *storage.BucketHandle, path string) (string, error) { + if bucket == nil { + return "", ErrorNilBucket + } + + it := bucket.Objects(ctx, &storage.Query{ + Prefix: path, + }) + + var files []string + for { + attrs, err := it.Next() + if errors.Is(err, iterator.Done) { + break + } + if err != nil { + return "", fmt.Errorf("failed to iterate through bucket, err: %w", err) + } + + files = append(files, attrs.Name) + } + + var latestVersion string + for i := len(files) - 1; i >= 0; i-- { + captureVersion := regexp.MustCompile(`(\d+\.\d+\.\d+-\d+pre)`) + if captureVersion.MatchString(files[i]) { + latestVersion = captureVersion.FindString(files[i]) + break + } + } + + return latestVersion, nil +} + // downloadFile downloads an object to a file. func (client *Client) downloadFile(ctx context.Context, bucket *storage.BucketHandle, objectName, destFileName string) error { if bucket == nil { From 885e8efec67956ad71a4d461bb0af8fda8f0deeb Mon Sep 17 00:00:00 2001 From: Oscar Kilhed Date: Mon, 3 Oct 2022 14:06:20 +0200 Subject: [PATCH 024/135] Docs: update mysql docs to reflect editor changes (#54568) * Docs: update mysql docs to reflect visual query builder/code editor changes * Apply suggestions from code review Co-authored-by: Kim Nylander <104772500+knylander-grafana@users.noreply.github.com> Co-authored-by: brendamuir <100768211+brendamuir@users.noreply.github.com> * Add missing > * Reflect updated image name Co-authored-by: Kim Nylander <104772500+knylander-grafana@users.noreply.github.com> Co-authored-by: brendamuir <100768211+brendamuir@users.noreply.github.com> --- docs/sources/datasources/mysql.md | 55 +++++++++++++------------------ 1 file changed, 23 insertions(+), 32 deletions(-) diff --git a/docs/sources/datasources/mysql.md b/docs/sources/datasources/mysql.md index c0e582632e0..e6270f59514 100644 --- a/docs/sources/datasources/mysql.md +++ b/docs/sources/datasources/mysql.md @@ -73,60 +73,51 @@ Example: You can use wildcards (`*`) in place of database or table if you want to grant access to more databases and tables. -## Query Editor +## Query builder -> Only available in Grafana v5.4+. +{{< figure src="/static/img/docs/v92/mysql_query_builder.png" class="docs-image--no-shadow" >}} -{{< figure src="/static/img/docs/v54/mysql_query_still.png" class="docs-image--no-shadow" animated-gif="/static/img/docs/v54/mysql_query.gif" >}} +The MySQL query builder is available when editing a panel using a MySQL data source. The built query can be run by pressing the `Run query` button in the top right corner of the editor. -You find the MySQL query editor in the metrics tab in a panel's edit mode. You enter edit mode by clicking the -panel title, then edit. +### Format -The query editor has a link named `Generated SQL` that shows up after a query has been executed, while in panel edit mode. Click on it and it will expand and show the raw interpolated SQL string that was executed. +The response from MySQL can be formatted as either a table or as a time series. To use the time series format one of the columns must be named `time`. -### Select table, time column and metric column (FROM) +### Dataset and Table selection -When you enter edit mode for the first time or add a new query Grafana will try to prefill the query builder with the first table that has a timestamp column and a numeric column. - -In the FROM field, Grafana will suggest tables that are in the configured database. To select a table or view in another database that your database user has access to you can manually enter a fully qualified name (database.table) like `otherDb.metrics`. - -The Time column field refers to the name of the column holding your time values. Selecting a value for the Metric column field is optional. If a value is selected, the Metric column field will be used as the series name. - -The metric column suggestions will only contain columns with a text datatype (text, tinytext, mediumtext, longtext, varchar, char). -If you want to use a column with a different datatype as metric column you may enter the column name with a cast: `CAST(numericColumn as CHAR)`. -You may also enter arbitrary SQL expressions in the metric column field that evaluate to a text datatype like -`CONCAT(column1, " ", CAST(numericColumn as CHAR))`. +In the dataset dropdown, choose the MySQL database to query. The dropdown is be populated with the databases that the user has access to. +When the dataset is selected, the table dropdown is populated with the tables that are available. ### Columns and Aggregation functions (SELECT) -In the `SELECT` row you can specify what columns and functions you want to use. -In the column field you may write arbitrary expressions instead of a column name like `column1 * column2 / column3`. +Using the dropdown, select a column to include in the data. You can also specify an optional aggregation function. -If you use aggregate functions you need to group your resultset. The editor will automatically add a `GROUP BY time` if you add an aggregate function. - -You may add further value columns by clicking the plus button and selecting `Column` from the menu. Multiple value columns will be plotted as separate series in the graph panel. +Add further value columns by clicking the plus button and another column dropdown appears. ### Filter data (WHERE) -To add a filter click the plus icon to the right of the `WHERE` condition. You can remove filters by clicking on -the filter and selecting `Remove`. A filter for the current selected timerange is automatically added to new queries. +To add a filter, flip the switch at the top of the editor. +Using the first dropdown, select if all the filters need to match (AND) or if only one of the filters needs to match (OR). + +To add more columns to filter on use the plus button. ### Group By -To group by time or any other columns click the plus icon at the end of the GROUP BY row. The suggestion dropdown will only show text columns of your currently selected table but you may manually enter any column. -You can remove the group by clicking on the item and then selecting `Remove`. +To group the results by column, flip the group switch at the top of the editor. You can then choose which column to group the results by. The group by clause can be removed by pressing the X button. -If you add any grouping, all selected columns need to have an aggregate function applied. The query builder will automatically add aggregate functions to all columns without aggregate functions when you add groupings. +### Preview -#### Gap Filling +By flipping the preview switch at the top of the editor, you can get a preview of the SQL query generated by the query builder. -Grafana can fill in missing values when you group by time. The time function accepts two arguments. The first argument is the time window that you would like to group by, and the second argument is the value you want Grafana to fill missing items with. +## Code editor -### Text Editor Mode (RAW) +{{< figure src="/static/img/docs/v92/sql_code_editor.png" class="docs-image--no-shadow" >}} -You can switch to the raw query editor mode by clicking the hamburger icon and selecting `Switch editor mode` or by clicking `Edit SQL` below the query. +To make advanced queries, switch to the code editor by clicking `code` in the top right corner of the editor. The code editor support autocompletion of tables, columns, SQL keywords, standard sql functions, Grafana template variables and Grafana macros. Columns cannot be completed before a table has been specified. -> If you use the raw query editor, be sure your query at minimum has `ORDER BY time` and a filter on the returned time range. +You can expand the code editor by pressing the `chevron` pointing downwards in the lower right corner of the code editor. + +`CTRL/CMD + Return` works as a keyboard shortcut to run the query. ## Macros From 3342e529b4d60e5fdc56092ae5abb50962d47acf Mon Sep 17 00:00:00 2001 From: Oscar Kilhed Date: Mon, 3 Oct 2022 14:06:51 +0200 Subject: [PATCH 025/135] Docs: Update postgresql and mssql docs (#56011) * Update mssql docs first draft * Update postgresql docs first draft * update image tag * add missing > * Update docs/sources/datasources/mssql.md * Update docs/sources/datasources/mssql.md * Update docs/sources/datasources/postgres.md * Update docs/sources/datasources/postgres.md * Update docs/sources/datasources/postgres.md * Reflect updated image names Co-authored-by: Garrett Guillotte <100453168+gguillotte-grafana@users.noreply.github.com> --- docs/sources/datasources/mssql.md | 51 +++++++++++++++++---- docs/sources/datasources/postgres.md | 68 ++++++++++------------------ 2 files changed, 67 insertions(+), 52 deletions(-) diff --git a/docs/sources/datasources/mssql.md b/docs/sources/datasources/mssql.md index 0350a0841af..b57b2766549 100644 --- a/docs/sources/datasources/mssql.md +++ b/docs/sources/datasources/mssql.md @@ -75,18 +75,51 @@ Make sure the user does not get any unwanted privileges from the public role. If you're using an older version of Microsoft SQL Server like 2008 and 2008R2 you may need to disable encryption to be able to connect. If possible, we recommend you to use the latest service pack available for optimal compatibility. -## Query Editor +## Query builder -{{< figure src="/static/img/docs/v51/mssql_query_editor.png" class="docs-image--no-shadow" >}} +{{< figure src="/static/img/docs/v92/mssql_query_builder.png" class="docs-image--no-shadow" >}} -You will find the MSSQL query editor in the metrics tab in Graph, Singlestat or Table panel's edit mode. You enter edit mode by clicking the -panel title, then edit. The editor allows you to define a SQL query to select data to be visualized. +The MS SQL query builder is available when editing a panel using a MS SQL data source. The built query can be run by pressing the `Run query` button in the top right corner of the editor. -1. Select _Format as_ `Time series` (for use in Graph or Singlestat panel's among others) or `Table` (for use in Table panel among others). -1. This is the actual editor where you write your SQL queries. -1. Show help section for MSSQL below the query editor. -1. Show actual executed SQL query. Will be available first after a successful query has been executed. -1. Add an additional query where an additional query editor will be displayed. +### Format + +The response from MS SQL can be formatted as either a table or as a time series. To use the time series format one of the columns must be named `time`. + +### Dataset and Table selection + +In the dataset dropdown, choose the MS SQL database to query. The dropdown is be populated with the databases that the user has access to. +When the dataset is selected, the table dropdown is populated with the tables that are available. + +### Columns and Aggregation functions (SELECT) + +Using the dropdown, select a column to include in the data. You can also specify an optional aggregation function. + +Add further value columns by clicking the plus button and another column dropdown appears. + +### Filter data (WHERE) + +To add a filter, flip the switch at the top of the editor. +Using the first dropdown, select if all the filters need to match (AND) or if only one of the filters needs to match (OR). + +To add more columns to filter on use the plus button. + +### Group By + +To group the results by column, flip the group switch at the top of the editor. You can then choose which column to group the results by. The group by clause can be removed by pressing the X button. + +### Preview + +By flipping the preview switch at the top of the editor, you can get a preview of the SQL query generated by the query builder. + +## Code editor + +{{< figure src="/static/img/docs/v92/sql_code_editor.png" class="docs-image--no-shadow" >}} + +To make advanced queries, switch to the code editor by clicking `code` in the top right corner of the editor. The code editor support autocompletion of tables, columns, SQL keywords, standard sql functions, Grafana template variables and Grafana macros. Columns cannot be completed before a table has been specified. + +You can expand the code editor by pressing the `chevron` pointing downwards in the lower right corner of the code editor. + +`CTRL/CMD + Return` works as a keyboard shortcut to run the query.
diff --git a/docs/sources/datasources/postgres.md b/docs/sources/datasources/postgres.md index c877faa3742..406e44ab02e 100644 --- a/docs/sources/datasources/postgres.md +++ b/docs/sources/datasources/postgres.md @@ -71,69 +71,51 @@ Example: Make sure the user does not get any unwanted privileges from the public role. -## Query editor +## Query builder -{{< figure src="/static/img/docs/v53/postgres_query_still.png" class="docs-image--no-shadow" animated-gif="/static/img/docs/v53/postgres_query.gif" >}} +{{< figure src="/static/img/docs/v92/postgresql_query_builder.png" class="docs-image--no-shadow" >}} -You find the PostgreSQL query editor in the metrics tab in Graph or Singlestat panel's edit mode. You enter edit mode by clicking the -panel title, then edit. +The PostgreSQL query builder is available when editing a panel using a PostgreSQL data source. The built query can be run by pressing the `Run query` button in the top right corner of the editor. -The query editor has a link named `Generated SQL` that shows up after a query has been executed, while in panel edit mode. Click on it and it will expand and show the raw interpolated SQL string that was executed. +### Format -### Select table, time column and metric column (FROM) +The response from PostgreSQL can be formatted as either a table or as a time series. To use the time series format one of the columns must be named `time`. -When you enter edit mode for the first time or add a new query Grafana will try to prefill the query builder with the first table that has a timestamp column and a numeric column. +### Dataset and Table selection -In the FROM field, Grafana will suggest tables that are in the `search_path` of the database user. To select a table or view not in your `search_path` -you can manually enter a fully qualified name (schema.table) like `public.metrics`. +In the dataset dropdown, choose the PostgreSQL database to query. The dropdown is be populated with the databases that the user has access to. +When the dataset is selected, the table dropdown is populated with the tables that are available. -The Time column field refers to the name of the column holding your time values. Selecting a value for the Metric column field is optional. If a value is selected, the Metric column field will be used as the series name. +### Columns and Aggregation functions (SELECT) -The metric column suggestions will only contain columns with a text datatype (char,varchar,text). -If you want to use a column with a different datatype as metric column you may enter the column name with a cast: `ip::text`. -You may also enter arbitrary SQL expressions in the metric column field that evaluate to a text datatype like -`hostname || ' ' || container_name`. +Using the dropdown, select a column to include in the data. You can also specify an optional aggregation function. -### Columns, window, and aggregation functions (SELECT) - -In the `SELECT` row you can specify what columns and functions you want to use. -In the column field you may write arbitrary expressions instead of a column name like `column1 * column2 / column3`. - -The available functions in the query editor depend on the PostgreSQL version you selected when configuring the data source. -If you use aggregate functions you need to group your resultset. The editor will automatically add a `GROUP BY time` if you add an aggregate function. - -The editor tries to simplify and unify this part of the query. For example:
-![](/static/img/docs/v53/postgres_select_editor.png)
- -The above will generate the following PostgreSQL `SELECT` clause: - -```sql -avg(tx_bytes) OVER (ORDER BY "time" ROWS 5 PRECEDING) AS "tx_bytes" -``` - -You may add further value columns by clicking the plus button and selecting `Column` from the menu. Multiple value columns will be plotted as separate series in the graph panel. +Add further value columns by clicking the plus button and another column dropdown appears. ### Filter data (WHERE) -To add a filter click the plus icon to the right of the `WHERE` condition. You can remove filters by clicking on -the filter and selecting `Remove`. A filter for the current selected timerange is automatically added to new queries. +To add a filter, flip the switch at the top of the editor. +Using the first dropdown, select if all the filters need to match (AND) or if only one of the filters needs to match (OR). -### Group by +To add more columns to filter on use the plus button. -To group by time or any other columns click the plus icon at the end of the GROUP BY row. The suggestion dropdown will only show text columns of your currently selected table but you may manually enter any column. -You can remove the group by clicking on the item and then selecting `Remove`. +### Group By -If you add any grouping, all selected columns need to have an aggregate function applied. The query builder will automatically add aggregate functions to all columns without aggregate functions when you add groupings. +To group the results by column, flip the group switch at the top of the editor. You can then choose which column to group the results by. The group by clause can be removed by pressing the X button. -#### Gap filling +### Preview -Grafana can fill in missing values when you group by time. The time function accepts two arguments. The first argument is the time window that you would like to group by, and the second argument is the value you want Grafana to fill missing items with. +By flipping the preview switch at the top of the editor, you can get a preview of the SQL query generated by the query builder. -### Text editor mode (RAW) +## Code editor -You can switch to the raw query editor mode by clicking the hamburger icon and selecting `Switch editor mode` or by clicking `Edit SQL` below the query. +{{< figure src="/static/img/docs/v92/sql_code_editor.png" class="docs-image--no-shadow" >}} -> If you use the raw query editor, be sure your query at minimum has `ORDER BY time` and a filter on the returned time range. +To make advanced queries, switch to the code editor by clicking `code` in the top right corner of the editor. The code editor support autocompletion of tables, columns, SQL keywords, standard sql functions, Grafana template variables and Grafana macros. Columns cannot be completed before a table has been specified. + +You can expand the code editor by pressing the `chevron` pointing downwards in the lower right corner of the code editor. + +`CTRL/CMD + Return` works as a keyboard shortcut to run the query. ## Macros From d32c67b52a4bf6285762861fa08c703d48733021 Mon Sep 17 00:00:00 2001 From: Dimitris Sotirakis Date: Mon, 3 Oct 2022 15:29:32 +0300 Subject: [PATCH 026/135] CI: Add `packages-bucket` flag to `publish packages` command (#56170) * Add public bucket string * Fix lint --- pkg/build/cmd/main.go | 3 ++- pkg/build/config/versions.go | 2 ++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/pkg/build/cmd/main.go b/pkg/build/cmd/main.go index 71e3c06c70c..a045a933076 100644 --- a/pkg/build/cmd/main.go +++ b/pkg/build/cmd/main.go @@ -5,6 +5,7 @@ import ( "os" "strings" + "github.com/grafana/grafana/pkg/build/config" "github.com/grafana/grafana/pkg/build/docker" "github.com/grafana/grafana/pkg/build/packaging" "github.com/urfave/cli/v2" @@ -187,7 +188,7 @@ func main() { &gcpKeyFlag, &cli.StringFlag{ Name: "packages-bucket", - Value: "grafana-downloads", + Value: config.PublicBucket, Usage: "Google Cloud Storage Debian database bucket", }, &cli.StringFlag{ diff --git a/pkg/build/config/versions.go b/pkg/build/config/versions.go index 6dc6fcd9ddf..baf8e6b8f46 100644 --- a/pkg/build/config/versions.go +++ b/pkg/build/config/versions.go @@ -1,5 +1,7 @@ package config +const PublicBucket = "grafana-downloads" + var Versions = VersionMap{ PullRequestMode: { Variants: []Variant{ From c5b68ed497366e4c65905b6799f5086e4c910f7b Mon Sep 17 00:00:00 2001 From: Christopher Moyer <35463610+chri2547@users.noreply.github.com> Date: Mon, 3 Oct 2022 08:20:19 -0500 Subject: [PATCH 027/135] adds note about org_role being case sensitive (#56043) --- .../configure-security/configure-authentication/ldap.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/sources/setup-grafana/configure-security/configure-authentication/ldap.md b/docs/sources/setup-grafana/configure-security/configure-authentication/ldap.md index 181ccac8f92..f097746d744 100644 --- a/docs/sources/setup-grafana/configure-security/configure-authentication/ldap.md +++ b/docs/sources/setup-grafana/configure-security/configure-authentication/ldap.md @@ -190,7 +190,7 @@ org_role = "Viewer" | Setting | Required | Description | Default | | --------------- | -------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | -------------------- | | `group_dn` | Yes | LDAP distinguished name (DN) of LDAP group. If you want to match all (or no LDAP groups) then you can use wildcard (`"*"`) | -| `org_role` | Yes | Assign users of `group_dn` the organization role `"Admin"`, `"Editor"` or `"Viewer"` | +| `org_role` | Yes | Assign users of `group_dn` the organization role `Admin`, `Editor`, or `Viewer`. The organization role name is case sensitive. | | `org_id` | No | The Grafana organization database id. Setting this allows for multiple group_dn's to be assigned to the same `org_role` provided the `org_id` differs | `1` (default org id) | | `grafana_admin` | No | When `true` makes user of `group_dn` Grafana server admin. A Grafana server admin has admin access over all organizations and users. Available in Grafana v5.3 and above | `false` | From 1e16dd5b7c3f954f22808131218d3cd3b3fcb97b Mon Sep 17 00:00:00 2001 From: Yuriy Tseretyan Date: Mon, 3 Oct 2022 09:45:09 -0400 Subject: [PATCH 028/135] Docs: Update Grafana Alerting migration article to mention paused alert rules (#55590) Co-authored-by: brendamuir <100768211+brendamuir@users.noreply.github.com> --- .../alerting/migrating-alerts/migrating-legacy-alerts.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/sources/alerting/migrating-alerts/migrating-legacy-alerts.md b/docs/sources/alerting/migrating-alerts/migrating-legacy-alerts.md index 19df966b282..e7b6fbbd54a 100644 --- a/docs/sources/alerting/migrating-alerts/migrating-legacy-alerts.md +++ b/docs/sources/alerting/migrating-alerts/migrating-legacy-alerts.md @@ -31,6 +31,8 @@ longer supported. We refer to these as [Differences]({{< relref "#differences" > 5. Unlike legacy dashboard alerts where images in notifications are enabled per contact point, images in notifications for Grafana Alerting must be enabled in the Grafana configuration, either in the configuration file or environment variables, and are enabled for either all or no contact points. Please refer to the [documentation for images in notifications]({{< relref "../images-in-notifications" >}}). +6. Grafana Alerting does not support pausing the evaluation of alert rules. After migration, all paused alert rules will become active, which may cause unexpected notifications to be sent. + ## Limitations 1. Since `Hipchat` and `Sensu` notification channels are no longer supported, legacy alerts associated with these channels are not automatically migrated to Grafana Alerting. Assign the legacy alerts to a supported notification channel so that you continue to receive notifications for those alerts. From 09f8e026a19629ddc69c9cba83393202e3bf9671 Mon Sep 17 00:00:00 2001 From: Santiago Date: Mon, 3 Oct 2022 10:58:41 -0300 Subject: [PATCH 029/135] Alerting: Expose info about notification delivery errors in a new /receivers endpoint (#55429) * (WIP) switch to fork AM, first implementation of the API, generate spec * get receivers avoiding race conditions * use latest version of our forked AM, tests * make linter happy, delete TODO comment * update number of expected paths to += 2 * delete unused endpoint code, code review comments, tests * Update pkg/services/ngalert/notifier/alertmanager.go Co-authored-by: Matthew Jacobson * remove call to fmt.Println * clear naming for fields * shorter variable names in GetReceivers Co-authored-by: Matthew Jacobson --- go.mod | 14 +- go.sum | 66 +---- pkg/services/ngalert/api/api.go | 3 +- pkg/services/ngalert/api/api_alertmanager.go | 10 + pkg/services/ngalert/api/authorization.go | 2 + .../ngalert/api/authorization_test.go | 2 +- .../ngalert/api/forking_alertmanager.go | 4 + .../api/generated_base_api_alertmanager.go | 14 + pkg/services/ngalert/api/tooling/api.json | 190 ++++++-------- .../api/tooling/definitions/alertmanager.go | 13 + pkg/services/ngalert/api/tooling/post.json | 244 +++++++++-------- pkg/services/ngalert/api/tooling/spec.json | 245 +++++++++--------- pkg/services/ngalert/notifier/alertmanager.go | 49 ++-- .../ngalert/notifier/alertmanager_test.go | 2 +- .../ngalert/notifier/multiorg_alertmanager.go | 2 +- pkg/services/ngalert/notifier/receivers.go | 40 +++ .../alerting/api_notification_channel_test.go | 221 +++++++++++++++- 17 files changed, 667 insertions(+), 454 deletions(-) diff --git a/go.mod b/go.mod index 72f75eee7b7..1c11e3a65c9 100644 --- a/go.mod +++ b/go.mod @@ -26,7 +26,7 @@ require ( github.com/VividCortex/mysqlerr v0.0.0-20170204212430-6c6b55f8796f github.com/aws/aws-sdk-go v1.44.9 github.com/beevik/etree v1.1.0 - github.com/benbjohnson/clock v1.1.0 + github.com/benbjohnson/clock v1.3.0 github.com/bradfitz/gomemcache v0.0.0-20190913173617-a41fca850d0b github.com/centrifugal/centrifuge v0.25.0 github.com/cortexproject/cortex v1.10.1-0.20211014125347-85c378182d0d @@ -137,8 +137,6 @@ require ( github.com/Azure/go-autorest/tracing v0.6.0 // indirect github.com/FZambia/eagle v0.0.2 // indirect github.com/FZambia/sentinel v1.1.0 // indirect - github.com/PuerkitoBio/purell v1.1.1 // indirect - github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 // indirect github.com/alecthomas/units v0.0.0-20211218093645-b94a6e3cc137 // indirect github.com/andybalholm/brotli v1.0.3 github.com/apache/arrow/go/arrow v0.0.0-20211112161151-bc219186db40 // indirect @@ -162,12 +160,12 @@ require ( github.com/go-openapi/analysis v0.21.2 // indirect github.com/go-openapi/errors v0.20.2 // indirect github.com/go-openapi/jsonpointer v0.19.5 // indirect - github.com/go-openapi/jsonreference v0.19.6 // indirect + github.com/go-openapi/jsonreference v0.20.0 // indirect github.com/go-openapi/loads v0.21.1 github.com/go-openapi/runtime v0.23.1 // indirect - github.com/go-openapi/spec v0.20.4 // indirect + github.com/go-openapi/spec v0.20.6 // indirect github.com/go-openapi/swag v0.21.1 // indirect - github.com/go-openapi/validate v0.21.0 // indirect + github.com/go-openapi/validate v0.22.0 // indirect github.com/gogo/googleapis v1.4.1 // indirect github.com/gogo/status v1.1.0 // indirect github.com/golang-jwt/jwt/v4 v4.4.2 // indirect @@ -370,3 +368,7 @@ replace github.com/microcosm-cc/bluemonday => github.com/microcosm-cc/bluemonday // happen, for example, during a read when the sqlite db is under heavy write load. // This patch cherry picks compatible fixes from upstream xorm PR#1998 and can be reverted on upgrade to xorm v1.2.0+. replace xorm.io/xorm => github.com/grafana/xorm v0.8.3-0.20220614223926-2fcda7565af6 + +// Use our fork of the upstream alertmanagers. +// This is required in order to get notification delivery errors from the receivers API. +replace github.com/prometheus/alertmanager => github.com/grafana/prometheus-alertmanager v0.24.0-rc.0.0.20220930143838-d75bdc5543c0 diff --git a/go.sum b/go.sum index 578cd6272d7..d2b82aeaef6 100644 --- a/go.sum +++ b/go.sum @@ -259,10 +259,8 @@ github.com/ProtonMail/go-crypto v0.0.0-20210428141323-04723f9f07d7 h1:YoJbenK9C6 github.com/ProtonMail/go-crypto v0.0.0-20210428141323-04723f9f07d7/go.mod h1:z4/9nQmJSSwwds7ejkxaJwO37dru3geImFUdJlaLzQo= github.com/PuerkitoBio/purell v1.0.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= github.com/PuerkitoBio/purell v1.1.0/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= -github.com/PuerkitoBio/purell v1.1.1 h1:WEQqlqaGbrPkxLJWfBwQmfEAE1Z7ONdDLqrN38tNFfI= github.com/PuerkitoBio/purell v1.1.1/go.mod h1:c11w/QuzBsJSee3cPx9rAFu61PvFxuPbtSwDGJws/X0= github.com/PuerkitoBio/urlesc v0.0.0-20160726150825-5bd2802263f2/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= -github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578 h1:d+Bc7a5rLufV/sSk/8dngufqelfh6jnri85riMAaF/M= github.com/PuerkitoBio/urlesc v0.0.0-20170810143723-de5bf2ad4578/go.mod h1:uGdkoq3SwY9Y+13GIhn11/XLaGBb4BfwItxLd5jeuXE= github.com/RoaringBitmap/gocroaring v0.4.0/go.mod h1:NieMwz7ZqwU2DD73/vvYwv7r4eWBKuPVSXZIpsaMwCI= github.com/RoaringBitmap/real-roaring-datasets v0.0.0-20190726190000-eb7c87156f76/go.mod h1:oM0MHmQ3nDsq609SS36p+oYbRi16+oVvU2Bw4Ipv0SE= @@ -357,7 +355,6 @@ github.com/aws/aws-sdk-go v1.38.3/go.mod h1:hcU610XS61/+aQV88ixoOzUoG7v3b31pl2zK github.com/aws/aws-sdk-go v1.38.35/go.mod h1:hcU610XS61/+aQV88ixoOzUoG7v3b31pl2zKMmprdro= github.com/aws/aws-sdk-go v1.38.60/go.mod h1:hcU610XS61/+aQV88ixoOzUoG7v3b31pl2zKMmprdro= github.com/aws/aws-sdk-go v1.38.68/go.mod h1:hcU610XS61/+aQV88ixoOzUoG7v3b31pl2zKMmprdro= -github.com/aws/aws-sdk-go v1.40.11/go.mod h1:585smgzpB/KqRA+K3y/NL/oYRqQvpNJYvLm+LY1U59Q= github.com/aws/aws-sdk-go v1.40.37/go.mod h1:585smgzpB/KqRA+K3y/NL/oYRqQvpNJYvLm+LY1U59Q= github.com/aws/aws-sdk-go v1.43.11/go.mod h1:y4AeaBuwd2Lk+GepC1E9v0qOiTws0MIWAX4oIKwKHZo= github.com/aws/aws-sdk-go v1.43.31/go.mod h1:y4AeaBuwd2Lk+GepC1E9v0qOiTws0MIWAX4oIKwKHZo= @@ -412,8 +409,9 @@ github.com/baiyubin/aliyun-sts-go-sdk v0.0.0-20180326062324-cfa1a18b161f/go.mod github.com/beevik/etree v1.1.0 h1:T0xke/WvNtMoCqgzPhkX2r4rjY3GDZFi+FjpRZY2Jbs= github.com/beevik/etree v1.1.0/go.mod h1:r8Aw8JqVegEf0w2fDnATrX9VpkMcyFeM0FhwO62wh+A= github.com/beevik/ntp v0.2.0/go.mod h1:hIHWr+l3+/clUnF44zdK+CWW7fO8dR5cIylAQ76NRpg= -github.com/benbjohnson/clock v1.1.0 h1:Q92kusRqC1XV2MjkWETPvjJVqKetz1OzxZB7mHJLju8= github.com/benbjohnson/clock v1.1.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= +github.com/benbjohnson/clock v1.3.0 h1:ip6w0uFQkncKQ979AypyG0ER7mqUSBdKLOgAle/AT8A= +github.com/benbjohnson/clock v1.3.0/go.mod h1:J11/hYXuz8f4ySSvYwY0FKfm+ezbsZBKZxNJlLklBHA= github.com/benbjohnson/immutable v0.2.1/go.mod h1:uc6OHo6PN2++n98KHLxW8ef4W42ylHiQSENghE1ezxI= github.com/benbjohnson/tmpl v1.0.0/go.mod h1:igT620JFIi44B6awvU9IsDhR77IXWtFigTLil/RPdps= github.com/beorn7/perks v0.0.0-20160804104726-4c0e84591b9a/go.mod h1:Dwedo/Wpr24TaqPxmxbtue+5NUziq4I4S80YR8gNf3Q= @@ -475,11 +473,8 @@ github.com/caio/go-tdigest v3.1.0+incompatible h1:uoVMJ3Q5lXmVLCCqaMGHLBWnbGoN6L github.com/caio/go-tdigest v3.1.0+incompatible/go.mod h1:sHQM/ubZStBUmF1WbB8FAm8q9GjDajLC5T7ydxE3JHI= github.com/casbin/casbin/v2 v2.1.2/go.mod h1:YcPU1XXisHhLzuxH9coDNf2FbKpjGlbCg3n9yuLkIJQ= github.com/casbin/casbin/v2 v2.31.6/go.mod h1:vByNa/Fchek0KZUgG5wEsl7iFsiviAYKRtgrQfcJqHg= -github.com/cenkalti/backoff v0.0.0-20181003080854-62661b46c409/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= github.com/cenkalti/backoff v1.0.0/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= github.com/cenkalti/backoff v2.2.1+incompatible/go.mod h1:90ReRw6GdpyfrHakVjL/QHaoyV4aDUVVkXQJJJ3NXXM= -github.com/cenkalti/backoff/v4 v4.0.2/go.mod h1:eEew/i+1Q6OrCDZh3WiXYv3+nJwBASZ8Bog/87DQnVg= -github.com/cenkalti/backoff/v4 v4.1.0/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= github.com/cenkalti/backoff/v4 v4.1.1/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= github.com/cenkalti/backoff/v4 v4.1.2 h1:6Yo7N8UP2K6LWZnW94DLVSSrbobcWdVzAYOisuDPIFo= github.com/cenkalti/backoff/v4 v4.1.2/go.mod h1:scbssz8iZGpm3xbr14ovlUdkxfGXNInqkPWOWmG2CLw= @@ -490,7 +485,6 @@ github.com/centrifugal/centrifuge v0.25.0/go.mod h1:bFcSFalnROq/wcFeRiTG+wIbHsxE github.com/centrifugal/protocol v0.8.10 h1:eezzBIU/4pWyl7a+NUnANYojJBASqbkPZcQh9b8YQRI= github.com/centrifugal/protocol v0.8.10/go.mod h1:dlHBjKakr0r+f1pkfwSMfZ+cnpvidN7pQe1ZrsKfhtE= github.com/certifi/gocertifi v0.0.0-20191021191039-0944d244cd40/go.mod h1:sGbDF6GwGcLpkNXPUTkMRoywsNa/ol15pxFe6ERfguA= -github.com/cespare/xxhash v0.0.0-20181017004759-096ff4a8a059/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/cespare/xxhash v1.1.0/go.mod h1:XrSqR1VqqWfGrhpAt58auRo0WTKS1nRRg3ghfAqPWnc= github.com/cespare/xxhash/v2 v2.1.0/go.mod h1:dgIUBU3pDso/gPgZ1osOZ0iQf77oPR28Tjxl5dIMyVM= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= @@ -937,7 +931,6 @@ github.com/go-logr/stdr v1.2.2/go.mod h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre github.com/go-ole/go-ole v1.2.5/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.17.2/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.4/go.mod h1:3P1osvZa9jKjb8ed2TPng3f0i/UY9snX6gxi44djMjk= @@ -950,7 +943,6 @@ github.com/go-openapi/analysis v0.20.1/go.mod h1:BMchjvaHDykmRMsK40iPtvyOfFdMMxl github.com/go-openapi/analysis v0.21.2 h1:hXFrOYFHUAMQdu6zwAiKKJHJQ8kqZs1ux/ru1P1wLJU= github.com/go-openapi/analysis v0.21.2/go.mod h1:HZwRk4RRisyG8vx2Oe6aqeSQcoxRp47Xkp3+K6q+LdY= github.com/go-openapi/errors v0.17.0/go.mod h1:LcZQpmvG4wyF5j4IhA73wkLFQg+QJXOQHVjmcZxhka0= -github.com/go-openapi/errors v0.17.2/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/errors v0.19.3/go.mod h1:qX0BLWsyaKfvhluLejVpVNwNRdXZhEbTA4kxxpKBC94= @@ -964,7 +956,6 @@ github.com/go-openapi/errors v0.20.2 h1:dxy7PGTqEh94zj2E3h1cUmQQWiM1+aeCROfAr02E github.com/go-openapi/errors v0.20.2/go.mod h1:cM//ZKUKyO06HSwqAelJ5NsEMMcpa6VpXe8DOa1Mi1M= github.com/go-openapi/jsonpointer v0.0.0-20160704185906-46af16f9f7b1/go.mod h1:+35s3my2LFTysnkMfxsJBAMHj/DoqoB9knIWoYG/Vk0= github.com/go-openapi/jsonpointer v0.17.0/go.mod h1:cOnomiV+CVVwFLk0A/MExoFMjwdsUdVpsRhURCKh+3M= -github.com/go-openapi/jsonpointer v0.17.2/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= @@ -972,16 +963,15 @@ github.com/go-openapi/jsonpointer v0.19.5 h1:gZr+CIYByUqjcgeLXnQu2gHYQC9o73G2XUe github.com/go-openapi/jsonpointer v0.19.5/go.mod h1:Pl9vOtqEWErmShwVjC8pYs9cog34VGT37dQOVbmoatg= github.com/go-openapi/jsonreference v0.0.0-20160704190145-13c6e3589ad9/go.mod h1:W3Z9FmVs9qj+KR4zFKmDPGiLdk1D9Rlm7cyMvf57TTg= github.com/go-openapi/jsonreference v0.17.0/go.mod h1:g4xxGn04lDIRh0GJb5QlpE3HfopLOL6uZrK/VgnsK9I= -github.com/go-openapi/jsonreference v0.17.2/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.19.4/go.mod h1:RdybgQwPxbL4UEjuAruzK1x3nE69AqPYEJeo/TWfEeg= github.com/go-openapi/jsonreference v0.19.5/go.mod h1:RdybgQwPxbL4UEjuAruzK1x3nE69AqPYEJeo/TWfEeg= -github.com/go-openapi/jsonreference v0.19.6 h1:UBIxjkht+AWIgYzCDSv2GN+E/togfwXUJFRTWhl2Jjs= github.com/go-openapi/jsonreference v0.19.6/go.mod h1:diGHMEHg2IqXZGKxqyvWdfWU/aim5Dprw5bqpKkTvns= +github.com/go-openapi/jsonreference v0.20.0 h1:MYlu0sBgChmCfJxxUKZ8g1cPWFOB37YSZqewK7OKeyA= +github.com/go-openapi/jsonreference v0.20.0/go.mod h1:Ag74Ico3lPc+zR+qjn4XBUmXymS4zJbYVCZmcgkasdo= github.com/go-openapi/loads v0.17.0/go.mod h1:72tmFy5wsWx89uEVddd0RjRWPZm92WRLhf7AC+0+OOU= -github.com/go-openapi/loads v0.17.2/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= @@ -995,21 +985,17 @@ github.com/go-openapi/loads v0.20.2/go.mod h1:hTVUotJ+UonAMMZsvakEgmWKgtulweO9vY github.com/go-openapi/loads v0.21.1 h1:Wb3nVZpdEzDTcly8S4HMkey6fjARRzb7iEaySimlDW0= github.com/go-openapi/loads v0.21.1/go.mod h1:/DtAMXXneXFjbQMGEtbamCZb+4x7eGwkvZCvBmwUG+g= github.com/go-openapi/runtime v0.0.0-20180920151709-4f900dc2ade9/go.mod h1:6v9a6LTXWQCdL8k1AO3cvqx5OtZY/Y9wKTgaoP6YRfA= -github.com/go-openapi/runtime v0.18.0/go.mod h1:uI6pHuxWYTy94zZxgcwJkUWa9wbIlhteGfloI10GD4U= github.com/go-openapi/runtime v0.19.0/go.mod h1:OwNfisksmmaZse4+gpV3Ne9AyMOlP1lt4sK4FXt0O64= github.com/go-openapi/runtime v0.19.3/go.mod h1:X277bwSUBxVlCYR3r7xgZZGKVvBd/29gLDlFGtJ8NL4= github.com/go-openapi/runtime v0.19.4/go.mod h1:X277bwSUBxVlCYR3r7xgZZGKVvBd/29gLDlFGtJ8NL4= github.com/go-openapi/runtime v0.19.15/go.mod h1:dhGWCTKRXlAfGnQG0ONViOZpjfg0m2gUt9nTQPQZuoo= github.com/go-openapi/runtime v0.19.16/go.mod h1:5P9104EJgYcizotuXhEuUrzVc+j1RiSjahULvYmlv98= github.com/go-openapi/runtime v0.19.24/go.mod h1:Lm9YGCeecBnUUkFTxPC4s1+lwrkJ0pthx8YvyjCfkgk= -github.com/go-openapi/runtime v0.19.26/go.mod h1:BvrQtn6iVb2QmiVXRsFAm6ZCAZBpbVKFfN6QWCp582M= github.com/go-openapi/runtime v0.19.28/go.mod h1:BvrQtn6iVb2QmiVXRsFAm6ZCAZBpbVKFfN6QWCp582M= -github.com/go-openapi/runtime v0.19.29/go.mod h1:BvrQtn6iVb2QmiVXRsFAm6ZCAZBpbVKFfN6QWCp582M= github.com/go-openapi/runtime v0.23.1 h1:/Drg9R96eMmgKJHVWZADz78XbE39/6QiIiB45mc+epo= github.com/go-openapi/runtime v0.23.1/go.mod h1:AKurw9fNre+h3ELZfk6ILsfvPN+bvvlaU/M9q/r9hpk= github.com/go-openapi/spec v0.0.0-20160808142527-6aced65f8501/go.mod h1:J8+jY1nAiCcj+friV/PDoE1/3eeccG9LYBs0tYvLOWc= github.com/go-openapi/spec v0.17.0/go.mod h1:XkF/MOi14NmjsfZ8VtAKf8pIlbZzyoTvZsdfssdxcBI= -github.com/go-openapi/spec v0.17.2/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= @@ -1021,10 +1007,10 @@ github.com/go-openapi/spec v0.19.15/go.mod h1:+81FIL1JwC5P3/Iuuozq3pPE9dXdIEGxFu github.com/go-openapi/spec v0.20.0/go.mod h1:+81FIL1JwC5P3/Iuuozq3pPE9dXdIEGxFutcFKaVbmU= github.com/go-openapi/spec v0.20.1/go.mod h1:93x7oh+d+FQsmsieroS4cmR3u0p/ywH649a3qwC9OsQ= github.com/go-openapi/spec v0.20.3/go.mod h1:gG4F8wdEDN+YPBMVnzE85Rbhf+Th2DTvA9nFPQ5AYEg= -github.com/go-openapi/spec v0.20.4 h1:O8hJrt0UMnhHcluhIdUgCLRWyM2x7QkBXRvOs7m+O1M= github.com/go-openapi/spec v0.20.4/go.mod h1:faYFR1CvsJZ0mNsmsphTMSoRrNV3TEDoAM7FOEWeq8I= +github.com/go-openapi/spec v0.20.6 h1:ich1RQ3WDbfoeTqTAb+5EIxNmpKVJZWBNah9RAT0jIQ= +github.com/go-openapi/spec v0.20.6/go.mod h1:2OpW+JddWPrpXSCIX8eOx7lZ5iyuWj3RYR6VaaBKcWA= github.com/go-openapi/strfmt v0.17.0/go.mod h1:P82hnJI0CXkErkXi8IKjPbNBM6lV6+5pLP5l494TcyU= -github.com/go-openapi/strfmt v0.17.2/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.2/go.mod h1:0yX7dbo8mKIvc3XSKp7MNfxw4JytCfCD6+bY1AVL9LU= @@ -1041,7 +1027,6 @@ github.com/go-openapi/strfmt v0.21.2 h1:5NDNgadiX1Vhemth/TH4gCGopWSTdDjxl60H3B7f github.com/go-openapi/strfmt v0.21.2/go.mod h1:I/XVKeLc5+MM5oPNN7P6urMOpuLXEcNrCX/rPGuWb0k= github.com/go-openapi/swag v0.0.0-20160704191624-1d0bd113de87/go.mod h1:DXUve3Dpr1UfpPtxFw+EFuQ41HhCWZfha5jSVRG7C7I= github.com/go-openapi/swag v0.17.0/go.mod h1:AByQ+nYG6gQg71GINrmuDXCPWdL640yX49/kXLo40Tg= -github.com/go-openapi/swag v0.17.2/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.4/go.mod h1:POnQmlKehdgb5mhVOsnJFsivZCEZ/vjK9gh66Z9tfKk= @@ -1055,7 +1040,6 @@ github.com/go-openapi/swag v0.19.14/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/ github.com/go-openapi/swag v0.19.15/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/eQntq43wQ= github.com/go-openapi/swag v0.21.1 h1:wm0rhTb5z7qpJRHBdPOMuY4QjVUMbF6/kwoYeRAOrKU= github.com/go-openapi/swag v0.21.1/go.mod h1:QYRuS/SOXUCsnplDa677K7+DxSOj6IPNl/eQntq43wQ= -github.com/go-openapi/validate v0.17.2/go.mod h1:Uh4HdOzKt19xGIGm1qHf/ofbX1YQ4Y+MYsct2VUrAJ4= 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.3/go.mod h1:90Vh6jjkTn+OT1Eefm0ZixWNFjhtOH7vS9k0lo6zwJo= @@ -1066,8 +1050,9 @@ github.com/go-openapi/validate v0.19.14/go.mod h1:PdGrHe0rp6MG3A1SrAY/rIHATqzJEE github.com/go-openapi/validate v0.19.15/go.mod h1:tbn/fdOwYHgrhPBzidZfJC2MIVvs9GA7monOmWBbeCI= github.com/go-openapi/validate v0.20.1/go.mod h1:b60iJT+xNNLfaQJUqLI7946tYiFEOuE9E4k54HpKcJ0= github.com/go-openapi/validate v0.20.2/go.mod h1:e7OJoKNgd0twXZwIn0A43tHbvIcr/rZIVCbJBpTUoY0= -github.com/go-openapi/validate v0.21.0 h1:+Wqk39yKOhfpLqNLEC0/eViCkzM5FVXVqrvt526+wcI= github.com/go-openapi/validate v0.21.0/go.mod h1:rjnrwK57VJ7A8xqfpAOEKRH8yQSGUriMu5/zuPSQ1hg= +github.com/go-openapi/validate v0.22.0 h1:b0QecH6VslW/TxtpKgzpO1SNG7GU2FsaqKdP1E2T50Y= +github.com/go-openapi/validate v0.22.0/go.mod h1:rjnrwK57VJ7A8xqfpAOEKRH8yQSGUriMu5/zuPSQ1hg= github.com/go-playground/assert/v2 v2.0.1/go.mod h1:VDjEfimB/XKnb+ZQfWdccd7VUvScMdVu0Titje2rxJ4= github.com/go-playground/locales v0.13.0/go.mod h1:taPMhCMXrRLJO55olJkUXHZBHCxTMfnGwq/HNwmWNS8= github.com/go-playground/locales v0.14.0/go.mod h1:sawfccIbzZTqEDETgFXqTho0QybSa7l++s0DH+LDiLs= @@ -1305,7 +1290,6 @@ github.com/google/renameio v0.1.0/go.mod h1:KWCgfxg9yswjAJkECMjeO8J8rahYeXnNhOm4 github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3pAXIBCelhxNneeOaAeabZDe5s4K6zSpQ= github.com/google/subcommands v1.0.1/go.mod h1:ZjhPrFU+Olkh9WazFPsl27BQ4UPiG37m3yTrtFlrHVk= github.com/google/uuid v1.0.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= -github.com/google/uuid v1.1.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= @@ -1385,6 +1369,8 @@ github.com/grafana/grafana-google-sdk-go v0.0.0-20211104130251-b190293eaf58/go.m github.com/grafana/grafana-plugin-sdk-go v0.114.0/go.mod h1:D7x3ah+1d4phNXpbnOaxa/osSaZlwh9/ZUnGGzegRbk= github.com/grafana/grafana-plugin-sdk-go v0.139.0 h1:2RQKM2QpSaWTtaGN6sK+R7LO7zykOeTYF0QkAMA7JsI= github.com/grafana/grafana-plugin-sdk-go v0.139.0/go.mod h1:Y+Ps2sesZ62AyCnX+hzrYnyDQYe/ZZl+A8yKLOBm12c= +github.com/grafana/prometheus-alertmanager v0.24.0-rc.0.0.20220930143838-d75bdc5543c0 h1:Ifcxl2wKT+UoJE+d2hsEZjH5FVdF5nML+1dtMliFk78= +github.com/grafana/prometheus-alertmanager v0.24.0-rc.0.0.20220930143838-d75bdc5543c0/go.mod h1:xVHSIhcJ2xBqw8jSf7ZM+9NnTSV68dCLrj7MDiFEse8= github.com/grafana/saml v0.4.9-0.20220727151557-61cd9c9353fc h1:1PY8n+rXuBNr3r1JQhoytWDCpc+pq+BibxV0SZv+Cr4= github.com/grafana/saml v0.4.9-0.20220727151557-61cd9c9353fc/go.mod h1:9Zh6dWPtB3MSzTRt8fIFH60Z351QQ+s7hCU3J/tTlA4= github.com/grafana/thema v0.0.0-20220817114012-ebeee841c104 h1:dYpwFYIChrMfpq3wDa/ZBxAbUGSW5NYmYBeSezhaoao= @@ -1498,7 +1484,6 @@ github.com/hashicorp/memberlist v0.1.5/go.mod h1:ajVTdAv/9Im8oMAAj5G31PhhMCZJV2p github.com/hashicorp/memberlist v0.2.0/go.mod h1:MS2lj3INKhZjWNqd3N0m3J+Jxf3DAOnAH9VT3Sh9MUE= github.com/hashicorp/memberlist v0.2.2/go.mod h1:MS2lj3INKhZjWNqd3N0m3J+Jxf3DAOnAH9VT3Sh9MUE= github.com/hashicorp/memberlist v0.2.3/go.mod h1:MS2lj3INKhZjWNqd3N0m3J+Jxf3DAOnAH9VT3Sh9MUE= -github.com/hashicorp/memberlist v0.2.4/go.mod h1:MS2lj3INKhZjWNqd3N0m3J+Jxf3DAOnAH9VT3Sh9MUE= github.com/hashicorp/memberlist v0.3.1 h1:MXgUXLqva1QvpVEDQW1IQLG0wivQAtmFlHRQ+1vWZfM= github.com/hashicorp/memberlist v0.3.1/go.mod h1:MS2lj3INKhZjWNqd3N0m3J+Jxf3DAOnAH9VT3Sh9MUE= github.com/hashicorp/serf v0.8.2/go.mod h1:6hOLApaqBFA1NXqRQAsxw9QxuDEvNxSQRwA/JwenrHc= @@ -1626,7 +1611,6 @@ github.com/jcmturner/gofork v1.0.0/go.mod h1:MK8+TM0La+2rjBD4jE12Kj1pCCxK7d2LK/U github.com/jcmturner/goidentity/v6 v6.0.1/go.mod h1:X1YW3bgtvwAXju7V3LCIMpY0Gbxyjn/mY9zx4tFonSg= github.com/jcmturner/gokrb5/v8 v8.4.2/go.mod h1:sb+Xq/fTY5yktf/VxLsE3wlfPqQjp0aWNYyvBVK62bc= github.com/jcmturner/rpc/v2 v2.0.3/go.mod h1:VUJYCIDm3PVOEHw8sgt091/20OJjskO/YJki3ELg/Hc= -github.com/jessevdk/go-flags v0.0.0-20180331124232-1c38ed7ad0cc/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= github.com/jessevdk/go-flags v1.4.0/go.mod h1:4FA24M0QyGHXBuZZK/XkWh8h0e1EYbRYJSGM75WSRxI= github.com/jessevdk/go-flags v1.5.0 h1:1jKYvbxEjfUl0fmqTCOfonvskHHXMjBySTLW4y9LFvc= github.com/jessevdk/go-flags v1.5.0/go.mod h1:Fw0T6WPc1dYxT4mKEZRfG5kJhaTDP9pj1c2EWnYs/m4= @@ -1724,7 +1708,6 @@ 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/kshvakov/clickhouse v1.3.5/go.mod h1:DMzX7FxRymoNkVgizH0DWAL8Cur7wHLgx3MUnGwJqpE= -github.com/kylelemons/godebug v0.0.0-20160406211939-eadb3ce320cb/go.mod h1:B69LEHPfb2qLo0BaaOLcbitczOKLWTsrBG9LczfCD4k= 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= @@ -1974,7 +1957,6 @@ github.com/oklog/oklog v0.3.2/go.mod h1:FCV+B7mhrz4o+ueLpx+KqkyXRGMWOYEvfiXtdGtb github.com/oklog/run v1.0.0/go.mod h1:dlhp/R75TPv97u0XWUtDeV/lRKWPKSdTuV0TZvrmrQA= github.com/oklog/run v1.1.0 h1:GEenZ1cK0+q0+wsJew9qUg/DyD8k3JzYsZAi5gYi2mA= github.com/oklog/run v1.1.0/go.mod h1:sVPdnTZT1zYwAJeCMu2Th4T21pA3FPOQRfWjQlk7DVU= -github.com/oklog/ulid v0.0.0-20170117200651-66bb6560562f/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= github.com/oklog/ulid v1.3.1 h1:EGfNDEx6MqHz8B3uNV6QAib1UR2Lm97sHi3ocA6ESJ4= github.com/oklog/ulid v1.3.1/go.mod h1:CirwcVhetQ6Lv90oh/F+FBtV6XMibvdAFo93nm5qn4U= github.com/olekukonko/tablewriter v0.0.0-20170122224234-a0225b3f23b5/go.mod h1:vsDQFd/mU46D+Z4whnwzcISnGGzXWMclvtLoiIKAKIo= @@ -2105,19 +2087,6 @@ github.com/posener/complete v1.1.1/go.mod h1:em0nMJCgc9GFtwrmVmEMR/ZL6WyhyjMBndr github.com/posener/complete v1.2.3/go.mod h1:WZIdtGGp+qx0sLrYKtIRAruyNpv6hFCicSgv7Sy7s/s= 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/alertmanager v0.18.0/go.mod h1:WcxHBl40VSPuOaqWae6l6HpnEOVRIycEJ7i9iYkadEE= -github.com/prometheus/alertmanager v0.19.0/go.mod h1:Eyp94Yi/T+kdeb2qvq66E3RGuph5T/jm/RBVh4yz1xo= -github.com/prometheus/alertmanager v0.20.0/go.mod h1:9g2i48FAyZW6BtbsnvHtMHQXl2aVtrORKwKVCQ+nbrg= -github.com/prometheus/alertmanager v0.21.0/go.mod h1:h7tJ81NA0VLWvWEayi1QltevFkLF3KxmC/malTcT8Go= -github.com/prometheus/alertmanager v0.21.1-0.20200911160112-1fdff6b3f939/go.mod h1:imXRHOP6QTsE0fFsIsAV/cXimS32m7gVZOiUj11m6Ig= -github.com/prometheus/alertmanager v0.21.1-0.20201106142418-c39b78780054/go.mod h1:imXRHOP6QTsE0fFsIsAV/cXimS32m7gVZOiUj11m6Ig= -github.com/prometheus/alertmanager v0.21.1-0.20210310093010-0f9cab6991e6/go.mod h1:MTqVn+vIupE0dzdgo+sMcNCp37SCAi8vPrvKTTnTz9g= -github.com/prometheus/alertmanager v0.21.1-0.20210422101724-8176f78a70e1/go.mod h1:gsEqwD5BHHW9RNKvCuPOrrTMiP5I+faJUyLXvnivHik= -github.com/prometheus/alertmanager v0.22.2/go.mod h1:rYinOWxFuCnNssc3iOjn2oMTlhLaPcUuqV5yk5JKUAE= -github.com/prometheus/alertmanager v0.23.0/go.mod h1:0MLTrjQI8EuVmvykEhcfr/7X0xmaDAZrqMgxIq3OXHk= -github.com/prometheus/alertmanager v0.23.1-0.20210914172521-e35efbddb66a/go.mod h1:U7pGu+z7A9ZKhK8lq1MvIOp5GdVlZjwOYk+S0h3LSbA= -github.com/prometheus/alertmanager v0.24.0 h1:HBWR3lk4uy3ys+naDZthDdV7yEsxpaNeZuUS+hJgrOw= -github.com/prometheus/alertmanager v0.24.0/go.mod h1:r6fy/D7FRuZh5YbnX6J3MBY0eI4Pb5yPYS7/bPSXXqI= github.com/prometheus/client_golang v0.0.0-20180209125602-c332b6f63c06/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= github.com/prometheus/client_golang v0.8.0/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= github.com/prometheus/client_golang v0.9.1/go.mod h1:7SWBe2y4D6OKWSNQJUaRYU/AaXPKyh/dDVn+NZz0KFw= @@ -2163,24 +2132,20 @@ github.com/prometheus/common v0.8.0/go.mod h1:PC/OgXc+UN7B4ALwvn1yzVZmVwvhXp5Jsb github.com/prometheus/common v0.9.1/go.mod h1:yhUN8i9wzaXS3w1O07YhxHEBxD+W35wd8bs7vj7HSQ4= github.com/prometheus/common v0.10.0/go.mod h1:Tlit/dnDKsSWFlCLTWaA1cyBgKHSMdTB80sz/V91rCo= github.com/prometheus/common v0.11.1/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16Clt/msog/s= -github.com/prometheus/common v0.12.0/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16Clt/msog/s= github.com/prometheus/common v0.14.0/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16Clt/msog/s= github.com/prometheus/common v0.15.0/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16Clt/msog/s= github.com/prometheus/common v0.18.0/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16Clt/msog/s= github.com/prometheus/common v0.20.0/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16Clt/msog/s= -github.com/prometheus/common v0.21.0/go.mod h1:U+gB1OBLb1lF3O42bTCL+FK18tX9Oar16Clt/msog/s= github.com/prometheus/common v0.23.0/go.mod h1:H6QK/N6XVT42whUeIdI3dp36w49c+/iMDk7UAI2qm7Q= github.com/prometheus/common v0.26.0/go.mod h1:M7rCNAaPfAosfx8veZJCuw84e35h3Cfd9VFqTh1DIvc= github.com/prometheus/common v0.28.0/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= github.com/prometheus/common v0.29.0/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= -github.com/prometheus/common v0.30.0/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= github.com/prometheus/common v0.31.1/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= github.com/prometheus/common v0.32.1/go.mod h1:vu+V0TpY+O6vW9J44gczi3Ap/oXXR10b+M/gUGO4Hls= github.com/prometheus/common v0.37.0 h1:ccBbHCgIiT9uSoFY0vX8H3zsNR5eLt17/RQLUvn8pXE= github.com/prometheus/common v0.37.0/go.mod h1:phzohg0JFMnBEFGxTDbfu3QyL5GI8gTQJFhYO5B3mfA= github.com/prometheus/common/sigv4 v0.1.0 h1:qoVebwtwwEhS85Czm2dSROY5fTo2PAPEVdDeppTwGX4= github.com/prometheus/common/sigv4 v0.1.0/go.mod h1:2Jkxxk9yYvCkE5G1sQT7GuEXm57JrvHu9k5YwTjsNtI= -github.com/prometheus/exporter-toolkit v0.5.0/go.mod h1:OCkM4805mmisBhLmVFw858QYi3v0wKdY6/UxrT0pZVg= github.com/prometheus/exporter-toolkit v0.5.1/go.mod h1:OCkM4805mmisBhLmVFw858QYi3v0wKdY6/UxrT0pZVg= github.com/prometheus/exporter-toolkit v0.6.1/go.mod h1:ZUBIj498ePooX9t/2xtDjeQYwvRpiPP2lh5u4iblj2g= github.com/prometheus/exporter-toolkit v0.7.1 h1:c6RXaK8xBVercEeUQ4tRNL8UGWzDHfvj9dseo1FcK1Y= @@ -2207,7 +2172,6 @@ github.com/prometheus/procfs v0.6.0/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1 github.com/prometheus/procfs v0.7.3/go.mod h1:cz+aTbrPOrUb4q7XlbU9ygM+/jj0fzG6c1xBZuNvfVA= github.com/prometheus/procfs v0.8.0 h1:ODq8ZFEaYeCaZOJlZZdJA2AbQR98dSHSM1KW/You5mo= github.com/prometheus/procfs v0.8.0/go.mod h1:z7EfXMXOkbkqb9IINtpCn86r/to3BnA0uaxHdg830/4= -github.com/prometheus/prometheus v0.0.0-20180315085919-58e2a31db8de/go.mod h1:oAIUtOny2rjMX0OWN5vPR5/q/twIROJvdqnQKDdil/s= github.com/prometheus/prometheus v0.0.0-20190818123050-43acd0e2e93f/go.mod h1:rMTlmxGCvukf2KMu3fClMDKLLoJ5hl61MhcJ7xKakf0= github.com/prometheus/prometheus v0.0.0-20200609090129-a6600f564e3c/go.mod h1:S5n0C6tSgdnwWshBUceRx5G1OsjLv/EeZ9t3wIfEtsY= github.com/prometheus/prometheus v1.8.2-0.20200107122003-4708915ac6ef/go.mod h1:7U90zPoLkWjEIQcy/rweQla82OCTUzxVHE51G3OhJbI= @@ -2253,8 +2217,6 @@ github.com/rogpeppe/go-internal v1.6.1/go.mod h1:xXDCJY+GAPziupqXw64V24skbSoqbTE github.com/rogpeppe/go-internal v1.8.0/go.mod h1:WmiCO8CzOY8rg0OYDC4/i/2WRWAB6poM+XZ2dLUbcbE= github.com/rogpeppe/go-internal v1.8.1 h1:geMPLpDpQOgVyCg5z5GoRwLHepNdb71NXb67XFkP+Eg= github.com/rogpeppe/go-internal v1.8.1/go.mod h1:JeRgkft04UBgHMgCIwADu4Pn6Mtm5d4nPKWu0nJ5d+o= -github.com/rs/cors v1.6.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= -github.com/rs/cors v1.7.0/go.mod h1:gFx+x8UowdsKA9AchylcLynDq+nNFfI8FkUZdN/jGCU= github.com/rs/cors v1.8.0/go.mod h1:EBwu+T5AvHOcXwvZIkQFjUN6s8Czyqw12GL/Y0tUyRM= github.com/rs/cors v1.8.2 h1:KCooALfAYGs415Cwu5ABvv9n9509fSiG5SQJn/AQo4U= github.com/rs/cors v1.8.2/go.mod h1:XyqrcTp5zjWr1wsJ8PIRZssZ8b/WMcMf71DJnit4EMU= @@ -2278,7 +2240,6 @@ github.com/samuel/go-zookeeper v0.0.0-20200724154423-2164a8ac840e/go.mod h1:gi+0 github.com/samuel/go-zookeeper v0.0.0-20201211165307-7117e9ea2414/go.mod h1:gi+0XIa01GRL2eRQVjQkKGqKF3SF9vZR/HnPullcV2E= github.com/sanity-io/litter v1.2.0/go.mod h1:JF6pZUFgu2Q0sBZ+HSV35P8TVPI1TTzEwyu9FXAw2W4= github.com/santhosh-tekuri/jsonschema v1.2.4/go.mod h1:TEAUOeZSmIxTTuHatJzrvARHiuO9LYd+cIxzgEHCQI4= -github.com/satori/go.uuid v0.0.0-20160603004225-b111a074d5ef/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= github.com/satori/go.uuid v1.2.0/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= github.com/satori/go.uuid v1.2.1-0.20181028125025-b2ce2384e17b/go.mod h1:dA0hQrYB0VpLJoorglMZABFdXlWrHn1NEOzdhQKdks0= github.com/scaleway/scaleway-sdk-go v1.0.0-beta.7.0.20210223165440-c65ae3540d44 h1:3egqo0Vut6daANFm7tOXdNAa8v5/uLU+sgCJrc88Meo= @@ -2304,11 +2265,9 @@ github.com/sergi/go-diff v1.1.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNX github.com/shirou/gopsutil v3.21.6+incompatible/go.mod h1:5b4v6he4MtMOwMlS0TUMTu2PcXUg8+E1lC7eC3UO/RA= github.com/shopspring/decimal v0.0.0-20180709203117-cd690d0c9e24/go.mod h1:M+9NzErvs504Cn4c5DxATwIqPbtswREoFCre64PpcG4= github.com/shopspring/decimal v1.2.0/go.mod h1:DKyhrW/HYNuLGql+MJL6WCR6knT2jwCFRcu2hWCYk4o= -github.com/shurcooL/httpfs v0.0.0-20171119174359-809beceb2371/go.mod h1:ZY1cvUeJuFPAdZ/B6v7RHavJWZn2YPVFQ1OSXhCGOkg= github.com/shurcooL/httpfs v0.0.0-20190707220628-8d4bc4ba7749 h1:bUGsEnyNbVPw06Bs80sCeARAlK8lhwqGyi6UT8ymuGk= github.com/shurcooL/httpfs v0.0.0-20190707220628-8d4bc4ba7749/go.mod h1:ZY1cvUeJuFPAdZ/B6v7RHavJWZn2YPVFQ1OSXhCGOkg= github.com/shurcooL/sanitized_anchor_name v1.0.0/go.mod h1:1NzhyTcUVG4SuEtjjoZeVRXNmyL/1OwPU0+IJeTBvfc= -github.com/shurcooL/vfsgen v0.0.0-20180825020608-02ddb050ef6b/go.mod h1:TrYk7fJVaAttu97ZZKrO9UbRa8izdowaMIZcxYMbVaw= github.com/shurcooL/vfsgen v0.0.0-20181202132449-6a9ea43bcacd/go.mod h1:TrYk7fJVaAttu97ZZKrO9UbRa8izdowaMIZcxYMbVaw= github.com/shurcooL/vfsgen v0.0.0-20200627165143-92b8a710ab6c/go.mod h1:TrYk7fJVaAttu97ZZKrO9UbRa8izdowaMIZcxYMbVaw= github.com/shurcooL/vfsgen v0.0.0-20200824052919-0d455de96546 h1:pXY9qYc/MP5zdvqWEUH6SjNiu7VhSjuVFTFiTcphaLU= @@ -2506,7 +2465,6 @@ github.com/xeipuuv/gojsonreference v0.0.0-20180127040603-bd5ef7bd5415/go.mod h1: github.com/xeipuuv/gojsonschema v0.0.0-20180618132009-1d523034197f/go.mod h1:5yf86TLmAcydyeJq5YvxkGPE2fm/u4myDekKRoLuqhs= github.com/xiang90/probing v0.0.0-20190116061207-43a291ad63a2/go.mod h1:UETIi67q53MR2AWcXfiuqkDkRtnGDLqkBTpCHuJHxtU= github.com/xlab/treeprint v0.0.0-20180616005107-d6fb6747feb6/go.mod h1:ce1O1j6UtZfjr22oyGxGLbauSBp2YVXpARAosm7dHBg= -github.com/xlab/treeprint v1.0.0/go.mod h1:IoImgRak9i3zJyuxOKUP1v4UZd1tMoKkq/Cimt1uhCg= github.com/xlab/treeprint v1.1.0 h1:G/1DjNkPpfZCFt9CSh6b5/nY4VimlbHF3Rh4obvtzDk= github.com/xlab/treeprint v1.1.0/go.mod h1:gj5Gd3gPdKtR1ikdDK6fnFLdmIS0X30kTTuNd/WEJu0= github.com/xorcare/pointer v1.1.0 h1:sFwXOhRF8QZ0tyVZrtxWGIoVZNEmRzBCaFWdONPQIUM= @@ -2871,7 +2829,6 @@ golang.org/x/net v0.0.0-20210520170846-37e1c6afe023/go.mod h1:9nx3DQGgdP8bBQD5qx 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-20210614182718-04defd469f4e/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= -golang.org/x/net v0.0.0-20210726213435-c6fcb2dbf985/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20210903162142-ad29c8ab022f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211015210444-4f30a5c0130f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20211020060615-d418f374d309/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= @@ -3109,7 +3066,6 @@ golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuX golang.org/x/text v0.0.0-20160726164857-2910a502d2bf/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= 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.20180805044716-cb6730876b98/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.1-0.20181227161524-e6919f6577db/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk= @@ -3142,7 +3098,6 @@ golang.org/x/tools v0.0.0-20181011042414-1f849cf54d09/go.mod h1:n7NCudcB/nEzxVGm golang.org/x/tools v0.0.0-20181030221726-6c7e314b6563/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20181112210238-4b1f3b6b1646/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-20190118193359-16909d206f00/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= @@ -3209,7 +3164,6 @@ golang.org/x/tools v0.0.0-20200422205258-72e4a01eba43/go.mod h1:EkVYQZoAsY45+roY golang.org/x/tools v0.0.0-20200501065659-ab2804fb9c9d/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200509030707-2212a7e161a5/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-20200513201620-d5fe73897c97/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-20200522201501-cb1345f3a375/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20200603131246-cc40288be839/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= diff --git a/pkg/services/ngalert/api/api.go b/pkg/services/ngalert/api/api.go index eb16162cc57..b69aae655a2 100644 --- a/pkg/services/ngalert/api/api.go +++ b/pkg/services/ngalert/api/api.go @@ -49,7 +49,8 @@ type Alertmanager interface { GetAlerts(active, silenced, inhibited bool, filter []string, receiver string) (apimodels.GettableAlerts, error) GetAlertGroups(active, silenced, inhibited bool, filter []string, receiver string) (apimodels.AlertGroups, error) - // Testing + // Receivers + GetReceivers(ctx context.Context) apimodels.Receivers TestReceivers(ctx context.Context, c apimodels.TestReceiversConfigBodyParams) (*notifier.TestReceiversResult, error) } diff --git a/pkg/services/ngalert/api/api_alertmanager.go b/pkg/services/ngalert/api/api_alertmanager.go index fe714effe0e..4704c49dd14 100644 --- a/pkg/services/ngalert/api/api_alertmanager.go +++ b/pkg/services/ngalert/api/api_alertmanager.go @@ -248,6 +248,16 @@ func (srv AlertmanagerSrv) RoutePostAMAlerts(_ *models.ReqContext, _ apimodels.P return NotImplementedResp } +func (srv AlertmanagerSrv) RouteGetReceivers(c *models.ReqContext) response.Response { + am, errResp := srv.AlertmanagerFor(c.OrgID) + if errResp != nil { + return errResp + } + + rcvs := am.GetReceivers(c.Req.Context()) + return response.JSON(http.StatusOK, rcvs) +} + func (srv AlertmanagerSrv) RoutePostTestReceivers(c *models.ReqContext, body apimodels.TestReceiversConfigBodyParams) response.Response { if err := srv.crypto.LoadSecureSettings(c.Req.Context(), c.OrgID, body.Receivers); err != nil { var unknownReceiverError UnknownReceiverError diff --git a/pkg/services/ngalert/api/authorization.go b/pkg/services/ngalert/api/authorization.go index fda64e2b049..980aca94cb3 100644 --- a/pkg/services/ngalert/api/authorization.go +++ b/pkg/services/ngalert/api/authorization.go @@ -156,6 +156,8 @@ func (api *API) authorize(method, path string) web.Handler { case http.MethodPost + "/api/alertmanager/grafana/config/api/v1/alerts": // additional authorization is done in the request handler eval = ac.EvalAny(ac.EvalPermission(ac.ActionAlertingNotificationsWrite)) + case http.MethodGet + "/api/alertmanager/grafana/config/api/v1/receivers": + eval = ac.EvalPermission(ac.ActionAlertingNotificationsRead) case http.MethodPost + "/api/alertmanager/grafana/config/api/v1/receivers/test": fallback = middleware.ReqEditorRole eval = ac.EvalPermission(ac.ActionAlertingNotificationsRead) diff --git a/pkg/services/ngalert/api/authorization_test.go b/pkg/services/ngalert/api/authorization_test.go index d8b67290309..b4da61566fd 100644 --- a/pkg/services/ngalert/api/authorization_test.go +++ b/pkg/services/ngalert/api/authorization_test.go @@ -49,7 +49,7 @@ func TestAuthorize(t *testing.T) { } paths[p] = methods } - require.Len(t, paths, 40) + require.Len(t, paths, 41) ac := acmock.New() api := &API{AccessControl: ac} diff --git a/pkg/services/ngalert/api/forking_alertmanager.go b/pkg/services/ngalert/api/forking_alertmanager.go index afd3e90cfa2..46314c784e2 100644 --- a/pkg/services/ngalert/api/forking_alertmanager.go +++ b/pkg/services/ngalert/api/forking_alertmanager.go @@ -187,6 +187,10 @@ func (f *AlertmanagerApiHandler) handleRoutePostGrafanaAlertingConfig(ctx *model return f.GrafanaSvc.RoutePostAlertingConfig(ctx, conf) } +func (f *AlertmanagerApiHandler) handleRouteGetGrafanaReceivers(ctx *models.ReqContext) response.Response { + return f.GrafanaSvc.RouteGetReceivers(ctx) +} + func (f *AlertmanagerApiHandler) handleRoutePostTestGrafanaReceivers(ctx *models.ReqContext, conf apimodels.TestReceiversConfigBodyParams) response.Response { return f.GrafanaSvc.RoutePostTestReceivers(ctx, conf) } diff --git a/pkg/services/ngalert/api/generated_base_api_alertmanager.go b/pkg/services/ngalert/api/generated_base_api_alertmanager.go index 21f1c3cdc64..81ec3137c31 100644 --- a/pkg/services/ngalert/api/generated_base_api_alertmanager.go +++ b/pkg/services/ngalert/api/generated_base_api_alertmanager.go @@ -33,6 +33,7 @@ type AlertmanagerApi interface { RouteGetGrafanaAMAlerts(*models.ReqContext) response.Response RouteGetGrafanaAMStatus(*models.ReqContext) response.Response RouteGetGrafanaAlertingConfig(*models.ReqContext) response.Response + RouteGetGrafanaReceivers(*models.ReqContext) response.Response RouteGetGrafanaSilence(*models.ReqContext) response.Response RouteGetGrafanaSilences(*models.ReqContext) response.Response RouteGetSilence(*models.ReqContext) response.Response @@ -114,6 +115,9 @@ func (f *AlertmanagerApiHandler) RouteGetGrafanaAMStatus(ctx *models.ReqContext) func (f *AlertmanagerApiHandler) RouteGetGrafanaAlertingConfig(ctx *models.ReqContext) response.Response { return f.handleRouteGetGrafanaAlertingConfig(ctx) } +func (f *AlertmanagerApiHandler) RouteGetGrafanaReceivers(ctx *models.ReqContext) response.Response { + return f.handleRouteGetGrafanaReceivers(ctx) +} func (f *AlertmanagerApiHandler) RouteGetGrafanaSilence(ctx *models.ReqContext) response.Response { // Parse Path Parameters silenceIdParam := web.Params(ctx.Req)[":SilenceId"] @@ -330,6 +334,16 @@ func (api *API) RegisterAlertmanagerApiEndpoints(srv AlertmanagerApi, m *metrics m, ), ) + group.Get( + toMacaronPath("/api/alertmanager/grafana/config/api/v1/receivers"), + api.authorize(http.MethodGet, "/api/alertmanager/grafana/config/api/v1/receivers"), + metrics.Instrument( + http.MethodGet, + "/api/alertmanager/grafana/config/api/v1/receivers", + srv.RouteGetGrafanaReceivers, + m, + ), + ) group.Get( toMacaronPath("/api/alertmanager/grafana/api/v2/silence/{SilenceId}"), api.authorize(http.MethodGet, "/api/alertmanager/grafana/api/v2/silence/{SilenceId}"), diff --git a/pkg/services/ngalert/api/tooling/api.json b/pkg/services/ngalert/api/tooling/api.json index 77f1f835b18..90cc5839c6a 100644 --- a/pkg/services/ngalert/api/tooling/api.json +++ b/pkg/services/ngalert/api/tooling/api.json @@ -260,7 +260,7 @@ "type": "string" }, "for": { - "$ref": "#/definitions/Duration" + "type": "string" }, "labels": { "additionalProperties": { @@ -378,25 +378,6 @@ "title": "DataTopic is used to identify which topic the frame should be assigned to.", "type": "string" }, - "DateTime": { - "description": "DateTime is a time but it serializes to ISO8601 format with millis\nIt knows how to read 3 different variations of a RFC3339 date time.\nMost APIs we encounter want either millisecond or second precision times.\nThis just tries to make it worry-free.", - "format": "date-time", - "type": "string" - }, - "DayOfMonthRange": { - "properties": { - "Begin": { - "format": "int64", - "type": "integer" - }, - "End": { - "format": "int64", - "type": "integer" - } - }, - "title": "A DayOfMonthRange is an inclusive range that may have negative Beginning/End values that represent distance from the End of the month Beginning at -1.", - "type": "object" - }, "DiscoveryBase": { "properties": { "error": { @@ -625,16 +606,12 @@ "FieldConfig": { "properties": { "color": { - "additionalProperties": { - "type": "object" - }, + "additionalProperties": {}, "description": "Map values to a display color\nNOTE: this interface is under development in the frontend... so simple map for now", "type": "object" }, "custom": { - "additionalProperties": { - "type": "object" - }, + "additionalProperties": {}, "description": "Panel Specific Values", "type": "object" }, @@ -742,8 +719,7 @@ "type": "string" }, "custom": { - "description": "Custom datasource specific values.", - "type": "object" + "description": "Custom datasource specific values." }, "dataTopic": { "$ref": "#/definitions/DataTopic" @@ -939,7 +915,7 @@ "type": "string" }, "for": { - "$ref": "#/definitions/Duration" + "type": "string" }, "grafana_alert": { "$ref": "#/definitions/GettableGrafanaRule" @@ -1239,6 +1215,10 @@ "description": "The bearer token file for the targets. Deprecated in favour of\nAuthorization.CredentialsFile.", "type": "string" }, + "enable_http2": { + "description": "EnableHTTP2 specifies whether the client should configure HTTP2.\nThe omitempty flag is not set, because it would be hidden from the\nmarshalled configuration when set to false.", + "type": "boolean" + }, "follow_redirects": { "description": "FollowRedirects specifies whether the client should follow HTTP 3xx redirects.\nThe omitempty flag is not set, because it would be hidden from the\nmarshalled configuration when set to false.", "type": "boolean" @@ -1268,20 +1248,6 @@ "title": "HostPort represents a \"host:port\" network address.", "type": "object" }, - "InclusiveRange": { - "properties": { - "Begin": { - "format": "int64", - "type": "integer" - }, - "End": { - "format": "int64", - "type": "integer" - } - }, - "title": "InclusiveRange is used to hold the Beginning and End values of many time interval components.", - "type": "object" - }, "InhibitRule": { "description": "InhibitRule defines an inhibition rule that mutes alerts that match the\ntarget labels if an alert matching the source labels exists.\nBoth alerts have to have a set of labels being equal.", "properties": { @@ -1501,20 +1467,6 @@ }, "type": "array" }, - "MonthRange": { - "properties": { - "Begin": { - "format": "int64", - "type": "integer" - }, - "End": { - "format": "int64", - "type": "integer" - } - }, - "title": "A MonthRange is an inclusive range between [1, 12] where 1 = January.", - "type": "object" - }, "MultiStatus": { "type": "object" }, @@ -1605,6 +1557,9 @@ }, "type": "object" }, + "proxy_url": { + "$ref": "#/definitions/URL" + }, "scopes": { "items": { "type": "string" @@ -1931,7 +1886,7 @@ "type": "string" }, "for": { - "$ref": "#/definitions/Duration" + "type": "string" }, "grafana_alert": { "$ref": "#/definitions/PostableGrafanaRule" @@ -2220,7 +2175,7 @@ "PushoverConfig": { "properties": { "expire": { - "$ref": "#/definitions/duration" + "type": "string" }, "html": { "type": "boolean" @@ -2235,7 +2190,7 @@ "type": "string" }, "retry": { - "$ref": "#/definitions/duration" + "type": "string" }, "send_resolved": { "type": "boolean" @@ -2265,16 +2220,12 @@ "description": "The embedded FieldConfig's display name must be set.\nIt corresponds to the QueryResultMetaStat on the frontend (https://github.com/grafana/grafana/blob/master/packages/grafana-data/src/types/data.ts#L53).", "properties": { "color": { - "additionalProperties": { - "type": "object" - }, + "additionalProperties": {}, "description": "Map values to a display color\nNOTE: this interface is under development in the frontend... so simple map for now", "type": "object" }, "custom": { - "additionalProperties": { - "type": "object" - }, + "additionalProperties": {}, "description": "Panel Specific Values", "type": "object" }, @@ -2462,10 +2413,10 @@ "type": "array" }, "group_interval": { - "$ref": "#/definitions/Duration" + "type": "string" }, "group_wait": { - "$ref": "#/definitions/Duration" + "type": "string" }, "match": { "additionalProperties": { @@ -2496,7 +2447,7 @@ "type": "string" }, "repeat_interval": { - "$ref": "#/definitions/Duration" + "type": "string" }, "routes": { "items": { @@ -2897,6 +2848,9 @@ "description": "The client key file for the targets.", "type": "string" }, + "min_version": { + "$ref": "#/definitions/TLSVersion" + }, "server_name": { "description": "Used to verify the hostname for the targets.", "type": "string" @@ -2905,6 +2859,10 @@ "title": "TLSConfig configures the options for TLS connections.", "type": "object" }, + "TLSVersion": { + "format": "uint16", + "type": "integer" + }, "TelegramConfig": { "properties": { "api_url": { @@ -3073,13 +3031,13 @@ "properties": { "days_of_month": { "items": { - "$ref": "#/definitions/DayOfMonthRange" + "type": "string" }, "type": "array" }, "months": { "items": { - "$ref": "#/definitions/MonthRange" + "type": "string" }, "type": "array" }, @@ -3091,13 +3049,13 @@ }, "weekdays": { "items": { - "$ref": "#/definitions/WeekdayRange" + "type": "string" }, "type": "array" }, "years": { "items": { - "$ref": "#/definitions/YearRange" + "type": "string" }, "type": "array" } @@ -3120,7 +3078,6 @@ "type": "object" }, "URL": { - "description": "The general form represented is:\n\n[scheme:][//[userinfo@]host][/]path[?query][#fragment]\n\nURLs that do not start with a slash after the scheme are interpreted as:\n\nscheme:opaque[?query][#fragment]\n\nNote that the Path field is stored in decoded form: /%47%6f%2f becomes /Go/.\nA consequence is that it is impossible to tell which slashes in the Path were\nslashes in the raw URL and which were %2f. This distinction is rarely important,\nbut when it is, the code should use RawPath, an optional field which only gets\nset if the default encoding is different from Path.\n\nURL's String method uses the EscapedPath method to obtain the path. See the\nEscapedPath method for more details.", "properties": { "ForceQuery": { "type": "boolean" @@ -3131,6 +3088,9 @@ "Host": { "type": "string" }, + "OmitHost": { + "type": "boolean" + }, "Opaque": { "type": "string" }, @@ -3153,7 +3113,7 @@ "$ref": "#/definitions/Userinfo" } }, - "title": "A URL represents a parsed URL (technically, a URI reference).", + "title": "URL is a custom URL type that allows validation at configuration load time.", "type": "object" }, "Userinfo": { @@ -3291,34 +3251,6 @@ "title": "WechatConfig configures notifications via Wechat.", "type": "object" }, - "WeekdayRange": { - "properties": { - "Begin": { - "format": "int64", - "type": "integer" - }, - "End": { - "format": "int64", - "type": "integer" - } - }, - "title": "A WeekdayRange is an inclusive range between [0, 6] where 0 = Sunday.", - "type": "object" - }, - "YearRange": { - "properties": { - "Begin": { - "format": "int64", - "type": "integer" - }, - "End": { - "format": "int64", - "type": "integer" - } - }, - "title": "A YearRange is a positive inclusive range.", - "type": "object" - }, "alert": { "description": "Alert alert", "properties": { @@ -3361,6 +3293,7 @@ "type": "object" }, "alertGroups": { + "description": "AlertGroups alert groups", "items": { "$ref": "#/definitions/alertGroup" }, @@ -3464,10 +3397,8 @@ ], "type": "object" }, - "duration": { - "$ref": "#/definitions/Duration" - }, "gettableAlert": { + "description": "GettableAlert gettable alert", "properties": { "annotations": { "$ref": "#/definitions/labelSet" @@ -3530,6 +3461,7 @@ "type": "array" }, "gettableSilence": { + "description": "GettableSilence gettable silence", "properties": { "comment": { "description": "comment", @@ -3578,11 +3510,42 @@ "type": "object" }, "gettableSilences": { + "description": "GettableSilences gettable silences", "items": { "$ref": "#/definitions/gettableSilence" }, "type": "array" }, + "integration": { + "properties": { + "lastNotifyAttempt": { + "description": "A timestamp indicating the last attempt to deliver a notification regardless of the outcome.\nFormat: date-time", + "format": "date-time", + "type": "string" + }, + "lastNotifyAttemptDuration": { + "description": "Duration of the last attempt to deliver a notification in humanized format (`1s` or `15ms`, etc).", + "type": "string" + }, + "lastNotifyAttemptError": { + "description": "Error string for the last attempt to deliver a notification. Empty if the last attempt was successful.", + "type": "string" + }, + "name": { + "description": "name", + "type": "string" + }, + "sendResolved": { + "description": "send resolved", + "type": "boolean" + } + }, + "required": [ + "name", + "sendResolved" + ], + "type": "object" + }, "labelSet": { "additionalProperties": { "type": "string" @@ -3688,6 +3651,7 @@ "type": "array" }, "postableSilence": { + "description": "PostableSilence postable silence", "properties": { "comment": { "description": "comment", @@ -3725,14 +3689,26 @@ "type": "object" }, "receiver": { - "description": "Receiver receiver", "properties": { + "active": { + "description": "active", + "type": "boolean" + }, + "integrations": { + "description": "integrations", + "items": { + "$ref": "#/definitions/integration" + }, + "type": "array" + }, "name": { "description": "name", "type": "string" } }, "required": [ + "active", + "integrations", "name" ], "type": "object" diff --git a/pkg/services/ngalert/api/tooling/definitions/alertmanager.go b/pkg/services/ngalert/api/tooling/definitions/alertmanager.go index b666b78deaf..a870a692b12 100644 --- a/pkg/services/ngalert/api/tooling/definitions/alertmanager.go +++ b/pkg/services/ngalert/api/tooling/definitions/alertmanager.go @@ -142,6 +142,13 @@ import ( // 400: ValidationError // 404: NotFound +// swagger:route GET /api/alertmanager/grafana/config/api/v1/receivers alertmanager RouteGetGrafanaReceivers +// +// Get a list of all receivers. +// +// Responses: +// 200: receivers + // swagger:route POST /api/alertmanager/grafana/config/api/v1/receivers/test alertmanager RoutePostTestGrafanaReceivers // // Test Grafana managed receivers without saving them. @@ -403,6 +410,12 @@ type AlertGroup = amv2.AlertGroup // swagger:model receiver type Receiver = amv2.Receiver +// swagger:model receivers +type Receivers = []amv2.Receiver + +// swagger:model integration +type Integration = amv2.Integration + // swagger:parameters RouteGetAMAlerts RouteGetAMAlertGroups RouteGetGrafanaAMAlerts RouteGetGrafanaAMAlertGroups type AlertsParams struct { diff --git a/pkg/services/ngalert/api/tooling/post.json b/pkg/services/ngalert/api/tooling/post.json index 0489e9d3963..4593ee9a070 100644 --- a/pkg/services/ngalert/api/tooling/post.json +++ b/pkg/services/ngalert/api/tooling/post.json @@ -260,7 +260,7 @@ "type": "string" }, "for": { - "$ref": "#/definitions/Duration" + "type": "string" }, "labels": { "additionalProperties": { @@ -378,25 +378,6 @@ "title": "DataTopic is used to identify which topic the frame should be assigned to.", "type": "string" }, - "DateTime": { - "description": "DateTime is a time but it serializes to ISO8601 format with millis\nIt knows how to read 3 different variations of a RFC3339 date time.\nMost APIs we encounter want either millisecond or second precision times.\nThis just tries to make it worry-free.", - "format": "date-time", - "type": "string" - }, - "DayOfMonthRange": { - "properties": { - "Begin": { - "format": "int64", - "type": "integer" - }, - "End": { - "format": "int64", - "type": "integer" - } - }, - "title": "A DayOfMonthRange is an inclusive range that may have negative Beginning/End values that represent distance from the End of the month Beginning at -1.", - "type": "object" - }, "DiscoveryBase": { "properties": { "error": { @@ -625,16 +606,12 @@ "FieldConfig": { "properties": { "color": { - "additionalProperties": { - "type": "object" - }, + "additionalProperties": {}, "description": "Map values to a display color\nNOTE: this interface is under development in the frontend... so simple map for now", "type": "object" }, "custom": { - "additionalProperties": { - "type": "object" - }, + "additionalProperties": {}, "description": "Panel Specific Values", "type": "object" }, @@ -742,8 +719,7 @@ "type": "string" }, "custom": { - "description": "Custom datasource specific values.", - "type": "object" + "description": "Custom datasource specific values." }, "dataTopic": { "$ref": "#/definitions/DataTopic" @@ -939,7 +915,7 @@ "type": "string" }, "for": { - "$ref": "#/definitions/Duration" + "type": "string" }, "grafana_alert": { "$ref": "#/definitions/GettableGrafanaRule" @@ -1239,6 +1215,10 @@ "description": "The bearer token file for the targets. Deprecated in favour of\nAuthorization.CredentialsFile.", "type": "string" }, + "enable_http2": { + "description": "EnableHTTP2 specifies whether the client should configure HTTP2.\nThe omitempty flag is not set, because it would be hidden from the\nmarshalled configuration when set to false.", + "type": "boolean" + }, "follow_redirects": { "description": "FollowRedirects specifies whether the client should follow HTTP 3xx redirects.\nThe omitempty flag is not set, because it would be hidden from the\nmarshalled configuration when set to false.", "type": "boolean" @@ -1268,20 +1248,6 @@ "title": "HostPort represents a \"host:port\" network address.", "type": "object" }, - "InclusiveRange": { - "properties": { - "Begin": { - "format": "int64", - "type": "integer" - }, - "End": { - "format": "int64", - "type": "integer" - } - }, - "title": "InclusiveRange is used to hold the Beginning and End values of many time interval components.", - "type": "object" - }, "InhibitRule": { "description": "InhibitRule defines an inhibition rule that mutes alerts that match the\ntarget labels if an alert matching the source labels exists.\nBoth alerts have to have a set of labels being equal.", "properties": { @@ -1501,20 +1467,6 @@ }, "type": "array" }, - "MonthRange": { - "properties": { - "Begin": { - "format": "int64", - "type": "integer" - }, - "End": { - "format": "int64", - "type": "integer" - } - }, - "title": "A MonthRange is an inclusive range between [1, 12] where 1 = January.", - "type": "object" - }, "MultiStatus": { "type": "object" }, @@ -1605,6 +1557,9 @@ }, "type": "object" }, + "proxy_url": { + "$ref": "#/definitions/URL" + }, "scopes": { "items": { "type": "string" @@ -1931,7 +1886,7 @@ "type": "string" }, "for": { - "$ref": "#/definitions/Duration" + "type": "string" }, "grafana_alert": { "$ref": "#/definitions/PostableGrafanaRule" @@ -2220,7 +2175,7 @@ "PushoverConfig": { "properties": { "expire": { - "$ref": "#/definitions/duration" + "type": "string" }, "html": { "type": "boolean" @@ -2235,7 +2190,7 @@ "type": "string" }, "retry": { - "$ref": "#/definitions/duration" + "type": "string" }, "send_resolved": { "type": "boolean" @@ -2265,16 +2220,12 @@ "description": "The embedded FieldConfig's display name must be set.\nIt corresponds to the QueryResultMetaStat on the frontend (https://github.com/grafana/grafana/blob/master/packages/grafana-data/src/types/data.ts#L53).", "properties": { "color": { - "additionalProperties": { - "type": "object" - }, + "additionalProperties": {}, "description": "Map values to a display color\nNOTE: this interface is under development in the frontend... so simple map for now", "type": "object" }, "custom": { - "additionalProperties": { - "type": "object" - }, + "additionalProperties": {}, "description": "Panel Specific Values", "type": "object" }, @@ -2462,10 +2413,10 @@ "type": "array" }, "group_interval": { - "$ref": "#/definitions/Duration" + "type": "string" }, "group_wait": { - "$ref": "#/definitions/Duration" + "type": "string" }, "match": { "additionalProperties": { @@ -2496,7 +2447,7 @@ "type": "string" }, "repeat_interval": { - "$ref": "#/definitions/Duration" + "type": "string" }, "routes": { "items": { @@ -2897,6 +2848,9 @@ "description": "The client key file for the targets.", "type": "string" }, + "min_version": { + "$ref": "#/definitions/TLSVersion" + }, "server_name": { "description": "Used to verify the hostname for the targets.", "type": "string" @@ -2905,6 +2859,10 @@ "title": "TLSConfig configures the options for TLS connections.", "type": "object" }, + "TLSVersion": { + "format": "uint16", + "type": "integer" + }, "TelegramConfig": { "properties": { "api_url": { @@ -3073,13 +3031,13 @@ "properties": { "days_of_month": { "items": { - "$ref": "#/definitions/DayOfMonthRange" + "type": "string" }, "type": "array" }, "months": { "items": { - "$ref": "#/definitions/MonthRange" + "type": "string" }, "type": "array" }, @@ -3091,13 +3049,13 @@ }, "weekdays": { "items": { - "$ref": "#/definitions/WeekdayRange" + "type": "string" }, "type": "array" }, "years": { "items": { - "$ref": "#/definitions/YearRange" + "type": "string" }, "type": "array" } @@ -3120,6 +3078,7 @@ "type": "object" }, "URL": { + "description": "The general form represented is:\n\n[scheme:][//[userinfo@]host][/]path[?query][#fragment]\n\nURLs that do not start with a slash after the scheme are interpreted as:\n\nscheme:opaque[?query][#fragment]\n\nNote that the Path field is stored in decoded form: /%47%6f%2f becomes /Go/.\nA consequence is that it is impossible to tell which slashes in the Path were\nslashes in the raw URL and which were %2f. This distinction is rarely important,\nbut when it is, the code should use RawPath, an optional field which only gets\nset if the default encoding is different from Path.\n\nURL's String method uses the EscapedPath method to obtain the path. See the\nEscapedPath method for more details.", "properties": { "ForceQuery": { "type": "boolean" @@ -3130,6 +3089,9 @@ "Host": { "type": "string" }, + "OmitHost": { + "type": "boolean" + }, "Opaque": { "type": "string" }, @@ -3152,7 +3114,7 @@ "$ref": "#/definitions/Userinfo" } }, - "title": "URL is a custom URL type that allows validation at configuration load time.", + "title": "A URL represents a parsed URL (technically, a URI reference).", "type": "object" }, "Userinfo": { @@ -3290,34 +3252,6 @@ "title": "WechatConfig configures notifications via Wechat.", "type": "object" }, - "WeekdayRange": { - "properties": { - "Begin": { - "format": "int64", - "type": "integer" - }, - "End": { - "format": "int64", - "type": "integer" - } - }, - "title": "A WeekdayRange is an inclusive range between [0, 6] where 0 = Sunday.", - "type": "object" - }, - "YearRange": { - "properties": { - "Begin": { - "format": "int64", - "type": "integer" - }, - "End": { - "format": "int64", - "type": "integer" - } - }, - "title": "A YearRange is a positive inclusive range.", - "type": "object" - }, "alert": { "description": "Alert alert", "properties": { @@ -3462,11 +3396,7 @@ ], "type": "object" }, - "duration": { - "$ref": "#/definitions/Duration" - }, "gettableAlert": { - "description": "GettableAlert gettable alert", "properties": { "annotations": { "$ref": "#/definitions/labelSet" @@ -3522,6 +3452,7 @@ "type": "object" }, "gettableAlerts": { + "description": "GettableAlerts gettable alerts", "items": { "$ref": "#/definitions/gettableAlert" }, @@ -3576,12 +3507,42 @@ "type": "object" }, "gettableSilences": { - "description": "GettableSilences gettable silences", "items": { "$ref": "#/definitions/gettableSilence" }, "type": "array" }, + "integration": { + "description": "Integration integration", + "properties": { + "lastNotifyAttempt": { + "description": "A timestamp indicating the last attempt to deliver a notification regardless of the outcome.\nFormat: date-time", + "format": "date-time", + "type": "string" + }, + "lastNotifyAttemptDuration": { + "description": "Duration of the last attempt to deliver a notification in humanized format (`1s` or `15ms`, etc).", + "type": "string" + }, + "lastNotifyAttemptError": { + "description": "Error string for the last attempt to deliver a notification. Empty if the last attempt was successful.", + "type": "string" + }, + "name": { + "description": "name", + "type": "string" + }, + "sendResolved": { + "description": "send resolved", + "type": "boolean" + } + }, + "required": [ + "name", + "sendResolved" + ], + "type": "object" + }, "labelSet": { "additionalProperties": { "type": "string" @@ -3687,7 +3648,6 @@ "type": "array" }, "postableSilence": { - "description": "PostableSilence postable silence", "properties": { "comment": { "description": "comment", @@ -3725,13 +3685,27 @@ "type": "object" }, "receiver": { + "description": "Receiver receiver", "properties": { + "active": { + "description": "active", + "type": "boolean" + }, + "integrations": { + "description": "integrations", + "items": { + "$ref": "#/definitions/integration" + }, + "type": "array" + }, "name": { "description": "name", "type": "string" } }, "required": [ + "active", + "integrations", "name" ], "type": "object" @@ -4206,6 +4180,20 @@ ] } }, + "/api/alertmanager/grafana/config/api/v1/receivers": { + "get": { + "operationId": "RouteGetGrafanaReceivers", + "responses": { + "200": { + "$ref": "#/responses/receivers" + } + }, + "summary": "Get a list of all receivers.", + "tags": [ + "alertmanager" + ] + } + }, "/api/alertmanager/grafana/config/api/v1/receivers/test": { "post": { "operationId": "RoutePostTestGrafanaReceivers", @@ -5462,6 +5450,26 @@ ] } }, + "/api/v1/ngalert": { + "get": { + "description": "Get the status of the alerting engine", + "operationId": "RouteGetStatus", + "produces": [ + "application/json" + ], + "responses": { + "200": { + "description": "AlertingStatus", + "schema": { + "$ref": "#/definitions/AlertingStatus" + } + } + }, + "tags": [ + "configuration" + ] + } + }, "/api/v1/ngalert/admin_config": { "delete": { "consumes": [ @@ -5571,26 +5579,6 @@ ] } }, - "/api/v1/ngalert": { - "get": { - "description": "Get the status of the alerting engine", - "operationId": "RouteGetStatus", - "produces": [ - "application/json" - ], - "responses": { - "200": { - "description": "AlertingStatus", - "schema": { - "$ref": "#/definitions/AlertingStatus" - } - } - }, - "tags": [ - "configuration" - ] - } - }, "/api/v1/provisioning/alert-rules": { "post": { "consumes": [ diff --git a/pkg/services/ngalert/api/tooling/spec.json b/pkg/services/ngalert/api/tooling/spec.json index e525d4d6707..d6cf15854ee 100644 --- a/pkg/services/ngalert/api/tooling/spec.json +++ b/pkg/services/ngalert/api/tooling/spec.json @@ -392,6 +392,20 @@ } } }, + "/api/alertmanager/grafana/config/api/v1/receivers": { + "get": { + "tags": [ + "alertmanager" + ], + "summary": "Get a list of all receivers.", + "operationId": "RouteGetGrafanaReceivers", + "responses": { + "200": { + "$ref": "#/responses/receivers" + } + } + } + }, "/api/alertmanager/grafana/config/api/v1/receivers/test": { "post": { "tags": [ @@ -1648,6 +1662,26 @@ } } }, + "/api/v1/ngalert": { + "get": { + "description": "Get the status of the alerting engine", + "produces": [ + "application/json" + ], + "tags": [ + "configuration" + ], + "operationId": "RouteGetStatus", + "responses": { + "200": { + "description": "AlertingStatus", + "schema": { + "$ref": "#/definitions/AlertingStatus" + } + } + } + } + }, "/api/v1/ngalert/admin_config": { "get": { "produces": [ @@ -1757,26 +1791,6 @@ } } }, - "/api/v1/ngalert": { - "get": { - "description": "Get the status of the alerting engine", - "produces": [ - "application/json" - ], - "tags": [ - "configuration" - ], - "operationId": "RouteGetStatus", - "responses": { - "200": { - "description": "AlertingStatus", - "schema": { - "$ref": "#/definitions/AlertingStatus" - } - } - } - } - }, "/api/v1/provisioning/alert-rules": { "post": { "consumes": [ @@ -2782,7 +2796,7 @@ "type": "string" }, "for": { - "$ref": "#/definitions/Duration" + "type": "string" }, "labels": { "type": "object", @@ -2899,25 +2913,6 @@ "type": "string", "title": "DataTopic is used to identify which topic the frame should be assigned to." }, - "DateTime": { - "description": "DateTime is a time but it serializes to ISO8601 format with millis\nIt knows how to read 3 different variations of a RFC3339 date time.\nMost APIs we encounter want either millisecond or second precision times.\nThis just tries to make it worry-free.", - "type": "string", - "format": "date-time" - }, - "DayOfMonthRange": { - "type": "object", - "title": "A DayOfMonthRange is an inclusive range that may have negative Beginning/End values that represent distance from the End of the month Beginning at -1.", - "properties": { - "Begin": { - "type": "integer", - "format": "int64" - }, - "End": { - "type": "integer", - "format": "int64" - } - } - }, "DiscoveryBase": { "type": "object", "required": [ @@ -3153,16 +3148,12 @@ "color": { "description": "Map values to a display color\nNOTE: this interface is under development in the frontend... so simple map for now", "type": "object", - "additionalProperties": { - "type": "object" - } + "additionalProperties": {} }, "custom": { "description": "Panel Specific Values", "type": "object", - "additionalProperties": { - "type": "object" - } + "additionalProperties": {} }, "decimals": { "type": "integer", @@ -3268,8 +3259,7 @@ "type": "string" }, "custom": { - "description": "Custom datasource specific values.", - "type": "object" + "description": "Custom datasource specific values." }, "dataTopic": { "$ref": "#/definitions/DataTopic" @@ -3464,7 +3454,7 @@ "type": "string" }, "for": { - "$ref": "#/definitions/Duration" + "type": "string" }, "grafana_alert": { "$ref": "#/definitions/GettableGrafanaRule" @@ -3765,6 +3755,10 @@ "description": "The bearer token file for the targets. Deprecated in favour of\nAuthorization.CredentialsFile.", "type": "string" }, + "enable_http2": { + "description": "EnableHTTP2 specifies whether the client should configure HTTP2.\nThe omitempty flag is not set, because it would be hidden from the\nmarshalled configuration when set to false.", + "type": "boolean" + }, "follow_redirects": { "description": "FollowRedirects specifies whether the client should follow HTTP 3xx redirects.\nThe omitempty flag is not set, because it would be hidden from the\nmarshalled configuration when set to false.", "type": "boolean" @@ -3792,20 +3786,6 @@ } } }, - "InclusiveRange": { - "type": "object", - "title": "InclusiveRange is used to hold the Beginning and End values of many time interval components.", - "properties": { - "Begin": { - "type": "integer", - "format": "int64" - }, - "End": { - "type": "integer", - "format": "int64" - } - } - }, "InhibitRule": { "description": "InhibitRule defines an inhibition rule that mutes alerts that match the\ntarget labels if an alert matching the source labels exists.\nBoth alerts have to have a set of labels being equal.", "type": "object", @@ -4026,20 +4006,6 @@ "$ref": "#/definitions/MessageTemplate" } }, - "MonthRange": { - "type": "object", - "title": "A MonthRange is an inclusive range between [1, 12] where 1 = January.", - "properties": { - "Begin": { - "type": "integer", - "format": "int64" - }, - "End": { - "type": "integer", - "format": "int64" - } - } - }, "MultiStatus": { "type": "object" }, @@ -4132,6 +4098,9 @@ "type": "string" } }, + "proxy_url": { + "$ref": "#/definitions/URL" + }, "scopes": { "type": "array", "items": { @@ -4457,7 +4426,7 @@ "type": "string" }, "for": { - "$ref": "#/definitions/Duration" + "type": "string" }, "grafana_alert": { "$ref": "#/definitions/PostableGrafanaRule" @@ -4746,7 +4715,7 @@ "type": "object", "properties": { "expire": { - "$ref": "#/definitions/duration" + "type": "string" }, "html": { "type": "boolean" @@ -4761,7 +4730,7 @@ "type": "string" }, "retry": { - "$ref": "#/definitions/duration" + "type": "string" }, "send_resolved": { "type": "boolean" @@ -4794,16 +4763,12 @@ "color": { "description": "Map values to a display color\nNOTE: this interface is under development in the frontend... so simple map for now", "type": "object", - "additionalProperties": { - "type": "object" - } + "additionalProperties": {} }, "custom": { "description": "Panel Specific Values", "type": "object", - "additionalProperties": { - "type": "object" - } + "additionalProperties": {} }, "decimals": { "type": "integer", @@ -4988,10 +4953,10 @@ } }, "group_interval": { - "$ref": "#/definitions/Duration" + "type": "string" }, "group_wait": { - "$ref": "#/definitions/Duration" + "type": "string" }, "match": { "description": "Deprecated. Remove before v1.0 release.", @@ -5022,7 +4987,7 @@ "type": "string" }, "repeat_interval": { - "$ref": "#/definitions/Duration" + "type": "string" }, "routes": { "type": "array", @@ -5424,12 +5389,19 @@ "description": "The client key file for the targets.", "type": "string" }, + "min_version": { + "$ref": "#/definitions/TLSVersion" + }, "server_name": { "description": "Used to verify the hostname for the targets.", "type": "string" } } }, + "TLSVersion": { + "type": "integer", + "format": "uint16" + }, "TelegramConfig": { "type": "object", "title": "TelegramConfig configures notifications via Telegram.", @@ -5600,13 +5572,13 @@ "days_of_month": { "type": "array", "items": { - "$ref": "#/definitions/DayOfMonthRange" + "type": "string" } }, "months": { "type": "array", "items": { - "$ref": "#/definitions/MonthRange" + "type": "string" } }, "times": { @@ -5618,13 +5590,13 @@ "weekdays": { "type": "array", "items": { - "$ref": "#/definitions/WeekdayRange" + "type": "string" } }, "years": { "type": "array", "items": { - "$ref": "#/definitions/YearRange" + "type": "string" } } } @@ -5645,8 +5617,9 @@ } }, "URL": { + "description": "The general form represented is:\n\n[scheme:][//[userinfo@]host][/]path[?query][#fragment]\n\nURLs that do not start with a slash after the scheme are interpreted as:\n\nscheme:opaque[?query][#fragment]\n\nNote that the Path field is stored in decoded form: /%47%6f%2f becomes /Go/.\nA consequence is that it is impossible to tell which slashes in the Path were\nslashes in the raw URL and which were %2f. This distinction is rarely important,\nbut when it is, the code should use RawPath, an optional field which only gets\nset if the default encoding is different from Path.\n\nURL's String method uses the EscapedPath method to obtain the path. See the\nEscapedPath method for more details.", "type": "object", - "title": "URL is a custom URL type that allows validation at configuration load time.", + "title": "A URL represents a parsed URL (technically, a URI reference).", "properties": { "ForceQuery": { "type": "boolean" @@ -5657,6 +5630,9 @@ "Host": { "type": "string" }, + "OmitHost": { + "type": "boolean" + }, "Opaque": { "type": "string" }, @@ -5815,34 +5791,6 @@ } } }, - "WeekdayRange": { - "type": "object", - "title": "A WeekdayRange is an inclusive range between [0, 6] where 0 = Sunday.", - "properties": { - "Begin": { - "type": "integer", - "format": "int64" - }, - "End": { - "type": "integer", - "format": "int64" - } - } - }, - "YearRange": { - "type": "object", - "title": "A YearRange is a positive inclusive range.", - "properties": { - "Begin": { - "type": "integer", - "format": "int64" - }, - "End": { - "type": "integer", - "format": "int64" - } - } - }, "alert": { "description": "Alert alert", "type": "object", @@ -5989,11 +5937,7 @@ } } }, - "duration": { - "$ref": "#/definitions/Duration" - }, "gettableAlert": { - "description": "GettableAlert gettable alert", "type": "object", "required": [ "labels", @@ -6050,6 +5994,7 @@ "$ref": "#/definitions/gettableAlert" }, "gettableAlerts": { + "description": "GettableAlerts gettable alerts", "type": "array", "items": { "$ref": "#/definitions/gettableAlert" @@ -6106,13 +6051,44 @@ "$ref": "#/definitions/gettableSilence" }, "gettableSilences": { - "description": "GettableSilences gettable silences", "type": "array", "items": { "$ref": "#/definitions/gettableSilence" }, "$ref": "#/definitions/gettableSilences" }, + "integration": { + "description": "Integration integration", + "type": "object", + "required": [ + "name", + "sendResolved" + ], + "properties": { + "lastNotifyAttempt": { + "description": "A timestamp indicating the last attempt to deliver a notification regardless of the outcome.\nFormat: date-time", + "type": "string", + "format": "date-time" + }, + "lastNotifyAttemptDuration": { + "description": "Duration of the last attempt to deliver a notification in humanized format (`1s` or `15ms`, etc).", + "type": "string" + }, + "lastNotifyAttemptError": { + "description": "Error string for the last attempt to deliver a notification. Empty if the last attempt was successful.", + "type": "string" + }, + "name": { + "description": "name", + "type": "string" + }, + "sendResolved": { + "description": "send resolved", + "type": "boolean" + } + }, + "$ref": "#/definitions/integration" + }, "labelSet": { "description": "LabelSet label set", "type": "object", @@ -6218,7 +6194,6 @@ } }, "postableSilence": { - "description": "PostableSilence postable silence", "type": "object", "required": [ "comment", @@ -6257,11 +6232,25 @@ "$ref": "#/definitions/postableSilence" }, "receiver": { + "description": "Receiver receiver", "type": "object", "required": [ + "active", + "integrations", "name" ], "properties": { + "active": { + "description": "active", + "type": "boolean" + }, + "integrations": { + "description": "integrations", + "type": "array", + "items": { + "$ref": "#/definitions/integration" + } + }, "name": { "description": "name", "type": "string" diff --git a/pkg/services/ngalert/notifier/alertmanager.go b/pkg/services/ngalert/notifier/alertmanager.go index 7243a9ac606..9633aa48073 100644 --- a/pkg/services/ngalert/notifier/alertmanager.go +++ b/pkg/services/ngalert/notifier/alertmanager.go @@ -118,6 +118,8 @@ type Alertmanager struct { silencer *silence.Silencer silences *silence.Silences + receivers []*notify.Receiver + // muteTimes is a map where the key is the name of the mute_time_interval // and the value represents all configured time_interval(s) muteTimes map[string][]timeinterval.TimeInterval @@ -206,7 +208,7 @@ func newAlertmanager(ctx context.Context, orgID int64, cfg *setting.Cfg, store A }() // Initialize in-memory alerts - am.alerts, err = mem.NewAlerts(context.Background(), am.marker, memoryAlertsGCInterval, nil, am.logger) + am.alerts, err = mem.NewAlerts(context.Background(), am.marker, memoryAlertsGCInterval, nil, am.logger, m.Registerer) if err != nil { return nil, fmt.Errorf("unable to initialize the alert provider component of alerting: %w", err) } @@ -421,14 +423,20 @@ func (am *Alertmanager) applyConfig(cfg *apimodels.PostableUserConfig, rawConfig inhibitionStage := notify.NewMuteStage(am.inhibitor) timeMuteStage := notify.NewTimeMuteStage(am.muteTimes) silencingStage := notify.NewMuteStage(am.silencer) - for name := range integrationsMap { - stage := am.createReceiverStage(name, integrationsMap[name], am.waitFunc, am.notificationLog) - routingStage[name] = notify.MultiStage{meshStage, silencingStage, timeMuteStage, inhibitionStage, stage} - } am.route = dispatch.NewRoute(cfg.AlertmanagerConfig.Route.AsAMRoute(), nil) am.dispatcher = dispatch.NewDispatcher(am.alerts, am.route, routingStage, am.marker, am.timeoutFunc, &nilLimits{}, am.logger, am.dispatcherMetrics) + // Check which receivers are active and create the receiver stage. + activeReceivers := am.getActiveReceiversMap(am.route) + for name := range integrationsMap { + stage := am.createReceiverStage(name, integrationsMap[name], am.waitFunc, am.notificationLog) + routingStage[name] = notify.MultiStage{meshStage, silencingStage, timeMuteStage, inhibitionStage, stage} + _, isActive := activeReceivers[name] + + am.receivers = append(am.receivers, notify.NewReceiver(name, isActive, integrationsMap[name])) + } + am.wg.Add(1) go func() { defer am.wg.Done() @@ -452,8 +460,8 @@ func (am *Alertmanager) WorkingDirPath() string { } // buildIntegrationsMap builds a map of name to the list of Grafana integration notifiers off of a list of receiver config. -func (am *Alertmanager) buildIntegrationsMap(receivers []*apimodels.PostableApiReceiver, templates *template.Template) (map[string][]notify.Integration, error) { - integrationsMap := make(map[string][]notify.Integration, len(receivers)) +func (am *Alertmanager) buildIntegrationsMap(receivers []*apimodels.PostableApiReceiver, templates *template.Template) (map[string][]*notify.Integration, error) { + integrationsMap := make(map[string][]*notify.Integration, len(receivers)) for _, receiver := range receivers { integrations, err := am.buildReceiverIntegrations(receiver, templates) if err != nil { @@ -466,8 +474,8 @@ func (am *Alertmanager) buildIntegrationsMap(receivers []*apimodels.PostableApiR } // buildReceiverIntegrations builds a list of integration notifiers off of a receiver config. -func (am *Alertmanager) buildReceiverIntegrations(receiver *apimodels.PostableApiReceiver, tmpl *template.Template) ([]notify.Integration, error) { - var integrations []notify.Integration +func (am *Alertmanager) buildReceiverIntegrations(receiver *apimodels.PostableApiReceiver, tmpl *template.Template) ([]*notify.Integration, error) { + var integrations []*notify.Integration for i, r := range receiver.GrafanaManagedReceivers { n, err := am.buildReceiverIntegration(r, tmpl) if err != nil { @@ -667,18 +675,18 @@ func (e AlertValidationError) Error() string { } // createReceiverStage creates a pipeline of stages for a receiver. -func (am *Alertmanager) createReceiverStage(name string, integrations []notify.Integration, wait func() time.Duration, notificationLog notify.NotificationLog) notify.Stage { +func (am *Alertmanager) createReceiverStage(name string, integrations []*notify.Integration, wait func() time.Duration, notificationLog notify.NotificationLog) notify.Stage { var fs notify.FanoutStage - for i := range integrations { + for _, integration := range integrations { recv := &nflogpb.Receiver{ GroupName: name, - Integration: integrations[i].Name(), - Idx: uint32(integrations[i].Index()), + Integration: integration.Name(), + Idx: uint32(integration.Index()), } var s notify.MultiStage s = append(s, notify.NewWaitStage(wait)) - s = append(s, notify.NewDedupStage(&integrations[i], notificationLog, recv)) - s = append(s, notify.NewRetryStage(integrations[i], name, am.stageMetrics)) + s = append(s, notify.NewDedupStage(integration, notificationLog, recv)) + s = append(s, notify.NewRetryStage(integration, name, am.stageMetrics)) s = append(s, notify.NewSetNotifiesStage(notificationLog, recv)) fs = append(fs, s) @@ -686,6 +694,17 @@ func (am *Alertmanager) createReceiverStage(name string, integrations []notify.I return fs } +// getActiveReceiversMap returns all receivers that are in use by a route. +func (am *Alertmanager) getActiveReceiversMap(r *dispatch.Route) map[string]struct{} { + receiversMap := make(map[string]struct{}) + visitFunc := func(r *dispatch.Route) { + receiversMap[r.RouteOpts.Receiver] = struct{}{} + } + r.Walk(visitFunc) + + return receiversMap +} + func (am *Alertmanager) waitFunc() time.Duration { return time.Duration(am.peer.Position()) * am.peerTimeout } diff --git a/pkg/services/ngalert/notifier/alertmanager_test.go b/pkg/services/ngalert/notifier/alertmanager_test.go index 07adcaebbe5..63de5631b84 100644 --- a/pkg/services/ngalert/notifier/alertmanager_test.go +++ b/pkg/services/ngalert/notifier/alertmanager_test.go @@ -314,7 +314,7 @@ func TestPutAlert(t *testing.T) { t.Run(c.title, func(t *testing.T) { r := prometheus.NewRegistry() am.marker = types.NewMarker(r) - am.alerts, err = mem.NewAlerts(context.Background(), am.marker, 15*time.Minute, nil, am.logger) + am.alerts, err = mem.NewAlerts(context.Background(), am.marker, 15*time.Minute, nil, am.logger, r) require.NoError(t, err) alerts := []*types.Alert{} diff --git a/pkg/services/ngalert/notifier/multiorg_alertmanager.go b/pkg/services/ngalert/notifier/multiorg_alertmanager.go index dd07aba3785..5d060233cf2 100644 --- a/pkg/services/ngalert/notifier/multiorg_alertmanager.go +++ b/pkg/services/ngalert/notifier/multiorg_alertmanager.go @@ -85,7 +85,7 @@ func NewMultiOrgAlertmanager(cfg *setting.Cfg, configStore AlertingStore, orgSto true, cfg.UnifiedAlerting.HAPushPullInterval, cfg.UnifiedAlerting.HAGossipInterval, - cluster.DefaultTcpTimeout, + cluster.DefaultTCPTimeout, cluster.DefaultProbeTimeout, cluster.DefaultProbeInterval, nil, diff --git a/pkg/services/ngalert/notifier/receivers.go b/pkg/services/ngalert/notifier/receivers.go index 1b60a72793c..0e705cf0ff3 100644 --- a/pkg/services/ngalert/notifier/receivers.go +++ b/pkg/services/ngalert/notifier/receivers.go @@ -8,7 +8,9 @@ import ( "sort" "time" + "github.com/go-openapi/strfmt" apimodels "github.com/grafana/grafana/pkg/services/ngalert/api/tooling/definitions" + "github.com/prometheus/alertmanager/api/v2/models" "github.com/prometheus/alertmanager/notify" "github.com/prometheus/alertmanager/types" "github.com/prometheus/common/model" @@ -197,6 +199,44 @@ func (am *Alertmanager) TestReceivers(ctx context.Context, c apimodels.TestRecei return newTestReceiversResult(testAlert, append(invalid, results...), now), nil } +func (am *Alertmanager) GetReceivers(ctx context.Context) apimodels.Receivers { + am.reloadConfigMtx.RLock() + defer am.reloadConfigMtx.RUnlock() + + var apiReceivers apimodels.Receivers + for _, rcv := range am.receivers { + // Build integrations slice for each receiver. + var integrations []*models.Integration + for _, integration := range rcv.Integrations() { + name := integration.Name() + sendResolved := integration.SendResolved() + ts, d, err := integration.GetReport() + integrations = append(integrations, &apimodels.Integration{ + Name: &name, + SendResolved: &sendResolved, + LastNotifyAttempt: strfmt.DateTime(ts), + LastNotifyAttemptDuration: d.String(), + LastNotifyAttemptError: func() string { + if err != nil { + return err.Error() + } + return "" + }(), + }) + } + + active := rcv.Active() + name := rcv.Name() + apiReceivers = append(apiReceivers, apimodels.Receiver{ + Active: &active, + Integrations: integrations, + Name: &name, + }) + } + + return apiReceivers +} + func newTestAlert(c apimodels.TestReceiversConfigBodyParams, startsAt, updatedAt time.Time) types.Alert { var ( defaultAnnotations = model.LabelSet{ diff --git a/pkg/tests/api/alerting/api_notification_channel_test.go b/pkg/tests/api/alerting/api_notification_channel_test.go index b49295b3717..051697e26ba 100644 --- a/pkg/tests/api/alerting/api_notification_channel_test.go +++ b/pkg/tests/api/alerting/api_notification_channel_test.go @@ -728,7 +728,7 @@ func TestNotificationChannels(t *testing.T) { channels.GetBoundary = func() string { return "abcd" } env.NotificationService.EmailHandlerSync = mockEmail.sendEmailCommandHandlerSync - // As we are using a NotificationService mock here, but he test expects real NotificationService - + // As we are using a NotificationService mock here, but the test expects real NotificationService - // we try to issue a real POST request here env.NotificationService.WebhookHandler = func(_ context.Context, cmd *models.SendWebhookSync) error { if res, err := http.Post(cmd.Url, "", strings.NewReader(cmd.Body)); err == nil { @@ -770,11 +770,31 @@ func TestNotificationChannels(t *testing.T) { re := regexp.MustCompile(`"uid":"([\w|-]*)"`) e := getExpAlertmanagerConfigFromAPI(mockChannel.server.Addr) require.JSONEq(t, e, string(re.ReplaceAll([]byte(b), []byte(`"uid":""`)))) + + // Check the receivers API. No errors nor attempts to notify should be registered. + receiversURL := fmt.Sprintf("http://grafana:password@%s/api/alertmanager/grafana/config/api/v1/receivers", grafanaListedAddr) + resp = getRequest(t, receiversURL, http.StatusOK) // nolint + b = getBody(t, resp.Body) + + var receivers apimodels.Receivers + err := json.Unmarshal([]byte(b), &receivers) + require.NoError(t, err) + for _, rcv := range receivers { + require.NotNil(t, rcv.Name) + require.NotNil(t, rcv.Active) + require.NotEmpty(t, rcv.Integrations) + for _, integration := range rcv.Integrations { + require.NotNil(t, integration.Name) + require.NotNil(t, integration.SendResolved) + require.Equal(t, "", integration.LastNotifyAttemptError) + require.Zero(t, integration.LastNotifyAttempt) + require.Equal(t, "0s", integration.LastNotifyAttemptDuration) + } + } } { // Create rules that will fire as quickly as possible - originalFunction := store.GenerateNewAlertRuleUID t.Cleanup(func() { store.GenerateNewAlertRuleUID = originalFunction @@ -791,6 +811,7 @@ func TestNotificationChannels(t *testing.T) { // Eventually, we'll get all the desired alerts. // nolint:gosec require.Eventually(t, func() bool { + // TODO: not waiting for the failed notifications, flaky test? return mockChannel.totalNotifications() >= len(nonEmailAlertNames) && len(mockEmail.emails) >= 1 }, 30*time.Second, 1*time.Second) @@ -798,6 +819,60 @@ func TestNotificationChannels(t *testing.T) { require.Equal(t, expEmailNotifications, mockEmail.emails) require.NoError(t, mockChannel.Close()) + // Check the receivers API. Errors and inactive receivers are expected, attempts to deliver notifications should be registered. + receiversURL := fmt.Sprintf("http://grafana:password@%s/api/alertmanager/grafana/config/api/v1/receivers", grafanaListedAddr) + resp := getRequest(t, receiversURL, http.StatusOK) // nolint + b := getBody(t, resp.Body) + + var receivers apimodels.Receivers + err := json.Unmarshal([]byte(b), &receivers) + require.NoError(t, err) + for _, rcv := range receivers { + var expActive bool + if _, ok := expInactiveReceivers[*rcv.Name]; !ok { + expActive = true + } + var expErr bool + if _, ok := expNotificationErrors[*rcv.Name]; ok { + expErr = true + } + + require.NotNil(t, rcv.Name) + require.NotNil(t, rcv.Active) + require.NotEmpty(t, rcv.Integrations) + if expActive { + require.True(t, *rcv.Active) + } + + // We don't have test alerts for the default notifier, continue iterating. + if *rcv.Name == "grafana-default-email" { + continue + } + + for _, integration := range rcv.Integrations { + require.NotNil(t, integration.Name) + require.NotNil(t, integration.SendResolved) + + // If the receiver is not active, no attempts to send notifications should be registered. + if expActive { + require.NotZero(t, integration.LastNotifyAttempt) + require.NotEqual(t, "0s", integration.LastNotifyAttemptDuration) + } else { + require.Zero(t, integration.LastNotifyAttempt) + require.Equal(t, "0s", integration.LastNotifyAttemptDuration) + } + + // Check whether we're expecting an error on this integration. + if expErr { + for _, integration := range rcv.Integrations { + require.Equal(t, expNotificationErrors[*rcv.Name], integration.LastNotifyAttemptError) + } + } else { + require.Equal(t, "", integration.LastNotifyAttemptError) + } + } + } + { // Delete the configuration; so it returns the default configuration. u := fmt.Sprintf("http://grafana:password@%s/api/alertmanager/grafana/config/api/v1/alerts", grafanaListedAddr) @@ -859,6 +934,10 @@ var emailAlertNames = []string{ "EmailAlert", } +var failedAlertNames = []string{ + "SlackFailedAlert", +} + func getRulesConfig(t *testing.T) string { t.Helper() interval, err := model.ParseDuration("10s") @@ -869,7 +948,10 @@ func getRulesConfig(t *testing.T) string { } // Create rules that will fire as quickly as possible for all the routes. - for _, alertName := range append(nonEmailAlertNames, emailAlertNames...) { + rulesToCreate := append(nonEmailAlertNames, emailAlertNames...) + rulesToCreate = append(rulesToCreate, failedAlertNames...) + + for _, alertName := range rulesToCreate { rules.Rules = append(rules.Rules, apimodels.PostableExtendedRuleNode{ GrafanaManagedAlert: &apimodels.PostableGrafanaRule{ Title: alertName, @@ -1124,6 +1206,26 @@ const alertmanagerConfig = ` "alertname=\"SlackAlert2\"" ] }, + { + "receiver": "slack_failed_recv", + "group_wait": "0s", + "group_by": [ + "alertname" + ], + "matchers": [ + "alertname=\"SlackFailedAlert\"" + ] + }, + { + "receiver": "slack_inactive_recv", + "group_wait": "0s", + "group_by": [ + "alertname" + ], + "matchers": [ + "alertname=\"Inactive\"" + ] + }, { "receiver": "pagerduty_recv", "group_wait": "0s", @@ -1273,7 +1375,7 @@ const alertmanagerConfig = ` "matchers": [ "alertname=\"TelegramAlert\"" ] - } + } ] }, "receivers": [ @@ -1483,7 +1585,7 @@ const alertmanagerConfig = ` } ] }, - { + { "name": "slack_recv1", "grafana_managed_receiver_configs": [ { @@ -1506,8 +1608,8 @@ const alertmanagerConfig = ` } } ] - }, - { + }, + { "name": "slack_recv2", "grafana_managed_receiver_configs": [ { @@ -1523,6 +1625,39 @@ const alertmanagerConfig = ` } } ] + }, + { + "name": "slack_failed_recv", + "grafana_managed_receiver_configs": [ + { + "name": "slack_failed_test", + "type": "slack", + "settings": { + "recipient": "#test-channel", + "username": "test", + "text": "Integration Test" + }, + "secureSettings": { + "url": "htt://127.0.0.1:8080/slack_failed_recv/slack_failed_test" + } + } + ] + }, + { + "name": "slack_inactive_recv", + "grafana_managed_receiver_configs": [ + { + "name": "inactive", + "type": "slack", + "settings": { + "recipient": "#inactive-channel", + "username": "Integration Test" + }, + "secureSettings": { + "token": "myfullysecrettoken" + } + } + ] }, { "name": "pagerduty_recv", @@ -1589,7 +1724,26 @@ var expAlertmanagerConfigFromAPI = ` "alertname=\"SlackAlert2\"" ] }, - { + { + "receiver": "slack_failed_recv", + "group_wait": "0s", + "group_by": [ + "alertname" + ], + "matchers": [ + "alertname=\"SlackFailedAlert\"" + ] + }, + { + "receiver": "slack_inactive_recv", + "group_wait": "0s", + "group_by": [ + "alertname" + ], + "matchers": [ + "alertname=\"Inactive\"" + ] + }, { "receiver": "pagerduty_recv", "group_wait": "0s", "group_by": [ @@ -1738,7 +1892,7 @@ var expAlertmanagerConfigFromAPI = ` "matchers": [ "alertname=\"TelegramAlert\"" ] - } + } ] }, "templates": null, @@ -1986,7 +2140,7 @@ var expAlertmanagerConfigFromAPI = ` } ] }, - { + { "name": "slack_recv1", "grafana_managed_receiver_configs": [ { @@ -2031,6 +2185,43 @@ var expAlertmanagerConfigFromAPI = ` } ] }, + { + "name": "slack_failed_recv", + "grafana_managed_receiver_configs": [ + { + "uid": "", + "name": "slack_failed_test", + "type": "slack", + "disableResolveMessage": false, + "settings": { + "recipient": "#test-channel", + "username": "test", + "text": "Integration Test" + }, + "secureFields": { + "url": true + } + } + ] + }, + { + "name": "slack_inactive_recv", + "grafana_managed_receiver_configs": [ + { + "uid": "", + "name": "inactive", + "type": "slack", + "disableResolveMessage": false, + "settings": { + "recipient": "#inactive-channel", + "username": "Integration Test" + }, + "secureFields": { + "token": true + } + } + ] + }, { "name": "pagerduty_recv", "grafana_managed_receiver_configs": [ @@ -2435,3 +2626,13 @@ var expNonEmailNotifications = map[string][]string{ ]`, }, } + +// expNotificationErrors maps a receiver name with its expected error string. +var expNotificationErrors = map[string]string{ + "slack_failed_recv": `Post "htt://127.0.0.1:8080/slack_failed_recv/slack_failed_test": unsupported protocol scheme "htt"`, +} + +// expNotificationErrors maps a receiver name with its expected error string. +var expInactiveReceivers = map[string]struct{}{ + "slack_inactive_recv": {}, +} From 0d348dc0b166e8ed8c687148e3abba5ccf4735ef Mon Sep 17 00:00:00 2001 From: Virginia Cepeda Date: Mon, 3 Oct 2022 11:00:19 -0300 Subject: [PATCH 030/135] Alerting: log alert rule creation and clicking state filters (#55698) * Add messages for new trackings * Track clicking on alert state filters * Track creating alert rule from panel * Track creating alert rule from scratch * Track on success and when cancelling a rule creation --- .../features/alerting/unified/Analytics.ts | 5 ++ .../alerting/unified/RuleList.test.tsx | 43 +++++++++++++- .../features/alerting/unified/RuleList.tsx | 3 + .../NewRuleFromPanelButton.test.tsx | 56 +++++++++++++++++++ .../NewRuleFromPanelButton.tsx | 10 +++- .../components/rule-editor/AlertRuleForm.tsx | 10 +++- .../unified/components/rules/NoRulesCTA.tsx | 3 + .../components/rules/RulesFilter.test.tsx | 40 +++++++++++++ .../unified/components/rules/RulesFilter.tsx | 4 +- .../alerting/unified/state/actions.ts | 6 +- 10 files changed, 174 insertions(+), 6 deletions(-) create mode 100644 public/app/features/alerting/unified/components/panel-alerts-tab/NewRuleFromPanelButton.test.tsx create mode 100644 public/app/features/alerting/unified/components/rules/RulesFilter.test.tsx diff --git a/public/app/features/alerting/unified/Analytics.ts b/public/app/features/alerting/unified/Analytics.ts index 586617926a8..d25dd758577 100644 --- a/public/app/features/alerting/unified/Analytics.ts +++ b/public/app/features/alerting/unified/Analytics.ts @@ -2,4 +2,9 @@ export const LogMessages = { filterByLabel: 'filtering alert instances by label', loadedList: 'loaded Alert Rules list', leavingRuleGroupEdit: 'leaving rule group edit without saving', + alertRuleFromPanel: 'creating alert rule from panel', + alertRuleFromScratch: 'creating alert rule from scratch', + clickingAlertStateFilters: 'clicking alert state filters', + cancelSavingAlertRule: 'user canceled alert rule creation', + successSavingAlertRule: 'alert rule saved successfully', }; diff --git a/public/app/features/alerting/unified/RuleList.test.tsx b/public/app/features/alerting/unified/RuleList.test.tsx index 1e0cdc8ffce..66fd221e9cf 100644 --- a/public/app/features/alerting/unified/RuleList.test.tsx +++ b/public/app/features/alerting/unified/RuleList.test.tsx @@ -1,17 +1,18 @@ import { SerializedError } from '@reduxjs/toolkit'; -import { render, waitFor } from '@testing-library/react'; +import { render, waitFor, screen } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; import React from 'react'; import { Provider } from 'react-redux'; import { Router } from 'react-router-dom'; import { byLabelText, byRole, byTestId, byText } from 'testing-library-selector'; -import { locationService, setDataSourceSrv } from '@grafana/runtime'; +import { locationService, setDataSourceSrv, logInfo } from '@grafana/runtime'; import { contextSrv } from 'app/core/services/context_srv'; import { configureStore } from 'app/store/configureStore'; import { AccessControlAction } from 'app/types'; import { PromAlertingRuleState, PromApplication } from 'app/types/unified-alerting-dto'; +import { LogMessages } from './Analytics'; import RuleList from './RuleList'; import { discoverFeatures } from './api/buildInfo'; import { fetchRules } from './api/prometheus'; @@ -44,6 +45,13 @@ jest.mock('app/core/core', () => ({ emit: () => {}, }, })); +jest.mock('@grafana/runtime', () => { + const original = jest.requireActual('@grafana/runtime'); + return { + ...original, + logInfo: jest.fn(), + }; +}); jest.spyOn(config, 'getAllDataSources'); @@ -745,4 +753,35 @@ describe('RuleList', () => { }); }); }); + + describe('Analytics', () => { + it('Sends log info when creating an alert rule from a scratch', async () => { + enableRBAC(); + + grantUserPermissions([ + AccessControlAction.FoldersRead, + AccessControlAction.AlertingRuleCreate, + AccessControlAction.AlertingRuleRead, + ]); + + mocks.getAllDataSourcesMock.mockReturnValue([]); + setDataSourceSrv(new MockDataSourceSrv({})); + mocks.api.fetchRules.mockResolvedValue([]); + mocks.api.fetchRulerRules.mockResolvedValue({}); + + renderRuleList(); + + await waitFor(() => expect(mocks.api.fetchRules).toHaveBeenCalledTimes(1)); + + const button = screen.getByText('New alert rule'); + + button.addEventListener('click', (event) => event.preventDefault(), false); + + expect(button).toBeEnabled(); + + await userEvent.click(button); + + expect(logInfo).toHaveBeenCalledWith(LogMessages.alertRuleFromScratch); + }); + }); }); diff --git a/public/app/features/alerting/unified/RuleList.tsx b/public/app/features/alerting/unified/RuleList.tsx index fc3ee1c17e4..9a62f75af33 100644 --- a/public/app/features/alerting/unified/RuleList.tsx +++ b/public/app/features/alerting/unified/RuleList.tsx @@ -3,10 +3,12 @@ import React, { useEffect, useMemo, useState } from 'react'; import { useLocation } from 'react-router-dom'; import { GrafanaTheme2, urlUtil } from '@grafana/data'; +import { logInfo } from '@grafana/runtime'; import { Button, LinkButton, useStyles2, withErrorBoundary } from '@grafana/ui'; import { useQueryParams } from 'app/core/hooks/useQueryParams'; import { useDispatch } from 'app/types'; +import { LogMessages } from './Analytics'; import { AlertingPageWrapper } from './components/AlertingPageWrapper'; import { NoRulesSplash } from './components/rules/NoRulesCTA'; import { RuleListErrors } from './components/rules/RuleListErrors'; @@ -101,6 +103,7 @@ const RuleList = withErrorBoundary( logInfo(LogMessages.alertRuleFromScratch)} > New alert rule diff --git a/public/app/features/alerting/unified/components/panel-alerts-tab/NewRuleFromPanelButton.test.tsx b/public/app/features/alerting/unified/components/panel-alerts-tab/NewRuleFromPanelButton.test.tsx new file mode 100644 index 00000000000..9950ba64363 --- /dev/null +++ b/public/app/features/alerting/unified/components/panel-alerts-tab/NewRuleFromPanelButton.test.tsx @@ -0,0 +1,56 @@ +import { render, screen } from '@testing-library/react'; +import userEvent from '@testing-library/user-event'; +import React from 'react'; + +import { logInfo } from '@grafana/runtime'; +import { DashboardModel, PanelModel } from 'app/features/dashboard/state'; + +import { LogMessages } from '../../Analytics'; + +import { NewRuleFromPanelButton } from './NewRuleFromPanelButton'; + +jest.mock('app/types', () => { + const original = jest.requireActual('app/types'); + return { + ...original, + useSelector: jest.fn(), + }; +}); + +jest.mock('react-router-dom', () => ({ + useLocation: () => ({ + pathname: 'localhost:3000/example/path', + }), +})); + +jest.mock('@grafana/runtime', () => { + const original = jest.requireActual('@grafana/runtime'); + return { + ...original, + logInfo: jest.fn(), + }; +}); + +jest.mock('react-use', () => ({ + useAsync: () => ({ loading: false, value: {} }), +})); + +describe('Analytics', () => { + it('Sends log info when creating an alert rule from a panel', async () => { + const panel = new PanelModel({ + id: 123, + }); + const dashboard = new DashboardModel({ + id: 1, + }); + render(); + + const button = screen.getByText('Create alert rule from this panel'); + + button.addEventListener('click', (event) => event.preventDefault(), false); + + await userEvent.click(button); + + expect(logInfo).toHaveBeenCalledWith(LogMessages.alertRuleFromPanel); + }); +}); diff --git a/public/app/features/alerting/unified/components/panel-alerts-tab/NewRuleFromPanelButton.tsx b/public/app/features/alerting/unified/components/panel-alerts-tab/NewRuleFromPanelButton.tsx index 20d394bbb65..51ace2c47d6 100644 --- a/public/app/features/alerting/unified/components/panel-alerts-tab/NewRuleFromPanelButton.tsx +++ b/public/app/features/alerting/unified/components/panel-alerts-tab/NewRuleFromPanelButton.tsx @@ -3,10 +3,12 @@ import { useLocation } from 'react-router-dom'; import { useAsync } from 'react-use'; import { urlUtil } from '@grafana/data'; +import { logInfo } from '@grafana/runtime'; import { Alert, Button, LinkButton } from '@grafana/ui'; import { DashboardModel, PanelModel } from 'app/features/dashboard/state'; import { useSelector } from 'app/types'; +import { LogMessages } from '../../Analytics'; import { panelToRuleFormValues } from '../../utils/rule-form'; interface Props { @@ -46,7 +48,13 @@ export const NewRuleFromPanelButton: FC = ({ dashboard, panel, className }); return ( - + logInfo(LogMessages.alertRuleFromPanel)} + href={ruleFormUrl} + className={className} + data-testid="create-alert-rule-button" + > Create alert rule from this panel ); diff --git a/public/app/features/alerting/unified/components/rule-editor/AlertRuleForm.tsx b/public/app/features/alerting/unified/components/rule-editor/AlertRuleForm.tsx index 7c8a0d91469..99959162b39 100644 --- a/public/app/features/alerting/unified/components/rule-editor/AlertRuleForm.tsx +++ b/public/app/features/alerting/unified/components/rule-editor/AlertRuleForm.tsx @@ -4,6 +4,7 @@ import { FormProvider, useForm, UseFormWatch } from 'react-hook-form'; import { Link } from 'react-router-dom'; import { GrafanaTheme2 } from '@grafana/data'; +import { logInfo } from '@grafana/runtime'; import { Button, ConfirmModal, CustomScrollbar, PageToolbar, Spinner, useStyles2 } from '@grafana/ui'; import { useAppNotification } from 'app/core/copy/appNotification'; import { useCleanup } from 'app/core/hooks/useCleanup'; @@ -11,6 +12,7 @@ import { useQueryParams } from 'app/core/hooks/useQueryParams'; import { useDispatch } from 'app/types'; import { RuleWithLocation } from 'app/types/unified-alerting'; +import { LogMessages } from '../../Analytics'; import { useUnifiedAlertingSelector } from '../../hooks/useUnifiedAlertingSelector'; import { deleteRuleAction, saveRuleFormAction } from '../../state/actions'; import { RuleFormType, RuleFormValues } from '../../types/rule-form'; @@ -110,7 +112,13 @@ export const AlertRuleForm: FC = ({ existing }) => {
e.preventDefault()} className={styles.form}> - diff --git a/public/app/features/alerting/unified/components/rules/NoRulesCTA.tsx b/public/app/features/alerting/unified/components/rules/NoRulesCTA.tsx index b90632070f1..03ed69d6cf4 100644 --- a/public/app/features/alerting/unified/components/rules/NoRulesCTA.tsx +++ b/public/app/features/alerting/unified/components/rules/NoRulesCTA.tsx @@ -1,8 +1,10 @@ import React, { FC } from 'react'; +import { logInfo } from '@grafana/runtime'; import { CallToActionCard } from '@grafana/ui'; import EmptyListCTA from 'app/core/components/EmptyListCTA/EmptyListCTA'; +import { LogMessages } from '../../Analytics'; import { useRulesAccess } from '../../utils/accessControlHooks'; export const NoRulesSplash: FC = () => { @@ -19,6 +21,7 @@ export const NoRulesSplash: FC = () => { proTipLink="https://grafana.com/docs/" proTipLinkTitle="Learn more" proTipTarget="_blank" + onClick={() => logInfo(LogMessages.alertRuleFromScratch)} /> ); } diff --git a/public/app/features/alerting/unified/components/rules/RulesFilter.test.tsx b/public/app/features/alerting/unified/components/rules/RulesFilter.test.tsx new file mode 100644 index 00000000000..4f7b1877828 --- /dev/null +++ b/public/app/features/alerting/unified/components/rules/RulesFilter.test.tsx @@ -0,0 +1,40 @@ +import { render, screen } from '@testing-library/react'; +import userEvent from '@testing-library/user-event'; +import React from 'react'; + +import { logInfo } from '@grafana/runtime'; + +import { LogMessages } from '../../Analytics'; + +import RulesFilter from './RulesFilter'; + +jest.mock('@grafana/runtime', () => { + const original = jest.requireActual('@grafana/runtime'); + return { + ...original, + logInfo: jest.fn(), + DataSourcePicker: () => <>, + }; +}); + +jest.mock('react-router-dom', () => ({ + useLocation: () => ({ + pathname: 'localhost:3000/example/path', + }), +})); + +jest.mock('../../utils/misc', () => ({ + getFiltersFromUrlParams: jest.fn(() => ({ dataSource: {}, alertState: {}, queryString: '', ruleType: '' })), +})); + +describe('Analytics', () => { + it('Sends log info when clicking alert state filters', async () => { + render(); + + const button = screen.getByText('Pending'); + + await userEvent.click(button); + + expect(logInfo).toHaveBeenCalledWith(LogMessages.clickingAlertStateFilters); + }); +}); diff --git a/public/app/features/alerting/unified/components/rules/RulesFilter.tsx b/public/app/features/alerting/unified/components/rules/RulesFilter.tsx index 5b2d767c042..7a85d505bc4 100644 --- a/public/app/features/alerting/unified/components/rules/RulesFilter.tsx +++ b/public/app/features/alerting/unified/components/rules/RulesFilter.tsx @@ -3,11 +3,12 @@ import { debounce } from 'lodash'; import React, { FormEvent, useState } from 'react'; import { DataSourceInstanceSettings, GrafanaTheme, SelectableValue } from '@grafana/data'; -import { DataSourcePicker } from '@grafana/runtime'; +import { DataSourcePicker, logInfo } from '@grafana/runtime'; import { Button, Field, Icon, Input, Label, RadioButtonGroup, Stack, Tooltip, useStyles } from '@grafana/ui'; import { useQueryParams } from 'app/core/hooks/useQueryParams'; import { PromAlertingRuleState, PromRuleType } from 'app/types/unified-alerting-dto'; +import { LogMessages } from '../../Analytics'; import { getFiltersFromUrlParams } from '../../utils/misc'; import { alertStateToReadable } from '../../utils/rules'; @@ -69,6 +70,7 @@ const RulesFilter = () => { }, 600); const handleAlertStateChange = (value: string) => { + logInfo(LogMessages.clickingAlertStateFilters); setQueryParams({ alertState: value }); }; diff --git a/public/app/features/alerting/unified/state/actions.ts b/public/app/features/alerting/unified/state/actions.ts index 3043cfede1e..8d3d59a98a2 100644 --- a/public/app/features/alerting/unified/state/actions.ts +++ b/public/app/features/alerting/unified/state/actions.ts @@ -1,7 +1,7 @@ import { createAsyncThunk } from '@reduxjs/toolkit'; import { isEmpty } from 'lodash'; -import { locationService } from '@grafana/runtime'; +import { locationService, logInfo } from '@grafana/runtime'; import { AlertmanagerAlert, AlertManagerCortexConfig, @@ -32,6 +32,7 @@ import { } from 'app/types/unified-alerting-dto'; import { backendSrv } from '../../../../core/services/backend_srv'; +import { LogMessages } from '../Analytics'; import { addAlertManagers, createOrUpdateSilence, @@ -422,6 +423,9 @@ export const saveRuleFormAction = createAsyncThunk( } else { throw new Error('Unexpected rule form type'); } + + logInfo(LogMessages.successSavingAlertRule); + if (redirectOnSave) { locationService.push(redirectOnSave); } else { From 898450729186b0cf24ecb2e2d6ecfc57ac309d65 Mon Sep 17 00:00:00 2001 From: Ashley Harrison Date: Mon, 3 Oct 2022 15:05:19 +0100 Subject: [PATCH 031/135] Navigation: show breadcrumbs correctly when on the home page (#55759) * show breadcrumbs correctly when on the home page * adjust breadcrumb unit tests * update betterer * fix backend tests * update getSectionRoot to look at the home nav id * remove redundant setting of home dashboard * construct a home navmodelitem in the backend * fix cases when the feature toggle is off * fix unit test * fix more unit tests * refactor how buildBreadcrumbs works * use HOME_NAV_ID * move homeNav useSelector into NavToolbar * remove unnecesary cloneDeep * don't need locationUtil here * restore using getUrlForPartial in DashboardPage * special case for the editview query param * remove commented out code * add comment to clarify splice behaviour * slightly cleaner syntax --- pkg/api/dashboard.go | 1 - pkg/api/dashboard_test.go | 1 - pkg/api/dtos/dashboard.go | 1 - pkg/services/navtree/models.go | 3 +- pkg/services/navtree/navtreeimpl/navtree.go | 34 +++++- .../core/components/AppChrome/NavToolbar.tsx | 5 +- .../core/components/Breadcrumbs/utils.test.ts | 100 ++++++++++++++---- .../app/core/components/Breadcrumbs/utils.ts | 29 +++-- .../components/MegaMenu/MegaMenu.test.tsx | 1 - .../app/core/components/MegaMenu/MegaMenu.tsx | 15 +-- public/app/core/reducers/navModel.ts | 11 +- public/app/core/selectors/navModel.ts | 4 +- .../dashboard/containers/DashboardPage.tsx | 3 +- .../app/features/teams/TeamMembers.test.tsx | 1 + 14 files changed, 158 insertions(+), 51 deletions(-) diff --git a/pkg/api/dashboard.go b/pkg/api/dashboard.go index 40d865e3a99..a0cb5fe7732 100644 --- a/pkg/api/dashboard.go +++ b/pkg/api/dashboard.go @@ -538,7 +538,6 @@ func (hs *HTTPServer) GetHomeDashboard(c *models.ReqContext) response.Response { }() dash := dtos.DashboardFullWithMeta{} - dash.Meta.IsHome = true dash.Meta.CanEdit = c.SignedInUser.HasRole(org.RoleEditor) dash.Meta.FolderTitle = "General" dash.Dashboard = simplejson.New() diff --git a/pkg/api/dashboard_test.go b/pkg/api/dashboard_test.go index 09ec76b5e59..c41c9be06a6 100644 --- a/pkg/api/dashboard_test.go +++ b/pkg/api/dashboard_test.go @@ -78,7 +78,6 @@ func TestGetHomeDashboard(t *testing.T) { for _, tc := range tests { t.Run(tc.name, func(t *testing.T) { dash := dtos.DashboardFullWithMeta{} - dash.Meta.IsHome = true dash.Meta.FolderTitle = "General" homeDashJSON, err := os.ReadFile(tc.expectedDashboardPath) diff --git a/pkg/api/dtos/dashboard.go b/pkg/api/dtos/dashboard.go index aaf43fc59cd..3918374cf7f 100644 --- a/pkg/api/dtos/dashboard.go +++ b/pkg/api/dtos/dashboard.go @@ -8,7 +8,6 @@ import ( type DashboardMeta struct { IsStarred bool `json:"isStarred,omitempty"` - IsHome bool `json:"isHome,omitempty"` IsSnapshot bool `json:"isSnapshot,omitempty"` Type string `json:"type,omitempty"` CanSave bool `json:"canSave"` diff --git a/pkg/services/navtree/models.go b/pkg/services/navtree/models.go index be3bb89b889..a1cd112313a 100644 --- a/pkg/services/navtree/models.go +++ b/pkg/services/navtree/models.go @@ -11,7 +11,8 @@ const ( // are negative to ensure that the default items are placed above // any items with default weight. - WeightSavedItems = (iota - 20) * 100 + WeightHome = (iota - 20) * 100 + WeightSavedItems WeightCreate WeightDashboard WeightExplore diff --git a/pkg/services/navtree/navtreeimpl/navtree.go b/pkg/services/navtree/navtreeimpl/navtree.go index 888f7d29b92..c280fa05e9e 100644 --- a/pkg/services/navtree/navtreeimpl/navtree.go +++ b/pkg/services/navtree/navtreeimpl/navtree.go @@ -69,8 +69,12 @@ func (s *ServiceImpl) GetNavTree(c *models.ReqContext, hasEditPerm bool, prefs * hasAccess := ac.HasAccess(s.accessControl, c) treeRoot := &navtree.NavTreeRoot{} + if s.features.IsEnabled(featuremgmt.FlagTopnav) { + treeRoot.AddSection(s.getHomeNode(c, prefs)) + } + if hasAccess(ac.ReqSignedIn, ac.EvalPermission(dashboards.ActionDashboardsRead)) { - starredItemsLinks, err := s.buildStarredItemsNavLinks(c, prefs) + starredItemsLinks, err := s.buildStarredItemsNavLinks(c) if err != nil { return nil, err } @@ -186,6 +190,32 @@ func (s *ServiceImpl) GetNavTree(c *models.ReqContext, hasEditPerm bool, prefs * return treeRoot, nil } +func (s *ServiceImpl) getHomeNode(c *models.ReqContext, prefs *pref.Preference) *navtree.NavLink { + homeUrl := s.cfg.AppSubURL + "/" + homePage := s.cfg.HomePage + + if prefs.HomeDashboardID == 0 && len(homePage) > 0 { + homeUrl = homePage + } + + if prefs.HomeDashboardID != 0 { + slugQuery := models.GetDashboardRefByIdQuery{Id: prefs.HomeDashboardID} + err := s.dashboardService.GetDashboardUIDById(c.Req.Context(), &slugQuery) + if err == nil { + homeUrl = models.GetDashboardUrl(slugQuery.Result.Uid, slugQuery.Result.Slug) + } + } + + return &navtree.NavLink{ + Text: "Home", + Id: "home", + Url: homeUrl, + Icon: "home-alt", + Section: navtree.NavSectionCore, + SortWeight: navtree.WeightHome, + } +} + func (s *ServiceImpl) addHelpLinks(treeRoot *navtree.NavTreeRoot, c *models.ReqContext) { if setting.HelpEnabled { helpVersion := fmt.Sprintf(`%s v%s (%s)`, setting.ApplicationName, setting.BuildVersion, setting.BuildCommit) @@ -256,7 +286,7 @@ func (s *ServiceImpl) getProfileNode(c *models.ReqContext) *navtree.NavLink { } } -func (s *ServiceImpl) buildStarredItemsNavLinks(c *models.ReqContext, prefs *pref.Preference) ([]*navtree.NavLink, error) { +func (s *ServiceImpl) buildStarredItemsNavLinks(c *models.ReqContext) ([]*navtree.NavLink, error) { starredItemsChildNavs := []*navtree.NavLink{} query := star.GetUserStarsQuery{ diff --git a/public/app/core/components/AppChrome/NavToolbar.tsx b/public/app/core/components/AppChrome/NavToolbar.tsx index ef4ead80e06..12c4c46d481 100644 --- a/public/app/core/components/AppChrome/NavToolbar.tsx +++ b/public/app/core/components/AppChrome/NavToolbar.tsx @@ -3,6 +3,8 @@ import React from 'react'; import { GrafanaTheme2, NavModelItem } from '@grafana/data'; import { Icon, IconButton, ToolbarButton, useStyles2 } from '@grafana/ui'; +import { HOME_NAV_ID } from 'app/core/reducers/navModel'; +import { useSelector } from 'app/types'; import { Breadcrumbs } from '../Breadcrumbs/Breadcrumbs'; import { buildBreadcrumbs } from '../Breadcrumbs/utils'; @@ -29,8 +31,9 @@ export function NavToolbar({ onToggleSearchBar, onToggleKioskMode, }: Props) { + const homeNav = useSelector((state) => state.navIndex)[HOME_NAV_ID]; const styles = useStyles2(getStyles); - const breadcrumbs = buildBreadcrumbs(sectionNav, pageNav); + const breadcrumbs = buildBreadcrumbs(homeNav, sectionNav, pageNav); return (
diff --git a/public/app/core/components/Breadcrumbs/utils.test.ts b/public/app/core/components/Breadcrumbs/utils.test.ts index 2c9fa635af3..c84ca5d0c6d 100644 --- a/public/app/core/components/Breadcrumbs/utils.test.ts +++ b/public/app/core/components/Breadcrumbs/utils.test.ts @@ -2,26 +2,20 @@ import { NavModelItem } from '@grafana/data'; import { buildBreadcrumbs } from './utils'; +const mockHomeNav: NavModelItem = { + text: 'Home', + url: '/home', + id: 'home', +}; + describe('breadcrumb utils', () => { describe('buildBreadcrumbs', () => { - it('includes the home breadcrumb at the root', () => { - const sectionNav: NavModelItem = { - text: 'My section', - url: '/my-section', - }; - const result = buildBreadcrumbs(sectionNav); - expect(result[0]).toEqual({ href: '/', text: 'Home' }); - }); - it('includes breadcrumbs for the section nav', () => { const sectionNav: NavModelItem = { text: 'My section', url: '/my-section', }; - expect(buildBreadcrumbs(sectionNav)).toEqual([ - { href: '/', text: 'Home' }, - { text: 'My section', href: '/my-section' }, - ]); + expect(buildBreadcrumbs(mockHomeNav, sectionNav)).toEqual([{ text: 'My section', href: '/my-section' }]); }); it('includes breadcrumbs for the page nav', () => { @@ -34,8 +28,7 @@ describe('breadcrumb utils', () => { text: 'My page', url: '/my-page', }; - expect(buildBreadcrumbs(sectionNav, pageNav)).toEqual([ - { href: '/', text: 'Home' }, + expect(buildBreadcrumbs(mockHomeNav, sectionNav, pageNav)).toEqual([ { text: 'My section', href: '/my-section' }, { text: 'My page', href: '/my-page' }, ]); @@ -50,8 +43,7 @@ describe('breadcrumb utils', () => { url: '/my-parent-section', }, }; - expect(buildBreadcrumbs(sectionNav)).toEqual([ - { href: '/', text: 'Home' }, + expect(buildBreadcrumbs(mockHomeNav, sectionNav)).toEqual([ { text: 'My parent section', href: '/my-parent-section' }, { text: 'My section', href: '/my-section' }, ]); @@ -74,13 +66,83 @@ describe('breadcrumb utils', () => { url: '/my-parent-section', }, }; - expect(buildBreadcrumbs(sectionNav, pageNav)).toEqual([ - { href: '/', text: 'Home' }, + expect(buildBreadcrumbs(mockHomeNav, sectionNav, pageNav)).toEqual([ { text: 'My parent section', href: '/my-parent-section' }, { text: 'My section', href: '/my-section' }, { text: 'My parent page', href: '/my-parent-page' }, { text: 'My page', href: '/my-page' }, ]); }); + + it('shortcircuits if the home nav is found early', () => { + const pageNav: NavModelItem = { + text: 'My page', + url: '/my-page', + parentItem: { + text: 'My parent page', + url: '/home', + }, + }; + const sectionNav: NavModelItem = { + text: 'My section', + url: '/my-section', + parentItem: { + text: 'My parent section', + url: '/my-parent-section', + }, + }; + expect(buildBreadcrumbs(mockHomeNav, sectionNav, pageNav)).toEqual([ + { text: 'Home', href: '/home' }, + { text: 'My page', href: '/my-page' }, + ]); + }); + + it('matches the home nav ignoring query parameters', () => { + const pageNav: NavModelItem = { + text: 'My page', + url: '/my-page', + parentItem: { + text: 'My parent page', + url: '/home?orgId=1', + }, + }; + const sectionNav: NavModelItem = { + text: 'My section', + url: '/my-section', + parentItem: { + text: 'My parent section', + url: '/my-parent-section', + }, + }; + expect(buildBreadcrumbs(mockHomeNav, sectionNav, pageNav)).toEqual([ + { text: 'Home', href: '/home?orgId=1' }, + { text: 'My page', href: '/my-page' }, + ]); + }); + + it('does not match the home nav if the editview param is different', () => { + const pageNav: NavModelItem = { + text: 'My page', + url: '/my-page', + parentItem: { + text: 'My parent page', + url: '/home?orgId=1&editview=settings', + }, + }; + const sectionNav: NavModelItem = { + text: 'My section', + url: '/my-section', + parentItem: { + text: 'My parent section', + url: '/my-parent-section', + }, + }; + expect(buildBreadcrumbs(mockHomeNav, sectionNav, pageNav)).toEqual([ + { text: 'My parent section', href: '/my-parent-section' }, + { text: 'My section', href: '/my-section' }, + { text: 'My parent page', href: '/home?orgId=1&editview=settings' }, + { text: 'My page', href: '/my-page' }, + ]); + }); }); }); diff --git a/public/app/core/components/Breadcrumbs/utils.ts b/public/app/core/components/Breadcrumbs/utils.ts index a5ec30b3bc2..4c881c5d644 100644 --- a/public/app/core/components/Breadcrumbs/utils.ts +++ b/public/app/core/components/Breadcrumbs/utils.ts @@ -2,24 +2,37 @@ import { NavModelItem } from '@grafana/data'; import { Breadcrumb } from './types'; -export function buildBreadcrumbs(sectionNav: NavModelItem, pageNav?: NavModelItem) { - const crumbs: Breadcrumb[] = [{ href: '/', text: 'Home' }]; +export function buildBreadcrumbs(homeNav: NavModelItem, sectionNav: NavModelItem, pageNav?: NavModelItem) { + const crumbs: Breadcrumb[] = []; + let foundHome = false; function addCrumbs(node: NavModelItem) { + // construct the URL to match + // we want to ignore query params except for the editview query param + const urlSearchParams = new URLSearchParams(node.url?.split('?')[1]); + let urlToMatch = `${node.url?.split('?')[0]}`; + if (urlSearchParams.has('editview')) { + urlToMatch += `?editview=${urlSearchParams.get('editview')}`; + } + if (!foundHome && !node.hideFromBreadcrumbs) { + if (urlToMatch === homeNav.url) { + crumbs.unshift({ text: homeNav.text, href: node.url ?? '' }); + foundHome = true; + } else { + crumbs.unshift({ text: node.text, href: node.url ?? '' }); + } + } + if (node.parentItem) { addCrumbs(node.parentItem); } - - if (!node.hideFromBreadcrumbs) { - crumbs.push({ text: node.text, href: node.url ?? '' }); - } } - addCrumbs(sectionNav); - if (pageNav) { addCrumbs(pageNav); } + addCrumbs(sectionNav); + return crumbs; } diff --git a/public/app/core/components/MegaMenu/MegaMenu.test.tsx b/public/app/core/components/MegaMenu/MegaMenu.test.tsx index c8cdd3b531c..f06ae94136a 100644 --- a/public/app/core/components/MegaMenu/MegaMenu.test.tsx +++ b/public/app/core/components/MegaMenu/MegaMenu.test.tsx @@ -56,7 +56,6 @@ describe('MegaMenu', () => { setup(); expect(await screen.findByTestId('navbarmenu')).toBeInTheDocument(); - expect(await screen.findByRole('link', { name: 'Home' })).toBeInTheDocument(); expect(await screen.findByRole('link', { name: 'Section name' })).toBeInTheDocument(); }); diff --git a/public/app/core/components/MegaMenu/MegaMenu.tsx b/public/app/core/components/MegaMenu/MegaMenu.tsx index 4aa604a3175..a6115e7988f 100644 --- a/public/app/core/components/MegaMenu/MegaMenu.tsx +++ b/public/app/core/components/MegaMenu/MegaMenu.tsx @@ -3,8 +3,7 @@ import { cloneDeep } from 'lodash'; import React from 'react'; import { useLocation } from 'react-router-dom'; -import { GrafanaTheme2, NavModelItem, NavSection } from '@grafana/data'; -import { config } from '@grafana/runtime'; +import { GrafanaTheme2, NavSection } from '@grafana/data'; import { useTheme2 } from '@grafana/ui'; import { useSelector } from 'app/types'; @@ -23,16 +22,6 @@ export const MegaMenu = React.memo(({ onClose, searchBarHidden }) => { const styles = getStyles(theme); const location = useLocation(); - const homeItem: NavModelItem = enrichWithInteractionTracking( - { - id: 'home', - text: 'Home', - url: config.appSubUrl || '/', - icon: 'home-alt', - }, - true - ); - const navTree = cloneDeep(navBarTree); const coreItems = navTree @@ -46,7 +35,7 @@ export const MegaMenu = React.memo(({ onClose, searchBarHidden }) => { location ).map((item) => enrichWithInteractionTracking(item, true)); - const navItems = [homeItem, ...coreItems, ...pluginItems, ...configItems]; + const navItems = [...coreItems, ...pluginItems, ...configItems]; const activeItem = getActiveItem(navItems, location.pathname); diff --git a/public/app/core/reducers/navModel.ts b/public/app/core/reducers/navModel.ts index 16ec84daffb..b341176e2ad 100644 --- a/public/app/core/reducers/navModel.ts +++ b/public/app/core/reducers/navModel.ts @@ -4,10 +4,19 @@ import { cloneDeep } from 'lodash'; import { NavIndex, NavModel, NavModelItem } from '@grafana/data'; import config from 'app/core/config'; +export const HOME_NAV_ID = 'home'; + export function buildInitialState(): NavIndex { const navIndex: NavIndex = {}; const rootNodes = cloneDeep(config.bootData.navTree as NavModelItem[]); - buildNavIndex(navIndex, rootNodes); + const homeNav = rootNodes.find((node) => node.id === HOME_NAV_ID); + + // set home as parent for the rootNodes + buildNavIndex(navIndex, rootNodes, homeNav); + // remove circular parent reference on the home node + if (navIndex[HOME_NAV_ID]) { + delete navIndex[HOME_NAV_ID].parentItem; + } return navIndex; } diff --git a/public/app/core/selectors/navModel.ts b/public/app/core/selectors/navModel.ts index 53e4259eaea..67a345946ba 100644 --- a/public/app/core/selectors/navModel.ts +++ b/public/app/core/selectors/navModel.ts @@ -1,5 +1,7 @@ import { NavModel, NavModelItem, NavIndex } from '@grafana/data'; +import { HOME_NAV_ID } from '../reducers/navModel'; + const getNotFoundModel = (): NavModel => { const node: NavModelItem = { id: 'not-found', @@ -35,7 +37,7 @@ export const getNavModel = (navIndex: NavIndex, id: string, fallback?: NavModel, }; function getSectionRoot(node: NavModelItem): NavModelItem { - return node.parentItem ? getSectionRoot(node.parentItem) : node; + return node.parentItem && node.parentItem.id !== HOME_NAV_ID ? getSectionRoot(node.parentItem) : node; } function enrichNodeWithActiveState(node: NavModelItem, activeId: string): NavModelItem { diff --git a/public/app/features/dashboard/containers/DashboardPage.tsx b/public/app/features/dashboard/containers/DashboardPage.tsx index da6e4507253..885607f5a0b 100644 --- a/public/app/features/dashboard/containers/DashboardPage.tsx +++ b/public/app/features/dashboard/containers/DashboardPage.tsx @@ -2,7 +2,7 @@ import { cx } from '@emotion/css'; import React, { PureComponent } from 'react'; import { connect, ConnectedProps } from 'react-redux'; -import { locationUtil, NavModel, NavModelItem, TimeRange, PageLayoutType } from '@grafana/data'; +import { NavModel, NavModelItem, TimeRange, PageLayoutType, locationUtil } from '@grafana/data'; import { selectors } from '@grafana/e2e-selectors'; import { config, locationService } from '@grafana/runtime'; import { Themeable2, withTheme2 } from '@grafana/ui'; @@ -459,6 +459,7 @@ function updateStatePageNavFromProps(props: Props, state: State): State { ...pageNav, text: `${state.editPanel ? 'Edit' : 'View'} panel`, parentItem: pageNav, + url: undefined, }; } diff --git a/public/app/features/teams/TeamMembers.test.tsx b/public/app/features/teams/TeamMembers.test.tsx index 4900e8e3a57..16cc52c1a3b 100644 --- a/public/app/features/teams/TeamMembers.test.tsx +++ b/public/app/features/teams/TeamMembers.test.tsx @@ -21,6 +21,7 @@ jest.mock('@grafana/runtime', () => ({ get: jest.fn().mockResolvedValue([{ userId: 1, login: 'Test' }]), }), config: { + ...jest.requireActual('@grafana/runtime').config, bootData: { navTree: [], user: {} }, }, })); From 1c61c81dded808403ca88f2ecfff2000465f420a Mon Sep 17 00:00:00 2001 From: Todd Treece <360020+toddtreece@users.noreply.github.com> Date: Mon, 3 Oct 2022 10:26:54 -0400 Subject: [PATCH 032/135] Prometheus: Various buffered and streaming parsing fixes (#55941) --- pkg/tsdb/prometheus/buffered/framing_test.go | 76 +- .../prometheus/buffered/time_series_query.go | 6 +- .../buffered/time_series_query_test.go | 2 +- pkg/tsdb/prometheus/querydata/framing_test.go | 25 +- pkg/tsdb/prometheus/querydata/response.go | 10 +- .../prometheus/testdata/range_auto.query.json | 9 + .../testdata/range_auto.result.golden.jsonc | 679 ++++++++++++++++++ .../testdata/range_auto.result.json | 1 + ...ge_auto.result.streaming-wide.golden.jsonc | 676 +++++++++++++++++ ...nge_infinity.result.streaming.golden.jsonc | 86 --- ...ange_missing.result.streaming.golden.jsonc | 79 -- .../testdata/range_nan.result.golden.jsonc | 22 +- .../range_nan.result.streaming.golden.jsonc | 89 --- ...range_simple.result.streaming.golden.jsonc | 153 ---- 14 files changed, 1452 insertions(+), 461 deletions(-) create mode 100644 pkg/tsdb/prometheus/testdata/range_auto.query.json create mode 100644 pkg/tsdb/prometheus/testdata/range_auto.result.golden.jsonc create mode 100644 pkg/tsdb/prometheus/testdata/range_auto.result.json create mode 100644 pkg/tsdb/prometheus/testdata/range_auto.result.streaming-wide.golden.jsonc delete mode 100644 pkg/tsdb/prometheus/testdata/range_infinity.result.streaming.golden.jsonc delete mode 100644 pkg/tsdb/prometheus/testdata/range_missing.result.streaming.golden.jsonc delete mode 100644 pkg/tsdb/prometheus/testdata/range_nan.result.streaming.golden.jsonc delete mode 100644 pkg/tsdb/prometheus/testdata/range_simple.result.streaming.golden.jsonc diff --git a/pkg/tsdb/prometheus/buffered/framing_test.go b/pkg/tsdb/prometheus/buffered/framing_test.go index 6a1de191150..3f7927c6945 100644 --- a/pkg/tsdb/prometheus/buffered/framing_test.go +++ b/pkg/tsdb/prometheus/buffered/framing_test.go @@ -4,6 +4,7 @@ import ( "bytes" "context" "encoding/json" + "fmt" "io" "net/http" "os" @@ -34,6 +35,7 @@ func TestMatrixResponses(t *testing.T) { {name: "parse a simple matrix response with value missing steps", filepath: "range_missing"}, {name: "parse a response with Infinity", filepath: "range_infinity"}, {name: "parse a response with NaN", filepath: "range_nan"}, + {name: "parse a response with legendFormat __auto", filepath: "range_auto"}, } for _, test := range tt { @@ -94,39 +96,28 @@ func makeMockedApi(responseBytes []byte) (apiv1.API, error) { // struct here, because it has `time.time` and `time.duration` fields that // cannot be unmarshalled from JSON automatically. type storedPrometheusQuery struct { - RefId string - RangeQuery bool - Start int64 - End int64 - Step int64 - Expr string + RefId string + RangeQuery bool + Start int64 + End int64 + Step int64 + Expr string + LegendFormat string } -func loadStoredPrometheusQuery(fileName string) (PrometheusQuery, error) { +func loadStoredPrometheusQuery(fileName string) (storedPrometheusQuery, error) { //nolint:gosec bytes, err := os.ReadFile(fileName) if err != nil { - return PrometheusQuery{}, err + return storedPrometheusQuery{}, err } - var query storedPrometheusQuery - - err = json.Unmarshal(bytes, &query) - if err != nil { - return PrometheusQuery{}, err - } - - return PrometheusQuery{ - RefId: query.RefId, - RangeQuery: query.RangeQuery, - Start: time.Unix(query.Start, 0), - End: time.Unix(query.End, 0), - Step: time.Second * time.Duration(query.Step), - Expr: query.Expr, - }, nil + var sq storedPrometheusQuery + err = json.Unmarshal(bytes, &sq) + return sq, err } -func runQuery(response []byte, query PrometheusQuery) (*backend.QueryDataResponse, error) { +func runQuery(response []byte, sq storedPrometheusQuery) (*backend.QueryDataResponse, error) { api, err := makeMockedApi(response) if err != nil { return nil, err @@ -134,14 +125,47 @@ func runQuery(response []byte, query PrometheusQuery) (*backend.QueryDataRespons tracer := tracing.InitializeTracerForTest() - s := Buffered{ + qm := QueryModel{ + RangeQuery: sq.RangeQuery, + Expr: sq.Expr, + Interval: fmt.Sprintf("%ds", sq.Step), + IntervalMS: sq.Step * 1000, + LegendFormat: sq.LegendFormat, + } + + b := Buffered{ intervalCalculator: intervalv2.NewCalculator(), tracer: tracer, TimeInterval: "15s", log: &fakeLogger{}, client: api, } - return s.runQueries(context.Background(), []*PrometheusQuery{&query}) + + data, err := json.Marshal(&qm) + if err != nil { + return nil, err + } + + req := &backend.QueryDataRequest{ + Queries: []backend.DataQuery{ + { + TimeRange: backend.TimeRange{ + From: time.Unix(sq.Start, 0), + To: time.Unix(sq.End, 0), + }, + RefID: sq.RefId, + Interval: time.Second * time.Duration(sq.Step), + JSON: json.RawMessage(data), + }, + }, + } + + queries, err := b.parseTimeSeriesQuery(req) + if err != nil { + return nil, err + } + + return b.runQueries(context.Background(), queries) } type fakeLogger struct { diff --git a/pkg/tsdb/prometheus/buffered/time_series_query.go b/pkg/tsdb/prometheus/buffered/time_series_query.go index 4fed7d2f3f9..fd32879d8f4 100644 --- a/pkg/tsdb/prometheus/buffered/time_series_query.go +++ b/pkg/tsdb/prometheus/buffered/time_series_query.go @@ -379,11 +379,7 @@ func matrixToDataFrames(matrix model.Matrix, query *PrometheusQuery, frames data for i, k := range v.Values { timeField.Set(i, k.Timestamp.Time().UTC()) - value := float64(k.Value) - - if !math.IsNaN(value) { - valueField.Set(i, value) - } + valueField.Set(i, float64(k.Value)) } name := formatLegend(v.Metric, query) diff --git a/pkg/tsdb/prometheus/buffered/time_series_query_test.go b/pkg/tsdb/prometheus/buffered/time_series_query_test.go index f1fc8f2c64d..c54a5576353 100644 --- a/pkg/tsdb/prometheus/buffered/time_series_query_test.go +++ b/pkg/tsdb/prometheus/buffered/time_series_query_test.go @@ -836,7 +836,7 @@ func TestPrometheus_parseTimeSeriesResponse(t *testing.T) { require.NoError(t, err) require.Equal(t, "Value", res[0].Fields[1].Name) - require.Equal(t, float64(0), res[0].Fields[1].At(0)) + require.True(t, math.IsNaN(res[0].Fields[1].At(0).(float64))) }) t.Run("vector response should be parsed normally", func(t *testing.T) { diff --git a/pkg/tsdb/prometheus/querydata/framing_test.go b/pkg/tsdb/prometheus/querydata/framing_test.go index 0248fb1ecfe..b11cc81bdba 100644 --- a/pkg/tsdb/prometheus/querydata/framing_test.go +++ b/pkg/tsdb/prometheus/querydata/framing_test.go @@ -32,13 +32,14 @@ func TestMatrixResponses(t *testing.T) { {name: "parse a simple matrix response with value missing steps", filepath: "range_missing"}, {name: "parse a response with Infinity", filepath: "range_infinity"}, {name: "parse a response with NaN", filepath: "range_nan"}, + {name: "parse a response with legendFormat __auto", filepath: "range_auto"}, } for _, test := range tt { enableWideSeries := false queryFileName := filepath.Join("../testdata", test.filepath+".query.json") responseFileName := filepath.Join("../testdata", test.filepath+".result.json") - goldenFileName := test.filepath + ".result.streaming.golden" + goldenFileName := test.filepath + ".result.golden" t.Run(test.name, goldenScenario(test.name, queryFileName, responseFileName, goldenFileName, enableWideSeries)) enableWideSeries = true goldenFileName = test.filepath + ".result.streaming-wide.golden" @@ -71,12 +72,13 @@ func goldenScenario(name, queryFileName, responseFileName, goldenFileName string // struct here, because it has `time.time` and `time.duration` fields that // cannot be unmarshalled from JSON automatically. type storedPrometheusQuery struct { - RefId string - RangeQuery bool - Start int64 - End int64 - Step int64 - Expr string + RefId string + RangeQuery bool + Start int64 + End int64 + Step int64 + Expr string + LegendFormat string } func loadStoredQuery(fileName string) (*backend.QueryDataRequest, error) { @@ -94,10 +96,11 @@ func loadStoredQuery(fileName string) (*backend.QueryDataRequest, error) { } qm := models.QueryModel{ - RangeQuery: sq.RangeQuery, - Expr: sq.Expr, - Interval: fmt.Sprintf("%ds", sq.Step), - IntervalMS: sq.Step * 1000, + RangeQuery: sq.RangeQuery, + Expr: sq.Expr, + Interval: fmt.Sprintf("%ds", sq.Step), + IntervalMS: sq.Step * 1000, + LegendFormat: sq.LegendFormat, } data, err := json.Marshal(&qm) diff --git a/pkg/tsdb/prometheus/querydata/response.go b/pkg/tsdb/prometheus/querydata/response.go index 258b06e5edf..f3b9dde6732 100644 --- a/pkg/tsdb/prometheus/querydata/response.go +++ b/pkg/tsdb/prometheus/querydata/response.go @@ -108,11 +108,11 @@ func getName(q *models.Query, field *data.Field) string { labels := field.Labels legend := metricNameFromLabels(field) - if q.LegendFormat == legendFormatAuto && len(labels) > 0 { - return "" - } - - if q.LegendFormat != "" { + if q.LegendFormat == legendFormatAuto { + if len(labels) > 0 { + legend = "" + } + } else if q.LegendFormat != "" { result := legendFormatRegexp.ReplaceAllFunc([]byte(q.LegendFormat), func(in []byte) []byte { labelName := strings.Replace(string(in), "{{", "", 1) labelName = strings.Replace(labelName, "}}", "", 1) diff --git a/pkg/tsdb/prometheus/testdata/range_auto.query.json b/pkg/tsdb/prometheus/testdata/range_auto.query.json new file mode 100644 index 00000000000..b7e04d0e71a --- /dev/null +++ b/pkg/tsdb/prometheus/testdata/range_auto.query.json @@ -0,0 +1,9 @@ +{ + "RefId": "A", + "RangeQuery": true, + "Start": 1664376185, + "End": 1664376485, + "Step": 1, + "LegendFormat": "__auto", + "Expr": "histogram_quantile(0.95, sum(rate(tns_request_duration_seconds_bucket[$__rate_interval])) by (le))" +} diff --git a/pkg/tsdb/prometheus/testdata/range_auto.result.golden.jsonc b/pkg/tsdb/prometheus/testdata/range_auto.result.golden.jsonc new file mode 100644 index 00000000000..31bb10be6d2 --- /dev/null +++ b/pkg/tsdb/prometheus/testdata/range_auto.result.golden.jsonc @@ -0,0 +1,679 @@ +// 🌟 This was machine generated. Do not edit. 🌟 +// +// Frame[0] { +// "type": "timeseries-many", +// "custom": { +// "resultType": "matrix" +// }, +// "executedQueryString": "Expr: histogram_quantile(0.95, sum(rate(tns_request_duration_seconds_bucket[1m0s])) by (le))\nStep: 1s" +// } +// Name: histogram_quantile(0.95, sum(rate(tns_request_duration_seconds_bucket[1m0s])) by (le)) +// Dimensions: 2 Fields by 301 Rows +// +-----------------------------------+----------------------+ +// | Name: Time | Name: Value | +// | Labels: | Labels: | +// | Type: []time.Time | Type: []float64 | +// +-----------------------------------+----------------------+ +// | 2022-09-28 14:43:05.491 +0000 UTC | 0.004754464285714286 | +// | 2022-09-28 14:43:06.491 +0000 UTC | 0.004754464285714286 | +// | 2022-09-28 14:43:07.491 +0000 UTC | 0.004754464285714286 | +// | 2022-09-28 14:43:08.491 +0000 UTC | 0.004754464285714286 | +// | 2022-09-28 14:43:09.491 +0000 UTC | 0.004754481132075472 | +// | 2022-09-28 14:43:10.491 +0000 UTC | 0.004754481132075472 | +// | 2022-09-28 14:43:11.491 +0000 UTC | 0.004754481132075472 | +// | 2022-09-28 14:43:12.491 +0000 UTC | 0.004754481132075472 | +// | 2022-09-28 14:43:13.491 +0000 UTC | 0.004754481132075472 | +// | ... | ... | +// +-----------------------------------+----------------------+ +// +// +// 🌟 This was machine generated. Do not edit. 🌟 +{ + "frames": [ + { + "schema": { + "name": "histogram_quantile(0.95, sum(rate(tns_request_duration_seconds_bucket[1m0s])) by (le))", + "meta": { + "type": "timeseries-many", + "custom": { + "resultType": "matrix" + }, + "executedQueryString": "Expr: histogram_quantile(0.95, sum(rate(tns_request_duration_seconds_bucket[1m0s])) by (le))\nStep: 1s" + }, + "fields": [ + { + "name": "Time", + "type": "time", + "typeInfo": { + "frame": "time.Time" + }, + "config": { + "interval": 1000 + } + }, + { + "name": "Value", + "type": "number", + "typeInfo": { + "frame": "float64" + }, + "labels": {}, + "config": { + "displayNameFromDS": "histogram_quantile(0.95, sum(rate(tns_request_duration_seconds_bucket[1m0s])) by (le))" + } + } + ] + }, + "data": { + "values": [ + [ + 1664376185491, + 1664376186491, + 1664376187491, + 1664376188491, + 1664376189491, + 1664376190491, + 1664376191491, + 1664376192491, + 1664376193491, + 1664376194491, + 1664376195491, + 1664376196491, + 1664376197491, + 1664376198491, + 1664376199491, + 1664376200491, + 1664376201491, + 1664376202491, + 1664376203491, + 1664376204491, + 1664376205491, + 1664376206491, + 1664376207491, + 1664376208491, + 1664376209491, + 1664376210491, + 1664376211491, + 1664376212491, + 1664376213491, + 1664376214491, + 1664376215491, + 1664376216491, + 1664376217491, + 1664376218491, + 1664376219491, + 1664376220491, + 1664376221491, + 1664376222491, + 1664376223491, + 1664376224491, + 1664376225491, + 1664376226491, + 1664376227491, + 1664376228491, + 1664376229491, + 1664376230491, + 1664376231491, + 1664376232491, + 1664376233491, + 1664376234491, + 1664376235491, + 1664376236491, + 1664376237491, + 1664376238491, + 1664376239491, + 1664376240491, + 1664376241491, + 1664376242491, + 1664376243491, + 1664376244491, + 1664376245491, + 1664376246491, + 1664376247491, + 1664376248491, + 1664376249491, + 1664376250491, + 1664376251491, + 1664376252491, + 1664376253491, + 1664376254491, + 1664376255491, + 1664376256491, + 1664376257491, + 1664376258491, + 1664376259491, + 1664376260491, + 1664376261491, + 1664376262491, + 1664376263491, + 1664376264491, + 1664376265491, + 1664376266491, + 1664376267491, + 1664376268491, + 1664376269491, + 1664376270491, + 1664376271491, + 1664376272491, + 1664376273491, + 1664376274491, + 1664376275491, + 1664376276491, + 1664376277491, + 1664376278491, + 1664376279491, + 1664376280491, + 1664376281491, + 1664376282491, + 1664376283491, + 1664376284491, + 1664376285491, + 1664376286491, + 1664376287491, + 1664376288491, + 1664376289491, + 1664376290491, + 1664376291491, + 1664376292491, + 1664376293491, + 1664376294491, + 1664376295491, + 1664376296491, + 1664376297491, + 1664376298491, + 1664376299491, + 1664376300491, + 1664376301491, + 1664376302491, + 1664376303491, + 1664376304491, + 1664376305491, + 1664376306491, + 1664376307491, + 1664376308491, + 1664376309491, + 1664376310491, + 1664376311491, + 1664376312491, + 1664376313491, + 1664376314491, + 1664376315491, + 1664376316491, + 1664376317491, + 1664376318491, + 1664376319491, + 1664376320491, + 1664376321491, + 1664376322491, + 1664376323491, + 1664376324491, + 1664376325491, + 1664376326491, + 1664376327491, + 1664376328491, + 1664376329491, + 1664376330491, + 1664376331491, + 1664376332491, + 1664376333491, + 1664376334491, + 1664376335491, + 1664376336491, + 1664376337491, + 1664376338491, + 1664376339491, + 1664376340491, + 1664376341491, + 1664376342491, + 1664376343491, + 1664376344491, + 1664376345491, + 1664376346491, + 1664376347491, + 1664376348491, + 1664376349491, + 1664376350491, + 1664376351491, + 1664376352491, + 1664376353491, + 1664376354491, + 1664376355491, + 1664376356491, + 1664376357491, + 1664376358491, + 1664376359491, + 1664376360491, + 1664376361491, + 1664376362491, + 1664376363491, + 1664376364491, + 1664376365491, + 1664376366491, + 1664376367491, + 1664376368491, + 1664376369491, + 1664376370491, + 1664376371491, + 1664376372491, + 1664376373491, + 1664376374491, + 1664376375491, + 1664376376491, + 1664376377491, + 1664376378491, + 1664376379491, + 1664376380491, + 1664376381491, + 1664376382491, + 1664376383491, + 1664376384491, + 1664376385491, + 1664376386491, + 1664376387491, + 1664376388491, + 1664376389491, + 1664376390491, + 1664376391491, + 1664376392491, + 1664376393491, + 1664376394491, + 1664376395491, + 1664376396491, + 1664376397491, + 1664376398491, + 1664376399491, + 1664376400491, + 1664376401491, + 1664376402491, + 1664376403491, + 1664376404491, + 1664376405491, + 1664376406491, + 1664376407491, + 1664376408491, + 1664376409491, + 1664376410491, + 1664376411491, + 1664376412491, + 1664376413491, + 1664376414491, + 1664376415491, + 1664376416491, + 1664376417491, + 1664376418491, + 1664376419491, + 1664376420491, + 1664376421491, + 1664376422491, + 1664376423491, + 1664376424491, + 1664376425491, + 1664376426491, + 1664376427491, + 1664376428491, + 1664376429491, + 1664376430491, + 1664376431491, + 1664376432491, + 1664376433491, + 1664376434491, + 1664376435491, + 1664376436491, + 1664376437491, + 1664376438491, + 1664376439491, + 1664376440491, + 1664376441491, + 1664376442491, + 1664376443491, + 1664376444491, + 1664376445491, + 1664376446491, + 1664376447491, + 1664376448491, + 1664376449491, + 1664376450491, + 1664376451491, + 1664376452491, + 1664376453491, + 1664376454491, + 1664376455491, + 1664376456491, + 1664376457491, + 1664376458491, + 1664376459491, + 1664376460491, + 1664376461491, + 1664376462491, + 1664376463491, + 1664376464491, + 1664376465491, + 1664376466491, + 1664376467491, + 1664376468491, + 1664376469491, + 1664376470491, + 1664376471491, + 1664376472491, + 1664376473491, + 1664376474491, + 1664376475491, + 1664376476491, + 1664376477491, + 1664376478491, + 1664376479491, + 1664376480491, + 1664376481491, + 1664376482491, + 1664376483491, + 1664376484491, + 1664376485491 + ], + [ + 0.004754464285714286, + 0.004754464285714286, + 0.004754464285714286, + 0.004754464285714286, + 0.004754481132075472, + 0.004754481132075472, + 0.004754481132075472, + 0.004754481132075472, + 0.004754481132075472, + 0.004754481132075472, + 0.004754532442748091, + 0.004754532442748091, + 0.004754532442748091, + 0.004754532442748091, + 0.004754532442748091, + 0.004754532442748091, + 0.004754532442748091, + 0.004754532442748091, + 0.004754532442748091, + 0.004754620622568094, + 0.004754620622568094, + 0.004754620622568094, + 0.004754620622568094, + 0.004754620622568094, + 0.004754620622568094, + 0.00475462962962963, + 0.00475462962962963, + 0.00475462962962963, + 0.00475462962962963, + 0.00475462962962963, + 0.00475462962962963, + 0.00475462962962963, + 0.00475462962962963, + 0.00475462962962963, + 0.004754625121713728, + 0.004754625121713728, + 0.004754625121713728, + 0.004754625121713728, + 0.004754625121713728, + 0.004754625121713728, + 0.004754638671874999, + 0.004754638671874999, + 0.004754638671874999, + 0.004754638671874999, + 0.004754638671874999, + 0.004754638671874999, + 0.004754638671874999, + 0.004754638671874999, + 0.004754638671874999, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.004750000000000001, + 0.004750000000000001, + 0.004750000000000001, + 0.004750000000000001, + 0.004750000000000001, + 0.004750000000000001, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.004750000000000001, + 0.004750000000000001, + 0.004750000000000001, + 0.004750000000000001, + 0.004750000000000001, + 0.004750000000000001, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.07309523809523814, + 0.07309523809523814, + 0.07309523809523814, + 0.07309523809523814, + 0.07309523809523814, + 0.07309523809523814, + 0.09168949771689497, + 0.09168949771689497, + 0.09168949771689497, + 0.09168949771689497, + 0.09168949771689497, + 0.09168949771689497, + 0.09168949771689497, + 0.09168949771689497, + 0.09168949771689497, + 0.09621014492753623, + 0.09621014492753623, + 0.09621014492753623, + 0.09621014492753623, + 0.09621014492753623, + 0.09621014492753623, + 0.09886509635974303, + 0.09886509635974303, + 0.09886509635974303, + 0.09886509635974303, + 0.09886509635974303, + 0.09886509635974303, + 0.09886509635974303, + 0.09886509635974303, + 0.09886509635974303, + 0.09992233009708738, + 0.09992233009708738, + 0.09992233009708738, + 0.09992233009708738, + 0.09992233009708738, + 0.09992233009708738, + 0.09990847784200386, + 0.09990847784200386, + 0.09990847784200386, + 0.09990847784200386, + 0.09990847784200386, + 0.09990847784200386, + 0.09990847784200386, + 0.09990847784200386, + 0.09990847784200386, + 0.09897701149425286, + 0.09897701149425286, + 0.09897701149425286, + 0.09897701149425286, + 0.09897701149425286, + 0.09897701149425286, + 0.09700833333333335, + 0.09700833333333335, + 0.09700833333333335, + 0.09700833333333335, + 0.09700833333333335, + 0.09700833333333335, + 0.09700833333333335, + 0.09700833333333335, + 0.09700833333333335, + 0.09188218390804595, + 0.09188218390804595, + 0.09188218390804595, + 0.09188218390804595, + 0.09188218390804595, + 0.09188218390804595, + 0.05788461538461537, + 0.05788461538461537, + 0.05788461538461537, + 0.05788461538461537, + 0.05788461538461537, + 0.05788461538461537, + 0.05788461538461537, + 0.05788461538461537, + 0.05788461538461537, + 0.004767840375586855, + 0.004767840375586855, + 0.004767840375586855, + 0.004767840375586855, + 0.004767840375586855, + 0.004767840375586855, + 0.004750000000000001, + 0.004750000000000001, + 0.004750000000000001, + 0.004750000000000001, + 0.004750000000000001, + 0.004750000000000001, + 0.004750000000000001, + 0.004750000000000001, + 0.004750000000000001, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.004750000000000001, + 0.004750000000000001, + 0.004750000000000001, + 0.004750000000000001, + 0.004750000000000001, + 0.004750000000000001, + 0.004749999999999999, + 0.004749999999999999, + 0.004749999999999999, + 0.004749999999999999, + 0.004749999999999999, + 0.004749999999999999, + 0.004749999999999999, + 0.004749999999999999, + 0.004749999999999999, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475 + ] + ] + } + } + ] +} \ No newline at end of file diff --git a/pkg/tsdb/prometheus/testdata/range_auto.result.json b/pkg/tsdb/prometheus/testdata/range_auto.result.json new file mode 100644 index 00000000000..d1b085b2c3b --- /dev/null +++ b/pkg/tsdb/prometheus/testdata/range_auto.result.json @@ -0,0 +1 @@ +{"status":"success","data":{"resultType":"matrix","result":[{"metric":{},"values":[[1664376185.491,"0.004754464285714286"],[1664376186.491,"0.004754464285714286"],[1664376187.491,"0.004754464285714286"],[1664376188.491,"0.004754464285714286"],[1664376189.491,"0.004754481132075472"],[1664376190.491,"0.004754481132075472"],[1664376191.491,"0.004754481132075472"],[1664376192.491,"0.004754481132075472"],[1664376193.491,"0.004754481132075472"],[1664376194.491,"0.004754481132075472"],[1664376195.491,"0.004754532442748091"],[1664376196.491,"0.004754532442748091"],[1664376197.491,"0.004754532442748091"],[1664376198.491,"0.004754532442748091"],[1664376199.491,"0.004754532442748091"],[1664376200.491,"0.004754532442748091"],[1664376201.491,"0.004754532442748091"],[1664376202.491,"0.004754532442748091"],[1664376203.491,"0.004754532442748091"],[1664376204.491,"0.004754620622568094"],[1664376205.491,"0.004754620622568094"],[1664376206.491,"0.004754620622568094"],[1664376207.491,"0.004754620622568094"],[1664376208.491,"0.004754620622568094"],[1664376209.491,"0.004754620622568094"],[1664376210.491,"0.00475462962962963"],[1664376211.491,"0.00475462962962963"],[1664376212.491,"0.00475462962962963"],[1664376213.491,"0.00475462962962963"],[1664376214.491,"0.00475462962962963"],[1664376215.491,"0.00475462962962963"],[1664376216.491,"0.00475462962962963"],[1664376217.491,"0.00475462962962963"],[1664376218.491,"0.00475462962962963"],[1664376219.491,"0.004754625121713728"],[1664376220.491,"0.004754625121713728"],[1664376221.491,"0.004754625121713728"],[1664376222.491,"0.004754625121713728"],[1664376223.491,"0.004754625121713728"],[1664376224.491,"0.004754625121713728"],[1664376225.491,"0.004754638671874999"],[1664376226.491,"0.004754638671874999"],[1664376227.491,"0.004754638671874999"],[1664376228.491,"0.004754638671874999"],[1664376229.491,"0.004754638671874999"],[1664376230.491,"0.004754638671874999"],[1664376231.491,"0.004754638671874999"],[1664376232.491,"0.004754638671874999"],[1664376233.491,"0.004754638671874999"],[1664376234.491,"0.00475"],[1664376235.491,"0.00475"],[1664376236.491,"0.00475"],[1664376237.491,"0.00475"],[1664376238.491,"0.00475"],[1664376239.491,"0.00475"],[1664376240.491,"0.00475"],[1664376241.491,"0.00475"],[1664376242.491,"0.00475"],[1664376243.491,"0.00475"],[1664376244.491,"0.00475"],[1664376245.491,"0.00475"],[1664376246.491,"0.00475"],[1664376247.491,"0.00475"],[1664376248.491,"0.00475"],[1664376249.491,"0.00475"],[1664376250.491,"0.00475"],[1664376251.491,"0.00475"],[1664376252.491,"0.00475"],[1664376253.491,"0.00475"],[1664376254.491,"0.00475"],[1664376255.491,"0.00475"],[1664376256.491,"0.00475"],[1664376257.491,"0.00475"],[1664376258.491,"0.00475"],[1664376259.491,"0.00475"],[1664376260.491,"0.00475"],[1664376261.491,"0.00475"],[1664376262.491,"0.00475"],[1664376263.491,"0.00475"],[1664376264.491,"0.004750000000000001"],[1664376265.491,"0.004750000000000001"],[1664376266.491,"0.004750000000000001"],[1664376267.491,"0.004750000000000001"],[1664376268.491,"0.004750000000000001"],[1664376269.491,"0.004750000000000001"],[1664376270.491,"0.00475"],[1664376271.491,"0.00475"],[1664376272.491,"0.00475"],[1664376273.491,"0.00475"],[1664376274.491,"0.00475"],[1664376275.491,"0.00475"],[1664376276.491,"0.00475"],[1664376277.491,"0.00475"],[1664376278.491,"0.00475"],[1664376279.491,"0.00475"],[1664376280.491,"0.00475"],[1664376281.491,"0.00475"],[1664376282.491,"0.00475"],[1664376283.491,"0.00475"],[1664376284.491,"0.00475"],[1664376285.491,"0.00475"],[1664376286.491,"0.00475"],[1664376287.491,"0.00475"],[1664376288.491,"0.00475"],[1664376289.491,"0.00475"],[1664376290.491,"0.00475"],[1664376291.491,"0.00475"],[1664376292.491,"0.00475"],[1664376293.491,"0.00475"],[1664376294.491,"0.004750000000000001"],[1664376295.491,"0.004750000000000001"],[1664376296.491,"0.004750000000000001"],[1664376297.491,"0.004750000000000001"],[1664376298.491,"0.004750000000000001"],[1664376299.491,"0.004750000000000001"],[1664376300.491,"0.00475"],[1664376301.491,"0.00475"],[1664376302.491,"0.00475"],[1664376303.491,"0.00475"],[1664376304.491,"0.00475"],[1664376305.491,"0.00475"],[1664376306.491,"0.00475"],[1664376307.491,"0.00475"],[1664376308.491,"0.00475"],[1664376309.491,"0.07309523809523814"],[1664376310.491,"0.07309523809523814"],[1664376311.491,"0.07309523809523814"],[1664376312.491,"0.07309523809523814"],[1664376313.491,"0.07309523809523814"],[1664376314.491,"0.07309523809523814"],[1664376315.491,"0.09168949771689497"],[1664376316.491,"0.09168949771689497"],[1664376317.491,"0.09168949771689497"],[1664376318.491,"0.09168949771689497"],[1664376319.491,"0.09168949771689497"],[1664376320.491,"0.09168949771689497"],[1664376321.491,"0.09168949771689497"],[1664376322.491,"0.09168949771689497"],[1664376323.491,"0.09168949771689497"],[1664376324.491,"0.09621014492753623"],[1664376325.491,"0.09621014492753623"],[1664376326.491,"0.09621014492753623"],[1664376327.491,"0.09621014492753623"],[1664376328.491,"0.09621014492753623"],[1664376329.491,"0.09621014492753623"],[1664376330.491,"0.09886509635974303"],[1664376331.491,"0.09886509635974303"],[1664376332.491,"0.09886509635974303"],[1664376333.491,"0.09886509635974303"],[1664376334.491,"0.09886509635974303"],[1664376335.491,"0.09886509635974303"],[1664376336.491,"0.09886509635974303"],[1664376337.491,"0.09886509635974303"],[1664376338.491,"0.09886509635974303"],[1664376339.491,"0.09992233009708738"],[1664376340.491,"0.09992233009708738"],[1664376341.491,"0.09992233009708738"],[1664376342.491,"0.09992233009708738"],[1664376343.491,"0.09992233009708738"],[1664376344.491,"0.09992233009708738"],[1664376345.491,"0.09990847784200386"],[1664376346.491,"0.09990847784200386"],[1664376347.491,"0.09990847784200386"],[1664376348.491,"0.09990847784200386"],[1664376349.491,"0.09990847784200386"],[1664376350.491,"0.09990847784200386"],[1664376351.491,"0.09990847784200386"],[1664376352.491,"0.09990847784200386"],[1664376353.491,"0.09990847784200386"],[1664376354.491,"0.09897701149425286"],[1664376355.491,"0.09897701149425286"],[1664376356.491,"0.09897701149425286"],[1664376357.491,"0.09897701149425286"],[1664376358.491,"0.09897701149425286"],[1664376359.491,"0.09897701149425286"],[1664376360.491,"0.09700833333333335"],[1664376361.491,"0.09700833333333335"],[1664376362.491,"0.09700833333333335"],[1664376363.491,"0.09700833333333335"],[1664376364.491,"0.09700833333333335"],[1664376365.491,"0.09700833333333335"],[1664376366.491,"0.09700833333333335"],[1664376367.491,"0.09700833333333335"],[1664376368.491,"0.09700833333333335"],[1664376369.491,"0.09188218390804595"],[1664376370.491,"0.09188218390804595"],[1664376371.491,"0.09188218390804595"],[1664376372.491,"0.09188218390804595"],[1664376373.491,"0.09188218390804595"],[1664376374.491,"0.09188218390804595"],[1664376375.491,"0.05788461538461537"],[1664376376.491,"0.05788461538461537"],[1664376377.491,"0.05788461538461537"],[1664376378.491,"0.05788461538461537"],[1664376379.491,"0.05788461538461537"],[1664376380.491,"0.05788461538461537"],[1664376381.491,"0.05788461538461537"],[1664376382.491,"0.05788461538461537"],[1664376383.491,"0.05788461538461537"],[1664376384.491,"0.004767840375586855"],[1664376385.491,"0.004767840375586855"],[1664376386.491,"0.004767840375586855"],[1664376387.491,"0.004767840375586855"],[1664376388.491,"0.004767840375586855"],[1664376389.491,"0.004767840375586855"],[1664376390.491,"0.004750000000000001"],[1664376391.491,"0.004750000000000001"],[1664376392.491,"0.004750000000000001"],[1664376393.491,"0.004750000000000001"],[1664376394.491,"0.004750000000000001"],[1664376395.491,"0.004750000000000001"],[1664376396.491,"0.004750000000000001"],[1664376397.491,"0.004750000000000001"],[1664376398.491,"0.004750000000000001"],[1664376399.491,"0.00475"],[1664376400.491,"0.00475"],[1664376401.491,"0.00475"],[1664376402.491,"0.00475"],[1664376403.491,"0.00475"],[1664376404.491,"0.00475"],[1664376405.491,"0.00475"],[1664376406.491,"0.00475"],[1664376407.491,"0.00475"],[1664376408.491,"0.00475"],[1664376409.491,"0.00475"],[1664376410.491,"0.00475"],[1664376411.491,"0.00475"],[1664376412.491,"0.00475"],[1664376413.491,"0.00475"],[1664376414.491,"0.00475"],[1664376415.491,"0.00475"],[1664376416.491,"0.00475"],[1664376417.491,"0.00475"],[1664376418.491,"0.00475"],[1664376419.491,"0.00475"],[1664376420.491,"0.00475"],[1664376421.491,"0.00475"],[1664376422.491,"0.00475"],[1664376423.491,"0.00475"],[1664376424.491,"0.00475"],[1664376425.491,"0.00475"],[1664376426.491,"0.00475"],[1664376427.491,"0.00475"],[1664376428.491,"0.00475"],[1664376429.491,"0.00475"],[1664376430.491,"0.00475"],[1664376431.491,"0.00475"],[1664376432.491,"0.00475"],[1664376433.491,"0.00475"],[1664376434.491,"0.00475"],[1664376435.491,"0.00475"],[1664376436.491,"0.00475"],[1664376437.491,"0.00475"],[1664376438.491,"0.00475"],[1664376439.491,"0.00475"],[1664376440.491,"0.00475"],[1664376441.491,"0.00475"],[1664376442.491,"0.00475"],[1664376443.491,"0.00475"],[1664376444.491,"0.00475"],[1664376445.491,"0.00475"],[1664376446.491,"0.00475"],[1664376447.491,"0.00475"],[1664376448.491,"0.00475"],[1664376449.491,"0.00475"],[1664376450.491,"0.00475"],[1664376451.491,"0.00475"],[1664376452.491,"0.00475"],[1664376453.491,"0.00475"],[1664376454.491,"0.00475"],[1664376455.491,"0.00475"],[1664376456.491,"0.00475"],[1664376457.491,"0.00475"],[1664376458.491,"0.00475"],[1664376459.491,"0.004750000000000001"],[1664376460.491,"0.004750000000000001"],[1664376461.491,"0.004750000000000001"],[1664376462.491,"0.004750000000000001"],[1664376463.491,"0.004750000000000001"],[1664376464.491,"0.004750000000000001"],[1664376465.491,"0.004749999999999999"],[1664376466.491,"0.004749999999999999"],[1664376467.491,"0.004749999999999999"],[1664376468.491,"0.004749999999999999"],[1664376469.491,"0.004749999999999999"],[1664376470.491,"0.004749999999999999"],[1664376471.491,"0.004749999999999999"],[1664376472.491,"0.004749999999999999"],[1664376473.491,"0.004749999999999999"],[1664376474.491,"0.00475"],[1664376475.491,"0.00475"],[1664376476.491,"0.00475"],[1664376477.491,"0.00475"],[1664376478.491,"0.00475"],[1664376479.491,"0.00475"],[1664376480.491,"0.00475"],[1664376481.491,"0.00475"],[1664376482.491,"0.00475"],[1664376483.491,"0.00475"],[1664376484.491,"0.00475"],[1664376485.491,"0.00475"]]}]}} \ No newline at end of file diff --git a/pkg/tsdb/prometheus/testdata/range_auto.result.streaming-wide.golden.jsonc b/pkg/tsdb/prometheus/testdata/range_auto.result.streaming-wide.golden.jsonc new file mode 100644 index 00000000000..1ebe22c2117 --- /dev/null +++ b/pkg/tsdb/prometheus/testdata/range_auto.result.streaming-wide.golden.jsonc @@ -0,0 +1,676 @@ +// 🌟 This was machine generated. Do not edit. 🌟 +// +// Frame[0] { +// "type": "timeseries-wide", +// "custom": { +// "resultType": "matrix" +// }, +// "executedQueryString": "Expr: histogram_quantile(0.95, sum(rate(tns_request_duration_seconds_bucket[1m0s])) by (le))\nStep: 1s" +// } +// Name: +// Dimensions: 2 Fields by 301 Rows +// +-----------------------------------+----------------------------------------------------------------------------------------------+ +// | Name: Time | Name: histogram_quantile(0.95, sum(rate(tns_request_duration_seconds_bucket[1m0s])) by (le)) | +// | Labels: | Labels: | +// | Type: []time.Time | Type: []*float64 | +// +-----------------------------------+----------------------------------------------------------------------------------------------+ +// | 2022-09-28 14:43:05.491 +0000 UTC | 0.004754464285714286 | +// | 2022-09-28 14:43:06.491 +0000 UTC | 0.004754464285714286 | +// | 2022-09-28 14:43:07.491 +0000 UTC | 0.004754464285714286 | +// | 2022-09-28 14:43:08.491 +0000 UTC | 0.004754464285714286 | +// | 2022-09-28 14:43:09.491 +0000 UTC | 0.004754481132075472 | +// | 2022-09-28 14:43:10.491 +0000 UTC | 0.004754481132075472 | +// | 2022-09-28 14:43:11.491 +0000 UTC | 0.004754481132075472 | +// | 2022-09-28 14:43:12.491 +0000 UTC | 0.004754481132075472 | +// | 2022-09-28 14:43:13.491 +0000 UTC | 0.004754481132075472 | +// | ... | ... | +// +-----------------------------------+----------------------------------------------------------------------------------------------+ +// +// +// 🌟 This was machine generated. Do not edit. 🌟 +{ + "frames": [ + { + "schema": { + "meta": { + "type": "timeseries-wide", + "custom": { + "resultType": "matrix" + }, + "executedQueryString": "Expr: histogram_quantile(0.95, sum(rate(tns_request_duration_seconds_bucket[1m0s])) by (le))\nStep: 1s" + }, + "fields": [ + { + "name": "Time", + "type": "time", + "typeInfo": { + "frame": "time.Time" + }, + "config": { + "interval": 1000 + } + }, + { + "name": "histogram_quantile(0.95, sum(rate(tns_request_duration_seconds_bucket[1m0s])) by (le))", + "type": "number", + "typeInfo": { + "frame": "float64", + "nullable": true + }, + "labels": {} + } + ] + }, + "data": { + "values": [ + [ + 1664376185491, + 1664376186491, + 1664376187491, + 1664376188491, + 1664376189491, + 1664376190491, + 1664376191491, + 1664376192491, + 1664376193491, + 1664376194491, + 1664376195491, + 1664376196491, + 1664376197491, + 1664376198491, + 1664376199491, + 1664376200491, + 1664376201491, + 1664376202491, + 1664376203491, + 1664376204491, + 1664376205491, + 1664376206491, + 1664376207491, + 1664376208491, + 1664376209491, + 1664376210491, + 1664376211491, + 1664376212491, + 1664376213491, + 1664376214491, + 1664376215491, + 1664376216491, + 1664376217491, + 1664376218491, + 1664376219491, + 1664376220491, + 1664376221491, + 1664376222491, + 1664376223491, + 1664376224491, + 1664376225491, + 1664376226491, + 1664376227491, + 1664376228491, + 1664376229491, + 1664376230491, + 1664376231491, + 1664376232491, + 1664376233491, + 1664376234491, + 1664376235491, + 1664376236491, + 1664376237491, + 1664376238491, + 1664376239491, + 1664376240491, + 1664376241491, + 1664376242491, + 1664376243491, + 1664376244491, + 1664376245491, + 1664376246491, + 1664376247491, + 1664376248491, + 1664376249491, + 1664376250491, + 1664376251491, + 1664376252491, + 1664376253491, + 1664376254491, + 1664376255491, + 1664376256491, + 1664376257491, + 1664376258491, + 1664376259491, + 1664376260491, + 1664376261491, + 1664376262491, + 1664376263491, + 1664376264491, + 1664376265491, + 1664376266491, + 1664376267491, + 1664376268491, + 1664376269491, + 1664376270491, + 1664376271491, + 1664376272491, + 1664376273491, + 1664376274491, + 1664376275491, + 1664376276491, + 1664376277491, + 1664376278491, + 1664376279491, + 1664376280491, + 1664376281491, + 1664376282491, + 1664376283491, + 1664376284491, + 1664376285491, + 1664376286491, + 1664376287491, + 1664376288491, + 1664376289491, + 1664376290491, + 1664376291491, + 1664376292491, + 1664376293491, + 1664376294491, + 1664376295491, + 1664376296491, + 1664376297491, + 1664376298491, + 1664376299491, + 1664376300491, + 1664376301491, + 1664376302491, + 1664376303491, + 1664376304491, + 1664376305491, + 1664376306491, + 1664376307491, + 1664376308491, + 1664376309491, + 1664376310491, + 1664376311491, + 1664376312491, + 1664376313491, + 1664376314491, + 1664376315491, + 1664376316491, + 1664376317491, + 1664376318491, + 1664376319491, + 1664376320491, + 1664376321491, + 1664376322491, + 1664376323491, + 1664376324491, + 1664376325491, + 1664376326491, + 1664376327491, + 1664376328491, + 1664376329491, + 1664376330491, + 1664376331491, + 1664376332491, + 1664376333491, + 1664376334491, + 1664376335491, + 1664376336491, + 1664376337491, + 1664376338491, + 1664376339491, + 1664376340491, + 1664376341491, + 1664376342491, + 1664376343491, + 1664376344491, + 1664376345491, + 1664376346491, + 1664376347491, + 1664376348491, + 1664376349491, + 1664376350491, + 1664376351491, + 1664376352491, + 1664376353491, + 1664376354491, + 1664376355491, + 1664376356491, + 1664376357491, + 1664376358491, + 1664376359491, + 1664376360491, + 1664376361491, + 1664376362491, + 1664376363491, + 1664376364491, + 1664376365491, + 1664376366491, + 1664376367491, + 1664376368491, + 1664376369491, + 1664376370491, + 1664376371491, + 1664376372491, + 1664376373491, + 1664376374491, + 1664376375491, + 1664376376491, + 1664376377491, + 1664376378491, + 1664376379491, + 1664376380491, + 1664376381491, + 1664376382491, + 1664376383491, + 1664376384491, + 1664376385491, + 1664376386491, + 1664376387491, + 1664376388491, + 1664376389491, + 1664376390491, + 1664376391491, + 1664376392491, + 1664376393491, + 1664376394491, + 1664376395491, + 1664376396491, + 1664376397491, + 1664376398491, + 1664376399491, + 1664376400491, + 1664376401491, + 1664376402491, + 1664376403491, + 1664376404491, + 1664376405491, + 1664376406491, + 1664376407491, + 1664376408491, + 1664376409491, + 1664376410491, + 1664376411491, + 1664376412491, + 1664376413491, + 1664376414491, + 1664376415491, + 1664376416491, + 1664376417491, + 1664376418491, + 1664376419491, + 1664376420491, + 1664376421491, + 1664376422491, + 1664376423491, + 1664376424491, + 1664376425491, + 1664376426491, + 1664376427491, + 1664376428491, + 1664376429491, + 1664376430491, + 1664376431491, + 1664376432491, + 1664376433491, + 1664376434491, + 1664376435491, + 1664376436491, + 1664376437491, + 1664376438491, + 1664376439491, + 1664376440491, + 1664376441491, + 1664376442491, + 1664376443491, + 1664376444491, + 1664376445491, + 1664376446491, + 1664376447491, + 1664376448491, + 1664376449491, + 1664376450491, + 1664376451491, + 1664376452491, + 1664376453491, + 1664376454491, + 1664376455491, + 1664376456491, + 1664376457491, + 1664376458491, + 1664376459491, + 1664376460491, + 1664376461491, + 1664376462491, + 1664376463491, + 1664376464491, + 1664376465491, + 1664376466491, + 1664376467491, + 1664376468491, + 1664376469491, + 1664376470491, + 1664376471491, + 1664376472491, + 1664376473491, + 1664376474491, + 1664376475491, + 1664376476491, + 1664376477491, + 1664376478491, + 1664376479491, + 1664376480491, + 1664376481491, + 1664376482491, + 1664376483491, + 1664376484491, + 1664376485491 + ], + [ + 0.004754464285714286, + 0.004754464285714286, + 0.004754464285714286, + 0.004754464285714286, + 0.004754481132075472, + 0.004754481132075472, + 0.004754481132075472, + 0.004754481132075472, + 0.004754481132075472, + 0.004754481132075472, + 0.004754532442748091, + 0.004754532442748091, + 0.004754532442748091, + 0.004754532442748091, + 0.004754532442748091, + 0.004754532442748091, + 0.004754532442748091, + 0.004754532442748091, + 0.004754532442748091, + 0.004754620622568094, + 0.004754620622568094, + 0.004754620622568094, + 0.004754620622568094, + 0.004754620622568094, + 0.004754620622568094, + 0.00475462962962963, + 0.00475462962962963, + 0.00475462962962963, + 0.00475462962962963, + 0.00475462962962963, + 0.00475462962962963, + 0.00475462962962963, + 0.00475462962962963, + 0.00475462962962963, + 0.004754625121713728, + 0.004754625121713728, + 0.004754625121713728, + 0.004754625121713728, + 0.004754625121713728, + 0.004754625121713728, + 0.004754638671874999, + 0.004754638671874999, + 0.004754638671874999, + 0.004754638671874999, + 0.004754638671874999, + 0.004754638671874999, + 0.004754638671874999, + 0.004754638671874999, + 0.004754638671874999, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.004750000000000001, + 0.004750000000000001, + 0.004750000000000001, + 0.004750000000000001, + 0.004750000000000001, + 0.004750000000000001, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.004750000000000001, + 0.004750000000000001, + 0.004750000000000001, + 0.004750000000000001, + 0.004750000000000001, + 0.004750000000000001, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.07309523809523814, + 0.07309523809523814, + 0.07309523809523814, + 0.07309523809523814, + 0.07309523809523814, + 0.07309523809523814, + 0.09168949771689497, + 0.09168949771689497, + 0.09168949771689497, + 0.09168949771689497, + 0.09168949771689497, + 0.09168949771689497, + 0.09168949771689497, + 0.09168949771689497, + 0.09168949771689497, + 0.09621014492753623, + 0.09621014492753623, + 0.09621014492753623, + 0.09621014492753623, + 0.09621014492753623, + 0.09621014492753623, + 0.09886509635974303, + 0.09886509635974303, + 0.09886509635974303, + 0.09886509635974303, + 0.09886509635974303, + 0.09886509635974303, + 0.09886509635974303, + 0.09886509635974303, + 0.09886509635974303, + 0.09992233009708738, + 0.09992233009708738, + 0.09992233009708738, + 0.09992233009708738, + 0.09992233009708738, + 0.09992233009708738, + 0.09990847784200386, + 0.09990847784200386, + 0.09990847784200386, + 0.09990847784200386, + 0.09990847784200386, + 0.09990847784200386, + 0.09990847784200386, + 0.09990847784200386, + 0.09990847784200386, + 0.09897701149425286, + 0.09897701149425286, + 0.09897701149425286, + 0.09897701149425286, + 0.09897701149425286, + 0.09897701149425286, + 0.09700833333333335, + 0.09700833333333335, + 0.09700833333333335, + 0.09700833333333335, + 0.09700833333333335, + 0.09700833333333335, + 0.09700833333333335, + 0.09700833333333335, + 0.09700833333333335, + 0.09188218390804595, + 0.09188218390804595, + 0.09188218390804595, + 0.09188218390804595, + 0.09188218390804595, + 0.09188218390804595, + 0.05788461538461537, + 0.05788461538461537, + 0.05788461538461537, + 0.05788461538461537, + 0.05788461538461537, + 0.05788461538461537, + 0.05788461538461537, + 0.05788461538461537, + 0.05788461538461537, + 0.004767840375586855, + 0.004767840375586855, + 0.004767840375586855, + 0.004767840375586855, + 0.004767840375586855, + 0.004767840375586855, + 0.004750000000000001, + 0.004750000000000001, + 0.004750000000000001, + 0.004750000000000001, + 0.004750000000000001, + 0.004750000000000001, + 0.004750000000000001, + 0.004750000000000001, + 0.004750000000000001, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.004750000000000001, + 0.004750000000000001, + 0.004750000000000001, + 0.004750000000000001, + 0.004750000000000001, + 0.004750000000000001, + 0.004749999999999999, + 0.004749999999999999, + 0.004749999999999999, + 0.004749999999999999, + 0.004749999999999999, + 0.004749999999999999, + 0.004749999999999999, + 0.004749999999999999, + 0.004749999999999999, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475, + 0.00475 + ] + ] + } + } + ] +} \ No newline at end of file diff --git a/pkg/tsdb/prometheus/testdata/range_infinity.result.streaming.golden.jsonc b/pkg/tsdb/prometheus/testdata/range_infinity.result.streaming.golden.jsonc deleted file mode 100644 index c92e89e3806..00000000000 --- a/pkg/tsdb/prometheus/testdata/range_infinity.result.streaming.golden.jsonc +++ /dev/null @@ -1,86 +0,0 @@ -// 🌟 This was machine generated. Do not edit. 🌟 -// -// Frame[0] { -// "type": "timeseries-many", -// "custom": { -// "resultType": "matrix" -// }, -// "executedQueryString": "Expr: 1 / 0\nStep: 1s" -// } -// Name: 1 / 0 -// Dimensions: 2 Fields by 3 Rows -// +-------------------------------+-----------------+ -// | Name: Time | Name: Value | -// | Labels: | Labels: | -// | Type: []time.Time | Type: []float64 | -// +-------------------------------+-----------------+ -// | 2022-01-11 08:25:30 +0000 UTC | +Inf | -// | 2022-01-11 08:25:31 +0000 UTC | +Inf | -// | 2022-01-11 08:25:32 +0000 UTC | +Inf | -// +-------------------------------+-----------------+ -// -// -// 🌟 This was machine generated. Do not edit. 🌟 -{ - "frames": [ - { - "schema": { - "name": "1 / 0", - "meta": { - "type": "timeseries-many", - "custom": { - "resultType": "matrix" - }, - "executedQueryString": "Expr: 1 / 0\nStep: 1s" - }, - "fields": [ - { - "name": "Time", - "type": "time", - "typeInfo": { - "frame": "time.Time" - }, - "config": { - "interval": 1000 - } - }, - { - "name": "Value", - "type": "number", - "typeInfo": { - "frame": "float64" - }, - "labels": {}, - "config": { - "displayNameFromDS": "1 / 0" - } - } - ] - }, - "data": { - "values": [ - [ - 1641889530000, - 1641889531000, - 1641889532000 - ], - [ - null, - null, - null - ] - ], - "entities": [ - null, - { - "Inf": [ - 0, - 1, - 2 - ] - } - ] - } - } - ] -} \ No newline at end of file diff --git a/pkg/tsdb/prometheus/testdata/range_missing.result.streaming.golden.jsonc b/pkg/tsdb/prometheus/testdata/range_missing.result.streaming.golden.jsonc deleted file mode 100644 index 9795437b844..00000000000 --- a/pkg/tsdb/prometheus/testdata/range_missing.result.streaming.golden.jsonc +++ /dev/null @@ -1,79 +0,0 @@ -// 🌟 This was machine generated. Do not edit. 🌟 -// -// Frame[0] { -// "type": "timeseries-many", -// "custom": { -// "resultType": "matrix" -// }, -// "executedQueryString": "Expr: test1\nStep: 1s" -// } -// Name: go_goroutines{job="prometheus"} -// Dimensions: 2 Fields by 3 Rows -// +-------------------------------+------------------------------------------------+ -// | Name: Time | Name: Value | -// | Labels: | Labels: __name__=go_goroutines, job=prometheus | -// | Type: []time.Time | Type: []float64 | -// +-------------------------------+------------------------------------------------+ -// | 2022-01-11 08:25:33 +0000 UTC | 21 | -// | 2022-01-11 08:25:34 +0000 UTC | 32 | -// | 2022-01-11 08:25:37 +0000 UTC | 43 | -// +-------------------------------+------------------------------------------------+ -// -// -// 🌟 This was machine generated. Do not edit. 🌟 -{ - "frames": [ - { - "schema": { - "name": "go_goroutines{job=\"prometheus\"}", - "meta": { - "type": "timeseries-many", - "custom": { - "resultType": "matrix" - }, - "executedQueryString": "Expr: test1\nStep: 1s" - }, - "fields": [ - { - "name": "Time", - "type": "time", - "typeInfo": { - "frame": "time.Time" - }, - "config": { - "interval": 1000 - } - }, - { - "name": "Value", - "type": "number", - "typeInfo": { - "frame": "float64" - }, - "labels": { - "__name__": "go_goroutines", - "job": "prometheus" - }, - "config": { - "displayNameFromDS": "go_goroutines{job=\"prometheus\"}" - } - } - ] - }, - "data": { - "values": [ - [ - 1641889533000, - 1641889534000, - 1641889537000 - ], - [ - 21, - 32, - 43 - ] - ] - } - } - ] -} \ No newline at end of file diff --git a/pkg/tsdb/prometheus/testdata/range_nan.result.golden.jsonc b/pkg/tsdb/prometheus/testdata/range_nan.result.golden.jsonc index eedad6c17d1..b1e6af215e5 100644 --- a/pkg/tsdb/prometheus/testdata/range_nan.result.golden.jsonc +++ b/pkg/tsdb/prometheus/testdata/range_nan.result.golden.jsonc @@ -14,9 +14,9 @@ // | Labels: | Labels: handler=/api/v1/query_range, job=prometheus | // | Type: []time.Time | Type: []float64 | // +-------------------------------+-----------------------------------------------------+ -// | 2022-01-11 08:25:30 +0000 UTC | 0 | -// | 2022-01-11 08:25:31 +0000 UTC | 0 | -// | 2022-01-11 08:25:32 +0000 UTC | 0 | +// | 2022-01-11 08:25:30 +0000 UTC | NaN | +// | 2022-01-11 08:25:31 +0000 UTC | NaN | +// | 2022-01-11 08:25:32 +0000 UTC | NaN | // +-------------------------------+-----------------------------------------------------+ // // @@ -68,10 +68,20 @@ 1641889532000 ], [ - 0, - 0, - 0 + null, + null, + null ] + ], + "entities": [ + null, + { + "NaN": [ + 0, + 1, + 2 + ] + } ] } } diff --git a/pkg/tsdb/prometheus/testdata/range_nan.result.streaming.golden.jsonc b/pkg/tsdb/prometheus/testdata/range_nan.result.streaming.golden.jsonc deleted file mode 100644 index b1e6af215e5..00000000000 --- a/pkg/tsdb/prometheus/testdata/range_nan.result.streaming.golden.jsonc +++ /dev/null @@ -1,89 +0,0 @@ -// 🌟 This was machine generated. Do not edit. 🌟 -// -// Frame[0] { -// "type": "timeseries-many", -// "custom": { -// "resultType": "matrix" -// }, -// "executedQueryString": "Expr: \nStep: 1s" -// } -// Name: {handler="/api/v1/query_range", job="prometheus"} -// Dimensions: 2 Fields by 3 Rows -// +-------------------------------+-----------------------------------------------------+ -// | Name: Time | Name: Value | -// | Labels: | Labels: handler=/api/v1/query_range, job=prometheus | -// | Type: []time.Time | Type: []float64 | -// +-------------------------------+-----------------------------------------------------+ -// | 2022-01-11 08:25:30 +0000 UTC | NaN | -// | 2022-01-11 08:25:31 +0000 UTC | NaN | -// | 2022-01-11 08:25:32 +0000 UTC | NaN | -// +-------------------------------+-----------------------------------------------------+ -// -// -// 🌟 This was machine generated. Do not edit. 🌟 -{ - "frames": [ - { - "schema": { - "name": "{handler=\"/api/v1/query_range\", job=\"prometheus\"}", - "meta": { - "type": "timeseries-many", - "custom": { - "resultType": "matrix" - }, - "executedQueryString": "Expr: \nStep: 1s" - }, - "fields": [ - { - "name": "Time", - "type": "time", - "typeInfo": { - "frame": "time.Time" - }, - "config": { - "interval": 1000 - } - }, - { - "name": "Value", - "type": "number", - "typeInfo": { - "frame": "float64" - }, - "labels": { - "handler": "/api/v1/query_range", - "job": "prometheus" - }, - "config": { - "displayNameFromDS": "{handler=\"/api/v1/query_range\", job=\"prometheus\"}" - } - } - ] - }, - "data": { - "values": [ - [ - 1641889530000, - 1641889531000, - 1641889532000 - ], - [ - null, - null, - null - ] - ], - "entities": [ - null, - { - "NaN": [ - 0, - 1, - 2 - ] - } - ] - } - } - ] -} \ No newline at end of file diff --git a/pkg/tsdb/prometheus/testdata/range_simple.result.streaming.golden.jsonc b/pkg/tsdb/prometheus/testdata/range_simple.result.streaming.golden.jsonc deleted file mode 100644 index f6128233b99..00000000000 --- a/pkg/tsdb/prometheus/testdata/range_simple.result.streaming.golden.jsonc +++ /dev/null @@ -1,153 +0,0 @@ -// 🌟 This was machine generated. Do not edit. 🌟 -// -// Frame[0] { -// "type": "timeseries-many", -// "custom": { -// "resultType": "matrix" -// }, -// "executedQueryString": "Expr: \nStep: 1s" -// } -// Name: prometheus_http_requests_total{code="200", handler="/api/v1/query_range", job="prometheus"} -// Dimensions: 2 Fields by 3 Rows -// +-----------------------------------+--------------------------------------------------------------------------------------------------------+ -// | Name: Time | Name: Value | -// | Labels: | Labels: __name__=prometheus_http_requests_total, code=200, handler=/api/v1/query_range, job=prometheus | -// | Type: []time.Time | Type: []float64 | -// +-----------------------------------+--------------------------------------------------------------------------------------------------------+ -// | 2022-01-11 08:25:30.123 +0000 UTC | 21 | -// | 2022-01-11 08:25:31.123 +0000 UTC | 32 | -// | 2022-01-11 08:25:32.123 +0000 UTC | 43 | -// +-----------------------------------+--------------------------------------------------------------------------------------------------------+ -// -// -// -// Frame[1] { -// "type": "timeseries-many", -// "custom": { -// "resultType": "matrix" -// }, -// "executedQueryString": "Expr: \nStep: 1s" -// } -// Name: prometheus_http_requests_total{code="400", handler="/api/v1/query_range", job="prometheus"} -// Dimensions: 2 Fields by 2 Rows -// +-----------------------------------+--------------------------------------------------------------------------------------------------------+ -// | Name: Time | Name: Value | -// | Labels: | Labels: __name__=prometheus_http_requests_total, code=400, handler=/api/v1/query_range, job=prometheus | -// | Type: []time.Time | Type: []float64 | -// +-----------------------------------+--------------------------------------------------------------------------------------------------------+ -// | 2022-01-11 08:25:29.123 +0000 UTC | 54 | -// | 2022-01-11 08:25:32.123 +0000 UTC | 76 | -// +-----------------------------------+--------------------------------------------------------------------------------------------------------+ -// -// -// 🌟 This was machine generated. Do not edit. 🌟 -{ - "frames": [ - { - "schema": { - "name": "prometheus_http_requests_total{code=\"200\", handler=\"/api/v1/query_range\", job=\"prometheus\"}", - "meta": { - "type": "timeseries-many", - "custom": { - "resultType": "matrix" - }, - "executedQueryString": "Expr: \nStep: 1s" - }, - "fields": [ - { - "name": "Time", - "type": "time", - "typeInfo": { - "frame": "time.Time" - }, - "config": { - "interval": 1000 - } - }, - { - "name": "Value", - "type": "number", - "typeInfo": { - "frame": "float64" - }, - "labels": { - "__name__": "prometheus_http_requests_total", - "code": "200", - "handler": "/api/v1/query_range", - "job": "prometheus" - }, - "config": { - "displayNameFromDS": "prometheus_http_requests_total{code=\"200\", handler=\"/api/v1/query_range\", job=\"prometheus\"}" - } - } - ] - }, - "data": { - "values": [ - [ - 1641889530123, - 1641889531123, - 1641889532123 - ], - [ - 21, - 32, - 43 - ] - ] - } - }, - { - "schema": { - "name": "prometheus_http_requests_total{code=\"400\", handler=\"/api/v1/query_range\", job=\"prometheus\"}", - "meta": { - "type": "timeseries-many", - "custom": { - "resultType": "matrix" - }, - "executedQueryString": "Expr: \nStep: 1s" - }, - "fields": [ - { - "name": "Time", - "type": "time", - "typeInfo": { - "frame": "time.Time" - }, - "config": { - "interval": 1000 - } - }, - { - "name": "Value", - "type": "number", - "typeInfo": { - "frame": "float64" - }, - "labels": { - "__name__": "prometheus_http_requests_total", - "code": "400", - "handler": "/api/v1/query_range", - "job": "prometheus" - }, - "config": { - "displayNameFromDS": "prometheus_http_requests_total{code=\"400\", handler=\"/api/v1/query_range\", job=\"prometheus\"}" - } - } - ] - }, - "data": { - "values": [ - [ - 1641889529123, - 1641889532123 - ], - [ - 54, - 76 - ] - ] - } - } - ] -} \ No newline at end of file From 8f578d18ce339c0ef8dd56d2ea670d0ba880006f Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 3 Oct 2022 16:42:55 +0200 Subject: [PATCH 033/135] Update dependency rollup to v2.79.1 (#56187) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- packages/grafana-data/package.json | 2 +- packages/grafana-e2e-selectors/package.json | 2 +- packages/grafana-e2e/package.json | 2 +- packages/grafana-runtime/package.json | 2 +- packages/grafana-schema/package.json | 2 +- packages/grafana-ui/package.json | 2 +- yarn.lock | 20 ++++++++++---------- 7 files changed, 16 insertions(+), 16 deletions(-) diff --git a/packages/grafana-data/package.json b/packages/grafana-data/package.json index 4e197b6fe70..4ccd61fcdec 100644 --- a/packages/grafana-data/package.json +++ b/packages/grafana-data/package.json @@ -83,7 +83,7 @@ "react-dom": "17.0.2", "react-test-renderer": "17.0.2", "rimraf": "3.0.2", - "rollup": "2.77.2", + "rollup": "2.79.1", "rollup-plugin-dts": "^4.2.2", "rollup-plugin-esbuild": "^4.9.1", "rollup-plugin-node-externals": "^4.1.0", diff --git a/packages/grafana-e2e-selectors/package.json b/packages/grafana-e2e-selectors/package.json index 45b1de30667..99e33dd18f2 100644 --- a/packages/grafana-e2e-selectors/package.json +++ b/packages/grafana-e2e-selectors/package.json @@ -42,7 +42,7 @@ "@types/node": "16.11.45", "esbuild": "0.15.7", "rimraf": "3.0.2", - "rollup": "2.77.2", + "rollup": "2.79.1", "rollup-plugin-dts": "^4.2.2", "rollup-plugin-esbuild": "^4.9.1", "rollup-plugin-node-externals": "^4.1.0" diff --git a/packages/grafana-e2e/package.json b/packages/grafana-e2e/package.json index bdbfa91a4e4..9697fd4b5e4 100644 --- a/packages/grafana-e2e/package.json +++ b/packages/grafana-e2e/package.json @@ -51,7 +51,7 @@ "@types/node": "16.11.45", "@types/uuid": "8.3.4", "esbuild": "0.15.7", - "rollup": "2.77.2", + "rollup": "2.79.1", "rollup-plugin-dts": "^4.2.2", "rollup-plugin-esbuild": "^4.9.1", "rollup-plugin-node-externals": "^4.1.0", diff --git a/packages/grafana-runtime/package.json b/packages/grafana-runtime/package.json index 73f557c6965..67fa50fa3d3 100644 --- a/packages/grafana-runtime/package.json +++ b/packages/grafana-runtime/package.json @@ -65,7 +65,7 @@ "react": "17.0.2", "react-dom": "17.0.2", "rimraf": "3.0.2", - "rollup": "2.77.2", + "rollup": "2.79.1", "rollup-plugin-dts": "^4.2.2", "rollup-plugin-esbuild": "^4.9.1", "rollup-plugin-node-externals": "^4.1.0", diff --git a/packages/grafana-schema/package.json b/packages/grafana-schema/package.json index fe87ef1f45c..36a14efa772 100644 --- a/packages/grafana-schema/package.json +++ b/packages/grafana-schema/package.json @@ -41,7 +41,7 @@ "@swc/helpers": "0.4.3", "esbuild": "0.15.7", "rimraf": "3.0.2", - "rollup": "2.77.2", + "rollup": "2.79.1", "rollup-plugin-dts": "^4.2.2", "rollup-plugin-esbuild": "^4.9.1", "rollup-plugin-node-externals": "^4.1.0", diff --git a/packages/grafana-ui/package.json b/packages/grafana-ui/package.json index b093bbb9f80..c024a611cb1 100644 --- a/packages/grafana-ui/package.json +++ b/packages/grafana-ui/package.json @@ -179,7 +179,7 @@ "react-dom": "17.0.2", "react-test-renderer": "17.0.2", "rimraf": "3.0.2", - "rollup": "2.77.2", + "rollup": "2.79.1", "rollup-plugin-dts": "^4.2.2", "rollup-plugin-esbuild": "^4.9.1", "rollup-plugin-node-externals": "^4.1.0", diff --git a/yarn.lock b/yarn.lock index 68094f7d3c4..3d771c328f4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5295,7 +5295,7 @@ __metadata: react-test-renderer: 17.0.2 regenerator-runtime: 0.13.9 rimraf: 3.0.2 - rollup: 2.77.2 + rollup: 2.79.1 rollup-plugin-dts: ^4.2.2 rollup-plugin-esbuild: ^4.9.1 rollup-plugin-node-externals: ^4.1.0 @@ -5322,7 +5322,7 @@ __metadata: "@types/node": 16.11.45 esbuild: 0.15.7 rimraf: 3.0.2 - rollup: 2.77.2 + rollup: 2.79.1 rollup-plugin-dts: ^4.2.2 rollup-plugin-esbuild: ^4.9.1 rollup-plugin-node-externals: ^4.1.0 @@ -5359,7 +5359,7 @@ __metadata: mocha: 10.0.0 resolve-as-bin: 2.1.0 rimraf: 3.0.2 - rollup: 2.77.2 + rollup: 2.79.1 rollup-plugin-dts: ^4.2.2 rollup-plugin-esbuild: ^4.9.1 rollup-plugin-node-externals: ^4.1.0 @@ -5449,7 +5449,7 @@ __metadata: react: 17.0.2 react-dom: 17.0.2 rimraf: 3.0.2 - rollup: 2.77.2 + rollup: 2.79.1 rollup-plugin-dts: ^4.2.2 rollup-plugin-esbuild: ^4.9.1 rollup-plugin-node-externals: ^4.1.0 @@ -5476,7 +5476,7 @@ __metadata: "@swc/helpers": 0.4.3 esbuild: 0.15.7 rimraf: 3.0.2 - rollup: 2.77.2 + rollup: 2.79.1 rollup-plugin-dts: ^4.2.2 rollup-plugin-esbuild: ^4.9.1 rollup-plugin-node-externals: ^4.1.0 @@ -5715,7 +5715,7 @@ __metadata: react-use: 17.4.0 react-window: 1.8.7 rimraf: 3.0.2 - rollup: 2.77.2 + rollup: 2.79.1 rollup-plugin-dts: ^4.2.2 rollup-plugin-esbuild: ^4.9.1 rollup-plugin-node-externals: ^4.1.0 @@ -35725,9 +35725,9 @@ __metadata: languageName: node linkType: hard -"rollup@npm:2.77.2": - version: 2.77.2 - resolution: "rollup@npm:2.77.2" +"rollup@npm:2.79.1": + version: 2.79.1 + resolution: "rollup@npm:2.79.1" dependencies: fsevents: ~2.3.2 dependenciesMeta: @@ -35735,7 +35735,7 @@ __metadata: optional: true bin: rollup: dist/bin/rollup - checksum: 5a84fb98a6f858906bceba091430442f6c1f362b07c5fa9123b708f87e39f52640e34a189cd9a1776ceae61300055c78ba648205fa03188451539ebeb19797df + checksum: 6a2bf167b3587d4df709b37d149ad0300692cc5deb510f89ac7bdc77c8738c9546ae3de9322b0968e1ed2b0e984571f5f55aae28fa7de4cfcb1bc5402a4e2be6 languageName: node linkType: hard From 05e958f68907ccca6c4250ee8c2182076171f74a Mon Sep 17 00:00:00 2001 From: Gareth Dawson Date: Mon, 3 Oct 2022 15:56:30 +0100 Subject: [PATCH 034/135] Loki: Add tests for LokiOptionFields.tsx (#56183) * WIP: Added tests to LokiOptionFields.test.tsx * chore(loki-option-fields): fix error with `userEvent` Using `fireEvent` prevents the running condition. * Add tests for LokiOptionFields.tsx * chore: remove unwanted comments * chore: update test names Co-authored-by: Matias Chomicki --- .../loki/components/LokiOptionFields.test.tsx | 77 ++++++++++++++++--- 1 file changed, 67 insertions(+), 10 deletions(-) diff --git a/public/app/plugins/datasource/loki/components/LokiOptionFields.test.tsx b/public/app/plugins/datasource/loki/components/LokiOptionFields.test.tsx index 1219d19a5de..9eb32ab2098 100644 --- a/public/app/plugins/datasource/loki/components/LokiOptionFields.test.tsx +++ b/public/app/plugins/datasource/loki/components/LokiOptionFields.test.tsx @@ -1,4 +1,4 @@ -import { render, screen } from '@testing-library/react'; +import { render, screen, waitFor, fireEvent } from '@testing-library/react'; import React from 'react'; import { LokiOptionFieldsProps, LokiOptionFields } from './LokiOptionFields'; @@ -18,17 +18,74 @@ const setup = () => { onRunQuery, }; - return render(); + return props; }; -describe('LokiOptionFields', () => { - it('should render step field', () => { - setup(); - expect(screen.getByTestId('lineLimitField')).toBeInTheDocument(); - }); - - it('should render query type field', () => { - setup(); +describe('Query Type Field', () => { + it('should render a query type field', () => { + const props = setup(); + render(); expect(screen.getByTestId('queryTypeField')).toBeInTheDocument(); }); + + it('should have a default value of "Range"', () => { + const props = setup(); + render(); + expect(screen.getByLabelText('Range')).toBeChecked(); + expect(screen.getByLabelText('Instant')).not.toBeChecked(); + }); + + it('should call onChange when value is changed', async () => { + const props = setup(); + render(); + fireEvent.click(screen.getByLabelText('Instant')); // (`userEvent.click()` triggers an error, so switching here to `fireEvent`.) + await waitFor(() => expect(props.onChange).toHaveBeenCalledTimes(1)); + }); + + it('renders as expected when the query type is instant', () => { + const props = setup(); + render(); + expect(screen.getByLabelText('Instant')).toBeChecked(); + expect(screen.getByLabelText('Range')).not.toBeChecked(); + }); +}); + +describe('Line Limit Field', () => { + it('should render a line limit field', () => { + const props = setup(); + render(); + expect(screen.getByRole('spinbutton')).toBeInTheDocument(); + }); + + it('should have a default value of 1', () => { + const props = setup(); + render(); + expect(screen.getByRole('spinbutton')).toHaveValue(1); + }); + + it('displays the expected line limit value', () => { + const props = setup(); + render(); + expect(screen.getByRole('spinbutton')).toHaveValue(123); + }); +}); + +describe('Resolution Field', () => { + it('should render the resolution field', () => { + const props = setup(); + render(); + expect(screen.getByRole('combobox')).toBeInTheDocument(); + }); + + it('should have a default value of 1', async () => { + const props = setup(); + render(); + expect(await screen.findByText('1/1')).toBeInTheDocument(); + }); + + it('displays the expected resolution value', async () => { + const props = setup(); + render(); + expect(await screen.findByText('1/5')).toBeInTheDocument(); + }); }); From bcd1c48a4dc8446c4c2aab19978d3f03d08ae10a Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 3 Oct 2022 16:27:37 +0100 Subject: [PATCH 035/135] Update dependency rollup-plugin-esbuild to v4.10.1 (#56191) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- packages/grafana-data/package.json | 2 +- packages/grafana-e2e-selectors/package.json | 2 +- packages/grafana-e2e/package.json | 2 +- packages/grafana-runtime/package.json | 2 +- packages/grafana-schema/package.json | 2 +- packages/grafana-ui/package.json | 2 +- yarn.lock | 20 ++++++++++---------- 7 files changed, 16 insertions(+), 16 deletions(-) diff --git a/packages/grafana-data/package.json b/packages/grafana-data/package.json index 4ccd61fcdec..0c0fdf1058c 100644 --- a/packages/grafana-data/package.json +++ b/packages/grafana-data/package.json @@ -85,7 +85,7 @@ "rimraf": "3.0.2", "rollup": "2.79.1", "rollup-plugin-dts": "^4.2.2", - "rollup-plugin-esbuild": "^4.9.1", + "rollup-plugin-esbuild": "4.10.1", "rollup-plugin-node-externals": "^4.1.0", "sinon": "14.0.0", "typescript": "4.8.2" diff --git a/packages/grafana-e2e-selectors/package.json b/packages/grafana-e2e-selectors/package.json index 99e33dd18f2..e6c239a42c3 100644 --- a/packages/grafana-e2e-selectors/package.json +++ b/packages/grafana-e2e-selectors/package.json @@ -44,7 +44,7 @@ "rimraf": "3.0.2", "rollup": "2.79.1", "rollup-plugin-dts": "^4.2.2", - "rollup-plugin-esbuild": "^4.9.1", + "rollup-plugin-esbuild": "4.10.1", "rollup-plugin-node-externals": "^4.1.0" }, "dependencies": { diff --git a/packages/grafana-e2e/package.json b/packages/grafana-e2e/package.json index 9697fd4b5e4..464f1883ec3 100644 --- a/packages/grafana-e2e/package.json +++ b/packages/grafana-e2e/package.json @@ -53,7 +53,7 @@ "esbuild": "0.15.7", "rollup": "2.79.1", "rollup-plugin-dts": "^4.2.2", - "rollup-plugin-esbuild": "^4.9.1", + "rollup-plugin-esbuild": "4.10.1", "rollup-plugin-node-externals": "^4.1.0", "webpack": "5.74.0" }, diff --git a/packages/grafana-runtime/package.json b/packages/grafana-runtime/package.json index 67fa50fa3d3..0e98e40f54e 100644 --- a/packages/grafana-runtime/package.json +++ b/packages/grafana-runtime/package.json @@ -67,7 +67,7 @@ "rimraf": "3.0.2", "rollup": "2.79.1", "rollup-plugin-dts": "^4.2.2", - "rollup-plugin-esbuild": "^4.9.1", + "rollup-plugin-esbuild": "4.10.1", "rollup-plugin-node-externals": "^4.1.0", "rollup-plugin-sourcemaps": "0.6.3", "rollup-plugin-terser": "7.0.2", diff --git a/packages/grafana-schema/package.json b/packages/grafana-schema/package.json index 36a14efa772..745fed83fae 100644 --- a/packages/grafana-schema/package.json +++ b/packages/grafana-schema/package.json @@ -43,7 +43,7 @@ "rimraf": "3.0.2", "rollup": "2.79.1", "rollup-plugin-dts": "^4.2.2", - "rollup-plugin-esbuild": "^4.9.1", + "rollup-plugin-esbuild": "4.10.1", "rollup-plugin-node-externals": "^4.1.0", "typescript": "4.8.2" }, diff --git a/packages/grafana-ui/package.json b/packages/grafana-ui/package.json index c024a611cb1..3b80c51d1d4 100644 --- a/packages/grafana-ui/package.json +++ b/packages/grafana-ui/package.json @@ -181,7 +181,7 @@ "rimraf": "3.0.2", "rollup": "2.79.1", "rollup-plugin-dts": "^4.2.2", - "rollup-plugin-esbuild": "^4.9.1", + "rollup-plugin-esbuild": "4.10.1", "rollup-plugin-node-externals": "^4.1.0", "rollup-plugin-svg-import": "^1.6.0", "sass-loader": "13.0.2", diff --git a/yarn.lock b/yarn.lock index 3d771c328f4..84231c5470c 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5297,7 +5297,7 @@ __metadata: rimraf: 3.0.2 rollup: 2.79.1 rollup-plugin-dts: ^4.2.2 - rollup-plugin-esbuild: ^4.9.1 + rollup-plugin-esbuild: 4.10.1 rollup-plugin-node-externals: ^4.1.0 rxjs: 7.5.6 sinon: 14.0.0 @@ -5324,7 +5324,7 @@ __metadata: rimraf: 3.0.2 rollup: 2.79.1 rollup-plugin-dts: ^4.2.2 - rollup-plugin-esbuild: ^4.9.1 + rollup-plugin-esbuild: 4.10.1 rollup-plugin-node-externals: ^4.1.0 tslib: 2.4.0 typescript: 4.8.2 @@ -5361,7 +5361,7 @@ __metadata: rimraf: 3.0.2 rollup: 2.79.1 rollup-plugin-dts: ^4.2.2 - rollup-plugin-esbuild: ^4.9.1 + rollup-plugin-esbuild: 4.10.1 rollup-plugin-node-externals: ^4.1.0 tracelib: 1.0.1 ts-loader: 6.2.2 @@ -5451,7 +5451,7 @@ __metadata: rimraf: 3.0.2 rollup: 2.79.1 rollup-plugin-dts: ^4.2.2 - rollup-plugin-esbuild: ^4.9.1 + rollup-plugin-esbuild: 4.10.1 rollup-plugin-node-externals: ^4.1.0 rollup-plugin-sourcemaps: 0.6.3 rollup-plugin-terser: 7.0.2 @@ -5478,7 +5478,7 @@ __metadata: rimraf: 3.0.2 rollup: 2.79.1 rollup-plugin-dts: ^4.2.2 - rollup-plugin-esbuild: ^4.9.1 + rollup-plugin-esbuild: 4.10.1 rollup-plugin-node-externals: ^4.1.0 tslib: 2.4.0 typescript: 4.8.2 @@ -5717,7 +5717,7 @@ __metadata: rimraf: 3.0.2 rollup: 2.79.1 rollup-plugin-dts: ^4.2.2 - rollup-plugin-esbuild: ^4.9.1 + rollup-plugin-esbuild: 4.10.1 rollup-plugin-node-externals: ^4.1.0 rollup-plugin-svg-import: ^1.6.0 rxjs: 7.5.6 @@ -35657,9 +35657,9 @@ __metadata: languageName: node linkType: hard -"rollup-plugin-esbuild@npm:^4.9.1": - version: 4.9.1 - resolution: "rollup-plugin-esbuild@npm:4.9.1" +"rollup-plugin-esbuild@npm:4.10.1": + version: 4.10.1 + resolution: "rollup-plugin-esbuild@npm:4.10.1" dependencies: "@rollup/pluginutils": ^4.1.1 debug: ^4.3.3 @@ -35669,7 +35669,7 @@ __metadata: peerDependencies: esbuild: ">=0.10.1" rollup: ^1.20.0 || ^2.0.0 - checksum: 9b74a7ccff6e1487956c2f3f79e302e96b97036e445f2e56749decccda8733e49354fb1e01698420909fc0c817d535771bdbbb8beb046d961af3e08f005741d8 + checksum: 8bc7c90c972e00d6757b92d6ee4c04d9b0f34b61659f4c544b3994091bc5fdfe4ffdcbf56999111da39e39e650eb93001d587843e87bc306322d9869afe4d60b languageName: node linkType: hard From dba0baec695cbc08a74d635bf4175289b24e34ec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Torkel=20=C3=96degaard?= Date: Mon, 3 Oct 2022 17:30:53 +0200 Subject: [PATCH 036/135] TopNav: Fix pages import dashboard and create new folder (#56182) --- .../folders/components/NewDashboardsFolder.tsx | 12 ++++++++++-- .../manage-dashboards/DashboardImportPage.tsx | 10 ++++++++-- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/public/app/features/folders/components/NewDashboardsFolder.tsx b/public/app/features/folders/components/NewDashboardsFolder.tsx index 737048b49e4..f7743e4e80d 100644 --- a/public/app/features/folders/components/NewDashboardsFolder.tsx +++ b/public/app/features/folders/components/NewDashboardsFolder.tsx @@ -1,6 +1,8 @@ import React, { PureComponent } from 'react'; import { connect, ConnectedProps } from 'react-redux'; +import { NavModelItem } from '@grafana/data'; +import { config } from '@grafana/runtime'; import { Button, Input, Form, Field } from '@grafana/ui'; import { Page } from 'app/core/components/Page/Page'; @@ -39,11 +41,17 @@ export class NewDashboardsFolder extends PureComponent { }); }; + pageNav: NavModelItem = { + text: 'Create a new folder', + subTitle: 'Folders provide a way to group dashboards and alert rules.', + breadcrumbs: [{ title: 'Dashboards', url: 'dashboards' }], + }; + render() { return ( - + -

New dashboard folder

+ {!config.featureToggles.topnav &&

New dashboard folder

} {({ register, errors }) => ( <> diff --git a/public/app/features/manage-dashboards/DashboardImportPage.tsx b/public/app/features/manage-dashboards/DashboardImportPage.tsx index f27de866813..23491016398 100644 --- a/public/app/features/manage-dashboards/DashboardImportPage.tsx +++ b/public/app/features/manage-dashboards/DashboardImportPage.tsx @@ -2,7 +2,7 @@ import { css } from '@emotion/css'; import React, { FormEvent, PureComponent } from 'react'; import { connect, ConnectedProps } from 'react-redux'; -import { AppEvents, GrafanaTheme2, LoadingState } from '@grafana/data'; +import { AppEvents, GrafanaTheme2, LoadingState, NavModelItem } from '@grafana/data'; import { selectors } from '@grafana/e2e-selectors'; import { reportInteraction } from '@grafana/runtime'; import { @@ -187,11 +187,17 @@ class UnthemedDashboardImport extends PureComponent { ); } + pageNav: NavModelItem = { + text: 'Import dashboard', + subTitle: 'Import dashboard from file or Grafana.com"', + breadcrumbs: [{ title: 'Dashboards', url: 'dashboards' }], + }; + render() { const { loadingState } = this.props; return ( - + {loadingState === LoadingState.Loading && ( From ad48cee2bbf6c708df8cb6bc61200bb25183d3aa Mon Sep 17 00:00:00 2001 From: Ethan Date: Mon, 3 Oct 2022 11:53:28 -0400 Subject: [PATCH 037/135] init sbom action (#56177) --- .github/workflows/sbom-report.yml | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) create mode 100644 .github/workflows/sbom-report.yml diff --git a/.github/workflows/sbom-report.yml b/.github/workflows/sbom-report.yml new file mode 100644 index 00000000000..bae173f6ef6 --- /dev/null +++ b/.github/workflows/sbom-report.yml @@ -0,0 +1,20 @@ +name: syft-sbom-ci + +on: + release: + types: [created] + +jobs: + syft-sbom: + + runs-on: ubuntu-latest + + steps: + - name: Checkout + uses: actions/checkout@v2 + + - name: Anchore SBOM Action + uses: anchore/sbom-action@v0.12.0 + with: + artifact-name: ${{ github.event.repository.name }}-spdx.json + From 82d80154694c73cab1004fdbf688ba85979b3bda Mon Sep 17 00:00:00 2001 From: Brendan O'Handley Date: Mon, 3 Oct 2022 17:00:46 -0400 Subject: [PATCH 038/135] OpenTSDB: Convert the OpenTSDB Query Editor from Angular to React (#54677) * add query editor to module * add metric section, add tests, update query type * remove use of any for betterer * fix test * add tooltip for alias * run runQuery on select change, fix metric select loading * add downsample row, differentiate for tsdb version * add tests for mteric section and downsample section * add filter section react component and tests * add tag section and tests * add rate section and tests * remove angular code * fix styling * remove comments * remove unused code --- .betterer.results | 33 --- .../opentsdb/components/DownSample.test.tsx | 74 +++++ .../opentsdb/components/DownSample.tsx | 103 +++++++ .../components/FilterSection.test.tsx | 107 +++++++ .../opentsdb/components/FilterSection.tsx | 246 ++++++++++++++++ .../components/MetricSection.test.tsx | 68 +++++ .../opentsdb/components/MetricSection.tsx | 110 ++++++++ .../components/OpenTsdbQueryEditor.test.tsx | 39 +++ .../components/OpenTsdbQueryEditor.tsx | 160 +++++++++++ .../opentsdb/components/RateSection.test.tsx | 68 +++++ .../opentsdb/components/RateSection.tsx | 107 +++++++ .../opentsdb/components/TagSection.test.tsx | 104 +++++++ .../opentsdb/components/TagSection.tsx | 219 +++++++++++++++ .../datasource/opentsdb/components/styles.ts | 5 + .../plugins/datasource/opentsdb/datasource.ts | 11 +- .../app/plugins/datasource/opentsdb/module.ts | 4 +- .../opentsdb/partials/query.editor.html | 264 ------------------ .../plugins/datasource/opentsdb/query_ctrl.ts | 225 --------------- .../opentsdb/specs/query_ctrl.test.ts | 93 ------ .../app/plugins/datasource/opentsdb/types.ts | 33 ++- 20 files changed, 1451 insertions(+), 622 deletions(-) create mode 100644 public/app/plugins/datasource/opentsdb/components/DownSample.test.tsx create mode 100644 public/app/plugins/datasource/opentsdb/components/DownSample.tsx create mode 100644 public/app/plugins/datasource/opentsdb/components/FilterSection.test.tsx create mode 100644 public/app/plugins/datasource/opentsdb/components/FilterSection.tsx create mode 100644 public/app/plugins/datasource/opentsdb/components/MetricSection.test.tsx create mode 100644 public/app/plugins/datasource/opentsdb/components/MetricSection.tsx create mode 100644 public/app/plugins/datasource/opentsdb/components/OpenTsdbQueryEditor.test.tsx create mode 100644 public/app/plugins/datasource/opentsdb/components/OpenTsdbQueryEditor.tsx create mode 100644 public/app/plugins/datasource/opentsdb/components/RateSection.test.tsx create mode 100644 public/app/plugins/datasource/opentsdb/components/RateSection.tsx create mode 100644 public/app/plugins/datasource/opentsdb/components/TagSection.test.tsx create mode 100644 public/app/plugins/datasource/opentsdb/components/TagSection.tsx create mode 100644 public/app/plugins/datasource/opentsdb/components/styles.ts delete mode 100644 public/app/plugins/datasource/opentsdb/partials/query.editor.html delete mode 100644 public/app/plugins/datasource/opentsdb/query_ctrl.ts delete mode 100644 public/app/plugins/datasource/opentsdb/specs/query_ctrl.test.ts diff --git a/.betterer.results b/.betterer.results index e8f91a1b754..925d7652935 100644 --- a/.betterer.results +++ b/.betterer.results @@ -6850,43 +6850,10 @@ exports[`better eslint`] = { "public/app/plugins/datasource/opentsdb/migrations.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"] ], - "public/app/plugins/datasource/opentsdb/query_ctrl.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"], - [0, 0, 0, "Unexpected any. Specify a different type.", "2"], - [0, 0, 0, "Unexpected any. Specify a different type.", "3"], - [0, 0, 0, "Unexpected any. Specify a different type.", "4"], - [0, 0, 0, "Unexpected any. Specify a different type.", "5"], - [0, 0, 0, "Unexpected any. Specify a different type.", "6"], - [0, 0, 0, "Unexpected any. Specify a different type.", "7"], - [0, 0, 0, "Unexpected any. Specify a different type.", "8"], - [0, 0, 0, "Unexpected any. Specify a different type.", "9"], - [0, 0, 0, "Unexpected any. Specify a different type.", "10"], - [0, 0, 0, "Unexpected any. Specify a different type.", "11"], - [0, 0, 0, "Unexpected any. Specify a different type.", "12"], - [0, 0, 0, "Unexpected any. Specify a different type.", "13"], - [0, 0, 0, "Unexpected any. Specify a different type.", "14"], - [0, 0, 0, "Unexpected any. Specify a different type.", "15"], - [0, 0, 0, "Unexpected any. Specify a different type.", "16"], - [0, 0, 0, "Unexpected any. Specify a different type.", "17"], - [0, 0, 0, "Unexpected any. Specify a different type.", "18"], - [0, 0, 0, "Unexpected any. Specify a different type.", "19"], - [0, 0, 0, "Unexpected any. Specify a different type.", "20"], - [0, 0, 0, "Unexpected any. Specify a different type.", "21"], - [0, 0, 0, "Unexpected any. Specify a different type.", "22"], - [0, 0, 0, "Unexpected any. Specify a different type.", "23"] - ], "public/app/plugins/datasource/opentsdb/specs/datasource.test.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], [0, 0, 0, "Unexpected any. Specify a different type.", "1"] ], - "public/app/plugins/datasource/opentsdb/specs/query_ctrl.test.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"], - [0, 0, 0, "Unexpected any. Specify a different type.", "1"] - ], - "public/app/plugins/datasource/opentsdb/types.ts:5381": [ - [0, 0, 0, "Unexpected any. Specify a different type.", "0"] - ], "public/app/plugins/datasource/postgres/datasource.test.ts:5381": [ [0, 0, 0, "Unexpected any. Specify a different type.", "0"], [0, 0, 0, "Unexpected any. Specify a different type.", "1"], diff --git a/public/app/plugins/datasource/opentsdb/components/DownSample.test.tsx b/public/app/plugins/datasource/opentsdb/components/DownSample.test.tsx new file mode 100644 index 00000000000..3f903d10ec4 --- /dev/null +++ b/public/app/plugins/datasource/opentsdb/components/DownSample.test.tsx @@ -0,0 +1,74 @@ +import { fireEvent, render, screen } from '@testing-library/react'; +import React from 'react'; + +import { OpenTsdbQuery } from '../types'; + +import { DownSample, DownSampleProps, testIds } from './DownSample'; + +const onRunQuery = jest.fn(); +const onChange = jest.fn(); + +const tsdbVersions = [ + { label: '<=2.1', value: 1 }, + { label: '==2.2', value: 2 }, + { label: '==2.3', value: 3 }, +]; + +const setup = (tsdbVersion: number, propOverrides?: Object) => { + const query: OpenTsdbQuery = { + metric: '', + refId: 'A', + downsampleAggregator: 'avg', + downsampleFillPolicy: 'none', + }; + const props: DownSampleProps = { + query, + onChange: onChange, + onRunQuery: onRunQuery, + aggregators: ['avg'], + fillPolicies: ['none'], + tsdbVersion: tsdbVersion, + }; + + Object.assign(props, propOverrides); + + return render(); +}; +describe('DownSample', () => { + beforeEach(() => { + jest.clearAllMocks(); + }); + + it('should render downsample section', () => { + setup(tsdbVersions[0].value); + expect(screen.getByTestId(testIds.section)).toBeInTheDocument(); + }); + + describe('downsample interval', () => { + it('should call runQuery on blur', () => { + setup(tsdbVersions[0].value); + fireEvent.click(screen.getByTestId('downsample-interval')); + fireEvent.blur(screen.getByTestId('downsample-interval')); + expect(onRunQuery).toHaveBeenCalled(); + }); + }); + + describe('aggregator select', () => { + it('should contain an aggregator', () => { + setup(tsdbVersions[0].value); + expect(screen.getByText('avg')).toBeInTheDocument(); + }); + }); + + describe('fillpolicies select', () => { + it('should contain an fillpolicy for versions >= 2.2', () => { + setup(tsdbVersions[1].value); + expect(screen.getByText('none')).toBeInTheDocument(); + }); + + it('does not display fill policy for version >= 2', () => { + setup(tsdbVersions[0].value); + expect(screen.queryByText('none')).toBeNull(); + }); + }); +}); diff --git a/public/app/plugins/datasource/opentsdb/components/DownSample.tsx b/public/app/plugins/datasource/opentsdb/components/DownSample.tsx new file mode 100644 index 00000000000..ab022d66f48 --- /dev/null +++ b/public/app/plugins/datasource/opentsdb/components/DownSample.tsx @@ -0,0 +1,103 @@ +import React from 'react'; + +import { toOption } from '@grafana/data'; +import { InlineLabel, Select, Input, InlineFormLabel, InlineSwitch } from '@grafana/ui'; + +import { OpenTsdbQuery } from '../types'; + +import { paddingRightClass } from './styles'; + +export interface DownSampleProps { + query: OpenTsdbQuery; + onChange: (query: OpenTsdbQuery) => void; + onRunQuery: () => void; + aggregators: string[]; + fillPolicies: string[]; + tsdbVersion: number; +} + +export function DownSample({ query, onChange, onRunQuery, aggregators, fillPolicies, tsdbVersion }: DownSampleProps) { + const aggregatorOptions = aggregators.map((value: string) => toOption(value)); + const fillPolicyOptions = fillPolicies.map((value: string) => toOption(value)); + + return ( +
+
+ + Leave interval blank for auto or for example use 1m +
+ } + > + Down sample + + { + const value = e.currentTarget.value; + onChange({ ...query, downsampleInterval: value }); + }} + onBlur={() => onRunQuery()} + /> +
+
+ + Aggregator + + { + if (value) { + onChange({ ...query, downsampleFillPolicy: value }); + onRunQuery(); + } + }} + /> +
+ )} +
+ Disable downsampling + { + const disableDownsampling = query.disableDownsampling ?? false; + onChange({ ...query, disableDownsampling: !disableDownsampling }); + onRunQuery(); + }} + /> +
+
+
+
+
+ ); +} + +export const testIds = { + section: 'opentsdb-downsample', + interval: 'downsample-interval', +}; diff --git a/public/app/plugins/datasource/opentsdb/components/FilterSection.test.tsx b/public/app/plugins/datasource/opentsdb/components/FilterSection.test.tsx new file mode 100644 index 00000000000..b3c60167b93 --- /dev/null +++ b/public/app/plugins/datasource/opentsdb/components/FilterSection.test.tsx @@ -0,0 +1,107 @@ +import { fireEvent, render, screen } from '@testing-library/react'; +import React from 'react'; + +import { OpenTsdbQuery } from '../types'; + +import { FilterSection, FilterSectionProps, testIds } from './FilterSection'; + +const onRunQuery = jest.fn(); +const onChange = jest.fn(); + +const setup = (propOverrides?: Object) => { + const suggestTagKeys = jest.fn(); + const suggestTagValues = jest.fn(); + + const query: OpenTsdbQuery = { + metric: 'cpu', + refId: 'A', + downsampleAggregator: 'avg', + downsampleFillPolicy: 'none', + filters: [ + { + filter: 'server1', + groupBy: true, + tagk: 'hostname', + type: 'iliteral_or', + }, + ], + }; + + const props: FilterSectionProps = { + query, + onChange: onChange, + onRunQuery: onRunQuery, + suggestTagKeys: suggestTagKeys, + filterTypes: ['literal_or'], + suggestTagValues: suggestTagValues, + }; + + Object.assign(props, propOverrides); + + return render(); +}; +describe('FilterSection', () => { + beforeEach(() => { + jest.clearAllMocks(); + }); + + it('should render filter section', () => { + setup(); + expect(screen.getByTestId(testIds.section)).toBeInTheDocument(); + }); + + describe('filter editor', () => { + it('open the editor on clicking +', () => { + setup(); + fireEvent.click(screen.getByTestId(testIds.open)); + expect(screen.getByText('Group by')).toBeInTheDocument(); + }); + + it('should display a list of filters', () => { + setup(); + expect(screen.getByTestId(testIds.list + '0')).toBeInTheDocument(); + }); + + it('should call runQuery on adding a filter', () => { + setup(); + fireEvent.click(screen.getByTestId(testIds.open)); + fireEvent.click(screen.getByText('add filter')); + expect(onRunQuery).toHaveBeenCalled(); + }); + + it('should have an error if tags are present when adding a filter', () => { + const query: OpenTsdbQuery = { + metric: 'cpu', + refId: 'A', + downsampleAggregator: 'avg', + downsampleFillPolicy: 'none', + tags: [{}], + }; + setup({ query }); + fireEvent.click(screen.getByTestId(testIds.open)); + fireEvent.click(screen.getByText('add filter')); + expect(screen.getByTestId(testIds.error)).toBeInTheDocument(); + }); + + it('should remove a filter', () => { + const query: OpenTsdbQuery = { + metric: 'cpu', + refId: 'A', + downsampleAggregator: 'avg', + downsampleFillPolicy: 'none', + filters: [ + { + filter: 'server1', + groupBy: true, + tagk: 'hostname', + type: 'iliteral_or', + }, + ], + }; + + setup({ query }); + fireEvent.click(screen.getByTestId(testIds.remove)); + expect(query.filters?.length === 0).toBeTruthy(); + }); + }); +}); diff --git a/public/app/plugins/datasource/opentsdb/components/FilterSection.tsx b/public/app/plugins/datasource/opentsdb/components/FilterSection.tsx new file mode 100644 index 00000000000..9bf1c4aa6b3 --- /dev/null +++ b/public/app/plugins/datasource/opentsdb/components/FilterSection.tsx @@ -0,0 +1,246 @@ +import { size } from 'lodash'; +import React, { useCallback, useState } from 'react'; + +import { SelectableValue, toOption } from '@grafana/data'; +import { InlineLabel, Select, InlineFormLabel, InlineSwitch, Icon } from '@grafana/ui'; + +import { OpenTsdbFilter, OpenTsdbQuery } from '../types'; + +export interface FilterSectionProps { + query: OpenTsdbQuery; + onChange: (query: OpenTsdbQuery) => void; + onRunQuery: () => void; + suggestTagKeys: (query: OpenTsdbQuery) => Promise; + filterTypes: string[]; + suggestTagValues: () => Promise; +} + +export function FilterSection({ + query, + onChange, + onRunQuery, + suggestTagKeys, + filterTypes, + suggestTagValues, +}: FilterSectionProps) { + const [tagKeys, updTagKeys] = useState>>(); + const [keyIsLoading, updKeyIsLoading] = useState(); + + const [tagValues, updTagValues] = useState>>(); + const [valueIsLoading, updValueIsLoading] = useState(); + + const [addFilterMode, updAddFilterMode] = useState(false); + + const [curFilterType, updCurFilterType] = useState('iliteral_or'); + const [curFilterKey, updCurFilterKey] = useState(''); + const [curFilterValue, updCurFilterValue] = useState(''); + const [curFilterGroupBy, updCurFilterGroupBy] = useState(false); + + const [errors, setErrors] = useState(''); + + const filterTypesOptions = filterTypes.map((value: string) => toOption(value)); + + function changeAddFilterMode() { + updAddFilterMode(!addFilterMode); + } + + function addFilter() { + if (query.tags && size(query.tags) > 0) { + const err = 'Please remove tags to use filters, tags and filters are mutually exclusive.'; + setErrors(err); + return; + } + + if (!addFilterMode) { + updAddFilterMode(true); + return; + } + + // Add the filter to the query + const currentFilter = { + type: curFilterType, + tagk: curFilterKey, + filter: curFilterValue, + groupBy: curFilterGroupBy, + }; + + // filters may be undefined + query.filters = query.filters ? query.filters.concat([currentFilter]) : [currentFilter]; + + // reset the inputs + updCurFilterType('literal_or'); + updCurFilterKey(''); + updCurFilterValue(''); + updCurFilterGroupBy(false); + + // fire the query + onChange(query); + onRunQuery(); + + // close the filter ditor + changeAddFilterMode(); + } + + function removeFilter(index: number) { + query.filters?.splice(index, 1); + // fire the query + onChange(query); + onRunQuery(); + } + + function editFilter(fil: OpenTsdbFilter, idx: number) { + removeFilter(idx); + updCurFilterKey(fil.tagk); + updCurFilterValue(fil.filter); + updCurFilterType(fil.type); + updCurFilterGroupBy(fil.groupBy); + addFilter(); + } + + // We are matching words split with space + const splitSeparator = ' '; + const customFilterOption = useCallback((option: SelectableValue, searchQuery: string) => { + const label = option.value ?? ''; + + const searchWords = searchQuery.split(splitSeparator); + return searchWords.reduce((acc, cur) => acc && label.toLowerCase().includes(cur.toLowerCase()), true); + }, []); + + return ( +
+
+ Filters does not work with tags, either of the two will work but not both.
} + > + Filters + + {query.filters && + query.filters.map((fil: OpenTsdbFilter, idx: number) => { + return ( + + {fil.tagk} = {fil.type}({fil.filter}), groupBy = {'' + fil.groupBy} + editFilter(fil, idx)}> + + + removeFilter(idx)} data-testid={testIds.remove}> + + + + ); + })} + {!addFilterMode && ( + + )} +
+ {addFilterMode && ( +
+
+ { + if (value) { + updCurFilterType(value); + } + }} + /> +
+ +
+ { + if (!state.metrics) { + setState({ isLoading: true }); + const metrics = await suggestMetrics(); + setState({ metrics, isLoading: undefined }); + } + }} + isLoading={state.isLoading} + options={state.metrics} + onChange={({ value }) => { + if (value) { + onChange({ ...query, metric: value }); + onRunQuery(); + } + }} + /> +
+
+ + Aggregator + + { + const value = e.currentTarget.value; + onChange({ ...query, alias: value }); + }} + onBlur={() => onRunQuery()} + /> +
+
+
+
+
+ ); +} + +export const testIds = { + section: 'opentsdb-metricsection', + alias: 'metric-alias', +}; diff --git a/public/app/plugins/datasource/opentsdb/components/OpenTsdbQueryEditor.test.tsx b/public/app/plugins/datasource/opentsdb/components/OpenTsdbQueryEditor.test.tsx new file mode 100644 index 00000000000..ca0e6107130 --- /dev/null +++ b/public/app/plugins/datasource/opentsdb/components/OpenTsdbQueryEditor.test.tsx @@ -0,0 +1,39 @@ +import { render, screen } from '@testing-library/react'; +import React from 'react'; + +import OpenTsDatasource from '../datasource'; +import { OpenTsdbQuery } from '../types'; + +import { OpenTsdbQueryEditor, OpenTsdbQueryEditorProps, testIds } from './OpenTsdbQueryEditor'; + +const setup = (propOverrides?: Object) => { + const getAggregators = jest.fn().mockResolvedValue([]); + const getFilterTypes = jest.fn().mockResolvedValue([]); + + const datasourceMock: unknown = { + getAggregators, + getFilterTypes, + tsdbVersion: 1, + }; + + const datasource: OpenTsDatasource = datasourceMock as OpenTsDatasource; + const onRunQuery = jest.fn(); + const onChange = jest.fn(); + const query: OpenTsdbQuery = { metric: '', refId: 'A' }; + const props: OpenTsdbQueryEditorProps = { + datasource: datasource, + onRunQuery: onRunQuery, + onChange: onChange, + query, + }; + + Object.assign(props, propOverrides); + + return render(); +}; +describe('OpenTsdbQueryEditor', () => { + it('should render editor', () => { + setup(); + expect(screen.getByTestId(testIds.editor)).toBeInTheDocument(); + }); +}); diff --git a/public/app/plugins/datasource/opentsdb/components/OpenTsdbQueryEditor.tsx b/public/app/plugins/datasource/opentsdb/components/OpenTsdbQueryEditor.tsx new file mode 100644 index 00000000000..cfb504f9946 --- /dev/null +++ b/public/app/plugins/datasource/opentsdb/components/OpenTsdbQueryEditor.tsx @@ -0,0 +1,160 @@ +import { css } from '@emotion/css'; +import React, { useState } from 'react'; + +import { GrafanaTheme2, QueryEditorProps, textUtil } from '@grafana/data'; +import { useStyles2 } from '@grafana/ui'; + +import OpenTsDatasource from '../datasource'; +import { OpenTsdbOptions, OpenTsdbQuery } from '../types'; + +import { DownSample } from './DownSample'; +import { FilterSection } from './FilterSection'; +import { MetricSection } from './MetricSection'; +import { RateSection } from './RateSection'; +import { TagSection } from './TagSection'; + +export type OpenTsdbQueryEditorProps = QueryEditorProps; + +export function OpenTsdbQueryEditor({ + datasource, + onRunQuery, + onChange, + query, + range, + queries, +}: OpenTsdbQueryEditorProps) { + const styles = useStyles2(getStyles); + + const [aggregators, setAggregators] = useState([ + 'avg', + 'sum', + 'min', + 'max', + 'dev', + 'zimsum', + 'mimmin', + 'mimmax', + ]); + + const fillPolicies: string[] = ['none', 'nan', 'null', 'zero']; + + const [filterTypes, setFilterTypes] = useState([ + 'wildcard', + 'iliteral_or', + 'not_iliteral_or', + 'not_literal_or', + 'iwildcard', + 'literal_or', + 'regexp', + ]); + + const tsdbVersion: number = datasource.tsdbVersion; + + if (!query.aggregator) { + query.aggregator = 'sum'; + } + + if (!query.downsampleAggregator) { + query.downsampleAggregator = 'avg'; + } + + if (!query.downsampleFillPolicy) { + query.downsampleFillPolicy = 'none'; + } + + datasource.getAggregators().then((aggs: string[]) => { + if (aggs.length !== 0) { + setAggregators(aggs); + } + }); + + datasource.getFilterTypes().then((filterTypes: string[]) => { + if (filterTypes.length !== 0) { + setFilterTypes(filterTypes); + } + }); + + // previously called as an autocomplete on every input, + // in this we call it once on init and filter in the MetricSection component + async function suggestMetrics(): Promise> { + return datasource.metricFindQuery('metrics()').then(getTextValues); + } + + // previously called as an autocomplete on every input, + // in this we call it once on init and filter in the MetricSection component + async function suggestTagValues(): Promise> { + return datasource.metricFindQuery('suggest_tagv()').then(getTextValues); + } + + async function suggestTagKeys(query: OpenTsdbQuery): Promise { + return datasource.suggestTagKeys(query); + } + + function getTextValues(metrics: Array<{ text: string }>) { + return metrics.map((value: { text: string }) => { + return { + value: textUtil.escapeHtml(value.text), + description: value.text, + }; + }); + } + + return ( +
+
+ + + {tsdbVersion >= 2 && ( + + )} + + +
+
+ ); +} + +function getStyles(theme: GrafanaTheme2) { + return { + container: css` + display: flex; + `, + visualEditor: css` + flex-grow: 1; + `, + toggleButton: css` + margin-left: ${theme.spacing(0.5)}; + `, + }; +} + +export const testIds = { + editor: 'opentsdb-editor', +}; diff --git a/public/app/plugins/datasource/opentsdb/components/RateSection.test.tsx b/public/app/plugins/datasource/opentsdb/components/RateSection.test.tsx new file mode 100644 index 00000000000..a5b8bf07ee0 --- /dev/null +++ b/public/app/plugins/datasource/opentsdb/components/RateSection.test.tsx @@ -0,0 +1,68 @@ +import { render, screen } from '@testing-library/react'; +import React from 'react'; + +import { OpenTsdbQuery } from '../types'; + +import { RateSection, RateSectionProps, testIds } from './RateSection'; + +const onRunQuery = jest.fn(); +const onChange = jest.fn(); + +const tsdbVersions = [ + { label: '<=2.1', value: 1 }, + { label: '==2.2', value: 2 }, + { label: '==2.3', value: 3 }, +]; + +const setup = (tsdbVersion: number, propOverrides?: Object) => { + const query: OpenTsdbQuery = { + metric: '', + refId: 'A', + downsampleAggregator: 'avg', + downsampleFillPolicy: 'none', + }; + const props: RateSectionProps = { + query, + onChange: onChange, + onRunQuery: onRunQuery, + tsdbVersion: tsdbVersion, + }; + + Object.assign(props, propOverrides); + + return render(); +}; +describe('RateSection', () => { + beforeEach(() => { + jest.clearAllMocks(); + }); + + it('should render the rate section', () => { + setup(tsdbVersions[0].value); + expect(screen.getByTestId(testIds.section)).toBeInTheDocument(); + }); + + describe('rate components', () => { + it('should render the counter switch when rate is switched on', () => { + setup(tsdbVersions[0].value, { query: { shouldComputeRate: true } }); + expect(screen.getByTestId(testIds.isCounter)).toBeInTheDocument(); + }); + + it('should render the max count input when rate & counter are switched on', () => { + setup(tsdbVersions[0].value, { query: { shouldComputeRate: true, isCounter: true } }); + expect(screen.getByTestId(testIds.counterMax)).toBeInTheDocument(); + }); + }); + + describe('explicit tags', () => { + it('should render explicit tags switch for tsdb versions > 2.2', () => { + setup(tsdbVersions[2].value); + expect(screen.getByText('Explicit tags')).toBeInTheDocument(); + }); + + it('should not render explicit tags switch for tsdb versions <= 2.2', () => { + setup(tsdbVersions[0].value); + expect(screen.queryByText('Explicit tags')).toBeNull(); + }); + }); +}); diff --git a/public/app/plugins/datasource/opentsdb/components/RateSection.tsx b/public/app/plugins/datasource/opentsdb/components/RateSection.tsx new file mode 100644 index 00000000000..868969b39b3 --- /dev/null +++ b/public/app/plugins/datasource/opentsdb/components/RateSection.tsx @@ -0,0 +1,107 @@ +import React from 'react'; + +import { InlineLabel, Input, InlineFormLabel, InlineSwitch } from '@grafana/ui'; + +import { OpenTsdbQuery } from '../types'; + +export interface RateSectionProps { + query: OpenTsdbQuery; + onChange: (query: OpenTsdbQuery) => void; + onRunQuery: () => void; + tsdbVersion: number; +} + +export function RateSection({ query, onChange, onRunQuery, tsdbVersion }: RateSectionProps) { + return ( +
+
+ + Rate + + { + const shouldComputeRate = query.shouldComputeRate ?? false; + onChange({ ...query, shouldComputeRate: !shouldComputeRate }); + onRunQuery(); + }} + /> +
+ {query.shouldComputeRate && ( +
+ + Counter + + { + const isCounter = query.isCounter ?? false; + onChange({ ...query, isCounter: !isCounter }); + onRunQuery(); + }} + /> +
+ )} + {query.shouldComputeRate && query.isCounter && ( +
+ + Counter max + + { + const value = e.currentTarget.value; + onChange({ ...query, counterMax: value }); + }} + onBlur={() => onRunQuery()} + /> + + Reset value + + { + const value = e.currentTarget.value; + onChange({ ...query, counterResetValue: value }); + }} + onBlur={() => onRunQuery()} + /> +
+ )} + {tsdbVersion > 2 && ( +
+ + Explicit tags + + { + const explicitTags = query.explicitTags ?? false; + onChange({ ...query, explicitTags: !explicitTags }); + onRunQuery(); + }} + /> +
+ )} +
+
+
+
+ ); +} + +export const testIds = { + section: 'opentsdb-rate', + shouldComputeRate: 'opentsdb-shouldComputeRate', + isCounter: 'opentsdb-is-counter', + counterMax: 'opentsdb-counter-max', + counterResetValue: 'opentsdb-counter-reset-value', + explicitTags: 'opentsdb-explicit-tags', +}; diff --git a/public/app/plugins/datasource/opentsdb/components/TagSection.test.tsx b/public/app/plugins/datasource/opentsdb/components/TagSection.test.tsx new file mode 100644 index 00000000000..e399e52c8c2 --- /dev/null +++ b/public/app/plugins/datasource/opentsdb/components/TagSection.test.tsx @@ -0,0 +1,104 @@ +import { fireEvent, render, screen } from '@testing-library/react'; +import React from 'react'; + +import { OpenTsdbQuery } from '../types'; + +import { TagSection, TagSectionProps, testIds } from './TagSection'; + +const onRunQuery = jest.fn(); +const onChange = jest.fn(); + +const setup = (propOverrides?: Object) => { + const suggestTagKeys = jest.fn(); + const suggestTagValues = jest.fn(); + + const query: OpenTsdbQuery = { + metric: 'cpu', + refId: 'A', + downsampleAggregator: 'avg', + downsampleFillPolicy: 'none', + tags: { + tagKey: 'tagValue', + }, + }; + + const props: TagSectionProps = { + query, + onChange: onChange, + onRunQuery: onRunQuery, + suggestTagKeys: suggestTagKeys, + suggestTagValues: suggestTagValues, + tsdbVersion: 2, + }; + + Object.assign(props, propOverrides); + + return render(); +}; +describe('Tag Section', () => { + beforeEach(() => { + jest.clearAllMocks(); + }); + + it('should render tag section', () => { + setup(); + expect(screen.getByTestId(testIds.section)).toBeInTheDocument(); + }); + + describe('tag editor', () => { + it('open the editor on clicking +', () => { + setup(); + fireEvent.click(screen.getByTestId(testIds.open)); + expect(screen.getByText('add tag')).toBeInTheDocument(); + }); + + it('should display a list of tags', () => { + setup(); + expect(screen.getByTestId(testIds.list + '0')).toBeInTheDocument(); + }); + + it('should call runQuery on adding a tag', () => { + setup(); + fireEvent.click(screen.getByTestId(testIds.open)); + fireEvent.click(screen.getByText('add tag')); + expect(onRunQuery).toHaveBeenCalled(); + }); + + it('should have an error if filters are present when adding a tag', () => { + const query: OpenTsdbQuery = { + metric: 'cpu', + refId: 'A', + downsampleAggregator: 'avg', + downsampleFillPolicy: 'none', + filters: [ + { + filter: 'server1', + groupBy: true, + tagk: 'hostname', + type: 'iliteral_or', + }, + ], + }; + setup({ query }); + fireEvent.click(screen.getByTestId(testIds.open)); + fireEvent.click(screen.getByText('add tag')); + expect(screen.getByTestId(testIds.error)).toBeInTheDocument(); + }); + + it('should remove a tag', () => { + const query: OpenTsdbQuery = { + metric: 'cpu', + refId: 'A', + downsampleAggregator: 'avg', + downsampleFillPolicy: 'none', + tags: { + tag: 'tagToRemove', + }, + }; + + setup({ query }); + fireEvent.click(screen.getByTestId(testIds.remove)); + expect(Object.keys(query.tags).length === 0).toBeTruthy(); + }); + }); +}); diff --git a/public/app/plugins/datasource/opentsdb/components/TagSection.tsx b/public/app/plugins/datasource/opentsdb/components/TagSection.tsx new file mode 100644 index 00000000000..563cdbe8764 --- /dev/null +++ b/public/app/plugins/datasource/opentsdb/components/TagSection.tsx @@ -0,0 +1,219 @@ +import { has, size } from 'lodash'; +import React, { useCallback, useState } from 'react'; + +import { SelectableValue, toOption } from '@grafana/data'; +import { Select, InlineFormLabel, Icon } from '@grafana/ui'; + +import { OpenTsdbQuery } from '../types'; + +export interface TagSectionProps { + query: OpenTsdbQuery; + onChange: (query: OpenTsdbQuery) => void; + onRunQuery: () => void; + suggestTagKeys: (query: OpenTsdbQuery) => Promise; + suggestTagValues: () => Promise; + tsdbVersion: number; +} + +export function TagSection({ + query, + onChange, + onRunQuery, + suggestTagKeys, + suggestTagValues, + tsdbVersion, +}: TagSectionProps) { + const [tagKeys, updTagKeys] = useState>>(); + const [keyIsLoading, updKeyIsLoading] = useState(); + + const [tagValues, updTagValues] = useState>>(); + const [valueIsLoading, updValueIsLoading] = useState(); + + const [addTagMode, updAddTagMode] = useState(false); + + const [curTagKey, updCurTagKey] = useState(''); + const [curTagValue, updCurTagValue] = useState(''); + + const [errors, setErrors] = useState(''); + + function changeAddTagMode() { + updAddTagMode(!addTagMode); + } + + function addTag() { + if (query.filters && size(query.filters) > 0) { + const err = 'Please remove filters to use tags, tags and filters are mutually exclusive.'; + setErrors(err); + return; + } + + if (!addTagMode) { + updAddTagMode(true); + return; + } + + // check for duplicate tags + if (query.tags && has(query.tags, curTagKey)) { + const err = "Duplicate tag key '" + curTagKey + "'."; + setErrors(err); + return; + } + + // tags may be undefined + if (!query.tags) { + query.tags = {}; + } + + // add tag to query + query.tags[curTagKey] = curTagValue; + + // reset the inputs + updCurTagKey(''); + updCurTagValue(''); + + // fire the query + onChange(query); + onRunQuery(); + + // close the tag ditor + changeAddTagMode(); + } + + function removeTag(key: string | number) { + delete query.tags[key]; + + // fire off the query + onChange(query); + onRunQuery(); + } + + function editTag(key: string | number, value: string) { + removeTag(key); + updCurTagKey(key); + updCurTagValue(value); + addTag(); + } + + // We are matching words split with space + const splitSeparator = ' '; + const customTagOption = useCallback((option: SelectableValue, searchQuery: string) => { + const label = option.value ?? ''; + + const searchWords = searchQuery.split(splitSeparator); + return searchWords.reduce((acc, cur) => acc && label.toLowerCase().includes(cur.toLowerCase()), true); + }, []); + + return ( +
+
+ = 2 ?
Please use filters, tags are deprecated in opentsdb 2.2
: undefined} + > + Tags +
+ {query.tags && + Object.keys(query.tags).map((tagKey: string | number, idx: number) => { + const tagValue = query.tags[tagKey]; + return ( + + {tagKey}={tagValue} + editTag(tagKey, tagValue)}> + + + removeTag(tagKey)} data-testid={testIds.remove}> + + + + ); + })} + {!addTagMode && ( + + )} +
+ {addTagMode && ( +
+
+ { + if (!tagValues) { + updValueIsLoading(true); + const tVs = await suggestTagValues(); + updTagValues(tVs); + updValueIsLoading(false); + } + }} + isLoading={valueIsLoading} + options={tagValues} + onChange={({ value }) => { + if (value) { + updCurTagValue(value); + } + }} + /> +
+ +
+ {errors && ( + + )} + + +
+
+ )} +
+
+
+
+ ); +} + +export const testIds = { + section: 'opentsdb-tag', + open: 'opentsdb-tag-editor', + list: 'opentsdb-tag-list', + error: 'opentsdb-tag-error', + remove: 'opentsdb-tag-remove', +}; diff --git a/public/app/plugins/datasource/opentsdb/components/styles.ts b/public/app/plugins/datasource/opentsdb/components/styles.ts new file mode 100644 index 00000000000..c042d110665 --- /dev/null +++ b/public/app/plugins/datasource/opentsdb/components/styles.ts @@ -0,0 +1,5 @@ +import { css } from '@emotion/css'; + +export const paddingRightClass = css({ + paddingRight: '4px', +}); diff --git a/public/app/plugins/datasource/opentsdb/datasource.ts b/public/app/plugins/datasource/opentsdb/datasource.ts index f05d97b52e7..95d43902b71 100644 --- a/public/app/plugins/datasource/opentsdb/datasource.ts +++ b/public/app/plugins/datasource/opentsdb/datasource.ts @@ -1,6 +1,6 @@ -import angular from 'angular'; import { clone, + cloneDeep, compact, each, every, @@ -242,7 +242,8 @@ export default class OpenTsDatasource extends DataSourceApi 0) { - query.filters = angular.copy(target.filters); + query.filters = cloneDeep(target.filters); + if (query.filters) { for (const filterKey in query.filters) { query.filters[filterKey].filter = this.templateSrv.replace( @@ -548,7 +550,8 @@ export default class OpenTsDatasource extends DataSourceApi -
-
- - - -
-
- -
- -
-
-
- - -
- -
-
-
-
- -
-
- - - - blank for auto, or for example 1m - -
- -
- -
- -
-
- -
- -
- -
-
- - - - -
-
-
-
- -
-
- - - -
- {{fil.tagk}} = {{fil.type}}({{fil.filter}}) , groupBy = {{fil.groupBy}} - - - - - - -
- -
- -
-
- - -
- -
- -
- -
-
- -
- - -
- - - - -
- - -
- -
- -
-
-
-
- -
-
- -
- -
- -
- -
- -
- -
- - - - - - - - -
- -
-
-
-
- -
- - - - - - - -
- - - - - - - -
- -
- - -
- -
-
-
-
- - diff --git a/public/app/plugins/datasource/opentsdb/query_ctrl.ts b/public/app/plugins/datasource/opentsdb/query_ctrl.ts deleted file mode 100644 index 7e71745f7c9..00000000000 --- a/public/app/plugins/datasource/opentsdb/query_ctrl.ts +++ /dev/null @@ -1,225 +0,0 @@ -import { auto } from 'angular'; -import { map, size, has } from 'lodash'; - -import { textUtil, rangeUtil } from '@grafana/data'; -import { QueryCtrl } from 'app/plugins/sdk'; - -export class OpenTsQueryCtrl extends QueryCtrl { - static templateUrl = 'partials/query.editor.html'; - aggregators: any; - fillPolicies: any; - filterTypes: any; - tsdbVersion: any; - aggregator: any; - downsampleInterval: any; - downsampleAggregator: any; - downsampleFillPolicy: any; - errors: any; - suggestMetrics: any; - suggestTagKeys: any; - suggestTagValues: any; - addTagMode = false; - addFilterMode = false; - - /** @ngInject */ - constructor($scope: any, $injector: auto.IInjectorService) { - super($scope, $injector); - - this.errors = this.validateTarget(); - this.aggregators = ['avg', 'sum', 'min', 'max', 'dev', 'zimsum', 'mimmin', 'mimmax']; - this.fillPolicies = ['none', 'nan', 'null', 'zero']; - this.filterTypes = [ - 'wildcard', - 'iliteral_or', - 'not_iliteral_or', - 'not_literal_or', - 'iwildcard', - 'literal_or', - 'regexp', - ]; - - this.tsdbVersion = this.datasource.tsdbVersion; - - if (!this.target.aggregator) { - this.target.aggregator = 'sum'; - } - - if (!this.target.downsampleAggregator) { - this.target.downsampleAggregator = 'avg'; - } - - if (!this.target.downsampleFillPolicy) { - this.target.downsampleFillPolicy = 'none'; - } - - this.datasource.getAggregators().then((aggs: { length: number }) => { - if (aggs.length !== 0) { - this.aggregators = aggs; - } - }); - - this.datasource.getFilterTypes().then((filterTypes: { length: number }) => { - if (filterTypes.length !== 0) { - this.filterTypes = filterTypes; - } - }); - - // needs to be defined here as it is called from typeahead - this.suggestMetrics = (query: string, callback: any) => { - this.datasource - .metricFindQuery('metrics(' + query + ')') - .then(this.getTextValues) - .then(callback); - }; - - this.suggestTagKeys = (query: any, callback: any) => { - this.datasource.suggestTagKeys(this.target.metric).then(callback); - }; - - this.suggestTagValues = (query: string, callback: any) => { - this.datasource - .metricFindQuery('suggest_tagv(' + query + ')') - .then(this.getTextValues) - .then(callback); - }; - } - - targetBlur() { - this.errors = this.validateTarget(); - this.refresh(); - } - - getTextValues(metricFindResult: any) { - return map(metricFindResult, (value) => { - return textUtil.escapeHtml(value.text); - }); - } - - addTag() { - if (this.target.filters && this.target.filters.length > 0) { - this.errors.tags = 'Please remove filters to use tags, tags and filters are mutually exclusive.'; - } - - if (!this.addTagMode) { - this.addTagMode = true; - return; - } - - if (!this.target.tags) { - this.target.tags = {}; - } - - this.errors = this.validateTarget(); - - if (!this.errors.tags) { - this.target.tags[this.target.currentTagKey] = this.target.currentTagValue; - this.target.currentTagKey = ''; - this.target.currentTagValue = ''; - this.targetBlur(); - } - - this.addTagMode = false; - } - - removeTag(key: string | number) { - delete this.target.tags[key]; - this.targetBlur(); - } - - editTag(key: string | number, value: any) { - this.removeTag(key); - this.target.currentTagKey = key; - this.target.currentTagValue = value; - this.addTag(); - } - - closeAddTagMode() { - this.addTagMode = false; - return; - } - - addFilter() { - if (this.target.tags && size(this.target.tags) > 0) { - this.errors.filters = 'Please remove tags to use filters, tags and filters are mutually exclusive.'; - } - - if (!this.addFilterMode) { - this.addFilterMode = true; - return; - } - - if (!this.target.filters) { - this.target.filters = []; - } - - if (!this.target.currentFilterType) { - this.target.currentFilterType = 'iliteral_or'; - } - - if (!this.target.currentFilterGroupBy) { - this.target.currentFilterGroupBy = false; - } - - this.errors = this.validateTarget(); - - if (!this.errors.filters) { - const currentFilter = { - type: this.target.currentFilterType, - tagk: this.target.currentFilterKey, - filter: this.target.currentFilterValue, - groupBy: this.target.currentFilterGroupBy, - }; - this.target.filters.push(currentFilter); - this.target.currentFilterType = 'literal_or'; - this.target.currentFilterKey = ''; - this.target.currentFilterValue = ''; - this.target.currentFilterGroupBy = false; - this.targetBlur(); - } - - this.addFilterMode = false; - } - - removeFilter(index: number) { - this.target.filters.splice(index, 1); - this.targetBlur(); - } - - editFilter(fil: { tagk: any; filter: any; type: any; groupBy: any }, index: number) { - this.removeFilter(index); - this.target.currentFilterKey = fil.tagk; - this.target.currentFilterValue = fil.filter; - this.target.currentFilterType = fil.type; - this.target.currentFilterGroupBy = fil.groupBy; - this.addFilter(); - } - - closeAddFilterMode() { - this.addFilterMode = false; - return; - } - - validateTarget() { - const errs: any = {}; - - if (this.target.shouldDownsample) { - try { - if (this.target.downsampleInterval) { - rangeUtil.describeInterval(this.target.downsampleInterval); - } else { - errs.downsampleInterval = "You must supply a downsample interval (e.g. '1m' or '1h')."; - } - } catch (err) { - if (err instanceof Error) { - errs.downsampleInterval = err.message; - } - } - } - - if (this.target.tags && has(this.target.tags, this.target.currentTagKey)) { - errs.tags = "Duplicate tag key '" + this.target.currentTagKey + "'."; - } - - return errs; - } -} diff --git a/public/app/plugins/datasource/opentsdb/specs/query_ctrl.test.ts b/public/app/plugins/datasource/opentsdb/specs/query_ctrl.test.ts deleted file mode 100644 index 17d0d48f11d..00000000000 --- a/public/app/plugins/datasource/opentsdb/specs/query_ctrl.test.ts +++ /dev/null @@ -1,93 +0,0 @@ -import { OpenTsQueryCtrl } from '../query_ctrl'; - -describe('OpenTsQueryCtrl', () => { - const ctx = { - target: { target: '' }, - datasource: { - tsdbVersion: '', - getAggregators: () => Promise.resolve([]), - getFilterTypes: () => Promise.resolve([]), - }, - } as any; - - ctx.panelCtrl = { - panel: { - targets: [ctx.target], - }, - refresh: () => {}, - }; - - Object.assign(OpenTsQueryCtrl.prototype, ctx); - - beforeEach(() => { - ctx.ctrl = new OpenTsQueryCtrl({}, {} as any); - }); - - describe('init query_ctrl variables', () => { - it('filter types should be initialized', () => { - expect(ctx.ctrl.filterTypes.length).toBe(7); - }); - - it('aggregators should be initialized', () => { - expect(ctx.ctrl.aggregators.length).toBe(8); - }); - - it('fill policy options should be initialized', () => { - expect(ctx.ctrl.fillPolicies.length).toBe(4); - }); - }); - - describe('when adding filters and tags', () => { - it('addTagMode should be false when closed', () => { - ctx.ctrl.addTagMode = true; - ctx.ctrl.closeAddTagMode(); - expect(ctx.ctrl.addTagMode).toBe(false); - }); - - it('addFilterMode should be false when closed', () => { - ctx.ctrl.addFilterMode = true; - ctx.ctrl.closeAddFilterMode(); - expect(ctx.ctrl.addFilterMode).toBe(false); - }); - - it('removing a tag from the tags list', () => { - ctx.ctrl.target.tags = { tagk: 'tag_key', tagk2: 'tag_value2' }; - ctx.ctrl.removeTag('tagk'); - expect(Object.keys(ctx.ctrl.target.tags).length).toBe(1); - }); - - it('removing a filter from the filters list', () => { - ctx.ctrl.target.filters = [ - { - tagk: 'tag_key', - filter: 'tag_value2', - type: 'wildcard', - groupBy: true, - }, - ]; - ctx.ctrl.removeFilter(0); - expect(ctx.ctrl.target.filters.length).toBe(0); - }); - - it('adding a filter when tags exist should generate error', () => { - ctx.ctrl.target.tags = { tagk: 'tag_key', tagk2: 'tag_value2' }; - ctx.ctrl.addFilter(); - expect(ctx.ctrl.errors.filters).toBe( - 'Please remove tags to use filters, tags and filters are mutually exclusive.' - ); - }); - - it('adding a tag when filters exist should generate error', () => { - ctx.ctrl.target.filters = [ - { - tagk: 'tag_key', - filter: 'tag_value2', - type: 'wildcard', - groupBy: true, - }, - ]; - ctx.ctrl.addTag(); - expect(ctx.ctrl.errors.tags).toBe('Please remove filters to use tags, tags and filters are mutually exclusive.'); - }); - }); -}); diff --git a/public/app/plugins/datasource/opentsdb/types.ts b/public/app/plugins/datasource/opentsdb/types.ts index 909feeb9cbe..4ae66b8d6d1 100644 --- a/public/app/plugins/datasource/opentsdb/types.ts +++ b/public/app/plugins/datasource/opentsdb/types.ts @@ -1,12 +1,36 @@ import { DataQuery, DataSourceJsonData } from '@grafana/data'; export interface OpenTsdbQuery extends DataQuery { - metric?: any; + // migrating to react + // metrics section + metric?: string; + aggregator?: string; + alias?: string; + + //downsample section + downsampleInterval?: string; + downsampleAggregator?: string; + downsampleFillPolicy?: string; + disableDownsampling?: boolean; + + //filters + filters?: OpenTsdbFilter[]; + + // eslint-disable-next-line @typescript-eslint/no-explicit-any + tags?: any; + // annotation attrs fromAnnotations?: boolean; isGlobal?: boolean; target?: string; name?: string; + + // rate + shouldComputeRate?: boolean; + isCounter?: boolean; + counterMax?: string; + counterResetValue?: string; + explicitTags?: boolean; } export interface OpenTsdbOptions extends DataSourceJsonData { @@ -21,3 +45,10 @@ export type LegacyAnnotation = { target?: string; name?: string; }; + +export type OpenTsdbFilter = { + type: string; + tagk: string; + filter: string; + groupBy: boolean; +}; From 6913623461eb32c4e301f84c4755d747d1910039 Mon Sep 17 00:00:00 2001 From: Victor Marin <36818606+mdvictor@users.noreply.github.com> Date: Tue, 4 Oct 2022 08:58:35 +0300 Subject: [PATCH 039/135] Take standard options min/max into account (#55972) --- public/app/plugins/panel/xychart/scatter.ts | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/public/app/plugins/panel/xychart/scatter.ts b/public/app/plugins/panel/xychart/scatter.ts index 93ce5bbc6b6..e354d1abc3e 100644 --- a/public/app/plugins/panel/xychart/scatter.ts +++ b/public/app/plugins/panel/xychart/scatter.ts @@ -588,7 +588,8 @@ const prepConfig = ( isTime: false, orientation: ScaleOrientation.Horizontal, direction: ScaleDirection.Right, - range: (u, min, max) => [min, max], + min: xField.config.min, + max: xField.config.max, }); // why does this fall back to '' instead of null or undef? @@ -621,7 +622,8 @@ const prepConfig = ( scaleKey, orientation: ScaleOrientation.Vertical, direction: ScaleDirection.Up, - range: (u, min, max) => [min, max], + max: field.config.max, + min: field.config.min, }); if (field.config.custom?.axisPlacement !== AxisPlacement.Hidden) { From f7c6fe0c97c4f2a7205e7fbe1baf07dece0c007a Mon Sep 17 00:00:00 2001 From: Dimitris Sotirakis Date: Tue, 4 Oct 2022 09:55:13 +0300 Subject: [PATCH 040/135] Fix update-changelog.yml version input (#56224) --- .github/workflows/update-changelog.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/update-changelog.yml b/.github/workflows/update-changelog.yml index 268d5078697..f523fc3085f 100644 --- a/.github/workflows/update-changelog.yml +++ b/.github/workflows/update-changelog.yml @@ -35,9 +35,9 @@ jobs: token: ${{ secrets.GH_BOT_ACCESS_TOKEN }} metricsWriteAPIKey: ${{ secrets.GRAFANA_MISC_STATS_API_KEY }} - name: Run update changelog (workflow invoked) - if: ${{ inputs.version_call != '' }} + if: ${{ inputs.version != '' }} uses: ./actions/update-changelog with: - version_call: ${{ inputs.version_call }} + version_call: ${{ inputs.version }} token: ${{ secrets.token }} metricsWriteAPIKey: ${{ secrets.metricsWriteAPIKey }} From eeb31c2901258867a4a70df7340c5a3720bccbb3 Mon Sep 17 00:00:00 2001 From: Leon Sorokin Date: Tue, 4 Oct 2022 02:17:58 -0500 Subject: [PATCH 041/135] Heatmap: fix color scheme reversal (#56227) --- public/app/plugins/panel/heatmap/palettes.ts | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/public/app/plugins/panel/heatmap/palettes.ts b/public/app/plugins/panel/heatmap/palettes.ts index 4c9c719b882..0438977dfa5 100644 --- a/public/app/plugins/panel/heatmap/palettes.ts +++ b/public/app/plugins/panel/heatmap/palettes.ts @@ -97,13 +97,16 @@ export function quantizeScheme(opts: HeatmapColorOptions, theme: GrafanaTheme2): } if ( - opts.reverse || scheme.invert === 'always' || (scheme.invert === 'dark' && theme.isDark) || (scheme.invert === 'light' && theme.isLight) ) { palette.reverse(); } + + if (opts.reverse) { + palette.reverse(); + } } return palette; From 8eea6f7f4fb997e82b4830bf82e9fdb629f2984d Mon Sep 17 00:00:00 2001 From: Dimitris Sotirakis Date: Tue, 4 Oct 2022 10:35:18 +0300 Subject: [PATCH 042/135] Add edition as environment var (#56069) --- .drone.yml | 34 ++++++++++++++++++++++++++++++- scripts/drone/events/release.star | 18 ++++++++-------- 2 files changed, 43 insertions(+), 9 deletions(-) diff --git a/.drone.yml b/.drone.yml index d93fa58adb8..9ed29f6deaf 100644 --- a/.drone.yml +++ b/.drone.yml @@ -1922,6 +1922,8 @@ type: docker clone: retries: 3 depends_on: [] +environment: + EDITION: OSS image_pull_secrets: - dockerconfigjson kind: pipeline @@ -2230,6 +2232,8 @@ volumes: clone: retries: 3 depends_on: [] +environment: + EDITION: OSS image_pull_secrets: - dockerconfigjson kind: pipeline @@ -2337,6 +2341,8 @@ volumes: clone: retries: 3 depends_on: [] +environment: + EDITION: OSS image_pull_secrets: - dockerconfigjson kind: pipeline @@ -2452,6 +2458,8 @@ depends_on: - release-oss-build-e2e-publish - release-oss-test - release-oss-integration-tests +environment: + EDITION: OSS image_pull_secrets: - dockerconfigjson kind: pipeline @@ -2513,6 +2521,8 @@ volumes: clone: disable: true depends_on: [] +environment: + EDITION: ENTERPRISE image_pull_secrets: - dockerconfigjson kind: pipeline @@ -2861,6 +2871,8 @@ volumes: clone: disable: true depends_on: [] +environment: + EDITION: ENTERPRISE image_pull_secrets: - dockerconfigjson kind: pipeline @@ -3010,6 +3022,8 @@ volumes: clone: disable: true depends_on: [] +environment: + EDITION: ENTERPRISE image_pull_secrets: - dockerconfigjson kind: pipeline @@ -3175,6 +3189,8 @@ depends_on: - release-enterprise-build-e2e-publish - release-enterprise-test - release-enterprise-integration-tests +environment: + EDITION: ENTERPRISE image_pull_secrets: - dockerconfigjson kind: pipeline @@ -3923,6 +3939,8 @@ volumes: clone: retries: 3 depends_on: [] +environment: + EDITION: OSS image_pull_secrets: - dockerconfigjson kind: pipeline @@ -4200,6 +4218,8 @@ volumes: clone: retries: 3 depends_on: [] +environment: + EDITION: OSS image_pull_secrets: - dockerconfigjson kind: pipeline @@ -4301,6 +4321,8 @@ volumes: clone: retries: 3 depends_on: [] +environment: + EDITION: OSS image_pull_secrets: - dockerconfigjson kind: pipeline @@ -4410,6 +4432,8 @@ depends_on: - release-branch-oss-build-e2e-publish - release-branch-oss-test - release-branch-oss-integration-tests +environment: + EDITION: OSS image_pull_secrets: - dockerconfigjson kind: pipeline @@ -4461,6 +4485,8 @@ volumes: clone: disable: true depends_on: [] +environment: + EDITION: ENTERPRISE image_pull_secrets: - dockerconfigjson kind: pipeline @@ -4798,6 +4824,8 @@ volumes: clone: disable: true depends_on: [] +environment: + EDITION: ENTERPRISE image_pull_secrets: - dockerconfigjson kind: pipeline @@ -4938,6 +4966,8 @@ volumes: clone: disable: true depends_on: [] +environment: + EDITION: ENTERPRISE image_pull_secrets: - dockerconfigjson kind: pipeline @@ -5094,6 +5124,8 @@ depends_on: - release-branch-enterprise-build-e2e-publish - release-branch-enterprise-test - release-branch-enterprise-integration-tests +environment: + EDITION: ENTERPRISE image_pull_secrets: - dockerconfigjson kind: pipeline @@ -5381,6 +5413,6 @@ kind: secret name: packages_secret_access_key --- kind: signature -hmac: 774fd382b75b0860cc64326952818257df858a0f59144ad9ed978c984b94fd0e +hmac: 49387e58319c5c9d4069d95213b8fa6023b8e44622433ebbea6063203a3ba4f4 ... diff --git a/scripts/drone/events/release.star b/scripts/drone/events/release.star index aff972bccb6..51b4f137872 100644 --- a/scripts/drone/events/release.star +++ b/scripts/drone/events/release.star @@ -153,6 +153,7 @@ def publish_image_pipelines(mode): ),] def get_oss_pipelines(trigger, ver_mode): + environment = {'EDITION': 'OSS'} edition = 'oss' services = integration_test_services(edition=edition) volumes = integration_test_services_volumes() @@ -230,13 +231,13 @@ def get_oss_pipelines(trigger, ver_mode): steps=[identify_runner_step('windows')] + windows_package_steps, platform='windows', depends_on=[ 'oss-build{}-publish-{}'.format(get_e2e_suffix(), ver_mode), - ], + ], environment=environment, ) pipelines = [ pipeline( name='{}-oss-build{}-publish'.format(ver_mode, get_e2e_suffix()), edition=edition, trigger=trigger, services=[], steps=init_steps + build_steps + package_steps + publish_steps, - volumes=volumes, + environment=environment, volumes=volumes, ), ] if not disable_tests: @@ -244,12 +245,12 @@ def get_oss_pipelines(trigger, ver_mode): pipeline( name='{}-oss-test'.format(ver_mode), edition=edition, trigger=trigger, services=[], steps=init_steps + test_steps, - volumes=[], + environment=environment, volumes=[], ), pipeline( name='{}-oss-integration-tests'.format(ver_mode), edition=edition, trigger=trigger, services=services, steps=[download_grabpl_step(), identify_runner_step(), verify_gen_cue_step(edition), wire_install_step(), ] + integration_test_steps, - volumes=volumes, + environment=environment, volumes=volumes, ) ]) deps = { @@ -265,6 +266,7 @@ def get_oss_pipelines(trigger, ver_mode): return pipelines def get_enterprise_pipelines(trigger, ver_mode): + environment = {'EDITION': 'ENTERPRISE'} edition = 'enterprise' services = integration_test_services(edition=edition) volumes = integration_test_services_volumes() @@ -371,12 +373,12 @@ def get_enterprise_pipelines(trigger, ver_mode): steps=[identify_runner_step('windows')] + windows_package_steps, platform='windows', depends_on=[ 'enterprise-build{}-publish-{}'.format(get_e2e_suffix(), ver_mode), - ], + ], environment=environment, ) pipelines = [ pipeline( name='{}-enterprise-build{}-publish'.format(ver_mode, get_e2e_suffix()), edition=edition, trigger=trigger, services=[], - steps=init_steps + build_steps + package_steps + publish_steps, + steps=init_steps + build_steps + package_steps + publish_steps, environment=environment, volumes=volumes, ), ] @@ -384,13 +386,13 @@ def get_enterprise_pipelines(trigger, ver_mode): pipelines.extend([ pipeline( name='{}-enterprise-test'.format(ver_mode), edition=edition, trigger=trigger, services=[], - steps=init_steps + test_steps, + steps=init_steps + test_steps, environment=environment, volumes=[], ), pipeline( name='{}-enterprise-integration-tests'.format(ver_mode), edition=edition, trigger=trigger, services=services, steps=[download_grabpl_step(), identify_runner_step(), clone_enterprise_step(ver_mode), init_enterprise_step(ver_mode), verify_gen_cue_step(edition), wire_install_step()] + integration_test_steps + [redis_integration_tests_step(), memcached_integration_tests_step()], - volumes=volumes, + environment=environment, volumes=volumes, ), ]) deps = { From 7b93d85a85ad2c11c2b56c39977b982839a4a532 Mon Sep 17 00:00:00 2001 From: Victor Marin <36818606+mdvictor@users.noreply.github.com> Date: Tue, 4 Oct 2022 10:41:36 +0300 Subject: [PATCH 043/135] XYChart: Beta release (#55973) * Bump state from alpha to beta * Sync manual pointsize max with auto one * Add xyChart to list --- .../api/plugins/data/expectedListResp.json | 36 +++++++++++++++++++ .../plugins/panel/xychart/ManualEditor.tsx | 2 +- public/app/plugins/panel/xychart/plugin.json | 2 +- 3 files changed, 38 insertions(+), 2 deletions(-) diff --git a/pkg/tests/api/plugins/data/expectedListResp.json b/pkg/tests/api/plugins/data/expectedListResp.json index 611fa2792ad..dba9ada7ff7 100644 --- a/pkg/tests/api/plugins/data/expectedListResp.json +++ b/pkg/tests/api/plugins/data/expectedListResp.json @@ -1589,6 +1589,42 @@ "signatureType": "", "signatureOrg": "" }, + { + "name": "XY Chart", + "type": "panel", + "id": "xychart", + "enabled": true, + "pinned": false, + "info": { + "author": { + "name": "Grafana Labs", + "url": "https://grafana.com" + }, + "description": "", + "links": null, + "logos": { + "small": "public/app/plugins/panel/xychart/img/icn-xychart.svg", + "large": "public/app/plugins/panel/xychart/img/icn-xychart.svg" + }, + "build": {}, + "screenshots": null, + "version": "", + "updated": "" + }, + "dependencies": { + "grafanaDependency": "", + "grafanaVersion": "*", + "plugins": [] + }, + "latestVersion": "", + "hasUpdate": false, + "defaultNavUrl": "/plugins/xychart/", + "category": "", + "state": "beta", + "signature": "internal", + "signatureType": "", + "signatureOrg": "" + }, { "name": "Zipkin", "type": "datasource", diff --git a/public/app/plugins/panel/xychart/ManualEditor.tsx b/public/app/plugins/panel/xychart/ManualEditor.tsx index a81a7cca5b3..22b00cfe7ff 100644 --- a/public/app/plugins/panel/xychart/ManualEditor.tsx +++ b/public/app/plugins/panel/xychart/ManualEditor.tsx @@ -115,7 +115,7 @@ export const ManualEditor = ({ value={value[selected].pointSize!} context={context} onChange={(field) => onFieldChange(field, selected, 'pointSize')} - item={{ settings: { min: 1, max: 50 } } as any} + item={{ settings: { min: 1, max: 100 } } as any} />
diff --git a/public/app/plugins/panel/xychart/plugin.json b/public/app/plugins/panel/xychart/plugin.json index 945aa611f9d..ed72646bf35 100644 --- a/public/app/plugins/panel/xychart/plugin.json +++ b/public/app/plugins/panel/xychart/plugin.json @@ -2,7 +2,7 @@ "type": "panel", "name": "XY Chart", "id": "xychart", - "state": "alpha", + "state": "beta", "info": { "author": { From 25bb926a0a854f96b18152f3b93f4fa41cc3593b Mon Sep 17 00:00:00 2001 From: Esteban Beltran Date: Tue, 4 Oct 2022 09:43:24 +0200 Subject: [PATCH 044/135] Toolkit: Deprecate `component:create` command (#56086) * Mark component:create as deprecated * Update message * Update packages/grafana-toolkit/src/cli/index.ts Co-authored-by: Jack Westbrook * Add alternative message Co-authored-by: Jack Westbrook --- packages/grafana-toolkit/src/cli/index.ts | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/packages/grafana-toolkit/src/cli/index.ts b/packages/grafana-toolkit/src/cli/index.ts index 0ddfaabb9bc..738d80daa83 100644 --- a/packages/grafana-toolkit/src/cli/index.ts +++ b/packages/grafana-toolkit/src/cli/index.ts @@ -103,9 +103,15 @@ export const run = (includeInternalScripts = false) => { program .command('component:create') .description( - 'Scaffold React components. Optionally add test, story and .mdx files. The components are created in the same dir the script is run from.' + '[deprecated] Scaffold React components. Optionally add test, story and .mdx files. The components are created in the same dir the script is run from.' ) .action(async () => { + chalk.yellow.bold( + `⚠️ This command is deprecated and will be removed in v10. No further support will be provided. ⚠️` + ); + console.log( + 'if you were reliant on this command we recommend https://www.npmjs.com/package/react-gen-component' + ); await execTask(componentCreateTask)({}); }); } From 51cf573656cbeec204cac1040ea9baf5b3f6a8c8 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 4 Oct 2022 09:11:37 +0100 Subject: [PATCH 045/135] Update dependency rudder-sdk-js to v2.15.0 (#56196) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- package.json | 2 +- yarn.lock | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/package.json b/package.json index 4e2a2af7d60..966a76f1a06 100644 --- a/package.json +++ b/package.json @@ -225,7 +225,7 @@ "react-test-renderer": "17.0.2", "redux-mock-store": "1.5.4", "rimraf": "3.0.2", - "rudder-sdk-js": "^2.13.0", + "rudder-sdk-js": "2.15.0", "sass": "1.54.0", "sass-loader": "13.0.2", "sinon": "14.0.0", diff --git a/yarn.lock b/yarn.lock index 84231c5470c..35e52d6e91f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -23382,7 +23382,7 @@ __metadata: reselect: 4.1.6 rimraf: 3.0.2 rst2html: "github:thoward/rst2html#990cb89f2a300cdd9151790be377c4c0840df809" - rudder-sdk-js: ^2.13.0 + rudder-sdk-js: 2.15.0 rxjs: 7.5.6 sass: 1.54.0 sass-loader: 13.0.2 @@ -35774,10 +35774,10 @@ __metadata: languageName: node linkType: hard -"rudder-sdk-js@npm:^2.13.0": - version: 2.13.0 - resolution: "rudder-sdk-js@npm:2.13.0" - checksum: 36c5200d7f49b4871ebe082498cf9e3d358821fdda0e51d4a1f916dd26fc6e820eea7077e42b837cf7edcea81cce0b7b95f69bc81496c43b9f22957d42747c94 +"rudder-sdk-js@npm:2.15.0": + version: 2.15.0 + resolution: "rudder-sdk-js@npm:2.15.0" + checksum: c78b4f74511575abcc2f0e98bfc629800aaa0a11b2a6b1539ebd482791328ccc6776e65e6049a6d3f88f9138c87d22914142bf3db4fd2bcae6c6e9aaacd934f3 languageName: node linkType: hard From c83d576ffccb6c9e59c8d526de783e320da1a76a Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Tue, 4 Oct 2022 09:14:09 +0100 Subject: [PATCH 046/135] Update dependency @cypress/webpack-preprocessor to v5.13.1 (#56072) Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com> --- packages/grafana-e2e/package.json | 2 +- yarn.lock | 48 +++++++++++++++++++++++++++---- 2 files changed, 43 insertions(+), 7 deletions(-) diff --git a/packages/grafana-e2e/package.json b/packages/grafana-e2e/package.json index 464f1883ec3..c6f445ee4e0 100644 --- a/packages/grafana-e2e/package.json +++ b/packages/grafana-e2e/package.json @@ -60,7 +60,7 @@ "dependencies": { "@babel/core": "7.19.0", "@babel/preset-env": "7.19.0", - "@cypress/webpack-preprocessor": "5.12.0", + "@cypress/webpack-preprocessor": "5.13.1", "@grafana/e2e-selectors": "9.3.0-pre", "@grafana/tsconfig": "^1.2.0-rc1", "@mochajs/json-file-reporter": "^1.2.0", diff --git a/yarn.lock b/yarn.lock index 35e52d6e91f..baa7cccba91 100644 --- a/yarn.lock +++ b/yarn.lock @@ -4626,19 +4626,23 @@ __metadata: languageName: node linkType: hard -"@cypress/webpack-preprocessor@npm:5.12.0": - version: 5.12.0 - resolution: "@cypress/webpack-preprocessor@npm:5.12.0" +"@cypress/webpack-preprocessor@npm:5.13.1": + version: 5.13.1 + resolution: "@cypress/webpack-preprocessor@npm:5.13.1" dependencies: bluebird: 3.7.1 debug: ^4.3.2 + fs-extra: ^10.1.0 + loader-utils: ^2.0.0 lodash: ^4.17.20 + md5: 2.3.0 + webpack-virtual-modules: ^0.4.4 peerDependencies: "@babel/core": ^7.0.1 "@babel/preset-env": ^7.0.0 babel-loader: ^8.0.2 webpack: ^4 || ^5 - checksum: 3fa209655412369eb5bf0e8e0eaf25c89f0dfc6937d9aa4c51aa351449cf3d56b1834908dc81e507eb3d6508fee8534769b576f46f26034220a9f3f82ed7b3f8 + checksum: 3eff3da991d4591d0f9cab9c650aba1170bea95ff91b600e65c9c2cb667e6f36a356b3300ccfea1d25e13380101fce6df49e9d137364fbb4113ca220ccca6e40 languageName: node linkType: hard @@ -5337,7 +5341,7 @@ __metadata: dependencies: "@babel/core": 7.19.0 "@babel/preset-env": 7.19.0 - "@cypress/webpack-preprocessor": 5.12.0 + "@cypress/webpack-preprocessor": 5.13.1 "@grafana/e2e-selectors": 9.3.0-pre "@grafana/tsconfig": ^1.2.0-rc1 "@mochajs/json-file-reporter": ^1.2.0 @@ -16613,6 +16617,13 @@ __metadata: languageName: node linkType: hard +"charenc@npm:0.0.2": + version: 0.0.2 + resolution: "charenc@npm:0.0.2" + checksum: 81dcadbe57e861d527faf6dd3855dc857395a1c4d6781f4847288ab23cffb7b3ee80d57c15bba7252ffe3e5e8019db767757ee7975663ad2ca0939bb8fcaf2e5 + languageName: node + linkType: hard + "check-more-types@npm:^2.24.0": version: 2.24.0 resolution: "check-more-types@npm:2.24.0" @@ -17868,6 +17879,13 @@ __metadata: languageName: node linkType: hard +"crypt@npm:0.0.2": + version: 0.0.2 + resolution: "crypt@npm:0.0.2" + checksum: baf4c7bbe05df656ec230018af8cf7dbe8c14b36b98726939cef008d473f6fe7a4fad906cfea4062c93af516f1550a3f43ceb4d6615329612c6511378ed9fe34 + languageName: node + linkType: hard + "crypto-browserify@npm:^3.11.0": version: 3.12.0 resolution: "crypto-browserify@npm:3.12.0" @@ -24820,7 +24838,7 @@ __metadata: languageName: node linkType: hard -"is-buffer@npm:^1.1.5": +"is-buffer@npm:^1.1.5, is-buffer@npm:~1.1.6": version: 1.1.6 resolution: "is-buffer@npm:1.1.6" checksum: 4a186d995d8bbf9153b4bd9ff9fd04ae75068fe695d29025d25e592d9488911eeece84eefbd8fa41b8ddcc0711058a71d4c466dcf6f1f6e1d83830052d8ca707 @@ -28265,6 +28283,17 @@ __metadata: languageName: node linkType: hard +"md5@npm:2.3.0": + version: 2.3.0 + resolution: "md5@npm:2.3.0" + dependencies: + charenc: 0.0.2 + crypt: 0.0.2 + is-buffer: ~1.1.6 + checksum: a63cacf4018dc9dee08c36e6f924a64ced735b37826116c905717c41cebeb41a522f7a526ba6ad578f9c80f02cb365033ccd67fe186ffbcc1a1faeb75daa9b6e + languageName: node + linkType: hard + "mdast-squeeze-paragraphs@npm:^4.0.0": version: 4.0.0 resolution: "mdast-squeeze-paragraphs@npm:4.0.0" @@ -40392,6 +40421,13 @@ __metadata: languageName: node linkType: hard +"webpack-virtual-modules@npm:^0.4.4": + version: 0.4.5 + resolution: "webpack-virtual-modules@npm:0.4.5" + checksum: 0ae9a8b50d0cb1e43da5ff8acaa7b99c34a42f0d6cc83a82908fb6e131e574a949d19948df4fdd3de0dbfdbadb2b93ceb4a740c55727a4236eb3b2bbc8f785a6 + languageName: node + linkType: hard + "webpack@npm:4": version: 4.46.0 resolution: "webpack@npm:4.46.0" From 4087ad413fdf2088303faa847511769775af6d2c Mon Sep 17 00:00:00 2001 From: Will Browne Date: Tue, 4 Oct 2022 10:15:10 +0200 Subject: [PATCH 047/135] re-use fake trace + feature toggles (#56186) --- .../manager/manager_integration_test.go | 31 +++---------------- 1 file changed, 4 insertions(+), 27 deletions(-) diff --git a/pkg/plugins/manager/manager_integration_test.go b/pkg/plugins/manager/manager_integration_test.go index e3bcde12281..1c275f5b70b 100644 --- a/pkg/plugins/manager/manager_integration_test.go +++ b/pkg/plugins/manager/manager_integration_test.go @@ -3,7 +3,6 @@ package manager import ( "context" "encoding/json" - "net/http" "path/filepath" "strings" "testing" @@ -13,7 +12,6 @@ import ( "github.com/grafana/grafana-plugin-sdk-go/backend" "github.com/grafana/grafana-plugin-sdk-go/backend/httpclient" "github.com/stretchr/testify/require" - "go.opentelemetry.io/otel/trace" "gopkg.in/ini.v1" "github.com/grafana/grafana/pkg/infra/tracing" @@ -57,8 +55,6 @@ func TestIntegrationPluginManager(t *testing.T) { bundledPluginsPath, err := filepath.Abs("../../../plugins-bundled/internal") require.NoError(t, err) - features := featuremgmt.WithFeatures() - // We use the raw config here as it forms the basis for the setting.Provider implementation // The plugin manager also relies directly on the setting.Cfg struct to provide Grafana specific // properties such as the loading paths @@ -81,11 +77,8 @@ func TestIntegrationPluginManager(t *testing.T) { Azure: &azsettings.AzureSettings{}, } - tracer := &fakeTracer{} - - license := &licensing.OSSLicensingService{ - Cfg: cfg, - } + tracer := tracing.InitializeTracerForTest() + features := featuremgmt.WithFeatures() hcp := httpclient.NewProvider() am := azuremonitor.ProvideService(cfg, hcp, tracer) @@ -102,14 +95,14 @@ func TestIntegrationPluginManager(t *testing.T) { pg := postgres.ProvideService(cfg) my := mysql.ProvideService(cfg, hcp) ms := mssql.ProvideService(cfg) - sv2 := searchV2.ProvideService(cfg, sqlstore.InitTestDB(t), nil, nil, tracing.InitializeTracerForTest(), featuremgmt.WithFeatures(), nil, nil) + sv2 := searchV2.ProvideService(cfg, sqlstore.InitTestDB(t), nil, nil, tracer, features, nil, nil) graf := grafanads.ProvideService(cfg, sv2, nil) coreRegistry := coreplugin.ProvideCoreRegistry(am, cw, cm, es, grap, idb, lk, otsdb, pr, tmpo, td, pg, my, ms, graf) pCfg := config.ProvideConfig(setting.ProvideProvider(cfg), cfg) reg := registry.ProvideService() - l := loader.ProvideService(pCfg, license, signature.NewUnsignedAuthorizer(pCfg), reg, provider.ProvideService(coreRegistry)) + l := loader.ProvideService(pCfg, &licensing.OSSLicensingService{Cfg: cfg}, signature.NewUnsignedAuthorizer(pCfg), reg, provider.ProvideService(coreRegistry)) ps, err := store.ProvideService(cfg, pCfg, reg, l) require.NoError(t, err) @@ -292,19 +285,3 @@ func verifyBackendProcesses(t *testing.T, ps []*plugins.Plugin) { } } } - -type fakeTracer struct { - tracing.Tracer -} - -func (ft *fakeTracer) Run(context.Context) error { - return nil -} - -func (ft *fakeTracer) Start(ctx context.Context, _ string, _ ...trace.SpanStartOption) (context.Context, tracing.Span) { - return ctx, nil -} - -func (ft *fakeTracer) Inject(context.Context, http.Header, tracing.Span) { - -} From 317b353b34ef9357bd5bc2b0fc9f7cb2bedf5b35 Mon Sep 17 00:00:00 2001 From: Ashley Harrison Date: Tue, 4 Oct 2022 09:19:23 +0100 Subject: [PATCH 048/135] Navigation: Collapsible section nav implementation (#55995) * initial collapsible section nav implementation * fix unit tests * automatically collapse sectionnav when below lg size * fix unit tests * only register 1 event listener each time * fix display name for SectionNavToggle --- .../core/components/MegaMenu/NavBarMenu.tsx | 16 ------ public/app/core/components/PageNew/Page.tsx | 49 +++++++++++++++++-- .../core/components/PageNew/SectionNav.tsx | 24 +++++++-- .../components/PageNew/SectionNavToggle.tsx | 39 +++++++++++++++ .../VersionsSettings.test.tsx | 4 +- 5 files changed, 108 insertions(+), 24 deletions(-) create mode 100644 public/app/core/components/PageNew/SectionNavToggle.tsx diff --git a/public/app/core/components/MegaMenu/NavBarMenu.tsx b/public/app/core/components/MegaMenu/NavBarMenu.tsx index 07b85148ec1..596b1fe9bc5 100644 --- a/public/app/core/components/MegaMenu/NavBarMenu.tsx +++ b/public/app/core/components/MegaMenu/NavBarMenu.tsx @@ -6,12 +6,10 @@ import React, { useEffect, useRef, useState } from 'react'; import CSSTransition from 'react-transition-group/CSSTransition'; import { GrafanaTheme2, NavModelItem } from '@grafana/data'; -import { reportInteraction } from '@grafana/runtime'; import { CustomScrollbar, Icon, IconButton, useTheme2 } from '@grafana/ui'; import { useGrafana } from 'app/core/context/GrafanaContext'; import { TOP_BAR_LEVEL_HEIGHT } from '../AppChrome/types'; -import { NavBarToggle } from '../NavBar/NavBarToggle'; import { NavBarMenuItemWrapper } from './NavBarMenuItemWrapper'; @@ -75,14 +73,6 @@ export function NavBarMenu({ activeItem, navItems, searchBarHidden, onClose }: P variant="secondary" />
- { - reportInteraction('grafana_navigation_collapsed'); - onMenuClose(); - }} - />
- - {React.Children.toArray(children).filter(Boolean)} - + {React.Children.toArray(children).filter(Boolean)} ); } diff --git a/public/app/core/components/SplitPaneWrapper/SplitPaneWrapper.tsx b/public/app/core/components/SplitPaneWrapper/SplitPaneWrapper.tsx index a84d543b627..8b06c108c50 100644 --- a/public/app/core/components/SplitPaneWrapper/SplitPaneWrapper.tsx +++ b/public/app/core/components/SplitPaneWrapper/SplitPaneWrapper.tsx @@ -6,8 +6,6 @@ import { GrafanaTheme } from '@grafana/data'; import { stylesFactory } from '@grafana/ui'; import { config } from 'app/core/config'; -import { SplitView } from './SplitView'; - enum Pane { Right, Top, @@ -102,6 +100,8 @@ export class SplitPaneWrapper extends PureComponent { render() { const { rightPaneVisible, rightPaneComponents, uiState } = this.props; // Limit options pane width to 90% of screen. + const styles = getStyles(config.theme); + // Need to handle when width is relative. ie a percentage of the viewport const rightPaneSize = uiState.rightPaneSize <= 1 ? uiState.rightPaneSize * window.innerWidth : uiState.rightPaneSize; @@ -111,10 +111,18 @@ export class SplitPaneWrapper extends PureComponent { } return ( - + (document.body.style.cursor = 'col-resize')} + onDragFinished={(size) => this.onDragFinished(Pane.Right, size)} + > {this.renderHorizontalSplit()} {rightPaneComponents} - + ); } } diff --git a/public/app/core/components/SplitPaneWrapper/SplitView.tsx b/public/app/core/components/SplitPaneWrapper/SplitView.tsx deleted file mode 100644 index cca03f04eea..00000000000 --- a/public/app/core/components/SplitPaneWrapper/SplitView.tsx +++ /dev/null @@ -1,93 +0,0 @@ -import { css } from '@emotion/css'; -import { useViewportSize } from '@react-aria/utils'; -import React, { ReactNode } from 'react'; -import SplitPane from 'react-split-pane'; - -import { GrafanaTheme2 } from '@grafana/data'; -import { useStyles2 } from '@grafana/ui'; - -interface Props { - children: [ReactNode, ReactNode]; - uiState: { rightPaneSize: number }; - minSize?: number; - onResize?: (size: number) => void; -} - -const onDragFinished = (size: number, onResize?: (size: number) => void) => { - document.body.style.cursor = 'auto'; - onResize?.(size); -}; - -const onDragStarted = () => { - document.body.style.cursor = 'row-resize'; -}; - -const getResizerStyles = (hasSplit: boolean) => (theme: GrafanaTheme2) => - css` - position: relative; - display: ${hasSplit ? 'block' : 'none'}; - - &::before { - content: ''; - position: absolute; - transition: 0.2s border-color ease-in-out; - border-right: 1px solid ${theme.colors.border.weak}; - height: 100%; - left: 50%; - transform: translateX(-50%); - } - - &::after { - background: ${theme.colors.border.weak}; - content: ''; - position: absolute; - left: 50%; - top: 50%; - transition: 0.2s background ease-in-out; - transform: translate(-50%, -50%); - border-radius: 4px; - height: 200px; - width: 4px; - } - - &:hover { - &::before { - border-color: ${theme.colors.primary.main}; - } - - &::after { - background: ${theme.colors.primary.main}; - } - } - - cursor: col-resize; - width: ${theme.spacing(2)}; - `; - -export const SplitView = ({ uiState: { rightPaneSize }, children, minSize = 200, onResize }: Props) => { - const { width } = useViewportSize(); - - // create two elements for library, even if only one exists (one will be hidden) - const hasSplit = children.filter(Boolean).length === 2; - - const existingChildren = [ - {children[0]}, - {hasSplit && children[1]}, - ]; - - return ( - onDragFinished(size, onResize)} - > - {existingChildren} - - ); -}; diff --git a/public/app/features/explore/ExplorePaneContainer.tsx b/public/app/features/explore/ExplorePaneContainer.tsx index b9a946c33c8..fb0db9616ef 100644 --- a/public/app/features/explore/ExplorePaneContainer.tsx +++ b/public/app/features/explore/ExplorePaneContainer.tsx @@ -1,4 +1,4 @@ -import { css } from '@emotion/css'; +import { css, cx } from '@emotion/css'; import memoizeOne from 'memoize-one'; import React from 'react'; import { connect, ConnectedProps } from 'react-redux'; @@ -36,12 +36,13 @@ const getStyles = (theme: GrafanaTheme2) => { display: flex; flex: 1 1 auto; flex-direction: column; - overflow: scroll; - min-width: 600px; & + & { border-left: 1px dotted ${theme.colors.border.medium}; } `, + exploreSplit: css` + width: 50%; + `, }; }; @@ -142,10 +143,11 @@ class ExplorePaneContainerUnconnected extends React.PureComponent { }; render() { - const { theme, exploreId, initialized } = this.props; + const { theme, split, exploreId, initialized } = this.props; const styles = getStyles(theme); + const exploreClass = cx(styles.explore, split && styles.exploreSplit); return ( -
+
{initialized && }
); diff --git a/public/app/features/explore/ExploreToolbar.tsx b/public/app/features/explore/ExploreToolbar.tsx index 59b666ebb27..dfaced53e30 100644 --- a/public/app/features/explore/ExploreToolbar.tsx +++ b/public/app/features/explore/ExploreToolbar.tsx @@ -18,7 +18,7 @@ import { getFiscalYearStartMonth, getTimeZone } from '../profile/state/selectors import { ExploreTimeControls } from './ExploreTimeControls'; import { LiveTailButton } from './LiveTailButton'; import { changeDatasource } from './state/datasource'; -import { evenPaneResizeAction, maximizePaneAction, splitClose, splitOpen } from './state/main'; +import { splitClose, splitOpen } from './state/main'; import { cancelQueries, runQueries } from './state/query'; import { isSplit } from './state/selectors'; import { syncTimes, changeRefreshInterval } from './state/time'; @@ -126,7 +126,6 @@ class UnConnectedExploreToolbar extends PureComponent { onChangeTimeZone, onChangeFiscalYearStartMonth, topOfViewRef, - largerExploreId, } = this.props; const showSmallDataSourcePicker = (splitted ? containerWidth < 700 : containerWidth < 800) || false; @@ -136,23 +135,12 @@ class UnConnectedExploreToolbar extends PureComponent { contextSrv.hasAccess(AccessControlAction.DashboardsCreate, contextSrv.isEditor) || contextSrv.hasAccess(AccessControlAction.DashboardsWrite, contextSrv.isEditor); - const isLargerExploreId = largerExploreId === exploreId; - - const onClickResize = () => { - if (isLargerExploreId) { - this.props.evenPaneResizeAction(); - } else { - this.props.maximizePaneAction({ exploreId: exploreId }); - } - }; - return (
{ Split ) : ( - <> - - - Close - - + + Close + )} {config.featureToggles.explore2Dashboard && showExploreToDashboard && ( @@ -258,7 +234,7 @@ class UnConnectedExploreToolbar extends PureComponent { } const mapStateToProps = (state: StoreState, { exploreId }: OwnProps) => { - const { syncedTimes, largerExploreId } = state.explore; + const { syncedTimes } = state.explore; const exploreItem = state.explore[exploreId]!; const { datasourceInstance, datasourceMissing, range, refreshInterval, loading, isLive, isPaused, containerWidth } = exploreItem; @@ -280,7 +256,6 @@ const mapStateToProps = (state: StoreState, { exploreId }: OwnProps) => { isPaused, syncedTimes, containerWidth, - largerExploreId, }; }; @@ -294,8 +269,6 @@ const mapDispatchToProps = { syncTimes, onChangeTimeZone: updateTimeZoneForSession, onChangeFiscalYearStartMonth: updateFiscalYearStartMonthForSession, - maximizePaneAction, - evenPaneResizeAction, }; const connector = connect(mapStateToProps, mapDispatchToProps); diff --git a/public/app/features/explore/QueryRows.tsx b/public/app/features/explore/QueryRows.tsx index fa51d05e9a8..a1b7b0ce782 100644 --- a/public/app/features/explore/QueryRows.tsx +++ b/public/app/features/explore/QueryRows.tsx @@ -67,7 +67,6 @@ export const QueryRows = ({ exploreId }: Props) => { [onChange, queries] ); - // a datasource change on the query row level means the root datasource is mixed const onMixedDataSourceChange = async (ds: DataSourceInstanceSettings, query: DataQuery) => { const queryDatasource = await getDataSourceSrv().get(query.datasource); const targetDS = await getDataSourceSrv().get({ uid: ds.uid }); diff --git a/public/app/features/explore/Wrapper.test.tsx b/public/app/features/explore/Wrapper.test.tsx index 978f80ed2b9..5ae2f7a1ea5 100644 --- a/public/app/features/explore/Wrapper.test.tsx +++ b/public/app/features/explore/Wrapper.test.tsx @@ -8,7 +8,7 @@ import { locationService, config } from '@grafana/runtime'; import { changeDatasource } from './spec/helper/interactions'; import { makeLogsQueryResponse, makeMetricsQueryResponse } from './spec/helper/query'; import { setupExplore, tearDown, waitForExplore } from './spec/helper/setup'; -import * as mainState from './state/main'; +import { splitOpen } from './state/main'; import * as queryState from './state/query'; jest.mock('app/core/core', () => { @@ -154,7 +154,7 @@ describe('Wrapper', () => { }); }); - describe('Handles open/close splits and related events in UI and URL', () => { + describe('Handles open/close splits in UI and URL', () => { it('opens the split pane when split button is clicked', async () => { setupExplore(); // Wait for rendering the editor @@ -218,15 +218,10 @@ describe('Wrapper', () => { it('can close a panel from a split', async () => { const urlParams = { - left: JSON.stringify(['now-1h', 'now', 'loki-uid', { refId: 'A' }]), - right: JSON.stringify(['now-1h', 'now', 'elastic-uid', { refId: 'A' }]), + left: JSON.stringify(['now-1h', 'now', 'loki', { refId: 'A' }]), + right: JSON.stringify(['now-1h', 'now', 'elastic', { refId: 'A' }]), }; - const { datasources } = setupExplore({ urlParams }); - jest.mocked(datasources.loki.query).mockReturnValueOnce(makeLogsQueryResponse()); - jest.mocked(datasources.elastic.query).mockReturnValueOnce(makeLogsQueryResponse()); - - await screen.findByText(/^loki Editor input:$/); - + setupExplore({ urlParams }); const closeButtons = await screen.findAllByLabelText(/Close split pane/i); await userEvent.click(closeButtons[1]); @@ -266,35 +261,12 @@ describe('Wrapper', () => { // to work await screen.findByText(`loki Editor input: { label="value"}`); - store.dispatch(mainState.splitOpen({ datasourceUid: 'elastic', query: { expr: 'error' } }) as any); + store.dispatch(splitOpen({ datasourceUid: 'elastic', query: { expr: 'error' } }) as any); // Editor renders the new query await screen.findByText(`elastic Editor input: error`); await screen.findByText(`loki Editor input: { label="value"}`); }); - - it('handles split size events and sets relevant variables', async () => { - setupExplore(); - const splitButton = await screen.findByText(/split/i); - fireEvent.click(splitButton); - await waitForExplore(undefined, true); - let widenButton = await screen.findAllByLabelText('Widen pane'); - let narrowButton = await screen.queryAllByLabelText('Narrow pane'); - const panes = screen.getAllByRole('main'); - expect(widenButton.length).toBe(2); - expect(narrowButton.length).toBe(0); - expect(Number.parseInt(getComputedStyle(panes[0]).width, 10)).toBe(1000); - expect(Number.parseInt(getComputedStyle(panes[1]).width, 10)).toBe(1000); - const resizer = screen.getByRole('presentation'); - fireEvent.mouseDown(resizer, { buttons: 1 }); - fireEvent.mouseMove(resizer, { clientX: -700, buttons: 1 }); - fireEvent.mouseUp(resizer); - widenButton = await screen.findAllByLabelText('Widen pane'); - narrowButton = await screen.queryAllByLabelText('Narrow pane'); - expect(widenButton.length).toBe(1); - expect(narrowButton.length).toBe(1); - // the autosizer is mocked so there is no actual resize here - }); }); describe('Handles document title changes', () => { @@ -323,7 +295,7 @@ describe('Wrapper', () => { // to work await screen.findByText(`loki Editor input: { label="value"}`); - store.dispatch(mainState.splitOpen({ datasourceUid: 'elastic', query: { expr: 'error' } }) as any); + store.dispatch(splitOpen({ datasourceUid: 'elastic', query: { expr: 'error' } }) as any); await waitFor(() => expect(document.title).toEqual('Explore - loki | elastic - Grafana')); }); }); diff --git a/public/app/features/explore/Wrapper.tsx b/public/app/features/explore/Wrapper.tsx index 85c49964d66..c54644228db 100644 --- a/public/app/features/explore/Wrapper.tsx +++ b/public/app/features/explore/Wrapper.tsx @@ -1,11 +1,8 @@ import { css } from '@emotion/css'; -import { useResizeObserver } from '@react-aria/utils'; -import { debounce, inRange } from 'lodash'; -import React, { useCallback, useEffect, useRef, useState } from 'react'; +import React, { useEffect } from 'react'; import { locationService } from '@grafana/runtime'; import { ErrorBoundaryAlert } from '@grafana/ui'; -import { SplitView } from 'app/core/components/SplitPaneWrapper/SplitView'; import { useGrafana } from 'app/core/context/GrafanaContext'; import { useNavModel } from 'app/core/hooks/useNavModel'; import { GrafanaRouteComponentProps } from 'app/core/navigation/types'; @@ -17,7 +14,7 @@ import { Branding } from '../../core/components/Branding/Branding'; import { ExploreActions } from './ExploreActions'; import { ExplorePaneContainer } from './ExplorePaneContainer'; -import { lastSavedUrl, resetExploreAction, splitSizeUpdateAction } from './state/main'; +import { lastSavedUrl, resetExploreAction } from './state/main'; const styles = { pageScrollbarWrapper: css` @@ -31,14 +28,9 @@ const styles = { `, }; -const MIN_PANE_WIDTH = 200; function Wrapper(props: GrafanaRouteComponentProps<{}, ExploreQueryParams>) { useExplorePageTitle(); - const { maxedExploreId, evenSplitPanes } = useSelector((state) => state.explore); - const [rightPaneWidth, setRightPaneWidth] = useState(); - const [prevWindowWidth, setWindowWidth] = useState(); const dispatch = useDispatch(); - const containerRef = useRef(null); const queryParams = props.queryParams; const { keybindings, chrome } = useGrafana(); const navModel = useNavModel('explore'); @@ -78,81 +70,20 @@ function Wrapper(props: GrafanaRouteComponentProps<{}, ExploreQueryParams>) { // eslint-disable-next-line react-hooks/exhaustive-deps -- dispatch is stable, doesn't need to be in the deps array }, []); - const debouncedFunctionRef = useRef((prevWindowWidth?: number, rightPaneWidth?: number) => { - let rightPaneRatio = 0.5; - if (!containerRef.current) { - return; - } - const windowWidth = containerRef.current.clientWidth; - // get the ratio of the previous rightPane to the window width - if (rightPaneWidth && prevWindowWidth) { - rightPaneRatio = rightPaneWidth / prevWindowWidth; - } - let newRightPaneWidth = Math.floor(windowWidth * rightPaneRatio); - if (newRightPaneWidth < MIN_PANE_WIDTH) { - // if right pane is too narrow, make min width - newRightPaneWidth = MIN_PANE_WIDTH; - } else if (windowWidth - newRightPaneWidth < MIN_PANE_WIDTH) { - // if left pane is too narrow, make right pane = window - minWidth - newRightPaneWidth = windowWidth - MIN_PANE_WIDTH; - } - - setRightPaneWidth(newRightPaneWidth); - setWindowWidth(windowWidth); - }); - - // eslint needs the callback to be inline to analyze the dependencies, but we need to use debounce from lodash - // eslint-disable-next-line react-hooks/exhaustive-deps - const onResize = useCallback( - debounce(() => debouncedFunctionRef.current(prevWindowWidth, rightPaneWidth), 500), - [prevWindowWidth, rightPaneWidth] - ); - - const updateSplitSize = (rightPaneWidth: number) => { - const evenSplitWidth = window.innerWidth / 2; - const areBothSimilar = inRange(rightPaneWidth, evenSplitWidth - 100, evenSplitWidth + 100); - if (areBothSimilar) { - dispatch(splitSizeUpdateAction({ largerExploreId: undefined })); - } else { - dispatch( - splitSizeUpdateAction({ - largerExploreId: rightPaneWidth > evenSplitWidth ? ExploreId.right : ExploreId.left, - }) - ); - } - - setRightPaneWidth(rightPaneWidth); - }; - - useResizeObserver({ onResize, ref: containerRef }); const hasSplit = Boolean(queryParams.left) && Boolean(queryParams.right); - let widthCalc = 0; - if (hasSplit) { - if (!evenSplitPanes && maxedExploreId) { - widthCalc = maxedExploreId === ExploreId.right ? window.innerWidth - MIN_PANE_WIDTH : MIN_PANE_WIDTH; - } else if (evenSplitPanes) { - widthCalc = Math.floor(window.innerWidth / 2); - } else if (rightPaneWidth !== undefined) { - widthCalc = rightPaneWidth; - } - } - - const splitSizeObj = { rightPaneSize: widthCalc }; return ( -
+
- - - + + + + {hasSplit && ( + + - {hasSplit && ( - - - - )} - + )}
); diff --git a/public/app/features/explore/state/main.test.ts b/public/app/features/explore/state/main.test.ts index 1802d78c06f..3a5d5839784 100644 --- a/public/app/features/explore/state/main.test.ts +++ b/public/app/features/explore/state/main.test.ts @@ -139,10 +139,7 @@ describe('Explore reducer', () => { .givenReducer(exploreReducer, initialState) .whenActionIsDispatched(splitCloseAction({ itemId: ExploreId.left })) .thenStateShouldEqual({ - evenSplitPanes: true, - largerExploreId: undefined, left: rightItemMock, - maxedExploreId: undefined, right: undefined, } as unknown as ExploreState); }); @@ -165,10 +162,7 @@ describe('Explore reducer', () => { .givenReducer(exploreReducer, initialState) .whenActionIsDispatched(splitCloseAction({ itemId: ExploreId.right })) .thenStateShouldEqual({ - evenSplitPanes: true, - largerExploreId: undefined, left: leftItemMock, - maxedExploreId: undefined, right: undefined, } as unknown as ExploreState); }); diff --git a/public/app/features/explore/state/main.ts b/public/app/features/explore/state/main.ts index 641bdbcaae7..125b4654e11 100644 --- a/public/app/features/explore/state/main.ts +++ b/public/app/features/explore/state/main.ts @@ -37,16 +37,6 @@ export const richHistorySearchFiltersUpdatedAction = createAction<{ filters?: RichHistorySearchFilters; }>('explore/richHistorySearchFiltersUpdatedAction'); -export const splitSizeUpdateAction = createAction<{ - largerExploreId?: ExploreId; -}>('explore/splitSizeUpdateAction'); - -export const maximizePaneAction = createAction<{ - exploreId?: ExploreId; -}>('explore/maximizePaneAction'); - -export const evenPaneResizeAction = createAction('explore/evenPaneResizeAction'); - /** * Resets state for explore. */ @@ -169,9 +159,6 @@ export const initialExploreState: ExploreState = { richHistoryStorageFull: false, richHistoryLimitExceededWarningShown: false, richHistoryMigrationFailed: false, - largerExploreId: undefined, - maxedExploreId: undefined, - evenSplitPanes: true, }; /** @@ -188,38 +175,6 @@ export const exploreReducer = (state = initialExploreState, action: AnyAction): return { ...state, ...targetSplit, - largerExploreId: undefined, - maxedExploreId: undefined, - evenSplitPanes: true, - }; - } - - if (splitSizeUpdateAction.match(action)) { - const { largerExploreId } = action.payload; - return { - ...state, - largerExploreId, - maxedExploreId: undefined, - evenSplitPanes: largerExploreId === undefined, - }; - } - - if (maximizePaneAction.match(action)) { - const { exploreId } = action.payload; - return { - ...state, - largerExploreId: exploreId, - maxedExploreId: exploreId, - evenSplitPanes: false, - }; - } - - if (evenPaneResizeAction.match(action)) { - return { - ...state, - largerExploreId: undefined, - maxedExploreId: undefined, - evenSplitPanes: true, }; } diff --git a/public/app/features/query/components/QueryEditorRow.tsx b/public/app/features/query/components/QueryEditorRow.tsx index 8ae8c463f22..629338f3e57 100644 --- a/public/app/features/query/components/QueryEditorRow.tsx +++ b/public/app/features/query/components/QueryEditorRow.tsx @@ -84,10 +84,11 @@ export class QueryEditorRow extends PureComponent Date: Tue, 4 Oct 2022 16:04:28 +0100 Subject: [PATCH 078/135] enable rule `jsx-a11y/iframe-has-title` (#56292) --- .eslintrc | 2 +- .../app/features/dashboard/components/HelpWizard/HelpWizard.tsx | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/.eslintrc b/.eslintrc index 40b042e0a15..1b384e06201 100644 --- a/.eslintrc +++ b/.eslintrc @@ -79,7 +79,7 @@ "jsx-a11y/click-events-have-key-events": "off", "jsx-a11y/heading-has-content": "error", "jsx-a11y/html-has-lang": "error", - "jsx-a11y/iframe-has-title": "off", + "jsx-a11y/iframe-has-title": "error", "jsx-a11y/img-redundant-alt": "error", "jsx-a11y/interactive-supports-focus": [ "off", diff --git a/public/app/features/dashboard/components/HelpWizard/HelpWizard.tsx b/public/app/features/dashboard/components/HelpWizard/HelpWizard.tsx index 1698000c553..f0a95b690d0 100644 --- a/public/app/features/dashboard/components/HelpWizard/HelpWizard.tsx +++ b/public/app/features/dashboard/components/HelpWizard/HelpWizard.tsx @@ -202,6 +202,7 @@ export function HelpWizard({ panel, plugin, onClose }: Props) { {({ height }) => ( <>