From 3207eee5bfcd49b073ddfe5d0331c23b80a8bd7e Mon Sep 17 00:00:00 2001 From: Maximilian Vorbrodt Date: Wed, 2 Nov 2022 11:36:48 +0100 Subject: [PATCH 01/73] prevent scrolling when hovering over graph Signed-off-by: Maximilian Vorbrodt --- .../src/components/DependencyGraph/DependencyGraph.tsx | 2 ++ 1 file changed, 2 insertions(+) diff --git a/packages/core-components/src/components/DependencyGraph/DependencyGraph.tsx b/packages/core-components/src/components/DependencyGraph/DependencyGraph.tsx index 5159f67d9e..4ff68443f4 100644 --- a/packages/core-components/src/components/DependencyGraph/DependencyGraph.tsx +++ b/packages/core-components/src/components/DependencyGraph/DependencyGraph.tsx @@ -259,6 +259,8 @@ export function DependencyGraph( ); } + container.on('wheel', e => e.preventDefault()); + if (zoom === 'enabled') { enableZoom(); } else if (zoom === 'enable-on-click') { From 11c1c4dc239d3eea677d070a987e7fc598199856 Mon Sep 17 00:00:00 2001 From: Maximilian Vorbrodt Date: Wed, 2 Nov 2022 11:38:57 +0100 Subject: [PATCH 02/73] add background to group diagram Signed-off-by: Maximilian Vorbrodt --- .../GroupsExplorerContent/GroupsDiagram.tsx | 52 +++++++++++++------ 1 file changed, 36 insertions(+), 16 deletions(-) diff --git a/plugins/explore/src/components/GroupsExplorerContent/GroupsDiagram.tsx b/plugins/explore/src/components/GroupsExplorerContent/GroupsDiagram.tsx index 23553b8b76..c366d1c6c1 100644 --- a/plugins/explore/src/components/GroupsExplorerContent/GroupsDiagram.tsx +++ b/plugins/explore/src/components/GroupsExplorerContent/GroupsDiagram.tsx @@ -35,7 +35,7 @@ import { getEntityRelations, } from '@backstage/plugin-catalog-react'; import { BackstageTheme } from '@backstage/theme'; -import { makeStyles, Typography, useTheme } from '@material-ui/core'; +import { makeStyles, Typography, Paper, useTheme } from '@material-ui/core'; import ZoomOutMap from '@material-ui/icons/ZoomOutMap'; import classNames from 'classnames'; import React from 'react'; @@ -46,6 +46,12 @@ const useStyles = makeStyles((theme: BackstageTheme) => ({ flex: 1, minHeight: 0, }, + graphWrapper: { + position: 'relative', + flex: 1, + minHeight: 0, + display: 'flex', + }, organizationNode: { fill: theme.palette.secondary.light, stroke: theme.palette.secondary.light, @@ -62,6 +68,15 @@ const useStyles = makeStyles((theme: BackstageTheme) => ({ justifyContent: 'center', color: 'black', }, + legend: { + position: 'absolute', + bottom: 0, + right: 0, + padding: theme.spacing(1), + '& .icon': { + verticalAlign: 'bottom', + }, + }, textOrganization: { color: theme.palette.secondary.contrastText, }, @@ -222,21 +237,26 @@ export function GroupsDiagram() { return ( <> - - - Use pinch & zoom - to move around the diagram. - + + + + + Use pinch & zoom to move around + the diagram. + + ); } From e169c225a43d05befcde7b1d62a1e3b06ab44dfc Mon Sep 17 00:00:00 2001 From: Maximilian Vorbrodt Date: Wed, 2 Nov 2022 11:40:17 +0100 Subject: [PATCH 03/73] remove max height from graph Signed-off-by: Maximilian Vorbrodt --- .../src/components/DependencyGraph/DependencyGraph.tsx | 1 - 1 file changed, 1 deletion(-) diff --git a/packages/core-components/src/components/DependencyGraph/DependencyGraph.tsx b/packages/core-components/src/components/DependencyGraph/DependencyGraph.tsx index 4ff68443f4..3ecdbedddf 100644 --- a/packages/core-components/src/components/DependencyGraph/DependencyGraph.tsx +++ b/packages/core-components/src/components/DependencyGraph/DependencyGraph.tsx @@ -396,7 +396,6 @@ export function DependencyGraph( ref={containerRef} {...svgProps} width="100%" - height={maxHeight} viewBox={`0 0 ${maxWidth} ${maxHeight}`} > From 9140cb69c32905710f97dcde343ed445d783057d Mon Sep 17 00:00:00 2001 From: Maximilian Vorbrodt Date: Wed, 2 Nov 2022 11:43:20 +0100 Subject: [PATCH 04/73] add changeset Signed-off-by: Maximilian Vorbrodt --- .changeset/cuddly-jeans-laugh.md | 6 ++++++ 1 file changed, 6 insertions(+) create mode 100644 .changeset/cuddly-jeans-laugh.md diff --git a/.changeset/cuddly-jeans-laugh.md b/.changeset/cuddly-jeans-laugh.md new file mode 100644 index 0000000000..6dadb85022 --- /dev/null +++ b/.changeset/cuddly-jeans-laugh.md @@ -0,0 +1,6 @@ +--- +'@backstage/core-components': patch +'@backstage/plugin-explore': patch +--- + +Adds a background to the group diagram and prevents weird scroll/zoom behavior when hovering the graph. With this fix the user can only zoom in and out while hovering the graph. If the cursor is not hovering the graph the user can scroll up and down on the page. In total this creates more consistent scrolling or zooming behavior. From 17a8e32f39fc359de39fd4fca0da6bf0a4e6e5a2 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Wed, 9 Nov 2022 12:11:11 +0000 Subject: [PATCH 05/73] Update dependency rc-progress to v3.4.1 Signed-off-by: Renovate Bot --- .changeset/renovate-778b2fa.md | 7 +++++++ packages/core-components/package.json | 2 +- plugins/codescene/package.json | 2 +- plugins/sonarqube/package.json | 2 +- yarn.lock | 20 +++++++++++++++++--- 5 files changed, 27 insertions(+), 6 deletions(-) create mode 100644 .changeset/renovate-778b2fa.md diff --git a/.changeset/renovate-778b2fa.md b/.changeset/renovate-778b2fa.md new file mode 100644 index 0000000000..f4f57e448b --- /dev/null +++ b/.changeset/renovate-778b2fa.md @@ -0,0 +1,7 @@ +--- +'@backstage/core-components': patch +'@backstage/plugin-codescene': patch +'@backstage/plugin-sonarqube': patch +--- + +Updated dependency `rc-progress` to `3.4.1`. diff --git a/packages/core-components/package.json b/packages/core-components/package.json index c7a667e7e2..3aa65efa8d 100644 --- a/packages/core-components/package.json +++ b/packages/core-components/package.json @@ -56,7 +56,7 @@ "pluralize": "^8.0.0", "prop-types": "^15.7.2", "qs": "^6.9.4", - "rc-progress": "3.4.0", + "rc-progress": "3.4.1", "react-helmet": "6.1.0", "react-hook-form": "^7.12.2", "react-markdown": "^8.0.0", diff --git a/plugins/codescene/package.json b/plugins/codescene/package.json index 31970219e3..3863b3ef7f 100644 --- a/plugins/codescene/package.json +++ b/plugins/codescene/package.json @@ -30,7 +30,7 @@ "@material-ui/core": "^4.9.10", "@material-ui/icons": "^4.9.1", "@material-ui/lab": "^4.0.0-alpha.57", - "rc-progress": "3.4.0", + "rc-progress": "3.4.1", "react-use": "^17.2.4" }, "peerDependencies": { diff --git a/plugins/sonarqube/package.json b/plugins/sonarqube/package.json index 2d217ee57c..12567ae189 100644 --- a/plugins/sonarqube/package.json +++ b/plugins/sonarqube/package.json @@ -44,7 +44,7 @@ "@material-ui/lab": "4.0.0-alpha.57", "@material-ui/styles": "^4.10.0", "cross-fetch": "^3.1.5", - "rc-progress": "3.4.0", + "rc-progress": "3.4.1", "react-use": "^17.2.4" }, "peerDependencies": { diff --git a/yarn.lock b/yarn.lock index 0802bef2c2..61a3385dfc 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3700,7 +3700,7 @@ __metadata: pluralize: ^8.0.0 prop-types: ^15.7.2 qs: ^6.9.4 - rc-progress: 3.4.0 + rc-progress: 3.4.1 react-helmet: 6.1.0 react-hook-form: ^7.12.2 react-markdown: ^8.0.0 @@ -5412,7 +5412,7 @@ __metadata: "@types/node": "*" cross-fetch: ^3.1.5 msw: ^0.48.0 - rc-progress: 3.4.0 + rc-progress: 3.4.1 react-use: ^17.2.4 peerDependencies: react: ^16.13.1 || ^17.0.0 @@ -7292,7 +7292,7 @@ __metadata: "@types/node": ^16.11.26 cross-fetch: ^3.1.5 msw: ^0.48.0 - rc-progress: 3.4.0 + rc-progress: 3.4.1 react-use: ^17.2.4 peerDependencies: react: ^16.13.1 || ^17.0.0 @@ -33164,6 +33164,20 @@ __metadata: languageName: node linkType: hard +"rc-progress@npm:3.4.1": + version: 3.4.1 + resolution: "rc-progress@npm:3.4.1" + dependencies: + "@babel/runtime": ^7.10.1 + classnames: ^2.2.6 + rc-util: ^5.16.1 + peerDependencies: + react: ">=16.9.0" + react-dom: ">=16.9.0" + checksum: d4dce5231ea29bfa866935a59f05473711f9dfc944f95cc78b0fdcd1508a063983cc58973f54c2b20797f0b0f480c4a2b84aaa2ca185158c14800ec659163880 + languageName: node + linkType: hard + "rc-util@npm:^5.16.1": version: 5.16.1 resolution: "rc-util@npm:5.16.1" From 3232e31a23fcc90553dfa02aa7f5ff02bba4a1df Mon Sep 17 00:00:00 2001 From: Johan Haals Date: Wed, 26 Oct 2022 14:30:10 +0200 Subject: [PATCH 06/73] backend: Add support for lifecycle events Signed-off-by: Johan Haals --- packages/backend-app-api/api-report.md | 6 ++ .../src/services/implementations/index.ts | 1 + .../implementations/lifecycleService.ts | 81 +++++++++++++++++++ .../backend-defaults/src/CreateBackend.ts | 2 + packages/backend-plugin-api/api-report.md | 13 +++ .../src/services/definitions/index.ts | 5 ++ .../definitions/lifecycleServiceRef.ts | 42 ++++++++++ .../src/service/CatalogPlugin.ts | 9 ++- 8 files changed, 158 insertions(+), 1 deletion(-) create mode 100644 packages/backend-app-api/src/services/implementations/lifecycleService.ts create mode 100644 packages/backend-plugin-api/src/services/definitions/lifecycleServiceRef.ts diff --git a/packages/backend-app-api/api-report.md b/packages/backend-app-api/api-report.md index 4d9fbea4a5..5d200be93c 100644 --- a/packages/backend-app-api/api-report.md +++ b/packages/backend-app-api/api-report.md @@ -4,6 +4,7 @@ ```ts import { BackendFeature } from '@backstage/backend-plugin-api'; +import { BackendLifecycle } from '@backstage/backend-plugin-api'; import { Config } from '@backstage/config'; import { ExtensionPoint } from '@backstage/backend-plugin-api'; import { HttpRouterService } from '@backstage/backend-plugin-api'; @@ -66,6 +67,11 @@ export type HttpRouterFactoryOptions = { indexPlugin?: string; }; +// @public (undocumented) +export const lifecycleFactory: ( + options?: undefined, +) => ServiceFactory; + // @public (undocumented) export const loggerFactory: (options?: undefined) => ServiceFactory; diff --git a/packages/backend-app-api/src/services/implementations/index.ts b/packages/backend-app-api/src/services/implementations/index.ts index 608399bad9..2c26097f48 100644 --- a/packages/backend-app-api/src/services/implementations/index.ts +++ b/packages/backend-app-api/src/services/implementations/index.ts @@ -25,4 +25,5 @@ export { schedulerFactory } from './schedulerService'; export { tokenManagerFactory } from './tokenManagerService'; export { urlReaderFactory } from './urlReaderService'; export { httpRouterFactory } from './httpRouterService'; +export { lifecycleFactory } from './lifecycleService'; export type { HttpRouterFactoryOptions } from './httpRouterService'; diff --git a/packages/backend-app-api/src/services/implementations/lifecycleService.ts b/packages/backend-app-api/src/services/implementations/lifecycleService.ts new file mode 100644 index 0000000000..3549ec31f2 --- /dev/null +++ b/packages/backend-app-api/src/services/implementations/lifecycleService.ts @@ -0,0 +1,81 @@ +/* + * Copyright 2022 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +import { + BackendLifecycle, + createServiceFactory, + lifecycleServiceRef, + loggerToWinstonLogger, + pluginMetadataServiceRef, + rootLoggerServiceRef, + ShutdownHookOptions, +} from '@backstage/backend-plugin-api'; +import { Logger } from 'winston'; + +class BackendLifecycleImpl { + constructor(private readonly logger: Logger) {} + #shutdownTasks: Array = []; + + addShutdownHook(options: ShutdownHookOptions & { pluginId: string }): void { + this.#shutdownTasks.push(options); + } + + async shutdown(): Promise { + await Promise.all( + this.#shutdownTasks.map(hook => + hook + .fn() + .catch(e => { + this.logger.error( + `Shutdown hook registered by plugin '${hook.pluginId}' failed with: ${e}`, + ); + }) + .then(() => + this.logger.debug( + `Successfully ran hook registered by plugin ${hook.pluginId}`, + ), + ), + ), + ); + } +} + +class PluginScopedLifecycleImpl implements BackendLifecycle { + constructor( + private readonly lifecycle: BackendLifecycleImpl, + private readonly pluginId: string, + ) {} + addShutdownHook(options: ShutdownHookOptions): void { + this.lifecycle.addShutdownHook({ ...options, pluginId: this.pluginId }); + } +} + +/** @public */ +export const lifecycleFactory = createServiceFactory({ + service: lifecycleServiceRef, + deps: { + logger: rootLoggerServiceRef, + plugin: pluginMetadataServiceRef, + }, + async factory({ logger }) { + const rootLifecycle = new BackendLifecycleImpl( + loggerToWinstonLogger(logger), + ); + process.on('SIGTERM', async () => await rootLifecycle.shutdown()); + return async ({ plugin }) => { + return new PluginScopedLifecycleImpl(rootLifecycle, plugin.getId()); + }; + }, +}); diff --git a/packages/backend-defaults/src/CreateBackend.ts b/packages/backend-defaults/src/CreateBackend.ts index b95bd6f35b..9fde31e3bd 100644 --- a/packages/backend-defaults/src/CreateBackend.ts +++ b/packages/backend-defaults/src/CreateBackend.ts @@ -22,6 +22,7 @@ import { databaseFactory, discoveryFactory, httpRouterFactory, + lifecycleFactory, loggerFactory, permissionsFactory, rootLoggerFactory, @@ -43,6 +44,7 @@ export const defaultServiceFactories = [ tokenManagerFactory, urlReaderFactory, httpRouterFactory, + lifecycleFactory, ]; /** diff --git a/packages/backend-plugin-api/api-report.md b/packages/backend-plugin-api/api-report.md index 70ab168053..0183707735 100644 --- a/packages/backend-plugin-api/api-report.md +++ b/packages/backend-plugin-api/api-report.md @@ -24,6 +24,11 @@ export interface BackendFeature { register(reg: BackendRegistrationPoints): void; } +// @public (undocumented) +export interface BackendLifecycle { + addShutdownHook(options: ShutdownHookOptions): void; +} + // @public (undocumented) export interface BackendModuleConfig { // (undocumented) @@ -158,6 +163,9 @@ export interface HttpRouterService { // @public (undocumented) export const httpRouterServiceRef: ServiceRef; +// @public (undocumented) +export const lifecycleServiceRef: ServiceRef; + // @public (undocumented) export interface Logger { // (undocumented) @@ -235,6 +243,11 @@ export type ServiceRef< $$ref: 'service'; }; +// @public (undocumented) +export type ShutdownHookOptions = { + fn: () => Promise; +}; + // @public (undocumented) export const tokenManagerServiceRef: ServiceRef; diff --git a/packages/backend-plugin-api/src/services/definitions/index.ts b/packages/backend-plugin-api/src/services/definitions/index.ts index e5f032ef60..19f75ffeb5 100644 --- a/packages/backend-plugin-api/src/services/definitions/index.ts +++ b/packages/backend-plugin-api/src/services/definitions/index.ts @@ -28,4 +28,9 @@ export { permissionsServiceRef } from './permissionsServiceRef'; export { schedulerServiceRef } from './schedulerServiceRef'; export { rootLoggerServiceRef } from './rootLoggerServiceRef'; export { pluginMetadataServiceRef } from './pluginMetadataServiceRef'; +export { lifecycleServiceRef } from './lifecycleServiceRef'; +export type { + BackendLifecycle, + ShutdownHookOptions, +} from './lifecycleServiceRef'; export type { PluginMetadata } from './pluginMetadataServiceRef'; diff --git a/packages/backend-plugin-api/src/services/definitions/lifecycleServiceRef.ts b/packages/backend-plugin-api/src/services/definitions/lifecycleServiceRef.ts new file mode 100644 index 0000000000..ffdd4c414b --- /dev/null +++ b/packages/backend-plugin-api/src/services/definitions/lifecycleServiceRef.ts @@ -0,0 +1,42 @@ +/* + * Copyright 2022 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { createServiceRef } from '../system/types'; + +/** + * @public + **/ +export type ShutdownHookOptions = { + fn: () => Promise; +}; + +/** + * @public + **/ +export interface BackendLifecycle { + /** + * Register a function to be called and when the backend is shutting down. + */ + addShutdownHook(options: ShutdownHookOptions): void; +} + +/** + * @public + */ +export const lifecycleServiceRef = createServiceRef({ + id: 'core.lifecycle', + scope: 'plugin', +}); diff --git a/plugins/catalog-backend/src/service/CatalogPlugin.ts b/plugins/catalog-backend/src/service/CatalogPlugin.ts index 64e1e52494..84cad86d9a 100644 --- a/plugins/catalog-backend/src/service/CatalogPlugin.ts +++ b/plugins/catalog-backend/src/service/CatalogPlugin.ts @@ -22,6 +22,7 @@ import { permissionsServiceRef, urlReaderServiceRef, httpRouterServiceRef, + lifecycleServiceRef, } from '@backstage/backend-plugin-api'; import { CatalogBuilder } from './CatalogBuilder'; import { @@ -78,6 +79,7 @@ export const catalogPlugin = createBackendPlugin({ permissions: permissionsServiceRef, database: databaseServiceRef, httpRouter: httpRouterServiceRef, + lifecycle: lifecycleServiceRef, }, async init({ logger, @@ -86,6 +88,7 @@ export const catalogPlugin = createBackendPlugin({ database, permissions, httpRouter, + lifecycle, }) { const winstonLogger = loggerToWinstonLogger(logger); const builder = await CatalogBuilder.create({ @@ -100,7 +103,11 @@ export const catalogPlugin = createBackendPlugin({ const { processingEngine, router } = await builder.build(); await processingEngine.start(); - + lifecycle.addShutdownHook({ + fn: async () => { + await processingEngine.stop(); + }, + }); httpRouter.use(router); }, }); From 7cdc99a002bf257876f1b2b6ab014872d1c16dd8 Mon Sep 17 00:00:00 2001 From: Johan Haals Date: Wed, 9 Nov 2022 15:33:16 +0100 Subject: [PATCH 07/73] Update packages/backend-plugin-api/src/services/definitions/lifecycleServiceRef.ts MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Fredrik Adelöw Signed-off-by: Johan Haals Signed-off-by: Johan Haals --- .../src/services/definitions/lifecycleServiceRef.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/backend-plugin-api/src/services/definitions/lifecycleServiceRef.ts b/packages/backend-plugin-api/src/services/definitions/lifecycleServiceRef.ts index ffdd4c414b..3e8dd31fd1 100644 --- a/packages/backend-plugin-api/src/services/definitions/lifecycleServiceRef.ts +++ b/packages/backend-plugin-api/src/services/definitions/lifecycleServiceRef.ts @@ -28,7 +28,7 @@ export type ShutdownHookOptions = { **/ export interface BackendLifecycle { /** - * Register a function to be called and when the backend is shutting down. + * Register a function to be called when the backend is shutting down. */ addShutdownHook(options: ShutdownHookOptions): void; } From 678a1583039c01b5afe3d9c2b8bea32975c637f1 Mon Sep 17 00:00:00 2001 From: Johan Haals Date: Wed, 9 Nov 2022 16:02:10 +0100 Subject: [PATCH 08/73] chore: Rename options, add additional logging Signed-off-by: Johan Haals --- .../src/services/implementations/lifecycleService.ts | 12 ++++++++---- .../src/services/definitions/index.ts | 2 +- .../src/services/definitions/lifecycleServiceRef.ts | 4 ++-- 3 files changed, 11 insertions(+), 7 deletions(-) diff --git a/packages/backend-app-api/src/services/implementations/lifecycleService.ts b/packages/backend-app-api/src/services/implementations/lifecycleService.ts index 3549ec31f2..578bd9ca01 100644 --- a/packages/backend-app-api/src/services/implementations/lifecycleService.ts +++ b/packages/backend-app-api/src/services/implementations/lifecycleService.ts @@ -20,19 +20,23 @@ import { loggerToWinstonLogger, pluginMetadataServiceRef, rootLoggerServiceRef, - ShutdownHookOptions, + BackendLifecycleShutdownHook, } from '@backstage/backend-plugin-api'; import { Logger } from 'winston'; class BackendLifecycleImpl { constructor(private readonly logger: Logger) {} - #shutdownTasks: Array = []; + #shutdownTasks: Array = + []; - addShutdownHook(options: ShutdownHookOptions & { pluginId: string }): void { + addShutdownHook( + options: BackendLifecycleShutdownHook & { pluginId: string }, + ): void { this.#shutdownTasks.push(options); } async shutdown(): Promise { + this.logger.info(`Running ${this.#shutdownTasks.length} shutdown tasks...`); await Promise.all( this.#shutdownTasks.map(hook => hook @@ -57,7 +61,7 @@ class PluginScopedLifecycleImpl implements BackendLifecycle { private readonly lifecycle: BackendLifecycleImpl, private readonly pluginId: string, ) {} - addShutdownHook(options: ShutdownHookOptions): void { + addShutdownHook(options: BackendLifecycleShutdownHook): void { this.lifecycle.addShutdownHook({ ...options, pluginId: this.pluginId }); } } diff --git a/packages/backend-plugin-api/src/services/definitions/index.ts b/packages/backend-plugin-api/src/services/definitions/index.ts index 19f75ffeb5..cf997a344d 100644 --- a/packages/backend-plugin-api/src/services/definitions/index.ts +++ b/packages/backend-plugin-api/src/services/definitions/index.ts @@ -31,6 +31,6 @@ export { pluginMetadataServiceRef } from './pluginMetadataServiceRef'; export { lifecycleServiceRef } from './lifecycleServiceRef'; export type { BackendLifecycle, - ShutdownHookOptions, + BackendLifecycleShutdownHook, } from './lifecycleServiceRef'; export type { PluginMetadata } from './pluginMetadataServiceRef'; diff --git a/packages/backend-plugin-api/src/services/definitions/lifecycleServiceRef.ts b/packages/backend-plugin-api/src/services/definitions/lifecycleServiceRef.ts index 3e8dd31fd1..4fd9f8daae 100644 --- a/packages/backend-plugin-api/src/services/definitions/lifecycleServiceRef.ts +++ b/packages/backend-plugin-api/src/services/definitions/lifecycleServiceRef.ts @@ -19,7 +19,7 @@ import { createServiceRef } from '../system/types'; /** * @public **/ -export type ShutdownHookOptions = { +export type BackendLifecycleShutdownHook = { fn: () => Promise; }; @@ -30,7 +30,7 @@ export interface BackendLifecycle { /** * Register a function to be called when the backend is shutting down. */ - addShutdownHook(options: ShutdownHookOptions): void; + addShutdownHook(options: BackendLifecycleShutdownHook): void; } /** From d0c09089a85eaa5fd33874550a8ed8af4a8c0996 Mon Sep 17 00:00:00 2001 From: Johan Haals Date: Thu, 10 Nov 2022 15:16:30 +0100 Subject: [PATCH 09/73] Add support for non async hooks Signed-off-by: Johan Haals --- .../src/services/implementations/lifecycleService.ts | 4 ++-- .../src/services/definitions/lifecycleServiceRef.ts | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/packages/backend-app-api/src/services/implementations/lifecycleService.ts b/packages/backend-app-api/src/services/implementations/lifecycleService.ts index 578bd9ca01..81f1b16b53 100644 --- a/packages/backend-app-api/src/services/implementations/lifecycleService.ts +++ b/packages/backend-app-api/src/services/implementations/lifecycleService.ts @@ -39,8 +39,8 @@ class BackendLifecycleImpl { this.logger.info(`Running ${this.#shutdownTasks.length} shutdown tasks...`); await Promise.all( this.#shutdownTasks.map(hook => - hook - .fn() + Promise.resolve() + .then(() => hook.fn()) .catch(e => { this.logger.error( `Shutdown hook registered by plugin '${hook.pluginId}' failed with: ${e}`, diff --git a/packages/backend-plugin-api/src/services/definitions/lifecycleServiceRef.ts b/packages/backend-plugin-api/src/services/definitions/lifecycleServiceRef.ts index 4fd9f8daae..15610e2643 100644 --- a/packages/backend-plugin-api/src/services/definitions/lifecycleServiceRef.ts +++ b/packages/backend-plugin-api/src/services/definitions/lifecycleServiceRef.ts @@ -20,7 +20,7 @@ import { createServiceRef } from '../system/types'; * @public **/ export type BackendLifecycleShutdownHook = { - fn: () => Promise; + fn: () => void | Promise; }; /** From 263283c7bd2e5f7197a6b6b53c25b0af99e560ee Mon Sep 17 00:00:00 2001 From: Johan Haals Date: Thu, 10 Nov 2022 15:31:42 +0100 Subject: [PATCH 10/73] update api docs Signed-off-by: Johan Haals --- packages/backend-plugin-api/api-report.md | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/packages/backend-plugin-api/api-report.md b/packages/backend-plugin-api/api-report.md index 0183707735..b73a85c32e 100644 --- a/packages/backend-plugin-api/api-report.md +++ b/packages/backend-plugin-api/api-report.md @@ -26,9 +26,14 @@ export interface BackendFeature { // @public (undocumented) export interface BackendLifecycle { - addShutdownHook(options: ShutdownHookOptions): void; + addShutdownHook(options: BackendLifecycleShutdownHook): void; } +// @public (undocumented) +export type BackendLifecycleShutdownHook = { + fn: () => void | Promise; +}; + // @public (undocumented) export interface BackendModuleConfig { // (undocumented) @@ -243,11 +248,6 @@ export type ServiceRef< $$ref: 'service'; }; -// @public (undocumented) -export type ShutdownHookOptions = { - fn: () => Promise; -}; - // @public (undocumented) export const tokenManagerServiceRef: ServiceRef; From f3ac47b6c61dc0e2517dcf9b6b7ec26eaf335da6 Mon Sep 17 00:00:00 2001 From: Johan Haals Date: Thu, 10 Nov 2022 16:27:07 +0100 Subject: [PATCH 11/73] Handle multiple signals, prevent concurrent calls Signed-off-by: Johan Haals --- .../implementations/lifecycleService.ts | 17 +++++++++++++---- 1 file changed, 13 insertions(+), 4 deletions(-) diff --git a/packages/backend-app-api/src/services/implementations/lifecycleService.ts b/packages/backend-app-api/src/services/implementations/lifecycleService.ts index 81f1b16b53..0ee0946469 100644 --- a/packages/backend-app-api/src/services/implementations/lifecycleService.ts +++ b/packages/backend-app-api/src/services/implementations/lifecycleService.ts @@ -24,8 +24,13 @@ import { } from '@backstage/backend-plugin-api'; import { Logger } from 'winston'; +const CALLBACKS = ['SIGTERM', 'SIGINT', 'beforeExit']; class BackendLifecycleImpl { - constructor(private readonly logger: Logger) {} + constructor(private readonly logger: Logger) { + CALLBACKS.map(signal => process.on(signal, () => this.shutdown())); + } + + #isCalled = false; #shutdownTasks: Array = []; @@ -36,6 +41,11 @@ class BackendLifecycleImpl { } async shutdown(): Promise { + if (this.#isCalled) { + return; + } + this.#isCalled = true; + this.logger.info(`Running ${this.#shutdownTasks.length} shutdown tasks...`); await Promise.all( this.#shutdownTasks.map(hook => @@ -47,8 +57,8 @@ class BackendLifecycleImpl { ); }) .then(() => - this.logger.debug( - `Successfully ran hook registered by plugin ${hook.pluginId}`, + this.logger.info( + `Successfully ran shutdown hook registered by plugin ${hook.pluginId}`, ), ), ), @@ -77,7 +87,6 @@ export const lifecycleFactory = createServiceFactory({ const rootLifecycle = new BackendLifecycleImpl( loggerToWinstonLogger(logger), ); - process.on('SIGTERM', async () => await rootLifecycle.shutdown()); return async ({ plugin }) => { return new PluginScopedLifecycleImpl(rootLifecycle, plugin.getId()); }; From e982f77fe3f0f651c9007b938c66b7d3710238e9 Mon Sep 17 00:00:00 2001 From: Johan Haals Date: Mon, 14 Nov 2022 13:46:21 +0100 Subject: [PATCH 12/73] add changeset Signed-off-by: Johan Haals --- .changeset/silly-wolves-remember.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/silly-wolves-remember.md diff --git a/.changeset/silly-wolves-remember.md b/.changeset/silly-wolves-remember.md new file mode 100644 index 0000000000..f39812db88 --- /dev/null +++ b/.changeset/silly-wolves-remember.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog-backend': patch +--- + +Registered shutdown hook in experimental catalog plugin. From d6dbf1792bfa0bf5fc5f0ddaf3ab15599f01f544 Mon Sep 17 00:00:00 2001 From: Johan Haals Date: Mon, 14 Nov 2022 13:54:13 +0100 Subject: [PATCH 13/73] add changesets Signed-off-by: Johan Haals --- .changeset/old-keys-leave.md | 5 +++++ .changeset/twenty-dodos-wash.md | 5 +++++ .changeset/young-turkeys-relax.md | 5 +++++ 3 files changed, 15 insertions(+) create mode 100644 .changeset/old-keys-leave.md create mode 100644 .changeset/twenty-dodos-wash.md create mode 100644 .changeset/young-turkeys-relax.md diff --git a/.changeset/old-keys-leave.md b/.changeset/old-keys-leave.md new file mode 100644 index 0000000000..d80574b2e4 --- /dev/null +++ b/.changeset/old-keys-leave.md @@ -0,0 +1,5 @@ +--- +'@backstage/backend-app-api': patch +--- + +Added `lifecycleFactory` implementation. diff --git a/.changeset/twenty-dodos-wash.md b/.changeset/twenty-dodos-wash.md new file mode 100644 index 0000000000..d21088a953 --- /dev/null +++ b/.changeset/twenty-dodos-wash.md @@ -0,0 +1,5 @@ +--- +'@backstage/backend-defaults': patch +--- + +Added `lifecycleFactory` to default service factories. diff --git a/.changeset/young-turkeys-relax.md b/.changeset/young-turkeys-relax.md new file mode 100644 index 0000000000..c53cd984a6 --- /dev/null +++ b/.changeset/young-turkeys-relax.md @@ -0,0 +1,5 @@ +--- +'@backstage/backend-plugin-api': patch +--- + +Added initial support for registering shutdown hooks via `lifecycleServiceRef`. From 4bc0ed33ca8db31d3a0f4ffdf6108eff9d307c77 Mon Sep 17 00:00:00 2001 From: Maximilian Vorbrodt Date: Mon, 14 Nov 2022 15:14:33 +0100 Subject: [PATCH 14/73] bring back old scrolling behaviour Signed-off-by: Maximilian Vorbrodt --- .../src/components/DependencyGraph/DependencyGraph.tsx | 2 -- 1 file changed, 2 deletions(-) diff --git a/packages/core-components/src/components/DependencyGraph/DependencyGraph.tsx b/packages/core-components/src/components/DependencyGraph/DependencyGraph.tsx index 3ecdbedddf..64d39a4425 100644 --- a/packages/core-components/src/components/DependencyGraph/DependencyGraph.tsx +++ b/packages/core-components/src/components/DependencyGraph/DependencyGraph.tsx @@ -259,8 +259,6 @@ export function DependencyGraph( ); } - container.on('wheel', e => e.preventDefault()); - if (zoom === 'enabled') { enableZoom(); } else if (zoom === 'enable-on-click') { From d4368d1f9498283e9f3d40dbb86e53a15116d91a Mon Sep 17 00:00:00 2001 From: Maximilian Vorbrodt Date: Mon, 14 Nov 2022 15:16:35 +0100 Subject: [PATCH 15/73] make graph fill only visiable space on the page Signed-off-by: Maximilian Vorbrodt --- .../src/components/DependencyGraph/DependencyGraph.tsx | 4 +++- .../src/components/GroupsExplorerContent/GroupsDiagram.tsx | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/packages/core-components/src/components/DependencyGraph/DependencyGraph.tsx b/packages/core-components/src/components/DependencyGraph/DependencyGraph.tsx index 64d39a4425..5dd8664107 100644 --- a/packages/core-components/src/components/DependencyGraph/DependencyGraph.tsx +++ b/packages/core-components/src/components/DependencyGraph/DependencyGraph.tsx @@ -223,6 +223,7 @@ export function DependencyGraph( const maxWidth = Math.max(graphWidth, containerWidth); const maxHeight = Math.max(graphHeight, containerHeight); + const minHeight = Math.min(graphHeight, containerHeight); const containerRef = React.useMemo( () => @@ -393,7 +394,8 @@ export function DependencyGraph( diff --git a/plugins/explore/src/components/GroupsExplorerContent/GroupsDiagram.tsx b/plugins/explore/src/components/GroupsExplorerContent/GroupsDiagram.tsx index c366d1c6c1..95c6d86d27 100644 --- a/plugins/explore/src/components/GroupsExplorerContent/GroupsDiagram.tsx +++ b/plugins/explore/src/components/GroupsExplorerContent/GroupsDiagram.tsx @@ -44,7 +44,7 @@ import useAsync from 'react-use/lib/useAsync'; const useStyles = makeStyles((theme: BackstageTheme) => ({ graph: { flex: 1, - minHeight: 0, + minHeight: '100%', }, graphWrapper: { position: 'relative', From fd47108dedca4b5ac49278bac32a0ea6e8fa82ad Mon Sep 17 00:00:00 2001 From: Maximilian Vorbrodt Date: Mon, 14 Nov 2022 15:23:18 +0100 Subject: [PATCH 16/73] update changeset Signed-off-by: Maximilian Vorbrodt --- .changeset/cuddly-jeans-laugh.md | 6 ------ .changeset/lucky-carrots-stare.md | 6 ++++++ 2 files changed, 6 insertions(+), 6 deletions(-) delete mode 100644 .changeset/cuddly-jeans-laugh.md create mode 100644 .changeset/lucky-carrots-stare.md diff --git a/.changeset/cuddly-jeans-laugh.md b/.changeset/cuddly-jeans-laugh.md deleted file mode 100644 index 6dadb85022..0000000000 --- a/.changeset/cuddly-jeans-laugh.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'@backstage/core-components': patch -'@backstage/plugin-explore': patch ---- - -Adds a background to the group diagram and prevents weird scroll/zoom behavior when hovering the graph. With this fix the user can only zoom in and out while hovering the graph. If the cursor is not hovering the graph the user can scroll up and down on the page. In total this creates more consistent scrolling or zooming behavior. diff --git a/.changeset/lucky-carrots-stare.md b/.changeset/lucky-carrots-stare.md new file mode 100644 index 0000000000..81ad1b7268 --- /dev/null +++ b/.changeset/lucky-carrots-stare.md @@ -0,0 +1,6 @@ +--- +'@backstage/core-components': patch +'@backstage/plugin-explore': patch +--- + +Adds a background to GroupsDiagram and makes the graph fill up all the visible space on the page for, making it so the user does not have to scroll up or down on the page. From a7bc5d082d43edc404128e4e7315b6e0ed11979f Mon Sep 17 00:00:00 2001 From: Maximilian Vorbrodt Date: Mon, 14 Nov 2022 15:48:35 +0100 Subject: [PATCH 17/73] fix code style issue Signed-off-by: Maximilian Vorbrodt --- .../src/components/DependencyGraph/DependencyGraph.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/core-components/src/components/DependencyGraph/DependencyGraph.tsx b/packages/core-components/src/components/DependencyGraph/DependencyGraph.tsx index 5dd8664107..5b26629082 100644 --- a/packages/core-components/src/components/DependencyGraph/DependencyGraph.tsx +++ b/packages/core-components/src/components/DependencyGraph/DependencyGraph.tsx @@ -394,7 +394,7 @@ export function DependencyGraph( From cadb2f3eaf3ff786c82f6286138d21daf2262811 Mon Sep 17 00:00:00 2001 From: bnechyporenko Date: Tue, 15 Nov 2022 13:35:12 +0100 Subject: [PATCH 18/73] Cost Insights Configurable Default Currency Signed-off-by: bnechyporenko --- app-config.yaml | 1 + plugins/cost-insights/config.d.ts | 5 +++ .../src/components/BarChart/BarChart.test.tsx | 14 ++++--- .../src/components/BarChart/BarChart.tsx | 36 ++++++++++------- .../BarChart/BarChartLegend.test.tsx | 5 ++- .../components/BarChart/BarChartLegend.tsx | 6 ++- .../CostOverviewBreakdownChart.tsx | 29 +++++++------- .../CostOverviewCard/CostOverviewChart.tsx | 18 +++++++-- .../ProductEntityDialog.test.tsx | 25 +++++++----- .../ProductEntityTable.tsx | 18 ++++++--- .../ProductInsightsChart.tsx | 8 +++- .../UnlabeledDataflowAlertCard.test.tsx | 17 +++++--- plugins/cost-insights/src/hooks/useConfig.tsx | 14 +++++++ .../cost-insights/src/testUtils/providers.tsx | 18 ++++----- .../src/utils/formatters.test.ts | 2 +- plugins/cost-insights/src/utils/formatters.ts | 39 ++++++++++--------- plugins/cost-insights/src/utils/graphs.ts | 31 ++++++++------- 17 files changed, 177 insertions(+), 109 deletions(-) diff --git a/app-config.yaml b/app-config.yaml index ef133491af..7064d406f7 100644 --- a/app-config.yaml +++ b/app-config.yaml @@ -372,6 +372,7 @@ auth: myproxy: development: {} costInsights: + baseCurrency: 'EUR' engineerCost: 200000 products: computeEngine: diff --git a/plugins/cost-insights/config.d.ts b/plugins/cost-insights/config.d.ts index 4144b6d6a5..7c725eef8c 100644 --- a/plugins/cost-insights/config.d.ts +++ b/plugins/cost-insights/config.d.ts @@ -21,6 +21,11 @@ export interface Config { */ engineerCost: number; + /** + * @visibility frontend + */ + baseCurrency?: string; + products?: { [kind: string]: { /** diff --git a/plugins/cost-insights/src/components/BarChart/BarChart.test.tsx b/plugins/cost-insights/src/components/BarChart/BarChart.test.tsx index 4e3ca9d78c..530ca16e8f 100644 --- a/plugins/cost-insights/src/components/BarChart/BarChart.test.tsx +++ b/plugins/cost-insights/src/components/BarChart/BarChart.test.tsx @@ -18,7 +18,7 @@ import React from 'react'; import { fireEvent } from '@testing-library/react'; import { BarChart, BarChartProps } from './BarChart'; import { ResourceData } from '../../types'; -import { createMockEntity } from '../../testUtils'; +import { createMockEntity, MockConfigProvider } from '../../testUtils'; import { resourceSort } from '../../utils/sort'; import { renderInTestApp } from '@backstage/test-utils'; @@ -46,11 +46,13 @@ const renderWithProps = ({ resources = MockResources, }: BarChartProps) => { return renderInTestApp( - , + + + , ); }; diff --git a/plugins/cost-insights/src/components/BarChart/BarChart.tsx b/plugins/cost-insights/src/components/BarChart/BarChart.tsx index 4f4dea8ddd..fa97e640bd 100644 --- a/plugins/cost-insights/src/components/BarChart/BarChart.tsx +++ b/plugins/cost-insights/src/components/BarChart/BarChart.tsx @@ -40,20 +40,26 @@ import { notEmpty } from '../../utils/assert'; import { useBarChartStyles } from '../../utils/styles'; import { resourceSort } from '../../utils/sort'; import { isInvalid, titleOf, tooltipItemOf } from '../../utils/graphs'; -import { TooltipRenderer } from '../../types/Tooltip'; +import { TooltipRenderer } from '../../types'; +import { useConfig } from '../../hooks'; -export const defaultTooltip: TooltipRenderer = ({ label, payload = [] }) => { - if (isInvalid({ label, payload })) return null; +const defaultTooltip = (baseCurrency: string) => { + const tooltip: TooltipRenderer = ({ label, payload = [] }) => { + if (isInvalid({ label, payload })) return null; - const title = titleOf(label); - const items = payload.map(tooltipItemOf).filter(notEmpty); - return ( - - {items.map((item, index) => ( - - ))} - - ); + const title = titleOf(label); + const items = payload + .map(p => tooltipItemOf(baseCurrency, p)) + .filter(notEmpty); + return ( + + {items.map((item, index) => ( + + ))} + + ); + }; + return tooltip; }; /** @public */ @@ -69,12 +75,14 @@ export type BarChartProps = { /** @public */ export const BarChart = (props: BarChartProps) => { + const { baseCurrency } = useConfig(); + const { resources, responsive = true, displayAmount = 6, options = {}, - tooltip = defaultTooltip, + tooltip = defaultTooltip(baseCurrency), onClick, onMouseMove, } = props; @@ -164,7 +172,7 @@ export const BarChart = (props: BarChartProps) => { tick={BarChartTick} /> 0, globalResourcesMax]} tick={styles.axis} /> diff --git a/plugins/cost-insights/src/components/BarChart/BarChartLegend.test.tsx b/plugins/cost-insights/src/components/BarChart/BarChartLegend.test.tsx index 07ff144862..690f0bbcd8 100644 --- a/plugins/cost-insights/src/components/BarChart/BarChartLegend.test.tsx +++ b/plugins/cost-insights/src/components/BarChart/BarChartLegend.test.tsx @@ -17,11 +17,14 @@ import React from 'react'; import { renderInTestApp } from '@backstage/test-utils'; import { BarChartLegend } from './BarChartLegend'; +import { MockConfigProvider } from '../../testUtils'; describe('', () => { it(`Should display the correct cost start and end`, async () => { const rendered = await renderInTestApp( - , + + , + , ); expect(rendered.getByText(/\$1,000/)).toBeInTheDocument(); expect(rendered.queryByText(/\$5,000/)).toBeInTheDocument(); diff --git a/plugins/cost-insights/src/components/BarChart/BarChartLegend.tsx b/plugins/cost-insights/src/components/BarChart/BarChartLegend.tsx index 72c3120dd4..becd5467d1 100644 --- a/plugins/cost-insights/src/components/BarChart/BarChartLegend.tsx +++ b/plugins/cost-insights/src/components/BarChart/BarChartLegend.tsx @@ -20,6 +20,7 @@ import { LegendItem } from '../LegendItem'; import { currencyFormatter } from '../../utils/formatters'; import { CostInsightsTheme } from '../../types'; import { useBarChartLayoutStyles as useStyles } from '../../utils/styles'; +import { useConfig } from '../../hooks'; /** @public */ export type BarChartLegendOptions = { @@ -45,6 +46,7 @@ export const BarChartLegend = ( const theme = useTheme(); const classes = useStyles(); + const { baseCurrency } = useConfig(); const data = Object.assign( { @@ -63,7 +65,7 @@ export const BarChartLegend = ( title={data.previousName} markerColor={options.hideMarker ? undefined : data.previousFill} > - {currencyFormatter.format(costStart)} + {currencyFormatter(baseCurrency).format(costStart)} @@ -71,7 +73,7 @@ export const BarChartLegend = ( title={data.currentName} markerColor={options.hideMarker ? undefined : data.currentFill} > - {currencyFormatter.format(costEnd)} + {currencyFormatter(baseCurrency).format(costEnd)} {children} diff --git a/plugins/cost-insights/src/components/CostOverviewCard/CostOverviewBreakdownChart.tsx b/plugins/cost-insights/src/components/CostOverviewCard/CostOverviewBreakdownChart.tsx index 962dc6b332..838da0d1f4 100644 --- a/plugins/cost-insights/src/components/CostOverviewCard/CostOverviewBreakdownChart.tsx +++ b/plugins/cost-insights/src/components/CostOverviewCard/CostOverviewBreakdownChart.tsx @@ -16,41 +16,41 @@ import React, { useState } from 'react'; import { DateTime } from 'luxon'; import { - useTheme, Box, - Typography, Divider, emphasize, + Typography, + useTheme, } from '@material-ui/core'; import { default as FullScreenIcon } from '@material-ui/icons/Fullscreen'; import { + Area, AreaChart, + CartesianGrid, + ResponsiveContainer, + Tooltip as RechartsTooltip, XAxis, YAxis, - Tooltip as RechartsTooltip, - Area, - ResponsiveContainer, - CartesianGrid, } from 'recharts'; -import { Cost, DEFAULT_DATE_FORMAT, CostInsightsTheme } from '../../types'; +import { Cost, CostInsightsTheme, DEFAULT_DATE_FORMAT } from '../../types'; import { + BarChartLegend, BarChartTooltip as Tooltip, BarChartTooltipItem as TooltipItem, - BarChartLegend, } from '../BarChart'; import { - overviewGraphTickFormatter, formatGraphValue, isInvalid, + overviewGraphTickFormatter, } from '../../utils/graphs'; import { useCostOverviewStyles as useStyles } from '../../utils/styles'; -import { useFilters, useLastCompleteBillingDate } from '../../hooks'; +import { useConfig, useFilters, useLastCompleteBillingDate } from '../../hooks'; import { mapFiltersToProps } from './selector'; import { getPreviousPeriodTotalCost } from '../../utils/change'; import { formatPeriod } from '../../utils/formatters'; import { aggregationSum } from '../../utils/sum'; -import { BarChartLegendOptions } from '../BarChart/BarChartLegend'; -import { TooltipRenderer } from '../../types/Tooltip'; +import { BarChartLegendOptions } from '../BarChart'; +import { TooltipRenderer } from '../../types'; export type CostOverviewBreakdownChartProps = { costBreakdown: Cost[]; @@ -65,6 +65,7 @@ export const CostOverviewBreakdownChart = ({ }: CostOverviewBreakdownChartProps) => { const theme = useTheme(); const classes = useStyles(theme); + const { baseCurrency } = useConfig(); const lastCompleteBillingDate = useLastCompleteBillingDate(); const { duration } = useFilters(mapFiltersToProps); const [isExpanded, setExpanded] = useState(false); @@ -187,7 +188,7 @@ export const CostOverviewBreakdownChart = ({ const dateTitle = date.toUTC().toFormat(DEFAULT_DATE_FORMAT); const items = payload.map((p, i) => ({ label: p.dataKey as string, - value: formatGraphValue(Number(p.value), i), + value: formatGraphValue(baseCurrency)(Number(p.value), i), fill: p.color!, })); const expandText = ( @@ -253,7 +254,7 @@ export const CostOverviewBreakdownChart = ({ 0, 'dataMax']} tick={{ fill: classes.axis.fill }} - tickFormatter={formatGraphValue} + tickFormatter={formatGraphValue(baseCurrency)} width={classes.yAxis.width} /> {renderAreas()} diff --git a/plugins/cost-insights/src/components/CostOverviewCard/CostOverviewChart.tsx b/plugins/cost-insights/src/components/CostOverviewCard/CostOverviewChart.tsx index 1c58bf58e6..4232c56ffc 100644 --- a/plugins/cost-insights/src/components/CostOverviewCard/CostOverviewChart.tsx +++ b/plugins/cost-insights/src/components/CostOverviewCard/CostOverviewChart.tsx @@ -48,7 +48,8 @@ import { useCostOverviewStyles as useStyles } from '../../utils/styles'; import { groupByDate, toDataMax, trendFrom } from '../../utils/charts'; import { aggregationSort } from '../../utils/sort'; import { CostOverviewLegend } from './CostOverviewLegend'; -import { TooltipRenderer } from '../../types/Tooltip'; +import { TooltipRenderer } from '../../types'; +import { useConfig } from '../../hooks'; type CostOverviewChartProps = { metric: Maybe; @@ -65,6 +66,7 @@ export const CostOverviewChart = ({ }: CostOverviewChartProps) => { const theme = useTheme(); const styles = useStyles(theme); + const { baseCurrency } = useConfig(); const data = { dailyCost: { @@ -115,8 +117,16 @@ export const CostOverviewChart = ({ : data.metric.name, value: p.dataKey === data.dailyCost.dataKey - ? formatGraphValue(Number(p.value), i, data.dailyCost.format) - : formatGraphValue(Number(p.value), i, data.metric.format), + ? formatGraphValue(baseCurrency)( + Number(p.value), + i, + data.dailyCost.format, + ) + : formatGraphValue(baseCurrency)( + Number(p.value), + i, + data.metric.format, + ), fill: p.dataKey === data.dailyCost.dataKey ? theme.palette.blue @@ -157,7 +167,7 @@ export const CostOverviewChart = ({ 0, 'dataMax']} tick={{ fill: styles.axis.fill }} - tickFormatter={formatGraphValue} + tickFormatter={formatGraphValue(baseCurrency)} width={styles.yAxis.width} yAxisId={data.dailyCost.dataKey} /> diff --git a/plugins/cost-insights/src/components/ProductInsightsCard/ProductEntityDialog.test.tsx b/plugins/cost-insights/src/components/ProductInsightsCard/ProductEntityDialog.test.tsx index d3d12abe74..fef201ec12 100644 --- a/plugins/cost-insights/src/components/ProductInsightsCard/ProductEntityDialog.test.tsx +++ b/plugins/cost-insights/src/components/ProductInsightsCard/ProductEntityDialog.test.tsx @@ -19,6 +19,7 @@ import { wrapInTestApp } from '@backstage/test-utils'; import { ProductEntityDialog } from './ProductEntityDialog'; import { render } from '@testing-library/react'; import { Entity } from '../../types'; +import { MockConfigProvider } from '../../testUtils'; const atomicEntity: Entity = { id: null, @@ -86,11 +87,13 @@ describe('', () => { it('Should show a tab for a single sub-entity type', () => { const { getByText } = render( wrapInTestApp( - , + + + , ), ); expect(getByText('Breakdown by SKU')).toBeInTheDocument(); @@ -99,11 +102,13 @@ describe('', () => { it('Should show tabs when multiple sub-entity types exist', () => { const { getByText } = render( wrapInTestApp( - , + + + , ), ); expect(getByText('Breakdown by SKU')).toBeInTheDocument(); diff --git a/plugins/cost-insights/src/components/ProductInsightsCard/ProductEntityTable.tsx b/plugins/cost-insights/src/components/ProductInsightsCard/ProductEntityTable.tsx index 95ba4f2f2d..0d943d66a5 100644 --- a/plugins/cost-insights/src/components/ProductInsightsCard/ProductEntityTable.tsx +++ b/plugins/cost-insights/src/components/ProductInsightsCard/ProductEntityTable.tsx @@ -22,6 +22,7 @@ import { useEntityDialogStyles as useStyles } from '../../utils/styles'; import { CostGrowthIndicator } from '../CostGrowth'; import { BarChartOptions, ChangeStatistic, Entity } from '../../types'; import { Table, TableColumn } from '@backstage/core-components'; +import { useConfig } from '../../hooks'; export type ProductEntityTableOptions = Partial< Pick @@ -35,7 +36,11 @@ type RowData = { change: ChangeStatistic; }; -function createRenderer(col: keyof RowData, classes: Record) { +function createRenderer( + baseCurrency: string, + col: keyof RowData, + classes: Record, +) { return function render(rowData: {}): JSX.Element { const row = rowData as RowData; const rowStyles = classnames(classes.row, { @@ -49,7 +54,7 @@ function createRenderer(col: keyof RowData, classes: Record) { case 'current': return ( - {costFormatter.format(row[col])} + {costFormatter(baseCurrency).format(row[col])} ); case 'change': @@ -99,6 +104,7 @@ export const ProductEntityTable = ({ options, }: ProductEntityTableProps) => { const classes = useStyles(); + const { baseCurrency } = useConfig(); const entities = entity.entities[entityLabel]; const data = Object.assign( @@ -116,7 +122,7 @@ export const ProductEntityTable = ({ { field: 'label', title: {entityLabel}, - render: createRenderer('label', classes), + render: createRenderer(baseCurrency, 'label', classes), customSort: createSorter('label'), width: '33.33%', }, @@ -126,7 +132,7 @@ export const ProductEntityTable = ({ {data.previousName} ), align: 'right', - render: createRenderer('previous', classes), + render: createRenderer(baseCurrency, 'previous', classes), customSort: createSorter('previous'), }, { @@ -135,14 +141,14 @@ export const ProductEntityTable = ({ {data.currentName} ), align: 'right', - render: createRenderer('current', classes), + render: createRenderer(baseCurrency, 'current', classes), customSort: createSorter('current'), }, { field: 'change', title: Change, align: 'right', - render: createRenderer('change', classes), + render: createRenderer(baseCurrency, 'change', classes), customSort: createSorter('change'), }, ]; diff --git a/plugins/cost-insights/src/components/ProductInsightsCard/ProductInsightsChart.tsx b/plugins/cost-insights/src/components/ProductInsightsCard/ProductInsightsChart.tsx index b77b415e1e..cc11eb40b5 100644 --- a/plugins/cost-insights/src/components/ProductInsightsCard/ProductInsightsChart.tsx +++ b/plugins/cost-insights/src/components/ProductInsightsCard/ProductInsightsChart.tsx @@ -50,7 +50,8 @@ import { } from '../../utils/styles'; import { Duration, Entity, Maybe } from '../../types'; import { choose } from '../../utils/change'; -import { TooltipRenderer } from '../../types/Tooltip'; +import { TooltipRenderer } from '../../types'; +import { useConfig } from '../../hooks'; export type ProductInsightsChartProps = { billingDate: string; @@ -65,6 +66,7 @@ export const ProductInsightsChart = ({ }: ProductInsightsChartProps) => { const classes = useStyles(); const layoutClasses = useLayoutStyles(); + const { baseCurrency } = useConfig(); // Only a single entities Record for the root product entity is supported const entities = useMemo(() => { @@ -131,7 +133,9 @@ export const ProductInsightsChart = ({ const id = label === '' ? null : label; const title = titleOf(label); - const items = payload.map(tooltipItemOf).filter(notEmpty); + const items = payload + .map(p => tooltipItemOf(baseCurrency, p)) + .filter(notEmpty); const activeEntity = findAlways(entities, e => e.id === id); const breakdowns = Object.keys(activeEntity.entities); diff --git a/plugins/cost-insights/src/components/UnlabeledDataflowAlertCard/UnlabeledDataflowAlertCard.test.tsx b/plugins/cost-insights/src/components/UnlabeledDataflowAlertCard/UnlabeledDataflowAlertCard.test.tsx index 06353535a5..3ef6e54a53 100644 --- a/plugins/cost-insights/src/components/UnlabeledDataflowAlertCard/UnlabeledDataflowAlertCard.test.tsx +++ b/plugins/cost-insights/src/components/UnlabeledDataflowAlertCard/UnlabeledDataflowAlertCard.test.tsx @@ -19,6 +19,7 @@ import { UnlabeledDataflowAlertCard } from './UnlabeledDataflowAlertCard'; import { createMockUnlabeledDataflowData, createMockUnlabeledDataflowAlertProject, + MockConfigProvider, } from '../../testUtils'; import { renderInTestApp } from '@backstage/test-utils'; @@ -61,9 +62,11 @@ describe('', () => { 'projects with unlabeled Dataflow jobs in the last 30 days.', ); const rendered = await renderInTestApp( - , + + + , ); expect(rendered.getByText(subheader)).toBeInTheDocument(); }); @@ -71,9 +74,11 @@ describe('', () => { it('renders the correct subheader for a single project', async () => { const subheader = new RegExp('1 project'); const rendered = await renderInTestApp( - , + + + , ); expect(rendered.getByText(subheader)).toBeInTheDocument(); }); diff --git a/plugins/cost-insights/src/hooks/useConfig.tsx b/plugins/cost-insights/src/hooks/useConfig.tsx index 322e1e35f1..ce2681844e 100644 --- a/plugins/cost-insights/src/hooks/useConfig.tsx +++ b/plugins/cost-insights/src/hooks/useConfig.tsx @@ -46,6 +46,7 @@ import { configApiRef, useApi } from '@backstage/core-plugin-api'; * default: true * metricB: * name: Metric B + * baseCurrency: 'EUR' * currencies: * currencyA: * label: Currency A @@ -60,6 +61,7 @@ import { configApiRef, useApi } from '@backstage/core-plugin-api'; /** @public */ export type ConfigContextProps = { + baseCurrency: string; metrics: Metric[]; products: Product[]; icons: Icon[]; @@ -72,6 +74,7 @@ export const ConfigContext = createContext( ); const defaultState: ConfigContextProps = { + baseCurrency: 'USD', metrics: [], products: [], icons: [], @@ -110,6 +113,15 @@ export const ConfigProvider = ({ children }: PropsWithChildren<{}>) => { return []; } + function getBaseCurrency(): string { + const baseCurrency = c.getOptionalString('costInsights.baseCurrency'); + if (baseCurrency) { + return baseCurrency; + } + + return defaultState.baseCurrency; + } + function getCurrencies(): Currency[] { const currencies = c.getOptionalConfig('costInsights.currencies'); if (currencies) { @@ -141,6 +153,7 @@ export const ConfigProvider = ({ children }: PropsWithChildren<{}>) => { } function getConfig() { + const baseCurrency = getBaseCurrency(); const products = getProducts(); const metrics = getMetrics(); const engineerCost = getEngineerCost(); @@ -152,6 +165,7 @@ export const ConfigProvider = ({ children }: PropsWithChildren<{}>) => { setConfig(prevState => ({ ...prevState, + baseCurrency, metrics, products, engineerCost, diff --git a/plugins/cost-insights/src/testUtils/providers.tsx b/plugins/cost-insights/src/testUtils/providers.tsx index 8088fca3c6..764e90d547 100644 --- a/plugins/cost-insights/src/testUtils/providers.tsx +++ b/plugins/cost-insights/src/testUtils/providers.tsx @@ -15,16 +15,13 @@ */ import React, { PropsWithChildren } from 'react'; -import { LoadingContext, LoadingContextProps } from '../hooks/useLoading'; -import { GroupsContext, GroupsContextProps } from '../hooks/useGroups'; -import { FilterContext, FilterContextProps } from '../hooks/useFilters'; -import { ConfigContext, ConfigContextProps } from '../hooks/useConfig'; -import { CurrencyContext, CurrencyContextProps } from '../hooks/useCurrency'; -import { - BillingDateContext, - BillingDateContextProps, -} from '../hooks/useLastCompleteBillingDate'; -import { ScrollContext, ScrollContextProps } from '../hooks/useScroll'; +import { LoadingContext, LoadingContextProps } from '../hooks'; +import { GroupsContext, GroupsContextProps } from '../hooks'; +import { FilterContext, FilterContextProps } from '../hooks'; +import { ConfigContext, ConfigContextProps } from '../hooks'; +import { CurrencyContext, CurrencyContextProps } from '../hooks'; +import { BillingDateContext, BillingDateContextProps } from '../hooks'; +import { ScrollContext, ScrollContextProps } from '../hooks'; import { Group, Duration } from '../types'; export const MockGroups: Group[] = [{ id: 'tech' }, { id: 'mock-group' }]; @@ -85,6 +82,7 @@ export const MockConfigProvider = (props: MockConfigProviderProps) => { const { children, ...context } = props; const defaultContext: ConfigContextProps = { + baseCurrency: 'USD', metrics: [], products: [], icons: [], diff --git a/plugins/cost-insights/src/utils/formatters.test.ts b/plugins/cost-insights/src/utils/formatters.test.ts index 8bf0a6a9d7..87a2b335d9 100644 --- a/plugins/cost-insights/src/utils/formatters.test.ts +++ b/plugins/cost-insights/src/utils/formatters.test.ts @@ -39,7 +39,7 @@ describe('date formatters', () => { 0.00000040925, 0.21, 0.0000004, 0.4139877878, 0.00000234566, ]; const formattedValues = values.map(val => - lengthyCurrencyFormatter.format(val), + lengthyCurrencyFormatter('USD').format(val), ); expect(formattedValues).toEqual([ '$0.00000041', diff --git a/plugins/cost-insights/src/utils/formatters.ts b/plugins/cost-insights/src/utils/formatters.ts index e9b19097a4..4258b1bfce 100644 --- a/plugins/cost-insights/src/utils/formatters.ts +++ b/plugins/cost-insights/src/utils/formatters.ts @@ -17,7 +17,7 @@ import { DateTime, Duration as LuxonDuration } from 'luxon'; import pluralize from 'pluralize'; import { ChangeStatistic, Duration } from '../types'; -import { inclusiveEndDateOf, inclusiveStartDateOf } from '../utils/duration'; +import { inclusiveEndDateOf, inclusiveStartDateOf } from './duration'; import { notEmpty } from './assert'; export type Period = { @@ -25,25 +25,28 @@ export type Period = { periodEnd: string; }; -export const costFormatter = new Intl.NumberFormat('en-US', { - style: 'currency', - currency: 'USD', -}); +export const costFormatter = (currency: string) => + new Intl.NumberFormat('en-US', { + style: 'currency', + currency, + }); -export const currencyFormatter = new Intl.NumberFormat('en-US', { - style: 'currency', - currency: 'USD', - minimumFractionDigits: 0, - maximumFractionDigits: 0, -}); +export const currencyFormatter = (currency: string) => + new Intl.NumberFormat('en-US', { + style: 'currency', + currency, + minimumFractionDigits: 0, + maximumFractionDigits: 0, + }); -export const lengthyCurrencyFormatter = new Intl.NumberFormat('en-US', { - style: 'currency', - currency: 'USD', - minimumFractionDigits: 0, - minimumSignificantDigits: 2, - maximumSignificantDigits: 2, -}); +export const lengthyCurrencyFormatter = (currency: string) => + new Intl.NumberFormat('en-US', { + style: 'currency', + currency, + minimumFractionDigits: 0, + minimumSignificantDigits: 2, + maximumSignificantDigits: 2, + }); export const numberFormatter = new Intl.NumberFormat('en-US', { minimumFractionDigits: 0, diff --git a/plugins/cost-insights/src/utils/graphs.ts b/plugins/cost-insights/src/utils/graphs.ts index 172f6cd7e3..2d63967c82 100644 --- a/plugins/cost-insights/src/utils/graphs.ts +++ b/plugins/cost-insights/src/utils/graphs.ts @@ -23,29 +23,30 @@ import { lengthyCurrencyFormatter, } from './formatters'; -export function formatGraphValue( - value: number, - _index: number, - format?: string, -) { - if (format === 'number') { - return value.toLocaleString(); - } +export const formatGraphValue = + (baseCurrency: string) => + (value: number, _index: number, format?: string) => { + if (format === 'number') { + return value.toLocaleString(); + } - if (value < 1) { - return lengthyCurrencyFormatter.format(value); - } + if (value < 1) { + return lengthyCurrencyFormatter(baseCurrency).format(value); + } - return currencyFormatter.format(value); -} + return currencyFormatter(baseCurrency).format(value); + }; export const overviewGraphTickFormatter = (millis: string | number) => typeof millis === 'number' ? dateFormatter.format(millis) : millis; -export const tooltipItemOf = (payload: Payload) => { +export const tooltipItemOf = ( + baseCurrency: string, + payload: Payload, +) => { const value = typeof payload.value === 'number' - ? currencyFormatter.format(payload.value) + ? currencyFormatter(baseCurrency).format(payload.value) : payload.value; const fill = payload.color as string; From f44b45db143010f411d99b313acdca53ceb37938 Mon Sep 17 00:00:00 2001 From: bogdannechyporenko Date: Tue, 15 Nov 2022 13:40:39 +0100 Subject: [PATCH 19/73] Generated Api Report Signed-off-by: bogdannechyporenko --- plugins/cost-insights/api-report.md | 1 + 1 file changed, 1 insertion(+) diff --git a/plugins/cost-insights/api-report.md b/plugins/cost-insights/api-report.md index dd4e404450..5906c952db 100644 --- a/plugins/cost-insights/api-report.md +++ b/plugins/cost-insights/api-report.md @@ -227,6 +227,7 @@ export type ChartData = { // @public (undocumented) export type ConfigContextProps = { + baseCurrency: string; metrics: Metric[]; products: Product[]; icons: Icon[]; From f9bbb3be375dbd55cbe807a64bc19dcc1e09496e Mon Sep 17 00:00:00 2001 From: bogdannechyporenko Date: Tue, 15 Nov 2022 13:48:14 +0100 Subject: [PATCH 20/73] Added a changeset Signed-off-by: bogdannechyporenko --- .changeset/four-adults-provide.md | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 .changeset/four-adults-provide.md diff --git a/.changeset/four-adults-provide.md b/.changeset/four-adults-provide.md new file mode 100644 index 0000000000..9b9b9e1bef --- /dev/null +++ b/.changeset/four-adults-provide.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-cost-insights': minor +--- + +Provide the abilility to change the base currency from USD to any other currency in cost insights plugin From 176cd00ea3a74c093faa9cda31b0a519f2282118 Mon Sep 17 00:00:00 2001 From: bogdannechyporenko Date: Tue, 15 Nov 2022 14:16:51 +0100 Subject: [PATCH 21/73] Added test cases Signed-off-by: bogdannechyporenko --- .../src/utils/formatters.test.ts | 16 ++++++++ .../cost-insights/src/utils/graphs.test.ts | 40 +++++++++++++++++++ plugins/cost-insights/src/utils/graphs.ts | 4 +- 3 files changed, 58 insertions(+), 2 deletions(-) create mode 100644 plugins/cost-insights/src/utils/graphs.test.ts diff --git a/plugins/cost-insights/src/utils/formatters.test.ts b/plugins/cost-insights/src/utils/formatters.test.ts index 87a2b335d9..0bc95c2efe 100644 --- a/plugins/cost-insights/src/utils/formatters.test.ts +++ b/plugins/cost-insights/src/utils/formatters.test.ts @@ -49,6 +49,22 @@ describe('date formatters', () => { '$0.0000023', ]); }); + + it('Correctly formats values in euros to two significant digits', () => { + const values = [ + 0.00000040925, 0.21, 0.0000004, 0.4139877878, 0.00000234566, + ]; + const formattedValues = values.map(val => + lengthyCurrencyFormatter('EUR').format(val), + ); + expect(formattedValues).toEqual([ + '€0.00000041', + '€0.21', + '€0.00000040', + '€0.41', + '€0.0000023', + ]); + }); }); describe.each` diff --git a/plugins/cost-insights/src/utils/graphs.test.ts b/plugins/cost-insights/src/utils/graphs.test.ts new file mode 100644 index 0000000000..47e7cae752 --- /dev/null +++ b/plugins/cost-insights/src/utils/graphs.test.ts @@ -0,0 +1,40 @@ +/* + * Copyright 2020 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { formatGraphValue, tooltipItemOf } from './graphs'; +import { DataKey } from '../types'; + +describe('graphs', () => { + it('formatGraphValue', () => { + expect(formatGraphValue('SEK')(1000, 0)).toEqual('SEK 1,000'); + expect(formatGraphValue('EUR')(1000, 0)).toEqual('€1,000'); + expect(formatGraphValue('USD')(1000, 0)).toEqual('$1,000'); + }); + it('tooltipItemOf', () => { + expect( + tooltipItemOf('EUR', { + value: '1000', + color: 'red', + dataKey: DataKey.Current, + name: 'Kubernetes', + }), + ).toEqual({ + fill: 'red', + label: 'Kubernetes', + value: '€1,000', + }); + }); +}); diff --git a/plugins/cost-insights/src/utils/graphs.ts b/plugins/cost-insights/src/utils/graphs.ts index 2d63967c82..8f82d41054 100644 --- a/plugins/cost-insights/src/utils/graphs.ts +++ b/plugins/cost-insights/src/utils/graphs.ts @@ -45,8 +45,8 @@ export const tooltipItemOf = ( payload: Payload, ) => { const value = - typeof payload.value === 'number' - ? currencyFormatter(baseCurrency).format(payload.value) + payload.value && !isNaN(Number(payload.value)) + ? currencyFormatter(baseCurrency).format(Number(payload.value)) : payload.value; const fill = payload.color as string; From f373c294e2a938c8eee92262687ddaba947d13bf Mon Sep 17 00:00:00 2001 From: bogdannechyporenko Date: Tue, 15 Nov 2022 14:21:05 +0100 Subject: [PATCH 22/73] Updated the documentation of cost insight plugin Signed-off-by: bogdannechyporenko --- plugins/cost-insights/README.md | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/plugins/cost-insights/README.md b/plugins/cost-insights/README.md index cc90b4d7a2..69910bdbe0 100644 --- a/plugins/cost-insights/README.md +++ b/plugins/cost-insights/README.md @@ -178,6 +178,17 @@ costInsights: name: Metric C ``` +### Base Currency (Optional) + +In the case you would like to show your baseline costs on the graph on other currency than US dollars. + +```yaml +## ./app-config.yaml +costInsights: + engineerCost: 200000 + baseCurrency: EUR +``` + ### Currencies (Optional) In the `Cost Overview` panel, users can choose from a dropdown of currencies to see costs in, such as Engineers or USD. Currencies must be defined as keys on the `currencies` field. A user-friendly label and unit are **required**. If not set, the `defaultCurrencies` in `currency.ts` will be used. From 21672221dab18caf7a29aa387b2f20f996d5d41f Mon Sep 17 00:00:00 2001 From: bogdannechyporenko Date: Tue, 15 Nov 2022 14:25:55 +0100 Subject: [PATCH 23/73] Fixed the typo Signed-off-by: bogdannechyporenko --- .changeset/four-adults-provide.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changeset/four-adults-provide.md b/.changeset/four-adults-provide.md index 9b9b9e1bef..f6f24bca75 100644 --- a/.changeset/four-adults-provide.md +++ b/.changeset/four-adults-provide.md @@ -2,4 +2,4 @@ '@backstage/plugin-cost-insights': minor --- -Provide the abilility to change the base currency from USD to any other currency in cost insights plugin +Provide the ability to change the base currency from USD to any other currency in cost insights plugin From e056128f8a57ece9b292f2f7216f6b080083e7f3 Mon Sep 17 00:00:00 2001 From: bogdannechyporenko Date: Tue, 15 Nov 2022 14:34:53 +0100 Subject: [PATCH 24/73] Prettified the code Signed-off-by: bogdannechyporenko --- plugins/cost-insights/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/cost-insights/README.md b/plugins/cost-insights/README.md index 69910bdbe0..eeafe9e029 100644 --- a/plugins/cost-insights/README.md +++ b/plugins/cost-insights/README.md @@ -180,7 +180,7 @@ costInsights: ### Base Currency (Optional) -In the case you would like to show your baseline costs on the graph on other currency than US dollars. +In the case you would like to show your baseline costs on the graph on other currency than US dollars. ```yaml ## ./app-config.yaml From c94d42b58b737dbcba19aaeb21940ba8ee6efe1f Mon Sep 17 00:00:00 2001 From: Johan Haals Date: Wed, 16 Nov 2022 09:09:12 +0100 Subject: [PATCH 25/73] document, add tests Signed-off-by: Johan Haals --- packages/backend-app-api/api-report.md | 2 +- .../implementations/lifecycleService.test.ts | 47 +++++++++++++++++++ .../implementations/lifecycleService.ts | 6 ++- 3 files changed, 52 insertions(+), 3 deletions(-) create mode 100644 packages/backend-app-api/src/services/implementations/lifecycleService.test.ts diff --git a/packages/backend-app-api/api-report.md b/packages/backend-app-api/api-report.md index 5d200be93c..5008b1efe1 100644 --- a/packages/backend-app-api/api-report.md +++ b/packages/backend-app-api/api-report.md @@ -67,7 +67,7 @@ export type HttpRouterFactoryOptions = { indexPlugin?: string; }; -// @public (undocumented) +// @public export const lifecycleFactory: ( options?: undefined, ) => ServiceFactory; diff --git a/packages/backend-app-api/src/services/implementations/lifecycleService.test.ts b/packages/backend-app-api/src/services/implementations/lifecycleService.test.ts new file mode 100644 index 0000000000..c0b69a3bef --- /dev/null +++ b/packages/backend-app-api/src/services/implementations/lifecycleService.test.ts @@ -0,0 +1,47 @@ +/* + * Copyright 2022 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +import { getVoidLogger } from '@backstage/backend-common'; +import { BackendLifecycleImpl } from './lifecycleService'; + +describe('lifecycleService', () => { + it('should execute registered shutdown hook', async () => { + const service = new BackendLifecycleImpl(getVoidLogger()); + const hook = jest.fn(); + service.addShutdownHook({ + pluginId: 'test', + fn: async () => { + hook(); + }, + }); + // should not execute the hook more than once. + await service.shutdown(); + await service.shutdown(); + await service.shutdown(); + expect(hook).toHaveBeenCalledTimes(1); + }); + + it('should not throw errors', async () => { + const service = new BackendLifecycleImpl(getVoidLogger()); + service.addShutdownHook({ + pluginId: 'test', + fn: async () => { + throw new Error('oh no'); + }, + }); + await expect(service.shutdown()).resolves.toBeUndefined(); + }); +}); diff --git a/packages/backend-app-api/src/services/implementations/lifecycleService.ts b/packages/backend-app-api/src/services/implementations/lifecycleService.ts index 0ee0946469..7d41a7a276 100644 --- a/packages/backend-app-api/src/services/implementations/lifecycleService.ts +++ b/packages/backend-app-api/src/services/implementations/lifecycleService.ts @@ -25,7 +25,7 @@ import { import { Logger } from 'winston'; const CALLBACKS = ['SIGTERM', 'SIGINT', 'beforeExit']; -class BackendLifecycleImpl { +export class BackendLifecycleImpl { constructor(private readonly logger: Logger) { CALLBACKS.map(signal => process.on(signal, () => this.shutdown())); } @@ -76,7 +76,9 @@ class PluginScopedLifecycleImpl implements BackendLifecycle { } } -/** @public */ +/** + * Allows plugins to register shutdown hooks that are run when the process is about to exit. + * @public */ export const lifecycleFactory = createServiceFactory({ service: lifecycleServiceRef, deps: { From 29648b9cddcf02c0e27c6206b438cc7cb4b6c884 Mon Sep 17 00:00:00 2001 From: bogdannechyporenko Date: Wed, 16 Nov 2022 21:03:47 +0100 Subject: [PATCH 26/73] Incorporated the feedback Signed-off-by: bogdannechyporenko --- app-config.yaml | 1 - 1 file changed, 1 deletion(-) diff --git a/app-config.yaml b/app-config.yaml index 7064d406f7..ef133491af 100644 --- a/app-config.yaml +++ b/app-config.yaml @@ -372,7 +372,6 @@ auth: myproxy: development: {} costInsights: - baseCurrency: 'EUR' engineerCost: 200000 products: computeEngine: From dec733b6a02f545a7cedd4bdde078a6e4b30052c Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Thu, 17 Nov 2022 11:26:05 +0000 Subject: [PATCH 27/73] Update dependency @azure/arm-appservice to v13.0.3 Signed-off-by: Renovate Bot --- yarn.lock | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/yarn.lock b/yarn.lock index b1531e5db9..1e8f50adc7 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1100,17 +1100,17 @@ __metadata: linkType: hard "@azure/arm-appservice@npm:^13.0.1": - version: 13.0.2 - resolution: "@azure/arm-appservice@npm:13.0.2" + version: 13.0.3 + resolution: "@azure/arm-appservice@npm:13.0.3" dependencies: "@azure/abort-controller": ^1.0.0 "@azure/core-auth": ^1.3.0 - "@azure/core-client": ^1.5.0 + "@azure/core-client": ^1.6.1 "@azure/core-lro": ^2.2.0 "@azure/core-paging": ^1.2.0 "@azure/core-rest-pipeline": ^1.8.0 tslib: ^2.2.0 - checksum: 6d604c492a70a6cdd4d3ad3f634a74228dc081ed4f49128873e76bfa5e65ec8cce18b7b19319fd2b1b4edbd390dbd66c9ac48646f0ed80cae09cd2f1d05fb279 + checksum: 9cd73985a31744fd7da56654c1de2d1396e93fa0cc3527b7c2843e56913e2b0abd81d996a319447f2f289421c45ede6a87f820ed0f4414e7cd2afeb383ee8a0a languageName: node linkType: hard @@ -1143,7 +1143,7 @@ __metadata: languageName: node linkType: hard -"@azure/core-client@npm:^1.4.0, @azure/core-client@npm:^1.5.0": +"@azure/core-client@npm:^1.4.0, @azure/core-client@npm:^1.6.1": version: 1.6.1 resolution: "@azure/core-client@npm:1.6.1" dependencies: From 5c1bfac3453c38ff0f47ae98fe7cfe94d77ad232 Mon Sep 17 00:00:00 2001 From: bnechyporenko Date: Thu, 17 Nov 2022 15:12:26 +0100 Subject: [PATCH 28/73] Incorporated the feedback Signed-off-by: bnechyporenko --- .changeset/four-adults-provide.md | 2 +- plugins/cost-insights/api-report.md | 2 +- plugins/cost-insights/config.d.ts | 2 +- .../src/components/BarChart/BarChart.tsx | 6 +- .../ProductEntityTable.tsx | 72 +++++++++---------- .../ProductInsightsChart.tsx | 4 +- plugins/cost-insights/src/hooks/useConfig.tsx | 47 ++++++++++-- .../cost-insights/src/testUtils/providers.tsx | 7 +- plugins/cost-insights/src/utils/currency.ts | 9 +++ .../src/utils/formatters.test.ts | 5 +- plugins/cost-insights/src/utils/formatters.ts | 22 +++--- .../cost-insights/src/utils/graphs.test.ts | 11 +-- plugins/cost-insights/src/utils/graphs.ts | 42 ++++++----- 13 files changed, 134 insertions(+), 97 deletions(-) diff --git a/.changeset/four-adults-provide.md b/.changeset/four-adults-provide.md index f6f24bca75..0edb4807d9 100644 --- a/.changeset/four-adults-provide.md +++ b/.changeset/four-adults-provide.md @@ -1,5 +1,5 @@ --- -'@backstage/plugin-cost-insights': minor +'@backstage/plugin-cost-insights': patch --- Provide the ability to change the base currency from USD to any other currency in cost insights plugin diff --git a/plugins/cost-insights/api-report.md b/plugins/cost-insights/api-report.md index 5906c952db..b4c818f1e4 100644 --- a/plugins/cost-insights/api-report.md +++ b/plugins/cost-insights/api-report.md @@ -227,7 +227,7 @@ export type ChartData = { // @public (undocumented) export type ConfigContextProps = { - baseCurrency: string; + baseCurrency: Intl.NumberFormat; metrics: Metric[]; products: Product[]; icons: Icon[]; diff --git a/plugins/cost-insights/config.d.ts b/plugins/cost-insights/config.d.ts index 7c725eef8c..7c8b9d265d 100644 --- a/plugins/cost-insights/config.d.ts +++ b/plugins/cost-insights/config.d.ts @@ -24,7 +24,7 @@ export interface Config { /** * @visibility frontend */ - baseCurrency?: string; + baseCurrency?: Intl.NumberFormat; products?: { [kind: string]: { diff --git a/plugins/cost-insights/src/components/BarChart/BarChart.tsx b/plugins/cost-insights/src/components/BarChart/BarChart.tsx index fa97e640bd..fa4ae18e24 100644 --- a/plugins/cost-insights/src/components/BarChart/BarChart.tsx +++ b/plugins/cost-insights/src/components/BarChart/BarChart.tsx @@ -43,14 +43,12 @@ import { isInvalid, titleOf, tooltipItemOf } from '../../utils/graphs'; import { TooltipRenderer } from '../../types'; import { useConfig } from '../../hooks'; -const defaultTooltip = (baseCurrency: string) => { +const defaultTooltip = (baseCurrency: Intl.NumberFormat) => { const tooltip: TooltipRenderer = ({ label, payload = [] }) => { if (isInvalid({ label, payload })) return null; const title = titleOf(label); - const items = payload - .map(p => tooltipItemOf(baseCurrency, p)) - .filter(notEmpty); + const items = payload.map(tooltipItemOf(baseCurrency)).filter(notEmpty); return ( {items.map((item, index) => ( diff --git a/plugins/cost-insights/src/components/ProductInsightsCard/ProductEntityTable.tsx b/plugins/cost-insights/src/components/ProductInsightsCard/ProductEntityTable.tsx index 0d943d66a5..c20c7d4a1f 100644 --- a/plugins/cost-insights/src/components/ProductInsightsCard/ProductEntityTable.tsx +++ b/plugins/cost-insights/src/components/ProductInsightsCard/ProductEntityTable.tsx @@ -17,7 +17,7 @@ import React from 'react'; import classnames from 'classnames'; import { Typography } from '@material-ui/core'; -import { costFormatter, formatChange } from '../../utils/formatters'; +import { formatChange } from '../../utils/formatters'; import { useEntityDialogStyles as useStyles } from '../../utils/styles'; import { CostGrowthIndicator } from '../CostGrowth'; import { BarChartOptions, ChangeStatistic, Entity } from '../../types'; @@ -36,40 +36,38 @@ type RowData = { change: ChangeStatistic; }; -function createRenderer( - baseCurrency: string, - col: keyof RowData, - classes: Record, -) { - return function render(rowData: {}): JSX.Element { - const row = rowData as RowData; - const rowStyles = classnames(classes.row, { - [classes.rowTotal]: row.id === 'total', - [classes.colFirst]: col === 'label', - [classes.colLast]: col === 'change', - }); +const createRenderer = + (baseCurrency: Intl.NumberFormat) => + (col: keyof RowData, classes: Record) => { + return function render(rowData: {}): JSX.Element { + const row = rowData as RowData; + const rowStyles = classnames(classes.row, { + [classes.rowTotal]: row.id === 'total', + [classes.colFirst]: col === 'label', + [classes.colLast]: col === 'change', + }); - switch (col) { - case 'previous': - case 'current': - return ( - - {costFormatter(baseCurrency).format(row[col])} - - ); - case 'change': - return ( - - ); - default: - return {row.label}; - } + switch (col) { + case 'previous': + case 'current': + return ( + + {baseCurrency.format(row[col])} + + ); + case 'change': + return ( + + ); + default: + return {row.label}; + } + }; }; -} // material-table does not support fixed rows. Override the sorting algorithm // to force Total row to bottom by default or when a user sort toggles a column. @@ -122,7 +120,7 @@ export const ProductEntityTable = ({ { field: 'label', title: {entityLabel}, - render: createRenderer(baseCurrency, 'label', classes), + render: createRenderer(baseCurrency)('label', classes), customSort: createSorter('label'), width: '33.33%', }, @@ -132,7 +130,7 @@ export const ProductEntityTable = ({ {data.previousName} ), align: 'right', - render: createRenderer(baseCurrency, 'previous', classes), + render: createRenderer(baseCurrency)('previous', classes), customSort: createSorter('previous'), }, { @@ -141,14 +139,14 @@ export const ProductEntityTable = ({ {data.currentName} ), align: 'right', - render: createRenderer(baseCurrency, 'current', classes), + render: createRenderer(baseCurrency)('current', classes), customSort: createSorter('current'), }, { field: 'change', title: Change, align: 'right', - render: createRenderer(baseCurrency, 'change', classes), + render: createRenderer(baseCurrency)('change', classes), customSort: createSorter('change'), }, ]; diff --git a/plugins/cost-insights/src/components/ProductInsightsCard/ProductInsightsChart.tsx b/plugins/cost-insights/src/components/ProductInsightsCard/ProductInsightsChart.tsx index cc11eb40b5..f44e24f443 100644 --- a/plugins/cost-insights/src/components/ProductInsightsCard/ProductInsightsChart.tsx +++ b/plugins/cost-insights/src/components/ProductInsightsCard/ProductInsightsChart.tsx @@ -133,9 +133,7 @@ export const ProductInsightsChart = ({ const id = label === '' ? null : label; const title = titleOf(label); - const items = payload - .map(p => tooltipItemOf(baseCurrency, p)) - .filter(notEmpty); + const items = payload.map(tooltipItemOf(baseCurrency)).filter(notEmpty); const activeEntity = findAlways(entities, e => e.id === id); const breakdowns = Object.keys(activeEntity.entities); diff --git a/plugins/cost-insights/src/hooks/useConfig.tsx b/plugins/cost-insights/src/hooks/useConfig.tsx index ce2681844e..34ecfd463d 100644 --- a/plugins/cost-insights/src/hooks/useConfig.tsx +++ b/plugins/cost-insights/src/hooks/useConfig.tsx @@ -25,7 +25,7 @@ import { Config as BackstageConfig } from '@backstage/config'; import { Currency, Icon, Metric, Product } from '../types'; import { getIcon } from '../utils/navigation'; import { validateCurrencies, validateMetrics } from '../utils/config'; -import { defaultCurrencies } from '../utils/currency'; +import { createCurrency, defaultCurrencies } from '../utils/currency'; import { configApiRef, useApi } from '@backstage/core-plugin-api'; /* @@ -46,7 +46,13 @@ import { configApiRef, useApi } from '@backstage/core-plugin-api'; * default: true * metricB: * name: Metric B - * baseCurrency: 'EUR' + * baseCurrency: + * locales: + * - en-US + * options: + * style: currency + * currency: EUR + * minimumFractionDigits: 3 * currencies: * currencyA: * label: Currency A @@ -61,7 +67,7 @@ import { configApiRef, useApi } from '@backstage/core-plugin-api'; /** @public */ export type ConfigContextProps = { - baseCurrency: string; + baseCurrency: Intl.NumberFormat; metrics: Metric[]; products: Product[]; icons: Icon[]; @@ -74,7 +80,7 @@ export const ConfigContext = createContext( ); const defaultState: ConfigContextProps = { - baseCurrency: 'USD', + baseCurrency: createCurrency(), metrics: [], products: [], icons: [], @@ -113,10 +119,37 @@ export const ConfigProvider = ({ children }: PropsWithChildren<{}>) => { return []; } - function getBaseCurrency(): string { - const baseCurrency = c.getOptionalString('costInsights.baseCurrency'); + function getBaseCurrency(): Intl.NumberFormat { + const baseCurrency = c.getOptionalConfig('costInsights.baseCurrency'); if (baseCurrency) { - return baseCurrency; + const options = baseCurrency.getOptionalConfig('options'); + return new Intl.NumberFormat( + baseCurrency.getOptionalString('locales'), + options + ? { + localeMatcher: options.getOptionalString('localeMatcher'), + style: options.getOptionalString('style'), + currency: options.getOptionalString('currency'), + currencySign: options.getOptionalString('currencySign'), + useGrouping: options.getOptionalBoolean('useGrouping'), + minimumIntegerDigits: options.getOptionalNumber( + 'minimumIntegerDigits', + ), + minimumFractionDigits: options.getOptionalNumber( + 'minimumFractionDigits', + ), + maximumFractionDigits: options.getOptionalNumber( + 'maximumFractionDigits', + ), + minimumSignificantDigits: options.getOptionalNumber( + 'minimumSignificantDigits', + ), + maximumSignificantDigits: options.getOptionalNumber( + 'maximumSignificantDigits', + ), + } + : undefined, + ); } return defaultState.baseCurrency; diff --git a/plugins/cost-insights/src/testUtils/providers.tsx b/plugins/cost-insights/src/testUtils/providers.tsx index 764e90d547..761a908ca4 100644 --- a/plugins/cost-insights/src/testUtils/providers.tsx +++ b/plugins/cost-insights/src/testUtils/providers.tsx @@ -22,9 +22,8 @@ import { ConfigContext, ConfigContextProps } from '../hooks'; import { CurrencyContext, CurrencyContextProps } from '../hooks'; import { BillingDateContext, BillingDateContextProps } from '../hooks'; import { ScrollContext, ScrollContextProps } from '../hooks'; -import { Group, Duration } from '../types'; - -export const MockGroups: Group[] = [{ id: 'tech' }, { id: 'mock-group' }]; +import { Duration } from '../types'; +import { createCurrency } from '../utils/currency'; export type MockFilterProviderProps = PropsWithChildren< Partial @@ -82,7 +81,7 @@ export const MockConfigProvider = (props: MockConfigProviderProps) => { const { children, ...context } = props; const defaultContext: ConfigContextProps = { - baseCurrency: 'USD', + baseCurrency: createCurrency(), metrics: [], products: [], icons: [], diff --git a/plugins/cost-insights/src/utils/currency.ts b/plugins/cost-insights/src/utils/currency.ts index 60115aad3a..400d3bcb72 100644 --- a/plugins/cost-insights/src/utils/currency.ts +++ b/plugins/cost-insights/src/utils/currency.ts @@ -61,3 +61,12 @@ export const defaultCurrencies: Currency[] = [ rate: 5.5, }, ]; + +export const createCurrency = ( + currency: string = 'USD', + locale: string = 'en-US', +) => + new Intl.NumberFormat(locale, { + currency, + style: 'currency', + }); diff --git a/plugins/cost-insights/src/utils/formatters.test.ts b/plugins/cost-insights/src/utils/formatters.test.ts index 0bc95c2efe..f1cf778b6c 100644 --- a/plugins/cost-insights/src/utils/formatters.test.ts +++ b/plugins/cost-insights/src/utils/formatters.test.ts @@ -21,6 +21,7 @@ import { quarterOf, } from './formatters'; import { Duration } from '../types'; +import { createCurrency } from './currency'; Date.now = jest.fn(() => new Date(Date.parse('2019-12-07')).valueOf()); @@ -39,7 +40,7 @@ describe('date formatters', () => { 0.00000040925, 0.21, 0.0000004, 0.4139877878, 0.00000234566, ]; const formattedValues = values.map(val => - lengthyCurrencyFormatter('USD').format(val), + lengthyCurrencyFormatter(createCurrency()).format(val), ); expect(formattedValues).toEqual([ '$0.00000041', @@ -55,7 +56,7 @@ describe('date formatters', () => { 0.00000040925, 0.21, 0.0000004, 0.4139877878, 0.00000234566, ]; const formattedValues = values.map(val => - lengthyCurrencyFormatter('EUR').format(val), + lengthyCurrencyFormatter(createCurrency('EUR')).format(val), ); expect(formattedValues).toEqual([ '€0.00000041', diff --git a/plugins/cost-insights/src/utils/formatters.ts b/plugins/cost-insights/src/utils/formatters.ts index 4258b1bfce..fd3fb4c0ef 100644 --- a/plugins/cost-insights/src/utils/formatters.ts +++ b/plugins/cost-insights/src/utils/formatters.ts @@ -25,28 +25,28 @@ export type Period = { periodEnd: string; }; -export const costFormatter = (currency: string) => - new Intl.NumberFormat('en-US', { - style: 'currency', - currency, - }); +export const currencyFormatter = (currency: Intl.NumberFormat) => { + const options = currency.resolvedOptions(); -export const currencyFormatter = (currency: string) => - new Intl.NumberFormat('en-US', { + return new Intl.NumberFormat(options.locale, { style: 'currency', - currency, + currency: options.currency, minimumFractionDigits: 0, maximumFractionDigits: 0, }); +}; -export const lengthyCurrencyFormatter = (currency: string) => - new Intl.NumberFormat('en-US', { +export const lengthyCurrencyFormatter = (currency: Intl.NumberFormat) => { + const options = currency.resolvedOptions(); + + return new Intl.NumberFormat(options.locale, { style: 'currency', - currency, + currency: options.currency, minimumFractionDigits: 0, minimumSignificantDigits: 2, maximumSignificantDigits: 2, }); +}; export const numberFormatter = new Intl.NumberFormat('en-US', { minimumFractionDigits: 0, diff --git a/plugins/cost-insights/src/utils/graphs.test.ts b/plugins/cost-insights/src/utils/graphs.test.ts index 47e7cae752..5b425edb44 100644 --- a/plugins/cost-insights/src/utils/graphs.test.ts +++ b/plugins/cost-insights/src/utils/graphs.test.ts @@ -16,16 +16,19 @@ import { formatGraphValue, tooltipItemOf } from './graphs'; import { DataKey } from '../types'; +import { createCurrency } from './currency'; describe('graphs', () => { it('formatGraphValue', () => { - expect(formatGraphValue('SEK')(1000, 0)).toEqual('SEK 1,000'); - expect(formatGraphValue('EUR')(1000, 0)).toEqual('€1,000'); - expect(formatGraphValue('USD')(1000, 0)).toEqual('$1,000'); + expect(formatGraphValue(createCurrency('SEK'))(1000, 0)).toEqual( + 'SEK 1,000', + ); + expect(formatGraphValue(createCurrency('EUR'))(1000, 0)).toEqual('€1,000'); + expect(formatGraphValue(createCurrency('USD'))(1000, 0)).toEqual('$1,000'); }); it('tooltipItemOf', () => { expect( - tooltipItemOf('EUR', { + tooltipItemOf(createCurrency('EUR'))({ value: '1000', color: 'red', dataKey: DataKey.Current, diff --git a/plugins/cost-insights/src/utils/graphs.ts b/plugins/cost-insights/src/utils/graphs.ts index 8f82d41054..896d09f865 100644 --- a/plugins/cost-insights/src/utils/graphs.ts +++ b/plugins/cost-insights/src/utils/graphs.ts @@ -24,7 +24,7 @@ import { } from './formatters'; export const formatGraphValue = - (baseCurrency: string) => + (baseCurrency: Intl.NumberFormat) => (value: number, _index: number, format?: string) => { if (format === 'number') { return value.toLocaleString(); @@ -40,28 +40,26 @@ export const formatGraphValue = export const overviewGraphTickFormatter = (millis: string | number) => typeof millis === 'number' ? dateFormatter.format(millis) : millis; -export const tooltipItemOf = ( - baseCurrency: string, - payload: Payload, -) => { - const value = - payload.value && !isNaN(Number(payload.value)) - ? currencyFormatter(baseCurrency).format(Number(payload.value)) - : payload.value; - const fill = payload.color as string; +export const tooltipItemOf = + (baseCurrency: Intl.NumberFormat) => (payload: Payload) => { + const value = + payload.value && !isNaN(Number(payload.value)) + ? baseCurrency.format(Number(payload.value)) + : payload.value; + const fill = payload.color as string; - switch (payload.dataKey) { - case DataKey.Current: - case DataKey.Previous: - return { - label: payload.name, - value: value, - fill: fill, - }; - default: - return null; - } -}; + switch (payload.dataKey) { + case DataKey.Current: + case DataKey.Previous: + return { + label: payload.name, + value: value, + fill: fill, + }; + default: + return null; + } + }; export const resourceOf = (entity: Entity | AlertCost): ResourceData => ({ name: entity.id, From ec3c41df0582709dab331d9beecfe8a004463dff Mon Sep 17 00:00:00 2001 From: bogdannechyporenko Date: Thu, 17 Nov 2022 16:23:24 +0100 Subject: [PATCH 29/73] Incorporated the feedback Signed-off-by: bogdannechyporenko --- app-config.yaml | 5 ++ plugins/cost-insights/README.md | 6 ++- plugins/cost-insights/config.d.ts | 49 ++++++++++++++++++- .../CostOverviewBreakdownChart.tsx | 3 +- .../CostOverviewCard/CostOverviewChart.tsx | 13 ++--- plugins/cost-insights/src/hooks/useConfig.tsx | 8 +-- .../cost-insights/src/testUtils/providers.tsx | 4 +- plugins/cost-insights/src/utils/currency.ts | 4 +- .../src/utils/formatters.test.ts | 6 +-- .../cost-insights/src/utils/graphs.test.ts | 16 +++--- 10 files changed, 84 insertions(+), 30 deletions(-) diff --git a/app-config.yaml b/app-config.yaml index ef133491af..f890b4228a 100644 --- a/app-config.yaml +++ b/app-config.yaml @@ -373,6 +373,11 @@ auth: development: {} costInsights: engineerCost: 200000 + baseCurrency: + locale: en-US + options: + currency: EUR + minimumFractionDigits: 3 products: computeEngine: name: Compute Engine diff --git a/plugins/cost-insights/README.md b/plugins/cost-insights/README.md index eeafe9e029..945274202a 100644 --- a/plugins/cost-insights/README.md +++ b/plugins/cost-insights/README.md @@ -186,7 +186,11 @@ In the case you would like to show your baseline costs on the graph on other cur ## ./app-config.yaml costInsights: engineerCost: 200000 - baseCurrency: EUR + baseCurrency: + locale: en-US + options: + currency: EUR + minimumFractionDigits: 3 ``` ### Currencies (Optional) diff --git a/plugins/cost-insights/config.d.ts b/plugins/cost-insights/config.d.ts index 7c8b9d265d..5317485555 100644 --- a/plugins/cost-insights/config.d.ts +++ b/plugins/cost-insights/config.d.ts @@ -24,7 +24,54 @@ export interface Config { /** * @visibility frontend */ - baseCurrency?: Intl.NumberFormat; + baseCurrency?: { + /** + * @visibility frontend + */ + locale?: string; + options?: { + /** + * @visibility frontend + */ + localeMatcher?: string | undefined; + /** + * @visibility frontend + */ + style?: string | undefined; + /** + * @visibility frontend + */ + currency?: string | undefined; + /** + * @visibility frontend + */ + currencySign?: string | undefined; + /** + * @visibility frontend + */ + useGrouping?: boolean | undefined; + /** + * @visibility frontend + */ + minimumIntegerDigits?: number | undefined; + /** + * @visibility frontend + */ + minimumFractionDigits?: number | undefined; + /** + * @visibility frontend + */ + maximumFractionDigits?: number | undefined; + /** + * @visibility frontend + */ + minimumSignificantDigits?: number | undefined; + /** + * @visibility frontend + */ + maximumSignificantDigits?: number | undefined; + }; + }; products?: { [kind: string]: { diff --git a/plugins/cost-insights/src/components/CostOverviewCard/CostOverviewBreakdownChart.tsx b/plugins/cost-insights/src/components/CostOverviewCard/CostOverviewBreakdownChart.tsx index 838da0d1f4..80a8d5f9ac 100644 --- a/plugins/cost-insights/src/components/CostOverviewCard/CostOverviewBreakdownChart.tsx +++ b/plugins/cost-insights/src/components/CostOverviewCard/CostOverviewBreakdownChart.tsx @@ -186,9 +186,10 @@ export const CostOverviewBreakdownChart = ({ ? DateTime.fromMillis(label) : DateTime.fromISO(label!); const dateTitle = date.toUTC().toFormat(DEFAULT_DATE_FORMAT); + const formatGraphValueWith = formatGraphValue(baseCurrency); const items = payload.map((p, i) => ({ label: p.dataKey as string, - value: formatGraphValue(baseCurrency)(Number(p.value), i), + value: formatGraphValueWith(Number(p.value), i), fill: p.color!, })); const expandText = ( diff --git a/plugins/cost-insights/src/components/CostOverviewCard/CostOverviewChart.tsx b/plugins/cost-insights/src/components/CostOverviewCard/CostOverviewChart.tsx index 4232c56ffc..0a87474476 100644 --- a/plugins/cost-insights/src/components/CostOverviewCard/CostOverviewChart.tsx +++ b/plugins/cost-insights/src/components/CostOverviewCard/CostOverviewChart.tsx @@ -108,6 +108,7 @@ export const CostOverviewChart = ({ ? DateTime.fromMillis(label) : DateTime.fromISO(label!); const title = date.toUTC().toFormat(DEFAULT_DATE_FORMAT); + const formatGraphValueWith = formatGraphValue(baseCurrency); const items = payload .filter(p => dataKeys.includes(p.dataKey as string)) .map((p, i) => ({ @@ -117,16 +118,8 @@ export const CostOverviewChart = ({ : data.metric.name, value: p.dataKey === data.dailyCost.dataKey - ? formatGraphValue(baseCurrency)( - Number(p.value), - i, - data.dailyCost.format, - ) - : formatGraphValue(baseCurrency)( - Number(p.value), - i, - data.metric.format, - ), + ? formatGraphValueWith(Number(p.value), i, data.dailyCost.format) + : formatGraphValueWith(Number(p.value), i, data.metric.format), fill: p.dataKey === data.dailyCost.dataKey ? theme.palette.blue diff --git a/plugins/cost-insights/src/hooks/useConfig.tsx b/plugins/cost-insights/src/hooks/useConfig.tsx index 34ecfd463d..679031b131 100644 --- a/plugins/cost-insights/src/hooks/useConfig.tsx +++ b/plugins/cost-insights/src/hooks/useConfig.tsx @@ -25,7 +25,7 @@ import { Config as BackstageConfig } from '@backstage/config'; import { Currency, Icon, Metric, Product } from '../types'; import { getIcon } from '../utils/navigation'; import { validateCurrencies, validateMetrics } from '../utils/config'; -import { createCurrency, defaultCurrencies } from '../utils/currency'; +import { createCurrencyFormat, defaultCurrencies } from '../utils/currency'; import { configApiRef, useApi } from '@backstage/core-plugin-api'; /* @@ -80,7 +80,7 @@ export const ConfigContext = createContext( ); const defaultState: ConfigContextProps = { - baseCurrency: createCurrency(), + baseCurrency: createCurrencyFormat(), metrics: [], products: [], icons: [], @@ -124,11 +124,11 @@ export const ConfigProvider = ({ children }: PropsWithChildren<{}>) => { if (baseCurrency) { const options = baseCurrency.getOptionalConfig('options'); return new Intl.NumberFormat( - baseCurrency.getOptionalString('locales'), + baseCurrency.getOptionalString('locale'), options ? { localeMatcher: options.getOptionalString('localeMatcher'), - style: options.getOptionalString('style'), + style: 'currency', currency: options.getOptionalString('currency'), currencySign: options.getOptionalString('currencySign'), useGrouping: options.getOptionalBoolean('useGrouping'), diff --git a/plugins/cost-insights/src/testUtils/providers.tsx b/plugins/cost-insights/src/testUtils/providers.tsx index 761a908ca4..bdba7c26fb 100644 --- a/plugins/cost-insights/src/testUtils/providers.tsx +++ b/plugins/cost-insights/src/testUtils/providers.tsx @@ -23,7 +23,7 @@ import { CurrencyContext, CurrencyContextProps } from '../hooks'; import { BillingDateContext, BillingDateContextProps } from '../hooks'; import { ScrollContext, ScrollContextProps } from '../hooks'; import { Duration } from '../types'; -import { createCurrency } from '../utils/currency'; +import { createCurrencyFormat } from '../utils/currency'; export type MockFilterProviderProps = PropsWithChildren< Partial @@ -81,7 +81,7 @@ export const MockConfigProvider = (props: MockConfigProviderProps) => { const { children, ...context } = props; const defaultContext: ConfigContextProps = { - baseCurrency: createCurrency(), + baseCurrency: createCurrencyFormat(), metrics: [], products: [], icons: [], diff --git a/plugins/cost-insights/src/utils/currency.ts b/plugins/cost-insights/src/utils/currency.ts index 400d3bcb72..98c968fc53 100644 --- a/plugins/cost-insights/src/utils/currency.ts +++ b/plugins/cost-insights/src/utils/currency.ts @@ -14,7 +14,7 @@ * limitations under the License. */ import { Currency, CurrencyType, Duration } from '../types'; -import { assertNever } from '../utils/assert'; +import { assertNever } from './assert'; export const rateOf = (cost: number, duration: Duration) => { switch (duration) { @@ -62,7 +62,7 @@ export const defaultCurrencies: Currency[] = [ }, ]; -export const createCurrency = ( +export const createCurrencyFormat = ( currency: string = 'USD', locale: string = 'en-US', ) => diff --git a/plugins/cost-insights/src/utils/formatters.test.ts b/plugins/cost-insights/src/utils/formatters.test.ts index f1cf778b6c..1190ac17ae 100644 --- a/plugins/cost-insights/src/utils/formatters.test.ts +++ b/plugins/cost-insights/src/utils/formatters.test.ts @@ -21,7 +21,7 @@ import { quarterOf, } from './formatters'; import { Duration } from '../types'; -import { createCurrency } from './currency'; +import { createCurrencyFormat } from './currency'; Date.now = jest.fn(() => new Date(Date.parse('2019-12-07')).valueOf()); @@ -40,7 +40,7 @@ describe('date formatters', () => { 0.00000040925, 0.21, 0.0000004, 0.4139877878, 0.00000234566, ]; const formattedValues = values.map(val => - lengthyCurrencyFormatter(createCurrency()).format(val), + lengthyCurrencyFormatter(createCurrencyFormat()).format(val), ); expect(formattedValues).toEqual([ '$0.00000041', @@ -56,7 +56,7 @@ describe('date formatters', () => { 0.00000040925, 0.21, 0.0000004, 0.4139877878, 0.00000234566, ]; const formattedValues = values.map(val => - lengthyCurrencyFormatter(createCurrency('EUR')).format(val), + lengthyCurrencyFormatter(createCurrencyFormat('EUR')).format(val), ); expect(formattedValues).toEqual([ '€0.00000041', diff --git a/plugins/cost-insights/src/utils/graphs.test.ts b/plugins/cost-insights/src/utils/graphs.test.ts index 5b425edb44..72749d7682 100644 --- a/plugins/cost-insights/src/utils/graphs.test.ts +++ b/plugins/cost-insights/src/utils/graphs.test.ts @@ -16,19 +16,23 @@ import { formatGraphValue, tooltipItemOf } from './graphs'; import { DataKey } from '../types'; -import { createCurrency } from './currency'; +import { createCurrencyFormat } from './currency'; describe('graphs', () => { it('formatGraphValue', () => { - expect(formatGraphValue(createCurrency('SEK'))(1000, 0)).toEqual( + expect(formatGraphValue(createCurrencyFormat('SEK'))(1000, 0)).toEqual( 'SEK 1,000', ); - expect(formatGraphValue(createCurrency('EUR'))(1000, 0)).toEqual('€1,000'); - expect(formatGraphValue(createCurrency('USD'))(1000, 0)).toEqual('$1,000'); + expect(formatGraphValue(createCurrencyFormat('EUR'))(1000, 0)).toEqual( + '€1,000', + ); + expect(formatGraphValue(createCurrencyFormat('USD'))(1000, 0)).toEqual( + '$1,000', + ); }); it('tooltipItemOf', () => { expect( - tooltipItemOf(createCurrency('EUR'))({ + tooltipItemOf(createCurrencyFormat('EUR'))({ value: '1000', color: 'red', dataKey: DataKey.Current, @@ -37,7 +41,7 @@ describe('graphs', () => { ).toEqual({ fill: 'red', label: 'Kubernetes', - value: '€1,000', + value: '€1,000.00', }); }); }); From 8bc81264b90d3521583cda421bbb97d362586077 Mon Sep 17 00:00:00 2001 From: Maximilian Vorbrodt Date: Thu, 17 Nov 2022 19:06:42 +0100 Subject: [PATCH 30/73] remove paper component Signed-off-by: Maximilian Vorbrodt --- .../GroupsExplorerContent/GroupsDiagram.tsx | 48 ++++++++----------- 1 file changed, 21 insertions(+), 27 deletions(-) diff --git a/plugins/explore/src/components/GroupsExplorerContent/GroupsDiagram.tsx b/plugins/explore/src/components/GroupsExplorerContent/GroupsDiagram.tsx index 95c6d86d27..d00eddb35e 100644 --- a/plugins/explore/src/components/GroupsExplorerContent/GroupsDiagram.tsx +++ b/plugins/explore/src/components/GroupsExplorerContent/GroupsDiagram.tsx @@ -35,7 +35,7 @@ import { getEntityRelations, } from '@backstage/plugin-catalog-react'; import { BackstageTheme } from '@backstage/theme'; -import { makeStyles, Typography, Paper, useTheme } from '@material-ui/core'; +import { makeStyles, Typography, useTheme } from '@material-ui/core'; import ZoomOutMap from '@material-ui/icons/ZoomOutMap'; import classNames from 'classnames'; import React from 'react'; @@ -43,14 +43,10 @@ import useAsync from 'react-use/lib/useAsync'; const useStyles = makeStyles((theme: BackstageTheme) => ({ graph: { - flex: 1, minHeight: '100%', }, graphWrapper: { - position: 'relative', - flex: 1, - minHeight: 0, - display: 'flex', + height: '100%', }, organizationNode: { fill: theme.palette.secondary.light, @@ -236,27 +232,25 @@ export function GroupsDiagram() { } return ( - <> - - +
+ - - Use pinch & zoom to move around - the diagram. - - - + + Use pinch & zoom to move around the + diagram. + +
); } From 42469cf14ecddafb27a5453ea1a54b3a98a7c0cf Mon Sep 17 00:00:00 2001 From: Mathias Bronner Date: Thu, 17 Nov 2022 11:57:38 +0100 Subject: [PATCH 31/73] chore: Bug fixes and adding the possibility to add a default value Signed-off-by: Mathias Bronner Signed-off-by: Mathias Bronner --- .changeset/nasty-pens-march.md | 5 +++++ plugins/org-react/README.md | 5 +++-- .../src/components/GroupListPicker/GroupListPicker.tsx | 8 ++++++-- .../components/GroupListPicker/GroupListPickerButton.tsx | 7 ++++++- 4 files changed, 20 insertions(+), 5 deletions(-) create mode 100644 .changeset/nasty-pens-march.md diff --git a/.changeset/nasty-pens-march.md b/.changeset/nasty-pens-march.md new file mode 100644 index 0000000000..feee28fad4 --- /dev/null +++ b/.changeset/nasty-pens-march.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-org-react': patch +--- + +Bug fixes and adding the possibility to add a default value. Fixes: Vertical size jump on text entry, left align for text, selecting a value closes the popup, autofocus on the popup when opening diff --git a/plugins/org-react/README.md b/plugins/org-react/README.md index 91c7ebf48a..1f87a5e7e6 100644 --- a/plugins/org-react/README.md +++ b/plugins/org-react/README.md @@ -18,13 +18,14 @@ To use the `GroupListPicker` component you'll need to import it and add it to yo -+ ++ ``` -The `GroupListPicker` comes with three props: +The `GroupListPicker` comes with four props: - `groupTypes`: gives the user the option which group types the component should load. If no value is provided all group types will be loaded in; - `placeholder`: the placeholder that the select box in the component should display. This might be helpful in informing your users what the functionality of the component is. - `onChange`: a prop to help the user to give access to the selected group +- `defaultValue`: gives the user the option to define a default value that will be shown initially before making a selection diff --git a/plugins/org-react/src/components/GroupListPicker/GroupListPicker.tsx b/plugins/org-react/src/components/GroupListPicker/GroupListPicker.tsx index 1296c520c3..a47c346390 100644 --- a/plugins/org-react/src/components/GroupListPicker/GroupListPicker.tsx +++ b/plugins/org-react/src/components/GroupListPicker/GroupListPicker.tsx @@ -34,6 +34,7 @@ import { GroupListPickerButton } from './GroupListPickerButton'; * @public */ export type GroupListPickerProps = { + defaultValue?: string; placeholder?: string; groupTypes?: Array; onChange: (value: GroupEntity | undefined) => void; @@ -43,9 +44,9 @@ export type GroupListPickerProps = { export const GroupListPicker = (props: GroupListPickerProps) => { const catalogApi = useApi(catalogApiRef); - const { onChange, groupTypes, placeholder = '' } = props; + const { onChange, groupTypes, placeholder = '', defaultValue = '' } = props; const [anchorEl, setAnchorEl] = React.useState(null); - const [inputValue, setInputValue] = React.useState(''); + const [inputValue, setInputValue] = React.useState(defaultValue); const handleClick = (event: React.MouseEvent) => { setAnchorEl(event.currentTarget); @@ -75,6 +76,7 @@ export const GroupListPicker = (props: GroupListPickerProps) => { const handleChange = useCallback( (_, v: GroupEntity | null) => { onChange(v ?? undefined); + setAnchorEl(null); }, [onChange], ); @@ -108,6 +110,8 @@ export const GroupListPicker = (props: GroupListPickerProps) => { renderInput={params => ( diff --git a/plugins/org-react/src/components/GroupListPicker/GroupListPickerButton.tsx b/plugins/org-react/src/components/GroupListPicker/GroupListPickerButton.tsx index 149bf778b1..3f9528b9bd 100644 --- a/plugins/org-react/src/components/GroupListPicker/GroupListPickerButton.tsx +++ b/plugins/org-react/src/components/GroupListPicker/GroupListPickerButton.tsx @@ -27,13 +27,18 @@ const useStyles = makeStyles((theme: BackstageTheme) => ({ width: '100%', cursor: 'pointer', justifyContent: 'space-between', + '& p': { + width: '100%', + textAlign: 'left', + marginLeft: 4, + }, }, title: { fontSize: '1.5rem', fontStyle: 'normal', fontWeight: theme.typography.fontWeightBold, letterSpacing: '-0.25px', - lineHeight: '32px', + height: '32px', marginBottom: 0, textTransform: 'none', }, From 4cb5066828163c7b91e855cd4760ffbdc5c7d23b Mon Sep 17 00:00:00 2001 From: Mathias Bronner Date: Thu, 17 Nov 2022 16:31:43 +0100 Subject: [PATCH 32/73] chore: Fix changeset spelling and generate api reports Signed-off-by: Mathias Bronner --- .changeset/fair-walls-talk.md | 5 +++++ plugins/org-react/api-report.md | 1 + 2 files changed, 6 insertions(+) create mode 100644 .changeset/fair-walls-talk.md diff --git a/.changeset/fair-walls-talk.md b/.changeset/fair-walls-talk.md new file mode 100644 index 0000000000..3e3ee26160 --- /dev/null +++ b/.changeset/fair-walls-talk.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-org-react': patch +--- + +Bug fixes and adding the possibility to add a default value for the `GroupListPicker`. Fixes: Vertical size jump on text entry, left align for text, selecting a value closes the popup, auto focus on the popup when opening diff --git a/plugins/org-react/api-report.md b/plugins/org-react/api-report.md index 60cd6944d0..48bd090f64 100644 --- a/plugins/org-react/api-report.md +++ b/plugins/org-react/api-report.md @@ -12,6 +12,7 @@ export const GroupListPicker: (props: GroupListPickerProps) => JSX.Element; // @public export type GroupListPickerProps = { + defaultValue?: string; placeholder?: string; groupTypes?: Array; onChange: (value: GroupEntity | undefined) => void; From e4a838e78226196da10be092b4307d67504023cd Mon Sep 17 00:00:00 2001 From: Mathias Bronner Date: Thu, 17 Nov 2022 16:38:05 +0100 Subject: [PATCH 33/73] chore: Fix changeset spelling again Signed-off-by: Mathias Bronner Signed-off-by: Mathias Bronner --- .changeset/nasty-pens-march.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changeset/nasty-pens-march.md b/.changeset/nasty-pens-march.md index feee28fad4..ca11e26874 100644 --- a/.changeset/nasty-pens-march.md +++ b/.changeset/nasty-pens-march.md @@ -2,4 +2,4 @@ '@backstage/plugin-org-react': patch --- -Bug fixes and adding the possibility to add a default value. Fixes: Vertical size jump on text entry, left align for text, selecting a value closes the popup, autofocus on the popup when opening +Bug fixes and adding the possibility to add a default value. Fixes: Vertical size jump on text entry, left align for text, selecting a value closes the popup, auto focus on the popup when opening From 6ae775870c19f53d4c735e3e8f3c7ce6d3bb9364 Mon Sep 17 00:00:00 2001 From: Mathias Bronner Date: Thu, 17 Nov 2022 17:05:32 +0100 Subject: [PATCH 34/73] add GroupListPicker to the changeset text Signed-off-by: Mathias Bronner Signed-off-by: Mathias Bronner --- .changeset/nasty-pens-march.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changeset/nasty-pens-march.md b/.changeset/nasty-pens-march.md index ca11e26874..ae2aab3afc 100644 --- a/.changeset/nasty-pens-march.md +++ b/.changeset/nasty-pens-march.md @@ -2,4 +2,4 @@ '@backstage/plugin-org-react': patch --- -Bug fixes and adding the possibility to add a default value. Fixes: Vertical size jump on text entry, left align for text, selecting a value closes the popup, auto focus on the popup when opening +Bug fixes and adding the possibility to add a default value for `GroupListPicker`. Fixes: Vertical size jump on text entry, left align for text, selecting a value closes the popup, auto focus on the popup when opening From 27959107680c41120c269c57d237b54612e6c3fb Mon Sep 17 00:00:00 2001 From: Mathias Bronner Date: Thu, 17 Nov 2022 16:48:10 +0100 Subject: [PATCH 35/73] Delete nasty-pens-march.md Signed-off-by: Mathias Bronner --- .changeset/nasty-pens-march.md | 5 ----- 1 file changed, 5 deletions(-) delete mode 100644 .changeset/nasty-pens-march.md diff --git a/.changeset/nasty-pens-march.md b/.changeset/nasty-pens-march.md deleted file mode 100644 index ae2aab3afc..0000000000 --- a/.changeset/nasty-pens-march.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'@backstage/plugin-org-react': patch ---- - -Bug fixes and adding the possibility to add a default value for `GroupListPicker`. Fixes: Vertical size jump on text entry, left align for text, selecting a value closes the popup, auto focus on the popup when opening From 7018682a631967d22d529e990a208f0047317323 Mon Sep 17 00:00:00 2001 From: bnechyporenko Date: Fri, 18 Nov 2022 16:30:38 +0100 Subject: [PATCH 36/73] Incorporated the feedback Signed-off-by: bnechyporenko --- app-config.yaml | 2 +- plugins/cost-insights/src/hooks/useConfig.tsx | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/app-config.yaml b/app-config.yaml index f890b4228a..4a7e1cf9b8 100644 --- a/app-config.yaml +++ b/app-config.yaml @@ -376,7 +376,7 @@ costInsights: baseCurrency: locale: en-US options: - currency: EUR + currency: USD minimumFractionDigits: 3 products: computeEngine: diff --git a/plugins/cost-insights/src/hooks/useConfig.tsx b/plugins/cost-insights/src/hooks/useConfig.tsx index 679031b131..97bcdbd3b8 100644 --- a/plugins/cost-insights/src/hooks/useConfig.tsx +++ b/plugins/cost-insights/src/hooks/useConfig.tsx @@ -48,7 +48,7 @@ import { configApiRef, useApi } from '@backstage/core-plugin-api'; * name: Metric B * baseCurrency: * locales: - * - en-US + * - nl-NL * options: * style: currency * currency: EUR From a7d5318c2107c021b0af56a3cf82d425ff79a347 Mon Sep 17 00:00:00 2001 From: bnechyporenko Date: Fri, 18 Nov 2022 16:31:04 +0100 Subject: [PATCH 37/73] Incorporated the feedback Signed-off-by: bnechyporenko --- plugins/cost-insights/src/hooks/useConfig.tsx | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/plugins/cost-insights/src/hooks/useConfig.tsx b/plugins/cost-insights/src/hooks/useConfig.tsx index 97bcdbd3b8..680a682df7 100644 --- a/plugins/cost-insights/src/hooks/useConfig.tsx +++ b/plugins/cost-insights/src/hooks/useConfig.tsx @@ -47,8 +47,7 @@ import { configApiRef, useApi } from '@backstage/core-plugin-api'; * metricB: * name: Metric B * baseCurrency: - * locales: - * - nl-NL + * locales: nl-NL * options: * style: currency * currency: EUR From 6cfdf88e058ae74c571cf884205763049e0c56ee Mon Sep 17 00:00:00 2001 From: bnechyporenko Date: Fri, 18 Nov 2022 16:31:22 +0100 Subject: [PATCH 38/73] Incorporated the feedback Signed-off-by: bnechyporenko --- plugins/cost-insights/src/hooks/useConfig.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/plugins/cost-insights/src/hooks/useConfig.tsx b/plugins/cost-insights/src/hooks/useConfig.tsx index 680a682df7..b1cfaf2002 100644 --- a/plugins/cost-insights/src/hooks/useConfig.tsx +++ b/plugins/cost-insights/src/hooks/useConfig.tsx @@ -47,7 +47,7 @@ import { configApiRef, useApi } from '@backstage/core-plugin-api'; * metricB: * name: Metric B * baseCurrency: - * locales: nl-NL + * locale: nl-NL * options: * style: currency * currency: EUR From cabd58d2bd95b76cb017d3b25be2896059f63516 Mon Sep 17 00:00:00 2001 From: Andre Wanlin <67169551+awanlin@users.noreply.github.com> Date: Fri, 28 Oct 2022 16:21:59 -0500 Subject: [PATCH 39/73] Added SidebarSubmenu for all Kinds Signed-off-by: Andre Wanlin <67169551+awanlin@users.noreply.github.com> --- .changeset/lovely-walls-guess.md | 90 +++++++++++++++++++ packages/app/src/components/Root/Root.tsx | 57 +++++++++++- .../packages/app/src/components/Root/Root.tsx | 57 +++++++++++- 3 files changed, 202 insertions(+), 2 deletions(-) create mode 100644 .changeset/lovely-walls-guess.md diff --git a/.changeset/lovely-walls-guess.md b/.changeset/lovely-walls-guess.md new file mode 100644 index 0000000000..edf068c7e3 --- /dev/null +++ b/.changeset/lovely-walls-guess.md @@ -0,0 +1,90 @@ +--- +'@backstage/create-app': patch +--- + +Added `SidebarSubmenu` for all Kinds making it easier to discover them in the Catalog. + +To add this to an existing Backstage instance you will need to make the following to your `packages/app/src/components/Root/Root.tsx`: + +1. First add the following imports: + + ```ts + import ApiIcon from '@material-ui/icons/Extension'; + import ComponentIcon from '@material-ui/icons/Memory'; + import DomainIcon from '@material-ui/icons/Apartment'; + import ResourceIcon from '@material-ui/icons/Work'; + import SystemIcon from '@material-ui/icons/Category'; + import UserIcon from '@material-ui/icons/Person'; + ``` + +2. Then update the `@backstage/core-components` import like this: + + ```diff + import { + Sidebar, + sidebarConfig, + SidebarDivider, + SidebarGroup, + SidebarItem, + SidebarPage, + SidebarScrollWrapper, + SidebarSpace, + useSidebarOpenState, + Link, + + GroupIcon, + + SidebarSubmenu, + + SidebarSubmenuItem, + } from '@backstage/core-components'; + ``` + +3. Finally replace `` with this: + + ```ts + + + + + + + + + + + + + + + + ``` diff --git a/packages/app/src/components/Root/Root.tsx b/packages/app/src/components/Root/Root.tsx index 41e5b15db9..7bec873d49 100644 --- a/packages/app/src/components/Root/Root.tsx +++ b/packages/app/src/components/Root/Root.tsx @@ -47,12 +47,21 @@ import { SidebarSpace, Link, useSidebarOpenState, + SidebarSubmenu, + SidebarSubmenuItem, } from '@backstage/core-components'; import { MyGroupsSidebarItem } from '@backstage/plugin-org'; import GroupIcon from '@material-ui/icons/People'; import { SearchModal } from '../search/SearchModal'; import Score from '@material-ui/icons/Score'; +import ApiIcon from '@material-ui/icons/Extension'; +import ComponentIcon from '@material-ui/icons/Memory'; +import DomainIcon from '@material-ui/icons/Apartment'; +import ResourceIcon from '@material-ui/icons/Work'; +import SystemIcon from '@material-ui/icons/Category'; +import UserIcon from '@material-ui/icons/Person'; + const useSidebarLogoStyles = makeStyles({ root: { width: sidebarConfig.drawerWidthClosed, @@ -93,7 +102,53 @@ export const Root = ({ children }: PropsWithChildren<{}>) => ( }> {/* Global nav, not org-specific */} - + + + + + + + + + + + + + + + ) => ( }> {/* Global nav, not org-specific */} - + + + + + + + + + + + + + + + From 65630a9bcbe54d3380569f04d7979a5e506e3ad9 Mon Sep 17 00:00:00 2001 From: Andre Wanlin <67169551+awanlin@users.noreply.github.com> Date: Fri, 11 Nov 2022 08:16:53 -0600 Subject: [PATCH 40/73] Changes based on feedback Signed-off-by: Andre Wanlin <67169551+awanlin@users.noreply.github.com> --- .changeset/lovely-walls-guess.md | 20 +++++++------------ packages/app/src/components/Root/Root.tsx | 20 +++++++------------ .../packages/app/src/components/Root/Root.tsx | 20 +++++++------------ 3 files changed, 21 insertions(+), 39 deletions(-) diff --git a/.changeset/lovely-walls-guess.md b/.changeset/lovely-walls-guess.md index edf068c7e3..eab92d8e9e 100644 --- a/.changeset/lovely-walls-guess.md +++ b/.changeset/lovely-walls-guess.md @@ -44,45 +44,39 @@ To add this to an existing Backstage instance you will need to make the followin - - diff --git a/packages/app/src/components/Root/Root.tsx b/packages/app/src/components/Root/Root.tsx index 7bec873d49..8cec54326a 100644 --- a/packages/app/src/components/Root/Root.tsx +++ b/packages/app/src/components/Root/Root.tsx @@ -106,45 +106,39 @@ export const Root = ({ children }: PropsWithChildren<{}>) => ( - - diff --git a/packages/create-app/templates/default-app/packages/app/src/components/Root/Root.tsx b/packages/create-app/templates/default-app/packages/app/src/components/Root/Root.tsx index b6f883ab2f..0acaba7470 100644 --- a/packages/create-app/templates/default-app/packages/app/src/components/Root/Root.tsx +++ b/packages/create-app/templates/default-app/packages/app/src/components/Root/Root.tsx @@ -78,45 +78,39 @@ export const Root = ({ children }: PropsWithChildren<{}>) => ( - - From 9d2c6a7db46edf2f1c114e17bed4d1b7f4bc5b10 Mon Sep 17 00:00:00 2001 From: Andre Wanlin <67169551+awanlin@users.noreply.github.com> Date: Fri, 18 Nov 2022 12:25:50 -0600 Subject: [PATCH 41/73] Removed from create-app and added to docs Signed-off-by: Andre Wanlin <67169551+awanlin@users.noreply.github.com> --- .changeset/lovely-walls-guess.md | 84 ---------------- .../sidebar-submenu-example.png | Bin 0 -> 26763 bytes docs/getting-started/app-custom-theme.md | 92 ++++++++++++++++++ .../packages/app/src/components/Root/Root.tsx | 42 +------- 4 files changed, 93 insertions(+), 125 deletions(-) delete mode 100644 .changeset/lovely-walls-guess.md create mode 100644 docs/assets/getting-started/sidebar-submenu-example.png diff --git a/.changeset/lovely-walls-guess.md b/.changeset/lovely-walls-guess.md deleted file mode 100644 index eab92d8e9e..0000000000 --- a/.changeset/lovely-walls-guess.md +++ /dev/null @@ -1,84 +0,0 @@ ---- -'@backstage/create-app': patch ---- - -Added `SidebarSubmenu` for all Kinds making it easier to discover them in the Catalog. - -To add this to an existing Backstage instance you will need to make the following to your `packages/app/src/components/Root/Root.tsx`: - -1. First add the following imports: - - ```ts - import ApiIcon from '@material-ui/icons/Extension'; - import ComponentIcon from '@material-ui/icons/Memory'; - import DomainIcon from '@material-ui/icons/Apartment'; - import ResourceIcon from '@material-ui/icons/Work'; - import SystemIcon from '@material-ui/icons/Category'; - import UserIcon from '@material-ui/icons/Person'; - ``` - -2. Then update the `@backstage/core-components` import like this: - - ```diff - import { - Sidebar, - sidebarConfig, - SidebarDivider, - SidebarGroup, - SidebarItem, - SidebarPage, - SidebarScrollWrapper, - SidebarSpace, - useSidebarOpenState, - Link, - + GroupIcon, - + SidebarSubmenu, - + SidebarSubmenuItem, - } from '@backstage/core-components'; - ``` - -3. Finally replace `` with this: - - ```ts - - - - - - - - - - - - - - ``` diff --git a/docs/assets/getting-started/sidebar-submenu-example.png b/docs/assets/getting-started/sidebar-submenu-example.png new file mode 100644 index 0000000000000000000000000000000000000000..0b30f0ca6ad4c2e3e8609fe2375aff94c19b4e1b GIT binary patch literal 26763 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 literal 0 HcmV?d00001 diff --git a/docs/getting-started/app-custom-theme.md b/docs/getting-started/app-custom-theme.md index 146f160d71..3015c18011 100644 --- a/docs/getting-started/app-custom-theme.md +++ b/docs/getting-started/app-custom-theme.md @@ -393,6 +393,98 @@ You can add more icons, if the [default icons](https://github.com/backstage/back Note: If the icon is not available as one of the default icons or one you've added then it will fall back to Material UI's `LanguageIcon` +## Custom Sidebar + +As you've seen there are many ways that you can customize your Backstage app. The following section will show you how you can customize the sidebar. + +### Sidebar Submenu + +For this example we'll show you how you can expand the sidebar with a submenu: + +1. Open the `Root.tsx` file located in `packages/app/src/components/Root` as this is where the sidebar code lives +2. Then we want to add the following imports for the icons: + + ```ts + import ApiIcon from '@material-ui/icons/Extension'; + import ComponentIcon from '@material-ui/icons/Memory'; + import DomainIcon from '@material-ui/icons/Apartment'; + import ResourceIcon from '@material-ui/icons/Work'; + import SystemIcon from '@material-ui/icons/Category'; + import UserIcon from '@material-ui/icons/Person'; + ``` + +3. Then update the `@backstage/core-components` import like this: + + ```diff + import { + Sidebar, + sidebarConfig, + SidebarDivider, + SidebarGroup, + SidebarItem, + SidebarPage, + SidebarScrollWrapper, + SidebarSpace, + useSidebarOpenState, + Link, + + GroupIcon, + + SidebarSubmenu, + + SidebarSubmenuItem, + } from '@backstage/core-components'; + ``` + +4. Finally replace `` with this: + + ```ts + + + + + + + + + + + + + + ``` + +When you startup your Backstage app and hover over the Home option on the sidebar you'll now see a nice submenu appear with links to the various Kinds in your Catalog. It would look like this: + +![Sidebar submenu example](./../assets/getting-started/sidebar-submenu-example.png) + +You can see more ways to use this in the [Storybook Sidebar examples](https://backstage.io/storybook/?path=/story/layout-sidebar--sample-scalable-sidebar) + ## Custom Homepage In addition to a custom theme, a custom logo, you can also customize the diff --git a/packages/create-app/templates/default-app/packages/app/src/components/Root/Root.tsx b/packages/create-app/templates/default-app/packages/app/src/components/Root/Root.tsx index 0acaba7470..84882fa23f 100644 --- a/packages/create-app/templates/default-app/packages/app/src/components/Root/Root.tsx +++ b/packages/create-app/templates/default-app/packages/app/src/components/Root/Root.tsx @@ -74,47 +74,7 @@ export const Root = ({ children }: PropsWithChildren<{}>) => ( }> {/* Global nav, not org-specific */} - - - - - - - - - - - - - + From 6db37424c5512aa57d3333f87af98bce9dba7773 Mon Sep 17 00:00:00 2001 From: Andre Wanlin <67169551+awanlin@users.noreply.github.com> Date: Fri, 18 Nov 2022 12:43:34 -0600 Subject: [PATCH 42/73] Changes to make Vale happy, I hope Signed-off-by: Andre Wanlin <67169551+awanlin@users.noreply.github.com> --- docs/getting-started/app-custom-theme.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/getting-started/app-custom-theme.md b/docs/getting-started/app-custom-theme.md index 3015c18011..5ec0d6eeab 100644 --- a/docs/getting-started/app-custom-theme.md +++ b/docs/getting-started/app-custom-theme.md @@ -397,9 +397,9 @@ Note: If the icon is not available as one of the default icons or one you've add As you've seen there are many ways that you can customize your Backstage app. The following section will show you how you can customize the sidebar. -### Sidebar Submenu +### Sidebar Sub-menu -For this example we'll show you how you can expand the sidebar with a submenu: +For this example we'll show you how you can expand the sidebar with a sub-menu: 1. Open the `Root.tsx` file located in `packages/app/src/components/Root` as this is where the sidebar code lives 2. Then we want to add the following imports for the icons: @@ -479,9 +479,9 @@ For this example we'll show you how you can expand the sidebar with a submenu: ``` -When you startup your Backstage app and hover over the Home option on the sidebar you'll now see a nice submenu appear with links to the various Kinds in your Catalog. It would look like this: +When you startup your Backstage app and hover over the Home option on the sidebar you'll now see a nice sub-menu appear with links to the various Kinds in your Catalog. It would look like this: -![Sidebar submenu example](./../assets/getting-started/sidebar-submenu-example.png) +![Sidebar sub-menu example](./../assets/getting-started/sidebar-submenu-example.png) You can see more ways to use this in the [Storybook Sidebar examples](https://backstage.io/storybook/?path=/story/layout-sidebar--sample-scalable-sidebar) From 493fc5b80d21d0c95cd5359fe057f4552e3baeb1 Mon Sep 17 00:00:00 2001 From: Andre Wanlin <67169551+awanlin@users.noreply.github.com> Date: Fri, 18 Nov 2022 13:09:49 -0600 Subject: [PATCH 43/73] Removed imports Signed-off-by: Andre Wanlin <67169551+awanlin@users.noreply.github.com> --- .../packages/app/src/components/Root/Root.tsx | 9 --------- 1 file changed, 9 deletions(-) diff --git a/packages/create-app/templates/default-app/packages/app/src/components/Root/Root.tsx b/packages/create-app/templates/default-app/packages/app/src/components/Root/Root.tsx index 84882fa23f..6768b48dad 100644 --- a/packages/create-app/templates/default-app/packages/app/src/components/Root/Root.tsx +++ b/packages/create-app/templates/default-app/packages/app/src/components/Root/Root.tsx @@ -23,18 +23,9 @@ import { SidebarSpace, useSidebarOpenState, Link, - GroupIcon, - SidebarSubmenu, - SidebarSubmenuItem, } from '@backstage/core-components'; import MenuIcon from '@material-ui/icons/Menu'; import SearchIcon from '@material-ui/icons/Search'; -import ApiIcon from '@material-ui/icons/Extension'; -import ComponentIcon from '@material-ui/icons/Memory'; -import DomainIcon from '@material-ui/icons/Apartment'; -import ResourceIcon from '@material-ui/icons/Work'; -import SystemIcon from '@material-ui/icons/Category'; -import UserIcon from '@material-ui/icons/Person'; const useSidebarLogoStyles = makeStyles({ root: { From 4c9a407e16b23bc7a8fe5924f37fc0879c34728d Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Fri, 18 Nov 2022 23:12:22 +0100 Subject: [PATCH 44/73] workflows: add workflow for posting release information on PR merge Signed-off-by: Patrik Oldsberg --- .github/workflows/automate_merge_message.yml | 63 ++++++++++ scripts/generate-merge-message.js | 115 +++++++++++++++++++ 2 files changed, 178 insertions(+) create mode 100644 .github/workflows/automate_merge_message.yml create mode 100755 scripts/generate-merge-message.js diff --git a/.github/workflows/automate_merge_message.yml b/.github/workflows/automate_merge_message.yml new file mode 100644 index 0000000000..9d8deffd8a --- /dev/null +++ b/.github/workflows/automate_merge_message.yml @@ -0,0 +1,63 @@ +name: Automate merge message +on: + pull_request: + branches: ['master'] + types: ['closed'] + +permissions: + pull-requests: write + actions: none + checks: none + contents: none + deployments: none + issues: none + packages: none + pages: none + repository-projects: none + security-events: none + statuses: none + +jobs: + message: + # prevent running towards forks, and only run on merged PRs + if: github.repository == 'backstage/backstage' && github.event.pull_request.merged == true + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + with: + ref: '${{ github.event.pull_request.merge_commit_sha }}' + + - name: fetch base + run: git fetch --depth 1 origin ${{ github.event.pull_request.base.sha }} + + # We avoid using the in-source script since this workflow has elevated permissions that we don't want to expose + - name: Generate Message + id: generate-message + run: | + rm -f generate.js + wget -O generate.js https://raw.githubusercontent.com/backstage/backstage/master/scripts/generate-merge-message.js 1>&2 + node generate.js FETCH_HEAD > message.txt + + - name: Post Message + uses: actions/github-script@v6 + env: + ISSUE_NUMBER: ${{ github.event.pull_request.number }} + with: + script: | + const owner = "backstage"; + const repo = "backstage"; + const body = require('fs').readFileSync('message.txt', 'utf8').trim(); + const issue_number = Number(process.env.ISSUE_NUMBER); + + if (!body) { + console.log(`skipping comment for #${issue_number}`); + return; + } + + console.log(`creating comment for #${issue_number}`); + await github.rest.issues.createComment({ + owner, + repo, + issue_number, + body, + }); diff --git a/scripts/generate-merge-message.js b/scripts/generate-merge-message.js new file mode 100755 index 0000000000..9b6fb5cbc6 --- /dev/null +++ b/scripts/generate-merge-message.js @@ -0,0 +1,115 @@ +#!/usr/bin/env node +/* + * Copyright 2022 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +const { execFile: execFileCb } = require('child_process'); +const { promisify } = require('util'); +const { resolve: resolvePath } = require('path'); + +const execFile = promisify(execFileCb); + +async function hasNewChangesets(ref) { + if (!ref) { + throw new Error('ref is required'); + } + + const { stdout } = await execFile('git', [ + 'diff', + '--compact-summary', + ref, + '.changeset/*.md', + ]); + return stdout.includes('(new)'); +} + +function getReleaseOfMonth(year, month) { + const base = new Date(Date.UTC(year, month)); + const wednesdayOffset = + base.getUTCDay() > 3 ? 10 - base.getUTCDay() : 3 - base.getUTCDay(); + const thirdWednesdayOffset = wednesdayOffset + 7 * 2; + const releaseOffset = thirdWednesdayOffset - 1; + const releaseDay = new Date( + Date.UTC(base.getUTCFullYear(), base.getUTCMonth(), releaseOffset + 1), + ); + return releaseDay; +} + +function getReleaseSchedule() { + const firstReleaseYear = 2022; + const firstReleaseMonth = 2; + + return Array(100) + .fill(0) + .map((_, i) => { + const date = getReleaseOfMonth(firstReleaseYear, firstReleaseMonth + i); + return { version: `1.${i}.0`, date }; + }); +} + +function getCurrentRelease() { + const { version: releaseVersion } = require(resolvePath('package.json')); + + const match = releaseVersion.match(/^(\d+\.\d+\.\d+)/); + if (!match) { + throw new Error(`Failed to parse release version, '${releaseVersion}'`); + } + const [versionStr] = match; + if (versionStr === releaseVersion) { + return releaseVersion; + } + const [major, minor] = versionStr.split('.').map(Number); + return `${major}.${minor - 1}.0`; +} + +function findNextRelease(currentRelease, releaseSchedule) { + const currentIndex = releaseSchedule.findIndex( + r => r.version === currentRelease, + ); + if (currentIndex === -1) { + throw new Error( + `Failed to find current release '${currentRelease}' in release schedule`, + ); + } + + return releaseSchedule[currentIndex + 1]; +} + +async function main() { + const [diffRef = 'origin/master'] = process.argv.slice(2); + const needsMessage = await hasNewChangesets(diffRef); + if (!needsMessage) { + return; + } + + const currentRelease = getCurrentRelease(); + const releaseSchedule = getReleaseSchedule(); + const nextRelease = findNextRelease(currentRelease, releaseSchedule); + + const scheduledDate = nextRelease.date + .toUTCString() + .replace(/\s*\d+:\d+:\d+.*/, ''); + process.stdout.write( + [ + 'Thank you for contributing to Backstage! The changes in this pull request will be part', + `of the \`${nextRelease.version}\` release, scheduled for ${scheduledDate}.`, + ].join(' '), + ); +} + +main().catch(error => { + console.error(error.stack); + process.exit(1); +}); From cf41eedf435032146b46f9f95db5b584a225d0cd Mon Sep 17 00:00:00 2001 From: Patrick Jungermann Date: Fri, 18 Nov 2022 04:22:25 +0100 Subject: [PATCH 45/73] chore(events): apply post-merge comments Introduces a new interface `RequestDetails` to abstract `Request` providing access to request body and headers. **BREAKING:** Replace `request: Request` with `request: RequestDetails` at `RequestValidator`. **BREAKING:** Remove required field `router` at `HttpPostIngressEventPublisher.fromConfig` and replace it with `bind(router: Router)`. Additionally, the path prefix `/http` will be added inside `HttpPostIngressEventPublisher`. Relates-to: PR #13931 Signed-off-by: Patrick Jungermann --- .changeset/fluffy-walls-approve.md | 21 +++++++++++ .changeset/nine-ears-whisper.md | 9 +++++ packages/backend/src/plugins/events.ts | 4 +- plugins/events-backend/README.md | 2 +- plugins/events-backend/api-report.md | 3 +- .../src/service/EventsPlugin.ts | 26 +++++-------- .../HttpPostIngressEventPublisher.test.ts | 37 +++++++------------ .../http/HttpPostIngressEventPublisher.ts | 22 +++++++---- plugins/events-node/api-report.md | 9 ++++- plugins/events-node/package.json | 4 +- .../src/api/http/validation/RequestDetails.ts | 29 +++++++++++++++ .../api/http/validation/RequestValidator.ts | 4 +- .../src/api/http/validation/index.ts | 1 + yarn.lock | 2 - 14 files changed, 112 insertions(+), 61 deletions(-) create mode 100644 .changeset/fluffy-walls-approve.md create mode 100644 .changeset/nine-ears-whisper.md create mode 100644 plugins/events-node/src/api/http/validation/RequestDetails.ts diff --git a/.changeset/fluffy-walls-approve.md b/.changeset/fluffy-walls-approve.md new file mode 100644 index 0000000000..968f5cc402 --- /dev/null +++ b/.changeset/fluffy-walls-approve.md @@ -0,0 +1,21 @@ +--- +'@backstage/plugin-events-backend': minor +--- + +**BREAKING:** Remove required field `router` at `HttpPostIngressEventPublisher.fromConfig` +and replace it with `bind(router: Router)`. +Additionally, the path prefix `/http` will be added inside `HttpPostIngressEventPublisher`. + +```diff +// at packages/backend/src/plugins/events.ts + const eventsRouter = Router(); +- const httpRouter = Router(); +- eventsRouter.use('/http', httpRouter); + + const http = HttpPostIngressEventPublisher.fromConfig({ + config: env.config, + logger: env.logger, +- router: httpRouter, + }); ++ http.bind(eventsRouter); +``` diff --git a/.changeset/nine-ears-whisper.md b/.changeset/nine-ears-whisper.md new file mode 100644 index 0000000000..a1427158af --- /dev/null +++ b/.changeset/nine-ears-whisper.md @@ -0,0 +1,9 @@ +--- +'@backstage/plugin-events-backend': patch +'@backstage/plugin-events-node': minor +--- + +Introduce a new interface `RequestDetails` to abstract `Request` +providing access to request body and headers. + +**BREAKING:** Replace `request: Request` with `request: RequestDetails` at `RequestValidator`. diff --git a/packages/backend/src/plugins/events.ts b/packages/backend/src/plugins/events.ts index 2ada92a5b6..7427d34217 100644 --- a/packages/backend/src/plugins/events.ts +++ b/packages/backend/src/plugins/events.ts @@ -27,14 +27,12 @@ export default async function createPlugin( subscribers: EventSubscriber[], ): Promise { const eventsRouter = Router(); - const httpRouter = Router(); - eventsRouter.use('/http', httpRouter); const http = HttpPostIngressEventPublisher.fromConfig({ config: env.config, logger: env.logger, - router: httpRouter, }); + http.bind(eventsRouter); await new EventsBackend(env.logger) .addPublishers(http) diff --git a/plugins/events-backend/README.md b/plugins/events-backend/README.md index f71df21517..cef8ac7330 100644 --- a/plugins/events-backend/README.md +++ b/plugins/events-backend/README.md @@ -170,8 +170,8 @@ const http = HttpPostIngressEventPublisher.fromConfig({ }, }, logger: env.logger, - router: httpRouter, }); +http.bind(router); await new EventsBackend(env.logger) .addPublishers(http) diff --git a/plugins/events-backend/api-report.md b/plugins/events-backend/api-report.md index 4154168fa1..69d7600ed3 100644 --- a/plugins/events-backend/api-report.md +++ b/plugins/events-backend/api-report.md @@ -33,6 +33,8 @@ export const eventsPlugin: (options?: undefined) => BackendFeature; // @public export class HttpPostIngressEventPublisher implements EventPublisher { + // (undocumented) + bind(router: express.Router): void; // (undocumented) static fromConfig(env: { config: Config; @@ -40,7 +42,6 @@ export class HttpPostIngressEventPublisher implements EventPublisher { [topic: string]: Omit; }; logger: Logger; - router: express.Router; }): HttpPostIngressEventPublisher; // (undocumented) setEventBroker(eventBroker: EventBroker): Promise; diff --git a/plugins/events-backend/src/service/EventsPlugin.ts b/plugins/events-backend/src/service/EventsPlugin.ts index d5a38a7fd7..65e7770d87 100644 --- a/plugins/events-backend/src/service/EventsPlugin.ts +++ b/plugins/events-backend/src/service/EventsPlugin.ts @@ -90,14 +90,11 @@ export const eventsPlugin = createBackendPlugin({ env.registerInit({ deps: { config: configServiceRef, - httpRouter: httpRouterServiceRef, logger: loggerServiceRef, + router: httpRouterServiceRef, }, - async init({ config, httpRouter, logger }) { + async init({ config, logger, router }) { const winstonLogger = loggerToWinstonLogger(logger); - const eventsRouter = Router(); - const router = Router(); - eventsRouter.use('/http', router); const ingresses = Object.fromEntries( extensionPoint.httpPostIngresses.map(ingress => [ @@ -108,23 +105,20 @@ export const eventsPlugin = createBackendPlugin({ const http = HttpPostIngressEventPublisher.fromConfig({ config, - logger: winstonLogger, - router, ingresses, + logger: winstonLogger, }); + const eventsRouter = Router(); + http.bind(eventsRouter); + router.use(eventsRouter); - if (!extensionPoint.eventBroker) { - extensionPoint.setEventBroker(new InMemoryEventBroker(winstonLogger)); - } + const eventBroker = + extensionPoint.eventBroker ?? new InMemoryEventBroker(winstonLogger); - extensionPoint.eventBroker!.subscribe(extensionPoint.subscribers); + eventBroker.subscribe(extensionPoint.subscribers); [extensionPoint.publishers, http] .flat() - .forEach(publisher => - publisher.setEventBroker(extensionPoint.eventBroker!), - ); - - httpRouter.use(eventsRouter); + .forEach(publisher => publisher.setEventBroker(eventBroker)); }, }); }, diff --git a/plugins/events-backend/src/service/http/HttpPostIngressEventPublisher.test.ts b/plugins/events-backend/src/service/http/HttpPostIngressEventPublisher.test.ts index 3d93e347b3..28f3ddcac4 100644 --- a/plugins/events-backend/src/service/http/HttpPostIngressEventPublisher.test.ts +++ b/plugins/events-backend/src/service/http/HttpPostIngressEventPublisher.test.ts @@ -14,7 +14,7 @@ * limitations under the License. */ -import { errorHandler, getVoidLogger } from '@backstage/backend-common'; +import { getVoidLogger } from '@backstage/backend-common'; import { ConfigReader } from '@backstage/config'; import { TestEventBroker } from '@backstage/plugin-events-backend-test-utils'; import express from 'express'; @@ -35,37 +35,35 @@ describe('HttpPostIngressEventPublisher', () => { }); const router = Router(); - router.use(express.json()); - router.use(errorHandler()); const app = express().use(router); const publisher = HttpPostIngressEventPublisher.fromConfig({ config, - logger, - router, ingresses: { testB: {}, }, + logger, }); + publisher.bind(router); const eventBroker = new TestEventBroker(); await publisher.setEventBroker(eventBroker); const notFoundResponse = await request(app) - .post('/unknown') + .post('/http/unknown') .timeout(100) .send({ test: 'data' }); expect(notFoundResponse.status).toBe(404); const response1 = await request(app) - .post('/testA') + .post('/http/testA') .set('X-Custom-Header', 'test-value') .timeout(100) .send({ testA: 'data' }); expect(response1.status).toBe(202); const response2 = await request(app) - .post('/testB') + .post('/http/testB') .set('X-Custom-Header', 'test-value') .timeout(100) .send({ testB: 'data' }); @@ -100,14 +98,10 @@ describe('HttpPostIngressEventPublisher', () => { }); const router = Router(); - router.use(express.json()); - router.use(errorHandler()); const app = express().use(router); const publisher = HttpPostIngressEventPublisher.fromConfig({ config, - logger, - router, ingresses: { testB: { validator: async (req, context) => { @@ -148,26 +142,28 @@ describe('HttpPostIngressEventPublisher', () => { }, }, }, + logger, }); + publisher.bind(router); const eventBroker = new TestEventBroker(); await publisher.setEventBroker(eventBroker); const response1 = await request(app) - .post('/testA') + .post('/http/testA') .timeout(100) .send({ test: 'data' }); expect(response1.status).toBe(202); const response2 = await request(app) - .post('/testB') + .post('/http/testB') .timeout(100) .send({ test: 'data' }); expect(response2.status).toBe(400); expect(response2.body).toEqual({ message: 'wrong signature' }); const response3 = await request(app) - .post('/testB') + .post('/http/testB') .set('X-Test-Signature', 'wrong') .timeout(100) .send({ test: 'data' }); @@ -175,21 +171,21 @@ describe('HttpPostIngressEventPublisher', () => { expect(response3.body).toEqual({ message: 'wrong signature' }); const response4 = await request(app) - .post('/testB') + .post('/http/testB') .set('X-Test-Signature', 'testB-signature') .timeout(100) .send({ test: 'data' }); expect(response4.status).toBe(202); const response5 = await request(app) - .post('/testC') + .post('/http/testC') .timeout(100) .send({ test: 'data' }); expect(response5.status).toBe(404); expect(response5.body).toEqual({}); const response6 = await request(app) - .post('/testD') + .post('/http/testD') .timeout(100) .send({ test: 'data' }); expect(response6.status).toBe(403); @@ -210,15 +206,10 @@ describe('HttpPostIngressEventPublisher', () => { it('without configuration', async () => { const config = new ConfigReader({}); - const router = Router(); - router.use(express.json()); - router.use(errorHandler()); - expect(() => HttpPostIngressEventPublisher.fromConfig({ config, logger, - router, }), ).not.toThrow(); }); diff --git a/plugins/events-backend/src/service/http/HttpPostIngressEventPublisher.ts b/plugins/events-backend/src/service/http/HttpPostIngressEventPublisher.ts index 64b7140b54..b5a6ccbca1 100644 --- a/plugins/events-backend/src/service/http/HttpPostIngressEventPublisher.ts +++ b/plugins/events-backend/src/service/http/HttpPostIngressEventPublisher.ts @@ -41,7 +41,6 @@ export class HttpPostIngressEventPublisher implements EventPublisher { config: Config; ingresses?: { [topic: string]: Omit }; logger: Logger; - router: express.Router; }): HttpPostIngressEventPublisher { const topics = env.config.getOptionalStringArray('events.http.topics') ?? []; @@ -55,15 +54,18 @@ export class HttpPostIngressEventPublisher implements EventPublisher { } }); - return new HttpPostIngressEventPublisher(env.logger, env.router, ingresses); + return new HttpPostIngressEventPublisher(env.logger, ingresses); } private constructor( - private logger: Logger, - router: express.Router, - ingresses: { [topic: string]: Omit }, - ) { - router.use(this.createRouter(ingresses)); + private readonly logger: Logger, + private readonly ingresses: { + [topic: string]: Omit; + }, + ) {} + + bind(router: express.Router): void { + router.use('/http', this.createRouter(this.ingresses)); } async setEventBroker(eventBroker: EventBroker): Promise { @@ -92,8 +94,12 @@ export class HttpPostIngressEventPublisher implements EventPublisher { const path = `/${topic}`; router.post(path, async (request, response) => { + const requestDetails = { + body: request.body, + headers: request.headers, + }; const context = new RequestValidationContextImpl(); - await validator?.(request, context); + await validator?.(requestDetails, context); if (context.wasRejected()) { response .status(context.rejectionDetails!.status) diff --git a/plugins/events-node/api-report.md b/plugins/events-node/api-report.md index 1054211cbc..51136fd301 100644 --- a/plugins/events-node/api-report.md +++ b/plugins/events-node/api-report.md @@ -4,7 +4,6 @@ ```ts import { ExtensionPoint } from '@backstage/backend-plugin-api'; -import { Request as Request_2 } from 'express'; // @public export interface EventBroker { @@ -74,6 +73,12 @@ export interface HttpPostIngressOptions { validator?: RequestValidator; } +// @public (undocumented) +export interface RequestDetails { + body: unknown; + headers: Record; +} + // @public export interface RequestRejectionDetails { // (undocumented) @@ -89,7 +94,7 @@ export interface RequestValidationContext { // @public export type RequestValidator = ( - request: Request_2, + request: RequestDetails, context: RequestValidationContext, ) => Promise; diff --git a/plugins/events-node/package.json b/plugins/events-node/package.json index d193f33b00..978037f8ff 100644 --- a/plugins/events-node/package.json +++ b/plugins/events-node/package.json @@ -24,9 +24,7 @@ "postpack": "backstage-cli package postpack" }, "dependencies": { - "@backstage/backend-plugin-api": "workspace:^", - "@types/express": "^4.17.6", - "express": "^4.17.1" + "@backstage/backend-plugin-api": "workspace:^" }, "devDependencies": { "@backstage/cli": "workspace:^" diff --git a/plugins/events-node/src/api/http/validation/RequestDetails.ts b/plugins/events-node/src/api/http/validation/RequestDetails.ts new file mode 100644 index 0000000000..83c2669503 --- /dev/null +++ b/plugins/events-node/src/api/http/validation/RequestDetails.ts @@ -0,0 +1,29 @@ +/* + * Copyright 2022 The Backstage Authors + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/** + * @public + */ +export interface RequestDetails { + /** + * Request body. JSON payloads have been parsed already. + */ + body: unknown; + /** + * Key-value pairs of header names and values. Header names are lower-cased. + */ + headers: Record; +} diff --git a/plugins/events-node/src/api/http/validation/RequestValidator.ts b/plugins/events-node/src/api/http/validation/RequestValidator.ts index b419b855cf..3008db03ae 100644 --- a/plugins/events-node/src/api/http/validation/RequestValidator.ts +++ b/plugins/events-node/src/api/http/validation/RequestValidator.ts @@ -14,7 +14,7 @@ * limitations under the License. */ -import { Request } from 'express'; +import { RequestDetails } from './RequestDetails'; import { RequestValidationContext } from './RequestValidationContext'; /** @@ -29,6 +29,6 @@ import { RequestValidationContext } from './RequestValidationContext'; * @public */ export type RequestValidator = ( - request: Request, + request: RequestDetails, context: RequestValidationContext, ) => Promise; diff --git a/plugins/events-node/src/api/http/validation/index.ts b/plugins/events-node/src/api/http/validation/index.ts index 95f2d474eb..11f2e9f1f6 100644 --- a/plugins/events-node/src/api/http/validation/index.ts +++ b/plugins/events-node/src/api/http/validation/index.ts @@ -14,6 +14,7 @@ * limitations under the License. */ +export type { RequestDetails } from './RequestDetails'; export type { RequestRejectionDetails } from './RequestRejectionDetails'; export type { RequestValidationContext } from './RequestValidationContext'; export type { RequestValidator } from './RequestValidator'; diff --git a/yarn.lock b/yarn.lock index b1531e5db9..b9fdd7f050 100644 --- a/yarn.lock +++ b/yarn.lock @@ -5232,8 +5232,6 @@ __metadata: dependencies: "@backstage/backend-plugin-api": "workspace:^" "@backstage/cli": "workspace:^" - "@types/express": ^4.17.6 - express: ^4.17.1 languageName: unknown linkType: soft From f46c2209ae86cce74178a91845356dc2aeddb5c9 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 21 Nov 2022 09:25:40 +0000 Subject: [PATCH 46/73] Update dependency @swc/core to v1.3.19 Signed-off-by: Renovate Bot --- storybook/yarn.lock | 86 ++++++++++++++++++++++----------------------- yarn.lock | 86 ++++++++++++++++++++++----------------------- 2 files changed, 86 insertions(+), 86 deletions(-) diff --git a/storybook/yarn.lock b/storybook/yarn.lock index 77fbf8ca66..f7c56bc493 100644 --- a/storybook/yarn.lock +++ b/storybook/yarn.lock @@ -2966,90 +2966,90 @@ __metadata: languageName: node linkType: hard -"@swc/core-darwin-arm64@npm:1.3.16": - version: 1.3.16 - resolution: "@swc/core-darwin-arm64@npm:1.3.16" +"@swc/core-darwin-arm64@npm:1.3.19": + version: 1.3.19 + resolution: "@swc/core-darwin-arm64@npm:1.3.19" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"@swc/core-darwin-x64@npm:1.3.16": - version: 1.3.16 - resolution: "@swc/core-darwin-x64@npm:1.3.16" +"@swc/core-darwin-x64@npm:1.3.19": + version: 1.3.19 + resolution: "@swc/core-darwin-x64@npm:1.3.19" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"@swc/core-linux-arm-gnueabihf@npm:1.3.16": - version: 1.3.16 - resolution: "@swc/core-linux-arm-gnueabihf@npm:1.3.16" +"@swc/core-linux-arm-gnueabihf@npm:1.3.19": + version: 1.3.19 + resolution: "@swc/core-linux-arm-gnueabihf@npm:1.3.19" conditions: os=linux & cpu=arm languageName: node linkType: hard -"@swc/core-linux-arm64-gnu@npm:1.3.16": - version: 1.3.16 - resolution: "@swc/core-linux-arm64-gnu@npm:1.3.16" +"@swc/core-linux-arm64-gnu@npm:1.3.19": + version: 1.3.19 + resolution: "@swc/core-linux-arm64-gnu@npm:1.3.19" conditions: os=linux & cpu=arm64 & libc=glibc languageName: node linkType: hard -"@swc/core-linux-arm64-musl@npm:1.3.16": - version: 1.3.16 - resolution: "@swc/core-linux-arm64-musl@npm:1.3.16" +"@swc/core-linux-arm64-musl@npm:1.3.19": + version: 1.3.19 + resolution: "@swc/core-linux-arm64-musl@npm:1.3.19" conditions: os=linux & cpu=arm64 & libc=musl languageName: node linkType: hard -"@swc/core-linux-x64-gnu@npm:1.3.16": - version: 1.3.16 - resolution: "@swc/core-linux-x64-gnu@npm:1.3.16" +"@swc/core-linux-x64-gnu@npm:1.3.19": + version: 1.3.19 + resolution: "@swc/core-linux-x64-gnu@npm:1.3.19" conditions: os=linux & cpu=x64 & libc=glibc languageName: node linkType: hard -"@swc/core-linux-x64-musl@npm:1.3.16": - version: 1.3.16 - resolution: "@swc/core-linux-x64-musl@npm:1.3.16" +"@swc/core-linux-x64-musl@npm:1.3.19": + version: 1.3.19 + resolution: "@swc/core-linux-x64-musl@npm:1.3.19" conditions: os=linux & cpu=x64 & libc=musl languageName: node linkType: hard -"@swc/core-win32-arm64-msvc@npm:1.3.16": - version: 1.3.16 - resolution: "@swc/core-win32-arm64-msvc@npm:1.3.16" +"@swc/core-win32-arm64-msvc@npm:1.3.19": + version: 1.3.19 + resolution: "@swc/core-win32-arm64-msvc@npm:1.3.19" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard -"@swc/core-win32-ia32-msvc@npm:1.3.16": - version: 1.3.16 - resolution: "@swc/core-win32-ia32-msvc@npm:1.3.16" +"@swc/core-win32-ia32-msvc@npm:1.3.19": + version: 1.3.19 + resolution: "@swc/core-win32-ia32-msvc@npm:1.3.19" conditions: os=win32 & cpu=ia32 languageName: node linkType: hard -"@swc/core-win32-x64-msvc@npm:1.3.16": - version: 1.3.16 - resolution: "@swc/core-win32-x64-msvc@npm:1.3.16" +"@swc/core-win32-x64-msvc@npm:1.3.19": + version: 1.3.19 + resolution: "@swc/core-win32-x64-msvc@npm:1.3.19" conditions: os=win32 & cpu=x64 languageName: node linkType: hard "@swc/core@npm:^1.3.9": - version: 1.3.16 - resolution: "@swc/core@npm:1.3.16" + version: 1.3.19 + resolution: "@swc/core@npm:1.3.19" dependencies: - "@swc/core-darwin-arm64": 1.3.16 - "@swc/core-darwin-x64": 1.3.16 - "@swc/core-linux-arm-gnueabihf": 1.3.16 - "@swc/core-linux-arm64-gnu": 1.3.16 - "@swc/core-linux-arm64-musl": 1.3.16 - "@swc/core-linux-x64-gnu": 1.3.16 - "@swc/core-linux-x64-musl": 1.3.16 - "@swc/core-win32-arm64-msvc": 1.3.16 - "@swc/core-win32-ia32-msvc": 1.3.16 - "@swc/core-win32-x64-msvc": 1.3.16 + "@swc/core-darwin-arm64": 1.3.19 + "@swc/core-darwin-x64": 1.3.19 + "@swc/core-linux-arm-gnueabihf": 1.3.19 + "@swc/core-linux-arm64-gnu": 1.3.19 + "@swc/core-linux-arm64-musl": 1.3.19 + "@swc/core-linux-x64-gnu": 1.3.19 + "@swc/core-linux-x64-musl": 1.3.19 + "@swc/core-win32-arm64-msvc": 1.3.19 + "@swc/core-win32-ia32-msvc": 1.3.19 + "@swc/core-win32-x64-msvc": 1.3.19 dependenciesMeta: "@swc/core-darwin-arm64": optional: true @@ -3073,7 +3073,7 @@ __metadata: optional: true bin: swcx: run_swcx.js - checksum: 4361252c928c487a02f526aecd8f3072b923244234c2701916944cf13c252b6d5ce2466caf3e0797d3e92e71a89d4a044f8577e51e8f7fe3af0fe30d94e94b13 + checksum: 752499e18f81df789a9737936b2a83ea1db34bb2f983c80b394766796d853fa7d30701b52b9cb30ba943ad15286d8316603149683f4c553a5493aa78d89a76e0 languageName: node linkType: hard diff --git a/yarn.lock b/yarn.lock index 87e6ac97dd..6edf89a5fe 100644 --- a/yarn.lock +++ b/yarn.lock @@ -12150,90 +12150,90 @@ __metadata: languageName: node linkType: hard -"@swc/core-darwin-arm64@npm:1.3.16": - version: 1.3.16 - resolution: "@swc/core-darwin-arm64@npm:1.3.16" +"@swc/core-darwin-arm64@npm:1.3.19": + version: 1.3.19 + resolution: "@swc/core-darwin-arm64@npm:1.3.19" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"@swc/core-darwin-x64@npm:1.3.16": - version: 1.3.16 - resolution: "@swc/core-darwin-x64@npm:1.3.16" +"@swc/core-darwin-x64@npm:1.3.19": + version: 1.3.19 + resolution: "@swc/core-darwin-x64@npm:1.3.19" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"@swc/core-linux-arm-gnueabihf@npm:1.3.16": - version: 1.3.16 - resolution: "@swc/core-linux-arm-gnueabihf@npm:1.3.16" +"@swc/core-linux-arm-gnueabihf@npm:1.3.19": + version: 1.3.19 + resolution: "@swc/core-linux-arm-gnueabihf@npm:1.3.19" conditions: os=linux & cpu=arm languageName: node linkType: hard -"@swc/core-linux-arm64-gnu@npm:1.3.16": - version: 1.3.16 - resolution: "@swc/core-linux-arm64-gnu@npm:1.3.16" +"@swc/core-linux-arm64-gnu@npm:1.3.19": + version: 1.3.19 + resolution: "@swc/core-linux-arm64-gnu@npm:1.3.19" conditions: os=linux & cpu=arm64 & libc=glibc languageName: node linkType: hard -"@swc/core-linux-arm64-musl@npm:1.3.16": - version: 1.3.16 - resolution: "@swc/core-linux-arm64-musl@npm:1.3.16" +"@swc/core-linux-arm64-musl@npm:1.3.19": + version: 1.3.19 + resolution: "@swc/core-linux-arm64-musl@npm:1.3.19" conditions: os=linux & cpu=arm64 & libc=musl languageName: node linkType: hard -"@swc/core-linux-x64-gnu@npm:1.3.16": - version: 1.3.16 - resolution: "@swc/core-linux-x64-gnu@npm:1.3.16" +"@swc/core-linux-x64-gnu@npm:1.3.19": + version: 1.3.19 + resolution: "@swc/core-linux-x64-gnu@npm:1.3.19" conditions: os=linux & cpu=x64 & libc=glibc languageName: node linkType: hard -"@swc/core-linux-x64-musl@npm:1.3.16": - version: 1.3.16 - resolution: "@swc/core-linux-x64-musl@npm:1.3.16" +"@swc/core-linux-x64-musl@npm:1.3.19": + version: 1.3.19 + resolution: "@swc/core-linux-x64-musl@npm:1.3.19" conditions: os=linux & cpu=x64 & libc=musl languageName: node linkType: hard -"@swc/core-win32-arm64-msvc@npm:1.3.16": - version: 1.3.16 - resolution: "@swc/core-win32-arm64-msvc@npm:1.3.16" +"@swc/core-win32-arm64-msvc@npm:1.3.19": + version: 1.3.19 + resolution: "@swc/core-win32-arm64-msvc@npm:1.3.19" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard -"@swc/core-win32-ia32-msvc@npm:1.3.16": - version: 1.3.16 - resolution: "@swc/core-win32-ia32-msvc@npm:1.3.16" +"@swc/core-win32-ia32-msvc@npm:1.3.19": + version: 1.3.19 + resolution: "@swc/core-win32-ia32-msvc@npm:1.3.19" conditions: os=win32 & cpu=ia32 languageName: node linkType: hard -"@swc/core-win32-x64-msvc@npm:1.3.16": - version: 1.3.16 - resolution: "@swc/core-win32-x64-msvc@npm:1.3.16" +"@swc/core-win32-x64-msvc@npm:1.3.19": + version: 1.3.19 + resolution: "@swc/core-win32-x64-msvc@npm:1.3.19" conditions: os=win32 & cpu=x64 languageName: node linkType: hard "@swc/core@npm:^1.3.9": - version: 1.3.16 - resolution: "@swc/core@npm:1.3.16" + version: 1.3.19 + resolution: "@swc/core@npm:1.3.19" dependencies: - "@swc/core-darwin-arm64": 1.3.16 - "@swc/core-darwin-x64": 1.3.16 - "@swc/core-linux-arm-gnueabihf": 1.3.16 - "@swc/core-linux-arm64-gnu": 1.3.16 - "@swc/core-linux-arm64-musl": 1.3.16 - "@swc/core-linux-x64-gnu": 1.3.16 - "@swc/core-linux-x64-musl": 1.3.16 - "@swc/core-win32-arm64-msvc": 1.3.16 - "@swc/core-win32-ia32-msvc": 1.3.16 - "@swc/core-win32-x64-msvc": 1.3.16 + "@swc/core-darwin-arm64": 1.3.19 + "@swc/core-darwin-x64": 1.3.19 + "@swc/core-linux-arm-gnueabihf": 1.3.19 + "@swc/core-linux-arm64-gnu": 1.3.19 + "@swc/core-linux-arm64-musl": 1.3.19 + "@swc/core-linux-x64-gnu": 1.3.19 + "@swc/core-linux-x64-musl": 1.3.19 + "@swc/core-win32-arm64-msvc": 1.3.19 + "@swc/core-win32-ia32-msvc": 1.3.19 + "@swc/core-win32-x64-msvc": 1.3.19 dependenciesMeta: "@swc/core-darwin-arm64": optional: true @@ -12257,7 +12257,7 @@ __metadata: optional: true bin: swcx: run_swcx.js - checksum: 4361252c928c487a02f526aecd8f3072b923244234c2701916944cf13c252b6d5ce2466caf3e0797d3e92e71a89d4a044f8577e51e8f7fe3af0fe30d94e94b13 + checksum: 752499e18f81df789a9737936b2a83ea1db34bb2f983c80b394766796d853fa7d30701b52b9cb30ba943ad15286d8316603149683f4c553a5493aa78d89a76e0 languageName: node linkType: hard From 99014b723e28d9dc3109db22fcb4e127f2484585 Mon Sep 17 00:00:00 2001 From: Maximilian Vorbrodt Date: Mon, 21 Nov 2022 11:23:52 +0100 Subject: [PATCH 47/73] surface prop for growing or containing height of graph Signed-off-by: Maximilian Vorbrodt --- .../components/DependencyGraph/DependencyGraph.tsx | 13 ++++++++++++- .../GroupsExplorerContent/GroupsDiagram.tsx | 1 + 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/packages/core-components/src/components/DependencyGraph/DependencyGraph.tsx b/packages/core-components/src/components/DependencyGraph/DependencyGraph.tsx index 5b26629082..94d152ce1e 100644 --- a/packages/core-components/src/components/DependencyGraph/DependencyGraph.tsx +++ b/packages/core-components/src/components/DependencyGraph/DependencyGraph.tsx @@ -170,6 +170,14 @@ export interface DependencyGraphProps * Default: 'curveMonotoneX' */ curve?: 'curveStepBefore' | 'curveMonotoneX'; + /** + * Controls if the graph should be contained or grow + * + * @remarks + * + * Default: 'grow' + */ + fit?: 'grow' | 'contain'; } const WORKSPACE_ID = 'workspace'; @@ -203,6 +211,7 @@ export function DependencyGraph( defs, zoom = 'enabled', curve = 'curveMonotoneX', + fit = 'grow', ...svgProps } = props; const theme: BackstageTheme = useTheme(); @@ -225,6 +234,8 @@ export function DependencyGraph( const maxHeight = Math.max(graphHeight, containerHeight); const minHeight = Math.min(graphHeight, containerHeight); + const scalableHeight = fit === 'grow' ? maxHeight : minHeight; + const containerRef = React.useMemo( () => debounce((node: SVGSVGElement) => { @@ -395,7 +406,7 @@ export function DependencyGraph( ref={containerRef} {...svgProps} width="100%" - height={minHeight} + height={scalableHeight} viewBox={`0 0 ${maxWidth} ${maxHeight}`} > diff --git a/plugins/explore/src/components/GroupsExplorerContent/GroupsDiagram.tsx b/plugins/explore/src/components/GroupsExplorerContent/GroupsDiagram.tsx index d00eddb35e..674ef1e43f 100644 --- a/plugins/explore/src/components/GroupsExplorerContent/GroupsDiagram.tsx +++ b/plugins/explore/src/components/GroupsExplorerContent/GroupsDiagram.tsx @@ -240,6 +240,7 @@ export function GroupsDiagram() { direction={DependencyGraphTypes.Direction.RIGHT_LEFT} renderNode={RenderNode} className={classes.graph} + fit="contain" /> Date: Mon, 21 Nov 2022 11:29:45 +0100 Subject: [PATCH 48/73] update changeset Signed-off-by: Maximilian Vorbrodt --- .changeset/hip-stingrays-kneel.md | 5 +++++ .changeset/lucky-carrots-stare.md | 6 ------ .changeset/new-bugs-march.md | 5 +++++ 3 files changed, 10 insertions(+), 6 deletions(-) create mode 100644 .changeset/hip-stingrays-kneel.md delete mode 100644 .changeset/lucky-carrots-stare.md create mode 100644 .changeset/new-bugs-march.md diff --git a/.changeset/hip-stingrays-kneel.md b/.changeset/hip-stingrays-kneel.md new file mode 100644 index 0000000000..1a8142b7c9 --- /dev/null +++ b/.changeset/hip-stingrays-kneel.md @@ -0,0 +1,5 @@ +--- +'@backstage/core-components': patch +--- + +Create a minHeight variable and add a prop named 'fit' for determining if the graph height should grow or be contained. diff --git a/.changeset/lucky-carrots-stare.md b/.changeset/lucky-carrots-stare.md deleted file mode 100644 index 81ad1b7268..0000000000 --- a/.changeset/lucky-carrots-stare.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -'@backstage/core-components': patch -'@backstage/plugin-explore': patch ---- - -Adds a background to GroupsDiagram and makes the graph fill up all the visible space on the page for, making it so the user does not have to scroll up or down on the page. diff --git a/.changeset/new-bugs-march.md b/.changeset/new-bugs-march.md new file mode 100644 index 0000000000..346f5a151e --- /dev/null +++ b/.changeset/new-bugs-march.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-explore': patch +--- + +Adds styling to graph forcing it to always fill out the available space. From 7913136f4aea7535cb7aa432b6f7063a4fa8c081 Mon Sep 17 00:00:00 2001 From: Maximilian Vorbrodt Date: Mon, 21 Nov 2022 11:34:43 +0100 Subject: [PATCH 49/73] fix spelling changeset Signed-off-by: Maximilian Vorbrodt --- .changeset/hip-stingrays-kneel.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.changeset/hip-stingrays-kneel.md b/.changeset/hip-stingrays-kneel.md index 1a8142b7c9..171e9257f2 100644 --- a/.changeset/hip-stingrays-kneel.md +++ b/.changeset/hip-stingrays-kneel.md @@ -2,4 +2,4 @@ '@backstage/core-components': patch --- -Create a minHeight variable and add a prop named 'fit' for determining if the graph height should grow or be contained. +Create a variable for minimum height and add a prop named 'fit' for determining if the graph height should grow or be contained. From e006badb53d32d7abaad42961a0b28e2af4a7811 Mon Sep 17 00:00:00 2001 From: Maximilian Vorbrodt Date: Mon, 21 Nov 2022 12:04:59 +0100 Subject: [PATCH 50/73] update public API report of the package Signed-off-by: Maximilian Vorbrodt --- packages/core-components/api-report.md | 1 + 1 file changed, 1 insertion(+) diff --git a/packages/core-components/api-report.md b/packages/core-components/api-report.md index fc3ab4e5fc..248b9e227c 100644 --- a/packages/core-components/api-report.md +++ b/packages/core-components/api-report.md @@ -250,6 +250,7 @@ export interface DependencyGraphProps edgeRanks?: number; edges: DependencyEdge[]; edgeWeight?: number; + fit?: 'grow' | 'contain'; labelOffset?: number; // Warning: (ae-unresolved-link) The @link reference could not be resolved: This type of declaration is not supported yet by the resolver labelPosition?: LabelPosition; From 87d9610984a980eaf35e6a040de5040ee5b5ec7e Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 21 Nov 2022 11:52:31 +0000 Subject: [PATCH 51/73] Update dependency @types/dockerode to v3.3.14 Signed-off-by: Renovate Bot --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index be413cbe94..d09015bd75 100644 --- a/yarn.lock +++ b/yarn.lock @@ -12971,12 +12971,12 @@ __metadata: linkType: hard "@types/dockerode@npm:^3.3.0, @types/dockerode@npm:^3.3.8": - version: 3.3.13 - resolution: "@types/dockerode@npm:3.3.13" + version: 3.3.14 + resolution: "@types/dockerode@npm:3.3.14" dependencies: "@types/docker-modem": "*" "@types/node": "*" - checksum: dbcf3e33f5d8b731a1540d8b72c91d12583eb87d47adf8defb71f8bc1b328a26a035c66068255929ef99a7906da53ac6e4be76099e8fa7e9720c134b1ab3e153 + checksum: 6a8472622861fb0c97908963a8236d6e439c9feefc845b866326272ad0e5c33f537206fb4633424c5e3c8ec63559cb14bc737e2f88f0fcdf11496a9162d5b139 languageName: node linkType: hard From 7a3d2688edd86c86f48c9f6583aa47d94ac190a7 Mon Sep 17 00:00:00 2001 From: ivgo Date: Mon, 21 Nov 2022 15:00:45 +0100 Subject: [PATCH 52/73] Use promise Router & add known error in Vault backend Signed-off-by: ivgo --- .changeset/twelve-meals-smell.md | 6 ++++++ plugins/vault-backend/src/service/VaultBuilder.ts | 3 ++- plugins/vault-backend/src/service/vaultApi.ts | 4 +++- 3 files changed, 11 insertions(+), 2 deletions(-) create mode 100644 .changeset/twelve-meals-smell.md diff --git a/.changeset/twelve-meals-smell.md b/.changeset/twelve-meals-smell.md new file mode 100644 index 0000000000..a9d64823a3 --- /dev/null +++ b/.changeset/twelve-meals-smell.md @@ -0,0 +1,6 @@ +--- +'@backstage/plugin-vault-backend': patch +--- + +Use `express-promise-router` to catch errors properly. +Add `403` error as a known one. It will now return a `NotAllowed` error. diff --git a/plugins/vault-backend/src/service/VaultBuilder.ts b/plugins/vault-backend/src/service/VaultBuilder.ts index b82a5802bb..788b90ff01 100644 --- a/plugins/vault-backend/src/service/VaultBuilder.ts +++ b/plugins/vault-backend/src/service/VaultBuilder.ts @@ -17,7 +17,8 @@ import { Config } from '@backstage/config'; import { InputError } from '@backstage/errors'; import { Logger } from 'winston'; -import express, { Router } from 'express'; +import express from 'express'; +import Router from 'express-promise-router'; import { VaultClient } from './vaultApi'; import { TaskRunner, PluginTaskScheduler } from '@backstage/backend-tasks'; import { errorHandler } from '@backstage/backend-common'; diff --git a/plugins/vault-backend/src/service/vaultApi.ts b/plugins/vault-backend/src/service/vaultApi.ts index 785352fea8..ea588964dc 100644 --- a/plugins/vault-backend/src/service/vaultApi.ts +++ b/plugins/vault-backend/src/service/vaultApi.ts @@ -15,7 +15,7 @@ */ import { Config } from '@backstage/config'; -import { NotFoundError } from '@backstage/errors'; +import { NotAllowedError, NotFoundError } from '@backstage/errors'; import fetch from 'node-fetch'; import plimit from 'p-limit'; import { getVaultConfig, VaultConfig } from '../config'; @@ -103,6 +103,8 @@ export class VaultClient implements VaultApi { return (await response.json()) as T; } else if (response.status === 404) { throw new NotFoundError(`No secrets found in path '${path}'`); + } else if (response.status === 403) { + throw new NotAllowedError(response.statusText); } throw new Error( `Unexpected error while fetching secrets from path '${path}'`, From f8cfa44bb584dc0e9f66a23a5e4ae451e604eb7b Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 21 Nov 2022 14:11:43 +0000 Subject: [PATCH 53/73] Update dependency esbuild to v0.15.15 Signed-off-by: Renovate Bot --- yarn.lock | 182 +++++++++++++++++++++++++++--------------------------- 1 file changed, 91 insertions(+), 91 deletions(-) diff --git a/yarn.lock b/yarn.lock index 7b79b050f3..49e22b1776 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8178,16 +8178,16 @@ __metadata: languageName: node linkType: hard -"@esbuild/android-arm@npm:0.15.13": - version: 0.15.13 - resolution: "@esbuild/android-arm@npm:0.15.13" +"@esbuild/android-arm@npm:0.15.15": + version: 0.15.15 + resolution: "@esbuild/android-arm@npm:0.15.15" conditions: os=android & cpu=arm languageName: node linkType: hard -"@esbuild/linux-loong64@npm:0.15.13": - version: 0.15.13 - resolution: "@esbuild/linux-loong64@npm:0.15.13" +"@esbuild/linux-loong64@npm:0.15.15": + version: 0.15.15 + resolution: "@esbuild/linux-loong64@npm:0.15.15" conditions: os=linux & cpu=loong64 languageName: node linkType: hard @@ -20060,100 +20060,100 @@ __metadata: languageName: node linkType: hard -"esbuild-android-64@npm:0.15.13": - version: 0.15.13 - resolution: "esbuild-android-64@npm:0.15.13" +"esbuild-android-64@npm:0.15.15": + version: 0.15.15 + resolution: "esbuild-android-64@npm:0.15.15" conditions: os=android & cpu=x64 languageName: node linkType: hard -"esbuild-android-arm64@npm:0.15.13": - version: 0.15.13 - resolution: "esbuild-android-arm64@npm:0.15.13" +"esbuild-android-arm64@npm:0.15.15": + version: 0.15.15 + resolution: "esbuild-android-arm64@npm:0.15.15" conditions: os=android & cpu=arm64 languageName: node linkType: hard -"esbuild-darwin-64@npm:0.15.13": - version: 0.15.13 - resolution: "esbuild-darwin-64@npm:0.15.13" +"esbuild-darwin-64@npm:0.15.15": + version: 0.15.15 + resolution: "esbuild-darwin-64@npm:0.15.15" conditions: os=darwin & cpu=x64 languageName: node linkType: hard -"esbuild-darwin-arm64@npm:0.15.13": - version: 0.15.13 - resolution: "esbuild-darwin-arm64@npm:0.15.13" +"esbuild-darwin-arm64@npm:0.15.15": + version: 0.15.15 + resolution: "esbuild-darwin-arm64@npm:0.15.15" conditions: os=darwin & cpu=arm64 languageName: node linkType: hard -"esbuild-freebsd-64@npm:0.15.13": - version: 0.15.13 - resolution: "esbuild-freebsd-64@npm:0.15.13" +"esbuild-freebsd-64@npm:0.15.15": + version: 0.15.15 + resolution: "esbuild-freebsd-64@npm:0.15.15" conditions: os=freebsd & cpu=x64 languageName: node linkType: hard -"esbuild-freebsd-arm64@npm:0.15.13": - version: 0.15.13 - resolution: "esbuild-freebsd-arm64@npm:0.15.13" +"esbuild-freebsd-arm64@npm:0.15.15": + version: 0.15.15 + resolution: "esbuild-freebsd-arm64@npm:0.15.15" conditions: os=freebsd & cpu=arm64 languageName: node linkType: hard -"esbuild-linux-32@npm:0.15.13": - version: 0.15.13 - resolution: "esbuild-linux-32@npm:0.15.13" +"esbuild-linux-32@npm:0.15.15": + version: 0.15.15 + resolution: "esbuild-linux-32@npm:0.15.15" conditions: os=linux & cpu=ia32 languageName: node linkType: hard -"esbuild-linux-64@npm:0.15.13": - version: 0.15.13 - resolution: "esbuild-linux-64@npm:0.15.13" +"esbuild-linux-64@npm:0.15.15": + version: 0.15.15 + resolution: "esbuild-linux-64@npm:0.15.15" conditions: os=linux & cpu=x64 languageName: node linkType: hard -"esbuild-linux-arm64@npm:0.15.13": - version: 0.15.13 - resolution: "esbuild-linux-arm64@npm:0.15.13" +"esbuild-linux-arm64@npm:0.15.15": + version: 0.15.15 + resolution: "esbuild-linux-arm64@npm:0.15.15" conditions: os=linux & cpu=arm64 languageName: node linkType: hard -"esbuild-linux-arm@npm:0.15.13": - version: 0.15.13 - resolution: "esbuild-linux-arm@npm:0.15.13" +"esbuild-linux-arm@npm:0.15.15": + version: 0.15.15 + resolution: "esbuild-linux-arm@npm:0.15.15" conditions: os=linux & cpu=arm languageName: node linkType: hard -"esbuild-linux-mips64le@npm:0.15.13": - version: 0.15.13 - resolution: "esbuild-linux-mips64le@npm:0.15.13" +"esbuild-linux-mips64le@npm:0.15.15": + version: 0.15.15 + resolution: "esbuild-linux-mips64le@npm:0.15.15" conditions: os=linux & cpu=mips64el languageName: node linkType: hard -"esbuild-linux-ppc64le@npm:0.15.13": - version: 0.15.13 - resolution: "esbuild-linux-ppc64le@npm:0.15.13" +"esbuild-linux-ppc64le@npm:0.15.15": + version: 0.15.15 + resolution: "esbuild-linux-ppc64le@npm:0.15.15" conditions: os=linux & cpu=ppc64 languageName: node linkType: hard -"esbuild-linux-riscv64@npm:0.15.13": - version: 0.15.13 - resolution: "esbuild-linux-riscv64@npm:0.15.13" +"esbuild-linux-riscv64@npm:0.15.15": + version: 0.15.15 + resolution: "esbuild-linux-riscv64@npm:0.15.15" conditions: os=linux & cpu=riscv64 languageName: node linkType: hard -"esbuild-linux-s390x@npm:0.15.13": - version: 0.15.13 - resolution: "esbuild-linux-s390x@npm:0.15.13" +"esbuild-linux-s390x@npm:0.15.15": + version: 0.15.15 + resolution: "esbuild-linux-s390x@npm:0.15.15" conditions: os=linux & cpu=s390x languageName: node linkType: hard @@ -20174,74 +20174,74 @@ __metadata: languageName: node linkType: hard -"esbuild-netbsd-64@npm:0.15.13": - version: 0.15.13 - resolution: "esbuild-netbsd-64@npm:0.15.13" +"esbuild-netbsd-64@npm:0.15.15": + version: 0.15.15 + resolution: "esbuild-netbsd-64@npm:0.15.15" conditions: os=netbsd & cpu=x64 languageName: node linkType: hard -"esbuild-openbsd-64@npm:0.15.13": - version: 0.15.13 - resolution: "esbuild-openbsd-64@npm:0.15.13" +"esbuild-openbsd-64@npm:0.15.15": + version: 0.15.15 + resolution: "esbuild-openbsd-64@npm:0.15.15" conditions: os=openbsd & cpu=x64 languageName: node linkType: hard -"esbuild-sunos-64@npm:0.15.13": - version: 0.15.13 - resolution: "esbuild-sunos-64@npm:0.15.13" +"esbuild-sunos-64@npm:0.15.15": + version: 0.15.15 + resolution: "esbuild-sunos-64@npm:0.15.15" conditions: os=sunos & cpu=x64 languageName: node linkType: hard -"esbuild-windows-32@npm:0.15.13": - version: 0.15.13 - resolution: "esbuild-windows-32@npm:0.15.13" +"esbuild-windows-32@npm:0.15.15": + version: 0.15.15 + resolution: "esbuild-windows-32@npm:0.15.15" conditions: os=win32 & cpu=ia32 languageName: node linkType: hard -"esbuild-windows-64@npm:0.15.13": - version: 0.15.13 - resolution: "esbuild-windows-64@npm:0.15.13" +"esbuild-windows-64@npm:0.15.15": + version: 0.15.15 + resolution: "esbuild-windows-64@npm:0.15.15" conditions: os=win32 & cpu=x64 languageName: node linkType: hard -"esbuild-windows-arm64@npm:0.15.13": - version: 0.15.13 - resolution: "esbuild-windows-arm64@npm:0.15.13" +"esbuild-windows-arm64@npm:0.15.15": + version: 0.15.15 + resolution: "esbuild-windows-arm64@npm:0.15.15" conditions: os=win32 & cpu=arm64 languageName: node linkType: hard "esbuild@npm:^0.15.0, esbuild@npm:^0.15.6": - version: 0.15.13 - resolution: "esbuild@npm:0.15.13" + version: 0.15.15 + resolution: "esbuild@npm:0.15.15" dependencies: - "@esbuild/android-arm": 0.15.13 - "@esbuild/linux-loong64": 0.15.13 - esbuild-android-64: 0.15.13 - esbuild-android-arm64: 0.15.13 - esbuild-darwin-64: 0.15.13 - esbuild-darwin-arm64: 0.15.13 - esbuild-freebsd-64: 0.15.13 - esbuild-freebsd-arm64: 0.15.13 - esbuild-linux-32: 0.15.13 - esbuild-linux-64: 0.15.13 - esbuild-linux-arm: 0.15.13 - esbuild-linux-arm64: 0.15.13 - esbuild-linux-mips64le: 0.15.13 - esbuild-linux-ppc64le: 0.15.13 - esbuild-linux-riscv64: 0.15.13 - esbuild-linux-s390x: 0.15.13 - esbuild-netbsd-64: 0.15.13 - esbuild-openbsd-64: 0.15.13 - esbuild-sunos-64: 0.15.13 - esbuild-windows-32: 0.15.13 - esbuild-windows-64: 0.15.13 - esbuild-windows-arm64: 0.15.13 + "@esbuild/android-arm": 0.15.15 + "@esbuild/linux-loong64": 0.15.15 + esbuild-android-64: 0.15.15 + esbuild-android-arm64: 0.15.15 + esbuild-darwin-64: 0.15.15 + esbuild-darwin-arm64: 0.15.15 + esbuild-freebsd-64: 0.15.15 + esbuild-freebsd-arm64: 0.15.15 + esbuild-linux-32: 0.15.15 + esbuild-linux-64: 0.15.15 + esbuild-linux-arm: 0.15.15 + esbuild-linux-arm64: 0.15.15 + esbuild-linux-mips64le: 0.15.15 + esbuild-linux-ppc64le: 0.15.15 + esbuild-linux-riscv64: 0.15.15 + esbuild-linux-s390x: 0.15.15 + esbuild-netbsd-64: 0.15.15 + esbuild-openbsd-64: 0.15.15 + esbuild-sunos-64: 0.15.15 + esbuild-windows-32: 0.15.15 + esbuild-windows-64: 0.15.15 + esbuild-windows-arm64: 0.15.15 dependenciesMeta: "@esbuild/android-arm": optional: true @@ -20289,7 +20289,7 @@ __metadata: optional: true bin: esbuild: bin/esbuild - checksum: ef5f339fae7e2abc4ec5484d4b301efdf40f580e043cbf8a66e19d6c91df82368a810abec61fd5e5db226f0c354f49c36616c9ea04c5412a142a050c10239bf7 + checksum: 9a194a310ac7d6989d1fe7354901d531d3b0d4cc1897a85a7cb9f1ae0fe8d82eb59747e63c91f676bab7bed8d6a1f28f620d49f043e7bd6203f9afe34031f739 languageName: node linkType: hard From b9360478de845f7d56bfc73ca020170577aa67c2 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 21 Nov 2022 15:10:10 +0000 Subject: [PATCH 54/73] Update dependency @graphql-tools/schema to v9.0.10 Signed-off-by: Renovate Bot --- yarn.lock | 33 +++++++++++---------------------- 1 file changed, 11 insertions(+), 22 deletions(-) diff --git a/yarn.lock b/yarn.lock index 0bc2702bd3..caeb409e14 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8724,15 +8724,15 @@ __metadata: languageName: node linkType: hard -"@graphql-tools/merge@npm:8.3.11, @graphql-tools/merge@npm:^8.2.6": - version: 8.3.11 - resolution: "@graphql-tools/merge@npm:8.3.11" +"@graphql-tools/merge@npm:8.3.12, @graphql-tools/merge@npm:^8.2.6": + version: 8.3.12 + resolution: "@graphql-tools/merge@npm:8.3.12" dependencies: - "@graphql-tools/utils": 9.1.0 + "@graphql-tools/utils": 9.1.1 tslib: ^2.4.0 peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 3cd16577f1ea1bcc389d232fa620adc0fefc91a6b42b48e7bb5e7bb67b67d206d409a9a8d60cac4d8cd5f0f1c5353369f7c5eb4054b44ce2277545e1fd1de17f + checksum: aab6f6edbaa2f63c7f44e4a1832d8028570d09ea85bb4a9525016879fad2ea2f8ea260c0b78ab1f6b7a418d92a3debfbbedecb3f5a36a5590edd0b2ac1cd2012 languageName: node linkType: hard @@ -8858,16 +8858,16 @@ __metadata: linkType: hard "@graphql-tools/schema@npm:^9.0.0": - version: 9.0.9 - resolution: "@graphql-tools/schema@npm:9.0.9" + version: 9.0.10 + resolution: "@graphql-tools/schema@npm:9.0.10" dependencies: - "@graphql-tools/merge": 8.3.11 - "@graphql-tools/utils": 9.1.0 + "@graphql-tools/merge": 8.3.12 + "@graphql-tools/utils": 9.1.1 tslib: ^2.4.0 value-or-promise: 1.0.11 peerDependencies: graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: 23620a993eff57723302315100d947b81664d6a1e00010ff293b3649f51ab423946d73920cce0ce822b7f7f42b99ea23240902ff47df3d252639613c0df7b971 + checksum: 4c1c7fc1c84a2faf2310a110ed72125b511371f1ea2869442fd55b5bcdb2c431dd60235ff77f32860235ee99dd12746e23dace35a18a8ffd339fad4f51004321 languageName: node linkType: hard @@ -8940,18 +8940,7 @@ __metadata: languageName: node linkType: hard -"@graphql-tools/utils@npm:9.1.0": - version: 9.1.0 - resolution: "@graphql-tools/utils@npm:9.1.0" - dependencies: - tslib: ^2.4.0 - peerDependencies: - graphql: ^14.0.0 || ^15.0.0 || ^16.0.0 || ^17.0.0 - checksum: dcf08df3bd1715e25e3b80bf2dd332376239ebcd2a9b93f4d6b72a7bd3feffe2207b9683bb8fcaed9d0d1286f701d0686fe99ac803b91c0df54509b869c0554d - languageName: node - linkType: hard - -"@graphql-tools/utils@npm:^9.1.1": +"@graphql-tools/utils@npm:9.1.1, @graphql-tools/utils@npm:^9.1.1": version: 9.1.1 resolution: "@graphql-tools/utils@npm:9.1.1" dependencies: From 7b78c0bac0da03b244cf60919a6ab9b15970414e Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 21 Nov 2022 15:12:31 +0000 Subject: [PATCH 55/73] Update dependency eslint-plugin-react to v7.31.11 Signed-off-by: Renovate Bot --- yarn.lock | 170 +++++++++++++++++++++++++++++++----------------------- 1 file changed, 98 insertions(+), 72 deletions(-) diff --git a/yarn.lock b/yarn.lock index 0bc2702bd3..abf7bb2434 100644 --- a/yarn.lock +++ b/yarn.lock @@ -15553,16 +15553,16 @@ __metadata: languageName: node linkType: hard -"array-includes@npm:^3.1.4, array-includes@npm:^3.1.5": - version: 3.1.5 - resolution: "array-includes@npm:3.1.5" +"array-includes@npm:^3.1.4, array-includes@npm:^3.1.5, array-includes@npm:^3.1.6": + version: 3.1.6 + resolution: "array-includes@npm:3.1.6" dependencies: call-bind: ^1.0.2 define-properties: ^1.1.4 - es-abstract: ^1.19.5 - get-intrinsic: ^1.1.1 + es-abstract: ^1.20.4 + get-intrinsic: ^1.1.3 is-string: ^1.0.7 - checksum: f6f24d834179604656b7bec3e047251d5cc87e9e87fab7c175c61af48e80e75acd296017abcde21fb52292ab6a2a449ab2ee37213ee48c8709f004d75983f9c5 + checksum: f22f8cd8ba8a6448d91eebdc69f04e4e55085d09232b5216ee2d476dab3ef59984e8d1889e662c6a0ed939dcb1b57fd05b2c0209c3370942fc41b752c82a2ca5 languageName: node linkType: hard @@ -15601,15 +15601,28 @@ __metadata: languageName: node linkType: hard -"array.prototype.flatmap@npm:^1.3.0": - version: 1.3.0 - resolution: "array.prototype.flatmap@npm:1.3.0" +"array.prototype.flatmap@npm:^1.3.1": + version: 1.3.1 + resolution: "array.prototype.flatmap@npm:1.3.1" dependencies: call-bind: ^1.0.2 - define-properties: ^1.1.3 - es-abstract: ^1.19.2 + define-properties: ^1.1.4 + es-abstract: ^1.20.4 es-shim-unscopables: ^1.0.0 - checksum: 818538f39409c4045d874be85df0dbd195e1446b14d22f95bdcfefea44ae77db44e42dcd89a559254ec5a7c8b338cfc986cc6d641e3472f9a5326b21eb2976a2 + checksum: 8c1c43a4995f12cf12523436da28515184c753807b3f0bc2ca6c075f71c470b099e2090cc67dba8e5280958fea401c1d0c59e1db0143272aef6cd1103921a987 + languageName: node + linkType: hard + +"array.prototype.tosorted@npm:^1.1.1": + version: 1.1.1 + resolution: "array.prototype.tosorted@npm:1.1.1" + dependencies: + call-bind: ^1.0.2 + define-properties: ^1.1.4 + es-abstract: ^1.20.4 + es-shim-unscopables: ^1.0.0 + get-intrinsic: ^1.1.3 + checksum: 7923324a67e70a2fc0a6e40237405d92395e45ebd76f5cb89c2a5cf1e66b47aca6baacd0cd628ffd88830b90d47fff268071493d09c9ae123645613dac2c2ca3 languageName: node linkType: hard @@ -19995,34 +20008,35 @@ __metadata: languageName: node linkType: hard -"es-abstract@npm:^1.18.0-next.1, es-abstract@npm:^1.18.0-next.2, es-abstract@npm:^1.19.0, es-abstract@npm:^1.19.1, es-abstract@npm:^1.19.2, es-abstract@npm:^1.19.5": - version: 1.20.1 - resolution: "es-abstract@npm:1.20.1" +"es-abstract@npm:^1.18.0-next.1, es-abstract@npm:^1.18.0-next.2, es-abstract@npm:^1.19.0, es-abstract@npm:^1.19.2, es-abstract@npm:^1.19.5, es-abstract@npm:^1.20.4": + version: 1.20.4 + resolution: "es-abstract@npm:1.20.4" dependencies: call-bind: ^1.0.2 es-to-primitive: ^1.2.1 function-bind: ^1.1.1 function.prototype.name: ^1.1.5 - get-intrinsic: ^1.1.1 + get-intrinsic: ^1.1.3 get-symbol-description: ^1.0.0 has: ^1.0.3 has-property-descriptors: ^1.0.0 has-symbols: ^1.0.3 internal-slot: ^1.0.3 - is-callable: ^1.2.4 + is-callable: ^1.2.7 is-negative-zero: ^2.0.2 is-regex: ^1.1.4 is-shared-array-buffer: ^1.0.2 is-string: ^1.0.7 is-weakref: ^1.0.2 - object-inspect: ^1.12.0 + object-inspect: ^1.12.2 object-keys: ^1.1.1 - object.assign: ^4.1.2 + object.assign: ^4.1.4 regexp.prototype.flags: ^1.4.3 + safe-regex-test: ^1.0.0 string.prototype.trimend: ^1.0.5 string.prototype.trimstart: ^1.0.5 unbox-primitive: ^1.0.2 - checksum: 28da27ae0ed9c76df7ee8ef5c278df79dcfdb554415faf7068bb7c58f8ba8e2a16bfb59e586844be6429ab4c302ca7748979d48442224cb1140b051866d74b7f + checksum: 89297cc785c31aedf961a603d5a07ed16471e435d3a1b6d070b54f157cf48454b95cda2ac55e4b86ff4fe3276e835fcffd2771578e6fa634337da49b26826141 languageName: node linkType: hard @@ -20543,26 +20557,27 @@ __metadata: linkType: hard "eslint-plugin-react@npm:^7.28.0": - version: 7.31.10 - resolution: "eslint-plugin-react@npm:7.31.10" + version: 7.31.11 + resolution: "eslint-plugin-react@npm:7.31.11" dependencies: - array-includes: ^3.1.5 - array.prototype.flatmap: ^1.3.0 + array-includes: ^3.1.6 + array.prototype.flatmap: ^1.3.1 + array.prototype.tosorted: ^1.1.1 doctrine: ^2.1.0 estraverse: ^5.3.0 jsx-ast-utils: ^2.4.1 || ^3.0.0 minimatch: ^3.1.2 - object.entries: ^1.1.5 - object.fromentries: ^2.0.5 - object.hasown: ^1.1.1 - object.values: ^1.1.5 + object.entries: ^1.1.6 + object.fromentries: ^2.0.6 + object.hasown: ^1.1.2 + object.values: ^1.1.6 prop-types: ^15.8.1 resolve: ^2.0.0-next.3 semver: ^6.3.0 - string.prototype.matchall: ^4.0.7 + string.prototype.matchall: ^4.0.8 peerDependencies: eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 - checksum: f013669c296483559a760648fa06425f161b1aff93c668f14c4561c933d22a7836b745b88a795c53cab929c71513d5fd1f2ffdddff915709f01b77ac25f5b71b + checksum: a3d612f6647bef33cf2a67c81a6b37b42c075300ed079cffecf5fb475c0d6ab855c1de340d1cbf361a0126429fb906dda597527235d2d12c4404453dbc712fc6 languageName: node linkType: hard @@ -22218,14 +22233,14 @@ __metadata: languageName: node linkType: hard -"get-intrinsic@npm:^1.0.2, get-intrinsic@npm:^1.1.0, get-intrinsic@npm:^1.1.1": - version: 1.1.2 - resolution: "get-intrinsic@npm:1.1.2" +"get-intrinsic@npm:^1.0.2, get-intrinsic@npm:^1.1.0, get-intrinsic@npm:^1.1.1, get-intrinsic@npm:^1.1.3": + version: 1.1.3 + resolution: "get-intrinsic@npm:1.1.3" dependencies: function-bind: ^1.1.1 has: ^1.0.3 has-symbols: ^1.0.3 - checksum: 252f45491f2ba88ebf5b38018020c7cc3279de54b1d67ffb70c0cdf1dfa8ab31cd56467b5d117a8b4275b7a4dde91f86766b163a17a850f036528a7b2faafb2b + checksum: 152d79e87251d536cf880ba75cfc3d6c6c50e12b3a64e1ea960e73a3752b47c69f46034456eae1b0894359ce3bc64c55c186f2811f8a788b75b638b06fab228a languageName: node linkType: hard @@ -23960,10 +23975,10 @@ __metadata: languageName: node linkType: hard -"is-callable@npm:^1.1.4, is-callable@npm:^1.2.4": - version: 1.2.4 - resolution: "is-callable@npm:1.2.4" - checksum: 1a28d57dc435797dae04b173b65d6d1e77d4f16276e9eff973f994eadcfdc30a017e6a597f092752a083c1103cceb56c91e3dadc6692fedb9898dfaba701575f +"is-callable@npm:^1.1.4, is-callable@npm:^1.2.7": + version: 1.2.7 + resolution: "is-callable@npm:1.2.7" + checksum: 61fd57d03b0d984e2ed3720fb1c7a897827ea174bd44402878e059542ea8c4aeedee0ea0985998aa5cc2736b2fa6e271c08587addb5b3959ac52cf665173d1ac languageName: node linkType: hard @@ -28875,7 +28890,7 @@ __metadata: languageName: node linkType: hard -"object-inspect@npm:^1.12.0, object-inspect@npm:^1.12.2, object-inspect@npm:^1.9.0": +"object-inspect@npm:^1.12.2, object-inspect@npm:^1.9.0": version: 1.12.2 resolution: "object-inspect@npm:1.12.2" checksum: a534fc1b8534284ed71f25ce3a496013b7ea030f3d1b77118f6b7b1713829262be9e6243acbcb3ef8c626e2b64186112cb7f6db74e37b2789b9c789ca23048b2 @@ -28889,7 +28904,7 @@ __metadata: languageName: node linkType: hard -"object.assign@npm:^4.1.0, object.assign@npm:^4.1.2": +"object.assign@npm:^4.1.0, object.assign@npm:^4.1.2, object.assign@npm:^4.1.4": version: 4.1.4 resolution: "object.assign@npm:4.1.4" dependencies: @@ -28901,46 +28916,46 @@ __metadata: languageName: node linkType: hard -"object.entries@npm:^1.1.5": - version: 1.1.5 - resolution: "object.entries@npm:1.1.5" +"object.entries@npm:^1.1.6": + version: 1.1.6 + resolution: "object.entries@npm:1.1.6" dependencies: call-bind: ^1.0.2 - define-properties: ^1.1.3 - es-abstract: ^1.19.1 - checksum: d658696f74fd222060d8428d2a9fda2ce736b700cb06f6bdf4a16a1892d145afb746f453502b2fa55d1dca8ead6f14ddbcf66c545df45adadea757a6c4cd86c7 + define-properties: ^1.1.4 + es-abstract: ^1.20.4 + checksum: 0f8c47517e6a9a980241eafe3b73de11e59511883173c2b93d67424a008e47e11b77c80e431ad1d8a806f6108b225a1cab9223e53e555776c612a24297117d28 languageName: node linkType: hard -"object.fromentries@npm:^2.0.5": - version: 2.0.5 - resolution: "object.fromentries@npm:2.0.5" +"object.fromentries@npm:^2.0.6": + version: 2.0.6 + resolution: "object.fromentries@npm:2.0.6" dependencies: call-bind: ^1.0.2 - define-properties: ^1.1.3 - es-abstract: ^1.19.1 - checksum: 61a0b565ded97b76df9e30b569729866e1824cce902f98e90bb106e84f378aea20163366f66dc75c9000e2aad2ed0caf65c6f530cb2abc4c0c0f6c982102db4b + define-properties: ^1.1.4 + es-abstract: ^1.20.4 + checksum: 453c6d694180c0c30df451b60eaf27a5b9bca3fb43c37908fd2b78af895803dc631242bcf05582173afa40d8d0e9c96e16e8874b39471aa53f3ac1f98a085d85 languageName: node linkType: hard -"object.hasown@npm:^1.1.1": - version: 1.1.1 - resolution: "object.hasown@npm:1.1.1" +"object.hasown@npm:^1.1.2": + version: 1.1.2 + resolution: "object.hasown@npm:1.1.2" dependencies: define-properties: ^1.1.4 - es-abstract: ^1.19.5 - checksum: d8ed4907ce57f48b93e3b53c418fd6787bf226a51e8d698c91e39b78e80fe5b124cb6282f6a9d5be21cf9e2c7829ab10206dcc6112b7748860eefe641880c793 + es-abstract: ^1.20.4 + checksum: b936572536db0cdf38eb30afd2f1026a8b6f2cc5d2c4497c9d9bbb01eaf3e980dead4fd07580cfdd098e6383e5a9db8212d3ea0c6bdd2b5e68c60aa7e3b45566 languageName: node linkType: hard -"object.values@npm:^1.1.5": - version: 1.1.5 - resolution: "object.values@npm:1.1.5" +"object.values@npm:^1.1.5, object.values@npm:^1.1.6": + version: 1.1.6 + resolution: "object.values@npm:1.1.6" dependencies: call-bind: ^1.0.2 - define-properties: ^1.1.3 - es-abstract: ^1.19.1 - checksum: 0f17e99741ebfbd0fa55ce942f6184743d3070c61bd39221afc929c8422c4907618c8da694c6915bc04a83ab3224260c779ba37fc07bb668bdc5f33b66a902a4 + define-properties: ^1.1.4 + es-abstract: ^1.20.4 + checksum: f6fff9fd817c24cfd8107f50fb33061d81cd11bacc4e3dbb3852e9ff7692fde4dbce823d4333ea27cd9637ef1b6690df5fbb61f1ed314fa2959598dc3ae23d8e languageName: node linkType: hard @@ -32302,7 +32317,7 @@ __metadata: languageName: node linkType: hard -"regexp.prototype.flags@npm:^1.4.1, regexp.prototype.flags@npm:^1.4.3": +"regexp.prototype.flags@npm:^1.4.3": version: 1.4.3 resolution: "regexp.prototype.flags@npm:1.4.3" dependencies: @@ -33085,6 +33100,17 @@ __metadata: languageName: node linkType: hard +"safe-regex-test@npm:^1.0.0": + version: 1.0.0 + resolution: "safe-regex-test@npm:1.0.0" + dependencies: + call-bind: ^1.0.2 + get-intrinsic: ^1.1.3 + is-regex: ^1.1.4 + checksum: bc566d8beb8b43c01b94e67de3f070fd2781685e835959bbbaaec91cc53381145ca91f69bd837ce6ec244817afa0a5e974fc4e40a2957f0aca68ac3add1ddd34 + languageName: node + linkType: hard + "safe-regex2@npm:^2.0.0": version: 2.0.0 resolution: "safe-regex2@npm:2.0.0" @@ -34409,19 +34435,19 @@ __metadata: languageName: node linkType: hard -"string.prototype.matchall@npm:^4.0.7": - version: 4.0.7 - resolution: "string.prototype.matchall@npm:4.0.7" +"string.prototype.matchall@npm:^4.0.8": + version: 4.0.8 + resolution: "string.prototype.matchall@npm:4.0.8" dependencies: call-bind: ^1.0.2 - define-properties: ^1.1.3 - es-abstract: ^1.19.1 - get-intrinsic: ^1.1.1 + define-properties: ^1.1.4 + es-abstract: ^1.20.4 + get-intrinsic: ^1.1.3 has-symbols: ^1.0.3 internal-slot: ^1.0.3 - regexp.prototype.flags: ^1.4.1 + regexp.prototype.flags: ^1.4.3 side-channel: ^1.0.4 - checksum: fc09f3ccbfb325de0472bcc87a6be0598a7499e0b4a31db5789676155b15754a4cc4bb83924f15fc9ed48934dac7366ee52c8b9bd160bed6fd072c93b489e75c + checksum: 952da3a818de42ad1c10b576140a5e05b4de7b34b8d9dbf00c3ac8c1293e9c0f533613a39c5cda53e0a8221f2e710bc2150e730b1c2278d60004a8a35726efb6 languageName: node linkType: hard From 4019bef47ba5f6aa6901051f3c08e4a899a05f0c Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 21 Nov 2022 15:13:40 +0000 Subject: [PATCH 56/73] Update dependency js-base64 to v3.7.3 Signed-off-by: Renovate Bot --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 0bc2702bd3..56ec73e8f4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -25248,9 +25248,9 @@ __metadata: linkType: hard "js-base64@npm:^3.6.0": - version: 3.7.2 - resolution: "js-base64@npm:3.7.2" - checksum: 573f28e9a27c3df60096d4d3f551bcb4fcb6d49161cf83396e9bad9b76f94736a70bb70b8808fe834dff2a388f76604ba09d6e153bbf181646e407720139fa5b + version: 3.7.3 + resolution: "js-base64@npm:3.7.3" + checksum: ee19bed9ba21693e4583a47773dd701938de63db82e7c324d4c19093046157f0d87905cc20540f194f1d0ec88d6e1bfc4056aea916bcb873ebcf95942d26aa5a languageName: node linkType: hard From 806111f8ba4d3c5a4fc09110184038fef24e905a Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 21 Nov 2022 15:15:03 +0000 Subject: [PATCH 57/73] Update dependency @aws-sdk/client-sqs to v3.213.0 Signed-off-by: Renovate Bot --- yarn.lock | 973 +++++++++++++++++++++++++++++------------------------- 1 file changed, 527 insertions(+), 446 deletions(-) diff --git a/yarn.lock b/yarn.lock index 0bc2702bd3..c668093de0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -373,647 +373,719 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/abort-controller@npm:3.183.0": - version: 3.183.0 - resolution: "@aws-sdk/abort-controller@npm:3.183.0" +"@aws-sdk/abort-controller@npm:3.212.0": + version: 3.212.0 + resolution: "@aws-sdk/abort-controller@npm:3.212.0" dependencies: - "@aws-sdk/types": 3.183.0 + "@aws-sdk/types": 3.212.0 tslib: ^2.3.1 - checksum: 28f5bc16b5aba414e354df603bc8becd010aa8c9b3c79e527130723a39f21d5a3df98c3bafb3cea733d415a5b042af90098ffa9dfa29d400114c2f6f5292524e + checksum: ba69d926f6939fe91d4d169c64106683fc467a0b1778d48ddae194f8abaf484a2c2e9f997b7de9d4bab9dcb30532551aec88c4e52aeed71f43eb7335bd159adc languageName: node linkType: hard "@aws-sdk/client-sqs@npm:^3.0.0": - version: 3.183.0 - resolution: "@aws-sdk/client-sqs@npm:3.183.0" + version: 3.213.0 + resolution: "@aws-sdk/client-sqs@npm:3.213.0" dependencies: "@aws-crypto/sha256-browser": 2.0.0 "@aws-crypto/sha256-js": 2.0.0 - "@aws-sdk/client-sts": 3.183.0 - "@aws-sdk/config-resolver": 3.183.0 - "@aws-sdk/credential-provider-node": 3.183.0 - "@aws-sdk/fetch-http-handler": 3.183.0 - "@aws-sdk/hash-node": 3.183.0 - "@aws-sdk/invalid-dependency": 3.183.0 - "@aws-sdk/md5-js": 3.183.0 - "@aws-sdk/middleware-content-length": 3.183.0 - "@aws-sdk/middleware-host-header": 3.183.0 - "@aws-sdk/middleware-logger": 3.183.0 - "@aws-sdk/middleware-recursion-detection": 3.183.0 - "@aws-sdk/middleware-retry": 3.183.0 - "@aws-sdk/middleware-sdk-sqs": 3.183.0 - "@aws-sdk/middleware-serde": 3.183.0 - "@aws-sdk/middleware-signing": 3.183.0 - "@aws-sdk/middleware-stack": 3.183.0 - "@aws-sdk/middleware-user-agent": 3.183.0 - "@aws-sdk/node-config-provider": 3.183.0 - "@aws-sdk/node-http-handler": 3.183.0 - "@aws-sdk/protocol-http": 3.183.0 - "@aws-sdk/smithy-client": 3.183.0 - "@aws-sdk/types": 3.183.0 - "@aws-sdk/url-parser": 3.183.0 - "@aws-sdk/util-base64-browser": 3.183.0 - "@aws-sdk/util-base64-node": 3.183.0 - "@aws-sdk/util-body-length-browser": 3.183.0 - "@aws-sdk/util-body-length-node": 3.183.0 - "@aws-sdk/util-defaults-mode-browser": 3.183.0 - "@aws-sdk/util-defaults-mode-node": 3.183.0 - "@aws-sdk/util-user-agent-browser": 3.183.0 - "@aws-sdk/util-user-agent-node": 3.183.0 - "@aws-sdk/util-utf8-browser": 3.183.0 - "@aws-sdk/util-utf8-node": 3.183.0 - entities: 2.2.0 - fast-xml-parser: 3.19.0 + "@aws-sdk/client-sts": 3.213.0 + "@aws-sdk/config-resolver": 3.212.0 + "@aws-sdk/credential-provider-node": 3.212.0 + "@aws-sdk/fetch-http-handler": 3.212.0 + "@aws-sdk/hash-node": 3.212.0 + "@aws-sdk/invalid-dependency": 3.212.0 + "@aws-sdk/md5-js": 3.212.0 + "@aws-sdk/middleware-content-length": 3.212.0 + "@aws-sdk/middleware-endpoint": 3.212.0 + "@aws-sdk/middleware-host-header": 3.212.0 + "@aws-sdk/middleware-logger": 3.212.0 + "@aws-sdk/middleware-recursion-detection": 3.212.0 + "@aws-sdk/middleware-retry": 3.212.0 + "@aws-sdk/middleware-sdk-sqs": 3.212.0 + "@aws-sdk/middleware-serde": 3.212.0 + "@aws-sdk/middleware-signing": 3.212.0 + "@aws-sdk/middleware-stack": 3.212.0 + "@aws-sdk/middleware-user-agent": 3.212.0 + "@aws-sdk/node-config-provider": 3.212.0 + "@aws-sdk/node-http-handler": 3.212.0 + "@aws-sdk/protocol-http": 3.212.0 + "@aws-sdk/smithy-client": 3.212.0 + "@aws-sdk/types": 3.212.0 + "@aws-sdk/url-parser": 3.212.0 + "@aws-sdk/util-base64": 3.208.0 + "@aws-sdk/util-body-length-browser": 3.188.0 + "@aws-sdk/util-body-length-node": 3.208.0 + "@aws-sdk/util-defaults-mode-browser": 3.212.0 + "@aws-sdk/util-defaults-mode-node": 3.212.0 + "@aws-sdk/util-endpoints": 3.212.0 + "@aws-sdk/util-user-agent-browser": 3.212.0 + "@aws-sdk/util-user-agent-node": 3.212.0 + "@aws-sdk/util-utf8-browser": 3.188.0 + "@aws-sdk/util-utf8-node": 3.208.0 + fast-xml-parser: 4.0.11 tslib: ^2.3.1 - checksum: fe0a7ba53cac4d52c25a4a4f1a1bb16438d5011347fcfec037df1d73379d750cd47b437f7a45aea2d4e29bc92587b51dd7631a06f5d6881e3b67b2d4c0dd2633 + checksum: baa9d4c816cae23874f14fe4c6c6da26b8d52b65d459167ebacbc3ec207ef2a83860f452df8b47e11231587e9b1d7a1aedc74051bb79473037756e4d6e492b36 languageName: node linkType: hard -"@aws-sdk/client-sso@npm:3.183.0": - version: 3.183.0 - resolution: "@aws-sdk/client-sso@npm:3.183.0" +"@aws-sdk/client-sso-oidc@npm:3.212.0": + version: 3.212.0 + resolution: "@aws-sdk/client-sso-oidc@npm:3.212.0" dependencies: "@aws-crypto/sha256-browser": 2.0.0 "@aws-crypto/sha256-js": 2.0.0 - "@aws-sdk/config-resolver": 3.183.0 - "@aws-sdk/fetch-http-handler": 3.183.0 - "@aws-sdk/hash-node": 3.183.0 - "@aws-sdk/invalid-dependency": 3.183.0 - "@aws-sdk/middleware-content-length": 3.183.0 - "@aws-sdk/middleware-host-header": 3.183.0 - "@aws-sdk/middleware-logger": 3.183.0 - "@aws-sdk/middleware-recursion-detection": 3.183.0 - "@aws-sdk/middleware-retry": 3.183.0 - "@aws-sdk/middleware-serde": 3.183.0 - "@aws-sdk/middleware-stack": 3.183.0 - "@aws-sdk/middleware-user-agent": 3.183.0 - "@aws-sdk/node-config-provider": 3.183.0 - "@aws-sdk/node-http-handler": 3.183.0 - "@aws-sdk/protocol-http": 3.183.0 - "@aws-sdk/smithy-client": 3.183.0 - "@aws-sdk/types": 3.183.0 - "@aws-sdk/url-parser": 3.183.0 - "@aws-sdk/util-base64-browser": 3.183.0 - "@aws-sdk/util-base64-node": 3.183.0 - "@aws-sdk/util-body-length-browser": 3.183.0 - "@aws-sdk/util-body-length-node": 3.183.0 - "@aws-sdk/util-defaults-mode-browser": 3.183.0 - "@aws-sdk/util-defaults-mode-node": 3.183.0 - "@aws-sdk/util-user-agent-browser": 3.183.0 - "@aws-sdk/util-user-agent-node": 3.183.0 - "@aws-sdk/util-utf8-browser": 3.183.0 - "@aws-sdk/util-utf8-node": 3.183.0 + "@aws-sdk/config-resolver": 3.212.0 + "@aws-sdk/fetch-http-handler": 3.212.0 + "@aws-sdk/hash-node": 3.212.0 + "@aws-sdk/invalid-dependency": 3.212.0 + "@aws-sdk/middleware-content-length": 3.212.0 + "@aws-sdk/middleware-endpoint": 3.212.0 + "@aws-sdk/middleware-host-header": 3.212.0 + "@aws-sdk/middleware-logger": 3.212.0 + "@aws-sdk/middleware-recursion-detection": 3.212.0 + "@aws-sdk/middleware-retry": 3.212.0 + "@aws-sdk/middleware-serde": 3.212.0 + "@aws-sdk/middleware-stack": 3.212.0 + "@aws-sdk/middleware-user-agent": 3.212.0 + "@aws-sdk/node-config-provider": 3.212.0 + "@aws-sdk/node-http-handler": 3.212.0 + "@aws-sdk/protocol-http": 3.212.0 + "@aws-sdk/smithy-client": 3.212.0 + "@aws-sdk/types": 3.212.0 + "@aws-sdk/url-parser": 3.212.0 + "@aws-sdk/util-base64": 3.208.0 + "@aws-sdk/util-body-length-browser": 3.188.0 + "@aws-sdk/util-body-length-node": 3.208.0 + "@aws-sdk/util-defaults-mode-browser": 3.212.0 + "@aws-sdk/util-defaults-mode-node": 3.212.0 + "@aws-sdk/util-endpoints": 3.212.0 + "@aws-sdk/util-user-agent-browser": 3.212.0 + "@aws-sdk/util-user-agent-node": 3.212.0 + "@aws-sdk/util-utf8-browser": 3.188.0 + "@aws-sdk/util-utf8-node": 3.208.0 tslib: ^2.3.1 - checksum: 6909329cf87c1a0c830fa9657e04c7e1ae496d7d79cc0a6813999503ae809f245f0b879af1d5564a5d97c2c69583c8a4df702d29ec7dc75934d98a0cdf017ad3 + checksum: 45f32b8c0a39d3d6788d5a359aff1bcd42c4ada3edb4d6ef072741a9128fc726090fb7e4b5770307f106eb6470f1a29c70843b628ef1652a944cd8dcbe4e8112 languageName: node linkType: hard -"@aws-sdk/client-sts@npm:3.183.0": - version: 3.183.0 - resolution: "@aws-sdk/client-sts@npm:3.183.0" +"@aws-sdk/client-sso@npm:3.212.0": + version: 3.212.0 + resolution: "@aws-sdk/client-sso@npm:3.212.0" dependencies: "@aws-crypto/sha256-browser": 2.0.0 "@aws-crypto/sha256-js": 2.0.0 - "@aws-sdk/config-resolver": 3.183.0 - "@aws-sdk/credential-provider-node": 3.183.0 - "@aws-sdk/fetch-http-handler": 3.183.0 - "@aws-sdk/hash-node": 3.183.0 - "@aws-sdk/invalid-dependency": 3.183.0 - "@aws-sdk/middleware-content-length": 3.183.0 - "@aws-sdk/middleware-host-header": 3.183.0 - "@aws-sdk/middleware-logger": 3.183.0 - "@aws-sdk/middleware-recursion-detection": 3.183.0 - "@aws-sdk/middleware-retry": 3.183.0 - "@aws-sdk/middleware-sdk-sts": 3.183.0 - "@aws-sdk/middleware-serde": 3.183.0 - "@aws-sdk/middleware-signing": 3.183.0 - "@aws-sdk/middleware-stack": 3.183.0 - "@aws-sdk/middleware-user-agent": 3.183.0 - "@aws-sdk/node-config-provider": 3.183.0 - "@aws-sdk/node-http-handler": 3.183.0 - "@aws-sdk/protocol-http": 3.183.0 - "@aws-sdk/smithy-client": 3.183.0 - "@aws-sdk/types": 3.183.0 - "@aws-sdk/url-parser": 3.183.0 - "@aws-sdk/util-base64-browser": 3.183.0 - "@aws-sdk/util-base64-node": 3.183.0 - "@aws-sdk/util-body-length-browser": 3.183.0 - "@aws-sdk/util-body-length-node": 3.183.0 - "@aws-sdk/util-defaults-mode-browser": 3.183.0 - "@aws-sdk/util-defaults-mode-node": 3.183.0 - "@aws-sdk/util-user-agent-browser": 3.183.0 - "@aws-sdk/util-user-agent-node": 3.183.0 - "@aws-sdk/util-utf8-browser": 3.183.0 - "@aws-sdk/util-utf8-node": 3.183.0 - entities: 2.2.0 - fast-xml-parser: 3.19.0 + "@aws-sdk/config-resolver": 3.212.0 + "@aws-sdk/fetch-http-handler": 3.212.0 + "@aws-sdk/hash-node": 3.212.0 + "@aws-sdk/invalid-dependency": 3.212.0 + "@aws-sdk/middleware-content-length": 3.212.0 + "@aws-sdk/middleware-endpoint": 3.212.0 + "@aws-sdk/middleware-host-header": 3.212.0 + "@aws-sdk/middleware-logger": 3.212.0 + "@aws-sdk/middleware-recursion-detection": 3.212.0 + "@aws-sdk/middleware-retry": 3.212.0 + "@aws-sdk/middleware-serde": 3.212.0 + "@aws-sdk/middleware-stack": 3.212.0 + "@aws-sdk/middleware-user-agent": 3.212.0 + "@aws-sdk/node-config-provider": 3.212.0 + "@aws-sdk/node-http-handler": 3.212.0 + "@aws-sdk/protocol-http": 3.212.0 + "@aws-sdk/smithy-client": 3.212.0 + "@aws-sdk/types": 3.212.0 + "@aws-sdk/url-parser": 3.212.0 + "@aws-sdk/util-base64": 3.208.0 + "@aws-sdk/util-body-length-browser": 3.188.0 + "@aws-sdk/util-body-length-node": 3.208.0 + "@aws-sdk/util-defaults-mode-browser": 3.212.0 + "@aws-sdk/util-defaults-mode-node": 3.212.0 + "@aws-sdk/util-endpoints": 3.212.0 + "@aws-sdk/util-user-agent-browser": 3.212.0 + "@aws-sdk/util-user-agent-node": 3.212.0 + "@aws-sdk/util-utf8-browser": 3.188.0 + "@aws-sdk/util-utf8-node": 3.208.0 tslib: ^2.3.1 - checksum: d4492e537803d64e5fc0c5db8ac3a3788204aadc14b21e4fb407188feb58b35689c4a6878b4f13123a5f35f7e9fa01d95d427be168aeec9072aea881f2a92fb7 + checksum: 14426e200171d3ee596f946744d8ee325b3f8fbfcfb3f266482142df20ee418752b64be1131b473cf0b60ed8615dab1cd9350f93a547dca34ca84c07c47fc697 languageName: node linkType: hard -"@aws-sdk/config-resolver@npm:3.183.0": - version: 3.183.0 - resolution: "@aws-sdk/config-resolver@npm:3.183.0" +"@aws-sdk/client-sts@npm:3.213.0": + version: 3.213.0 + resolution: "@aws-sdk/client-sts@npm:3.213.0" dependencies: - "@aws-sdk/signature-v4": 3.183.0 - "@aws-sdk/types": 3.183.0 - "@aws-sdk/util-config-provider": 3.183.0 - "@aws-sdk/util-middleware": 3.183.0 + "@aws-crypto/sha256-browser": 2.0.0 + "@aws-crypto/sha256-js": 2.0.0 + "@aws-sdk/config-resolver": 3.212.0 + "@aws-sdk/credential-provider-node": 3.212.0 + "@aws-sdk/fetch-http-handler": 3.212.0 + "@aws-sdk/hash-node": 3.212.0 + "@aws-sdk/invalid-dependency": 3.212.0 + "@aws-sdk/middleware-content-length": 3.212.0 + "@aws-sdk/middleware-endpoint": 3.212.0 + "@aws-sdk/middleware-host-header": 3.212.0 + "@aws-sdk/middleware-logger": 3.212.0 + "@aws-sdk/middleware-recursion-detection": 3.212.0 + "@aws-sdk/middleware-retry": 3.212.0 + "@aws-sdk/middleware-sdk-sts": 3.212.0 + "@aws-sdk/middleware-serde": 3.212.0 + "@aws-sdk/middleware-signing": 3.212.0 + "@aws-sdk/middleware-stack": 3.212.0 + "@aws-sdk/middleware-user-agent": 3.212.0 + "@aws-sdk/node-config-provider": 3.212.0 + "@aws-sdk/node-http-handler": 3.212.0 + "@aws-sdk/protocol-http": 3.212.0 + "@aws-sdk/smithy-client": 3.212.0 + "@aws-sdk/types": 3.212.0 + "@aws-sdk/url-parser": 3.212.0 + "@aws-sdk/util-base64": 3.208.0 + "@aws-sdk/util-body-length-browser": 3.188.0 + "@aws-sdk/util-body-length-node": 3.208.0 + "@aws-sdk/util-defaults-mode-browser": 3.212.0 + "@aws-sdk/util-defaults-mode-node": 3.212.0 + "@aws-sdk/util-endpoints": 3.212.0 + "@aws-sdk/util-user-agent-browser": 3.212.0 + "@aws-sdk/util-user-agent-node": 3.212.0 + "@aws-sdk/util-utf8-browser": 3.188.0 + "@aws-sdk/util-utf8-node": 3.208.0 + fast-xml-parser: 4.0.11 tslib: ^2.3.1 - checksum: 1be0ab79d5019f7502a7aee8c740f4e381ab7501ed639569526a4a7e1c70ad6bb36d642a8a2b18afe58c34497c6f2f8244dbf05211a0f6bc9a57e5e379c70b2b + checksum: 6d375d8d22bdd08130ea624d6b980e366ce556b3178a4dbfcfd7ec7b9ab629dd57d34b350129231bd96be078778df0de6c61783c49a739142b055882f943f7d2 languageName: node linkType: hard -"@aws-sdk/credential-provider-env@npm:3.183.0": - version: 3.183.0 - resolution: "@aws-sdk/credential-provider-env@npm:3.183.0" +"@aws-sdk/config-resolver@npm:3.212.0": + version: 3.212.0 + resolution: "@aws-sdk/config-resolver@npm:3.212.0" dependencies: - "@aws-sdk/property-provider": 3.183.0 - "@aws-sdk/types": 3.183.0 + "@aws-sdk/signature-v4": 3.212.0 + "@aws-sdk/types": 3.212.0 + "@aws-sdk/util-config-provider": 3.208.0 + "@aws-sdk/util-middleware": 3.212.0 tslib: ^2.3.1 - checksum: 4281e14c286cc5c57c69ba88c49fe1c1ff61f27923db5e8f852a84cce02b40fdc938f876ad08e72005deae9a28fab7400f747f63ca50f9c4d60e04e6c2705205 + checksum: 2d2844b93ca27a60d311d6998582bba99ac922299db76309f6136625ffaeecba172b906dee2598c381aebd5c88ca5b5442e5dfdcaa932ddaaf88d7257953022a languageName: node linkType: hard -"@aws-sdk/credential-provider-imds@npm:3.183.0": - version: 3.183.0 - resolution: "@aws-sdk/credential-provider-imds@npm:3.183.0" +"@aws-sdk/credential-provider-env@npm:3.212.0": + version: 3.212.0 + resolution: "@aws-sdk/credential-provider-env@npm:3.212.0" dependencies: - "@aws-sdk/node-config-provider": 3.183.0 - "@aws-sdk/property-provider": 3.183.0 - "@aws-sdk/types": 3.183.0 - "@aws-sdk/url-parser": 3.183.0 + "@aws-sdk/property-provider": 3.212.0 + "@aws-sdk/types": 3.212.0 tslib: ^2.3.1 - checksum: e9fe1007b22825dc0c033beb2057b9f759d8cafec6e65d08ba4915bccb9b7d737eeccb3d06e9768a084b6726d9ea10778172b1bec695353c60276c1a5c21370e + checksum: da7af6765a551b9c55c56d5e1f287877839aec8cfbe301d4b483180a72f62113e15b87c8b4dbbe608e06db96bcad52b3becc9f02f3664607f0c477d03fef1bac languageName: node linkType: hard -"@aws-sdk/credential-provider-ini@npm:3.183.0": - version: 3.183.0 - resolution: "@aws-sdk/credential-provider-ini@npm:3.183.0" +"@aws-sdk/credential-provider-imds@npm:3.212.0": + version: 3.212.0 + resolution: "@aws-sdk/credential-provider-imds@npm:3.212.0" dependencies: - "@aws-sdk/credential-provider-env": 3.183.0 - "@aws-sdk/credential-provider-imds": 3.183.0 - "@aws-sdk/credential-provider-sso": 3.183.0 - "@aws-sdk/credential-provider-web-identity": 3.183.0 - "@aws-sdk/property-provider": 3.183.0 - "@aws-sdk/shared-ini-file-loader": 3.183.0 - "@aws-sdk/types": 3.183.0 + "@aws-sdk/node-config-provider": 3.212.0 + "@aws-sdk/property-provider": 3.212.0 + "@aws-sdk/types": 3.212.0 + "@aws-sdk/url-parser": 3.212.0 tslib: ^2.3.1 - checksum: c7784a3674c863dacc1305a08dd63cb16d1e7374250b0ceafa9feee8344de4228d7c32e84fbaa9d963adab69eb3938cd75b99554756da120cd9beae4693eded9 + checksum: 4b3c31bc88a1bf15d0721c7e124795361c6f532ee1b33400f2f71393d60ee5c14b0bf2b4e2abc6c3ef22aa8304aa19e5d9e3e733e17da454e3371615567440dc languageName: node linkType: hard -"@aws-sdk/credential-provider-node@npm:3.183.0": - version: 3.183.0 - resolution: "@aws-sdk/credential-provider-node@npm:3.183.0" +"@aws-sdk/credential-provider-ini@npm:3.212.0": + version: 3.212.0 + resolution: "@aws-sdk/credential-provider-ini@npm:3.212.0" dependencies: - "@aws-sdk/credential-provider-env": 3.183.0 - "@aws-sdk/credential-provider-imds": 3.183.0 - "@aws-sdk/credential-provider-ini": 3.183.0 - "@aws-sdk/credential-provider-process": 3.183.0 - "@aws-sdk/credential-provider-sso": 3.183.0 - "@aws-sdk/credential-provider-web-identity": 3.183.0 - "@aws-sdk/property-provider": 3.183.0 - "@aws-sdk/shared-ini-file-loader": 3.183.0 - "@aws-sdk/types": 3.183.0 + "@aws-sdk/credential-provider-env": 3.212.0 + "@aws-sdk/credential-provider-imds": 3.212.0 + "@aws-sdk/credential-provider-sso": 3.212.0 + "@aws-sdk/credential-provider-web-identity": 3.212.0 + "@aws-sdk/property-provider": 3.212.0 + "@aws-sdk/shared-ini-file-loader": 3.212.0 + "@aws-sdk/types": 3.212.0 tslib: ^2.3.1 - checksum: f23e1148054a96d68632284501ba01c4285cce1a2f4562817ec4b7fa315ff56e2f6b97fae0d2ae26fd52fca8c9f000be5d72a3582cff6c32ba10010f02a30977 + checksum: de60d4729ed6e162628563990b08be88486131c09ec372190a9b38faea72d8969d1e277b2e01a28fa3432c34e92bd39057fc6b923de9fcd0fcabd5b9ec69425e languageName: node linkType: hard -"@aws-sdk/credential-provider-process@npm:3.183.0": - version: 3.183.0 - resolution: "@aws-sdk/credential-provider-process@npm:3.183.0" +"@aws-sdk/credential-provider-node@npm:3.212.0": + version: 3.212.0 + resolution: "@aws-sdk/credential-provider-node@npm:3.212.0" dependencies: - "@aws-sdk/property-provider": 3.183.0 - "@aws-sdk/shared-ini-file-loader": 3.183.0 - "@aws-sdk/types": 3.183.0 + "@aws-sdk/credential-provider-env": 3.212.0 + "@aws-sdk/credential-provider-imds": 3.212.0 + "@aws-sdk/credential-provider-ini": 3.212.0 + "@aws-sdk/credential-provider-process": 3.212.0 + "@aws-sdk/credential-provider-sso": 3.212.0 + "@aws-sdk/credential-provider-web-identity": 3.212.0 + "@aws-sdk/property-provider": 3.212.0 + "@aws-sdk/shared-ini-file-loader": 3.212.0 + "@aws-sdk/types": 3.212.0 tslib: ^2.3.1 - checksum: 3109e79ec2b4647f5e7f78c6dc2e10cd8a34a70147e7e90549153b7ff3ff12eda3499b3189d6fc1f3b99f461d5445e8017b44cd50029d30b0fc7437ad88a5f38 + checksum: 421a65b57cfd280a14707c8563da285263a55471d1c3fbfe66305f0d42dcc59fb2884e84d380b8bcf2fea0ccdd419e92b5361b5b2a5832cf45ca0c86127a0137 languageName: node linkType: hard -"@aws-sdk/credential-provider-sso@npm:3.183.0": - version: 3.183.0 - resolution: "@aws-sdk/credential-provider-sso@npm:3.183.0" +"@aws-sdk/credential-provider-process@npm:3.212.0": + version: 3.212.0 + resolution: "@aws-sdk/credential-provider-process@npm:3.212.0" dependencies: - "@aws-sdk/client-sso": 3.183.0 - "@aws-sdk/property-provider": 3.183.0 - "@aws-sdk/shared-ini-file-loader": 3.183.0 - "@aws-sdk/types": 3.183.0 + "@aws-sdk/property-provider": 3.212.0 + "@aws-sdk/shared-ini-file-loader": 3.212.0 + "@aws-sdk/types": 3.212.0 tslib: ^2.3.1 - checksum: 8775894ef50499361a4b49d846417c2c1e1ea90383730a32428154628358e7847f6f29dddd3cd04d3a4e15c1343fe10b051a92863055989ac3c4cb241e68f63a + checksum: 4842577d8c7b2daa80db20f5a21e56a42a57de9c5d27c50806a2c76e5b0eb0fa9d6b5aed9dcae1d0820ce410999e139f81b0440d33dc104cbc357a3f59680d8f languageName: node linkType: hard -"@aws-sdk/credential-provider-web-identity@npm:3.183.0": - version: 3.183.0 - resolution: "@aws-sdk/credential-provider-web-identity@npm:3.183.0" +"@aws-sdk/credential-provider-sso@npm:3.212.0": + version: 3.212.0 + resolution: "@aws-sdk/credential-provider-sso@npm:3.212.0" dependencies: - "@aws-sdk/property-provider": 3.183.0 - "@aws-sdk/types": 3.183.0 + "@aws-sdk/client-sso": 3.212.0 + "@aws-sdk/property-provider": 3.212.0 + "@aws-sdk/shared-ini-file-loader": 3.212.0 + "@aws-sdk/token-providers": 3.212.0 + "@aws-sdk/types": 3.212.0 tslib: ^2.3.1 - checksum: c39576c8f35137284fc69db8d94adcf07fa89d51153ee9710481262e205d485ff089a796e8a253aa14a0434dde91eadb65602fc614167a4f14301201ee840c08 + checksum: b575af71e26343536997261ac97820afa697b789b152106f64fea1e24fe6a21437a195f46a23828b92dbd82a32d7c4339d834a0aa52dd2e075974363c1f8837f languageName: node linkType: hard -"@aws-sdk/fetch-http-handler@npm:3.183.0": - version: 3.183.0 - resolution: "@aws-sdk/fetch-http-handler@npm:3.183.0" +"@aws-sdk/credential-provider-web-identity@npm:3.212.0": + version: 3.212.0 + resolution: "@aws-sdk/credential-provider-web-identity@npm:3.212.0" dependencies: - "@aws-sdk/protocol-http": 3.183.0 - "@aws-sdk/querystring-builder": 3.183.0 - "@aws-sdk/types": 3.183.0 - "@aws-sdk/util-base64-browser": 3.183.0 + "@aws-sdk/property-provider": 3.212.0 + "@aws-sdk/types": 3.212.0 tslib: ^2.3.1 - checksum: 87c51d1dad8c469e32b99f6ed3729e753097cd4a9f8f417ec8681cf01e18b9a5dc6571f3cd1220293216bd4527b8499bb2ea1f821a240fde6d9560817c120066 + checksum: 1bef8b133fed07802e82406d3e46d7bdd110197b1416debd8953f7192814ebf2a6300520adfe62a9b68bc84fab70fd97fd3f4126855c297b8bbb947ce97d4184 languageName: node linkType: hard -"@aws-sdk/hash-node@npm:3.183.0": - version: 3.183.0 - resolution: "@aws-sdk/hash-node@npm:3.183.0" +"@aws-sdk/fetch-http-handler@npm:3.212.0": + version: 3.212.0 + resolution: "@aws-sdk/fetch-http-handler@npm:3.212.0" dependencies: - "@aws-sdk/types": 3.183.0 - "@aws-sdk/util-buffer-from": 3.183.0 + "@aws-sdk/protocol-http": 3.212.0 + "@aws-sdk/querystring-builder": 3.212.0 + "@aws-sdk/types": 3.212.0 + "@aws-sdk/util-base64": 3.208.0 tslib: ^2.3.1 - checksum: fbed8757df633620807594535e3bb7d387576e0c2f89ad16dc7c98405a9d1d9743bea50148186de2f19cac67144b30f7f89e6c15317ddd7b8c0c8f61ca9556ef + checksum: 477601560df9a58c8e6bb50cdc313205fc75681699275f153e96ce6c62cf1c55ec8c394bb4774ba69a483987094b7416aa8e3fb5c89cdd530adb25e1cd909cb9 languageName: node linkType: hard -"@aws-sdk/invalid-dependency@npm:3.183.0": - version: 3.183.0 - resolution: "@aws-sdk/invalid-dependency@npm:3.183.0" +"@aws-sdk/hash-node@npm:3.212.0": + version: 3.212.0 + resolution: "@aws-sdk/hash-node@npm:3.212.0" dependencies: - "@aws-sdk/types": 3.183.0 + "@aws-sdk/types": 3.212.0 + "@aws-sdk/util-buffer-from": 3.208.0 tslib: ^2.3.1 - checksum: d928ca26d4390ad4f5e2c8198d16e14b675face6ad8c4a4eef699b54ce3f6cba584456659287b0e57e9f9019bc456b51dfa474671e11bf555fe04ed16174c10c + checksum: f5855ff20e37a0779da515fa78f26413762a5246c1b06a4e35f11f7aa4fd742a639a2b3d00f63004a5de659f233c5d503b469a744bb6911f9159602a79676789 languageName: node linkType: hard -"@aws-sdk/is-array-buffer@npm:3.183.0": - version: 3.183.0 - resolution: "@aws-sdk/is-array-buffer@npm:3.183.0" +"@aws-sdk/invalid-dependency@npm:3.212.0": + version: 3.212.0 + resolution: "@aws-sdk/invalid-dependency@npm:3.212.0" dependencies: + "@aws-sdk/types": 3.212.0 tslib: ^2.3.1 - checksum: 717e508989821434a2ace4f690fc599f67b3f28ee9de5f06fce65a296fe11a68a5b97f30d66bfbf490d4a83259e4ffa1f0321231e4a54ce2440a9c6fdbacde24 + checksum: c71f32895f2a7760a916d8b8abba8b3d2c40869422d083da13abb096931ed04d67a65695f024ce74efced33745a10c9f904779f1414d2fc9a80be3d1d95284f9 languageName: node linkType: hard -"@aws-sdk/md5-js@npm:3.183.0": - version: 3.183.0 - resolution: "@aws-sdk/md5-js@npm:3.183.0" +"@aws-sdk/is-array-buffer@npm:3.201.0": + version: 3.201.0 + resolution: "@aws-sdk/is-array-buffer@npm:3.201.0" dependencies: - "@aws-sdk/types": 3.183.0 - "@aws-sdk/util-utf8-browser": 3.183.0 - "@aws-sdk/util-utf8-node": 3.183.0 tslib: ^2.3.1 - checksum: 5bd92465940ace6b3ca13342bd60eab42ffd5d74dfa65655c28e10bbf4aa0c32b2f9b4deb2050f3d092b8586e558bf248559af9c3cffb37810961169ad0797af + checksum: 295450b417a9ab0b734050afff6c53aaed8a33dccd3ede60bf67fdec21f675d14ab8edc24f4e1d12aa4e99f9ccaf794aaaaff270c296c1ee38f73ea7ba7f59ce languageName: node linkType: hard -"@aws-sdk/middleware-content-length@npm:3.183.0": - version: 3.183.0 - resolution: "@aws-sdk/middleware-content-length@npm:3.183.0" +"@aws-sdk/md5-js@npm:3.212.0": + version: 3.212.0 + resolution: "@aws-sdk/md5-js@npm:3.212.0" dependencies: - "@aws-sdk/protocol-http": 3.183.0 - "@aws-sdk/types": 3.183.0 + "@aws-sdk/types": 3.212.0 + "@aws-sdk/util-utf8-browser": 3.188.0 + "@aws-sdk/util-utf8-node": 3.208.0 tslib: ^2.3.1 - checksum: bf3ec6872a925dbafd91e57334b6264e8446ca59eba598ee4bc7b37113c466300ac6b77ab314c4aa2859221f1f4e98beabbd365346e0815d591f276e642d1849 + checksum: d49b7eb9b3b78bbc78c247565041ea4119a6c82765e5b989a716d31def4da4de69f5dcbaf1ed32a89f23a1484e233a51a73f90da877952510250ca0a2c7311a1 languageName: node linkType: hard -"@aws-sdk/middleware-host-header@npm:3.183.0": - version: 3.183.0 - resolution: "@aws-sdk/middleware-host-header@npm:3.183.0" +"@aws-sdk/middleware-content-length@npm:3.212.0": + version: 3.212.0 + resolution: "@aws-sdk/middleware-content-length@npm:3.212.0" dependencies: - "@aws-sdk/protocol-http": 3.183.0 - "@aws-sdk/types": 3.183.0 + "@aws-sdk/protocol-http": 3.212.0 + "@aws-sdk/types": 3.212.0 tslib: ^2.3.1 - checksum: b4c4886976cffec614ff368daa995a69c765e737c8d366daa0033d781cf8e7483565bb3627ecd752698edc23dcf578de6657c9e8cb41c0fcd92631d17b7749b8 + checksum: ef6a5467b84205b94ee90761d72cf14d52d49392086fb6358e07940b062a9f6e514b6649a9e0e87f0b3305cf54f5d85b712f394843a4417c590f630abeba2cdd languageName: node linkType: hard -"@aws-sdk/middleware-logger@npm:3.183.0": - version: 3.183.0 - resolution: "@aws-sdk/middleware-logger@npm:3.183.0" +"@aws-sdk/middleware-endpoint@npm:3.212.0": + version: 3.212.0 + resolution: "@aws-sdk/middleware-endpoint@npm:3.212.0" dependencies: - "@aws-sdk/types": 3.183.0 + "@aws-sdk/middleware-serde": 3.212.0 + "@aws-sdk/protocol-http": 3.212.0 + "@aws-sdk/signature-v4": 3.212.0 + "@aws-sdk/types": 3.212.0 + "@aws-sdk/url-parser": 3.212.0 + "@aws-sdk/util-config-provider": 3.208.0 + "@aws-sdk/util-middleware": 3.212.0 tslib: ^2.3.1 - checksum: 10ffb6af0f81b0144fef91af2bbeaeb680df2beff838f2a6ebcc260971fd6252a166e3bf3501c1fc00f6f8f203117ff6e2b4baebb7a6d8cd8504b7e1f392bd6d + checksum: 0b34bd25dfaf05d009ba327abb00916c1a5ffa9c58b1baecaee120468ddf3aa4b7998b8b1ae33fca789494fe95a3bc0921050d667da396552239d542ae030675 languageName: node linkType: hard -"@aws-sdk/middleware-recursion-detection@npm:3.183.0": - version: 3.183.0 - resolution: "@aws-sdk/middleware-recursion-detection@npm:3.183.0" +"@aws-sdk/middleware-host-header@npm:3.212.0": + version: 3.212.0 + resolution: "@aws-sdk/middleware-host-header@npm:3.212.0" dependencies: - "@aws-sdk/protocol-http": 3.183.0 - "@aws-sdk/types": 3.183.0 + "@aws-sdk/protocol-http": 3.212.0 + "@aws-sdk/types": 3.212.0 tslib: ^2.3.1 - checksum: 461117e0dc8c38750942035a07163817bc8e89f377211f5fb52d4314acae4e7e6cb49be04193c508112833535b33814c1609196cb65e38cff1122043398ad89e + checksum: c852de97a8763452b31136fc7ece3ba3026603665204a2982781a600139e346f08ca146331735d377b1f04a662bae9d44b78deef797d5bbee366f56ee91d7bc6 languageName: node linkType: hard -"@aws-sdk/middleware-retry@npm:3.183.0": - version: 3.183.0 - resolution: "@aws-sdk/middleware-retry@npm:3.183.0" +"@aws-sdk/middleware-logger@npm:3.212.0": + version: 3.212.0 + resolution: "@aws-sdk/middleware-logger@npm:3.212.0" dependencies: - "@aws-sdk/protocol-http": 3.183.0 - "@aws-sdk/service-error-classification": 3.183.0 - "@aws-sdk/types": 3.183.0 - "@aws-sdk/util-middleware": 3.183.0 + "@aws-sdk/types": 3.212.0 + tslib: ^2.3.1 + checksum: 1bc12d88da134e6cfa9ecf102c7a80727f1f00e09e97f06d44f4a6d1da21711a7abf9f0bdf39ab789736925f97f781574cb1e49f275f7ea1112fc0db443753f2 + languageName: node + linkType: hard + +"@aws-sdk/middleware-recursion-detection@npm:3.212.0": + version: 3.212.0 + resolution: "@aws-sdk/middleware-recursion-detection@npm:3.212.0" + dependencies: + "@aws-sdk/protocol-http": 3.212.0 + "@aws-sdk/types": 3.212.0 + tslib: ^2.3.1 + checksum: 65cb31460dfd88a5997764d84e23003264c639b7848ad9398f9f362a7214ef175431e833dff4bf501bb81cb9b695e146c042b02986dfa6fab8812058bca7f9c7 + languageName: node + linkType: hard + +"@aws-sdk/middleware-retry@npm:3.212.0": + version: 3.212.0 + resolution: "@aws-sdk/middleware-retry@npm:3.212.0" + dependencies: + "@aws-sdk/protocol-http": 3.212.0 + "@aws-sdk/service-error-classification": 3.212.0 + "@aws-sdk/types": 3.212.0 + "@aws-sdk/util-middleware": 3.212.0 tslib: ^2.3.1 uuid: ^8.3.2 - checksum: 76fa3f9fe5f1c67bbfa792611289edf0afa2d0271073039931ac9ea46b3f432d74692d2db55443f40b7e97014898454f6d4bd8d2f2f5714a4281428b7464efac + checksum: 1e221bf49585d9fea675f83d8b5d18f4b20de5b4096cc94dc51d265bdd579aa205b11a0735954dc9d7990f33fbe1165304342480ab15b79431d7988b74efcf05 languageName: node linkType: hard -"@aws-sdk/middleware-sdk-sqs@npm:3.183.0": - version: 3.183.0 - resolution: "@aws-sdk/middleware-sdk-sqs@npm:3.183.0" +"@aws-sdk/middleware-sdk-sqs@npm:3.212.0": + version: 3.212.0 + resolution: "@aws-sdk/middleware-sdk-sqs@npm:3.212.0" dependencies: - "@aws-sdk/types": 3.183.0 - "@aws-sdk/util-hex-encoding": 3.183.0 + "@aws-sdk/types": 3.212.0 + "@aws-sdk/util-hex-encoding": 3.201.0 tslib: ^2.3.1 - checksum: 0bb914b2e7a5391f5b22a5262a5c299fa7e3eb22076d00c4cfffb449e97404b4830a77bb742e8f3110d66f15ae9aad81ea740238799cc35bb8d328eaf13f3fe2 + checksum: 12ab5d80d8025a737aa3e5c7f8025bbf824fe2719618356b011fb0901135828f0ee10eb15b7bf0ad81e4de3159c8a6bba97c3b3cfc186e26bd6dbefab16682a5 languageName: node linkType: hard -"@aws-sdk/middleware-sdk-sts@npm:3.183.0": - version: 3.183.0 - resolution: "@aws-sdk/middleware-sdk-sts@npm:3.183.0" +"@aws-sdk/middleware-sdk-sts@npm:3.212.0": + version: 3.212.0 + resolution: "@aws-sdk/middleware-sdk-sts@npm:3.212.0" dependencies: - "@aws-sdk/middleware-signing": 3.183.0 - "@aws-sdk/property-provider": 3.183.0 - "@aws-sdk/protocol-http": 3.183.0 - "@aws-sdk/signature-v4": 3.183.0 - "@aws-sdk/types": 3.183.0 + "@aws-sdk/middleware-signing": 3.212.0 + "@aws-sdk/property-provider": 3.212.0 + "@aws-sdk/protocol-http": 3.212.0 + "@aws-sdk/signature-v4": 3.212.0 + "@aws-sdk/types": 3.212.0 tslib: ^2.3.1 - checksum: 1969d6128d24cc7d8ff199c2900d805281928668f4dc3ffd128065ccfe515f9f7467a265af276592009bd285847cb9298f8ba4b1dfbe33971c3e7de80986b422 + checksum: af3a03802e07ed1375a6d7feb6a9abbec8cba175138c49b8fb4d42843330db65e550a505539765a1f65944a3a4a840259b503d9e4a28f210ea83c0f2683e5e27 languageName: node linkType: hard -"@aws-sdk/middleware-serde@npm:3.183.0": - version: 3.183.0 - resolution: "@aws-sdk/middleware-serde@npm:3.183.0" +"@aws-sdk/middleware-serde@npm:3.212.0": + version: 3.212.0 + resolution: "@aws-sdk/middleware-serde@npm:3.212.0" dependencies: - "@aws-sdk/types": 3.183.0 + "@aws-sdk/types": 3.212.0 tslib: ^2.3.1 - checksum: 7495bb2adceab2c686588697fd9dd50a859706a8d33d98d9907ffc8f9ef78af141f2654cdac8d7b28b1f0544dcf2e52f25d109f5da1348102234ab5b4e79b256 + checksum: 1d9438e1e3a177a30d39787a6493f15a9726dd820552a995ca771ee58df004f6575ed322fd59658a7478c4fe72dfaf40bb61b1fd441a6ec1a245370e4ef17da9 languageName: node linkType: hard -"@aws-sdk/middleware-signing@npm:3.183.0": - version: 3.183.0 - resolution: "@aws-sdk/middleware-signing@npm:3.183.0" +"@aws-sdk/middleware-signing@npm:3.212.0": + version: 3.212.0 + resolution: "@aws-sdk/middleware-signing@npm:3.212.0" dependencies: - "@aws-sdk/property-provider": 3.183.0 - "@aws-sdk/protocol-http": 3.183.0 - "@aws-sdk/signature-v4": 3.183.0 - "@aws-sdk/types": 3.183.0 - "@aws-sdk/util-middleware": 3.183.0 + "@aws-sdk/property-provider": 3.212.0 + "@aws-sdk/protocol-http": 3.212.0 + "@aws-sdk/signature-v4": 3.212.0 + "@aws-sdk/types": 3.212.0 + "@aws-sdk/util-middleware": 3.212.0 tslib: ^2.3.1 - checksum: 8025499acfefc072511adbc5084a1ed3cfe9cd9e514c58045425c87538af72ad3adfc134f7d0a059ff52832da392b4679b62d4ad28e477b866a20e78370f0758 + checksum: f9e2c07a9e80bc67ea05766f505c750652a2d355eb98a2f2296707a3af15bb2d591e8257a9aa3683721c47814e49fd3b266746d95ea8cb362eaaf8ab4afba08d languageName: node linkType: hard -"@aws-sdk/middleware-stack@npm:3.183.0": - version: 3.183.0 - resolution: "@aws-sdk/middleware-stack@npm:3.183.0" +"@aws-sdk/middleware-stack@npm:3.212.0": + version: 3.212.0 + resolution: "@aws-sdk/middleware-stack@npm:3.212.0" dependencies: tslib: ^2.3.1 - checksum: 03136847b96b0e4baba9b64f53a6c6b5738b1fa2c645edb3f47c1f85082791549b423ea791af33e9da3507cd56fbcbd052f1ba773a9f45ea42a3647277e85264 + checksum: b9ce8fdae58f68f259aea823e39f22b8f893402bad25d4c87f614e0dc14412d66bc3c08607190856b9122f2d431f94a78dd8ddec7700f5afe8d956ff12913a00 languageName: node linkType: hard -"@aws-sdk/middleware-user-agent@npm:3.183.0": - version: 3.183.0 - resolution: "@aws-sdk/middleware-user-agent@npm:3.183.0" +"@aws-sdk/middleware-user-agent@npm:3.212.0": + version: 3.212.0 + resolution: "@aws-sdk/middleware-user-agent@npm:3.212.0" dependencies: - "@aws-sdk/protocol-http": 3.183.0 - "@aws-sdk/types": 3.183.0 + "@aws-sdk/protocol-http": 3.212.0 + "@aws-sdk/types": 3.212.0 tslib: ^2.3.1 - checksum: 8d1001d6d30f0f56aa440c541f6dcee9aad9190837e7a9653aef35448ff13e644cb7a441373192134ac86b5741fa64a120add07202cb97674018bd44612acdf7 + checksum: ef18b7b7755190e864946156dd741f7b513efaea160f4a4e2e2088e609d51660bd5dc577fb3e78bebc6105741b3b6e66a06bc77c0e027f4096fca90b918cb8b0 languageName: node linkType: hard -"@aws-sdk/node-config-provider@npm:3.183.0": - version: 3.183.0 - resolution: "@aws-sdk/node-config-provider@npm:3.183.0" +"@aws-sdk/node-config-provider@npm:3.212.0": + version: 3.212.0 + resolution: "@aws-sdk/node-config-provider@npm:3.212.0" dependencies: - "@aws-sdk/property-provider": 3.183.0 - "@aws-sdk/shared-ini-file-loader": 3.183.0 - "@aws-sdk/types": 3.183.0 + "@aws-sdk/property-provider": 3.212.0 + "@aws-sdk/shared-ini-file-loader": 3.212.0 + "@aws-sdk/types": 3.212.0 tslib: ^2.3.1 - checksum: 673fb105de8d11ddd1c3e636c7ed01ef4fbe412a7d96543d9db69149dfad64d33adf5b96b106763c058190841ea497f220e1b75ca438dbda7b34729f00b9e823 + checksum: c8e742c225ea4803d0f3318de8d93f756e5008e76ecc2d88fcb80e6733b29984b40d39a47a08d51fa23c00b0dbf3f0bd3b60eb44768abb48466a2493a61195ed languageName: node linkType: hard -"@aws-sdk/node-http-handler@npm:3.183.0": - version: 3.183.0 - resolution: "@aws-sdk/node-http-handler@npm:3.183.0" +"@aws-sdk/node-http-handler@npm:3.212.0": + version: 3.212.0 + resolution: "@aws-sdk/node-http-handler@npm:3.212.0" dependencies: - "@aws-sdk/abort-controller": 3.183.0 - "@aws-sdk/protocol-http": 3.183.0 - "@aws-sdk/querystring-builder": 3.183.0 - "@aws-sdk/types": 3.183.0 + "@aws-sdk/abort-controller": 3.212.0 + "@aws-sdk/protocol-http": 3.212.0 + "@aws-sdk/querystring-builder": 3.212.0 + "@aws-sdk/types": 3.212.0 tslib: ^2.3.1 - checksum: a24ee8cc4e3b63fdec0ebb671caa1e634af488befa7c93a28bb733bb532934c221f6c47707db20264af91ca84336a50b98427b425329b89aeac2a6d2be9537ff + checksum: 052e4a3854823bd3877fc2baeca8fae9cdb2083beb96b4734f08eba70cb73c7abaf5dc6487d5ace0757257debc56f656d9da247d227669196d3e20a1fa97563d languageName: node linkType: hard -"@aws-sdk/property-provider@npm:3.183.0": - version: 3.183.0 - resolution: "@aws-sdk/property-provider@npm:3.183.0" +"@aws-sdk/property-provider@npm:3.212.0": + version: 3.212.0 + resolution: "@aws-sdk/property-provider@npm:3.212.0" dependencies: - "@aws-sdk/types": 3.183.0 + "@aws-sdk/types": 3.212.0 tslib: ^2.3.1 - checksum: 6e8616e5f7efa9f46bdf62118dfc586e61dcdf0bc99f82305759020ce3d25fc1d2db71c62cfd4417a757a138b1a539cf305b584e6e7ade9bce9975fbe66fd326 + checksum: ac30dd5777f2cce6aaa9c3ac2672bada2f8423330c545ea66913d731b6e0f48a802b9f15c48ccb7620dd0f9e8c4c3a9d27bd445a7c9d72bb30115c1954207234 languageName: node linkType: hard -"@aws-sdk/protocol-http@npm:3.183.0": - version: 3.183.0 - resolution: "@aws-sdk/protocol-http@npm:3.183.0" +"@aws-sdk/protocol-http@npm:3.212.0": + version: 3.212.0 + resolution: "@aws-sdk/protocol-http@npm:3.212.0" dependencies: - "@aws-sdk/types": 3.183.0 + "@aws-sdk/types": 3.212.0 tslib: ^2.3.1 - checksum: 13b255bcb37b70853d93374f972d743c80f33ac16188c41b512536c2dbec4d7beb55226bfac6d809981d63bbc87f6bf345334238f187da2faa9feaef5001e0a7 + checksum: 6330d3259a560e952202ae9b964c210ab1b25b9161d4fc27da1bc081600abe2461854659a3b560764c8e2d1e8c1212bcc061250945f1f9c0ee3a19475fb17464 languageName: node linkType: hard -"@aws-sdk/querystring-builder@npm:3.183.0": - version: 3.183.0 - resolution: "@aws-sdk/querystring-builder@npm:3.183.0" +"@aws-sdk/querystring-builder@npm:3.212.0": + version: 3.212.0 + resolution: "@aws-sdk/querystring-builder@npm:3.212.0" dependencies: - "@aws-sdk/types": 3.183.0 - "@aws-sdk/util-uri-escape": 3.183.0 + "@aws-sdk/types": 3.212.0 + "@aws-sdk/util-uri-escape": 3.201.0 tslib: ^2.3.1 - checksum: a3de19863ccee4e8c9d5bbd719688ee1ffea02c3d90aad5e9c3eb04bed942ff8e5be0bfbc21ed03a968481abe2a2b1093e93b986b4111c468a9f3d3466b61f83 + checksum: 0bbd748f548c695d040b9ed225a2eb3fbba65b767acdba8dd8e157988b4ea66d22b994721d6eb5afcbfef7c49b105ab3a779534f4b2ae7e0d266f84159511e23 languageName: node linkType: hard -"@aws-sdk/querystring-parser@npm:3.183.0": - version: 3.183.0 - resolution: "@aws-sdk/querystring-parser@npm:3.183.0" +"@aws-sdk/querystring-parser@npm:3.212.0": + version: 3.212.0 + resolution: "@aws-sdk/querystring-parser@npm:3.212.0" dependencies: - "@aws-sdk/types": 3.183.0 + "@aws-sdk/types": 3.212.0 tslib: ^2.3.1 - checksum: f05a03c46317c97f1b775f7c5be19365cf464396edc6b23c93efd5289ff1a8658883f7c9dde2cc7b74bb42b57f257bc212abae5d62100d23cdec5409fbffe468 + checksum: ab73e0d3a4fd94cc5141fe65940ee700bc6d3497f68518687c196b415cac5f7e44fd71039f6b7abb6eafb7777fe85b7d8f7cb006238b8deaf1248af2a53d7e29 languageName: node linkType: hard -"@aws-sdk/service-error-classification@npm:3.183.0": - version: 3.183.0 - resolution: "@aws-sdk/service-error-classification@npm:3.183.0" - checksum: 8c015163aee9ec4d789daa8605e5b9424dfda81d3f609a2c34d800cb36ee78f4a3af02d1738c7e75f9a62cd1ef8ec4307f77457eecba3de4c6565a981484bca4 +"@aws-sdk/service-error-classification@npm:3.212.0": + version: 3.212.0 + resolution: "@aws-sdk/service-error-classification@npm:3.212.0" + checksum: 844f149d4a03c72ffa77103c8ce12b58ecb20484350633e88242e8d16cde50e3f35ba6db34ea7e180685d4545e0f48367ab8ce86d76dfb80e5d2a959749556be languageName: node linkType: hard -"@aws-sdk/shared-ini-file-loader@npm:3.183.0": - version: 3.183.0 - resolution: "@aws-sdk/shared-ini-file-loader@npm:3.183.0" +"@aws-sdk/shared-ini-file-loader@npm:3.212.0": + version: 3.212.0 + resolution: "@aws-sdk/shared-ini-file-loader@npm:3.212.0" dependencies: - "@aws-sdk/types": 3.183.0 + "@aws-sdk/types": 3.212.0 tslib: ^2.3.1 - checksum: 317fd0d8012559754f82b88fb386d2a01c19be1d3a0b6da3a6436f71701ed8cd8fbe3f5aa869fd7bbfb8dfb148cd9de02aa68e93001200c76ba9e0691e135773 + checksum: 2c4f78b16338090d86ddc701f7ee13974387762b5f9c82b573b405a6e08db9bb979ac27809ac321cd8c33a3392c1576860475a47470cd59a1cb6092889d6ac17 languageName: node linkType: hard -"@aws-sdk/signature-v4@npm:3.183.0": - version: 3.183.0 - resolution: "@aws-sdk/signature-v4@npm:3.183.0" +"@aws-sdk/signature-v4@npm:3.212.0": + version: 3.212.0 + resolution: "@aws-sdk/signature-v4@npm:3.212.0" dependencies: - "@aws-sdk/is-array-buffer": 3.183.0 - "@aws-sdk/types": 3.183.0 - "@aws-sdk/util-hex-encoding": 3.183.0 - "@aws-sdk/util-middleware": 3.183.0 - "@aws-sdk/util-uri-escape": 3.183.0 + "@aws-sdk/is-array-buffer": 3.201.0 + "@aws-sdk/types": 3.212.0 + "@aws-sdk/util-hex-encoding": 3.201.0 + "@aws-sdk/util-middleware": 3.212.0 + "@aws-sdk/util-uri-escape": 3.201.0 tslib: ^2.3.1 - checksum: 6639a4925b194171907fc1cf61101470836f5a8fa363f3fcd7b70bbaa4c756f43e13ad93b575885218a68192c375295d359a7e91db370816bd8f39f9c158ba36 + checksum: dcbdb41fcb53c3bb890c26175716c9edb1da1450333a88c888742cd71b9d47a4d8bd1ce0c183115c5971ce3b152ea420ffd36ab6be6dd8e4ea285d66259a0ae5 languageName: node linkType: hard -"@aws-sdk/smithy-client@npm:3.183.0": - version: 3.183.0 - resolution: "@aws-sdk/smithy-client@npm:3.183.0" +"@aws-sdk/smithy-client@npm:3.212.0": + version: 3.212.0 + resolution: "@aws-sdk/smithy-client@npm:3.212.0" dependencies: - "@aws-sdk/middleware-stack": 3.183.0 - "@aws-sdk/types": 3.183.0 + "@aws-sdk/middleware-stack": 3.212.0 + "@aws-sdk/types": 3.212.0 tslib: ^2.3.1 - checksum: 70866adfd91fb35721bcd8667d9a4638e306de6ddc22be37a5b3ea19dfc2a1404a7325992f7f56d635a3bfd3b0ffa159d32f17df35c47ada4724ad8d5bb8d1ce + checksum: ecaa51cd72e0ab8f92f3989ba7dd5639082ef1db1832b155adc1d6e97d15d7f67ff7d27af165a487d11e862e84010b60e4744561925146dbe1d7307a7f50b00b languageName: node linkType: hard -"@aws-sdk/types@npm:3.183.0, @aws-sdk/types@npm:^3.1.0, @aws-sdk/types@npm:^3.110.0": - version: 3.183.0 - resolution: "@aws-sdk/types@npm:3.183.0" - checksum: ab6e888ef8f6d5f5c047dbe0899ac94ad4aa83b9ae1b1fd7a3b88eacec61ab912f215fda65c71f783418d569d1088641806f6b98c9a28ddae04cc70d0eeccea7 - languageName: node - linkType: hard - -"@aws-sdk/url-parser@npm:3.183.0": - version: 3.183.0 - resolution: "@aws-sdk/url-parser@npm:3.183.0" +"@aws-sdk/token-providers@npm:3.212.0": + version: 3.212.0 + resolution: "@aws-sdk/token-providers@npm:3.212.0" dependencies: - "@aws-sdk/querystring-parser": 3.183.0 - "@aws-sdk/types": 3.183.0 + "@aws-sdk/client-sso-oidc": 3.212.0 + "@aws-sdk/property-provider": 3.212.0 + "@aws-sdk/shared-ini-file-loader": 3.212.0 + "@aws-sdk/types": 3.212.0 tslib: ^2.3.1 - checksum: 54c99d47e927368db12b6aa1fe4331a27461502355e0c18e99d8e05d9a114529d0b15965ff885cae8e19e49692ad44bf3c323ffdc535d7129deac900f286d1d5 + checksum: be11407716a1f2891b64201475c085cfb8236df0075c22f3381c3e7ed9abe0f231017826935afd76c6b41ec1907d24e3c5e1e4537fd4c0d9c743ca1e6d127768 languageName: node linkType: hard -"@aws-sdk/util-base64-browser@npm:3.183.0": - version: 3.183.0 - resolution: "@aws-sdk/util-base64-browser@npm:3.183.0" +"@aws-sdk/types@npm:3.212.0, @aws-sdk/types@npm:^3.1.0, @aws-sdk/types@npm:^3.110.0": + version: 3.212.0 + resolution: "@aws-sdk/types@npm:3.212.0" + checksum: ba085aa2f70930adc250b4d142563cf886b9cbd98c011abe9d1d8dbad8b9cc8558a54d34bbeabed62a1a958a871c8d9d6cdaf43d57c31af8fc03a35a93ae5fb4 + languageName: node + linkType: hard + +"@aws-sdk/url-parser@npm:3.212.0": + version: 3.212.0 + resolution: "@aws-sdk/url-parser@npm:3.212.0" + dependencies: + "@aws-sdk/querystring-parser": 3.212.0 + "@aws-sdk/types": 3.212.0 + tslib: ^2.3.1 + checksum: cd1c837a255d38a84d453226bab8af749a5a1c7075f70eb80124cc92c3b7301c3bc11eec624ee0d68b3daa68162676eabccfae7d291f0e3ad916c735b531cf87 + languageName: node + linkType: hard + +"@aws-sdk/util-base64@npm:3.208.0": + version: 3.208.0 + resolution: "@aws-sdk/util-base64@npm:3.208.0" + dependencies: + "@aws-sdk/util-buffer-from": 3.208.0 + tslib: ^2.3.1 + checksum: 2ccab3453a3a3636f3f1397441574b3adb984e1ba3865030393108327ed7304cf80c9b31d69691e6aba85cfe6a611a881bbb724e544324240763bb4e96630ed9 + languageName: node + linkType: hard + +"@aws-sdk/util-body-length-browser@npm:3.188.0": + version: 3.188.0 + resolution: "@aws-sdk/util-body-length-browser@npm:3.188.0" dependencies: tslib: ^2.3.1 - checksum: 2c3a4dc7e285b146285ac23de155de5e885d96aa46b29f9c830b6f12541032c6a42be7fd412ec019ddb83e6f155f561d04065b99159515d26d28c0968965dcf2 + checksum: 1b08bd1e63ec843ee336f51d894c49bf3c4c2f96e50d1711a12f7d0c5b6f7a15b490e366fec55b63e77036002994bac12927b29de2eb9ac91e4f152b1af78e58 languageName: node linkType: hard -"@aws-sdk/util-base64-node@npm:3.183.0": - version: 3.183.0 - resolution: "@aws-sdk/util-base64-node@npm:3.183.0" - dependencies: - "@aws-sdk/util-buffer-from": 3.183.0 - tslib: ^2.3.1 - checksum: d8d0330aa768f816411a7b2343c500728501775d2f8d7c121d52d8484cbdd938102f3049e69e28574c838416ead0cb742494140609287b8d462bfb041218600d - languageName: node - linkType: hard - -"@aws-sdk/util-body-length-browser@npm:3.183.0": - version: 3.183.0 - resolution: "@aws-sdk/util-body-length-browser@npm:3.183.0" +"@aws-sdk/util-body-length-node@npm:3.208.0": + version: 3.208.0 + resolution: "@aws-sdk/util-body-length-node@npm:3.208.0" dependencies: tslib: ^2.3.1 - checksum: 294074e20e4eb46ea992fc9d50fac0b97875d1d09efa706d5298e34f4200226c90bb33bbe96c41c7e91a43fbe44e6cfc0654d09fcdb823fe579545ada65701d9 + checksum: 986b42b358656dec4e75c231213331c4f01785f9ab17c8b87b6e268b6880818a96117f1785cef9786e6c0f7e2c1332c80e8388a43bfd83e8c7224ad059a72733 languageName: node linkType: hard -"@aws-sdk/util-body-length-node@npm:3.183.0": - version: 3.183.0 - resolution: "@aws-sdk/util-body-length-node@npm:3.183.0" +"@aws-sdk/util-buffer-from@npm:3.208.0": + version: 3.208.0 + resolution: "@aws-sdk/util-buffer-from@npm:3.208.0" + dependencies: + "@aws-sdk/is-array-buffer": 3.201.0 + tslib: ^2.3.1 + checksum: 00bfa4d4494d3a1eb128e19104994d1aca8b3802e9aa218cecafb1ed3ff2ecf5c946485e06aa97ae312458842b0f31a6484dc945232f7cb0e357ba341cb2e53e + languageName: node + linkType: hard + +"@aws-sdk/util-config-provider@npm:3.208.0": + version: 3.208.0 + resolution: "@aws-sdk/util-config-provider@npm:3.208.0" dependencies: tslib: ^2.3.1 - checksum: 60697959c63731d6b4b334bed91d08c4e38e09c0ad95000509641370249c76c5df1ffa0a7cab7418d250a526f49e660f0c67cea28547e442ac47feb7623413b8 + checksum: 97b0414b120b4eb53001f3ab2135ee94937e47bd7bd0d0de7c6a7e00a282eaa78cd84be2bfd3e389340f0c0b2f7ba60da9a403f084721970ee55b779ecf7a451 languageName: node linkType: hard -"@aws-sdk/util-buffer-from@npm:3.183.0": - version: 3.183.0 - resolution: "@aws-sdk/util-buffer-from@npm:3.183.0" +"@aws-sdk/util-defaults-mode-browser@npm:3.212.0": + version: 3.212.0 + resolution: "@aws-sdk/util-defaults-mode-browser@npm:3.212.0" dependencies: - "@aws-sdk/is-array-buffer": 3.183.0 - tslib: ^2.3.1 - checksum: 5f16145cf68b0756f0930990cfba57ac343c83c6e9dc48bc8d4f488cd66548a9e186e702fa94ba33b69d852c2d019eedf4116ac676cf0dfb701081e39e0776dd - languageName: node - linkType: hard - -"@aws-sdk/util-config-provider@npm:3.183.0": - version: 3.183.0 - resolution: "@aws-sdk/util-config-provider@npm:3.183.0" - dependencies: - tslib: ^2.3.1 - checksum: 8af6bf5ba31ec0a2fcf994f0a13bde5ff948bcdba02d153cdeea2105ea5eaf934368456bc92f35bfa42a7475cd4d2d2b9a644dfb8b4c2670ae2f103c045dc8b4 - languageName: node - linkType: hard - -"@aws-sdk/util-defaults-mode-browser@npm:3.183.0": - version: 3.183.0 - resolution: "@aws-sdk/util-defaults-mode-browser@npm:3.183.0" - dependencies: - "@aws-sdk/property-provider": 3.183.0 - "@aws-sdk/types": 3.183.0 + "@aws-sdk/property-provider": 3.212.0 + "@aws-sdk/types": 3.212.0 bowser: ^2.11.0 tslib: ^2.3.1 - checksum: 8ff54acf1684dd9d82ca13a522c5d2d7ee305511a2748f6e8ef7dc43e668798269e51455ac81b905a5b000a704fd5536f178c84425b8c431500e6a8dc1418135 + checksum: 75fd275426a1708b0d353e497951a78d8b36297aa644342f063fcf26e321e6387944fe3d60beaa4d5fc40fa877b14277db0368a9d6120e6b83d56c84972c36b3 languageName: node linkType: hard -"@aws-sdk/util-defaults-mode-node@npm:3.183.0": - version: 3.183.0 - resolution: "@aws-sdk/util-defaults-mode-node@npm:3.183.0" +"@aws-sdk/util-defaults-mode-node@npm:3.212.0": + version: 3.212.0 + resolution: "@aws-sdk/util-defaults-mode-node@npm:3.212.0" dependencies: - "@aws-sdk/config-resolver": 3.183.0 - "@aws-sdk/credential-provider-imds": 3.183.0 - "@aws-sdk/node-config-provider": 3.183.0 - "@aws-sdk/property-provider": 3.183.0 - "@aws-sdk/types": 3.183.0 + "@aws-sdk/config-resolver": 3.212.0 + "@aws-sdk/credential-provider-imds": 3.212.0 + "@aws-sdk/node-config-provider": 3.212.0 + "@aws-sdk/property-provider": 3.212.0 + "@aws-sdk/types": 3.212.0 tslib: ^2.3.1 - checksum: 40665d251844c4add23e358d9171add7180e0f1fcd4bd99601f4bdd03daa2259fed2567fa200152e14c4d7b1acc1126997f5b4e74c569ee1032f9fee16e6b582 + checksum: ab2151cce3561378c3f07d78a898cdd627d097cc388785fe9e0df6f836f265bde98307ce800faaf8832a3723eff2258c00db2cc523425713b67c75ddc941b29e languageName: node linkType: hard -"@aws-sdk/util-hex-encoding@npm:3.183.0": - version: 3.183.0 - resolution: "@aws-sdk/util-hex-encoding@npm:3.183.0" +"@aws-sdk/util-endpoints@npm:3.212.0": + version: 3.212.0 + resolution: "@aws-sdk/util-endpoints@npm:3.212.0" + dependencies: + "@aws-sdk/types": 3.212.0 + tslib: ^2.3.1 + checksum: 6c1d9e47dee896e35b5a2b11c0c028d71d16ab707929901403997d30ca639a202ed0f9c19d7ff1c5affa2966813226925608c15695d0d540a593294e40afc4ef + languageName: node + linkType: hard + +"@aws-sdk/util-hex-encoding@npm:3.201.0": + version: 3.201.0 + resolution: "@aws-sdk/util-hex-encoding@npm:3.201.0" dependencies: tslib: ^2.3.1 - checksum: 1bf9577d96d01c13a3118e5d767c1e16b1f4f1c574168d78e128e0342edac30c87776340e9e14deb1e9adf539a6b2f953338adabc097fb143e870889698a6308 + checksum: a27f3365dfb1e6ece79ea34fd6e2c4540eb0084536d7300ff0ff42a7334ddf07f21958c6cfd0bbeb71361ee408e16deae2c82b7c7378b048b8e81a52c75f190a languageName: node linkType: hard @@ -1026,67 +1098,67 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/util-middleware@npm:3.183.0": - version: 3.183.0 - resolution: "@aws-sdk/util-middleware@npm:3.183.0" +"@aws-sdk/util-middleware@npm:3.212.0": + version: 3.212.0 + resolution: "@aws-sdk/util-middleware@npm:3.212.0" dependencies: tslib: ^2.3.1 - checksum: e1a433aebae5e74b365ecb4a57e3c583e7b89697f24b0c9edde93b8ba358e92256550329efb7c6924c0a5037e1bad2b7a1c8ed1b6d02e1aaaa35bca502923752 + checksum: d4bd527193fef871b480636aa99ab7b71a576fc2659e0a12f2ed14e48464c5267a4c6a24bb140ba88cd8205f224326479a548dc63de24b1b9b43ff3098041f7c languageName: node linkType: hard -"@aws-sdk/util-uri-escape@npm:3.183.0": - version: 3.183.0 - resolution: "@aws-sdk/util-uri-escape@npm:3.183.0" +"@aws-sdk/util-uri-escape@npm:3.201.0": + version: 3.201.0 + resolution: "@aws-sdk/util-uri-escape@npm:3.201.0" dependencies: tslib: ^2.3.1 - checksum: 9d5f30821cdad15ed6912f7406f83b5b5a45358b208a9374ea944313d9853da8f4ec9881aefa5d6fe78caeaefbb0d103c8485a32f7c25e8b2cae193ea2233bb8 + checksum: 8bd751459eaab75a9b61801f3484cfa5c4e0133381ace6ec901cb9b92b1fee99beb4ef9c0f87ade59425a882ed3a280255d9b2fd8da6a6286e49efb9af8f0d55 languageName: node linkType: hard -"@aws-sdk/util-user-agent-browser@npm:3.183.0": - version: 3.183.0 - resolution: "@aws-sdk/util-user-agent-browser@npm:3.183.0" +"@aws-sdk/util-user-agent-browser@npm:3.212.0": + version: 3.212.0 + resolution: "@aws-sdk/util-user-agent-browser@npm:3.212.0" dependencies: - "@aws-sdk/types": 3.183.0 + "@aws-sdk/types": 3.212.0 bowser: ^2.11.0 tslib: ^2.3.1 - checksum: 21349881a4069a09fb0f8c0f5a6d69e6659255008861817c5d9dada61bf032f0bd7d5735f01dbddbc310d228ea843fbec6ada9f83a4197909efd6ebadb364f6b + checksum: e55abbde07b550ff6b061376b00839ffb184e4e3238c307ce85bcf44166941cf74fc59fbd97c2e6923923b88eb5df5bbad482048271b91ca3b46e6988e85be7b languageName: node linkType: hard -"@aws-sdk/util-user-agent-node@npm:3.183.0": - version: 3.183.0 - resolution: "@aws-sdk/util-user-agent-node@npm:3.183.0" +"@aws-sdk/util-user-agent-node@npm:3.212.0": + version: 3.212.0 + resolution: "@aws-sdk/util-user-agent-node@npm:3.212.0" dependencies: - "@aws-sdk/node-config-provider": 3.183.0 - "@aws-sdk/types": 3.183.0 + "@aws-sdk/node-config-provider": 3.212.0 + "@aws-sdk/types": 3.212.0 tslib: ^2.3.1 peerDependencies: aws-crt: ">=1.0.0" peerDependenciesMeta: aws-crt: optional: true - checksum: 727d46842053f8f19789fee1550e235adff399559ef6c9b8dd0fe9edd7ac629a9b5c5849377553bfff37deba1ba9889d0c313f059f27cfc40a33895990c1f894 + checksum: 6d5f0bb7f66c9135c23f6db5f6d58122db130d4b4261278f11a6db627057e03c76e237a98d91eef05aa328202f55e3fb7f70eba690640df025dfa07f948bf678 languageName: node linkType: hard -"@aws-sdk/util-utf8-browser@npm:3.183.0, @aws-sdk/util-utf8-browser@npm:^3.0.0": - version: 3.183.0 - resolution: "@aws-sdk/util-utf8-browser@npm:3.183.0" +"@aws-sdk/util-utf8-browser@npm:3.188.0, @aws-sdk/util-utf8-browser@npm:^3.0.0": + version: 3.188.0 + resolution: "@aws-sdk/util-utf8-browser@npm:3.188.0" dependencies: tslib: ^2.3.1 - checksum: f1c9cbafc3dcf5b04264c3708509117d5e6f6b373fb30712a0cd9d09966a2cdead0a91067a8e9513abac9b082971fd40519e421a2e046b3653ce1ede136197c2 + checksum: dacd27164aa0835888434e080b67f04510e2281560540ff73496f2d0aa73b0b7f830ec08491b35c3a51bf6214615579182aff8727e151e54a74a97a197a2ac31 languageName: node linkType: hard -"@aws-sdk/util-utf8-node@npm:3.183.0": - version: 3.183.0 - resolution: "@aws-sdk/util-utf8-node@npm:3.183.0" +"@aws-sdk/util-utf8-node@npm:3.208.0": + version: 3.208.0 + resolution: "@aws-sdk/util-utf8-node@npm:3.208.0" dependencies: - "@aws-sdk/util-buffer-from": 3.183.0 + "@aws-sdk/util-buffer-from": 3.208.0 tslib: ^2.3.1 - checksum: c37f2bd388783c33c981afcd5a6a80481cc4e019f42bc5ab10ba2dfb039a4684acb4fa30df579cb3a5b509f61b1261870b30cd966c179029adb2a42672c0a871 + checksum: 0f4c1d0d3f6eb40d92bc7163c6dcf97f90b3a8be05df46ba4f9bb7723a3e6acabf2cb0f2486411b03d22e8fcccae9e757ed02afad384ff5f44a3a659a78c5752 languageName: node linkType: hard @@ -19928,7 +20000,7 @@ __metadata: languageName: node linkType: hard -"entities@npm:2.2.0, entities@npm:^2.0.0": +"entities@npm:^2.0.0": version: 2.2.0 resolution: "entities@npm:2.2.0" checksum: 19010dacaf0912c895ea262b4f6128574f9ccf8d4b3b65c7e8334ad0079b3706376360e28d8843ff50a78aabcb8f08f0a32dbfacdc77e47ed77ca08b713669b3 @@ -21422,12 +21494,14 @@ __metadata: languageName: node linkType: hard -"fast-xml-parser@npm:3.19.0": - version: 3.19.0 - resolution: "fast-xml-parser@npm:3.19.0" +"fast-xml-parser@npm:4.0.11": + version: 4.0.11 + resolution: "fast-xml-parser@npm:4.0.11" + dependencies: + strnum: ^1.0.5 bin: - xml2js: cli.js - checksum: d9da9145f73d90c05ee2746d80c78eca4da0249dea8c81ea8f1a6e1245e62988ed4a040dbd1c7229b1e0bdcbf69d33c882e0ac337d10c7eedb159a4dc9779327 + fxparser: src/cli/cli.js + checksum: d8a08e4d5597e0fc00a86735195872eeb03008913e298830941516f3766e16ee555e2d431acc92e1dda887938edc445252ec5b59494aab60a8389888bd13719c languageName: node linkType: hard @@ -34580,6 +34654,13 @@ __metadata: languageName: node linkType: hard +"strnum@npm:^1.0.5": + version: 1.0.5 + resolution: "strnum@npm:1.0.5" + checksum: 651b2031db5da1bf4a77fdd2f116a8ac8055157c5420f5569f64879133825915ad461513e7202a16d7fec63c54fd822410d0962f8ca12385c4334891b9ae6dd2 + languageName: node + linkType: hard + "strtok3@npm:^6.2.4": version: 6.2.4 resolution: "strtok3@npm:6.2.4" From b1c63c9e195c10db30a10403f451ea6b9c688f11 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 21 Nov 2022 15:16:16 +0000 Subject: [PATCH 58/73] Update dependency marked to v4.2.3 Signed-off-by: Renovate Bot --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 0bc2702bd3..5eebd068e1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -27030,11 +27030,11 @@ __metadata: linkType: hard "marked@npm:^4.0.10, marked@npm:^4.0.14": - version: 4.1.1 - resolution: "marked@npm:4.1.1" + version: 4.2.3 + resolution: "marked@npm:4.2.3" bin: marked: bin/marked.js - checksum: 717e3357952ee53de831bf0eb110ed075bebca2376c58bcdf7ee523ef540d45308ad6d51b2c933da0968832ea4386f31c142ca65443e77c098e84f6cce73e418 + checksum: 21b9f6cc4e7695b5e1f251b7b6c98fdc29c25f7ee6c8f4d5c51654856ea36d6222e9a5a227a9b89ccba717dcf7a722022f099aa0dc7caad8e041c996906c23d0 languageName: node linkType: hard From 70fa5ec3ec9eb52ffde1b613d67de6ea688692dc Mon Sep 17 00:00:00 2001 From: Phil Kuang Date: Mon, 21 Nov 2022 10:28:44 -0500 Subject: [PATCH 59/73] fix(GithubMultiOrgProcessor): correctly apply team memberships Signed-off-by: Phil Kuang --- .changeset/clever-rivers-obey.md | 5 ++ .../src/lib/org.test.ts | 2 +- .../src/lib/org.ts | 18 +++++-- .../GithubMultiOrgReaderProcessor.ts | 47 +++++++++++++++---- .../GithubOrgReaderProcessor.test.ts | 24 ++++++++-- 5 files changed, 77 insertions(+), 19 deletions(-) create mode 100644 .changeset/clever-rivers-obey.md diff --git a/.changeset/clever-rivers-obey.md b/.changeset/clever-rivers-obey.md new file mode 100644 index 0000000000..0fac8711e9 --- /dev/null +++ b/.changeset/clever-rivers-obey.md @@ -0,0 +1,5 @@ +--- +'@backstage/plugin-catalog-backend-module-github': patch +--- + +Fixes the assignment of group member references in `GithubMultiOrgProcessor` so membership relations are resolved correctly. diff --git a/plugins/catalog-backend-module-github/src/lib/org.test.ts b/plugins/catalog-backend-module-github/src/lib/org.test.ts index 712c7c0b88..1cdc55a4da 100644 --- a/plugins/catalog-backend-module-github/src/lib/org.test.ts +++ b/plugins/catalog-backend-module-github/src/lib/org.test.ts @@ -79,7 +79,7 @@ describe('assignGroupsToUsers', () => { spec: { type: 'team', children: [], - members: ['u1', 'u2'], + members: ['default/u1', 'default/u2'], }, }, { diff --git a/plugins/catalog-backend-module-github/src/lib/org.ts b/plugins/catalog-backend-module-github/src/lib/org.ts index 275c5f4aeb..4336f2d49c 100644 --- a/plugins/catalog-backend-module-github/src/lib/org.ts +++ b/plugins/catalog-backend-module-github/src/lib/org.ts @@ -17,6 +17,8 @@ import { DEFAULT_NAMESPACE, GroupEntity, + parseEntityRef, + stringifyEntityRef, UserEntity, } from '@backstage/catalog-model'; @@ -65,14 +67,20 @@ export function assignGroupsToUsers( group.metadata.namespace !== DEFAULT_NAMESPACE ? `${group.metadata.namespace}/${group.metadata.name}` : group.metadata.name; - return [groupKey, group.spec.members || []]; + // Fully qualify member refs so they can be keyed off of since they may contain namespace prefixes + return [ + groupKey, + group.spec.members?.map(m => + stringifyEntityRef(parseEntityRef(m, { defaultKind: 'user' })), + ) || [], + ]; }), ); - const usersByName = new Map(users.map(u => [u.metadata.name, u])); - for (const [groupName, userNames] of groupMemberUsers.entries()) { - for (const userName of userNames) { - const user = usersByName.get(userName); + const usersByRef = new Map(users.map(u => [stringifyEntityRef(u), u])); + for (const [groupName, userRefs] of groupMemberUsers.entries()) { + for (const ref of userRefs) { + const user = usersByRef.get(ref); if (user && !user.spec.memberOf?.includes(groupName)) { if (!user.spec.memberOf) { user.spec.memberOf = []; diff --git a/plugins/catalog-backend-module-github/src/processors/GithubMultiOrgReaderProcessor.ts b/plugins/catalog-backend-module-github/src/processors/GithubMultiOrgReaderProcessor.ts index 745f52d6c5..7777da6b1b 100644 --- a/plugins/catalog-backend-module-github/src/processors/GithubMultiOrgReaderProcessor.ts +++ b/plugins/catalog-backend-module-github/src/processors/GithubMultiOrgReaderProcessor.ts @@ -14,7 +14,12 @@ * limitations under the License. */ -import { GroupEntity } from '@backstage/catalog-model'; +import { + DEFAULT_NAMESPACE, + GroupEntity, + stringifyEntityRef, + UserEntity, +} from '@backstage/catalog-model'; import { Config } from '@backstage/config'; import { DefaultGithubCredentialsProvider, @@ -36,6 +41,7 @@ import { assignGroupsToUsers, buildOrgHierarchy, defaultOrganizationTeamTransformer, + defaultUserTransformer, getOrganizationTeams, getOrganizationUsers, GithubMultiOrgConfig, @@ -141,8 +147,19 @@ export class GithubMultiOrgReaderProcessor implements CatalogProcessor { client, orgConfig.name, tokenType, - this.options.userTransformer, + async (githubUser, ctx): Promise => { + const result = this.options.userTransformer + ? await this.options.userTransformer(githubUser, ctx) + : await defaultUserTransformer(githubUser, ctx); + + if (result) { + result.metadata.namespace = orgConfig.userNamespace; + } + + return result; + }, ); + const { groups } = await getOrganizationTeams( client, orgConfig.name, @@ -153,6 +170,13 @@ export class GithubMultiOrgReaderProcessor implements CatalogProcessor { if (result) { result.metadata.namespace = orgConfig.groupNamespace; + // Group `spec.members` inherits the namespace of it's group so need to explicitly specify refs here + result.spec.members = team.members.map( + user => + `${orgConfig.userNamespace ?? DEFAULT_NAMESPACE}/${ + user.login + }`, + ); } return result; @@ -164,15 +188,18 @@ export class GithubMultiOrgReaderProcessor implements CatalogProcessor { `Read ${users.length} GitHub users and ${groups.length} GitHub teams from ${orgConfig.name} in ${duration} seconds`, ); - let prefix: string = orgConfig.userNamespace ?? ''; - if (prefix.length > 0) prefix += '/'; - - users.forEach(u => { - if (!allUsersMap.has(prefix + u.metadata.name)) { - allUsersMap.set(prefix + u.metadata.name, u); + // Grab current users from `allUsersMap` if they already exist in our + // pending users so we can append to their group membership relations + const pendingUsers = users.map(u => { + const userRef = stringifyEntityRef(u); + if (!allUsersMap.has(userRef)) { + allUsersMap.set(userRef, u); } + + return allUsersMap.get(userRef); }); - assignGroupsToUsers(users, groups); + + assignGroupsToUsers(pendingUsers, groups); buildOrgHierarchy(groups); for (const group of groups) { @@ -185,6 +212,8 @@ export class GithubMultiOrgReaderProcessor implements CatalogProcessor { } } + // Emit all users at the end after all orgs have been processed + // so all memberships across org groups are accounted for const allUsers = Array.from(allUsersMap.values()); for (const user of allUsers) { emit(processingResult.entity(location, user)); diff --git a/plugins/catalog-backend-module-github/src/processors/GithubOrgReaderProcessor.test.ts b/plugins/catalog-backend-module-github/src/processors/GithubOrgReaderProcessor.test.ts index 2bb0c538eb..ce81e2cf42 100644 --- a/plugins/catalog-backend-module-github/src/processors/GithubOrgReaderProcessor.test.ts +++ b/plugins/catalog-backend-module-github/src/processors/GithubOrgReaderProcessor.test.ts @@ -85,7 +85,10 @@ describe('GithubOrgReaderProcessor', () => { mockClient .mockResolvedValueOnce({ organization: { - membersWithRole: { pageInfo: { hasNextPage: false }, nodes: [{}] }, + membersWithRole: { + pageInfo: { hasNextPage: false }, + nodes: [{ login: 'foo' }], + }, }, }) .mockResolvedValueOnce({ @@ -93,7 +96,12 @@ describe('GithubOrgReaderProcessor', () => { teams: { pageInfo: { hasNextPage: false }, nodes: [ - { members: { pageInfo: { hasNextPage: false }, nodes: [{}] } }, + { + members: { + pageInfo: { hasNextPage: false }, + nodes: [{ login: 'foo' }], + }, + }, ], }, }, @@ -134,7 +142,10 @@ describe('GithubOrgReaderProcessor', () => { mockClient .mockResolvedValueOnce({ organization: { - membersWithRole: { pageInfo: { hasNextPage: false }, nodes: [{}] }, + membersWithRole: { + pageInfo: { hasNextPage: false }, + nodes: [{ login: 'foo' }], + }, }, }) .mockResolvedValueOnce({ @@ -142,7 +153,12 @@ describe('GithubOrgReaderProcessor', () => { teams: { pageInfo: { hasNextPage: false }, nodes: [ - { members: { pageInfo: { hasNextPage: false }, nodes: [{}] } }, + { + members: { + pageInfo: { hasNextPage: false }, + nodes: [{ login: 'foo' }], + }, + }, ], }, }, From 3b39a1209a0184f85bfffce2eac668bae84d6bb4 Mon Sep 17 00:00:00 2001 From: Mathias Bronner Date: Mon, 21 Nov 2022 16:48:01 +0100 Subject: [PATCH 60/73] chore: fix PR feedback Signed-off-by: Mathias Bronner --- .../GroupListPicker/GroupListPickerButton.tsx | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/plugins/org-react/src/components/GroupListPicker/GroupListPickerButton.tsx b/plugins/org-react/src/components/GroupListPicker/GroupListPickerButton.tsx index 3f9528b9bd..01ffe7e58b 100644 --- a/plugins/org-react/src/components/GroupListPicker/GroupListPickerButton.tsx +++ b/plugins/org-react/src/components/GroupListPicker/GroupListPickerButton.tsx @@ -22,25 +22,22 @@ import PeopleIcon from '@material-ui/icons/People'; const useStyles = makeStyles((theme: BackstageTheme) => ({ btn: { - margin: 0, - padding: 10, + padding: '10px', width: '100%', cursor: 'pointer', justifyContent: 'space-between', - '& p': { - width: '100%', - textAlign: 'left', - marginLeft: 4, - }, }, title: { fontSize: '1.5rem', fontStyle: 'normal', fontWeight: theme.typography.fontWeightBold, - letterSpacing: '-0.25px', height: '32px', + letterSpacing: '-0.25px', marginBottom: 0, + marginLeft: '4px', + textAlign: 'left', textTransform: 'none', + width: '100%', }, icon: { transform: 'scale(1.5)', From c4bf273796fab261644391d21b8de37e8c11b762 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 21 Nov 2022 16:09:15 +0000 Subject: [PATCH 61/73] Update graphqlcodegenerator monorepo Signed-off-by: Renovate Bot --- yarn.lock | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/yarn.lock b/yarn.lock index a45895aabe..95bdb02c39 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8442,18 +8442,18 @@ __metadata: linkType: hard "@graphql-codegen/graphql-modules-preset@npm:^2.3.2": - version: 2.5.5 - resolution: "@graphql-codegen/graphql-modules-preset@npm:2.5.5" + version: 2.5.6 + resolution: "@graphql-codegen/graphql-modules-preset@npm:2.5.6" dependencies: "@graphql-codegen/plugin-helpers": ^2.7.2 - "@graphql-codegen/visitor-plugin-common": 2.13.1 + "@graphql-codegen/visitor-plugin-common": 2.13.2 "@graphql-tools/utils": ^8.8.0 change-case-all: 1.0.14 parse-filepath: ^1.0.2 tslib: ~2.4.0 peerDependencies: graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 - checksum: d499001af49d0a829c6adcbc211d252e8d5a42ba1635c32265ad99d187666425150c99815d48e591ca66e811a2b09860a5f59ba02484a3a3f0dcf4dcba8a6fb8 + checksum: e446c4277f66304d34e9883c37dd241559ba47695716d8ef911514de998c927e2f37770d70b87b56238e3fed1bf43eff9ec7bce679e06fb4eb0b759c98f6cb25 languageName: node linkType: hard @@ -8487,39 +8487,39 @@ __metadata: linkType: hard "@graphql-codegen/typescript-resolvers@npm:^2.4.3": - version: 2.7.6 - resolution: "@graphql-codegen/typescript-resolvers@npm:2.7.6" + version: 2.7.7 + resolution: "@graphql-codegen/typescript-resolvers@npm:2.7.7" dependencies: "@graphql-codegen/plugin-helpers": ^2.7.2 - "@graphql-codegen/typescript": ^2.8.1 - "@graphql-codegen/visitor-plugin-common": 2.13.1 + "@graphql-codegen/typescript": ^2.8.2 + "@graphql-codegen/visitor-plugin-common": 2.13.2 "@graphql-tools/utils": ^8.8.0 auto-bind: ~4.0.0 tslib: ~2.4.0 peerDependencies: graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 - checksum: f552f74aa264c0f9024834d6d1c126f9f1a69dccf7278525c7609ad1820daf87607447f30351506fe3728a855690928ba7775edbbbff0fee610a2ce02913a98e + checksum: f7b4fcda7fa3d73a48bf93e32ee73fdd8426d1d89951b22555702a98445b110aeb0715a1ed29dc1cdee7cbe0264510d021e98b57798a51bcf07eab34c4445cf5 languageName: node linkType: hard -"@graphql-codegen/typescript@npm:^2.4.2, @graphql-codegen/typescript@npm:^2.8.1": - version: 2.8.1 - resolution: "@graphql-codegen/typescript@npm:2.8.1" +"@graphql-codegen/typescript@npm:^2.4.2, @graphql-codegen/typescript@npm:^2.8.2": + version: 2.8.2 + resolution: "@graphql-codegen/typescript@npm:2.8.2" dependencies: "@graphql-codegen/plugin-helpers": ^2.7.2 "@graphql-codegen/schema-ast": ^2.5.1 - "@graphql-codegen/visitor-plugin-common": 2.13.1 + "@graphql-codegen/visitor-plugin-common": 2.13.2 auto-bind: ~4.0.0 tslib: ~2.4.0 peerDependencies: graphql: ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 - checksum: 2b5466190e385c557eed6210b861fb9e632fb61b90bd0f97ff983f359c0ad8106228667c9ff2201842100417a07cfaffa91794ef03058a151df256d733363fa2 + checksum: 7e3beda7a0a8b9b84ee7c40c54913ef496bd8716ddd68028a55b06743657bc1100c4a30cc2932745520f5e008aa3f386731bf09a88e05cc92005e066b57b21c8 languageName: node linkType: hard -"@graphql-codegen/visitor-plugin-common@npm:2.13.1": - version: 2.13.1 - resolution: "@graphql-codegen/visitor-plugin-common@npm:2.13.1" +"@graphql-codegen/visitor-plugin-common@npm:2.13.2": + version: 2.13.2 + resolution: "@graphql-codegen/visitor-plugin-common@npm:2.13.2" dependencies: "@graphql-codegen/plugin-helpers": ^2.7.2 "@graphql-tools/optimize": ^1.3.0 @@ -8533,7 +8533,7 @@ __metadata: tslib: ~2.4.0 peerDependencies: graphql: ^0.8.0 || ^0.9.0 || ^0.10.0 || ^0.11.0 || ^0.12.0 || ^0.13.0 || ^14.0.0 || ^15.0.0 || ^16.0.0 - checksum: 0c329aa6e435602f2f6c1569ec2091b7850f58cc5dca7ac763c38c82588545ec1110c1de587f5f3949b11ff96f94401d1e63e329607d78424583b276fd08f1ae + checksum: b4b00f9d0cd8be221da69480d0d861f025eb7bec13aa9897acb9a3a485b5e0ca04df17745fa9850efcafefe4de54dab2e4d50dafc534df3fecd9095e6122eaa7 languageName: node linkType: hard From 2318245d91cd171f16a324eef29dab5714b3bcf6 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 21 Nov 2022 17:07:26 +0000 Subject: [PATCH 62/73] Update CodeMirror Signed-off-by: Renovate Bot --- yarn.lock | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/yarn.lock b/yarn.lock index 39011d8815..f2a5be47b9 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8017,11 +8017,11 @@ __metadata: linkType: hard "@codemirror/legacy-modes@npm:^6.1.0": - version: 6.2.0 - resolution: "@codemirror/legacy-modes@npm:6.2.0" + version: 6.3.0 + resolution: "@codemirror/legacy-modes@npm:6.3.0" dependencies: "@codemirror/language": ^6.0.0 - checksum: c4449ad4e9b80fad982956ace705af5e21cd8c8bb248930bcb394ec019babf1a7b23e1e2894428b67d28a0c5bee99592320673690d19039392ddbc77075ef132 + checksum: d4da9b338376b72c1936e6780b4b53ec6a9581ac3d47ad2c1ec26a0068183b77489bbffde747837c89a5a92c69e9724ddebedc7790975a22f783fb13ede94403 languageName: node linkType: hard @@ -8047,10 +8047,10 @@ __metadata: languageName: node linkType: hard -"@codemirror/state@npm:^6.0.0, @codemirror/state@npm:^6.1.1": - version: 6.1.2 - resolution: "@codemirror/state@npm:6.1.2" - checksum: 7eda4b3eb6a777fecaa5a62e95a162aa163ccff01913d21a88d1157247390d9b57e6bcf54738be0b98aff8ba3a6ec3cb7aeb3b9714b019cb6c05242da9d9fdfe +"@codemirror/state@npm:^6.0.0, @codemirror/state@npm:^6.1.1, @codemirror/state@npm:^6.1.4": + version: 6.1.4 + resolution: "@codemirror/state@npm:6.1.4" + checksum: ef6bc495d3b89d2f0202b6b1c0fc3e3610f8d815f4ca91f86153d6093c9b93ddbe2cfb787802d07514a7114f0b200cf2eeb54c1cd34d7e00eff774ecea97d845 languageName: node linkType: hard @@ -8067,13 +8067,13 @@ __metadata: linkType: hard "@codemirror/view@npm:^6.0.0": - version: 6.4.2 - resolution: "@codemirror/view@npm:6.4.2" + version: 6.5.1 + resolution: "@codemirror/view@npm:6.5.1" dependencies: - "@codemirror/state": ^6.0.0 + "@codemirror/state": ^6.1.4 style-mod: ^4.0.0 w3c-keyname: ^2.2.4 - checksum: c79982563ad90adf1d7504b28bb1304a73f669c69634a1630b51521e4023b3630c15601daf2857683b34a86cac4ca24dc5b538a9d944616617f99c1a7da7faa6 + checksum: 1bd66b4f174642c559a521b546e80a67556fdc1b7cc7d1c7baf1cac37fed83e0e63d7a9ff6a88f3991a82d11bbbcfcca6e7b3491dcdd536c4c114de142b0300d languageName: node linkType: hard From 6b37068084ef5ddc0e421434964256a3e84faf2d Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 21 Nov 2022 17:08:35 +0000 Subject: [PATCH 63/73] Update dependency @gitbeaker/browser to v35.8.0 Signed-off-by: Renovate Bot --- yarn.lock | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/yarn.lock b/yarn.lock index 39011d8815..b57a29cf54 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8296,28 +8296,28 @@ __metadata: linkType: hard "@gitbeaker/browser@npm:^35.6.0": - version: 35.7.0 - resolution: "@gitbeaker/browser@npm:35.7.0" + version: 35.8.0 + resolution: "@gitbeaker/browser@npm:35.8.0" dependencies: - "@gitbeaker/core": ^35.7.0 - "@gitbeaker/requester-utils": ^35.7.0 + "@gitbeaker/core": ^35.8.0 + "@gitbeaker/requester-utils": ^35.8.0 delay: ^5.0.0 ky: 0.28.7 - checksum: 35b1afbd047ba172a21e548259fb38764c50e4794d64e33e6be7ae16552dc41882dc2107df70da35a3431ccb5014604efd4b189d16db2251349d0d0b01d65618 + checksum: 23fa14d64661108c03a5d141123037aebb68e257d84e26bd8f6241df65a0958eaa79b8b491e0f08159e325cdc3244f79b2426dedcc2354ad106316ea499415ac languageName: node linkType: hard -"@gitbeaker/core@npm:^35.6.0, @gitbeaker/core@npm:^35.7.0": - version: 35.7.0 - resolution: "@gitbeaker/core@npm:35.7.0" +"@gitbeaker/core@npm:^35.6.0, @gitbeaker/core@npm:^35.7.0, @gitbeaker/core@npm:^35.8.0": + version: 35.8.0 + resolution: "@gitbeaker/core@npm:35.8.0" dependencies: - "@gitbeaker/requester-utils": ^35.7.0 + "@gitbeaker/requester-utils": ^35.8.0 form-data: ^4.0.0 li: ^1.3.0 mime: ^3.0.0 query-string: ^7.0.0 xcase: ^2.0.1 - checksum: 5039557ba432a2478edb2cf767cef9d5f5f46f1de78219166eb6ec1bf6ad8e1dbf090085e31526fa58010ae4966bad9232af368474d9765b54bb3334173cb3cb + checksum: b894e1ac86dc8ac85f2db51d83d392899c10bb555b2448900f502ffeb49d9f36c1063c7151128ca96951ac472c11be6320584c4bec873501e96607bd7c25a37b languageName: node linkType: hard @@ -8334,14 +8334,14 @@ __metadata: languageName: node linkType: hard -"@gitbeaker/requester-utils@npm:^35.7.0": - version: 35.7.0 - resolution: "@gitbeaker/requester-utils@npm:35.7.0" +"@gitbeaker/requester-utils@npm:^35.7.0, @gitbeaker/requester-utils@npm:^35.8.0": + version: 35.8.0 + resolution: "@gitbeaker/requester-utils@npm:35.8.0" dependencies: form-data: ^4.0.0 qs: ^6.10.1 xcase: ^2.0.1 - checksum: f928affa8c5cd6b1b2811d77e14e2d60611bc9b93767fce936125b59e75b9786e4d760b5dc624719fbfdb8638905d957817845bcee01b147bbe5aebf60a635c1 + checksum: 6bd49b821fb6f262c6306c06fc4812f41902c864a7d941b0d112381b352f680e50ebd6180840e21a89d761427cb1326d9829b74c98c95bf9fa2a5d53872a400a languageName: node linkType: hard From a149376b2e1c143de941e5c8df7f04e19ab83578 Mon Sep 17 00:00:00 2001 From: bnechyporenko Date: Mon, 21 Nov 2022 18:23:01 +0100 Subject: [PATCH 64/73] Incorporated the feedback Signed-off-by: bnechyporenko --- app-config.yaml | 5 ----- plugins/cost-insights/README.md | 2 +- plugins/cost-insights/src/hooks/useConfig.tsx | 1 - 3 files changed, 1 insertion(+), 7 deletions(-) diff --git a/app-config.yaml b/app-config.yaml index 4a7e1cf9b8..ef133491af 100644 --- a/app-config.yaml +++ b/app-config.yaml @@ -373,11 +373,6 @@ auth: development: {} costInsights: engineerCost: 200000 - baseCurrency: - locale: en-US - options: - currency: USD - minimumFractionDigits: 3 products: computeEngine: name: Compute Engine diff --git a/plugins/cost-insights/README.md b/plugins/cost-insights/README.md index 945274202a..f65194551a 100644 --- a/plugins/cost-insights/README.md +++ b/plugins/cost-insights/README.md @@ -187,7 +187,7 @@ In the case you would like to show your baseline costs on the graph on other cur costInsights: engineerCost: 200000 baseCurrency: - locale: en-US + locale: nl-NL options: currency: EUR minimumFractionDigits: 3 diff --git a/plugins/cost-insights/src/hooks/useConfig.tsx b/plugins/cost-insights/src/hooks/useConfig.tsx index b1cfaf2002..6095f97d49 100644 --- a/plugins/cost-insights/src/hooks/useConfig.tsx +++ b/plugins/cost-insights/src/hooks/useConfig.tsx @@ -49,7 +49,6 @@ import { configApiRef, useApi } from '@backstage/core-plugin-api'; * baseCurrency: * locale: nl-NL * options: - * style: currency * currency: EUR * minimumFractionDigits: 3 * currencies: From 6334d5694d1eb4cc45fe97d388bc0b240cd23249 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 21 Nov 2022 18:46:25 +0000 Subject: [PATCH 65/73] Update dependency @gitbeaker/node to v35.8.0 Signed-off-by: Renovate Bot --- yarn.lock | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/yarn.lock b/yarn.lock index 6b140cae27..bb40384aab 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8307,7 +8307,7 @@ __metadata: languageName: node linkType: hard -"@gitbeaker/core@npm:^35.6.0, @gitbeaker/core@npm:^35.7.0, @gitbeaker/core@npm:^35.8.0": +"@gitbeaker/core@npm:^35.6.0, @gitbeaker/core@npm:^35.8.0": version: 35.8.0 resolution: "@gitbeaker/core@npm:35.8.0" dependencies: @@ -8322,19 +8322,19 @@ __metadata: linkType: hard "@gitbeaker/node@npm:^35.1.0": - version: 35.7.0 - resolution: "@gitbeaker/node@npm:35.7.0" + version: 35.8.0 + resolution: "@gitbeaker/node@npm:35.8.0" dependencies: - "@gitbeaker/core": ^35.7.0 - "@gitbeaker/requester-utils": ^35.7.0 + "@gitbeaker/core": ^35.8.0 + "@gitbeaker/requester-utils": ^35.8.0 delay: ^5.0.0 got: ^11.8.3 xcase: ^2.0.1 - checksum: 879595b065f40027b6191f609bddba05988c308c924323aa0cf30220801c21ba01e62c3395fd9cd0072ff6bc330f211e7aadcf63d80e893d7d33149c09ba221e + checksum: af75fa2348ec6fcdd1605f269df10c13bd7d53f9a5c42da7e013db920a1129075072de3a0ada97d800be732575bb838b8a462472faebcfaf9fe243b93d29a464 languageName: node linkType: hard -"@gitbeaker/requester-utils@npm:^35.7.0, @gitbeaker/requester-utils@npm:^35.8.0": +"@gitbeaker/requester-utils@npm:^35.8.0": version: 35.8.0 resolution: "@gitbeaker/requester-utils@npm:35.8.0" dependencies: From f1816019406cf9464dd289ce8e2ef7fc68b5da58 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 21 Nov 2022 18:47:36 +0000 Subject: [PATCH 66/73] Update dependency @google-cloud/container to v4.4.0 Signed-off-by: Renovate Bot --- yarn.lock | 26 +++++++++++++------------- 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/yarn.lock b/yarn.lock index 6b140cae27..7a4980f0bf 100644 --- a/yarn.lock +++ b/yarn.lock @@ -8346,11 +8346,11 @@ __metadata: linkType: hard "@google-cloud/container@npm:^4.0.0": - version: 4.3.0 - resolution: "@google-cloud/container@npm:4.3.0" + version: 4.4.0 + resolution: "@google-cloud/container@npm:4.4.0" dependencies: - google-gax: ^3.3.0 - checksum: cc1dc2ca7f6b47bac0d374013e78b05372f25dce7a3f84d799899af274d26fa22f23d2554a66ca1db528c3bbbec1cfbac86dfa9fc72cc78f175bcb737900b3ed + google-gax: ^3.5.2 + checksum: 39e7ba3b8cd7e50908315eee5c42461b8cee909c5653ffc817503757e867d63815c5ca8f540b7566f38be9ae0454ed89d2efe95b64961a8692a9348ddf92074f languageName: node linkType: hard @@ -22609,9 +22609,9 @@ __metadata: languageName: node linkType: hard -"google-gax@npm:^3.3.0, google-gax@npm:^3.5.1": - version: 3.5.1 - resolution: "google-gax@npm:3.5.1" +"google-gax@npm:^3.5.1, google-gax@npm:^3.5.2": + version: 3.5.2 + resolution: "google-gax@npm:3.5.2" dependencies: "@grpc/grpc-js": ~1.7.0 "@grpc/proto-loader": ^0.7.0 @@ -22624,13 +22624,13 @@ __metadata: node-fetch: ^2.6.1 object-hash: ^3.0.0 proto3-json-serializer: ^1.0.0 - protobufjs: 7.1.1 + protobufjs: 7.1.2 protobufjs-cli: 1.0.2 retry-request: ^5.0.0 bin: compileProtos: build/tools/compileProtos.js minifyProtoJson: build/tools/minify.js - checksum: 81ecd10981554944a117ace753b2fc8f6d82b26b244db005d01fc5e127181571de9a71ec02b28aa2e233c6fe696108617512a8b090c8304e753913f1ca441767 + checksum: 619a961acba742c30eaba85f5e0fb5903f8fc6713e26bf1736549cbbd43d7fac3ba3379dbc96850117263199ea8e3e74635b078e9464c7fadbbcba8822949135 languageName: node linkType: hard @@ -31127,9 +31127,9 @@ __metadata: languageName: node linkType: hard -"protobufjs@npm:7.1.1, protobufjs@npm:^7.0.0": - version: 7.1.1 - resolution: "protobufjs@npm:7.1.1" +"protobufjs@npm:7.1.2, protobufjs@npm:^7.0.0": + version: 7.1.2 + resolution: "protobufjs@npm:7.1.2" dependencies: "@protobufjs/aspromise": ^1.1.2 "@protobufjs/base64": ^1.1.2 @@ -31143,7 +31143,7 @@ __metadata: "@protobufjs/utf8": ^1.1.0 "@types/node": ">=13.7.0" long: ^5.0.0 - checksum: f6b0e7cec29056cefb83902009b39d24ac14a6117b52bc9b291b29778dad010e42d5563a20045e4de89b880114f4214f984396c8296a0d1b22f5dc7d9fe6705e + checksum: ae41669b1b0372fb1d49f506f2d1f2b0fb3dc3cece85987b17bcb544e4cef7c8d27f480486cdec324146ad0a5d22a327166a7ea864a9b3e49cc3c92a5d3f6500 languageName: node linkType: hard From 30ecf26a3075bc1bbe43c1013425317850e6fa44 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 21 Nov 2022 19:36:27 +0000 Subject: [PATCH 67/73] Update dependency @tanstack/react-query to v4.16.1 Signed-off-by: Renovate Bot --- yarn.lock | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/yarn.lock b/yarn.lock index 36b4f60c60..ac7916c947 100644 --- a/yarn.lock +++ b/yarn.lock @@ -12351,18 +12351,18 @@ __metadata: languageName: node linkType: hard -"@tanstack/query-core@npm:4.14.5": - version: 4.14.5 - resolution: "@tanstack/query-core@npm:4.14.5" - checksum: 25af0f4999668cd66a4a54c2d2d64dd7002f4852fb901d1d1d64908da4ea43d63e53e512b536987a789039713ffc6ae4ffa2d41cfab676b01704f4937be18a04 +"@tanstack/query-core@npm:4.15.1": + version: 4.15.1 + resolution: "@tanstack/query-core@npm:4.15.1" + checksum: ee98e75a3770fd35a6a10b9e7b3c417ea9da2b072481b5191d759182b29fd7bc4e8e340f83e2961b46fe4e1adac356087df04d4661c9459d09ff4d0574f683eb languageName: node linkType: hard "@tanstack/react-query@npm:^4.1.3": - version: 4.14.6 - resolution: "@tanstack/react-query@npm:4.14.6" + version: 4.16.1 + resolution: "@tanstack/react-query@npm:4.16.1" dependencies: - "@tanstack/query-core": 4.14.5 + "@tanstack/query-core": 4.15.1 use-sync-external-store: ^1.2.0 peerDependencies: react: ^16.8.0 || ^17.0.0 || ^18.0.0 @@ -12373,7 +12373,7 @@ __metadata: optional: true react-native: optional: true - checksum: 38e293616aa04ccfe2fec47315c5b98f0b157ee6548b4dbb6a8ca01c90de113e437f5effbc82884f2d860bde54eeb07335e9ed4e233543c7039f717d9855ab9e + checksum: 2c2d4c5c8bab2cd978ddd42153d33f844bd24a17ebe42f269cc64ee2a031f60f980b441640172885d9fd156fe9abc74ffc800fb68c6b6f6ef4fe48ffadafff79 languageName: node linkType: hard From 9b80d403fec3bf60a00150c4a170adbd3792d429 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 21 Nov 2022 19:37:40 +0000 Subject: [PATCH 68/73] Update dependency @uiw/react-codemirror to v4.15.1 Signed-off-by: Renovate Bot --- yarn.lock | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/yarn.lock b/yarn.lock index 36b4f60c60..49ebf30c07 100644 --- a/yarn.lock +++ b/yarn.lock @@ -14682,9 +14682,9 @@ __metadata: languageName: node linkType: hard -"@uiw/codemirror-extensions-basic-setup@npm:4.13.2": - version: 4.13.2 - resolution: "@uiw/codemirror-extensions-basic-setup@npm:4.13.2" +"@uiw/codemirror-extensions-basic-setup@npm:4.15.1": + version: 4.15.1 + resolution: "@uiw/codemirror-extensions-basic-setup@npm:4.15.1" dependencies: "@codemirror/autocomplete": ^6.0.0 "@codemirror/commands": ^6.0.0 @@ -14701,19 +14701,19 @@ __metadata: "@codemirror/search": ">=6.0.0" "@codemirror/state": ">=6.0.0" "@codemirror/view": ">=6.0.0" - checksum: 5597d6bd7ea0304aa15f77c4bec4a071d95ae9b706a2abd6486f5fc51dba4a89101fa1e6faeb8f4fc27f4698993b008c3fd751a864618eef6baef56434d1fafd + checksum: 1805caa6432a2ed0c616efee4977d3e90faae85be4a75b6e5f654c8bc9dced640ad75dbe7a57d50bc84c117139b486ef0a116a8127c6f8efb44068631a48bc09 languageName: node linkType: hard "@uiw/react-codemirror@npm:^4.9.3": - version: 4.13.2 - resolution: "@uiw/react-codemirror@npm:4.13.2" + version: 4.15.1 + resolution: "@uiw/react-codemirror@npm:4.15.1" dependencies: "@babel/runtime": ^7.18.6 "@codemirror/commands": ^6.1.0 "@codemirror/state": ^6.1.1 "@codemirror/theme-one-dark": ^6.0.0 - "@uiw/codemirror-extensions-basic-setup": 4.13.2 + "@uiw/codemirror-extensions-basic-setup": 4.15.1 codemirror: ^6.0.0 peerDependencies: "@babel/runtime": ">=7.11.0" @@ -14723,7 +14723,7 @@ __metadata: codemirror: ">=6.0.0" react: ">=16.8.0" react-dom: ">=16.8.0" - checksum: 8f35aa2f54beabc440027584ccd6244f4d2e52e0792f700fb8612f1a5c8d0d705203ddddd202b3d6b82a3b1426bd4bdb230f76a5ec1ae41ec3806e9b2c955900 + checksum: 49e3011e6d5455f26266b5d39d11d6e2c6505b48063882d1d4593f8c333c159fefcf0df4f743bea36d95ade1e88e19fad13571d0e3fa3b3d6cd5a43bb59f5eb7 languageName: node linkType: hard From 7bd0ae77ae193deefcddfbc984dd8b4c419b3a05 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 21 Nov 2022 20:22:56 +0000 Subject: [PATCH 69/73] Update dependency concurrently to v7.6.0 Signed-off-by: Renovate Bot --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index a6827b832d..3ba43af036 100644 --- a/yarn.lock +++ b/yarn.lock @@ -17977,8 +17977,8 @@ __metadata: linkType: hard "concurrently@npm:^7.0.0": - version: 7.5.0 - resolution: "concurrently@npm:7.5.0" + version: 7.6.0 + resolution: "concurrently@npm:7.6.0" dependencies: chalk: ^4.1.0 date-fns: ^2.29.1 @@ -17992,7 +17992,7 @@ __metadata: bin: conc: dist/bin/concurrently.js concurrently: dist/bin/concurrently.js - checksum: 7886e1c8559d2699ae1b62be8aca5d56c226966e252a2b9dd6077b3c1fd5397e98ef537c040fffa1de50418bd2616746eb9dd589a31ffb9056d4758b850a865b + checksum: f705c9a7960f1b16559ca64958043faeeef6385c0bf30a03d1375e15ab2d96dba4f8166f1bbbb1c85e8da35ca0ce3c353875d71dff2aa132b2357bb533b3332e languageName: node linkType: hard From d8f2385438b2d1eecfd5713be751481530a0eb7d Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 21 Nov 2022 21:20:19 +0000 Subject: [PATCH 70/73] Update dependency @aws-sdk/client-sqs to v3.215.0 Signed-off-by: Renovate Bot --- yarn.lock | 802 +++++++++++++++++++++++++++--------------------------- 1 file changed, 401 insertions(+), 401 deletions(-) diff --git a/yarn.lock b/yarn.lock index 3ba43af036..28bb925fe4 100644 --- a/yarn.lock +++ b/yarn.lock @@ -373,325 +373,325 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/abort-controller@npm:3.212.0": - version: 3.212.0 - resolution: "@aws-sdk/abort-controller@npm:3.212.0" +"@aws-sdk/abort-controller@npm:3.215.0": + version: 3.215.0 + resolution: "@aws-sdk/abort-controller@npm:3.215.0" dependencies: - "@aws-sdk/types": 3.212.0 + "@aws-sdk/types": 3.215.0 tslib: ^2.3.1 - checksum: ba69d926f6939fe91d4d169c64106683fc467a0b1778d48ddae194f8abaf484a2c2e9f997b7de9d4bab9dcb30532551aec88c4e52aeed71f43eb7335bd159adc + checksum: eda64e8f93885a20b889374c6ae068799f9ee5ef91850a9c07e29465734a83c33b4bd37d961a61a2ff0c64ed18651a9878db40b1d7bb39aef4338a9167bfb605 languageName: node linkType: hard "@aws-sdk/client-sqs@npm:^3.0.0": - version: 3.213.0 - resolution: "@aws-sdk/client-sqs@npm:3.213.0" + version: 3.215.0 + resolution: "@aws-sdk/client-sqs@npm:3.215.0" dependencies: "@aws-crypto/sha256-browser": 2.0.0 "@aws-crypto/sha256-js": 2.0.0 - "@aws-sdk/client-sts": 3.213.0 - "@aws-sdk/config-resolver": 3.212.0 - "@aws-sdk/credential-provider-node": 3.212.0 - "@aws-sdk/fetch-http-handler": 3.212.0 - "@aws-sdk/hash-node": 3.212.0 - "@aws-sdk/invalid-dependency": 3.212.0 - "@aws-sdk/md5-js": 3.212.0 - "@aws-sdk/middleware-content-length": 3.212.0 - "@aws-sdk/middleware-endpoint": 3.212.0 - "@aws-sdk/middleware-host-header": 3.212.0 - "@aws-sdk/middleware-logger": 3.212.0 - "@aws-sdk/middleware-recursion-detection": 3.212.0 - "@aws-sdk/middleware-retry": 3.212.0 - "@aws-sdk/middleware-sdk-sqs": 3.212.0 - "@aws-sdk/middleware-serde": 3.212.0 - "@aws-sdk/middleware-signing": 3.212.0 - "@aws-sdk/middleware-stack": 3.212.0 - "@aws-sdk/middleware-user-agent": 3.212.0 - "@aws-sdk/node-config-provider": 3.212.0 - "@aws-sdk/node-http-handler": 3.212.0 - "@aws-sdk/protocol-http": 3.212.0 - "@aws-sdk/smithy-client": 3.212.0 - "@aws-sdk/types": 3.212.0 - "@aws-sdk/url-parser": 3.212.0 + "@aws-sdk/client-sts": 3.215.0 + "@aws-sdk/config-resolver": 3.215.0 + "@aws-sdk/credential-provider-node": 3.215.0 + "@aws-sdk/fetch-http-handler": 3.215.0 + "@aws-sdk/hash-node": 3.215.0 + "@aws-sdk/invalid-dependency": 3.215.0 + "@aws-sdk/md5-js": 3.215.0 + "@aws-sdk/middleware-content-length": 3.215.0 + "@aws-sdk/middleware-endpoint": 3.215.0 + "@aws-sdk/middleware-host-header": 3.215.0 + "@aws-sdk/middleware-logger": 3.215.0 + "@aws-sdk/middleware-recursion-detection": 3.215.0 + "@aws-sdk/middleware-retry": 3.215.0 + "@aws-sdk/middleware-sdk-sqs": 3.215.0 + "@aws-sdk/middleware-serde": 3.215.0 + "@aws-sdk/middleware-signing": 3.215.0 + "@aws-sdk/middleware-stack": 3.215.0 + "@aws-sdk/middleware-user-agent": 3.215.0 + "@aws-sdk/node-config-provider": 3.215.0 + "@aws-sdk/node-http-handler": 3.215.0 + "@aws-sdk/protocol-http": 3.215.0 + "@aws-sdk/smithy-client": 3.215.0 + "@aws-sdk/types": 3.215.0 + "@aws-sdk/url-parser": 3.215.0 "@aws-sdk/util-base64": 3.208.0 "@aws-sdk/util-body-length-browser": 3.188.0 "@aws-sdk/util-body-length-node": 3.208.0 - "@aws-sdk/util-defaults-mode-browser": 3.212.0 - "@aws-sdk/util-defaults-mode-node": 3.212.0 - "@aws-sdk/util-endpoints": 3.212.0 - "@aws-sdk/util-user-agent-browser": 3.212.0 - "@aws-sdk/util-user-agent-node": 3.212.0 + "@aws-sdk/util-defaults-mode-browser": 3.215.0 + "@aws-sdk/util-defaults-mode-node": 3.215.0 + "@aws-sdk/util-endpoints": 3.215.0 + "@aws-sdk/util-user-agent-browser": 3.215.0 + "@aws-sdk/util-user-agent-node": 3.215.0 "@aws-sdk/util-utf8-browser": 3.188.0 "@aws-sdk/util-utf8-node": 3.208.0 fast-xml-parser: 4.0.11 tslib: ^2.3.1 - checksum: baa9d4c816cae23874f14fe4c6c6da26b8d52b65d459167ebacbc3ec207ef2a83860f452df8b47e11231587e9b1d7a1aedc74051bb79473037756e4d6e492b36 + checksum: fb62353c5b03369aab049e48c2c262ae5acf78663d9ef05ee951581594b14772d37fe66500564be78dd37ef270700835a8866753dc8295d2b47164ccaff27312 languageName: node linkType: hard -"@aws-sdk/client-sso-oidc@npm:3.212.0": - version: 3.212.0 - resolution: "@aws-sdk/client-sso-oidc@npm:3.212.0" +"@aws-sdk/client-sso-oidc@npm:3.215.0": + version: 3.215.0 + resolution: "@aws-sdk/client-sso-oidc@npm:3.215.0" dependencies: "@aws-crypto/sha256-browser": 2.0.0 "@aws-crypto/sha256-js": 2.0.0 - "@aws-sdk/config-resolver": 3.212.0 - "@aws-sdk/fetch-http-handler": 3.212.0 - "@aws-sdk/hash-node": 3.212.0 - "@aws-sdk/invalid-dependency": 3.212.0 - "@aws-sdk/middleware-content-length": 3.212.0 - "@aws-sdk/middleware-endpoint": 3.212.0 - "@aws-sdk/middleware-host-header": 3.212.0 - "@aws-sdk/middleware-logger": 3.212.0 - "@aws-sdk/middleware-recursion-detection": 3.212.0 - "@aws-sdk/middleware-retry": 3.212.0 - "@aws-sdk/middleware-serde": 3.212.0 - "@aws-sdk/middleware-stack": 3.212.0 - "@aws-sdk/middleware-user-agent": 3.212.0 - "@aws-sdk/node-config-provider": 3.212.0 - "@aws-sdk/node-http-handler": 3.212.0 - "@aws-sdk/protocol-http": 3.212.0 - "@aws-sdk/smithy-client": 3.212.0 - "@aws-sdk/types": 3.212.0 - "@aws-sdk/url-parser": 3.212.0 + "@aws-sdk/config-resolver": 3.215.0 + "@aws-sdk/fetch-http-handler": 3.215.0 + "@aws-sdk/hash-node": 3.215.0 + "@aws-sdk/invalid-dependency": 3.215.0 + "@aws-sdk/middleware-content-length": 3.215.0 + "@aws-sdk/middleware-endpoint": 3.215.0 + "@aws-sdk/middleware-host-header": 3.215.0 + "@aws-sdk/middleware-logger": 3.215.0 + "@aws-sdk/middleware-recursion-detection": 3.215.0 + "@aws-sdk/middleware-retry": 3.215.0 + "@aws-sdk/middleware-serde": 3.215.0 + "@aws-sdk/middleware-stack": 3.215.0 + "@aws-sdk/middleware-user-agent": 3.215.0 + "@aws-sdk/node-config-provider": 3.215.0 + "@aws-sdk/node-http-handler": 3.215.0 + "@aws-sdk/protocol-http": 3.215.0 + "@aws-sdk/smithy-client": 3.215.0 + "@aws-sdk/types": 3.215.0 + "@aws-sdk/url-parser": 3.215.0 "@aws-sdk/util-base64": 3.208.0 "@aws-sdk/util-body-length-browser": 3.188.0 "@aws-sdk/util-body-length-node": 3.208.0 - "@aws-sdk/util-defaults-mode-browser": 3.212.0 - "@aws-sdk/util-defaults-mode-node": 3.212.0 - "@aws-sdk/util-endpoints": 3.212.0 - "@aws-sdk/util-user-agent-browser": 3.212.0 - "@aws-sdk/util-user-agent-node": 3.212.0 + "@aws-sdk/util-defaults-mode-browser": 3.215.0 + "@aws-sdk/util-defaults-mode-node": 3.215.0 + "@aws-sdk/util-endpoints": 3.215.0 + "@aws-sdk/util-user-agent-browser": 3.215.0 + "@aws-sdk/util-user-agent-node": 3.215.0 "@aws-sdk/util-utf8-browser": 3.188.0 "@aws-sdk/util-utf8-node": 3.208.0 tslib: ^2.3.1 - checksum: 45f32b8c0a39d3d6788d5a359aff1bcd42c4ada3edb4d6ef072741a9128fc726090fb7e4b5770307f106eb6470f1a29c70843b628ef1652a944cd8dcbe4e8112 + checksum: d53e56e3a4fecdfedaaf5d633381bf668d828b7f8711a5a3040f045069eab1a80a2e3ba808122d9e0a13fc621a507a551861927e907b50242792424dabd30772 languageName: node linkType: hard -"@aws-sdk/client-sso@npm:3.212.0": - version: 3.212.0 - resolution: "@aws-sdk/client-sso@npm:3.212.0" +"@aws-sdk/client-sso@npm:3.215.0": + version: 3.215.0 + resolution: "@aws-sdk/client-sso@npm:3.215.0" dependencies: "@aws-crypto/sha256-browser": 2.0.0 "@aws-crypto/sha256-js": 2.0.0 - "@aws-sdk/config-resolver": 3.212.0 - "@aws-sdk/fetch-http-handler": 3.212.0 - "@aws-sdk/hash-node": 3.212.0 - "@aws-sdk/invalid-dependency": 3.212.0 - "@aws-sdk/middleware-content-length": 3.212.0 - "@aws-sdk/middleware-endpoint": 3.212.0 - "@aws-sdk/middleware-host-header": 3.212.0 - "@aws-sdk/middleware-logger": 3.212.0 - "@aws-sdk/middleware-recursion-detection": 3.212.0 - "@aws-sdk/middleware-retry": 3.212.0 - "@aws-sdk/middleware-serde": 3.212.0 - "@aws-sdk/middleware-stack": 3.212.0 - "@aws-sdk/middleware-user-agent": 3.212.0 - "@aws-sdk/node-config-provider": 3.212.0 - "@aws-sdk/node-http-handler": 3.212.0 - "@aws-sdk/protocol-http": 3.212.0 - "@aws-sdk/smithy-client": 3.212.0 - "@aws-sdk/types": 3.212.0 - "@aws-sdk/url-parser": 3.212.0 + "@aws-sdk/config-resolver": 3.215.0 + "@aws-sdk/fetch-http-handler": 3.215.0 + "@aws-sdk/hash-node": 3.215.0 + "@aws-sdk/invalid-dependency": 3.215.0 + "@aws-sdk/middleware-content-length": 3.215.0 + "@aws-sdk/middleware-endpoint": 3.215.0 + "@aws-sdk/middleware-host-header": 3.215.0 + "@aws-sdk/middleware-logger": 3.215.0 + "@aws-sdk/middleware-recursion-detection": 3.215.0 + "@aws-sdk/middleware-retry": 3.215.0 + "@aws-sdk/middleware-serde": 3.215.0 + "@aws-sdk/middleware-stack": 3.215.0 + "@aws-sdk/middleware-user-agent": 3.215.0 + "@aws-sdk/node-config-provider": 3.215.0 + "@aws-sdk/node-http-handler": 3.215.0 + "@aws-sdk/protocol-http": 3.215.0 + "@aws-sdk/smithy-client": 3.215.0 + "@aws-sdk/types": 3.215.0 + "@aws-sdk/url-parser": 3.215.0 "@aws-sdk/util-base64": 3.208.0 "@aws-sdk/util-body-length-browser": 3.188.0 "@aws-sdk/util-body-length-node": 3.208.0 - "@aws-sdk/util-defaults-mode-browser": 3.212.0 - "@aws-sdk/util-defaults-mode-node": 3.212.0 - "@aws-sdk/util-endpoints": 3.212.0 - "@aws-sdk/util-user-agent-browser": 3.212.0 - "@aws-sdk/util-user-agent-node": 3.212.0 + "@aws-sdk/util-defaults-mode-browser": 3.215.0 + "@aws-sdk/util-defaults-mode-node": 3.215.0 + "@aws-sdk/util-endpoints": 3.215.0 + "@aws-sdk/util-user-agent-browser": 3.215.0 + "@aws-sdk/util-user-agent-node": 3.215.0 "@aws-sdk/util-utf8-browser": 3.188.0 "@aws-sdk/util-utf8-node": 3.208.0 tslib: ^2.3.1 - checksum: 14426e200171d3ee596f946744d8ee325b3f8fbfcfb3f266482142df20ee418752b64be1131b473cf0b60ed8615dab1cd9350f93a547dca34ca84c07c47fc697 + checksum: 0408ef93d3e378aec746cc2eb14b2429de49c0a2599519906e9c7e726ab264e300453f6b486282954bf3148073982b12f9aad1f6cdd767045a4dfc891ee56a91 languageName: node linkType: hard -"@aws-sdk/client-sts@npm:3.213.0": - version: 3.213.0 - resolution: "@aws-sdk/client-sts@npm:3.213.0" +"@aws-sdk/client-sts@npm:3.215.0": + version: 3.215.0 + resolution: "@aws-sdk/client-sts@npm:3.215.0" dependencies: "@aws-crypto/sha256-browser": 2.0.0 "@aws-crypto/sha256-js": 2.0.0 - "@aws-sdk/config-resolver": 3.212.0 - "@aws-sdk/credential-provider-node": 3.212.0 - "@aws-sdk/fetch-http-handler": 3.212.0 - "@aws-sdk/hash-node": 3.212.0 - "@aws-sdk/invalid-dependency": 3.212.0 - "@aws-sdk/middleware-content-length": 3.212.0 - "@aws-sdk/middleware-endpoint": 3.212.0 - "@aws-sdk/middleware-host-header": 3.212.0 - "@aws-sdk/middleware-logger": 3.212.0 - "@aws-sdk/middleware-recursion-detection": 3.212.0 - "@aws-sdk/middleware-retry": 3.212.0 - "@aws-sdk/middleware-sdk-sts": 3.212.0 - "@aws-sdk/middleware-serde": 3.212.0 - "@aws-sdk/middleware-signing": 3.212.0 - "@aws-sdk/middleware-stack": 3.212.0 - "@aws-sdk/middleware-user-agent": 3.212.0 - "@aws-sdk/node-config-provider": 3.212.0 - "@aws-sdk/node-http-handler": 3.212.0 - "@aws-sdk/protocol-http": 3.212.0 - "@aws-sdk/smithy-client": 3.212.0 - "@aws-sdk/types": 3.212.0 - "@aws-sdk/url-parser": 3.212.0 + "@aws-sdk/config-resolver": 3.215.0 + "@aws-sdk/credential-provider-node": 3.215.0 + "@aws-sdk/fetch-http-handler": 3.215.0 + "@aws-sdk/hash-node": 3.215.0 + "@aws-sdk/invalid-dependency": 3.215.0 + "@aws-sdk/middleware-content-length": 3.215.0 + "@aws-sdk/middleware-endpoint": 3.215.0 + "@aws-sdk/middleware-host-header": 3.215.0 + "@aws-sdk/middleware-logger": 3.215.0 + "@aws-sdk/middleware-recursion-detection": 3.215.0 + "@aws-sdk/middleware-retry": 3.215.0 + "@aws-sdk/middleware-sdk-sts": 3.215.0 + "@aws-sdk/middleware-serde": 3.215.0 + "@aws-sdk/middleware-signing": 3.215.0 + "@aws-sdk/middleware-stack": 3.215.0 + "@aws-sdk/middleware-user-agent": 3.215.0 + "@aws-sdk/node-config-provider": 3.215.0 + "@aws-sdk/node-http-handler": 3.215.0 + "@aws-sdk/protocol-http": 3.215.0 + "@aws-sdk/smithy-client": 3.215.0 + "@aws-sdk/types": 3.215.0 + "@aws-sdk/url-parser": 3.215.0 "@aws-sdk/util-base64": 3.208.0 "@aws-sdk/util-body-length-browser": 3.188.0 "@aws-sdk/util-body-length-node": 3.208.0 - "@aws-sdk/util-defaults-mode-browser": 3.212.0 - "@aws-sdk/util-defaults-mode-node": 3.212.0 - "@aws-sdk/util-endpoints": 3.212.0 - "@aws-sdk/util-user-agent-browser": 3.212.0 - "@aws-sdk/util-user-agent-node": 3.212.0 + "@aws-sdk/util-defaults-mode-browser": 3.215.0 + "@aws-sdk/util-defaults-mode-node": 3.215.0 + "@aws-sdk/util-endpoints": 3.215.0 + "@aws-sdk/util-user-agent-browser": 3.215.0 + "@aws-sdk/util-user-agent-node": 3.215.0 "@aws-sdk/util-utf8-browser": 3.188.0 "@aws-sdk/util-utf8-node": 3.208.0 fast-xml-parser: 4.0.11 tslib: ^2.3.1 - checksum: 6d375d8d22bdd08130ea624d6b980e366ce556b3178a4dbfcfd7ec7b9ab629dd57d34b350129231bd96be078778df0de6c61783c49a739142b055882f943f7d2 + checksum: 8a0d3a63f1e22320287d8eda20ce63026c4aeaf7c6f809769be9c03e2baa88b68139aaf7c7119cd5f9befb4578657aec6a09e12d4eeee6cd664dc9f5163988fb languageName: node linkType: hard -"@aws-sdk/config-resolver@npm:3.212.0": - version: 3.212.0 - resolution: "@aws-sdk/config-resolver@npm:3.212.0" +"@aws-sdk/config-resolver@npm:3.215.0": + version: 3.215.0 + resolution: "@aws-sdk/config-resolver@npm:3.215.0" dependencies: - "@aws-sdk/signature-v4": 3.212.0 - "@aws-sdk/types": 3.212.0 + "@aws-sdk/signature-v4": 3.215.0 + "@aws-sdk/types": 3.215.0 "@aws-sdk/util-config-provider": 3.208.0 - "@aws-sdk/util-middleware": 3.212.0 + "@aws-sdk/util-middleware": 3.215.0 tslib: ^2.3.1 - checksum: 2d2844b93ca27a60d311d6998582bba99ac922299db76309f6136625ffaeecba172b906dee2598c381aebd5c88ca5b5442e5dfdcaa932ddaaf88d7257953022a + checksum: d2ec1ca0da965a0baa4610a43186654dbacdab697b826ff9ebaff3004e4cd472a17e4757ea3eac463dd88390a8ae8475090b7d88cd2a2a5cdcb99a4dbf3835d4 languageName: node linkType: hard -"@aws-sdk/credential-provider-env@npm:3.212.0": - version: 3.212.0 - resolution: "@aws-sdk/credential-provider-env@npm:3.212.0" +"@aws-sdk/credential-provider-env@npm:3.215.0": + version: 3.215.0 + resolution: "@aws-sdk/credential-provider-env@npm:3.215.0" dependencies: - "@aws-sdk/property-provider": 3.212.0 - "@aws-sdk/types": 3.212.0 + "@aws-sdk/property-provider": 3.215.0 + "@aws-sdk/types": 3.215.0 tslib: ^2.3.1 - checksum: da7af6765a551b9c55c56d5e1f287877839aec8cfbe301d4b483180a72f62113e15b87c8b4dbbe608e06db96bcad52b3becc9f02f3664607f0c477d03fef1bac + checksum: fa878a7dc53e964aa6228b5879c419b6e8aebc74b1e560df8980ec51b40a998d0a43eab8c5ab366c6afae831b43d88310e776cea3f5cfdb4755067cbefde1be4 languageName: node linkType: hard -"@aws-sdk/credential-provider-imds@npm:3.212.0": - version: 3.212.0 - resolution: "@aws-sdk/credential-provider-imds@npm:3.212.0" +"@aws-sdk/credential-provider-imds@npm:3.215.0": + version: 3.215.0 + resolution: "@aws-sdk/credential-provider-imds@npm:3.215.0" dependencies: - "@aws-sdk/node-config-provider": 3.212.0 - "@aws-sdk/property-provider": 3.212.0 - "@aws-sdk/types": 3.212.0 - "@aws-sdk/url-parser": 3.212.0 + "@aws-sdk/node-config-provider": 3.215.0 + "@aws-sdk/property-provider": 3.215.0 + "@aws-sdk/types": 3.215.0 + "@aws-sdk/url-parser": 3.215.0 tslib: ^2.3.1 - checksum: 4b3c31bc88a1bf15d0721c7e124795361c6f532ee1b33400f2f71393d60ee5c14b0bf2b4e2abc6c3ef22aa8304aa19e5d9e3e733e17da454e3371615567440dc + checksum: 341e1c1af4a3908e635558791b67346bba31ff0d6b6c5a44e1b4af912eda3163ec1edc8933c9f5e123979b0e179a160505a2407efff15c9597e91521783167b7 languageName: node linkType: hard -"@aws-sdk/credential-provider-ini@npm:3.212.0": - version: 3.212.0 - resolution: "@aws-sdk/credential-provider-ini@npm:3.212.0" +"@aws-sdk/credential-provider-ini@npm:3.215.0": + version: 3.215.0 + resolution: "@aws-sdk/credential-provider-ini@npm:3.215.0" dependencies: - "@aws-sdk/credential-provider-env": 3.212.0 - "@aws-sdk/credential-provider-imds": 3.212.0 - "@aws-sdk/credential-provider-sso": 3.212.0 - "@aws-sdk/credential-provider-web-identity": 3.212.0 - "@aws-sdk/property-provider": 3.212.0 - "@aws-sdk/shared-ini-file-loader": 3.212.0 - "@aws-sdk/types": 3.212.0 + "@aws-sdk/credential-provider-env": 3.215.0 + "@aws-sdk/credential-provider-imds": 3.215.0 + "@aws-sdk/credential-provider-sso": 3.215.0 + "@aws-sdk/credential-provider-web-identity": 3.215.0 + "@aws-sdk/property-provider": 3.215.0 + "@aws-sdk/shared-ini-file-loader": 3.215.0 + "@aws-sdk/types": 3.215.0 tslib: ^2.3.1 - checksum: de60d4729ed6e162628563990b08be88486131c09ec372190a9b38faea72d8969d1e277b2e01a28fa3432c34e92bd39057fc6b923de9fcd0fcabd5b9ec69425e + checksum: c1644c8eb42d1275c81f94aef5e159a77bb5c48187985d628ab67b52cc6f02dcfc15aff37331ba9abef5b6e327818ea56679b2aef1cca8c02674899043709fee languageName: node linkType: hard -"@aws-sdk/credential-provider-node@npm:3.212.0": - version: 3.212.0 - resolution: "@aws-sdk/credential-provider-node@npm:3.212.0" +"@aws-sdk/credential-provider-node@npm:3.215.0": + version: 3.215.0 + resolution: "@aws-sdk/credential-provider-node@npm:3.215.0" dependencies: - "@aws-sdk/credential-provider-env": 3.212.0 - "@aws-sdk/credential-provider-imds": 3.212.0 - "@aws-sdk/credential-provider-ini": 3.212.0 - "@aws-sdk/credential-provider-process": 3.212.0 - "@aws-sdk/credential-provider-sso": 3.212.0 - "@aws-sdk/credential-provider-web-identity": 3.212.0 - "@aws-sdk/property-provider": 3.212.0 - "@aws-sdk/shared-ini-file-loader": 3.212.0 - "@aws-sdk/types": 3.212.0 + "@aws-sdk/credential-provider-env": 3.215.0 + "@aws-sdk/credential-provider-imds": 3.215.0 + "@aws-sdk/credential-provider-ini": 3.215.0 + "@aws-sdk/credential-provider-process": 3.215.0 + "@aws-sdk/credential-provider-sso": 3.215.0 + "@aws-sdk/credential-provider-web-identity": 3.215.0 + "@aws-sdk/property-provider": 3.215.0 + "@aws-sdk/shared-ini-file-loader": 3.215.0 + "@aws-sdk/types": 3.215.0 tslib: ^2.3.1 - checksum: 421a65b57cfd280a14707c8563da285263a55471d1c3fbfe66305f0d42dcc59fb2884e84d380b8bcf2fea0ccdd419e92b5361b5b2a5832cf45ca0c86127a0137 + checksum: 7b8d978e9b93a6e076e3e591e9aca2f96befacb6d570ead8ab587e63e4a8e2dff5e4dd374a381c4ce3db5ee6b1c8cb4972025f68c07d5eb31c3a1f8d49ce80fe languageName: node linkType: hard -"@aws-sdk/credential-provider-process@npm:3.212.0": - version: 3.212.0 - resolution: "@aws-sdk/credential-provider-process@npm:3.212.0" +"@aws-sdk/credential-provider-process@npm:3.215.0": + version: 3.215.0 + resolution: "@aws-sdk/credential-provider-process@npm:3.215.0" dependencies: - "@aws-sdk/property-provider": 3.212.0 - "@aws-sdk/shared-ini-file-loader": 3.212.0 - "@aws-sdk/types": 3.212.0 + "@aws-sdk/property-provider": 3.215.0 + "@aws-sdk/shared-ini-file-loader": 3.215.0 + "@aws-sdk/types": 3.215.0 tslib: ^2.3.1 - checksum: 4842577d8c7b2daa80db20f5a21e56a42a57de9c5d27c50806a2c76e5b0eb0fa9d6b5aed9dcae1d0820ce410999e139f81b0440d33dc104cbc357a3f59680d8f + checksum: 5e8f70e94fc4ec0d347e96b65bd18faba93c9ff7b30f9f24268789bcaa121905295c7fc575ca29842484a6315b3772214dac2621b1b85184c4ded9f924aec5c8 languageName: node linkType: hard -"@aws-sdk/credential-provider-sso@npm:3.212.0": - version: 3.212.0 - resolution: "@aws-sdk/credential-provider-sso@npm:3.212.0" +"@aws-sdk/credential-provider-sso@npm:3.215.0": + version: 3.215.0 + resolution: "@aws-sdk/credential-provider-sso@npm:3.215.0" dependencies: - "@aws-sdk/client-sso": 3.212.0 - "@aws-sdk/property-provider": 3.212.0 - "@aws-sdk/shared-ini-file-loader": 3.212.0 - "@aws-sdk/token-providers": 3.212.0 - "@aws-sdk/types": 3.212.0 + "@aws-sdk/client-sso": 3.215.0 + "@aws-sdk/property-provider": 3.215.0 + "@aws-sdk/shared-ini-file-loader": 3.215.0 + "@aws-sdk/token-providers": 3.215.0 + "@aws-sdk/types": 3.215.0 tslib: ^2.3.1 - checksum: b575af71e26343536997261ac97820afa697b789b152106f64fea1e24fe6a21437a195f46a23828b92dbd82a32d7c4339d834a0aa52dd2e075974363c1f8837f + checksum: 54f17a4fad43194d0ed458534df67bfe5602703bf503e68271c8774e8a76676d102a59041204e7781978a5a0904ceb74b04e0d950c307be3b989c28af71eccc4 languageName: node linkType: hard -"@aws-sdk/credential-provider-web-identity@npm:3.212.0": - version: 3.212.0 - resolution: "@aws-sdk/credential-provider-web-identity@npm:3.212.0" +"@aws-sdk/credential-provider-web-identity@npm:3.215.0": + version: 3.215.0 + resolution: "@aws-sdk/credential-provider-web-identity@npm:3.215.0" dependencies: - "@aws-sdk/property-provider": 3.212.0 - "@aws-sdk/types": 3.212.0 + "@aws-sdk/property-provider": 3.215.0 + "@aws-sdk/types": 3.215.0 tslib: ^2.3.1 - checksum: 1bef8b133fed07802e82406d3e46d7bdd110197b1416debd8953f7192814ebf2a6300520adfe62a9b68bc84fab70fd97fd3f4126855c297b8bbb947ce97d4184 + checksum: f012d3789817c42487a66058c7efadc95aa17afa02a7c652821c79195e18f20884e6b02c9b74e2a2260682f49349f7a8e9b524d3b0e1db4cace8a01a7f7dacf3 languageName: node linkType: hard -"@aws-sdk/fetch-http-handler@npm:3.212.0": - version: 3.212.0 - resolution: "@aws-sdk/fetch-http-handler@npm:3.212.0" +"@aws-sdk/fetch-http-handler@npm:3.215.0": + version: 3.215.0 + resolution: "@aws-sdk/fetch-http-handler@npm:3.215.0" dependencies: - "@aws-sdk/protocol-http": 3.212.0 - "@aws-sdk/querystring-builder": 3.212.0 - "@aws-sdk/types": 3.212.0 + "@aws-sdk/protocol-http": 3.215.0 + "@aws-sdk/querystring-builder": 3.215.0 + "@aws-sdk/types": 3.215.0 "@aws-sdk/util-base64": 3.208.0 tslib: ^2.3.1 - checksum: 477601560df9a58c8e6bb50cdc313205fc75681699275f153e96ce6c62cf1c55ec8c394bb4774ba69a483987094b7416aa8e3fb5c89cdd530adb25e1cd909cb9 + checksum: 7031944b65100023fdee709d4c38845fc5fe7ab01d3fabdd8fb13c32a326811c1ddcc201f6171fe5847b4bebd171a6a37c77068c5439ee29acf38078e16ef556 languageName: node linkType: hard -"@aws-sdk/hash-node@npm:3.212.0": - version: 3.212.0 - resolution: "@aws-sdk/hash-node@npm:3.212.0" +"@aws-sdk/hash-node@npm:3.215.0": + version: 3.215.0 + resolution: "@aws-sdk/hash-node@npm:3.215.0" dependencies: - "@aws-sdk/types": 3.212.0 + "@aws-sdk/types": 3.215.0 "@aws-sdk/util-buffer-from": 3.208.0 tslib: ^2.3.1 - checksum: f5855ff20e37a0779da515fa78f26413762a5246c1b06a4e35f11f7aa4fd742a639a2b3d00f63004a5de659f233c5d503b469a744bb6911f9159602a79676789 + checksum: 8d50f46c195b48304ba69107adf31e3380a1952920c373031c5ed31f936300c24b492ad477ae3e868a73834cffc78177294bee2a683904133ca516ebb3b64bef languageName: node linkType: hard -"@aws-sdk/invalid-dependency@npm:3.212.0": - version: 3.212.0 - resolution: "@aws-sdk/invalid-dependency@npm:3.212.0" +"@aws-sdk/invalid-dependency@npm:3.215.0": + version: 3.215.0 + resolution: "@aws-sdk/invalid-dependency@npm:3.215.0" dependencies: - "@aws-sdk/types": 3.212.0 + "@aws-sdk/types": 3.215.0 tslib: ^2.3.1 - checksum: c71f32895f2a7760a916d8b8abba8b3d2c40869422d083da13abb096931ed04d67a65695f024ce74efced33745a10c9f904779f1414d2fc9a80be3d1d95284f9 + checksum: f3ba901c3884c943909ec344bd5e17cdb13a5246a53d1e8e33fda036f45cb944dcfb52ef948d04d1d27cf514ef711ef65d1f2c3cc5048624b8fc49493d72837f languageName: node linkType: hard @@ -704,296 +704,296 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/md5-js@npm:3.212.0": - version: 3.212.0 - resolution: "@aws-sdk/md5-js@npm:3.212.0" +"@aws-sdk/md5-js@npm:3.215.0": + version: 3.215.0 + resolution: "@aws-sdk/md5-js@npm:3.215.0" dependencies: - "@aws-sdk/types": 3.212.0 + "@aws-sdk/types": 3.215.0 "@aws-sdk/util-utf8-browser": 3.188.0 "@aws-sdk/util-utf8-node": 3.208.0 tslib: ^2.3.1 - checksum: d49b7eb9b3b78bbc78c247565041ea4119a6c82765e5b989a716d31def4da4de69f5dcbaf1ed32a89f23a1484e233a51a73f90da877952510250ca0a2c7311a1 + checksum: 7e51e56cd4c1a91ec00c2d97dfa895497d5755a59feeb0a83eec871c2b6c62b2f0623d7a057b9670c871aea0010abe384236190944d0ecd913e61bf95526d0bc languageName: node linkType: hard -"@aws-sdk/middleware-content-length@npm:3.212.0": - version: 3.212.0 - resolution: "@aws-sdk/middleware-content-length@npm:3.212.0" +"@aws-sdk/middleware-content-length@npm:3.215.0": + version: 3.215.0 + resolution: "@aws-sdk/middleware-content-length@npm:3.215.0" dependencies: - "@aws-sdk/protocol-http": 3.212.0 - "@aws-sdk/types": 3.212.0 + "@aws-sdk/protocol-http": 3.215.0 + "@aws-sdk/types": 3.215.0 tslib: ^2.3.1 - checksum: ef6a5467b84205b94ee90761d72cf14d52d49392086fb6358e07940b062a9f6e514b6649a9e0e87f0b3305cf54f5d85b712f394843a4417c590f630abeba2cdd + checksum: 7f41e88463faa0134be2c57bae62cd3c48fd2e6973d987e10a72f3c5cabc238cf5f59a9a8d6e92f5989e460f668f03c3b034fe54192391314de2431f77681aae languageName: node linkType: hard -"@aws-sdk/middleware-endpoint@npm:3.212.0": - version: 3.212.0 - resolution: "@aws-sdk/middleware-endpoint@npm:3.212.0" +"@aws-sdk/middleware-endpoint@npm:3.215.0": + version: 3.215.0 + resolution: "@aws-sdk/middleware-endpoint@npm:3.215.0" dependencies: - "@aws-sdk/middleware-serde": 3.212.0 - "@aws-sdk/protocol-http": 3.212.0 - "@aws-sdk/signature-v4": 3.212.0 - "@aws-sdk/types": 3.212.0 - "@aws-sdk/url-parser": 3.212.0 + "@aws-sdk/middleware-serde": 3.215.0 + "@aws-sdk/protocol-http": 3.215.0 + "@aws-sdk/signature-v4": 3.215.0 + "@aws-sdk/types": 3.215.0 + "@aws-sdk/url-parser": 3.215.0 "@aws-sdk/util-config-provider": 3.208.0 - "@aws-sdk/util-middleware": 3.212.0 + "@aws-sdk/util-middleware": 3.215.0 tslib: ^2.3.1 - checksum: 0b34bd25dfaf05d009ba327abb00916c1a5ffa9c58b1baecaee120468ddf3aa4b7998b8b1ae33fca789494fe95a3bc0921050d667da396552239d542ae030675 + checksum: cf57854b88ca43874e25dd4d160525a9cf0844319fb20bfdbfe6100570724ecafaf1c0014c803ee477ad85fd2a2b80686ec8e7b2ae69118ac3453b05f4bffc0f languageName: node linkType: hard -"@aws-sdk/middleware-host-header@npm:3.212.0": - version: 3.212.0 - resolution: "@aws-sdk/middleware-host-header@npm:3.212.0" +"@aws-sdk/middleware-host-header@npm:3.215.0": + version: 3.215.0 + resolution: "@aws-sdk/middleware-host-header@npm:3.215.0" dependencies: - "@aws-sdk/protocol-http": 3.212.0 - "@aws-sdk/types": 3.212.0 + "@aws-sdk/protocol-http": 3.215.0 + "@aws-sdk/types": 3.215.0 tslib: ^2.3.1 - checksum: c852de97a8763452b31136fc7ece3ba3026603665204a2982781a600139e346f08ca146331735d377b1f04a662bae9d44b78deef797d5bbee366f56ee91d7bc6 + checksum: 461158ce46c5ca089d12a63b37ed064cc584b48d6b49523c11bcb690fdf811fb3d5603554d5f92c58dcf26d4948308cd7433d7a26c20a934d07e816cbf67a3a3 languageName: node linkType: hard -"@aws-sdk/middleware-logger@npm:3.212.0": - version: 3.212.0 - resolution: "@aws-sdk/middleware-logger@npm:3.212.0" +"@aws-sdk/middleware-logger@npm:3.215.0": + version: 3.215.0 + resolution: "@aws-sdk/middleware-logger@npm:3.215.0" dependencies: - "@aws-sdk/types": 3.212.0 + "@aws-sdk/types": 3.215.0 tslib: ^2.3.1 - checksum: 1bc12d88da134e6cfa9ecf102c7a80727f1f00e09e97f06d44f4a6d1da21711a7abf9f0bdf39ab789736925f97f781574cb1e49f275f7ea1112fc0db443753f2 + checksum: 7d90e2195e68e1e7c04f52f8b8bdbbcc800f879200082892668477d17ae064beb6e7352540f262758b004d40560039426f6971396569c79eb9b4a51cba701081 languageName: node linkType: hard -"@aws-sdk/middleware-recursion-detection@npm:3.212.0": - version: 3.212.0 - resolution: "@aws-sdk/middleware-recursion-detection@npm:3.212.0" +"@aws-sdk/middleware-recursion-detection@npm:3.215.0": + version: 3.215.0 + resolution: "@aws-sdk/middleware-recursion-detection@npm:3.215.0" dependencies: - "@aws-sdk/protocol-http": 3.212.0 - "@aws-sdk/types": 3.212.0 + "@aws-sdk/protocol-http": 3.215.0 + "@aws-sdk/types": 3.215.0 tslib: ^2.3.1 - checksum: 65cb31460dfd88a5997764d84e23003264c639b7848ad9398f9f362a7214ef175431e833dff4bf501bb81cb9b695e146c042b02986dfa6fab8812058bca7f9c7 + checksum: 0bf6eda1208cc39ac92ce25b82c8cddae990c960096d5cffc57646d8fddfa5e3bcfff44cf6a99e1a60b613f48bdc015a6e056c55b790a996db7b3dddf47867eb languageName: node linkType: hard -"@aws-sdk/middleware-retry@npm:3.212.0": - version: 3.212.0 - resolution: "@aws-sdk/middleware-retry@npm:3.212.0" +"@aws-sdk/middleware-retry@npm:3.215.0": + version: 3.215.0 + resolution: "@aws-sdk/middleware-retry@npm:3.215.0" dependencies: - "@aws-sdk/protocol-http": 3.212.0 - "@aws-sdk/service-error-classification": 3.212.0 - "@aws-sdk/types": 3.212.0 - "@aws-sdk/util-middleware": 3.212.0 + "@aws-sdk/protocol-http": 3.215.0 + "@aws-sdk/service-error-classification": 3.215.0 + "@aws-sdk/types": 3.215.0 + "@aws-sdk/util-middleware": 3.215.0 tslib: ^2.3.1 uuid: ^8.3.2 - checksum: 1e221bf49585d9fea675f83d8b5d18f4b20de5b4096cc94dc51d265bdd579aa205b11a0735954dc9d7990f33fbe1165304342480ab15b79431d7988b74efcf05 + checksum: 6b5d5d9a370e2c46df14654f38ae9aab639dc429f216155556706352dc607c24ad79ff5c03533c8f5e40134e6d5209ce77b3856e0ba49c93ce93255da7b3c6fe languageName: node linkType: hard -"@aws-sdk/middleware-sdk-sqs@npm:3.212.0": - version: 3.212.0 - resolution: "@aws-sdk/middleware-sdk-sqs@npm:3.212.0" +"@aws-sdk/middleware-sdk-sqs@npm:3.215.0": + version: 3.215.0 + resolution: "@aws-sdk/middleware-sdk-sqs@npm:3.215.0" dependencies: - "@aws-sdk/types": 3.212.0 + "@aws-sdk/types": 3.215.0 "@aws-sdk/util-hex-encoding": 3.201.0 tslib: ^2.3.1 - checksum: 12ab5d80d8025a737aa3e5c7f8025bbf824fe2719618356b011fb0901135828f0ee10eb15b7bf0ad81e4de3159c8a6bba97c3b3cfc186e26bd6dbefab16682a5 + checksum: f09a4ca9701bd4687c1cfa764e98f88c672d36a0c4b39d66e5da3f3c022457764d7c5aee76373b753e5f4cb332be65db21552862354b2f96ce05a30a137927c4 languageName: node linkType: hard -"@aws-sdk/middleware-sdk-sts@npm:3.212.0": - version: 3.212.0 - resolution: "@aws-sdk/middleware-sdk-sts@npm:3.212.0" +"@aws-sdk/middleware-sdk-sts@npm:3.215.0": + version: 3.215.0 + resolution: "@aws-sdk/middleware-sdk-sts@npm:3.215.0" dependencies: - "@aws-sdk/middleware-signing": 3.212.0 - "@aws-sdk/property-provider": 3.212.0 - "@aws-sdk/protocol-http": 3.212.0 - "@aws-sdk/signature-v4": 3.212.0 - "@aws-sdk/types": 3.212.0 + "@aws-sdk/middleware-signing": 3.215.0 + "@aws-sdk/property-provider": 3.215.0 + "@aws-sdk/protocol-http": 3.215.0 + "@aws-sdk/signature-v4": 3.215.0 + "@aws-sdk/types": 3.215.0 tslib: ^2.3.1 - checksum: af3a03802e07ed1375a6d7feb6a9abbec8cba175138c49b8fb4d42843330db65e550a505539765a1f65944a3a4a840259b503d9e4a28f210ea83c0f2683e5e27 + checksum: bace7de141bef58b491d837e00ad4e0acbf6c4f79b8af80e0665dc36aa0cf31a21aa18101a1390096af11a76c5ffacf25995c1cf998874576b35ffd1a5146b3f languageName: node linkType: hard -"@aws-sdk/middleware-serde@npm:3.212.0": - version: 3.212.0 - resolution: "@aws-sdk/middleware-serde@npm:3.212.0" +"@aws-sdk/middleware-serde@npm:3.215.0": + version: 3.215.0 + resolution: "@aws-sdk/middleware-serde@npm:3.215.0" dependencies: - "@aws-sdk/types": 3.212.0 + "@aws-sdk/types": 3.215.0 tslib: ^2.3.1 - checksum: 1d9438e1e3a177a30d39787a6493f15a9726dd820552a995ca771ee58df004f6575ed322fd59658a7478c4fe72dfaf40bb61b1fd441a6ec1a245370e4ef17da9 + checksum: 45caf42bc4aaa6e1c7fd16fd8f219c0629c939c3adfb8274b6a6fed1e62ff1237ee208e387352655580a9a6c8d7fef704cff1f6f51b5bc237b98fee7b193a959 languageName: node linkType: hard -"@aws-sdk/middleware-signing@npm:3.212.0": - version: 3.212.0 - resolution: "@aws-sdk/middleware-signing@npm:3.212.0" +"@aws-sdk/middleware-signing@npm:3.215.0": + version: 3.215.0 + resolution: "@aws-sdk/middleware-signing@npm:3.215.0" dependencies: - "@aws-sdk/property-provider": 3.212.0 - "@aws-sdk/protocol-http": 3.212.0 - "@aws-sdk/signature-v4": 3.212.0 - "@aws-sdk/types": 3.212.0 - "@aws-sdk/util-middleware": 3.212.0 + "@aws-sdk/property-provider": 3.215.0 + "@aws-sdk/protocol-http": 3.215.0 + "@aws-sdk/signature-v4": 3.215.0 + "@aws-sdk/types": 3.215.0 + "@aws-sdk/util-middleware": 3.215.0 tslib: ^2.3.1 - checksum: f9e2c07a9e80bc67ea05766f505c750652a2d355eb98a2f2296707a3af15bb2d591e8257a9aa3683721c47814e49fd3b266746d95ea8cb362eaaf8ab4afba08d + checksum: a1c8c9b1a0cbde5f64ce5779f8e05494ffeed07bb7e6fe454baf9accf92bd5758dbb09cf0b5ae3f03d081e193af6197ff24659746d390d7e0c2f959f9014c073 languageName: node linkType: hard -"@aws-sdk/middleware-stack@npm:3.212.0": - version: 3.212.0 - resolution: "@aws-sdk/middleware-stack@npm:3.212.0" +"@aws-sdk/middleware-stack@npm:3.215.0": + version: 3.215.0 + resolution: "@aws-sdk/middleware-stack@npm:3.215.0" dependencies: tslib: ^2.3.1 - checksum: b9ce8fdae58f68f259aea823e39f22b8f893402bad25d4c87f614e0dc14412d66bc3c08607190856b9122f2d431f94a78dd8ddec7700f5afe8d956ff12913a00 + checksum: dc9c99969d178857ab975387f6326eb3c65fe1679087de719ea3dd25a3973bea310778ae45c61891de9cc41ce640f483dc9ff4f62af6669f3124029277f870aa languageName: node linkType: hard -"@aws-sdk/middleware-user-agent@npm:3.212.0": - version: 3.212.0 - resolution: "@aws-sdk/middleware-user-agent@npm:3.212.0" +"@aws-sdk/middleware-user-agent@npm:3.215.0": + version: 3.215.0 + resolution: "@aws-sdk/middleware-user-agent@npm:3.215.0" dependencies: - "@aws-sdk/protocol-http": 3.212.0 - "@aws-sdk/types": 3.212.0 + "@aws-sdk/protocol-http": 3.215.0 + "@aws-sdk/types": 3.215.0 tslib: ^2.3.1 - checksum: ef18b7b7755190e864946156dd741f7b513efaea160f4a4e2e2088e609d51660bd5dc577fb3e78bebc6105741b3b6e66a06bc77c0e027f4096fca90b918cb8b0 + checksum: 054f10a197876acc32d1903575855870edc9f5fe1fd7809dda47210e1b0717c7604e3cd916b34df7aa9f5cbe1ad9fa85934913ec51109a2740e3aed450587633 languageName: node linkType: hard -"@aws-sdk/node-config-provider@npm:3.212.0": - version: 3.212.0 - resolution: "@aws-sdk/node-config-provider@npm:3.212.0" +"@aws-sdk/node-config-provider@npm:3.215.0": + version: 3.215.0 + resolution: "@aws-sdk/node-config-provider@npm:3.215.0" dependencies: - "@aws-sdk/property-provider": 3.212.0 - "@aws-sdk/shared-ini-file-loader": 3.212.0 - "@aws-sdk/types": 3.212.0 + "@aws-sdk/property-provider": 3.215.0 + "@aws-sdk/shared-ini-file-loader": 3.215.0 + "@aws-sdk/types": 3.215.0 tslib: ^2.3.1 - checksum: c8e742c225ea4803d0f3318de8d93f756e5008e76ecc2d88fcb80e6733b29984b40d39a47a08d51fa23c00b0dbf3f0bd3b60eb44768abb48466a2493a61195ed + checksum: a23677a836a43bd0d4dd00cab64c42d1c69eafe8ccb833ea08a7b43ab0e891ad67a96757610fdd48a6d1cd749c29aaa1de14d894468c9e79e987e13d979c4382 languageName: node linkType: hard -"@aws-sdk/node-http-handler@npm:3.212.0": - version: 3.212.0 - resolution: "@aws-sdk/node-http-handler@npm:3.212.0" +"@aws-sdk/node-http-handler@npm:3.215.0": + version: 3.215.0 + resolution: "@aws-sdk/node-http-handler@npm:3.215.0" dependencies: - "@aws-sdk/abort-controller": 3.212.0 - "@aws-sdk/protocol-http": 3.212.0 - "@aws-sdk/querystring-builder": 3.212.0 - "@aws-sdk/types": 3.212.0 + "@aws-sdk/abort-controller": 3.215.0 + "@aws-sdk/protocol-http": 3.215.0 + "@aws-sdk/querystring-builder": 3.215.0 + "@aws-sdk/types": 3.215.0 tslib: ^2.3.1 - checksum: 052e4a3854823bd3877fc2baeca8fae9cdb2083beb96b4734f08eba70cb73c7abaf5dc6487d5ace0757257debc56f656d9da247d227669196d3e20a1fa97563d + checksum: 7b87cce3393553b9b2cd494aea49075fdafb8c7d9b4d61c44928e7e50f3f2909c6f57547ed504ce7b36b8dc17cc8fc8f0e882a7894898bb3cd5decc9e3de2d65 languageName: node linkType: hard -"@aws-sdk/property-provider@npm:3.212.0": - version: 3.212.0 - resolution: "@aws-sdk/property-provider@npm:3.212.0" +"@aws-sdk/property-provider@npm:3.215.0": + version: 3.215.0 + resolution: "@aws-sdk/property-provider@npm:3.215.0" dependencies: - "@aws-sdk/types": 3.212.0 + "@aws-sdk/types": 3.215.0 tslib: ^2.3.1 - checksum: ac30dd5777f2cce6aaa9c3ac2672bada2f8423330c545ea66913d731b6e0f48a802b9f15c48ccb7620dd0f9e8c4c3a9d27bd445a7c9d72bb30115c1954207234 + checksum: 0cb519ff8db962b2e65867b4ae5af12b0b517ace1e6f5d5f0a0f65790d087d734004b91454a2b97d842fc7799b0f0ebe4da7209360f627eac6c07af7e6ddb55b languageName: node linkType: hard -"@aws-sdk/protocol-http@npm:3.212.0": - version: 3.212.0 - resolution: "@aws-sdk/protocol-http@npm:3.212.0" +"@aws-sdk/protocol-http@npm:3.215.0": + version: 3.215.0 + resolution: "@aws-sdk/protocol-http@npm:3.215.0" dependencies: - "@aws-sdk/types": 3.212.0 + "@aws-sdk/types": 3.215.0 tslib: ^2.3.1 - checksum: 6330d3259a560e952202ae9b964c210ab1b25b9161d4fc27da1bc081600abe2461854659a3b560764c8e2d1e8c1212bcc061250945f1f9c0ee3a19475fb17464 + checksum: fd1d6db6168c3129b5311b42937f56731de5b536c11ffed08f8f7e3e1bbda1732e2632f642e601dd4af32722b78d179827772ae4564cea03553395dfa01e02d2 languageName: node linkType: hard -"@aws-sdk/querystring-builder@npm:3.212.0": - version: 3.212.0 - resolution: "@aws-sdk/querystring-builder@npm:3.212.0" +"@aws-sdk/querystring-builder@npm:3.215.0": + version: 3.215.0 + resolution: "@aws-sdk/querystring-builder@npm:3.215.0" dependencies: - "@aws-sdk/types": 3.212.0 + "@aws-sdk/types": 3.215.0 "@aws-sdk/util-uri-escape": 3.201.0 tslib: ^2.3.1 - checksum: 0bbd748f548c695d040b9ed225a2eb3fbba65b767acdba8dd8e157988b4ea66d22b994721d6eb5afcbfef7c49b105ab3a779534f4b2ae7e0d266f84159511e23 + checksum: 68584d4de16eea7c649bad71b938716917e53aa42aca9a9298a7a21b2dd2195d3e0e5719f0f4a16e448d18f4db6d8ae2ea4229dff4f6a8807712a81097b7aa4c languageName: node linkType: hard -"@aws-sdk/querystring-parser@npm:3.212.0": - version: 3.212.0 - resolution: "@aws-sdk/querystring-parser@npm:3.212.0" +"@aws-sdk/querystring-parser@npm:3.215.0": + version: 3.215.0 + resolution: "@aws-sdk/querystring-parser@npm:3.215.0" dependencies: - "@aws-sdk/types": 3.212.0 + "@aws-sdk/types": 3.215.0 tslib: ^2.3.1 - checksum: ab73e0d3a4fd94cc5141fe65940ee700bc6d3497f68518687c196b415cac5f7e44fd71039f6b7abb6eafb7777fe85b7d8f7cb006238b8deaf1248af2a53d7e29 + checksum: cfccb89aecadea63c3937e3db06690f2927aa32c8d98dd265151d971ee3221b570b715768a419777bf27a18f3c13509adbeccfbffd9e9d00ff90fbe648e36b22 languageName: node linkType: hard -"@aws-sdk/service-error-classification@npm:3.212.0": - version: 3.212.0 - resolution: "@aws-sdk/service-error-classification@npm:3.212.0" - checksum: 844f149d4a03c72ffa77103c8ce12b58ecb20484350633e88242e8d16cde50e3f35ba6db34ea7e180685d4545e0f48367ab8ce86d76dfb80e5d2a959749556be +"@aws-sdk/service-error-classification@npm:3.215.0": + version: 3.215.0 + resolution: "@aws-sdk/service-error-classification@npm:3.215.0" + checksum: 470cfec61df10efa304f61d44b75a8fc12fc6ded0c42dc36b7c8cbecc6b7290042e6a6b10ef28acf9e15534c234fd31475d1d0ee45522f8e49267f5eb6d8055e languageName: node linkType: hard -"@aws-sdk/shared-ini-file-loader@npm:3.212.0": - version: 3.212.0 - resolution: "@aws-sdk/shared-ini-file-loader@npm:3.212.0" +"@aws-sdk/shared-ini-file-loader@npm:3.215.0": + version: 3.215.0 + resolution: "@aws-sdk/shared-ini-file-loader@npm:3.215.0" dependencies: - "@aws-sdk/types": 3.212.0 + "@aws-sdk/types": 3.215.0 tslib: ^2.3.1 - checksum: 2c4f78b16338090d86ddc701f7ee13974387762b5f9c82b573b405a6e08db9bb979ac27809ac321cd8c33a3392c1576860475a47470cd59a1cb6092889d6ac17 + checksum: b0fcdc3bf81928d3822a5e7e7c088d5ce3c07b6fe4a29692a142226d3829fd1c8ee312cf5b8ee2056893cc6e4686df886641f7cd30e27e4bbd9fcb7ee6b21377 languageName: node linkType: hard -"@aws-sdk/signature-v4@npm:3.212.0": - version: 3.212.0 - resolution: "@aws-sdk/signature-v4@npm:3.212.0" +"@aws-sdk/signature-v4@npm:3.215.0": + version: 3.215.0 + resolution: "@aws-sdk/signature-v4@npm:3.215.0" dependencies: "@aws-sdk/is-array-buffer": 3.201.0 - "@aws-sdk/types": 3.212.0 + "@aws-sdk/types": 3.215.0 "@aws-sdk/util-hex-encoding": 3.201.0 - "@aws-sdk/util-middleware": 3.212.0 + "@aws-sdk/util-middleware": 3.215.0 "@aws-sdk/util-uri-escape": 3.201.0 tslib: ^2.3.1 - checksum: dcbdb41fcb53c3bb890c26175716c9edb1da1450333a88c888742cd71b9d47a4d8bd1ce0c183115c5971ce3b152ea420ffd36ab6be6dd8e4ea285d66259a0ae5 + checksum: 2bf3912bdf51c116abd2c3dcbbfdd669758b264066d4dd18353b984aaea2532ba6caef95043d1a58acf225a9ee59709c8593226f2acd779ad556c77b12fe0e4b languageName: node linkType: hard -"@aws-sdk/smithy-client@npm:3.212.0": - version: 3.212.0 - resolution: "@aws-sdk/smithy-client@npm:3.212.0" +"@aws-sdk/smithy-client@npm:3.215.0": + version: 3.215.0 + resolution: "@aws-sdk/smithy-client@npm:3.215.0" dependencies: - "@aws-sdk/middleware-stack": 3.212.0 - "@aws-sdk/types": 3.212.0 + "@aws-sdk/middleware-stack": 3.215.0 + "@aws-sdk/types": 3.215.0 tslib: ^2.3.1 - checksum: ecaa51cd72e0ab8f92f3989ba7dd5639082ef1db1832b155adc1d6e97d15d7f67ff7d27af165a487d11e862e84010b60e4744561925146dbe1d7307a7f50b00b + checksum: 4fd6d5631b738d7e7edf957335fb60c743025812183f3def0b4f83469bff95297c3c870fea790152731da9f3bd80aca4634722f6303774ae4b80a95cc17ad568 languageName: node linkType: hard -"@aws-sdk/token-providers@npm:3.212.0": - version: 3.212.0 - resolution: "@aws-sdk/token-providers@npm:3.212.0" +"@aws-sdk/token-providers@npm:3.215.0": + version: 3.215.0 + resolution: "@aws-sdk/token-providers@npm:3.215.0" dependencies: - "@aws-sdk/client-sso-oidc": 3.212.0 - "@aws-sdk/property-provider": 3.212.0 - "@aws-sdk/shared-ini-file-loader": 3.212.0 - "@aws-sdk/types": 3.212.0 + "@aws-sdk/client-sso-oidc": 3.215.0 + "@aws-sdk/property-provider": 3.215.0 + "@aws-sdk/shared-ini-file-loader": 3.215.0 + "@aws-sdk/types": 3.215.0 tslib: ^2.3.1 - checksum: be11407716a1f2891b64201475c085cfb8236df0075c22f3381c3e7ed9abe0f231017826935afd76c6b41ec1907d24e3c5e1e4537fd4c0d9c743ca1e6d127768 + checksum: 6fc5c35dcde859906184a9b3839d13a57de69b3212895d969c3a20c124f4f0a9609fc502f89a2da68d1ede636839b24a48852f88bb7754f8bb48960b0be7ea5e languageName: node linkType: hard -"@aws-sdk/types@npm:3.212.0, @aws-sdk/types@npm:^3.1.0, @aws-sdk/types@npm:^3.110.0": - version: 3.212.0 - resolution: "@aws-sdk/types@npm:3.212.0" - checksum: ba085aa2f70930adc250b4d142563cf886b9cbd98c011abe9d1d8dbad8b9cc8558a54d34bbeabed62a1a958a871c8d9d6cdaf43d57c31af8fc03a35a93ae5fb4 +"@aws-sdk/types@npm:3.215.0, @aws-sdk/types@npm:^3.1.0, @aws-sdk/types@npm:^3.110.0": + version: 3.215.0 + resolution: "@aws-sdk/types@npm:3.215.0" + checksum: 7b1301af4444c6d949175337546093946e22c572b40474ada534bd9a4ab37e15f5aabdeca139328b7ea45a6dd1d1a86de89097adbbb07e31365bb3e84254ea38 languageName: node linkType: hard -"@aws-sdk/url-parser@npm:3.212.0": - version: 3.212.0 - resolution: "@aws-sdk/url-parser@npm:3.212.0" +"@aws-sdk/url-parser@npm:3.215.0": + version: 3.215.0 + resolution: "@aws-sdk/url-parser@npm:3.215.0" dependencies: - "@aws-sdk/querystring-parser": 3.212.0 - "@aws-sdk/types": 3.212.0 + "@aws-sdk/querystring-parser": 3.215.0 + "@aws-sdk/types": 3.215.0 tslib: ^2.3.1 - checksum: cd1c837a255d38a84d453226bab8af749a5a1c7075f70eb80124cc92c3b7301c3bc11eec624ee0d68b3daa68162676eabccfae7d291f0e3ad916c735b531cf87 + checksum: 50221b570ddeb9255be9a7d1afbf9114cdba126dfa48b0c7cf7b0f55e5ca6581e6fa08bc119c7cc3fcceb43d9761bfe9a0e4e7e8a09b3cf010bb1518f0a8cd92 languageName: node linkType: hard @@ -1044,39 +1044,39 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/util-defaults-mode-browser@npm:3.212.0": - version: 3.212.0 - resolution: "@aws-sdk/util-defaults-mode-browser@npm:3.212.0" +"@aws-sdk/util-defaults-mode-browser@npm:3.215.0": + version: 3.215.0 + resolution: "@aws-sdk/util-defaults-mode-browser@npm:3.215.0" dependencies: - "@aws-sdk/property-provider": 3.212.0 - "@aws-sdk/types": 3.212.0 + "@aws-sdk/property-provider": 3.215.0 + "@aws-sdk/types": 3.215.0 bowser: ^2.11.0 tslib: ^2.3.1 - checksum: 75fd275426a1708b0d353e497951a78d8b36297aa644342f063fcf26e321e6387944fe3d60beaa4d5fc40fa877b14277db0368a9d6120e6b83d56c84972c36b3 + checksum: ed8a21c3d614f9b8ac64d2565c7106265d6fed0b8cda0e0b31b44f7be2fc3013aa79a9b5c113e7b016272c88d5547a07907a2f9ba626961f2b2d626866520c7e languageName: node linkType: hard -"@aws-sdk/util-defaults-mode-node@npm:3.212.0": - version: 3.212.0 - resolution: "@aws-sdk/util-defaults-mode-node@npm:3.212.0" +"@aws-sdk/util-defaults-mode-node@npm:3.215.0": + version: 3.215.0 + resolution: "@aws-sdk/util-defaults-mode-node@npm:3.215.0" dependencies: - "@aws-sdk/config-resolver": 3.212.0 - "@aws-sdk/credential-provider-imds": 3.212.0 - "@aws-sdk/node-config-provider": 3.212.0 - "@aws-sdk/property-provider": 3.212.0 - "@aws-sdk/types": 3.212.0 + "@aws-sdk/config-resolver": 3.215.0 + "@aws-sdk/credential-provider-imds": 3.215.0 + "@aws-sdk/node-config-provider": 3.215.0 + "@aws-sdk/property-provider": 3.215.0 + "@aws-sdk/types": 3.215.0 tslib: ^2.3.1 - checksum: ab2151cce3561378c3f07d78a898cdd627d097cc388785fe9e0df6f836f265bde98307ce800faaf8832a3723eff2258c00db2cc523425713b67c75ddc941b29e + checksum: 2dccee67d6fcc10ca5f93090b04851b561b638dacc9de1dedfc127323cdd0bd3f5bc8c5e27a87c90564b20805b8e9ba3992bebc023d76ce3d12e6f70005c7547 languageName: node linkType: hard -"@aws-sdk/util-endpoints@npm:3.212.0": - version: 3.212.0 - resolution: "@aws-sdk/util-endpoints@npm:3.212.0" +"@aws-sdk/util-endpoints@npm:3.215.0": + version: 3.215.0 + resolution: "@aws-sdk/util-endpoints@npm:3.215.0" dependencies: - "@aws-sdk/types": 3.212.0 + "@aws-sdk/types": 3.215.0 tslib: ^2.3.1 - checksum: 6c1d9e47dee896e35b5a2b11c0c028d71d16ab707929901403997d30ca639a202ed0f9c19d7ff1c5affa2966813226925608c15695d0d540a593294e40afc4ef + checksum: 03fc9861fa28e95d4d4608b4c35a51dc96d07f0ddde843132762440f7b1208dd7d67b8fc6ae9c9aa2330ead6591012ba482517e65207be7537a0506c2e50df05 languageName: node linkType: hard @@ -1098,12 +1098,12 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/util-middleware@npm:3.212.0": - version: 3.212.0 - resolution: "@aws-sdk/util-middleware@npm:3.212.0" +"@aws-sdk/util-middleware@npm:3.215.0": + version: 3.215.0 + resolution: "@aws-sdk/util-middleware@npm:3.215.0" dependencies: tslib: ^2.3.1 - checksum: d4bd527193fef871b480636aa99ab7b71a576fc2659e0a12f2ed14e48464c5267a4c6a24bb140ba88cd8205f224326479a548dc63de24b1b9b43ff3098041f7c + checksum: 19400d2560d70dbc0ec2087f4a76cb67ed28921028f851041da47cc55d00cc97520a5f2f0cbc1bd3a982f08d158073a32a4fa5cce5fe5459d0f734f0c20717e8 languageName: node linkType: hard @@ -1116,30 +1116,30 @@ __metadata: languageName: node linkType: hard -"@aws-sdk/util-user-agent-browser@npm:3.212.0": - version: 3.212.0 - resolution: "@aws-sdk/util-user-agent-browser@npm:3.212.0" +"@aws-sdk/util-user-agent-browser@npm:3.215.0": + version: 3.215.0 + resolution: "@aws-sdk/util-user-agent-browser@npm:3.215.0" dependencies: - "@aws-sdk/types": 3.212.0 + "@aws-sdk/types": 3.215.0 bowser: ^2.11.0 tslib: ^2.3.1 - checksum: e55abbde07b550ff6b061376b00839ffb184e4e3238c307ce85bcf44166941cf74fc59fbd97c2e6923923b88eb5df5bbad482048271b91ca3b46e6988e85be7b + checksum: 29a66adec383886ded80abfb41e5c66f4c07d52af5a995aa084a8eae9f4af22caf73cf2e4dbebc86c080da5b8778fed178d941f819b18a9caa082aac62cfb3d6 languageName: node linkType: hard -"@aws-sdk/util-user-agent-node@npm:3.212.0": - version: 3.212.0 - resolution: "@aws-sdk/util-user-agent-node@npm:3.212.0" +"@aws-sdk/util-user-agent-node@npm:3.215.0": + version: 3.215.0 + resolution: "@aws-sdk/util-user-agent-node@npm:3.215.0" dependencies: - "@aws-sdk/node-config-provider": 3.212.0 - "@aws-sdk/types": 3.212.0 + "@aws-sdk/node-config-provider": 3.215.0 + "@aws-sdk/types": 3.215.0 tslib: ^2.3.1 peerDependencies: aws-crt: ">=1.0.0" peerDependenciesMeta: aws-crt: optional: true - checksum: 6d5f0bb7f66c9135c23f6db5f6d58122db130d4b4261278f11a6db627057e03c76e237a98d91eef05aa328202f55e3fb7f70eba690640df025dfa07f948bf678 + checksum: 3f91d4bb57c4725fff15a1ef1b15b16026c38f02975af1b7567bc34fce4ef881968e1a871358f0d42f597a4ddb5c306e5bb9286809d075975715525b21f3213b languageName: node linkType: hard From ca0b1e5a5e96d57d208ed1ae75a3a0d46c991657 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 21 Nov 2022 22:08:32 +0000 Subject: [PATCH 71/73] Update dependency elastic-builder to v2.17.3 Signed-off-by: Renovate Bot --- yarn.lock | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/yarn.lock b/yarn.lock index 28bb925fe4..2e178c858e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -19830,10 +19830,9 @@ __metadata: linkType: hard "elastic-builder@npm:^2.16.0": - version: 2.16.0 - resolution: "elastic-builder@npm:2.16.0" + version: 2.17.3 + resolution: "elastic-builder@npm:2.17.3" dependencies: - babel-runtime: ^6.26.0 lodash.has: ^4.5.2 lodash.hasin: ^4.5.2 lodash.head: ^4.0.1 @@ -19842,7 +19841,7 @@ __metadata: lodash.isobject: ^3.0.2 lodash.isstring: ^4.0.1 lodash.omit: ^4.5.0 - checksum: 39ce21c4d2bc643dd3e376c06f6e0de04ed7ee60c8f315f63e086e59f81524b7267aadf7c362facfc88d627f483703ae1913052c230b2176e31f1e55a791ff66 + checksum: b1e47ad4d36e9974a1075e9e4f455e2d120eebc16d9e5c7e7219e89fcb64bcacd3015afddeae479a79f6b4cd92c4528f3e8535c9c9ca8d644286b9bb49635cdc languageName: node linkType: hard From 00de2159afa8929f57ab99e25517a3b6cc50e842 Mon Sep 17 00:00:00 2001 From: "renovate[bot]" <29139614+renovate[bot]@users.noreply.github.com> Date: Mon, 21 Nov 2022 22:09:41 +0000 Subject: [PATCH 72/73] Update dependency eslint to v8.28.0 Signed-off-by: Renovate Bot --- yarn.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/yarn.lock b/yarn.lock index 28bb925fe4..897089602e 100644 --- a/yarn.lock +++ b/yarn.lock @@ -20713,8 +20713,8 @@ __metadata: linkType: hard "eslint@npm:^8.6.0": - version: 8.27.0 - resolution: "eslint@npm:8.27.0" + version: 8.28.0 + resolution: "eslint@npm:8.28.0" dependencies: "@eslint/eslintrc": ^1.3.3 "@humanwhocodes/config-array": ^0.11.6 @@ -20757,7 +20757,7 @@ __metadata: text-table: ^0.2.0 bin: eslint: bin/eslint.js - checksum: 153b022d309e1b647a73b1bb0fa98912add699b06e279084155f23c6f2b5fc5abd05411fc1ba81608a24bbfaf044ca079544c16fffa6fc987b8f676c9960a2c4 + checksum: 1b793486b2ec80f0602d75fff7116f7c39a3286f523608a999eead9bec4154a06841785d2b4fb87f8292a94cf85778c1dbfaec727772a09c4d604fdb9ff0809a languageName: node linkType: hard From a197d85ca3a00a38bf5e09858b9c0849a5c54cb4 Mon Sep 17 00:00:00 2001 From: Patrik Oldsberg Date: Tue, 22 Nov 2022 10:08:11 +0100 Subject: [PATCH 73/73] workflows/automate_merge_message: fix for forks Signed-off-by: Patrik Oldsberg --- .github/workflows/automate_merge_message.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/automate_merge_message.yml b/.github/workflows/automate_merge_message.yml index 9d8deffd8a..aaeb0533a1 100644 --- a/.github/workflows/automate_merge_message.yml +++ b/.github/workflows/automate_merge_message.yml @@ -1,6 +1,6 @@ name: Automate merge message on: - pull_request: + pull_request_target: branches: ['master'] types: ['closed']