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/.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/.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/four-adults-provide.md b/.changeset/four-adults-provide.md new file mode 100644 index 0000000000..0edb4807d9 --- /dev/null +++ b/.changeset/four-adults-provide.md @@ -0,0 +1,5 @@ +--- +'@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/.changeset/hip-stingrays-kneel.md b/.changeset/hip-stingrays-kneel.md new file mode 100644 index 0000000000..171e9257f2 --- /dev/null +++ b/.changeset/hip-stingrays-kneel.md @@ -0,0 +1,5 @@ +--- +'@backstage/core-components': patch +--- + +Create a variable for minimum height and add a prop named 'fit' for determining if the graph height should grow or be contained. 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. 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/.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/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/.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. 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/.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`. diff --git a/.github/workflows/automate_merge_message.yml b/.github/workflows/automate_merge_message.yml new file mode 100644 index 0000000000..aaeb0533a1 --- /dev/null +++ b/.github/workflows/automate_merge_message.yml @@ -0,0 +1,63 @@ +name: Automate merge message +on: + pull_request_target: + 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/docs/assets/getting-started/sidebar-submenu-example.png b/docs/assets/getting-started/sidebar-submenu-example.png new file mode 100644 index 0000000000..0b30f0ca6a Binary files /dev/null and b/docs/assets/getting-started/sidebar-submenu-example.png differ diff --git a/docs/getting-started/app-custom-theme.md b/docs/getting-started/app-custom-theme.md index 146f160d71..5ec0d6eeab 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 Sub-menu + +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: + + ```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 sub-menu appear with links to the various Kinds in your Catalog. It would look like this: + +![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) + ## Custom Homepage In addition to a custom theme, a custom logo, you can also customize the diff --git a/packages/app/src/components/Root/Root.tsx b/packages/app/src/components/Root/Root.tsx index 41e5b15db9..8cec54326a 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,47 @@ export const Root = ({ children }: PropsWithChildren<{}>) => ( }> {/* Global nav, not org-specific */} - + + + + + + + + + + + + + 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.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 new file mode 100644 index 0000000000..7d41a7a276 --- /dev/null +++ b/packages/backend-app-api/src/services/implementations/lifecycleService.ts @@ -0,0 +1,96 @@ +/* + * 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, + BackendLifecycleShutdownHook, +} from '@backstage/backend-plugin-api'; +import { Logger } from 'winston'; + +const CALLBACKS = ['SIGTERM', 'SIGINT', 'beforeExit']; +export class BackendLifecycleImpl { + constructor(private readonly logger: Logger) { + CALLBACKS.map(signal => process.on(signal, () => this.shutdown())); + } + + #isCalled = false; + #shutdownTasks: Array = + []; + + addShutdownHook( + options: BackendLifecycleShutdownHook & { pluginId: string }, + ): void { + this.#shutdownTasks.push(options); + } + + 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 => + Promise.resolve() + .then(() => hook.fn()) + .catch(e => { + this.logger.error( + `Shutdown hook registered by plugin '${hook.pluginId}' failed with: ${e}`, + ); + }) + .then(() => + this.logger.info( + `Successfully ran shutdown hook registered by plugin ${hook.pluginId}`, + ), + ), + ), + ); + } +} + +class PluginScopedLifecycleImpl implements BackendLifecycle { + constructor( + private readonly lifecycle: BackendLifecycleImpl, + private readonly pluginId: string, + ) {} + addShutdownHook(options: BackendLifecycleShutdownHook): void { + this.lifecycle.addShutdownHook({ ...options, pluginId: this.pluginId }); + } +} + +/** + * Allows plugins to register shutdown hooks that are run when the process is about to exit. + * @public */ +export const lifecycleFactory = createServiceFactory({ + service: lifecycleServiceRef, + deps: { + logger: rootLoggerServiceRef, + plugin: pluginMetadataServiceRef, + }, + async factory({ logger }) { + const rootLifecycle = new BackendLifecycleImpl( + loggerToWinstonLogger(logger), + ); + 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..b73a85c32e 100644 --- a/packages/backend-plugin-api/api-report.md +++ b/packages/backend-plugin-api/api-report.md @@ -24,6 +24,16 @@ export interface BackendFeature { register(reg: BackendRegistrationPoints): void; } +// @public (undocumented) +export interface BackendLifecycle { + addShutdownHook(options: BackendLifecycleShutdownHook): void; +} + +// @public (undocumented) +export type BackendLifecycleShutdownHook = { + fn: () => void | Promise; +}; + // @public (undocumented) export interface BackendModuleConfig { // (undocumented) @@ -158,6 +168,9 @@ export interface HttpRouterService { // @public (undocumented) export const httpRouterServiceRef: ServiceRef; +// @public (undocumented) +export const lifecycleServiceRef: ServiceRef; + // @public (undocumented) export interface Logger { // (undocumented) diff --git a/packages/backend-plugin-api/src/services/definitions/index.ts b/packages/backend-plugin-api/src/services/definitions/index.ts index e5f032ef60..cf997a344d 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, + 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 new file mode 100644 index 0000000000..15610e2643 --- /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 BackendLifecycleShutdownHook = { + fn: () => void | Promise; +}; + +/** + * @public + **/ +export interface BackendLifecycle { + /** + * Register a function to be called when the backend is shutting down. + */ + addShutdownHook(options: BackendLifecycleShutdownHook): void; +} + +/** + * @public + */ +export const lifecycleServiceRef = createServiceRef({ + id: 'core.lifecycle', + scope: 'plugin', +}); 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/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; diff --git a/packages/core-components/package.json b/packages/core-components/package.json index 4a7fec9ef1..93ccbfb98a 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/packages/core-components/src/components/DependencyGraph/DependencyGraph.tsx b/packages/core-components/src/components/DependencyGraph/DependencyGraph.tsx index 5159f67d9e..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(); @@ -223,6 +232,9 @@ export function DependencyGraph( const maxWidth = Math.max(graphWidth, containerWidth); const maxHeight = Math.max(graphHeight, containerHeight); + const minHeight = Math.min(graphHeight, containerHeight); + + const scalableHeight = fit === 'grow' ? maxHeight : minHeight; const containerRef = React.useMemo( () => @@ -394,7 +406,7 @@ export function DependencyGraph( ref={containerRef} {...svgProps} width="100%" - height={maxHeight} + height={scalableHeight} viewBox={`0 0 ${maxWidth} ${maxHeight}`} > 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' }], + }, + }, ], }, }, 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); }, }); diff --git a/plugins/codescene/package.json b/plugins/codescene/package.json index f18267e5bc..42e4b6ecf1 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/cost-insights/README.md b/plugins/cost-insights/README.md index cc90b4d7a2..f65194551a 100644 --- a/plugins/cost-insights/README.md +++ b/plugins/cost-insights/README.md @@ -178,6 +178,21 @@ 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: + locale: nl-NL + options: + currency: EUR + minimumFractionDigits: 3 +``` + ### 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. diff --git a/plugins/cost-insights/api-report.md b/plugins/cost-insights/api-report.md index dd4e404450..b4c818f1e4 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: 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 4144b6d6a5..5317485555 100644 --- a/plugins/cost-insights/config.d.ts +++ b/plugins/cost-insights/config.d.ts @@ -21,6 +21,58 @@ export interface Config { */ engineerCost: number; + /** + * @visibility frontend + */ + 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/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..fa4ae18e24 100644 --- a/plugins/cost-insights/src/components/BarChart/BarChart.tsx +++ b/plugins/cost-insights/src/components/BarChart/BarChart.tsx @@ -40,20 +40,24 @@ 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: Intl.NumberFormat) => { + 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(tooltipItemOf(baseCurrency)).filter(notEmpty); + return ( + + {items.map((item, index) => ( + + ))} + + ); + }; + return tooltip; }; /** @public */ @@ -69,12 +73,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 +170,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 6433ab472c..842e76c991 100644 --- a/plugins/cost-insights/src/components/CostOverviewCard/CostOverviewBreakdownChart.tsx +++ b/plugins/cost-insights/src/components/CostOverviewCard/CostOverviewBreakdownChart.tsx @@ -16,42 +16,42 @@ 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 { DEFAULT_DATE_FORMAT, CostInsightsTheme } from '../../types'; import { Cost } from '@backstage/plugin-cost-insights-common'; 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[]; @@ -66,6 +66,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); @@ -186,9 +187,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(Number(p.value), i), + value: formatGraphValueWith(Number(p.value), i), fill: p.color!, })); const expandText = ( @@ -254,7 +256,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 e5b0c59684..1e05a7ac0d 100644 --- a/plugins/cost-insights/src/components/CostOverviewCard/CostOverviewChart.tsx +++ b/plugins/cost-insights/src/components/CostOverviewCard/CostOverviewChart.tsx @@ -46,7 +46,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; @@ -63,6 +64,7 @@ export const CostOverviewChart = ({ }: CostOverviewChartProps) => { const theme = useTheme(); const styles = useStyles(theme); + const { baseCurrency } = useConfig(); const data = { dailyCost: { @@ -104,6 +106,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) => ({ @@ -113,8 +116,8 @@ 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), + ? 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 @@ -155,7 +158,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 b0c35da493..f804031d6f 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 '@backstage/plugin-cost-insights-common'; +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 24115e830a..affb16cb30 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 } from '../../types'; @@ -26,6 +26,7 @@ import { Entity, } from '@backstage/plugin-cost-insights-common'; import { Table, TableColumn } from '@backstage/core-components'; +import { useConfig } from '../../hooks'; export type ProductEntityTableOptions = Partial< Pick @@ -39,36 +40,38 @@ type RowData = { change: ChangeStatistic; }; -function createRenderer(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.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. @@ -103,6 +106,7 @@ export const ProductEntityTable = ({ options, }: ProductEntityTableProps) => { const classes = useStyles(); + const { baseCurrency } = useConfig(); const entities = entity.entities[entityLabel]; const data = Object.assign( @@ -120,7 +124,7 @@ export const ProductEntityTable = ({ { field: 'label', title: {entityLabel}, - render: createRenderer('label', classes), + render: createRenderer(baseCurrency)('label', classes), customSort: createSorter('label'), width: '33.33%', }, @@ -130,7 +134,7 @@ export const ProductEntityTable = ({ {data.previousName} ), align: 'right', - render: createRenderer('previous', classes), + render: createRenderer(baseCurrency)('previous', classes), customSort: createSorter('previous'), }, { @@ -139,14 +143,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 751a37f67e..2976b1f30f 100644 --- a/plugins/cost-insights/src/components/ProductInsightsCard/ProductInsightsChart.tsx +++ b/plugins/cost-insights/src/components/ProductInsightsCard/ProductInsightsChart.tsx @@ -51,7 +51,8 @@ import { import { Duration } from '../../types'; import { Entity, Maybe } from '@backstage/plugin-cost-insights-common'; import { choose } from '../../utils/change'; -import { TooltipRenderer } from '../../types/Tooltip'; +import { TooltipRenderer } from '../../types'; +import { useConfig } from '../../hooks'; export type ProductInsightsChartProps = { billingDate: string; @@ -66,6 +67,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(() => { @@ -132,7 +134,7 @@ export const ProductInsightsChart = ({ const id = label === '' ? null : label; const title = titleOf(label); - const items = payload.map(tooltipItemOf).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/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..6095f97d49 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 { createCurrencyFormat, defaultCurrencies } from '../utils/currency'; import { configApiRef, useApi } from '@backstage/core-plugin-api'; /* @@ -46,6 +46,11 @@ import { configApiRef, useApi } from '@backstage/core-plugin-api'; * default: true * metricB: * name: Metric B + * baseCurrency: + * locale: nl-NL + * options: + * currency: EUR + * minimumFractionDigits: 3 * currencies: * currencyA: * label: Currency A @@ -60,6 +65,7 @@ import { configApiRef, useApi } from '@backstage/core-plugin-api'; /** @public */ export type ConfigContextProps = { + baseCurrency: Intl.NumberFormat; metrics: Metric[]; products: Product[]; icons: Icon[]; @@ -72,6 +78,7 @@ export const ConfigContext = createContext( ); const defaultState: ConfigContextProps = { + baseCurrency: createCurrencyFormat(), metrics: [], products: [], icons: [], @@ -110,6 +117,42 @@ export const ConfigProvider = ({ children }: PropsWithChildren<{}>) => { return []; } + function getBaseCurrency(): Intl.NumberFormat { + const baseCurrency = c.getOptionalConfig('costInsights.baseCurrency'); + if (baseCurrency) { + const options = baseCurrency.getOptionalConfig('options'); + return new Intl.NumberFormat( + baseCurrency.getOptionalString('locale'), + options + ? { + localeMatcher: options.getOptionalString('localeMatcher'), + style: 'currency', + 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; + } + function getCurrencies(): Currency[] { const currencies = c.getOptionalConfig('costInsights.currencies'); if (currencies) { @@ -141,6 +184,7 @@ export const ConfigProvider = ({ children }: PropsWithChildren<{}>) => { } function getConfig() { + const baseCurrency = getBaseCurrency(); const products = getProducts(); const metrics = getMetrics(); const engineerCost = getEngineerCost(); @@ -152,6 +196,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..bdba7c26fb 100644 --- a/plugins/cost-insights/src/testUtils/providers.tsx +++ b/plugins/cost-insights/src/testUtils/providers.tsx @@ -15,19 +15,15 @@ */ 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 { Group, Duration } from '../types'; - -export const MockGroups: Group[] = [{ id: 'tech' }, { id: 'mock-group' }]; +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 { Duration } from '../types'; +import { createCurrencyFormat } from '../utils/currency'; export type MockFilterProviderProps = PropsWithChildren< Partial @@ -85,6 +81,7 @@ export const MockConfigProvider = (props: MockConfigProviderProps) => { const { children, ...context } = props; const defaultContext: ConfigContextProps = { + baseCurrency: createCurrencyFormat(), metrics: [], products: [], icons: [], diff --git a/plugins/cost-insights/src/utils/currency.ts b/plugins/cost-insights/src/utils/currency.ts index 60115aad3a..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) { @@ -61,3 +61,12 @@ export const defaultCurrencies: Currency[] = [ rate: 5.5, }, ]; + +export const createCurrencyFormat = ( + 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 8bf0a6a9d7..1190ac17ae 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 { createCurrencyFormat } 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.format(val), + lengthyCurrencyFormatter(createCurrencyFormat()).format(val), ); expect(formattedValues).toEqual([ '$0.00000041', @@ -49,6 +50,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(createCurrencyFormat('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/formatters.ts b/plugins/cost-insights/src/utils/formatters.ts index e9b19097a4..fd3fb4c0ef 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 currencyFormatter = (currency: Intl.NumberFormat) => { + const options = currency.resolvedOptions(); -export const currencyFormatter = new Intl.NumberFormat('en-US', { - style: 'currency', - currency: 'USD', - minimumFractionDigits: 0, - maximumFractionDigits: 0, -}); + return new Intl.NumberFormat(options.locale, { + style: 'currency', + currency: options.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: Intl.NumberFormat) => { + const options = currency.resolvedOptions(); + + return new Intl.NumberFormat(options.locale, { + style: '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 new file mode 100644 index 0000000000..72749d7682 --- /dev/null +++ b/plugins/cost-insights/src/utils/graphs.test.ts @@ -0,0 +1,47 @@ +/* + * 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'; +import { createCurrencyFormat } from './currency'; + +describe('graphs', () => { + it('formatGraphValue', () => { + expect(formatGraphValue(createCurrencyFormat('SEK'))(1000, 0)).toEqual( + 'SEK 1,000', + ); + expect(formatGraphValue(createCurrencyFormat('EUR'))(1000, 0)).toEqual( + '€1,000', + ); + expect(formatGraphValue(createCurrencyFormat('USD'))(1000, 0)).toEqual( + '$1,000', + ); + }); + it('tooltipItemOf', () => { + expect( + tooltipItemOf(createCurrencyFormat('EUR'))({ + value: '1000', + color: 'red', + dataKey: DataKey.Current, + name: 'Kubernetes', + }), + ).toEqual({ + fill: 'red', + label: 'Kubernetes', + value: '€1,000.00', + }); + }); +}); diff --git a/plugins/cost-insights/src/utils/graphs.ts b/plugins/cost-insights/src/utils/graphs.ts index 172f6cd7e3..896d09f865 100644 --- a/plugins/cost-insights/src/utils/graphs.ts +++ b/plugins/cost-insights/src/utils/graphs.ts @@ -23,44 +23,43 @@ import { lengthyCurrencyFormatter, } from './formatters'; -export function formatGraphValue( - value: number, - _index: number, - format?: string, -) { - if (format === 'number') { - return value.toLocaleString(); - } +export const formatGraphValue = + (baseCurrency: Intl.NumberFormat) => + (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) => { - const value = - typeof payload.value === 'number' - ? currencyFormatter.format(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, 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/plugins/explore/src/components/GroupsExplorerContent/GroupsDiagram.tsx b/plugins/explore/src/components/GroupsExplorerContent/GroupsDiagram.tsx index 23553b8b76..674ef1e43f 100644 --- a/plugins/explore/src/components/GroupsExplorerContent/GroupsDiagram.tsx +++ b/plugins/explore/src/components/GroupsExplorerContent/GroupsDiagram.tsx @@ -43,8 +43,10 @@ import useAsync from 'react-use/lib/useAsync'; const useStyles = makeStyles((theme: BackstageTheme) => ({ graph: { - flex: 1, - minHeight: 0, + minHeight: '100%', + }, + graphWrapper: { + height: '100%', }, organizationNode: { fill: theme.palette.secondary.light, @@ -62,6 +64,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, }, @@ -221,7 +232,7 @@ export function GroupsDiagram() { } return ( - <> +
+ - Use pinch & zoom - to move around the diagram. + Use pinch & zoom to move around the + diagram. - +
); } 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/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; 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..01ffe7e58b 100644 --- a/plugins/org-react/src/components/GroupListPicker/GroupListPickerButton.tsx +++ b/plugins/org-react/src/components/GroupListPicker/GroupListPickerButton.tsx @@ -22,8 +22,7 @@ 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', @@ -32,10 +31,13 @@ const useStyles = makeStyles((theme: BackstageTheme) => ({ fontSize: '1.5rem', fontStyle: 'normal', fontWeight: theme.typography.fontWeightBold, + height: '32px', letterSpacing: '-0.25px', - lineHeight: '32px', marginBottom: 0, + marginLeft: '4px', + textAlign: 'left', textTransform: 'none', + width: '100%', }, icon: { transform: 'scale(1.5)', diff --git a/plugins/sonarqube/package.json b/plugins/sonarqube/package.json index d8f54b80f5..1ea59e61f8 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/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}'`, 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); +}); 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 12417af790..2793196219 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.215.0": + version: 3.215.0 + resolution: "@aws-sdk/abort-controller@npm:3.215.0" dependencies: - "@aws-sdk/types": 3.183.0 + "@aws-sdk/types": 3.215.0 tslib: ^2.3.1 - checksum: 28f5bc16b5aba414e354df603bc8becd010aa8c9b3c79e527130723a39f21d5a3df98c3bafb3cea733d415a5b042af90098ffa9dfa29d400114c2f6f5292524e + checksum: eda64e8f93885a20b889374c6ae068799f9ee5ef91850a9c07e29465734a83c33b4bd37d961a61a2ff0c64ed18651a9878db40b1d7bb39aef4338a9167bfb605 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.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.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.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.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: fe0a7ba53cac4d52c25a4a4f1a1bb16438d5011347fcfec037df1d73379d750cd47b437f7a45aea2d4e29bc92587b51dd7631a06f5d6881e3b67b2d4c0dd2633 + checksum: fb62353c5b03369aab049e48c2c262ae5acf78663d9ef05ee951581594b14772d37fe66500564be78dd37ef270700835a8866753dc8295d2b47164ccaff27312 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.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.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.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.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: 6909329cf87c1a0c830fa9657e04c7e1ae496d7d79cc0a6813999503ae809f245f0b879af1d5564a5d97c2c69583c8a4df702d29ec7dc75934d98a0cdf017ad3 + checksum: d53e56e3a4fecdfedaaf5d633381bf668d828b7f8711a5a3040f045069eab1a80a2e3ba808122d9e0a13fc621a507a551861927e907b50242792424dabd30772 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.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.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.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.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: d4492e537803d64e5fc0c5db8ac3a3788204aadc14b21e4fb407188feb58b35689c4a6878b4f13123a5f35f7e9fa01d95d427be168aeec9072aea881f2a92fb7 + checksum: 0408ef93d3e378aec746cc2eb14b2429de49c0a2599519906e9c7e726ab264e300453f6b486282954bf3148073982b12f9aad1f6cdd767045a4dfc891ee56a91 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.215.0": + version: 3.215.0 + resolution: "@aws-sdk/client-sts@npm:3.215.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.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.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: 1be0ab79d5019f7502a7aee8c740f4e381ab7501ed639569526a4a7e1c70ad6bb36d642a8a2b18afe58c34497c6f2f8244dbf05211a0f6bc9a57e5e379c70b2b + checksum: 8a0d3a63f1e22320287d8eda20ce63026c4aeaf7c6f809769be9c03e2baa88b68139aaf7c7119cd5f9befb4578657aec6a09e12d4eeee6cd664dc9f5163988fb 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.215.0": + version: 3.215.0 + resolution: "@aws-sdk/config-resolver@npm:3.215.0" dependencies: - "@aws-sdk/property-provider": 3.183.0 - "@aws-sdk/types": 3.183.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.215.0 tslib: ^2.3.1 - checksum: 4281e14c286cc5c57c69ba88c49fe1c1ff61f27923db5e8f852a84cce02b40fdc938f876ad08e72005deae9a28fab7400f747f63ca50f9c4d60e04e6c2705205 + checksum: d2ec1ca0da965a0baa4610a43186654dbacdab697b826ff9ebaff3004e4cd472a17e4757ea3eac463dd88390a8ae8475090b7d88cd2a2a5cdcb99a4dbf3835d4 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.215.0": + version: 3.215.0 + resolution: "@aws-sdk/credential-provider-env@npm:3.215.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.215.0 + "@aws-sdk/types": 3.215.0 tslib: ^2.3.1 - checksum: e9fe1007b22825dc0c033beb2057b9f759d8cafec6e65d08ba4915bccb9b7d737eeccb3d06e9768a084b6726d9ea10778172b1bec695353c60276c1a5c21370e + checksum: fa878a7dc53e964aa6228b5879c419b6e8aebc74b1e560df8980ec51b40a998d0a43eab8c5ab366c6afae831b43d88310e776cea3f5cfdb4755067cbefde1be4 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.215.0": + version: 3.215.0 + resolution: "@aws-sdk/credential-provider-imds@npm:3.215.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.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: c7784a3674c863dacc1305a08dd63cb16d1e7374250b0ceafa9feee8344de4228d7c32e84fbaa9d963adab69eb3938cd75b99554756da120cd9beae4693eded9 + checksum: 341e1c1af4a3908e635558791b67346bba31ff0d6b6c5a44e1b4af912eda3163ec1edc8933c9f5e123979b0e179a160505a2407efff15c9597e91521783167b7 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.215.0": + version: 3.215.0 + resolution: "@aws-sdk/credential-provider-ini@npm:3.215.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.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: f23e1148054a96d68632284501ba01c4285cce1a2f4562817ec4b7fa315ff56e2f6b97fae0d2ae26fd52fca8c9f000be5d72a3582cff6c32ba10010f02a30977 + checksum: c1644c8eb42d1275c81f94aef5e159a77bb5c48187985d628ab67b52cc6f02dcfc15aff37331ba9abef5b6e327818ea56679b2aef1cca8c02674899043709fee 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.215.0": + version: 3.215.0 + resolution: "@aws-sdk/credential-provider-node@npm:3.215.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.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: 3109e79ec2b4647f5e7f78c6dc2e10cd8a34a70147e7e90549153b7ff3ff12eda3499b3189d6fc1f3b99f461d5445e8017b44cd50029d30b0fc7437ad88a5f38 + checksum: 7b8d978e9b93a6e076e3e591e9aca2f96befacb6d570ead8ab587e63e4a8e2dff5e4dd374a381c4ce3db5ee6b1c8cb4972025f68c07d5eb31c3a1f8d49ce80fe 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.215.0": + version: 3.215.0 + resolution: "@aws-sdk/credential-provider-process@npm:3.215.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.215.0 + "@aws-sdk/shared-ini-file-loader": 3.215.0 + "@aws-sdk/types": 3.215.0 tslib: ^2.3.1 - checksum: 8775894ef50499361a4b49d846417c2c1e1ea90383730a32428154628358e7847f6f29dddd3cd04d3a4e15c1343fe10b051a92863055989ac3c4cb241e68f63a + checksum: 5e8f70e94fc4ec0d347e96b65bd18faba93c9ff7b30f9f24268789bcaa121905295c7fc575ca29842484a6315b3772214dac2621b1b85184c4ded9f924aec5c8 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.215.0": + version: 3.215.0 + resolution: "@aws-sdk/credential-provider-sso@npm:3.215.0" dependencies: - "@aws-sdk/property-provider": 3.183.0 - "@aws-sdk/types": 3.183.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: c39576c8f35137284fc69db8d94adcf07fa89d51153ee9710481262e205d485ff089a796e8a253aa14a0434dde91eadb65602fc614167a4f14301201ee840c08 + checksum: 54f17a4fad43194d0ed458534df67bfe5602703bf503e68271c8774e8a76676d102a59041204e7781978a5a0904ceb74b04e0d950c307be3b989c28af71eccc4 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.215.0": + version: 3.215.0 + resolution: "@aws-sdk/credential-provider-web-identity@npm:3.215.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.215.0 + "@aws-sdk/types": 3.215.0 tslib: ^2.3.1 - checksum: 87c51d1dad8c469e32b99f6ed3729e753097cd4a9f8f417ec8681cf01e18b9a5dc6571f3cd1220293216bd4527b8499bb2ea1f821a240fde6d9560817c120066 + checksum: f012d3789817c42487a66058c7efadc95aa17afa02a7c652821c79195e18f20884e6b02c9b74e2a2260682f49349f7a8e9b524d3b0e1db4cace8a01a7f7dacf3 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.215.0": + version: 3.215.0 + resolution: "@aws-sdk/fetch-http-handler@npm:3.215.0" dependencies: - "@aws-sdk/types": 3.183.0 - "@aws-sdk/util-buffer-from": 3.183.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: fbed8757df633620807594535e3bb7d387576e0c2f89ad16dc7c98405a9d1d9743bea50148186de2f19cac67144b30f7f89e6c15317ddd7b8c0c8f61ca9556ef + checksum: 7031944b65100023fdee709d4c38845fc5fe7ab01d3fabdd8fb13c32a326811c1ddcc201f6171fe5847b4bebd171a6a37c77068c5439ee29acf38078e16ef556 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.215.0": + version: 3.215.0 + resolution: "@aws-sdk/hash-node@npm:3.215.0" dependencies: - "@aws-sdk/types": 3.183.0 + "@aws-sdk/types": 3.215.0 + "@aws-sdk/util-buffer-from": 3.208.0 tslib: ^2.3.1 - checksum: d928ca26d4390ad4f5e2c8198d16e14b675face6ad8c4a4eef699b54ce3f6cba584456659287b0e57e9f9019bc456b51dfa474671e11bf555fe04ed16174c10c + checksum: 8d50f46c195b48304ba69107adf31e3380a1952920c373031c5ed31f936300c24b492ad477ae3e868a73834cffc78177294bee2a683904133ca516ebb3b64bef 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.215.0": + version: 3.215.0 + resolution: "@aws-sdk/invalid-dependency@npm:3.215.0" dependencies: + "@aws-sdk/types": 3.215.0 tslib: ^2.3.1 - checksum: 717e508989821434a2ace4f690fc599f67b3f28ee9de5f06fce65a296fe11a68a5b97f30d66bfbf490d4a83259e4ffa1f0321231e4a54ce2440a9c6fdbacde24 + checksum: f3ba901c3884c943909ec344bd5e17cdb13a5246a53d1e8e33fda036f45cb944dcfb52ef948d04d1d27cf514ef711ef65d1f2c3cc5048624b8fc49493d72837f 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.215.0": + version: 3.215.0 + resolution: "@aws-sdk/md5-js@npm:3.215.0" dependencies: - "@aws-sdk/protocol-http": 3.183.0 - "@aws-sdk/types": 3.183.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: bf3ec6872a925dbafd91e57334b6264e8446ca59eba598ee4bc7b37113c466300ac6b77ab314c4aa2859221f1f4e98beabbd365346e0815d591f276e642d1849 + checksum: 7e51e56cd4c1a91ec00c2d97dfa895497d5755a59feeb0a83eec871c2b6c62b2f0623d7a057b9670c871aea0010abe384236190944d0ecd913e61bf95526d0bc 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.215.0": + version: 3.215.0 + resolution: "@aws-sdk/middleware-content-length@npm:3.215.0" dependencies: - "@aws-sdk/protocol-http": 3.183.0 - "@aws-sdk/types": 3.183.0 + "@aws-sdk/protocol-http": 3.215.0 + "@aws-sdk/types": 3.215.0 tslib: ^2.3.1 - checksum: b4c4886976cffec614ff368daa995a69c765e737c8d366daa0033d781cf8e7483565bb3627ecd752698edc23dcf578de6657c9e8cb41c0fcd92631d17b7749b8 + checksum: 7f41e88463faa0134be2c57bae62cd3c48fd2e6973d987e10a72f3c5cabc238cf5f59a9a8d6e92f5989e460f668f03c3b034fe54192391314de2431f77681aae 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.215.0": + version: 3.215.0 + resolution: "@aws-sdk/middleware-endpoint@npm:3.215.0" dependencies: - "@aws-sdk/types": 3.183.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.215.0 tslib: ^2.3.1 - checksum: 10ffb6af0f81b0144fef91af2bbeaeb680df2beff838f2a6ebcc260971fd6252a166e3bf3501c1fc00f6f8f203117ff6e2b4baebb7a6d8cd8504b7e1f392bd6d + checksum: cf57854b88ca43874e25dd4d160525a9cf0844319fb20bfdbfe6100570724ecafaf1c0014c803ee477ad85fd2a2b80686ec8e7b2ae69118ac3453b05f4bffc0f 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.215.0": + version: 3.215.0 + resolution: "@aws-sdk/middleware-host-header@npm:3.215.0" dependencies: - "@aws-sdk/protocol-http": 3.183.0 - "@aws-sdk/types": 3.183.0 + "@aws-sdk/protocol-http": 3.215.0 + "@aws-sdk/types": 3.215.0 tslib: ^2.3.1 - checksum: 461117e0dc8c38750942035a07163817bc8e89f377211f5fb52d4314acae4e7e6cb49be04193c508112833535b33814c1609196cb65e38cff1122043398ad89e + checksum: 461158ce46c5ca089d12a63b37ed064cc584b48d6b49523c11bcb690fdf811fb3d5603554d5f92c58dcf26d4948308cd7433d7a26c20a934d07e816cbf67a3a3 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.215.0": + version: 3.215.0 + resolution: "@aws-sdk/middleware-logger@npm:3.215.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.215.0 + tslib: ^2.3.1 + checksum: 7d90e2195e68e1e7c04f52f8b8bdbbcc800f879200082892668477d17ae064beb6e7352540f262758b004d40560039426f6971396569c79eb9b4a51cba701081 + languageName: node + linkType: hard + +"@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.215.0 + "@aws-sdk/types": 3.215.0 + tslib: ^2.3.1 + checksum: 0bf6eda1208cc39ac92ce25b82c8cddae990c960096d5cffc57646d8fddfa5e3bcfff44cf6a99e1a60b613f48bdc015a6e056c55b790a996db7b3dddf47867eb + languageName: node + linkType: hard + +"@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.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: 76fa3f9fe5f1c67bbfa792611289edf0afa2d0271073039931ac9ea46b3f432d74692d2db55443f40b7e97014898454f6d4bd8d2f2f5714a4281428b7464efac + checksum: 6b5d5d9a370e2c46df14654f38ae9aab639dc429f216155556706352dc607c24ad79ff5c03533c8f5e40134e6d5209ce77b3856e0ba49c93ce93255da7b3c6fe 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.215.0": + version: 3.215.0 + resolution: "@aws-sdk/middleware-sdk-sqs@npm:3.215.0" dependencies: - "@aws-sdk/types": 3.183.0 - "@aws-sdk/util-hex-encoding": 3.183.0 + "@aws-sdk/types": 3.215.0 + "@aws-sdk/util-hex-encoding": 3.201.0 tslib: ^2.3.1 - checksum: 0bb914b2e7a5391f5b22a5262a5c299fa7e3eb22076d00c4cfffb449e97404b4830a77bb742e8f3110d66f15ae9aad81ea740238799cc35bb8d328eaf13f3fe2 + checksum: f09a4ca9701bd4687c1cfa764e98f88c672d36a0c4b39d66e5da3f3c022457764d7c5aee76373b753e5f4cb332be65db21552862354b2f96ce05a30a137927c4 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.215.0": + version: 3.215.0 + resolution: "@aws-sdk/middleware-sdk-sts@npm:3.215.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.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: 1969d6128d24cc7d8ff199c2900d805281928668f4dc3ffd128065ccfe515f9f7467a265af276592009bd285847cb9298f8ba4b1dfbe33971c3e7de80986b422 + checksum: bace7de141bef58b491d837e00ad4e0acbf6c4f79b8af80e0665dc36aa0cf31a21aa18101a1390096af11a76c5ffacf25995c1cf998874576b35ffd1a5146b3f 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.215.0": + version: 3.215.0 + resolution: "@aws-sdk/middleware-serde@npm:3.215.0" dependencies: - "@aws-sdk/types": 3.183.0 + "@aws-sdk/types": 3.215.0 tslib: ^2.3.1 - checksum: 7495bb2adceab2c686588697fd9dd50a859706a8d33d98d9907ffc8f9ef78af141f2654cdac8d7b28b1f0544dcf2e52f25d109f5da1348102234ab5b4e79b256 + checksum: 45caf42bc4aaa6e1c7fd16fd8f219c0629c939c3adfb8274b6a6fed1e62ff1237ee208e387352655580a9a6c8d7fef704cff1f6f51b5bc237b98fee7b193a959 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.215.0": + version: 3.215.0 + resolution: "@aws-sdk/middleware-signing@npm:3.215.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.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: 8025499acfefc072511adbc5084a1ed3cfe9cd9e514c58045425c87538af72ad3adfc134f7d0a059ff52832da392b4679b62d4ad28e477b866a20e78370f0758 + checksum: a1c8c9b1a0cbde5f64ce5779f8e05494ffeed07bb7e6fe454baf9accf92bd5758dbb09cf0b5ae3f03d081e193af6197ff24659746d390d7e0c2f959f9014c073 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.215.0": + version: 3.215.0 + resolution: "@aws-sdk/middleware-stack@npm:3.215.0" dependencies: tslib: ^2.3.1 - checksum: 03136847b96b0e4baba9b64f53a6c6b5738b1fa2c645edb3f47c1f85082791549b423ea791af33e9da3507cd56fbcbd052f1ba773a9f45ea42a3647277e85264 + checksum: dc9c99969d178857ab975387f6326eb3c65fe1679087de719ea3dd25a3973bea310778ae45c61891de9cc41ce640f483dc9ff4f62af6669f3124029277f870aa 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.215.0": + version: 3.215.0 + resolution: "@aws-sdk/middleware-user-agent@npm:3.215.0" dependencies: - "@aws-sdk/protocol-http": 3.183.0 - "@aws-sdk/types": 3.183.0 + "@aws-sdk/protocol-http": 3.215.0 + "@aws-sdk/types": 3.215.0 tslib: ^2.3.1 - checksum: 8d1001d6d30f0f56aa440c541f6dcee9aad9190837e7a9653aef35448ff13e644cb7a441373192134ac86b5741fa64a120add07202cb97674018bd44612acdf7 + checksum: 054f10a197876acc32d1903575855870edc9f5fe1fd7809dda47210e1b0717c7604e3cd916b34df7aa9f5cbe1ad9fa85934913ec51109a2740e3aed450587633 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.215.0": + version: 3.215.0 + resolution: "@aws-sdk/node-config-provider@npm:3.215.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.215.0 + "@aws-sdk/shared-ini-file-loader": 3.215.0 + "@aws-sdk/types": 3.215.0 tslib: ^2.3.1 - checksum: 673fb105de8d11ddd1c3e636c7ed01ef4fbe412a7d96543d9db69149dfad64d33adf5b96b106763c058190841ea497f220e1b75ca438dbda7b34729f00b9e823 + checksum: a23677a836a43bd0d4dd00cab64c42d1c69eafe8ccb833ea08a7b43ab0e891ad67a96757610fdd48a6d1cd749c29aaa1de14d894468c9e79e987e13d979c4382 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.215.0": + version: 3.215.0 + resolution: "@aws-sdk/node-http-handler@npm:3.215.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.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: a24ee8cc4e3b63fdec0ebb671caa1e634af488befa7c93a28bb733bb532934c221f6c47707db20264af91ca84336a50b98427b425329b89aeac2a6d2be9537ff + checksum: 7b87cce3393553b9b2cd494aea49075fdafb8c7d9b4d61c44928e7e50f3f2909c6f57547ed504ce7b36b8dc17cc8fc8f0e882a7894898bb3cd5decc9e3de2d65 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.215.0": + version: 3.215.0 + resolution: "@aws-sdk/property-provider@npm:3.215.0" dependencies: - "@aws-sdk/types": 3.183.0 + "@aws-sdk/types": 3.215.0 tslib: ^2.3.1 - checksum: 6e8616e5f7efa9f46bdf62118dfc586e61dcdf0bc99f82305759020ce3d25fc1d2db71c62cfd4417a757a138b1a539cf305b584e6e7ade9bce9975fbe66fd326 + checksum: 0cb519ff8db962b2e65867b4ae5af12b0b517ace1e6f5d5f0a0f65790d087d734004b91454a2b97d842fc7799b0f0ebe4da7209360f627eac6c07af7e6ddb55b 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.215.0": + version: 3.215.0 + resolution: "@aws-sdk/protocol-http@npm:3.215.0" dependencies: - "@aws-sdk/types": 3.183.0 + "@aws-sdk/types": 3.215.0 tslib: ^2.3.1 - checksum: 13b255bcb37b70853d93374f972d743c80f33ac16188c41b512536c2dbec4d7beb55226bfac6d809981d63bbc87f6bf345334238f187da2faa9feaef5001e0a7 + checksum: fd1d6db6168c3129b5311b42937f56731de5b536c11ffed08f8f7e3e1bbda1732e2632f642e601dd4af32722b78d179827772ae4564cea03553395dfa01e02d2 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.215.0": + version: 3.215.0 + resolution: "@aws-sdk/querystring-builder@npm:3.215.0" dependencies: - "@aws-sdk/types": 3.183.0 - "@aws-sdk/util-uri-escape": 3.183.0 + "@aws-sdk/types": 3.215.0 + "@aws-sdk/util-uri-escape": 3.201.0 tslib: ^2.3.1 - checksum: a3de19863ccee4e8c9d5bbd719688ee1ffea02c3d90aad5e9c3eb04bed942ff8e5be0bfbc21ed03a968481abe2a2b1093e93b986b4111c468a9f3d3466b61f83 + checksum: 68584d4de16eea7c649bad71b938716917e53aa42aca9a9298a7a21b2dd2195d3e0e5719f0f4a16e448d18f4db6d8ae2ea4229dff4f6a8807712a81097b7aa4c 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.215.0": + version: 3.215.0 + resolution: "@aws-sdk/querystring-parser@npm:3.215.0" dependencies: - "@aws-sdk/types": 3.183.0 + "@aws-sdk/types": 3.215.0 tslib: ^2.3.1 - checksum: f05a03c46317c97f1b775f7c5be19365cf464396edc6b23c93efd5289ff1a8658883f7c9dde2cc7b74bb42b57f257bc212abae5d62100d23cdec5409fbffe468 + checksum: cfccb89aecadea63c3937e3db06690f2927aa32c8d98dd265151d971ee3221b570b715768a419777bf27a18f3c13509adbeccfbffd9e9d00ff90fbe648e36b22 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.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.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.215.0": + version: 3.215.0 + resolution: "@aws-sdk/shared-ini-file-loader@npm:3.215.0" dependencies: - "@aws-sdk/types": 3.183.0 + "@aws-sdk/types": 3.215.0 tslib: ^2.3.1 - checksum: 317fd0d8012559754f82b88fb386d2a01c19be1d3a0b6da3a6436f71701ed8cd8fbe3f5aa869fd7bbfb8dfb148cd9de02aa68e93001200c76ba9e0691e135773 + checksum: b0fcdc3bf81928d3822a5e7e7c088d5ce3c07b6fe4a29692a142226d3829fd1c8ee312cf5b8ee2056893cc6e4686df886641f7cd30e27e4bbd9fcb7ee6b21377 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.215.0": + version: 3.215.0 + resolution: "@aws-sdk/signature-v4@npm:3.215.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.215.0 + "@aws-sdk/util-hex-encoding": 3.201.0 + "@aws-sdk/util-middleware": 3.215.0 + "@aws-sdk/util-uri-escape": 3.201.0 tslib: ^2.3.1 - checksum: 6639a4925b194171907fc1cf61101470836f5a8fa363f3fcd7b70bbaa4c756f43e13ad93b575885218a68192c375295d359a7e91db370816bd8f39f9c158ba36 + checksum: 2bf3912bdf51c116abd2c3dcbbfdd669758b264066d4dd18353b984aaea2532ba6caef95043d1a58acf225a9ee59709c8593226f2acd779ad556c77b12fe0e4b 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.215.0": + version: 3.215.0 + resolution: "@aws-sdk/smithy-client@npm:3.215.0" dependencies: - "@aws-sdk/middleware-stack": 3.183.0 - "@aws-sdk/types": 3.183.0 + "@aws-sdk/middleware-stack": 3.215.0 + "@aws-sdk/types": 3.215.0 tslib: ^2.3.1 - checksum: 70866adfd91fb35721bcd8667d9a4638e306de6ddc22be37a5b3ea19dfc2a1404a7325992f7f56d635a3bfd3b0ffa159d32f17df35c47ada4724ad8d5bb8d1ce + checksum: 4fd6d5631b738d7e7edf957335fb60c743025812183f3def0b4f83469bff95297c3c870fea790152731da9f3bd80aca4634722f6303774ae4b80a95cc17ad568 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.215.0": + version: 3.215.0 + resolution: "@aws-sdk/token-providers@npm:3.215.0" dependencies: - "@aws-sdk/querystring-parser": 3.183.0 - "@aws-sdk/types": 3.183.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: 54c99d47e927368db12b6aa1fe4331a27461502355e0c18e99d8e05d9a114529d0b15965ff885cae8e19e49692ad44bf3c323ffdc535d7129deac900f286d1d5 + checksum: 6fc5c35dcde859906184a9b3839d13a57de69b3212895d969c3a20c124f4f0a9609fc502f89a2da68d1ede636839b24a48852f88bb7754f8bb48960b0be7ea5e 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.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.215.0": + version: 3.215.0 + resolution: "@aws-sdk/url-parser@npm:3.215.0" + dependencies: + "@aws-sdk/querystring-parser": 3.215.0 + "@aws-sdk/types": 3.215.0 + tslib: ^2.3.1 + checksum: 50221b570ddeb9255be9a7d1afbf9114cdba126dfa48b0c7cf7b0f55e5ca6581e6fa08bc119c7cc3fcceb43d9761bfe9a0e4e7e8a09b3cf010bb1518f0a8cd92 + 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.215.0": + version: 3.215.0 + resolution: "@aws-sdk/util-defaults-mode-browser@npm:3.215.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.215.0 + "@aws-sdk/types": 3.215.0 bowser: ^2.11.0 tslib: ^2.3.1 - checksum: 8ff54acf1684dd9d82ca13a522c5d2d7ee305511a2748f6e8ef7dc43e668798269e51455ac81b905a5b000a704fd5536f178c84425b8c431500e6a8dc1418135 + checksum: ed8a21c3d614f9b8ac64d2565c7106265d6fed0b8cda0e0b31b44f7be2fc3013aa79a9b5c113e7b016272c88d5547a07907a2f9ba626961f2b2d626866520c7e 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.215.0": + version: 3.215.0 + resolution: "@aws-sdk/util-defaults-mode-node@npm:3.215.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.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: 40665d251844c4add23e358d9171add7180e0f1fcd4bd99601f4bdd03daa2259fed2567fa200152e14c4d7b1acc1126997f5b4e74c569ee1032f9fee16e6b582 + checksum: 2dccee67d6fcc10ca5f93090b04851b561b638dacc9de1dedfc127323cdd0bd3f5bc8c5e27a87c90564b20805b8e9ba3992bebc023d76ce3d12e6f70005c7547 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.215.0": + version: 3.215.0 + resolution: "@aws-sdk/util-endpoints@npm:3.215.0" + dependencies: + "@aws-sdk/types": 3.215.0 + tslib: ^2.3.1 + checksum: 03fc9861fa28e95d4d4608b4c35a51dc96d07f0ddde843132762440f7b1208dd7d67b8fc6ae9c9aa2330ead6591012ba482517e65207be7537a0506c2e50df05 + 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.215.0": + version: 3.215.0 + resolution: "@aws-sdk/util-middleware@npm:3.215.0" dependencies: tslib: ^2.3.1 - checksum: e1a433aebae5e74b365ecb4a57e3c583e7b89697f24b0c9edde93b8ba358e92256550329efb7c6924c0a5037e1bad2b7a1c8ed1b6d02e1aaaa35bca502923752 + checksum: 19400d2560d70dbc0ec2087f4a76cb67ed28921028f851041da47cc55d00cc97520a5f2f0cbc1bd3a982f08d158073a32a4fa5cce5fe5459d0f734f0c20717e8 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.215.0": + version: 3.215.0 + resolution: "@aws-sdk/util-user-agent-browser@npm:3.215.0" dependencies: - "@aws-sdk/types": 3.183.0 + "@aws-sdk/types": 3.215.0 bowser: ^2.11.0 tslib: ^2.3.1 - checksum: 21349881a4069a09fb0f8c0f5a6d69e6659255008861817c5d9dada61bf032f0bd7d5735f01dbddbc310d228ea843fbec6ada9f83a4197909efd6ebadb364f6b + checksum: 29a66adec383886ded80abfb41e5c66f4c07d52af5a995aa084a8eae9f4af22caf73cf2e4dbebc86c080da5b8778fed178d941f819b18a9caa082aac62cfb3d6 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.215.0": + version: 3.215.0 + resolution: "@aws-sdk/util-user-agent-node@npm:3.215.0" dependencies: - "@aws-sdk/node-config-provider": 3.183.0 - "@aws-sdk/types": 3.183.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: 727d46842053f8f19789fee1550e235adff399559ef6c9b8dd0fe9edd7ac629a9b5c5849377553bfff37deba1ba9889d0c313f059f27cfc40a33895990c1f894 + checksum: 3f91d4bb57c4725fff15a1ef1b15b16026c38f02975af1b7567bc34fce4ef881968e1a871358f0d42f597a4ddb5c306e5bb9286809d075975715525b21f3213b 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 @@ -1100,17 +1172,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 +1215,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: @@ -3379,7 +3451,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 @@ -4988,7 +5060,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 @@ -5233,8 +5305,6 @@ __metadata: dependencies: "@backstage/backend-plugin-api": "workspace:^" "@backstage/cli": "workspace:^" - "@types/express": ^4.17.6 - express: ^4.17.1 languageName: unknown linkType: soft @@ -6934,7 +7004,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 @@ -7947,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 @@ -7977,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 @@ -7997,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 @@ -8178,16 +8248,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 @@ -8226,61 +8296,61 @@ __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.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 "@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": - version: 35.7.0 - resolution: "@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 "@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 @@ -8444,18 +8514,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 @@ -8489,39 +8559,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 @@ -8535,7 +8605,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 @@ -8724,15 +8794,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 +8928,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 +9010,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: @@ -12151,90 +12210,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 @@ -12258,7 +12317,7 @@ __metadata: optional: true bin: swcx: run_swcx.js - checksum: 4361252c928c487a02f526aecd8f3072b923244234c2701916944cf13c252b6d5ce2466caf3e0797d3e92e71a89d4a044f8577e51e8f7fe3af0fe30d94e94b13 + checksum: 752499e18f81df789a9737936b2a83ea1db34bb2f983c80b394766796d853fa7d30701b52b9cb30ba943ad15286d8316603149683f4c553a5493aa78d89a76e0 languageName: node linkType: hard @@ -12292,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 @@ -12314,7 +12373,7 @@ __metadata: optional: true react-native: optional: true - checksum: 38e293616aa04ccfe2fec47315c5b98f0b157ee6548b4dbb6a8ca01c90de113e437f5effbc82884f2d860bde54eeb07335e9ed4e233543c7039f717d9855ab9e + checksum: 2c2d4c5c8bab2cd978ddd42153d33f844bd24a17ebe42f269cc64ee2a031f60f980b441640172885d9fd156fe9abc74ffc800fb68c6b6f6ef4fe48ffadafff79 languageName: node linkType: hard @@ -12972,12 +13031,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 @@ -14623,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 @@ -14642,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" @@ -14664,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 @@ -15553,16 +15612,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 +15660,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 @@ -17905,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 @@ -17920,7 +17992,7 @@ __metadata: bin: conc: dist/bin/concurrently.js concurrently: dist/bin/concurrently.js - checksum: 7886e1c8559d2699ae1b62be8aca5d56c226966e252a2b9dd6077b3c1fd5397e98ef537c040fffa1de50418bd2616746eb9dd589a31ffb9056d4758b850a865b + checksum: f705c9a7960f1b16559ca64958043faeeef6385c0bf30a03d1375e15ab2d96dba4f8166f1bbbb1c85e8da35ca0ce3c353875d71dff2aa132b2357bb533b3332e languageName: node linkType: hard @@ -19758,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 @@ -19770,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 @@ -19928,7 +19999,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 @@ -19995,34 +20066,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 @@ -20060,100 +20132,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 +20246,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 +20361,7 @@ __metadata: optional: true bin: esbuild: bin/esbuild - checksum: ef5f339fae7e2abc4ec5484d4b301efdf40f580e043cbf8a66e19d6c91df82368a810abec61fd5e5db226f0c354f49c36616c9ea04c5412a142a050c10239bf7 + checksum: 9a194a310ac7d6989d1fe7354901d531d3b0d4cc1897a85a7cb9f1ae0fe8d82eb59747e63c91f676bab7bed8d6a1f28f620d49f043e7bd6203f9afe34031f739 languageName: node linkType: hard @@ -20543,26 +20615,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 @@ -20639,8 +20712,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 @@ -20683,7 +20756,7 @@ __metadata: text-table: ^0.2.0 bin: eslint: bin/eslint.js - checksum: 153b022d309e1b647a73b1bb0fa98912add699b06e279084155f23c6f2b5fc5abd05411fc1ba81608a24bbfaf044ca079544c16fffa6fc987b8f676c9960a2c4 + checksum: 1b793486b2ec80f0602d75fff7116f7c39a3286f523608a999eead9bec4154a06841785d2b4fb87f8292a94cf85778c1dbfaec727772a09c4d604fdb9ff0809a languageName: node linkType: hard @@ -21422,12 +21495,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 @@ -22218,14 +22293,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 @@ -22533,9 +22608,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 @@ -22548,13 +22623,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 @@ -23960,10 +24035,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 @@ -25248,9 +25323,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 @@ -27030,11 +27105,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 @@ -28875,7 +28950,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 +28964,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 +28976,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 @@ -31051,9 +31126,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 @@ -31067,7 +31142,7 @@ __metadata: "@protobufjs/utf8": ^1.1.0 "@types/node": ">=13.7.0" long: ^5.0.0 - checksum: f6b0e7cec29056cefb83902009b39d24ac14a6117b52bc9b291b29778dad010e42d5563a20045e4de89b880114f4214f984396c8296a0d1b22f5dc7d9fe6705e + checksum: ae41669b1b0372fb1d49f506f2d1f2b0fb3dc3cece85987b17bcb544e4cef7c8d27f480486cdec324146ad0a5d22a327166a7ea864a9b3e49cc3c92a5d3f6500 languageName: node linkType: hard @@ -31405,6 +31480,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" @@ -32302,7 +32391,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 +33174,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 +34509,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 @@ -34580,6 +34680,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"